利用python 实现微信公众号群发图片与文本消息功能
在微信公众号开发中,使用api都要附加access_token内容。因此,首先需要获取access_token。如下:
#获取微信access_token
def get_token():
payload_access_token={
'grant_type':'client_credential',
'appid':'xxxxxxxxxxxxx',
'secret':'xxxxxxxxxxxxx'
}
token_url='https://api.weixin.qq.com/cgi-bin/token'
r=requests.get(token_url,params=payload_access_token)
dict_result= (r.json())
return dict_result['access_token']
在群发图片时,需要提供已经上传图片的media_id。注意,群发图片的时候,必须使用接口:https://api.weixin.qq.com/cgi-bin/material/add_material 。
#获取上传文件的media_ID
#群发图片的时候,必须使用该api提供的media_ID
def get_media_ID(path):
img_url='https://api.weixin.qq.com/cgi-bin/material/add_material'
payload_img={
'access_token':get_token(),
'type':'image'
}
data ={'media':open(path,'rb')}
r=requests.post(url=img_url,params=payload_img,files=data)
dict =r.json()
return dict['media_id']
订阅号进行群发,必须通过分组id,首先需要获取所有的用户分组情况。
#查询所有用户分组信息
def get_group_id():
url="https://api.weixin.qq.com/cgi-bin/groups/get"
payload_id={
'access_token':get_token()
}
r=requests.get(url=url,params=payload_id)
result=r.json()
return result['groups']
需要选择一个分组进行群发,在这里我选择第一个有效的分组进行群发(即第一个分组用户数不为0的分组)。
#返回第一个有效的group 分组id
def get_first_group_id():
groups =get_group_id()
group_id =0
for group in groups:
if(group['count']!=0):
group_id=group['id']
break;
return group_id
下面的代码用于群发文本消息,群发给第一个有效的分组:
def send_txt_to_first_group(str='Hello World!'):
group_id =get_first_group_id()
pay_send_all={
"filter":{
"is_to_all":False,
"group_id":group_id
},
"text":{
"content":str
},
"msgtype":"text"
}
url="https://api.weixin.qq.com/cgi-bin/message/mass/sendall?access_token="+get_token()
#需要指定json编码的时候不会对中文转码为unicode,否则群发的消息会显示为unicode码,不能正确显示
r=requests.post(url=url,data=json.dumps(pay_send_all,ensure_ascii=False,indent=2))#此处的必须指定此参数
result=r.json()
#根据返回码的内容是否为0判断是否成功
return result['errcode']==0
下面的代码用于群发图片,群发给第一个有效的分组。
def send_img_to_first_group(path='/home/fit/Desktop/test.jpg'):
group_id =get_first_group_id()
pay_send_all={
"filter":{
"is_to_all":False,
"group_id":group_id
},
"image":{
"media_id":get_media_ID(path)
},
"msgtype":"image"
}
url="https://api.weixin.qq.com/cgi-bin/message/mass/sendall?access_token="+get_token()
r=requests.post(url=url,data=json.dumps(pay_send_all))
result=r.json()
#根据返回码的内容是否为0判断是否成功
return result['errcode']==0
以下是所有代码:
# -*- coding: utf-8 -*-
import requests
#首先获取access_token
import json #获取微信access_token
def get_token():
payload_access_token={
'grant_type':'client_credential',
'appid':'xxxxxxxxxx',
'secret':'xxxxxxxxx'
}
token_url='https://api.weixin.qq.com/cgi-bin/token'
r=requests.get(token_url,params=payload_access_token)
dict_result= (r.json())
return dict_result['access_token']
#获取上传文件的media_ID
#群发图片的时候,必须使用该api提供的media_ID
def get_media_ID(path):
img_url='https://api.weixin.qq.com/cgi-bin/material/add_material'
payload_img={
'access_token':get_token(),
'type':'image'
}
data ={'media':open(path,'rb')}
r=requests.post(url=img_url,params=payload_img,files=data)
dict =r.json()
return dict['media_id']
#查询所有用户分组信息
def get_group_id():
url="https://api.weixin.qq.com/cgi-bin/groups/get"
payload_id={
'access_token':get_token()
}
r=requests.get(url=url,params=payload_id)
result=r.json()
return result['groups']
#返回第一个有效的group 分组id
def get_first_group_id():
groups =get_group_id()
group_id =0
for group in groups:
if(group['count']!=0):
group_id=group['id']
break;
return group_id
def send_img_to_first_group(path='/home/fit/Desktop/test.jpg'):
group_id =get_first_group_id()
pay_send_all={
"filter":{
"is_to_all":False,
"group_id":group_id
},
"image":{
"media_id":get_media_ID(path)
},
"msgtype":"image"
}
url="https://api.weixin.qq.com/cgi-bin/message/mass/sendall?access_token="+get_token()
r=requests.post(url=url,data=json.dumps(pay_send_all))
result=r.json()
print result
#根据返回码的内容是否为0判断是否成功
return result['errcode']==0
def send_txt_to_first_group(str='Hello World!'):
group_id =get_first_group_id()
pay_send_all={
"filter":{
"is_to_all":False,
"group_id":group_id
},
"text":{
"content":str
},
"msgtype":"text"
}
url="https://api.weixin.qq.com/cgi-bin/message/mass/sendall?access_token="+get_token()
#需要指定json编码的时候不会对中文转码为unicode,否则群发的消息会显示为unicode码,不能正确显示
r=requests.post(url=url,data=json.dumps(pay_send_all,ensure_ascii=False,indent=2))#此处的必须指定此参数
result=r.json()
#根据返回码的内容是否为0判断是否成功
return result['errcode']==0
if(send_txt_to_first_group("祝你合家欢乐,幸福美满!")):
print 'success!'
else:
print 'fail!'
附录:在使用微信测试订阅号测试群发图片接口的时候,返回码如下:
{u'errcode': 45028, u'errmsg': u'has no masssend quota hint: [OKvFdA0813ge12]'}
这是因为测试订阅号没有群发图文消息的权限,并不是因为接口调用有误。
利用python 实现微信公众号群发图片与文本消息功能的更多相关文章
- Python webpy微信公众号开发之 回复图文消息
新建图文回复模板reply_pictext.xml: $def with (toUser,fromUser,createTime,title1,description1,picurl1,url1)&l ...
- python编写微信公众号首图思路详解
前言 之前一直在美图秀秀调整自己的微信公众号首图,效果也不尽如人意,老是调来调去,最后发出来的图片被裁剪了一大部分,丢失部分关键信息,十分恼火,于是想着用python写一个程序,把微信公众号首图的模式 ...
- C#实现微信公众号群发消息(解决一天只能发一次的限制)
经过几天研究网上的代码和谢灿大神的帮忙,今天终于用C#实现了微信公众号群发消息,现在整理一下. 总体思路:1.首先必须要在微信公众平台上申请一个公众号. 2.然后进行模拟登陆.(由于我对http传输原 ...
- 微信公众号通过图片选取接口上传到阿里oss
前言 之前写过一篇微信JS-SDK的使用方法,可进行参考 https://www.cnblogs.com/fozero/p/10256862.html 配置并调用公众号接口权限 1.配置权限微信公众号 ...
- python利用wxpy监控微信公众号
此次利用wxpy可以进行微信公众号的消息推送监测(代码超级简单),这样能进行实时获取链接.但是不光会抓到公众号的消息,好友的消息也会抓到(以后会完善的,毕竟现在能用了,而且做项目的微信号肯定是没有好友 ...
- python之微信公众号开发(基本配置和校验)
前言 最近有微信公众号开发的业务,以前没有用python做过微信公众号开发,记录一下自己的学习和开发历程,共勉! 公众号类型 订阅号 普通订阅号 认证订阅号 服务号 普通服务号 认证服务号 服务方式 ...
- python爬微信公众号前10篇历史文章(1)-思路概览
作为程序员,要时刻保持一颗好奇心和想要学习的姿态. 练习怎样利用搜狗微信爬取某指定微信公众号的历史文章.爬取微信公众号本身难度非常大,感谢搜狗提供了一个可以爬取数据的平台. 代码部分参考于: http ...
- 细数Python Flask微信公众号开发中遇到的那些坑
最近两三个月的时间,断断续续边学边做完成了一个微信公众号页面的开发工作.这是一个快递系统,主要功能有用户管理.寄收件地址管理.用户下单,订单管理,订单查询及一些宣传页面等.本文主要细数下开发过程中遇到 ...
- [python]通过微信公众号“Python程序员”,编写python代码
今天发现微信公众号中,居然可以编写python代码,很是惊喜,觉得蛮有趣的. 步骤如下: 1.关注微信公众号“Python程序员” 2.关注成功后,点击右下角的“潘多拉”->"Pyth ...
随机推荐
- HDU 5903 (DP)
#include <iostream> #include <cstdio> #include <cstring> #include <algorithm> ...
- 为什么我的Android SDK Manager中只显示已安装的package?
如图.在菜单packages中,前两项我都是选了的 . 两种可能: 1. 明显是楼主连不上谷歌的更新服务器了,换成国内的吧,左上Tools-->Options弹出的界面有两个可以填写的 ,下面一 ...
- Android Studio 修改主题
http://jingyan.baidu.com/article/6f2f55a18040aeb5b93e6cb4.html
- 字符串解析运用-将字符串分解为多个整数,求各整数之和(华为oj)
描述 输入内容是一个字符串,输出结果为一个字符串.要求在输入的字符串中识别出多个整数单元,并且对各个整数单元求和运算,最终输出一个字符串,输出的字符串内容是对各个整数单元求和的结果.两个整数单元之间以 ...
- FIFO 和 LRU 调度算法
在一个采用页式虚拟存储管理的系统中(字地址序列.页号.块号均从零开始编址),有一用户作业,它依次要访问的字地址序列是:15,128,300,388,246,402,223,142,360,267,若该 ...
- zencart的modules下数据库操作templates排版和common首页引用
把这个学会,zencart的数据库操作,以及各种函数的调用基本会了 这个东西非常有用,你需要认真看一下,不要闲代码多. 如何在数据库中调出自己想要的产品,让它显示在首页. 据我本人不科学的理解,在in ...
- (Question)CSS中position的绝对定位问题
RT,绝对定位相对于定位的元素存在是哪里? https://yunpan.cn/crjSMTiak2srZ 访问密码 1570
- photosho 等距复制或旋转复制
选区是不可以复制的,不过可以用这个方法:1.新建图层,任意绘制一个图形2.ctrl+j复制一层,ctrl+T 切换到变形工具,移动或变形该图形后enter.3.按Alt+Shift+ctrl+T.4. ...
- css---使用class和id
网页现在的新标准是W3C.目前的模式是html+css+javascript,如何理解呢,就是html是网页的结构,CSS是网页的样式,javascript是行为.结构就是盖房子先要把结构建出来,然后 ...
- ecstore中kvstore之memcached
memcached的安装 详细见 http://blog.csdn.net/motian06/article/details/17558831 memcached扩展的安装 详细见 http://bl ...