微信机器人进化指南

听说阿尔法狗又要挑战柯杰了。时至今日,人工智能不断刷新我们对这个世界的理解。或许再过不久,你真的不知道跟你在网上聊天的对象还是不是一个“人”,也不知道自己的工作会不会有天就被机器给取代了。

要想不被机器淘汰,那只能“进化”得比机器还快!

之前我们介绍了一个可以记录微信撤回消息的小工具,参见 再也不用担心错过几个亿啦:基于Python的微信消息防撤回工具

今天我们就来讲讲它的实现基础 - itchat。文末将给出一个基于 itchat 开发的微型微信聊天机器人。

itchat 是一个开源的微信个人公众号接口,支持 py2 和 py3 。你可以将其开发为微信群运营助手、自动回复机器人、谁是卧底小游戏的裁判等等,作为一个全能的接口, itchat 支持文本、图片、视频、附件、等内容的收发处理。

该库从原理上是登陆网页微信,将收发的信息打包处理为 dict 形式,然后使用 post 请求进行信息交换。简单来说就是一个可编写脚本控制、无界面的网页版微信客户端。

1、安装及入门

itchat 官网地址:http://itchat.readthedocs.io/zh/latest/

安装 itchat 与其他库并无差别,使用 pip install itchat 即可。

在安装完成之后,就可以开始写代码了,我们以分段的形式逐一介绍登陆、发信息、接收信息等功能。

1.1 登陆

itchat 的登陆函数为 auto_login() ,代码运行之后,会出现一幅二维码图片,使用手机扫码登陆即可。这是因为该库是利用网页微信的接口登陆,这一步相当于登录了网页版微信。整个授权过程的验证部分是通过微信正常的网页登录流程,不涉及账号密码信息。

对此登录原理感兴趣的可参考:

微信扫描二维码登录网页是什么原理 https://www.zhihu.com/question/20368066

itchat 在用户本机运行,除了调用微信接口外,不会向外界发送其他信息,并且源代码都是公开的。所以在使用过程中不必担心会有隐私泄露。

import itchat
# 普通登陆
itchat.auto_login()
# 运行并保持在线状态
itchat.run()

登陆上之后,会提示登陆成功信息:

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

运行结果:

不要问我图片是从哪里找的,我也不知道,突然就出现在我电脑上了。

同样,发送其他形式的内容参照文档中相应的函数。注意这里的 toUserName 的值为微信号,以下图为例,正确的方式应该是 toUserName='littlecodersh'

关于消息的发送,更多内容参考:https://itchat.readthedocs.io/zh/latest/intro/reply/

1.3 消息的接收

要接受微信中的消息,我们需定义一个消息处理函数 text_reply(msg) ,添加装饰器 @itchat.msg_register(TEXT)

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 的基础上接入了图灵机器人和百度翻译,实现了自动回复与翻译的功能,正常对话调用图灵接口,带 “#” 前缀调用翻译接口,实际效果如下:

在公众号(Crossin的编程教室)里回复 机器人 获取完整代码。

3、小结

itchat 作为一款开源的个人微信接口,提供了一份合适的微信机器人解决方案。在此基础上我们还可以接入图灵机器人、文字游戏平台、签到打卡平台、微信群管理平台等等。

不过,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)

原文发表时间:2017-04-12

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏阮一峰的网络日志

全文Feed的终极解决方案

但是,世界上的大部分Feed,都是摘要Feed,甚至是标题Feed。我们只好自己动手,制作全文Feed。

1762
来自专栏GA小站

UTM参数使用30问——既UTM参数使用指南(2018)

有很多缺少Google Analytics的UTM参数而导致的跟踪错误案例,我在Google Analytics Community和 Quora 看到过成千上...

3892
来自专栏PhpZendo

事件驱动架构设计

这篇文章是 软件架构演进 一个有关 软件架构 系列文章中的一篇。这些文章,主要是我学习软件架构、对软件架构的思考及使用方法的记录。相比于这个系列的前几篇文章,本...

6862
来自专栏铭毅天下

Elasticsearch大文件检索性能提升20倍实践(干货)

少废话,直接开始。 1、大文件是多大? ES建立索引完成全文检索的前提是将待检索的信息导入Elaticsearch。 项目中,有时候需要将一些扫描件、PDF文档...

3996
来自专栏运维一切

关于docker的存储驱动 原

#背景 一直以来我的业务都是跑在aufs+ext4的存储驱动结构上,看上去没有什么问题,直到业务报告: 在高并发场景下,aufs因为锁争抢的原因,导致cpu高负...

1552
来自专栏数据和云

性能优化:MySQL 性能提升之降龙十八掌

作者 | 张甦, 数据库领域的专家和知名人士、图书《MySQL王者晋级之路》作者,51CTO 专家博主。近10年互联网线上处理及培训经验,专注于 MySQL 数...

2013
来自专栏生信技能树

高通量数据下载还能这样操作?

本文属于转录组入门系列(RAN-seq基础入门传送门 http://www.biotrainee.com/thread-1750-1-1.html )第2部分内...

7505
来自专栏SDNLAB

ONOS集群管理架构分析

前言: 众所周知,ONOS是一款面向运营商的开源SDN网络操作系统,主要面向服务提供商和企业骨干网等重要的生产环境。为了满足对可靠性、灵活度的需求,ONOS采取...

34410
来自专栏高性能服务器开发

微信、陌陌等著名IM软件设计架构详解

https://blog.csdn.net/justinjing0612/article/details/38322353

4143
来自专栏ThoughtWorks

TW洞见 | 胡凯:Mock不是测试的银弹

开发者编写高质量测试的征途上可谓布满荆棘,数据库、中间件、不同的文件系统等复杂外部系统的存在,令开发者在编写、运行测试时觉得苦恼异常。由于外部系 统常常运行在不...

3616

扫码关注云+社区

领取腾讯云代金券