开源微信个人号 API | itchat 微信机器人

今天来为大家介绍一个有意思的开源微信个人号 API , 它是基于 Python 调用微信网页版实现 , 只需要编写少量的代码 , 就可以完成一个能够处理所有信息的微信机器人 。那它到底能实现了什么功能 , 接下来为大家一一介绍 。
安装想要使用它 , 首先得安装 itchat 模块:
$ pip3 install itchat登陆想要通过 itchat 操作微信接收、发送信息等 , 第一步需要先登陆微信网页版 , 为此 itchat 提供了 auto_login 方法 , 调用这个方法就能实现微信登陆 。首先新建 mychat1.py 文件 , 代码如下:
# mychat1.pyimport itchatfrom itchat.content import TEXT@itchat.msg_register(TEXT)# 注册处理文本信息def simple_reply(msg):print(msg.text)itchat.auto_login(hotReload=True)# hotReload=True表示短时间关闭程序后可重连itchat.run()然后通过执行命令 python mychat1.py 运行代码 , 这时会生成一个名为 QR.png 的二维码图片文件 , 通过扫描这个二维码就可以登陆微信网页版了 , 这时将会显示如下信息:
Login successfully as 你的微信昵称Start auto replying.如果你向这个登陆后的微信发送文本消息 , 则会直接把你发送的消息内容在终端打印出来 。
关于登陆这里还有几点要说明下:

  1. itchat提供了登陆状态暂存 , 关闭程序后一定时间内不需要扫码即可登录 。只需要在 auto_login 方法中传入 hotReload=True 即可 。
  2. 为了方便在无图形界面使用itchat , 程序内置了命令行二维码的显示 。只需要在 auto_login 方法中传入 enableCmdQR=True 即可 。
  3. 可以自定义登陆 , 比如更改提示语、二维码出现后邮件发送等 。
关于自定义登陆所需要的方法 , 登陆的过程按顺序为:
  • 获取二维码uuid , 方法名称:get_QRuuid
  • 获取二维码 , 方法名称:get_QR
  • 判断是否已经登陆成功 , 方法名称:check_login
  • 获取初始化数据 , 方法名称:web_init
  • 更新微信相关信息(通讯录、手机登陆状态) , 方法名称:get_friends、show_mobile_login
  • 循环扫描新信息(开启心跳) , 方法名称:start_receiving
以上简单介绍了下关于登陆相关的内容 , 如果想了解更详细信息请查看官方文档 。
注册消息方法itchat 将根据接收到的消息类型寻找对应的已经注册的方法 , 如果一个消息类型没有对应的注册方法 , 该消息将会被舍弃 , 就像我们上面代码只注册了 TEXT 类型的消息才会被打印出来 。当然在运行过程当中也可以动态注册方法 , 注册方式与结果不变 。
消息类型itchat 支持多种类型的消息处理 , 具体类型和参数详见下表:
参数
类型
Text键值
TEXT
文本
文本内容
MAP
地图
位置文本
CARD
名片
推荐人字典
NOTE
通知
通知文本
【开源微信个人号 API | itchat 微信机器人】SHARING
分享
分享名称
PICTURE
图片/表情
下载方法
RECORDING
语音
下载方法
ATTACHMENT
附件
下载方法
VIDEO
小视频
下载方法
FRIENDS
好友邀请
添加好友所需参数
SYSTEM
系统消息
更新内容的用户或群聊的UserName组成的列表
注册消息注册消息有两种方法:
  1. 不带具体对象注册 , 将注册为普通消息的回复方法
  2. 带对象参数注册 , 对应消息对象将调用该方法
# mychat2.pyimport itchatfrom itchat.content import TEXT# 不带具体对象注册 , 将注册为普通消息的回复方法@itchat.msg_register(TEXT)def simple_reply(msg):return 'I received: %s' % msg['Text']# 带对象参数注册 , 对应消息对象将调用该方法@itchat.msg_register(TEXT, isFriendChat=True, isGroupChat=True, isMpChat=False)def text_reply(msg):msg.user.send('%s: %s' % (msg.type, msg.text))itchat.auto_login(hotReload=True)itchat.run()然后通过执行命令 python mychat2.py 运行代码 , 扫码登陆并向该微信号发消息 , 这时你会发现你向它发什么消息 , 它会同样回复什么消息 , 而控制台并没有打印消息 , 很明显它只调用了带参数对象注册的方法 , 那么为什么不调用第一个不带对象注册的方法 , 下面我们就说说注册消息的优先级 。


推荐阅读