本文实例讲述了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"+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"+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"+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"+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]'}
这是因为测试订阅号没有群发图文消息的权限,并不是因为接口调用有误。
PS:
作者的github: https://github.com/zhoudayang
更多关于Python相关内容感兴趣的读者可查看本站专题:《Python字符串操作技巧汇总》、《Python编码操作技巧总结》、《Python数据结构与算法教程》、《Python函数使用技巧总结》及《Python入门与进阶经典教程》。
希望本文所述对大家Python程序设计有所帮助。
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件!
如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
暂无“Python实现的微信公众号群发图片与文本消息功能实例详解”评论...
更新动态
2024年11月25日
2024年11月25日
- 凤飞飞《我们的主题曲》飞跃制作[正版原抓WAV+CUE]
- 刘嘉亮《亮情歌2》[WAV+CUE][1G]
- 红馆40·谭咏麟《歌者恋歌浓情30年演唱会》3CD[低速原抓WAV+CUE][1.8G]
- 刘纬武《睡眠宝宝竖琴童谣 吉卜力工作室 白噪音安抚》[320K/MP3][193.25MB]
- 【轻音乐】曼托凡尼乐团《精选辑》2CD.1998[FLAC+CUE整轨]
- 邝美云《心中有爱》1989年香港DMIJP版1MTO东芝首版[WAV+CUE]
- 群星《情叹-发烧女声DSD》天籁女声发烧碟[WAV+CUE]
- 刘纬武《睡眠宝宝竖琴童谣 吉卜力工作室 白噪音安抚》[FLAC/分轨][748.03MB]
- 理想混蛋《Origin Sessions》[320K/MP3][37.47MB]
- 公馆青少年《我其实一点都不酷》[320K/MP3][78.78MB]
- 群星《情叹-发烧男声DSD》最值得珍藏的完美男声[WAV+CUE]
- 群星《国韵飘香·贵妃醉酒HQCD黑胶王》2CD[WAV]
- 卫兰《DAUGHTER》【低速原抓WAV+CUE】
- 公馆青少年《我其实一点都不酷》[FLAC/分轨][398.22MB]
- ZWEI《迟暮的花 (Explicit)》[320K/MP3][57.16MB]