用 Python 写微信群聊机器人

2016-03-04 15:55:19 +08:00
 tobacco
用 Python 的 wxBot 框架+图灵机器人实现。
机器人会回复来自联系人的消息,以及所有群里 @此账号的消息。
详细实现方法参考: http://blog.csdn.net/tobacco5648/article/details/50802922

wxBot: https://github.com/liuwons/wxBot
图灵机器人: http://www.tuling123.com/

实现的效果:

28407 次点击
所在节点    Python
74 条回复
tobacco
2016-03-05 13:47:51 +08:00
@7z7 好奇怪,我再找找原因
tobacco
2016-03-05 13:48:34 +08:00
@garipan 你看看 bot.py 的运行方法, test.py 只回复 hi
garipan
2016-03-05 14:07:42 +08:00
不好意思 智硬了
但是这次是只回复"知道了"
应该是 API 没有接入
但是我按照要求填写了 conf.ini 也获取了 API key 啊
是需要设定函数名吗?可以手动录入 api 吗
garipan
2016-03-05 14:15:17 +08:00
好了 手动填写 key 好了
看来是读取 conf.ini 出错了
weaming
2016-03-05 18:23:22 +08:00
@tobacco 我提交了个合并请求
tobacco
2016-03-05 19:18:47 +08:00
@weaming 好的,已 merge ~
weaming
2016-03-05 19:48:39 +08:00
@tobacco 感觉这循环有点问题,有时候会卡住没反应
haython
2016-03-05 19:50:51 +08:00
如果有人昵称一样,这个只会发一个
tobacco
2016-03-05 20:05:18 +08:00
@haython 所以尽量使用 send_msg_by_uid 函数来发送消息。
tobacco
2016-03-05 20:08:12 +08:00
@weaming 卡住是在网络不好的时候 post 要等待很久,而且还可能被服务器端判断为断线然后被强制下线。我在网络比较稳定的一台机子上挂了一整天没什么问题。
weaming
2016-03-05 20:32:10 +08:00
@tobacco linux 上跑会有错误

File "/usr/local/lib/python2.7/dist-packages/requests/adapters.py", line 447, in send
raise SSLError(e, request=request)
requests.exceptions.SSLError: [Errno 1] _ssl.c:504: error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed
tobacco
2016-03-05 20:43:52 +08:00
@weaming Python 是最新的 2.7.9 吗,如果已经是最新的,那就更新 requests 并用 openssl 代替 ssl 模块:
pip install pyopenssl ndg-httpsclient pyasnl
haython
2016-03-05 20:46:17 +08:00
@tobacco 如果 pip 装不上,可能是需要先安装 yum install libffi-devel openssl-devel
weaming
2016-03-05 20:47:18 +08:00
无效

File "bot.py", line 112, in main
bot.run()
File "/root/wxBot/wxbot.py", line 538, in run
self.get_uuid()
File "/root/wxBot/wxbot.py", line 568, in get_uuid
r = self.session.get(url, params=params)
File "/usr/local/lib/python2.7/dist-packages/requests/sessions.py", line 480, in get
return self.request('GET', url, **kwargs)
File "/usr/local/lib/python2.7/dist-packages/requests/sessions.py", line 468, in request
resp = self.send(prep, **send_kwargs)
File "/usr/local/lib/python2.7/dist-packages/requests/sessions.py", line 576, in send
r = adapter.send(request, **kwargs)
File "/usr/local/lib/python2.7/dist-packages/requests/adapters.py", line 447, in send
raise SSLError(e, request=request)
requests.exceptions.SSLError: [Errno 1] _ssl.c:504: error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed
tobacco
2016-03-05 21:01:51 +08:00
@weaming sudo update-ca-certificates 这个有用吗

我在我的 Linux 上测了下没问题,你参考下:
Linux Mint 17.1 64bit, Linux Kernel 3.13, Python2.7.6 , requests2.9.1
haython
2016-03-05 21:07:18 +08:00
send_msg 的 name 为空字符时,会发好多人。。。。。。。
CBBing
2016-03-05 21:12:59 +08:00
@tobacco 我修改了一下代码,可以运行在 python 3.4 上,亲测可用, LZ 能不能新开一个分支接受合并
tobacco
2016-03-05 21:20:29 +08:00
@haython 嗯,的确是这样的。 send_msg 函数有挺多问题的,在有重名联系人时也有问题,所以一般用 send_msg_by_uid
tobacco
2016-03-05 21:20:52 +08:00
@CBBing python3 分支已开~
CBBing
2016-03-05 21:25:23 +08:00
@tobacco 有一个问题是在群聊天的时候,控制台能准确显示发消息的 nickname,但是在一对一的时候显示对方的是 unknown ,一直没找到原因

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/261135

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX