设为首页收藏本站

Crossin的编程教室

 找回密码
 立即加入
查看: 5459|回复: 5
打印 上一主题 下一主题

微信机器人进化指南

[复制链接]

169

主题

1

好友

733

积分

版主

Rank: 7Rank: 7Rank: 7

跳转到指定楼层
楼主
发表于 2018-7-14 16:42:38 |只看该作者 |倒序浏览

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

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

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

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

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

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

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

在安装完成之后,就可以开始写代码了,我们以分段的形式逐一介绍登陆、发信息、接收信息等功能。
1.1 登陆
itchat 的登陆函数为 auto_login() ,代码运行之后,会出现一幅二维码图片,使用手机扫码登陆即可。这是因为该库是利用网页微信的接口登陆,这一步相当于登录了网页版微信。整个授权过程的验证部分是通过微信正常的网页登录流程,不涉及账号密码信息。

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

微信扫描二维码登录网页是什么原理?

itchat 在用户本机运行,除了调用微信接口外,不会向外界发送其他信息,并且源代码都是公开的。所以在使用过程中不必担心会有隐私泄露。
  1. import itchat
  2. # 普通登陆
  3. itchat.auto_login()
  4. # 运行并保持在线状态
  5. itchat.run()
复制代码
登陆上之后,会提示登陆成功信息:

itchat 也提供短时间内断线重连的功能,只需要添加 hotReload = True 参数,其原理是在登陆之后在 PC 端保存登陆信息,下次登陆时会直接读取存储的信息。
  1. itchat.auto_login(hotReload = True)
复制代码
关于登陆更详细的内容参见官方文档:登陆配置 - itchat
1.2 发送消息
itchat 可以发送 文本、图片、视频、附件等内容。代码示例:
  1. # 发送一段文字给 文件助手
  2. itchat.send('hello,helper',toUserName='filehelper')
  3. # 同样也可以使用 发送文本函数
  4. itchat.send_msg('hello,helper',toUserName='filehelper')
  5. # 发送一张图片,给出图片的地址
  6. itchat.send_image(r'photo2.png',toUserName='filehelper')
复制代码
运行结果:

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

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

关于消息的发送,更多内容参考:回复方法 - itchat
1.3 消息的接收
要接受微信中的消息,我们需定义一个消息处理函数 text_reply(msg) ,添加装饰器 @itchat.msg_register(TEXT) 。

msg 参数为字典类型,包含了接收信息的所有细节,比如 msg['FromUserName']为发信息者,msg['ToUserName']为消息的接收者,msg['MsgType'] 为信息类型,msg['Text']为信息内容等等。

注意这里需要导入 itchat.content 下对消息类型做的包装,比如 TEXT 表示文本消息,PICTURE 表示图片消息等等,这里选择导入所有类型。
  1. from itchat.content import *
  2. # 注册文本消息,绑定到 text_reply 处理函数
  3. @itchat.msg_register(TEXT)
  4. def text_reply(msg):
  5.     # 打印出传递的消息,利于我们更好的理解 itchat 的运作方式
  6.     print(msg)
  7.     # 将消息返回给发送者
  8.     itchat.send('recevied msg : %s'%msg['Text'],msg['FromUserName'])
  9. # 图片以及视频消息,绑定到 reply_pic_video 函数
  10. @itchat.msg_register(PICTURE,VIDEO)
  11. def reply_pic_video(msg):
  12.     print(msg)
  13.     # 下载收到的图片或者视频
  14.     msg['Text'](msg['FileName'])
  15.     # 回复发送者
  16.     itchat.send('hello world', toUserName=msg['FromUserName']
复制代码
注意:在处理图片、视频、附件信息时,itchat 提供了下载的功能,如代码中所示 msg['Text'] (msg['FileName']),msg['Text']为下载的方法,msg['FileName']为下载的文件,下载路径为代码的运行路径。

详细的消息类型参考:注册方法 - itchat消息内容 - itchat
1.4 其他功能
除了以上提到的功能,itchat 还拥有添加好友、搜索好友、获取头像、创建群、修改群名、邀请、踢人等等一系列的功能。

各项功能可查看源码:https://github.com/littlecodersh/ItChat/blob/master/itchat/core.py
2、实战
这里我们制作了一个简单的微信机器人,在 itchat 的基础上接入了图灵机器人和百度翻译,实现了自动回复与翻译的功能,正常对话调用图灵接口,带 “#” 前缀调用翻译接口,实际效果如下:
在公众号(Crossin的编程教室)里回复 机器人 获取完整代码。3、小结
itchat 作为一款开源的个人微信接口,提供了一份合适的微信机器人解决方案。在此基础上我们还可以接入图灵机器人、文字游戏平台、签到打卡平台、微信群管理平台等等。

不过,itchat 也有其局限性,使用该库不能收发红包(没法自动抢红包是硬伤啊),不能发朋友圈等。总的来说就是,网页版微信不能做的事情, itchat 也不行。

参考资料:官方文档:项目简介 - itchatgithub 地址:littlecodersh/ItChatPython微信库:itchat:Python微信库:itchat - 推酷python基于itchat实现微信群消息同步机器人:python基于itchat实现微信群消息同步机器人_python_脚本之家

.

其他文章及回答:

喏,你们要的 PyCharm 快速上手指南 给伸手党的福利:Python 新手入门引导如何用100行Python代码做出魔性声控游戏“八分音符酱”学习编程的过程中可能会走哪些弯路,有哪些经验可以参考?你是如何自学 Python 的?数据分析:当赵雷唱民谣时他唱些什么?我去扒了杜蕾斯的微博一行代码扫出“敬业福”今天,你抢到票了吗?
Crossin的编程教室
微信公众号ID:crossincode网站:crossincode.comQQ群:522415386微信加群:crossin11

回复

使用道具 举报

0

主题

0

好友

34

积分

新手上路

Rank: 1

沙发
发表于 2018-7-23 10:05:53 |只看该作者
crossin老师 百度api那里现在不能够正常运行了 是需要购买百度api的权限吗? 还是有新的网址了?
回复

使用道具 举报

174

主题

45

好友

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

板凳
发表于 2018-7-23 11:12:18 |只看该作者
suxianyang 发表于 2018-7-23 10:05
crossin老师 百度api那里现在不能够正常运行了 是需要购买百度api的权限吗? 还是有新的网址了?  ...

只是学习的话不需要,看我最近发的那篇“贾维斯”文章,里面介绍的腾讯API平台也有很多接口可用
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

2

主题

0

好友

30

积分

新手上路

Rank: 1

地板
发表于 2018-8-22 19:38:31 |只看该作者
为啥运行出现这个状况呢?

运行问题.PNG (103.24 KB, 下载次数: 261)

运行问题.PNG

回复

使用道具 举报

174

主题

45

好友

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

5#
发表于 2018-8-22 22:13:56 |只看该作者
fresh-fish 发表于 2018-8-22 19:38
为啥运行出现这个状况呢?

没看懂你想问啥,这个不是在运行吗
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

2

主题

0

好友

30

积分

新手上路

Rank: 1

6#
发表于 2018-8-23 17:58:39 |只看该作者
crossin先生 发表于 2018-8-22 22:13
没看懂你想问啥,这个不是在运行吗

手机上并没有收到,这条消息和对应的图片
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即加入

QQ|手机版|Archiver|Crossin的编程教室 ( 苏ICP备15063769号  

GMT+8, 2024-4-19 17:01 , Processed in 0.030593 second(s), 26 queries .

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

回顶部