本文实例讲述了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]'}

这是因为测试订阅号没有群发图文消息的权限,并不是因为接口调用有误。

PS:

作者的github: https://github.com/zhoudayang

更多关于Python相关内容感兴趣的读者可查看本站专题:《Python字符串操作技巧汇总》、《Python编码操作技巧总结》、《Python数据结构与算法教程》、《Python函数使用技巧总结》及《Python入门与进阶经典教程》。

希望本文所述对大家Python程序设计有所帮助。

本文标题: Python实现的微信公众号群发图片与文本消息功能实例详解

本文地址: http://www.cppcns.com/jiaoben/python/195064.html

python公众号留言功能详情_Python实现的微信公众号群发图片与文本消息功能实例详解...相关推荐

  1. python公众号留言功能_Python实现的微信公众号群发图片与文本消息功能实例详解...

    本文实例讲述了Python实现的微信公众号群发图片与文本消息功能.分享给大家供大家参考,具体如下: 在微信公众号开发中,使用api都要附加access_token内容.因此,首先需要获取access_ ...

  2. 利用python 实现微信公众号群发图片与文本消息功能

    在微信公众号开发中,使用api都要附加access_token内容.因此,首先需要获取access_token.如下: #获取微信access_token def get_token():payloa ...

  3. python爬取论文全文数据_Python爬取微信公众号历史文章进行数据分析

    思路: 1. 安装代理AnProxy,在手机端安装CA证书,启动代理,设置手机代理: 2. 获取目标微信公众号的__biz; 3. 进入微信公众号的历史页面: 4. 使用Monkeyrunner控制滑 ...

  4. python中docx模块的使用_python使用docx模块读写docx文件的方法与docx模块常用方法详解...

    一,docx模块 Python可以利用python-docx模块处理word文档,处理方式是面向对象的.也就是说python-docx模块会把word文档,文档中的段落.文本.字体等都看做对象,对对象 ...

  5. python笔记小白入门_Python 笔记:全网最详细最小白的Class类和实例详解

    面向对象最重要的概念就是类(class)和实例(instance),类是抽象,而实例(Instance)则是一个个具体的对象 面向对象三大特点:封装.继承和多态 class Animal(object ...

  6. python多线程threading之阻塞线程(join)线程同步和守护线程(setDaemon(True))实例详解

    一.多线程(主线程和子线程同时执行) 1.主线程是程序本身,看不到的,主线程和子线程没有依赖关系,同步执行的,若主线程先执行完,会等子线程执行完毕,程序结束 2.启动一个线程就是把一个函数传入并创建T ...

  7. python训练营微信广告发送机_python实现给微信公众号发送消息的方法

    本文实例讲述了python实现给微信公众号发送消息的方法.分享给大家供大家参考,具体如下: 现在通过发微信公众号信息来做消息通知和告警已经很普遍了.最常见的就是运维通过zabbix调用shell脚本给 ...

  8. 《 Python List列表全实例详解系列(四)》__列表删除元素(4种方法)删除重复元素(去重)(8种方法)

    <  Python List列表全实例详解系列(四)> __列表删除元素(4种方法)删除重复元素(去重)(8种方法) 我的技术成长&学习资料整理分享之路 我遇到问题查找资料时,经常 ...

  9. 《 Python List列表全实例详解系列(五)》——修改元素(修改单个、修改一组)

    < Python List列表全实例详解系列(五)> --修改元素(修改单个.修改一组) 接上一篇:<  Python List列表全实例详解系列(四)>__列表删除元素(4种 ...

最新文章

  1. Python: 没有switch-case语句
  2. JUnit4用法详解
  3. Ubuntu18 搭建apache2+php5.6+mysql服务器
  4. vue --- ref属性获取dom元素和子组件的方法
  5. spoj1026 favorite dice
  6. Office - 安装程序找不到office.zh-cn\*.文件
  7. mybaits延迟加载原理_Nginx缓存原理及机制
  8. 转换文档参数_1分钟教会你将Excel转换成Word,简单高效,办公人士必备神技
  9. 猎豹移动傅盛:区块链将重塑整个社会关系,CEO恐将职位不保
  10. python创建文件的方法_python创建文本文件的简单方法
  11. “橙子”还是“橙汁”,这是一个问题
  12. 宝塔面板搭建方维直播图文教程
  13. voyage java_Voyage:采用Java实现的基于netty轻量的高性能分布式RPC服务框架
  14. 几种常用的软件测试工具
  15. [Violet]蒲公英(分块)
  16. 插板法、捆绑法、插空法
  17. mcx314AL使用点滴
  18. 企业微信自建应用通过PHP进行收发消息
  19. (13)UVM 史上最全TLM单向/双向/多向通信介绍
  20. komodo ide php,Komodo IDE

热门文章

  1. 手机客户端(EZview/智U)为什么告警通知中显示的告警条数总是比告警推送的消息条数多?
  2. 外观时尚多色可选,OPPO R9s领衔情人节值得购买手机一览
  3. js截取视频第一帧图片
  4. java正则匹配冒号,正则表达式:问号和冒号
  5. 最新主流Bios设置及超频图文全解
  6. 爆笑!「程序员吐槽大会」只有程序员听懂的段子!
  7. XCTF_MOBILE5_easy-apk
  8. Vivado ILA IP的使用
  9. 【测试】微信群聊的测试用例
  10. 打游戏的蓝牙耳机推荐哪一款?打游戏比较好的蓝牙耳机推荐