引入第三方模块itchat实现微信的自动回复:若收到的是文本信息、地图、名片、通知或分享,代码帮忙回复"【自动回复】我已收到您的消息,多谢";若收到的是图片/表情、语音、附件或视频,代码帮回复"【自动回复】我收到了一个XX类型的文件,多谢"。
注意不是所有微信号都支持下面的自动回复代码。新注册的微信号就不支持,扫码登录时会出现“<error><ret>1203</ret><message>为了你的帐号安全,此微信号已不允许登录网页微信……”的错误。这个跟微信管理方的规则设置有关系
import itchat
from itchat.content import *
# itchat.content包含所有的消息类型参数,这样处理的好处是代码中引用时不需要写前缀,比如文本类型不需写itchat.content.TEXT,只需写TEXT
# 通过装饰符将函数text_reply()注册为处理消息的函数,对收到的文本TEXT、地图MAP、名片CARD、通知NOTE、分享SHARING作出回应
@itchat.msg_register([TEXT, MAP, CARD, NOTE, SHARING]) # 装饰器
def text_reply(msg): # 形参msg接收发来的信息,信息是字典类型
return "【自动回复】我已收到您的消息,多谢" # 设定回复信息
# 对发过来的图片/表情PICTURE、语音RECORDING、附件ATTACHMENT和视频VIDEO作出回应
@itchat.msg_register([PICTURE, RECORDING, ATTACHMENT, VIDEO])
def receiveFile_reply(msg):
return "【自动回复】我收到了一个{}文件,多谢".format(msg['Type'])
itchat.auto_login(True)
# 扫码登陆。也可以写成itchat.auto_login(hotReload=True),参数为True的作用是存储登陆,这样即使程序关闭,一定时间内重新开启也可以不用重新扫码。itchat.auto_login()不具备存储登陆的功能
itchat.run() # 等待新消息
字典类型msg的键值Text (msg['Text'])对应的值的内容因消息类型的不同而不同:文本(TEXT)类型对应的是文本内容;地图(MAP)类型对应的是位置文本;名片(CARD)对应的是推荐人字典;通知(NOTE)对应通知文本;分享的文章(SHARE)对应分享名称;好友邀请(FRIENDS)对应添加好友所需参数;
图片/表情(PICTURE)、语音(RECORDING)、附件(ATTACHMENT)和视频(VIDEO)类型对应的msg[‘Text’]存放用于下载消息内容的方法。如果收到的附件时想自动下载,可以做如下处理:
@itchat.msg_register([PICTURE, RECORDING, ATTACHMENT, VIDEO])
def download_files(msg):
msg['Text'](msg['FileName'])
# msg[‘Text’]存放了用于下载消息内容的方法,msg[‘FileName’]是文件名,所以msg['Text'](msg['FileName'])是把接收到的文件下载下来。
发送文件可以用itchat.send_file(fileDir, toUserName=None);
发送图片itchat.send_img(fileDir, toUserName=None);
发送视频itchat.send_video(fileDir, toUserName=None),只支持mp4格式。fileDir:
文件路径(不存在该文件时将打印无此文件的提醒),toUserName:发送对象,留空会发送给自己,无法发送给自己的微信号可以借用filehelper。
举一个send_file()的例子:微信扫码登录,处于自动回复状态,如果接收到“天王盖地虎”的暗号,就给发送暗号方发送宝塔镇河妖.doc:
import itchat
from itchat.content import TEXT
@itchat.msg_register(TEXT)
def autoSendFile(msg):
if msg['Text'] == '天王盖地虎':
itchat.send_file('/Users/PythonABC/Documents/宝塔镇河妖.docx', msg['FromUserName'])
itchat.auto_login(True)
itchat.run()
也可以用itchat.send(msg=‘消息内容', toUserName=None)一锅端,发送各种类型的消息。toUserName=指定发送对象。不写这个参数是发给自己,但很多微信号不能发送给自己,所以用文件传输助手(filehelper)作为接受方。
这段代码用itchat.send()发送文本、图片文件、文件和视频文件:
import itchat
itchat.auto_login() # 扫码登录
itchat.send('Hello world!', 'filehelper') # 发送成功返回True,失败返回False,接收方是文件传输助手filehelper
# 请确保该程序目录下存在:contact.png、duesRecords.xlsx以及demo.mp4
itchat.send('@img@%s' % 'contact.png', 'filehelper')
# @img@图片地址'将会被识别为传送图片
itchat.send('@fil@%s' % 'duesRecords.xlsx', 'filehelper')
# @fil@文件地址'将会被识别为传送文件
itchat.send('@vid@%s' % '/Users/Smonkey/Music/1.mp4', 'filehelper')
# @vid@视频地址'将会被识别为小视频,只支持mp4格式