最近,由全栈数据工程师开发的微信小组有近500人。在打开两个群组后,为了在不同的微信群组之间打开消息,花了一些时间构建了一个消息同步机器人,该机器人在任何一组接收到消息时都会进行同步。发送给其他组,并将聊天内容上载到数据库以进行进一步的分析,统计和显示。
基本思想是使用Python模拟微信登录。在接收到该组中的消息后,他们将处理各种类型的消息,例如文本,图片和共享,并将其转发给其他组。
前期准备
首先得有一个微信号,用于代码模拟登陆。由于我的微信号得自己留着用,现阶段注册微信又必须要手机号,于是只好特意办了个电信号,用来申请了一个新的微信,微信号是 honlanbot。虽说似乎可以用阿里小号来注册微信,不过听说存在反复回收和安全隐患问题,故不采用。
其次,需要用到一个Python库 itchat,这个库已经做好了用代码调用微信的大多数功能,非常好用,官方文档在这里,安装的时候使用 pip 即可。

我的手机支持双卡双待,于是把两张卡都装手机里,再双开微信,同时保持两个微信号手机在线,差不多就可以开始写代码了。用 itchat 调用微信主要是模拟微信网页版登陆,所以必须保持微信号手机在线,因为手机端微信一旦退出,其在网页、PC、MAC、IPAD等相应终端认证的账号也会随之退出。
初步尝试
itchat 提供了一些官方代码,让我们在自己的本本或电脑上新建一个 py 文件,初步尝试一下。
运行以下代码,会出现出现一张二维码,扫码登陆之后将会给“文件传输助手”发送一条消息。

以下代码则注册了一个消息响应事件,用来定义接收到文本消息后如何处理。在 itchat 里定义了文本、图片、名片、位置、通知、分享、文件等多种消息类型,可以分别执行不同的处理。

再来看看如何处理其他类型消息,可以把在消息响应事件里把 msg 打印出来,是一个字典,看看有哪些感兴趣的字段。

开发消息同步机器人
经过以上示例代码,可以总结出消息同步机器人的开发思路:
维护一个字典,叫做 groups 好了,用来存所有需要同步消息的群聊,key 为群聊的ID,value 为群聊的名称;
接收到群聊消息时,如果消息来自于需要同步消息的群聊,就根据消息类型进行处理,同时转发到其他需要同步的群聊。
直接上代码好了,首先定义一个消息响应函数,文本类消息我感兴趣的是 TEXT 和 SHARING 两类,使用 isGroupChat=True 指定消息来自于群聊,这个参数默认为 False。

再来处理下图片等多媒体类消息。

上面的代码实现了四种消息的处理:文本,共享,图片和视频。如果您还对其他类型的消息感兴趣,则可以进行相应的处理。在前面添加import 的代码,在后面添加登录和运行代码,就完成了。


发布需求
我来说两句