Python开发入门(三) | itchat实现微信机器人

article/2025/8/30 10:23:53

在这里插入图片描述
前言:
如今微信已经成为了个人社交的很大一部分,无论生活,学习,还是工作,我们的社交已经离开不了微信~~ 接下来来了解itchat~~
itchat是一个开源的微信个人号api接口,通过使用python调用微信实现简单的微信机器人。
使用不到三十行的代码,你就可以完成一个能够处理所有信息的微信机器人。
当然,该api的使用远不止一个机器人,更多的功能等着你来探索…

原理

通过微信的Python接口itchat获取微信消息。
将微信消息传输到机器人接口,获取机器人的返回消息。
将返回消息返回给微信消息的发送人。
实现将微信个人号变为聊天机器人的目的。

安装

方式一:可以通过pip安装itchat:

pip install itchat

方式二: 用pycharm 在"setting"里安装:
在这里插入图片描述
判断是否安装成功:

python3 -c "import itchat"

在这里插入图片描述
如果没有报错信息说明已经将环境安装完成。

登陆

要通过 itchat 操作微信接收、发送信息等,第一步需要先登陆微信网页版,为此 itchat 提供了 auto_login 方法,调用这个方法就能实现微信登陆

import itchat
from itchat.content import TEXT@itchat.msg_register(itchat.content.TEXT)   # 注册处理文本信息
def print_content(msg):  # 通过装饰符将print_content注册为处理文本消息的函数。print(msg['Text'])itchat.auto_login()  # hotReload=True表示短时间关闭程序后可重连
itchat.run()

微信有各种类型的数据,例如图片、语音、名片、分享等,也对应不同的注册参数:

  • 图片对应: itchat.content.PICTURE
  • 语音对应: itchat.content.RECORDING
  • 名片对应: itchat.content.CARD

  • 执行成功后开始登陆微信,这时会生成一个名为 QR.png 的二维码图片文件,通过扫描这个二维码就可以登陆微信网页版了,这时将会显示如下信息:
Login successfully as 你登陆账号的微信昵称
Start auto replying.

关于登陆:

  1. itchat提供了登陆状态暂存,关闭程序后一定时间内不需要扫码即可登录。只需要在 auto_login 方法中传入 hotReload=True 即可。
  2. 为了方便在无图形界面使用itchat,程序内置了命令行二维码的显示。只需要在 auto_login 方法中传入 enableCmdQR=True 即可。
  3. 可以自定义登陆,比如更改提示语、二维码出现后邮件发送等。

自定义登陆所需要的方法,登陆顺序为

  1. 获取二维码uuid,方法名称:get_QRuuid
  2. 获取二维码,方法名称:get_QR
  3. 判断是否已经登陆成功,方法名称:check_login
  4. 获取初始化数据,方法名称:web_init
  5. 更新微信相关信息(通讯录、手机登陆状态),方法名称:get_friendsshow_mobile_login
  6. 循环扫描新信息(开启心跳),方法名称:start_receiving

注册消息方法

itchat 将根据接收到的消息类型寻找对应的已经注册的方法,如果一个消息类型没有对应的注册方法,该消息将会被舍弃,就像我们上面代码只注册了TEXT 类型的消息才会被打印出来。当然在运行过程当中也可以动态注册方法,注册方式与结果不变。

各类型消息的注册

注册消息有两种方法:

  1. 不带具体对象注册,将注册为普通消息的回复方法
  2. 带对象参数注册,对应消息对象将调用该方法
    实例1:
import itchat
from 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()

实例2:

import itchat, time
from itchat.content import *@itchat.msg_register([TEXT, MAP, CARD, NOTE, SHARING])
def text_reply(msg):msg.user.send('%s: %s' % (msg.type, msg.text))@itchat.msg_register([PICTURE, RECORDING, ATTACHMENT, VIDEO])
def download_files(msg):msg.download(msg.fileName)typeSymbol = {PICTURE: 'img',VIDEO: 'vid', }.get(msg.type, 'fil')return '@%s@%s' % (typeSymbol, msg.fileName)@itchat.msg_register(FRIENDS)
def add_friend(msg):msg.user.verify()msg.user.send('Nice to meet you!')@itchat.msg_register(TEXT, isGroupChat=True)
def text_reply(msg):if msg.isAt:msg.user.send(u'@%s\u2005I received: %s' % (msg.actualNickName, msg.text))itchat.auto_login(True)
itchat.run(True)

注册消息优先级

多次注册同一类型消息时,遵循以下规则:

  • 后注册消息先于先注册消息
  • 带参数消息先于不带参数消息

依据这两个规则,上例1代码只执行第二个带参数注册的方法就很正常了,另外 itchat 还支持动态注册消息,一种方法是生成一个守护线程动态注册消息,另一种是使用 configured_reply 方法

消息内容

itchat 支持微信回复的以下几种类型的消息,包括:微信初始化消息、文本消息、图片消息、小视频消息、地理位置消息、名片消息、 语音消息、动画表情、普通链接和应用分享、音乐链接、群消息、红包消息、系统消息。

文本消息

文本消息是最常见的消息,基本格式如下:

MsgType: 1   # 消息类型 
FromUserName: 发送方ID
ToUserName: 接收方ID
Content: 消息内容

图片消息

MsgType: 3   # 消息类型 
FromUserName: 发送方ID
ToUserName: 接收方ID
MsgId: 用于获取图片
Content:<msg><img length="6503" hdlength="0" /><commenturl></commenturl></msg>

小视频消息

MsgType: 62   # 小视频消息
FromUserName: 发送方ID
ToUserName: 接收方ID
MsgId: 用于获取小视频
Content:<msg><img length="6503" hdlength="0" /><commenturl></commenturl></msg>

消息回复

itchat 提供了五种消息回复的方法:

  1. send方法
import itchat# 可发送多种类型消息
itchat.send(msg='文本消息', toUserName=None)
itchat.send('@img@%s' % '表情图片.gif')
itchat.send('@fil@%s' % '文件.docx')
itchat.send('@vid@%s' % '测试.mp4')

参数说明:

  • msg:消息内容。’@fil@文件地址’将会被识别为传送文件,’@img@图片地址’将会被识别为传送图片,’@vid@视频地址’将会被识别为小视频。
  • toUserName:发送对象,如果留空将会发送给自己。

返回值:

  • 发送成功:True
  • 失败:False
  1. send_msg方法
send_msg(msg='文本消息', toUserName=None)

参数说明:

  • msg:消息内容,仅文本
  • toUserName:发送对象,如果留空将会发送给自己

返回值:

  • 发送成功:True
  • 失败:False
  1. send_file、send_img、send_video方法
send_file(fileDir, toUserName=None)
send_img(fileDir, toUserName=None)
send_video(fileDir, toUserName=None)

参数说明:

  • fileDir:文件路径(不存在该文件时将打印无此文件的提醒)
  • toUserName:发送对象,如果留空将会发送给自己

返回值:

  • 发送成功:True
  • 失败:False

用户搜索 & 账号类型

主要好友、公众号、群聊。itchat 为这三种类型的账号分别提供了整体获取和根据条件搜索的方法

好友

1、好友的获取方法为 get_friends,将会返回完整的好友列表:

  • 其中每个好友为一个字典
  • 列表的第一项为本人的账号信息
    -传入 update 键为 True 将可以更新好友列表并返回
    2、好友的搜索方法为 search_friends,目前有如下四种搜索方式:
  1. 仅获取自己的用户信息
  2. 获取特定UserName的用户信息
  3. 获取备注、微信号、昵称中的任何一项等于name键值的用户
  4. 获取备注、微信号、昵称分别等于相应键值的用户
    其中3、4项可以一同使用,示例程序:
# 获取自己的用户信息,返回自己的属性字典
itchat.search_friends()
# 获取特定UserName的用户信息
itchat.search_friends(userName='@abcdefg1234567')
# 获取任何一项等于name键值的用户
itchat.search_friends(name='littlecodersh')
# 获取分别对应相应键值的用户
itchat.search_friends(wechatAccount='littlecodersh')
# 3、4项功能可以一同使用
itchat.search_friends(name='LittleCoder机器人', wechatAccount='littlecodersh')

3、更新用户信息的方法为 update_friend,该方法需要传入用户的 UserName,返回指定用户的最新信息。当然也可以传入 UserName 组成的列表,那么相应的也会返回指定用户的最新信息组成的列表。

公众号

1、公众号的获取方法为 get_mps,将会返回完整的公众号列表:

  • 其中每个公众号为一个字典
  • 传入 update 键为 True 将可以更新公众号列表并返回
    2、公众号的搜索方法为 search_mps,有两种搜索方法:
  1. 获取特定 UserName 的公众号:search_mps(userName=‘公众号名’)
  2. 获取名字中含有特定字符的公众号,返回值为一个字典的列表:search_mps(name=‘littleboy’)

群聊

1、群聊的获取方法为 get_chatrooms,将会返回完整的群聊列表:

  • 其中每个群聊为一个字典
  • 传入 update 键为 True 将可以更新群聊列表并返回通讯录中保存的群聊列表
  • 群聊列表为后台自动更新,如果中途意外退出存在极小的概率产生本地群聊消息与后台不同步
  • 为了保证群聊信息在热启动中可以被正确的加载,即使不需要持续在线的程序也需要运行 itchat.run()
  • 如果不想要运行上述命令,请在退出程序前调用 itchat.dump_login_status(),更新热拔插需要的信息

2、群聊的搜索方法为 search_chatrooms,有两种搜索方法,分别是通过传参 userName 和 name 进行搜索,方式同公众号搜索相似。

3、群聊用户列表的获取方法为 update_chatroom,同时需要关注以下几点:

  • 如果想要更新该群聊的其他信息也可以用该方法
  • 群聊在首次获取中不会获取群聊的用户列表,所以需要调用该命令才能获取群聊的成员
  • 该方法需要传入群聊的 UserName,返回特定群聊的详细信息
  • 同样也可以传入 UserName 组成的列表,那么相应的也会返回指定用户的最新信息组成的列表
    4、创建、增加、删除群聊用户的方法:
    memberList = itchat.get_friends()[1:]
# 创建群聊,topic键值为群聊名
chatroomName = itchat.create_chatroom(memberList, '测试群聊')
# 删除群聊内的群友
itchat.delete_member_from_chatroom(chatroomName, memberList[0])
# 增加好友进入群聊
itchat.add_member_into_chatroom(chatroomName, memberList[0], useInvitation=False)

命令行二维码

通过以下命令可以在登陆的时候使用命令行显示二维码:

itchat.auto_login(enableCmdQR=True)

可以通过将enableCmdQR赋值为特定的倍数进行调整:

itchat.auto_login(enableCmdQR=2)

默认控制台背景色为暗色(黑色),若背景色为浅色(白色),可以将enableCmdQR赋值为负值:

itchat.auto_login(enableCmdQR=-1)

退出程序后暂存登陆状态

过如下命令登陆,即使程序关闭,一定时间内重新开启也可以不用重新扫码。类似于休眠

itchat.auto_login(hotReload=True)

附件的下载与发送

itchat的附件下载方法存储在msg的Text键中。
发送的文件的文件名(图片给出的默认文件名)都存储在msg的FileName键中。
下载方法接受一个可用的位置参数(包括文件名),并将文件相应的存储。
如下:

@itchat.msg_register([PICTURE, RECORDING, ATTACHMENT, VIDEO])
def download_files(msg):msg.download(msg.fileName)itchat.send('@%s@%s' % ('img' if msg['Type'] == 'Picture' else 'fil', msg['FileName']),msg['FromUserName'])return '%s received' % msg['Type']#如果你不需要下载到本地,仅想要读取二进制串进行进一步处理可以不传入参数,方法将会返回图片的二进制串。
@itchat.msg_register([PICTURE, RECORDING, ATTACHMENT, VIDEO])
def download_files(msg):with open(msg.fileName, 'wb') as f:f.write(msg.download())

用户多开

可以完成类似于微信多开的操作:

import itchatnewInstance = itchat.new_instance()
newInstance.auto_login(hotReload=True, statusStorageDir='newInstance.pkl')@newInstance.msg_register(TEXT)
def reply(msg):return msg.textnewInstance.run()

退出及登陆完成后调用特定方法

登陆完成后的方法需要赋值在loginCallback中。而退出后的方法需要赋值在exitCallback中。

import time
import itchatdef lc():print('finish login')
def ec():print('exit')itchat.auto_login(loginCallback=lc, exitCallback=ec) #若不设置loginCallback的值,则将会自动删除二维码图片并清空命令行显示
time.sleep(3)
itchat.logout()

itchat实现与图灵机器人的交互

实现原理: 使用他人提供的接口实现
具体: 图灵机器人就是以一定的规则给图灵的服务器发送数据包(包含你对他说的话),图灵的服务器会以一定的规则给你返回数据包(包含他回复你的话),而你需要一个Tuling Key来告诉图灵服务器你有权和他对话,这里是官方免费提供的一些:

8edce3ce905a4c1dbb965e6b35c3834d
eb720a8970964f3f855d863d24406576
1107d5601866433dba9599fac1bc0083
71f28bf79c820df10d39b4074345ef8c

关于图灵机器人

图灵机器人API是在人工智能的核心能力(包括语义理解、智能问答、场景交互、知识管理等)的基础上,为广大开发者、合作伙伴和企业提供的一系列基于云计算和大数据平台的在线服务和开发接口。
开发者可以利用图灵机器人的API创建各种在线服务,灵活定义机器人的属性、编辑机器人的智能问答内容,打造个人专属智能交互机器人,也支持多渠道(微信公众平台、QQ聊天)的快速接入。
使用介绍:图灵机器人
回归正题

配置图灵机器人的简单介绍

发送的规则如下实例:

{'key'    : 'TULING_KEY','info'   : 'YOUR_MSG','userid' : 'USERID',
}

其中userId是用户的标志,让机器人知道你是你,他是他。(也就是说一个Tuling Key可以有多个用户)

而返回的内容基本是这样的:

{'code': 0,'text': 'RETURN_MSG',
}

实例:

#coding=utf8
import requestsapiUrl = 'http://www.tuling123.com/openapi/api'
data = {'key'    : '8edce3ce905a4c1dbb965e6b35c3834d', # 如果这个Tuling Key不能用,那就换一个'info'   : 'hello', # 这是我们发出去的消息'userid' : 'wechat-robot', # 用户id 可以修改
}
# 通过如下命令发送一个post请求
r = requests.post(apiUrl, data=data).json()# 让我们打印一下返回的值,看一下我们拿到了什么
print(r)

打印结果:
在这里插入图片描述
这时候可以看到他回复了:你好

原理步骤

  1. 接收我们要发送给图灵的消息
  2. 返回图灵返回给我们的消息。
  3. 再将与图灵交互并返回图灵返回结果的操作写成函数并在itchat中注册。

完整程序

# coding=utf8
import requests
import itchatKEY = '8edce3ce905a4c1dbb965e6b35c3834d'def get_response(msg):# 构造了要发送给服务器的数据apiUrl = 'http://www.tuling123.com/openapi/api'data = {'key'    : KEY,'info'   : msg,'userid' : 'wechat-robot',}try:r = requests.post(apiUrl, data=data).json()# 字典的get方法在字典没有'text'值的时候会返回None而不会抛出异常return r.get('text')'''用try-except捕获异常来为了防止服务器没有正常响应导致程序异常退出,如果服务器没能正常交互(返回非json或无法连接),那么就会进入下面的return'''except:# 将会返回一个Nonereturn# 注册方法
@itchat.msg_register(itchat.content.TEXT)
def tuling_reply(msg):# 为了保证在图灵Key出现问题的时候仍旧可以回复,这里设置一个默认回复defaultReply = 'I received: ' + msg['Text']# 如果图灵Key出现问题,那么reply将会是Nonereply = get_response(msg['Text'])return reply or defaultReply# 为了让实验过程不用多次扫码更加方便,使用热启动
itchat.auto_login(hotReload=True)
itchat.run()

更多功能开发请参考官网…
参考资料:https://itchat.readthedocs.io/zh/latest/


http://chatgpt.dhexx.cn/article/uOMjToqV.shtml

相关文章

再也不见,Itchat!

前言 本来想做一个利用微信自动回复的项目&#xff0c;查了很多有关这方面的资料。一开始&#xff0c;我百度搜索到的内容大多都是关于Itchat的。Itchat代码简单&#xff0c;也很容易上手。很轻松就写出了自己的demo。 Itchat 项目的介绍官方介绍如下&#xff1a; 项目介绍&a…

《伤寒杂病论》序——张仲景

后世医家孙思邈有《大医精诚》 张湛曰&#xff1a;夫经方之难精&#xff0c;由来尚矣。今病有内同而外异&#xff0c;亦有内异而外同&#xff0c;故五脏六腑之盈虚&#xff0c;血脉荣卫之通塞&#xff0c;固非耳目之所察&#xff0c;必先诊候以审之。 而寸口关尺有浮沉弦紧之乱…

2022年广西医院三基考试中医学综合训练题及答案

题库来源&#xff1a;优题宝公众号 2022年广西医院三基考试中医学综合训练题及答案&#xff0c;根据最新中医学大纲与历年真题汇总编写&#xff0c;包含中医学常考重点题型与知识点&#xff0c;有助于考生复习备考医院三基考试&#xff0c;取得好成绩。 1、 望诊面部呈青色时对…

【中医学】5 诊法

【第五章 诊法】 诊法,是中医诊察和收集病情资料的基本方法,它包括望、闻、问、切、四方面内容,故又称“四诊”。 通过“四诊”所收集到的临床资料,尤其是各种症状,是判断病种、辨别证候的主要依据。《难经六十一难》说:“望而知之谓之神,闻而知之谓之圣,问…

中医经络、睡眠

-拉足背 一位老中医的宝贵养生经验&#xff1a;把足背拉一拉&#xff0c;等于拉开4条经络&#xff0c;比经络按摩还有功效&#xff0c;为什么&#xff0c;看完下面的文章就明白了。 中医认为&#xff0c;经络决定人体健康&#xff0c;一旦经络出现堵塞&#xff0c;人体就会出现…

机器学习:基于Apriori算法对中医病症辩证关联规则分析

系列文章目录 作者:i阿极 作者简介:Python领域新星作者、多项比赛获奖者:博主个人首页 😊😊😊如果觉得文章不错或能帮助到你学习,可以点赞👍收藏📁评论📒+关注哦!👍👍👍 📜📜📜如果有小伙伴需要数据集和学习交流,文章下方有交流学习区!一起学习…

运动神经元中医认为?

运动神经元是一组散发或遗传的神经变性病。主要累及运动神经元&#xff0c;病程进展而死亡。该病选择性地损害皮质、脑干、脊髓的上和(或)下运动神经元&#xff0c;损害随意运动&#xff0c;出现不同组合的肌无力、萎缩&#xff0c;延髓麻痹和锥体束征。病理损害不同&#xff0…

每日一问-ChapGPT-20230416-中医基础-经络

文章目录 每日一问-ChapGPT系列起因每日一问-ChapGPT-20230416-中医基础-经络人体的经络有哪些&#xff0c;有什么规律&#xff0c;怎么记忆经络拓展-五运六气1# 五腧穴 与五运六气架构2# 五运六气 就在我们的经络中3#五运六气与子午流注 当日总结 每日一问-ChapGPT系列起因 近…

如何查看idea激活码的有效期

首先要在导航栏找到Help 点击选择Register(可以重新输入激活码)或者About(可以查看激活到期时间以及版本信息)即可 想要了解更多idea相关资讯&#xff0c;扫码关注公众号&#xff0c;欢迎大家一块交流学习。

Intellij IDEA 的激活方法

版本 2018.1.2 补丁下载&#xff1a;https://pan.baidu.com/s/1ydh2qQCLON4m0Lzk95ludA 版本 2018.3 补丁下载&#xff1a;http://idea.lanyus.com/jar/JetbrainsIdesCrack-3.4-release-enc.jar 将下载的文件放到安装IDEA路径的bin目录下 编辑 idea.exe.vmoptions 和 idea64…

IntelliJ IDEA Ultimate 安装激活

安装 先去官网 IntelliJ看一看&#xff0c;有两个版本&#xff1a; Community免费版可用于开发简单的J2SE项目&#xff0c;但对于J2EE&#xff0c;JS等就力不足了。Ultimate 版呢又是老套的30天试用&#xff0c;那怎么办呢&#xff1f;选择Community&#xff1f;我的回答是当然…

IDEA的使用:4.IntelliJ IDEA的激活

双击打开IDEA&#xff0c;如果是首次启动&#xff0c;会弹出如下的对话框&#xff1a; 如图所示&#xff0c;选择不导入已有的设置。 接着来到激活窗口&#xff1a; 接下来详细讲讲激活的方法。 对于2017版本的IDEA&#xff0c;可以尝试如下两种方法进行激活&#xff1a; 1.…

mac 中idea激活Jrebel

文章目录 mac 中idea激活Jrebel第一步&#xff1a;首先在idea中下载jrebel插件第二步&#xff1a;搭建服务器第三步&#xff1a;idea中激活jrebel mac 中idea激活Jrebel 第一步&#xff1a;首先在idea中下载jrebel插件 安装完成之后重新启动idea 第二步&#xff1a;搭建服务器…

Mac 安装IDEA以及激活方法

首先需要下载IDEA&#xff0c;选择适合自己的版本&#xff0c;这里是安装Mac版本&#xff0c;后缀名是.dmg的文件&#xff0c;下载好后&#xff0c;在路径&#xff1a;访达->下载&#xff0c;可以看到下载好的文件。 双击文件即可完成安装&#xff0c;安装过程中可能需要输…

[Intellij IDEA] 通过学生认证免费激活IDEA

IDEA是当前Java编程的热门编译器&#xff0c;但这是一款收费软件&#xff0c;它的售价真的很贵&#xff0c;而且30天的试用期对希望使用IDEA进行Java学习的同学来讲是远远不够的。但好在JetBrains为高校学生提供了学生认证以免费使用JetBrains全家桶&#xff0c;虽然每年都要进…

IntelliJ IDEA 2021 激活 实测OK 2022/2/24

IDEA 2021.3 安装教程_空-白_格的博客-CSDN博客_重装idea直接在idea下载最新的版本&#xff1a;IntelliJ IDEA: The Capable & Ergonomic Java IDE by JetBrains安装包下载后&#xff0c;安装直接下一步&#xff0c;下一步&#xff0c;完成。安装完了之后&#xff0c;不用急…

idea注册码获取方法

1、找到hosts文件(C:\Windows\System32\drivers\etc) 2、打开hosts文件&#xff0c;讲 0.0.0.0 account.jetbrains.com 添加到文件的末尾&#xff1b; 3、进入 http://idea.lanyus.com/ &#xff0c;点获取注册码,拷贝注册码&#xff1b; 4、打开IDEA&#xff0c;点击用注册…

2018IDEA注册码

好久不用IDEA了&#xff0c;最近由于项目需要才吧IDEA重新拿起来&#xff0c;没想到小编打开的一瞬间惊呆了&#xff0c;过期了&#xff0c;需要注册码&#xff0c;赶紧百度了一波&#xff0c;小编亲测可用&#xff0c;希望大家可以试试。 大家只需要把http://active.chinap…

IDEA注册码(附修改hosts文件的方法)

推荐获取IDEA注册码的网站&#xff1a;http://idea.lanyus.com/ 亲测好用&#xff01; 也可复制下边的注册码&#xff1a; K71U8DBPNE-eyJsaWNlbnNlSWQiOiJLNzFVOERCUE5FIiwibGljZW5zZWVOYW1lIjoibGFuIHl1IiwiYXNzaWduZWVOYW1lIjoiIiwiYXNzaWduZWVFbWFpbCI6IiIsImxpY2Vuc2VSZXN…