针对微信公众平台,图形界面操作存在的许多功能限制,在开发者中心设置回调URL和Token,可以更加灵活地扩展各项功能。对于具备开发能力的人员,同时拥有一台可供转发消息的服务器,itchatmp可以提供强大的技术支持。

开发前准备:

Python版本:2.7,3.5

供转发的服务器

微信公众平台账号

搭建web服务

Python Web框架有许多,最流行的如Django,Flask,WSGI等。这里重点推荐一个开源的微信公众号接口itchatmp。它将公众号许多功能接口都整合到了代码里,开发者无需自行构造请求访问链接,简单易上手。

1. 安装itchatmp

pip install itchatmp

注意:itchat基于tornado框架,本人在python3.5版本安装过程中,发现高版本的tornado(5.0以上)有许多兼容问题。如执行import itchatmp时,发生RuntimeError: There is no current event loop in thread 'Thread-1';在接受图片消息时,set_event_loop无法建立事件循环等。

解决办法:安装较低版本的tornado。

pip uninstall tornado

pip install tornado==4.5.3

# 安装futures库报错

pip install futures==3.1.1

2. 设置自动回复

处理文本消息

def getBasicInfo(msg):

date = time.strftime("%Y-%m-%d %H-%M-%S", time.localtime(int(msg['CreateTime']))) # 接收消息的时间

user = msg['FromUserName'] # 关注用户的OpenId,同一个公众号所有关注者都是唯一的

return date, user

@itchatmp.msg_register(TEXT)

def text_reply(msg):

content = msg['Content']

date, user = getBasicInfo(msg)

save_path = SAVE_PATH + TEXT_PATH + user + '.txt' # 使用OpenID来保存不同用户的消息记录

if not os.path.exists(save_path):

with open(save_path,'w',encoding='utf-8') as file:

file.write(date + " --- " + content + "\n")

else:

with open(save_path,'a',encoding='utf-8') as file:

file.write(date + " --- " + content + "\n")

return "消息保存成功" # 去掉return语句时,表示不回复内容

保存结果:

处理多媒体消息

多媒体消息,包括图片,语音,视频,小视频等,这类消息的共同点是,返回参数中都带有MediaId。MediaId是消息媒体id,可以使用该参数,通过调用获取临时素材接口下载数据。

@itchatmp.msg_register([IMAGE, VIDEO, SHORT_VIDEO, VOICE])

def media_reply(msg):

date, user = getBasicInfo(msg)

pathSymbol = {

IMAGE: IMAGE_PATH,

VIDEO: VIDEO_PATH,

SHORT_VIDEO: SHORT_VIDEO_PATH,

VOICE: VOICE_PATH

}.get(msg["MsgType"]) # 通过判断消息类型,获取媒体信息相应的保存路径

r = itchatmp.messages.download(msg["MediaId"])

filename = date + ' '+ user + os.path.splitext(r.get('FileName', 'myfile'))[1] # 命名规则:时间 + OpenId +文件后缀名

if 'File' in r:

with open(SAVE_PATH + pathSymbol + filename, 'wb') as f:

f.write(r['File'].getvalue()) # 保存数据到本地

else:

print(r)

微信公众平台上多媒体消息最多只能保存3天,上述代码可以实时地将所有信息,按照相应的格式(jpg,mp4,amr等)永久保存在本地。

其它消息

其它消息类型,可以参考微信工作平台技术文档,里面列举了不同消息参数的格式,根据需要自定义回复内容。

@itchatmp.msg_register(LOCATION)

def location_reply(msg):

lat = msg['Location_X']

lon = msg['Location_Y']

label = msg['Label']

return str(label) + '\n' + '经度:' + lat + '\n' + '纬度:' + lon

例如对收到的地理位置消息,可以自动回复该位置的名称,经纬度信息。

3. 一个简单的例子

import itchatmp

itchatmp.update_config(itchatmp.WechatConfig(

token='yourToken',

appId = 'yourAppId',

appSecret = 'yourAppSecret'))

@itchatmp.msg_register(itchatmp.content.TEXT)

def text_reply(msg):

return msg['Content']

itchatmp.run()

此处的appId,appSecret分别为开发者ID,开发者密码,可以在微信工作平台查看,见下一步。token用于验证开发者服务器,由开发者随机设置(3-32字符)。

在服务器上运行该程序(默认开启80端口),外网访问出现以下语句时,表示服务开启成功。

服务器配置

1. 开发者ID(AppID),开发者密码(AppSecret),IP白名单

公众号开发信息

开发者ID可以在微信公众平台 - 开发 - 基本配置 - 公众号开发信息中查看。

开发者密码是校验公众号开发者身份的密码,公众平台不会单独储存AppSecret,因此在初次设置后需要另行保存。

将提供转发的服务器地址添加到IP白名单中。

2. 配置服务器

填写服务器配置

URL填写服务器地址,http协议必须使用80端口。

将开启web服务代码中设置的token填到这里。

点击随机生成EncodingAESKey。

个人订阅号,消息加解密方式可以选择明文模式。

在提交服务器配置信息时,会进行token验证。因此提交前确保在服务器上已经搭建好web服务,并且成功运行,否则会出现请求URL超时提示。

关于接口权限

针对个人未认证订阅号,可以使用的接口主要有:

接收消息(所有类型消息)

发送消息(仅仅支持自动回复)

永久素材的管理(上传,修改,删除)

其它图像、音频接口,界面操作等

在开发者中心开启了回调URL和Token后,公众平台设置的自动回复、自定义菜单等功能都将失效并且停用。而个人订阅号不具备自定义菜单接口权限,因此在改用开发者模式后,可能会丢失平台上设置的自定义菜单信息。

python自动发公众号_itchatmp | 基于python微信公众号接口相关推荐

  1. 钉钉python 自动发消息软件_利用Python自动发送钉钉数据消息,一个简单的上手小项目...

    现在大部分公司都使用钉钉作为内部的主要沟通工具,钉钉消息基本都上都能快速有效的被阅读,打开率会比邮件高上不少.所以准备使用钉钉来播报平台每日的成交额,并附上一些鼓励的话和图片.起到一个激励团队的作用 ...

  2. python自动发outlook邮件_使用python自动发邮件(163、QQ、outlook邮箱)

    import smtplib fromemail.mime.text import MIMEText fromemail.utils import formataddr fromdatetime im ...

  3. python爬取微信公众号_Python爬取微信公众号(中间人代理法)

    1.环境:ubuntu16.04 + redis + mysql + python3.5 + anyproxy + android + pm2 + npm + node 一台爬虫服,python3环境 ...

  4. python 自动发微博 (微博H5接口)

    python自动发微博,调用微博H5接口 最近一直在研究这个,希望能用微博引流,话不多说 # /usr/bin/env python # -*- coding:utf-8 -*- import thr ...

  5. Python自动发短信给自己手机

    Python自动发短信给自己手机 国外有一家公司Twilio推出了一项自动发送短信的服务,只需要在官网上注册并且获取权限即可,这在我们做服务器监控或者其他监控内容时有很大的作用,下面我直接提出代码. ...

  6. 通过Python自动发邮件《生如夏花》

    今天ajupyter和姐姐出去逛了一天街,累死了.晚上读了一首非常美丽的诗词,是泰戈尔的<生如夏花>,感觉非常美,再加上前几天学会了用python自动发邮件,决定把这首诗发给自己的好朋友欣 ...

  7. python发送邮件 python发送qq,163,sohu, xinlang, 126等邮件 python自动发邮件总结及实例说明...

    python发邮件需要掌握两个模块的用法,smtplib和email,这俩模块是python自带的,只需import即可使用.smtplib模块主要负责发送邮件,email模块主要负责构造邮件. sm ...

  8. 基于python爬虫技术的应用_基于Python爬虫技术的应用

    办公自动化杂志 一.引言 本文主要是对 Python 爬虫技术进行阐述,基于 python 的爬虫与其他语言相比的有很多优势.通过爬去某个网站的所有新闻这个案例,来进一步阐释 Python 爬虫技术的 ...

  9. 《Python与硬件项目案例》— 基于Python与指纹模块AS608的指纹识别签到考勤系统(下篇)(期末大作业、课程设计、毕业设计、结课项目)

    目录 <Python与硬件项目案例>- 基于Python与指纹模块AS608的指纹识别签到考勤系统(下篇) 概述 参考代码 <Python与硬件项目案例>- 基于Python与 ...

  10. Python之PIL之绘图:基于Python的PIL库绘制各种图形、添加文字等

    Python之PIL之绘图:基于Python的PIL库绘制各种图形.添加文字等 目录 一.绘制各种形状各种案例 1.绘制矩形 2.绘制圆形.弧线形

最新文章

  1. oracle sql MERGE 关键字
  2. Java中New一个对象是个怎么样的过程?
  3. video camera in shanghai
  4. [Android]AndroidBucket增加碎片SubLayout功能及AISubLayout的注解支持
  5. Centos 下PHP编译安装fileinfo扩展
  6. 怎样在log4j.xml配置文件中引入变量:小公司经验较多的我和阿里UC等大公司经验较多的Boss,一些技术交流和探讨...
  7. laravel关于路径的函数
  8. Veeam创建复制任务Replication Job
  9. dao层和service层和control_最受欢迎Java数据库访问框架(DAO层)
  10. BZOJ3172lg3966 TJOI单词(广义后缀自动机)
  11. Android学习小Demo(13)Android中关于ContentObserver的使用
  12. oracle-jde操作界面,JDE项目系统基础培训.ppt
  13. 统计学、统计学习和统计推断之间的关系
  14. 视频文件服务器加速,百度云加速视频加速缓存设置教学
  15. Unity3D数字孪生开发笔记——软件基础篇
  16. 【离散数学】偏序集Hasse图的画法和重要元素
  17. ps:消除锯齿和羽化
  18. Lua Busted 单元测试简介(Windows 环境)
  19. 计算机启动时 需换电池bells,关于笔记本电脑开机提示请考虑更换电池问题的解决步骤...
  20. 火狐浏览器自动加滚动条,如何去除?

热门文章

  1. Android Jetpack组件(九)DataStore
  2. 玩转GD32F3x0开发板 (二)
  3. Windows的cmd中如何关闭端口
  4. 10054: An existing connection was forcibly closed by the remote host
  5. UVALive 7461 - Separating Pebbles
  6. 掌握技巧可以快速完成网站备案
  7. c语言编程 消除直线锯齿,C语言 抗锯齿像素渲染
  8. 浏览器事件 - 监听浏览器刷新问题及解决方案
  9. 网易网盘关停!云端2T的“资源包、小电影”谁来守护?
  10. Blender MMD 备忘