赞
踩
本文讲解一个Python脚本,使用itchat库来实现微信消息的监控和处理,特别是针对撤回消息的功能。下面我将从宏观和微观两个角度来讲解这段代码。
itchat.auto_login(True)
实现自动登录微信。dict
来存储接收到的消息,其中键是消息ID,值是包含消息详细信息的字典。itchat.msg_register
装饰器注册消息处理函数,分别处理不同类型的消息。resever_info
函数会被调用,将消息的详细信息存储到dict
中。note_info
函数会被调用,从存储的消息字典中检索撤回的消息,并进行相应的处理。导入模块:
itchat
:用于登录和操作微信。itchat.content
:包含消息类型的定义。os
:用于操作文件和目录。time
:用于处理时间相关的功能。xml.dom.minidom
:用于解析XML格式的数据。创建目录:
登录微信:
itchat.auto_login(True)
:自动登录微信,True
参数表示不打开网页确认。消息注册与处理:
@itchat.msg_register([TEXT, PICTURE, ...])
:注册消息类型,这里包括文本、图片等。resever_info(msg)
:处理接收到的消息,将消息信息存储到全局字典dict
中。撤回消息的识别与处理:
@itchat.msg_register(NOTE)
:注册系统消息,特别是撤回消息的通知。note_info(msg)
:处理撤回消息,根据撤回的消息类型执行不同的操作。消息类型处理:
recording_info
函数保存语音文件,并发送撤回通知到文件助手。发送撤回通知:
itchat.send
函数发送撤回消息的文本通知到文件助手。itchat.send_file
发送撤回的文件到文件助手。启动itchat:
itchat.run()
:启动itchat,开始监听和处理消息。msg['Text']
:获取消息的文本内容。msg['MsgId']
:获取消息的唯一标识符。msg['Type']
:获取消息的类型。msg['FileName']
:对于文件类型的消息,获取文件名。itchat.search_friends(userName=msg['FromUserName'])
:根据用户ID搜索好友,获取昵称。time.localtime(ticks)
和time.strftime
:将时间戳转换为本地时间格式。xml.dom.minidom.parseString(content)
:解析XML格式的字符串。这段代码实现了一个自动监控微信消息,并处理撤回消息的功能,将撤回的消息保存并通知用户。
import itchat from itchat.content import * import os import time import xml.dom.minidom temp = 'd:/itchat' + '/' + '撤回的消息' if not os.path.exists(temp): os.mkdir(temp) itchat.auto_login(True) dict = {} @itchat.msg_register([TEXT, PICTURE, FRIENDS, CARD, MAP, SHARING, RECORDING, ATTACHMENT, VIDEO]) def resever_info(msg): global dict info = msg['Text'] msgId = msg['MsgId'] info_type = msg['Type'] name = msg['FileName'] fromUser = itchat.search_friends(userName=msg['FromUserName'])['NickName'] ticks = msg['CreateTime'] time_local = time.localtime(ticks) dt = time.strftime("%Y-%m-%d %H:%M:%S", time_local) dict[msgId] = {"info": info, "info_type": info_type, "name": name, "fromUser": fromUser, "dt": dt} @itchat.msg_register(NOTE) def note_info(msg): if '撤回了一条消息' in msg['Text']: content = msg['Content'] doc = xml.dom.minidom.parseString(content) result = doc.getElementsByTagName("msgid") msgId = result[0].childNodes[0].nodeValue msg_type = dict[msgId]['info_type'] if msg_type == 'Recording': recording_info = dict[msgId]['info'] info_name = dict[msgId]['name'] fromUser = dict[msgId]['fromUser'] dt = dict[msgId]['dt'] recording_info(temp + '/' + info_name) send_msg = '【发送人:】' + fromUser + '\n' + '发送时间:' + dt + '\n' + '撤回了一条语音' itchat.send(send_msg, 'filehelper') itchat.send_file(temp + '/' + info_name, 'filehelper') del dict[msgId] print("保存语音") elif msg_type == 'Text': text_info = dict[msgId]['info'] fromUser = dict[msgId]['fromUser'] dt = dict[msgId]['dt'] send_msg = '【发送人:】' + fromUser + '\n' + '发送时间:' + dt + '\n' + '撤回内容:' + text_info itchat.send(send_msg, 'filehelper') del dict[msgId] print("保存文本") elif msg_type == 'Picture': picture_info = dict[msgId]['info'] fromUser = dict[msgId]['fromUser'] dt = dict[msgId]['dt'] info_name = dict[msgId]['name'] picture_info(temp + '/' + info_name) send_msg = '【发送人:】' + fromUser + '\n' + '发送时间:' + dt + '\n' + '撤回了一张图片' itchat.send(send_msg, 'filehelper') itchat.send_file(temp + '/' + info_name, 'filehelper') del dict[msgId] print("保存图片") itchat.run()
itchat下载桌面微信的库。切记。不要下载网页版的库,否则微信会报安全性错误无法登陆。
赞
踩
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。