利用Python找回微信撤回信息

下面是“利用Python找回微信撤回信息”的完整攻略:

前言

当我们在微信聊天过程中,发现信息被对方撤回了,如果你想找回这条消息,那么可以使用Python进行实现。

基本思路

  1. 使用itchat库进行微信登录;
  2. 接收到信息并打印在控制台上,同时保存在一个字典中;
  3. 监听撤回信息事件,找到该信息后将该条信息删除,并将被撤回的信息发送给自己。

具体实现

步骤一:登录微信

首先,我们需要登录我们的微信账号,这里可以使用itchat库来实现。使用itchat库实现微信的登录非常简单,只需几行代码即可:

import itchat
itchat.auto_login(hotReload=True)

步骤二:监听信息并保存

我们需要在收到信息时将其保存并打印出来。这里我们使用字典来保存所有的信息,使用了 msg['MsgId'] 作为键,将整个信息作为值保存下来。

msg_dict = {}
@itchat.msg_register([TEXT, SHARING], isFriendChat=True, isGroupChat=True)
def save_message(msg):
    nickname = get_nickname(msg)
    if nickname != "":
        if msg['MsgId'] not in msg_dict:
            msg_dict[msg['MsgId']] = msg
            print("{} {}: {}".format(now(), nickname, msg.text))

在这个例子中,我们使用了 itchat.msg_register() 函数来注册信息类型。代码中的 TEXTSHARING 代表了我们要监听的信息类型,isFriendChat=TrueisGroupChat=True 标识我们要监听的信息来源。同时我们使用了 get_nickname() 函数来获取信息来源的昵称,这个函数的代码详见步骤三。

步骤三:获取信息来源的昵称

在示例中,我们实现了一个函数 get_nickname() 来获取信息来源方的昵称,这个函数的实现如下:

def get_nickname(msg):
    if 'ActualNickName' in msg:
        return msg['ActualNickName']
    elif 'User' in msg:
        if 'NickName' in msg['User']:
            return msg['User']['NickName']
    elif 'ActualUserName' in msg:
        return ''

    return ''

你也可以根据自己的需求修改这个函数来实现不同的功能。

步骤四:监测撤回事件

在收到撤回事件时,我们需要在字典中查找被撤回的信息,找到后将这条信息从字典中删除,并将被撤回的信息发送给自己。

@itchat.msg_register(NOTE, isFriendChat=True, isGroupChat=True)
def recall_message(msg):
    global msg_dict
    if '撤回了一条消息' in msg['Content']:
        old_msg_id = re.search("<msgid>(.*?)</msgid>", msg['Content']).group(1)
        old_msg = msg_dict.get(old_msg_id, {})
        who = get_nickname(old_msg)
        what = ""

        if old_msg['Type'] == 'Text':
            what = old_msg['Text']
        elif old_msg['Type'] == 'Sharing':
            what = old_msg['Text'] + "\n" + old_msg['Url']
        else:
            what = "撤回了一条[{}]类型消息".format(old_msg['Type'])

        if who != "" and len(what) > 0:
            del msg_dict[old_msg_id]
            itchat.send("{}撤回了一条消息:{}".format(now(), who, what), toUserName='filehelper')

在这个示例中,我们使用了 itchat.msg_register() 函数注册了一个监听 NOTE 类型消息的事件。在事件中,我们首先使用正则表达式匹配出被撤回的信息的 ID,然后在字典中查找这条信息。如果找到了被撤回的信息,我们就使用 get_nickname() 函数获取信息来源的昵称并将被撤回的信息发送给自己。

示例说明

这里我们将使用一个简单的示例来说明这个攻略的实际使用情况。

首先,我们在命令行中使用 pip 命令安装 itchat 库:

pip install itchat

然后,创建一个文件名为 wechat_recover.py 的 Python 文件,将上述代码复制进去,并在命令行中执行该文件:

python wechat_recover.py

然后,在另一个微信账号中给这个账号发送一条消息,例如:

你好,这是一条测试信息。

在接收端,我们能够收到这条消息:

10:47:48 李小明: 你好,这是一条测试信息。

接着,我们将通过这个账号撤回这条信息,以触发撤回事件。你会发现,撤回事件被捕获到了,并且撤回的消息被发送到了自己。

10:47:57 小明撤回了一条消息: 你好,这是一条测试信息。

这就是本攻略的一个简单示例。当然在实际使用中,你可以将这个功能进一步扩展,例如将撤回的消息保存到数据库中,或者实现自定义通知方式等。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:利用Python找回微信撤回信息 - Python技术站

(0)
上一篇 2023年5月19日
下一篇 2023年5月19日

相关文章

  • 浅谈如何使用python抓取网页中的动态数据实现

    很高兴为您讲解如何使用Python抓取网页中的动态数据。本篇攻略将分为以下几个部分: 了解动态网页 使用Selenium模拟浏览器操作 使用Requests获取动态数据 两个示例说明 1. 了解动态网页 动态网页是指网页内容不是在服务器上预先生成的,而是通过JS等客户端技术在用户访问时实时生成的页面。因为动态网页的数据是实时生成的,所以其内容无法通过requ…

    python 2023年5月14日
    00
  • 如何用NumPy删除只包含0的数组行

    要删除NumPy数组中只包含0的行,可以使用以下步骤: 步骤1:导入NumPy库 import numpy as np 步骤2:创建包含0和非0的NumPy数组 arr = np.array([[1, 2, 3], [0, 0, 0], [4, 5, 6], [0, 0, 0]]) 这个NumPy数组arr包含4个行和3个列,并且两个行包含了0。 步骤3:使…

    python-answer 2023年3月25日
    00
  • 教你用Python实现一个轮盘抽奖小游戏

    下面是详细的攻略步骤: 1. 准备工作 首先需要安装Python,并安装一些必要的第三方库,如numpy和tkinter等等,可以使用以下命令安装: pip install numpy pip install tkinter 2. 构建轮盘 在构建轮盘的过程中,需要使用到tkinter库。首先,我们需要创建一个Canvas对象,用于绘制轮盘: import …

    python 2023年6月3日
    00
  • 解决Python一行输出不显示的问题

    针对这个问题,我可以给出以下的完整攻略: 问题背景 在使用Python编写程序时,有时会出现一行输出不显示的问题。这是因为Python默认情况下使用缓冲输出机制,需要在正确的位置刷新缓冲区以正常输出内容。如果不理解缓冲区概念,可以简单理解为Python程序暂时将要输出的内容先存在一个内存区域里,等到满足某些条件后再一次性输出。 解决方法 为了解决这种问题,可…

    python 2023年6月5日
    00
  • Python获取图片像素BGR值并生成纯色图

    获取图片像素BGR值并生成纯色图,一般可以分为以下几个步骤: 1. 导入需要的库 首先需要导入对应的库。我们需要opencv-python库来读取图片和获取像素值,同时还需要numpy库来生成纯色图。 import cv2 import numpy as np 2. 读取图片 接下来读取图片。这里我们使用opencv-python库中的imread()函数读…

    python 2023年5月18日
    00
  • Python正则表达式之基础篇

    以下是“Python正则表达式之基础篇”的完整攻略: 一、问题描述 正则表达式是一种用于匹配字符串的工具,可以用于搜索、替换、验证等操作。Python中内置了re模块,可以使用正则表达式进行字符串操作。本文将详细讲解Python正则表达式的基础知识,包括正则表达式的语法、常用函数和示例。 二、解决方案 2.1 正则表达式的语法 正则表达式是由普通字符和特殊字…

    python 2023年5月14日
    00
  • Python 常用 PEP8 编码规范详解

    下面是《Python 常用 PEP8 编码规范详解》的完整攻略: Python 常用 PEP8 编码规范详解 什么是 PEP8? PEP8 (Python Enhancement Proposal #8) 是 Python 官方推荐的编码规范,旨在使 Python 代码更易读、易维护和规范化。PEP指的是Python Enhancement Proposal…

    python 2023年5月31日
    00
  • 解决python pandas读取excel中多个不同sheet表格存在的问题

    以下是关于解决 Python Pandas 读取 Excel 中多个不同 sheet 表格的问题的详细实例教程。 问题描述 在使用 Pandas 读取 Excel 文件时,如果文件中有多个 sheet 表格,那么该如何读取其中的某一个或多个 sheet 表格呢? 解决方法 首先,我们需要安装 Pandas 库,可以使用以下命令进行安装: pip instal…

    python 2023年5月14日
    00
合作推广
合作推广
分享本页
返回顶部