|
1 | 1 | # wxBot [](http://github.com/liuwons/wxBot) [](http://github.com/liuwons/wxBot/fork) 
|
2 | 2 |
|
3 |
| -Python包装的网页微信API。可以很容易地实现微信机器人。 |
| 3 | +Python包装Web微信实现的微信机器人框架。可以很容易地实现微信机器人。 |
4 | 4 |
|
5 |
| -## Dependencies |
6 |
| -程序用到了Python requests 和 pyqrcode库,使用之前需要安装这两个库: |
| 5 | +## 环境与依赖 |
| 6 | + |
| 7 | +目前只能运行于Python 2环境 。 |
| 8 | +**wxBot** 用到了Python **requests** 和 **pyqrcode** 库,使用之前需要安装这两个库: |
7 | 9 |
|
8 | 10 | ```bash
|
9 | 11 | pip install requests
|
10 | 12 | pip install pyqrcode
|
11 | 13 | pip install pypng
|
12 | 14 | ```
|
13 | 15 |
|
14 |
| -## Demo |
15 |
| -配置了 **[图灵机器人](http://www.tuling123.com/)** 之后,通过测试账号发送各种消息的效果: |
| 16 | +## 快速开发 |
| 17 | +### 代码 |
16 | 18 |
|
17 |
| - |
| 19 | +利用 **wxBot** 最简单的方法就是继承WXBot类并实现handle_msg_all或者schedule函数,然后实例化子类并run,如下的代码对所有来自好友的文本消息回复 "hi", 并不断向好友tb发送"schedule"。 |
| 20 | +handle_msg_all函数用于处理收到的每条消息,而schedule函数可以做一些任务性的事情(例如不断向好友推送信息或者一些定时任务)。 |
18 | 21 |
|
19 |
| - |
| 22 | +```python |
| 23 | +#!/usr/bin/env python |
| 24 | +# coding: utf-8 |
| 25 | + |
| 26 | +import time |
| 27 | +from wxbot import * |
20 | 28 |
|
| 29 | +class MyWXBot(WXBot): |
| 30 | + def handle_msg_all(self, msg): |
| 31 | + if msg['msg_type_id'] == 5 and msg['user_type'] == 'contact': |
| 32 | + self.send_msg_by_uid('hi', msg['user_id']) |
21 | 33 |
|
22 |
| -## Run |
23 |
| -### 运行程序 |
| 34 | + def schedule(self): |
| 35 | + self.send_msg('tb', 'schedule') |
| 36 | + time.sleep(1) |
| 37 | + |
| 38 | +def main(): |
| 39 | + bot = MyWXBot() |
| 40 | + bot.DEBUG = True |
| 41 | + bot.run() |
| 42 | + |
| 43 | +if __name__ == '__main__': |
| 44 | + main() |
24 | 45 |
|
25 |
| -``` bash |
26 |
| -python wxbot.py |
27 | 46 | ```
|
28 | 47 |
|
29 |
| -### 登录微信 |
| 48 | +### 运行 |
30 | 49 |
|
31 |
| -程序运行之后,会在当前目录下生成二维码图片文件 qr.jpg ,用微信扫描此二维码并按操作指示确认登录网页微信。可以选择是否自动回复。 |
| 50 | +直接用python运行代码(如运行测试代码test.py): |
32 | 51 |
|
| 52 | +``` python |
| 53 | +python test.py |
| 54 | +``` |
| 55 | + |
| 56 | +### 登录微信 |
| 57 | + |
| 58 | +程序运行之后,会在当前目录下生成二维码图片文件 qr.png ,用微信扫描此二维码并按操作指示确认登录网页微信。 |
33 | 59 |
|
34 | 60 | 
|
35 | 61 |
|
36 |
| -按照操作指示在手机微信上扫描二维码然后登录,你可以选择是否开启自动回复模式。 |
| 62 | +如果运行在Linux下,还可以通过设置WXBot对象的conf['qr']为'tty'的方式直接在终端打印二维码(此方法只能在Linux终端下使用),效果如下: |
| 63 | + |
| 64 | + |
| 65 | + |
| 66 | +## 效果展示 |
| 67 | + |
| 68 | +测试代码test.py的运行效果: |
| 69 | + |
| 70 | + |
| 71 | + |
| 72 | + |
| 73 | + |
| 74 | +## 接口 |
| 75 | +### handle_msg_all |
| 76 | + |
| 77 | +handle_msg_all函数的参数msg是代表一条消息的字典。一般包含以下字段: |
| 78 | + |
| 79 | +| 字段名 | 意义 | |
| 80 | +| ----- | --- | |
| 81 | +| user_type | 用户类型,具体见用户类型表 | |
| 82 | +| msg_id | 消息id,微信内部数据 | |
| 83 | +| msg_type_id | 消息类型,具体见消息类型表 | |
| 84 | +| user_id | 发送消息的用户的id,微信内部数据 | |
| 85 | +| user_name | 发送消息的用户的名字,为备注名或者微信用户名 | |
| 86 | +| content | 消息体,不同类型消息的此字段内容不同,具体见消息类型表 | |
| 87 | + |
| 88 | +用户类型表: |
| 89 | + |
| 90 | +| 类型名 | 意义 | |
| 91 | +| ----- | ---- | |
| 92 | +| contact | 好友 | |
| 93 | +| public | 公众号 | |
| 94 | +| group | 群 | |
| 95 | +| special | 特殊账号 | |
| 96 | +| unknown | 未知 | |
| 97 | + |
| 98 | +消息类型表: |
| 99 | + |
| 100 | +| 类型号 | 类型名称 | 类型描述 | content | |
| 101 | +| ------ | ------- | --- | -------- | |
| 102 | +| 1 | Location | 位置 | 字典,包含location(位置的文本描述)和xml(原始未解析的xml格式文本)字段 | |
| 103 | +| 2 | FileHelper | 文件 | 字符串,文本文件内容 | |
| 104 | +| 3 | Self | 自己发送的消息 | 字符串,文本消息 | |
| 105 | +| 4 | Group | 群消息 | 字典,包含group_id(微信内部id), group_name(群名), user(微信内部id), user_name(用户名称), msg(字符串消息)字段 | |
| 106 | +| 5 | Text | 普通文本消息 | 字符串, 文本消息 | |
| 107 | +| 6 | Image | 图片 | 字符串, 图片url | |
| 108 | +| 7 | Voice | 语音 | 字符串, 语音url | |
| 109 | +| 8 | Recommend | 微信名片 | 字典, 包含nickname(昵称),alias(别名),province(省份),city(城市), gender(性别)字段 | |
| 110 | +| 9 | Animation | 动画 | 字符串, 动画url | |
| 111 | +| 10 | Share | 分享 | 字典,包含type(类型),title(标题),desc(描述),url(http://github.com/%E9%93%BE%E6%8E%A5),from(来自)字段 | |
| 112 | +| 11 | Video | 视频 | 字符串,未解析的xml字符串 | |
| 113 | +| 12 | VideoCall | 视频电话 | 字符串,未解析的xml字符串 | |
| 114 | +| 13 | Redraw | 撤回消息 | 字符串,未解析的xml字符串 | |
| 115 | +| 14 | Init | 微信初始化系统消息,可以忽略 | 字符串,未解析的xml字符串 | |
| 116 | +| 99 | Unknown | 未知类型 | 字符串,未解析的xml字符串 | |
| 117 | + |
| 118 | +### WXBot对象属性 |
| 119 | + |
| 120 | +WXBot对象在登录并初始化之后,含有以下的可用数据: |
| 121 | + |
| 122 | +| 属性 | 描述 | |
| 123 | +| ---- | ---- | |
| 124 | +| contact_list | 当前用户的微信联系人列表 | |
| 125 | +| group_list | 当前用户的微信群列表 | |
| 126 | +| session | WXBot与WEB微信服务器端交互所用的requests Session对象 | |
| 127 | + |
| 128 | +WXBot对象还含有一些可以利用的方法: |
| 129 | + |
| 130 | +| 方法 | 描述 | |
| 131 | +| ---- | --- | |
| 132 | +| get_icon(id) | 获取用户icon并保存到本地文件 img_[id].jpg ,id为用户id(Web微信数据) | |
| 133 | +| get_head_img(id) | 获取用户头像并保存到本地文件 img_[id].jpg,id为用户id(Web微信数据) | |
| 134 | +| get_msg_img(msgid) | 获取图像消息并保存到本地文件 img_[msgid].jpg, msgid为消息id(Web微信数据) | |
| 135 | +| get_voice(msgid) | 获取语音消息并保存到本地文件 voice_[msgid].mp3, msgid为消息id(Web微信数据) | |
| 136 | +| get_user_remark_name(uid) | 获取好友的备注名,没有备注名则获取好友微信号, uid为好友的用户id(Web微信数据) | |
| 137 | +| send_msg_by_uid(word, dst) | 向好友发送消息,word为消息字符串,dst为好友用户id(Web微信数据) | |
| 138 | +| send_msg(name, word, isfile) | 向好友发送消息,name为好友的备注名或者好友微信号,isfile为False时word为消息,isfile为True时word为文件路径(此时向好友发送文件里的每一行) | |
0 commit comments