当前位置:   article > 正文

用python实现监听微信撤回消息_python实现pc微信消息通知监听

python实现pc微信消息通知监听

本文讲解一个Python脚本,使用itchat库来实现微信消息的监控和处理,特别是针对撤回消息的功能。下面我将从宏观和微观两个角度来讲解这段代码。

宏观(实现思路)

  1. 初始化:首先,脚本通过itchat.auto_login(True)实现自动登录微信。
  2. 消息存储:使用一个字典dict来存储接收到的消息,其中键是消息ID,值是包含消息详细信息的字典。
  3. 消息注册:通过itchat.msg_register装饰器注册消息处理函数,分别处理不同类型的消息。
  4. 消息处理:当接收到消息时,resever_info函数会被调用,将消息的详细信息存储到dict中。
  5. 撤回消息处理:当接收到撤回消息的通知时,note_info函数会被调用,从存储的消息字典中检索撤回的消息,并进行相应的处理。
  6. 文件保存:对于撤回的语音、图片等文件类型消息,脚本会将文件保存到本地,并发送撤回通知到文件助手。
  7. 消息删除:处理完撤回的消息后,从字典中删除对应的条目。

微观(具体模块划分以及代码解释)

  1. 导入模块

    • itchat:用于登录和操作微信。
    • itchat.content:包含消息类型的定义。
    • os:用于操作文件和目录。
    • time:用于处理时间相关的功能。
    • xml.dom.minidom:用于解析XML格式的数据。
  2. 创建目录

    • 检查是否存在用于保存撤回消息的目录,如果不存在则创建。
  3. 登录微信

    • itchat.auto_login(True):自动登录微信,True参数表示不打开网页确认。
  4. 消息注册与处理

    • @itchat.msg_register([TEXT, PICTURE, ...]):注册消息类型,这里包括文本、图片等。
    • resever_info(msg):处理接收到的消息,将消息信息存储到全局字典dict中。
  5. 撤回消息的识别与处理

    • @itchat.msg_register(NOTE):注册系统消息,特别是撤回消息的通知。
    • note_info(msg):处理撤回消息,根据撤回的消息类型执行不同的操作。
  6. 消息类型处理

    • 对于撤回的语音、文本、图片,脚本会分别处理。例如,对于语音消息,会调用recording_info函数保存语音文件,并发送撤回通知到文件助手。
  7. 发送撤回通知

    • 使用itchat.send函数发送撤回消息的文本通知到文件助手。
    • 使用itchat.send_file发送撤回的文件到文件助手。
  8. 启动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()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70

在这里插入图片描述
在这里插入图片描述
itchat下载桌面微信的库。切记。不要下载网页版的库,否则微信会报安全性错误无法登陆。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/代码探险家/article/detail/907188
推荐阅读
相关标签
  

闽ICP备14008679号