![](https://img.haomeiwen.com/i4028985/03593029aca22fb5.png)
听说阿尔法狗又要挑战柯杰了。时至今日,人工智能不断刷新我们对这个世界的理解。或许再过不久,你真的不知道跟你在网上聊天的对象还是不是一个“人”,也不知道自己的工作会不会有天就被机器给取代了。
要想不被机器淘汰,那只能“进化”得比机器还快!
之前我们介绍了一个可以记录微信撤回消息的小工具,参见 再也不用担心错过几个亿啦:基于Python的微信消息防撤回工具
今天我们就来讲讲它的实现基础 - itchat。文末将给出一个基于 itchat 开发的微型微信聊天机器人。
itchat 是一个开源的微信个人公众号接口,支持 py2 和 py3 。你可以将其开发为微信群运营助手、自动回复机器人、谁是卧底小游戏的裁判等等,作为一个全能的接口, itchat 支持文本、图片、视频、附件、等内容的收发处理。
该库从原理上是登陆网页微信,将收发的信息打包处理为 dict 形式,然后使用 post 请求进行信息交换。简单来说就是一个可编写脚本控制、无界面的网页版微信客户端。
1、安装及入门
安装 itchat 与其他库并无差别,使用 pip install itchat
即可。
在安装完成之后,就可以开始写代码了,我们以分段的形式逐一介绍登陆、发信息、接收信息等功能。
官网地址:https://github.com/littlecodersh/ItChat
1.1 登陆
itchat 的登陆函数为 auto_login()
,代码运行之后,会出现一幅二维码图片,使用手机扫码登陆即可。查看源代码后发现该库是利用网页微信的接口登陆,使用扫码登陆的优点在于整个授权过程的验证部分在手机端进行,所以不必担心使用该库会泄露自己的隐私。
微信扫描二维码登录网页是什么原理:https://www.zhihu.com/question/20368066
import itchat
\# 普通登陆
itchat.auto_login()
\# 运行并保持在线状态
itchat.run()
登陆上之后,会提示登陆成功信息:
![](https://img.haomeiwen.com/i4028985/580b914dbbc2e114.png)
itchat 也提供短时间内断线重连的功能,只需要添加 hotReload = True
参数,其原理是在登陆之后在 PC 端保存登陆信息,下次登陆时会直接读取存储的信息。
itchat.auto_login(hotReload = True)
关于登陆更详细的内容参见官方文档:https://itchat.readthedocs.io/zh/latest/intro/login/
1.2 发送消息
itchat 可以发送 文本、图片、视频、附件等内容。
代码示例:
# 发送一段文字给 文件助手
itchat.send('hello,helper',toUserName='filehelper')
# 同样也可以使用 发送文本函数
itchat.send_msg('hello,helper',toUserName='filehelper')
# 发送一张图片,给出图片的地址
itchat.send_image(r'photo2.png',toUserName='filehelper')
运行结果:
![](https://img.haomeiwen.com/i4028985/666ae07b8fb63663.png)
不要问我图片是从哪里找的,我也不知道,突然就出现在我电脑上了。
同样,发送其他形式的内容参照文档中相应的函数。注意这里的 toUserName
的值为微信号,以下图为例,正确的方式应该是 toUserName='littlecodersh'
。
![](https://img.haomeiwen.com/i4028985/674c28c32ac0898f.png)
关于消息的发送,更多内容参考:https://itchat.readthedocs.io/zh/latest/intro/reply/
1.3 消息的接收
消息的接收与处理消息的函数一起存在,定义一个消息处理函数 text_reply()
,添加装饰器 @itchat.msg_register(TEXT)
,使其拥有处理文本消息的功能。
text_reply()
需要传入 msg
参数, msg
为字典类型,包含了接收信息的所有细节,比如 msg['FromUserName']
为发信息者,msg['ToUserName']
为消息的接收者,msg['MsgType']
为信息类型,msg['Text']
为信息内容等等。
注意这里需要导入 itchat.content
下对消息类型做的包装,比如 TEXT
表示文本消息,PICTURE
表示图片消息等等,这里选择导入所有类型。
from itchat.content import *
# 注册文本消息,绑定到 text_reply 处理函数
@itchat.msg_register(TEXT)
def text_reply(msg):
# 打印出传递的消息,利于我们更好的理解 itchat 的运作方式
print(msg)
# 将消息返回给发送者
itchat.send('recevied msg : %s'%msg['Text'],msg['FromUserName'])
# 图片以及视频消息,绑定到 reply_pic_video 函数
@itchat.msg_register(PICTURE,VIDEO)
def reply_pic_video(msg):
print(msg)
# 下载收到的图片或者视频
msg['Text'](msg['FileName'])
# 回复发送者
itchat.send('hello world', toUserName=msg['FromUserName']
注意:在处理图片、视频、附件信息时,itchat 提供了下载的功能,如代码中所示 msg['Text'] (msg['FileName'])
,msg['Text']
为下载的方法,msg['FileName']
为下载的文件,下载路径为代码的运行路径。
详细的消息类型参考:
https://itchat.readthedocs.io/zh/latest/intro/handler/
https://itchat.readthedocs.io/zh/latest/intro/messages/
1.4 其他功能
除了以上提到的功能,itchat 还拥有添加好友、搜索好友、获取头像、创建群、修改群名、邀请、踢人等等一系列的功能。
查看所有功能可查看源码:https://github.com/littlecodersh/ItChat/blob/master/itchat/core.py
2、实战——简单的机器人
这里我们制作了一个简单的微信机器人,在 itchat 的基础上接入了图灵机器人和百度翻译,实现了自动回复与翻译的功能,正常对话调用图灵接口,带 "#" 前缀调用翻译接口,实际效果如下:
![](https://img.haomeiwen.com/i4028985/f1998c006431aae2.png)
2、小结
itchat 作为一款开源的个人微信接口,支持 py2 和 py3 ,并且可以跨平台运行,提供了一份合适的微信机器人解决方案。在此基础上我们还可以接入图灵机器人、文字游戏平台、签到打卡平台、微信群管理平台等等。
不过,itchat 也有其局限性,使用该库不能收发红包,不能发朋友圈等,总的来说,网页版微信不能做的事情, itchat 也不行。
一些学习资料:
官方文档:https://itchat.readthedocs.io/zh/latest/
github 地址:https://github.com/littlecodersh/ItChat
Python微信库:itchat:http://www.tuicool.com/articles/VJZRRfn
python基于itchat实现微信群消息同步机器人:http://www.jb51.net/article/106815.htm
欢迎加入 Crossin的编程教室
crossincode.com
新手入门QQ群:522415386
微信请加 crossin11 留言入群(新手/进阶)
![](https://img.haomeiwen.com/i4028985/28285c8e1c52e902.jpg)
网友评论