Skip to content

Commit 7c219e4

Browse files
committed
Merge remote-tracking branch 'upstream/master'
2 parents 523c3e9 + 9e15ec4 commit 7c219e4

File tree

6 files changed

+390
-216
lines changed

6 files changed

+390
-216
lines changed

README.md

Lines changed: 116 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,36 +1,138 @@
11
# wxBot [![star this repo](http://github-svg-buttons.herokuapp.com/star.svg?user=liuwons&repo=wxBot&style=flat&background=1081C1)](http://github.com/liuwons/wxBot) [![fork this repo](http://github-svg-buttons.herokuapp.com/fork.svg?user=liuwons&repo=wxBot&style=flat&background=1081C1)](http://github.com/liuwons/wxBot/fork) ![python](https://img.shields.io/badge/python-2.7-ff69b4.svg)
22

3-
Python包装的网页微信API。可以很容易地实现微信机器人。
3+
Python包装Web微信实现的微信机器人框架。可以很容易地实现微信机器人。
44

5-
## Dependencies
6-
程序用到了Python requests 和 pyqrcode库,使用之前需要安装这两个库:
5+
## 环境与依赖
6+
7+
目前只能运行于Python 2环境 。
8+
**wxBot** 用到了Python **requests****pyqrcode** 库,使用之前需要安装这两个库:
79

810
```bash
911
pip install requests
1012
pip install pyqrcode
1113
pip install pypng
1214
```
1315

14-
## Demo
15-
配置了 **[图灵机器人](http://www.tuling123.com/)** 之后,通过测试账号发送各种消息的效果:
16+
## 快速开发
17+
### 代码
1618

17-
![向机器人发送消息](img/send_msg.png)
19+
利用 **wxBot** 最简单的方法就是继承WXBot类并实现handle_msg_all或者schedule函数,然后实例化子类并run,如下的代码对所有来自好友的文本消息回复 "hi", 并不断向好友tb发送"schedule"。
20+
handle_msg_all函数用于处理收到的每条消息,而schedule函数可以做一些任务性的事情(例如不断向好友推送信息或者一些定时任务)。
1821

19-
![后台](img/backfront.jpg)
22+
```python
23+
#!/usr/bin/env python
24+
# coding: utf-8
25+
26+
import time
27+
from wxbot import *
2028

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'])
2133

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()
2445

25-
``` bash
26-
python wxbot.py
2746
```
2847

29-
### 登录微信
48+
### 运行
3049

31-
程序运行之后,会在当前目录下生成二维码图片文件 qr.jpg ,用微信扫描此二维码并按操作指示确认登录网页微信。可以选择是否自动回复。
50+
直接用python运行代码(如运行测试代码test.py):
3251

52+
``` python
53+
python test.py
54+
```
55+
56+
### 登录微信
57+
58+
程序运行之后,会在当前目录下生成二维码图片文件 qr.png ,用微信扫描此二维码并按操作指示确认登录网页微信。
3359

3460
![1](img/1.png)
3561

36-
按照操作指示在手机微信上扫描二维码然后登录,你可以选择是否开启自动回复模式。
62+
如果运行在Linux下,还可以通过设置WXBot对象的conf['qr']为'tty'的方式直接在终端打印二维码(此方法只能在Linux终端下使用),效果如下:
63+
64+
![login_on_ubuntu](img/login_on_ubuntu.png)
65+
66+
## 效果展示
67+
68+
测试代码test.py的运行效果:
69+
70+
![向机器人发送消息](img/send_msg.png)
71+
72+
![后台](img/backfront.jpg)
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为文件路径(此时向好友发送文件里的每一行) |

img/backfront.jpg

-16.8 KB
Loading

img/login_on_ubuntu.png

71.5 KB
Loading

img/send_msg.png

-52.8 KB
Loading

test.py

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
#!/usr/bin/env python
2+
# coding: utf-8
3+
4+
import time
5+
from wxbot import *
6+
7+
class MyWXBot(WXBot):
8+
def handle_msg_all(self, msg):
9+
if msg['msg_type_id'] == 5 and msg['user_type'] == 'contact':
10+
self.send_msg_by_uid('hi', msg['user_id'])
11+
'''
12+
def schedule(self):
13+
self.send_msg('tb', 'schedule')
14+
time.sleep(1)
15+
'''
16+
17+
def main():
18+
bot = MyWXBot()
19+
bot.DEBUG = True
20+
bot.conf['qr'] = 'png'
21+
bot.run()
22+
23+
if __name__ == '__main__':
24+
main()

0 commit comments

Comments
 (0)