Python网页微信API
wxBot 是用Python包装Web微信协议实现的微信机器人框架。
目前的消息支持情况:
[ ] 群消息
[ ] 联系人消息
[x] 消息发送
Web微信协议参考资料:
qwx: WeChat Qt frontend 微信Qt前端
master-dev 分支为开发版本,用于测试新特性,欢迎使用后提出建议!
此版本只能运行于Python 2环境 。
wxBot 用到了Python requests , pypng , Pillow 以及 pyqrcode 库。
使用之前需要所依赖的库:
pip install requests pip install pyqrcode pip install pypng pip install Pillow
利用 wxBot 最简单的方法就是继承WXBot类并实现
handle_msg_all或者
schedule函数,然后实例化子类并调用
run方法 。
以下的代码对所有来自好友的文本消息回复文本消息 hi 、图片消息 1.png 以及文件消息 1.png , 并不断向好友 tb 发送文本 schedule 。
handle_msg_all函数用于处理收到的每条消息,而
schedule函数可以做一些任务性的工作(例如不断向好友推送信息或者一些定时任务)。
#!/usr/bin/env python # coding: utf-8import time from wxbot import *
class MyWXBot(WXBot): def handle_msg_all(self, msg): if msg['msg_type_id'] == 4 and msg['content']['type'] == 0: self.send_msg_by_uid(u'hi', msg['user']['id']) self.send_img_msg_by_uid("img/1.png", msg['user']['id']) self.send_file_msg_by_uid("img/1.png", msg['user']['id'])
def schedule(self): self.send_msg(u'tb', u'schedule') time.sleep(1)
def main(): bot = MyWXBot() bot.DEBUG = True bot.run()
if name == 'main': main()
直接用
python运行代码(如运行测试代码 test.py ):
python test.py
程序运行之后,会在当前目录下生成二维码图片文件 qr.png 并自动打开,用微信扫描此二维码并按操作指示确认登录网页微信。
如果运行在Linux下,还可以通过设置 WXBot 对象的
conf['qr']为
tty的方式直接在终端打印二维码(此方法只能在Linux终端下使用),效果如下:
测试代码 test.py 的运行效果:
handle_msg_all
handle_msg_all函数的参数
msg是代表一条消息的字典。字段的内容为:
| 字段名 | 字段内容 | | ----- | --- | |
msg_type_id| 整数,消息类型,具体解释可以查看 消息类型表 | |
msg_id| 字符串,消息id | |
content| 字典,消息内容,具体含有的字段请参考 消息类型表 ,一般含有
type(数据类型)与
data(数据内容)字段,
type与
data的对应关系可以参考 数据类型表 | |
user| 字典,消息来源,字典包含
name(发送者名称,如果是群则为群名称,如果为微信号,有备注则为备注名,否则为微信号或者群昵称)字段与
id(发送者id)字段,都是字符串 |
| 类型号 | 消息类型 |
content| | ----- | --- | ------ | | 0 | 初始化消息,内部数据 | 无意义,可以忽略 | | 1 | 自己发送的消息 | 无意义,可以忽略 | | 2 | 文件消息 | 字典,包含
type与
data字段 | | 3 | 群消息 | 字典, 包含
user(字典,包含
id与
name字段,都是字符串,表示发送此消息的群用户)与
type、
data字段,红包消息只有
type字段, 文本消息还有detail、desc字段, 参考 群文本消息 | | 4 | 联系人消息 | 字典,包含
type与
data字段 | | 5 | 公众号消息 | 字典,包含
type与
data字段 | | 6 | 特殊账号消息 | 字典,包含
type与
data字段 | | 99 | 未知账号消息 | 无意义,可以忽略 |
|
type| 数据类型 |
data| | ---- | ---- | ------ | | 0 | 文本 | 字符串,表示文本消息的具体内容 | | 1 | 地理位置 | 字符串,表示地理位置 | | 3 | 图片 | 字符串,图片数据的url,HTTP POST请求此url可以得到jpg文件格式的数据 | | 4 | 语音 | 字符串,语音数据的url,HTTP POST请求此url可以得到mp3文件格式的数据 | | 5 | 名片 | 字典,包含
nickname(昵称),
alias(别名),
province(省份),
city(城市),
gender(性别)字段 | | 6 | 动画 | 字符串, 动画url, HTTP POST请求此url可以得到gif文件格式的数据 | | 7 | 分享 | 字典,包含
type(类型),
title(标题),
desc(描述),
url(链接),
from(源网站)字段 | | 8 | 视频 | 不可用 | | 9 | 视频电话 | 不可用 | | 10 | 撤回消息 | 不可用 | | 11 | 空内容 | 空字符串 | | 12 | 红包 | 不可用 | | 13 | 小视频 | 字符串,视频数据的url,HTTP POST请求此url可以得到mp4文件格式的数据 | | 99 | 未知类型 | 不可用 |
由于群文本消息中可能含有@信息,因此群文本消息的
content字典除了含有
type与
data字段外,还含有
detail与
desc字段。
各字段内容为:
| 字段 | 内容 | | --- | ---- | |
type| 数据类型, 为0(文本) | |
data| 字符串,消息内容,含有@信息 | |
desc| 字符串,删除了所有@信息 | |
detail| 数组,元素类型为含有
type与
value字段的字典,
type为字符串 str (表示元素为普通字符串,此时value为消息内容) 或 at (表示元素为@信息, 此时value为所@的用户名) |
WXBot 对象在登录并初始化之后,含有以下的可用数据:
| 属性 | 描述 | | ---- | ---- | |
contact_list| 当前用户的微信联系人列表 | |
group_list| 当前用户的微信群列表 | |
public_list| 当前用户关注的公众号列表 | |
special_list| 特殊账号列表 | |
session| WXBot 与WEB微信服务器端交互所用的 Requests
Session对象 |
WXBot 对象还含有一些可以利用的方法
| 方法 | 描述 | | ---- | --- | |
get_icon(uid, gid)| 获取联系人或者群聊成员头像并保存到本地文件 img_[uid].jpg ,
uid为用户id,
gid为群id | |
get_head_img(id)| 获取用户头像并保存到本地文件 img_[id].jpg ,
id为用户id(Web微信数据) | |
get_msg_img(msgid)| 获取图像消息并保存到本地文件 img_[msgid].jpg ,
msgid为消息id(Web微信数据) | |
get_voice(msgid)| 获取语音消息并保存到本地文件 voice_[msgid].mp3 ,
msgid为消息id(Web微信数据) | |
get_video(msgid)| 获取视频消息并保存到本地文件 video_[msgid].mp4 ,
msgid为消息id(Web微信数据) | |
get_contact_name(uid)| 获取微信id对应的名称,返回一个可能包含
remark_name(备注名),
nickname(昵称),
display_name(群名称)的字典| |
send_msg_by_uid(word, dst)| 向好友发送消息,
word为消息字符串,
dst为好友用户id(Web微信数据) | |
send_img_msg_by_uid(fpath, dst)| 向好友发送图片消息,
fpath为本地图片文件路径,
dst为好友用户id(Web微信数据) | |
send_file_msg_by_uid(fpath, dst)| 向好友发送文件消息,
fpath为本地文件路径,
dst为好友用户id(Web微信数据) | |
send_msg_by_uid(word, dst)| 向好友发送消息,
word为消息字符串,
dst为好友用户id(Web微信数据) | |
send_msg(name, word, isfile)| 向好友发送消息,
name为好友的备注名或者好友微信号,
isfile为
False时
word为消息,
isfile为
True时
word为文件路径(此时向好友发送文件里的每一行),此方法在有重名好友时会有问题,因此更推荐使用
send_msg_by_uid(word, dst)| |
is_contact(uid)| 判断id为
uid的账号是否是本帐号的好友,返回
True(是)或
False(不是) | |
is_public(uid)| 判断id为
uid的账号是否是本帐号所关注的公众号,返回
True(是)或
False(不是) |
bot.py 用 图灵机器人 API 以及 wxBot 实现了一个自动回复机器人.
此机器人会回复来自联系人的消息,以及群里@此账号的消息。
并且本帐号可以通过发送 退下 、 走开 、 关闭 、 关掉 、 休息 、 滚开 来关闭机器人的自动回复。
也可以通过发送 出来 、 启动 、 工作 来再次开启机器人的自动回复。
群聊时需要将对应的群保存到联系人列表。
群聊实现效果:
bot.py 的运行方法:
在 bot.py 文件所在目录下新建 conf.ini 文件,内容为:(key字段内容为申请到的图灵key)
[main] key=1d2678900f734aa0a23734ace8aec5b1
运行 bot.py
python bot.py
不接入图灵机器人API时(此时机器人对联系人消息以及群里@自己的消息统一回复 知道了 ):
python bot.py
feit/Weixinbot Nodejs 封装网页版微信的接口,可编程控制微信消息
littlecodersh/ItChat 微信个人号接口、微信机器人及命令行微信,Command line talks through Wechat
Urinx/WeixinBot 网页版微信API,包含终端版微信及微信机器人
zixia/wechaty Wechaty is wechat for bot in Javascript(ES6). It's a Personal Account Robot Framework/Library.
WxbotManage 基于Wxbot的微信多开管理和Webapi系统
问题可以直接开 issue
QQ 交流群: 429134510 (1群) 603614392 (2群)