利用Python找回微信撤回信息

yizhihongxing

下面是“利用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 PIL ImageDraw.Draw.pieslice()

    下面是Python PIL库中ImageDraw.Draw.pieslice()方法的详细攻略: 方法介绍 ImageDraw.Draw.pieslice()方法用于画一个扇形。其语法如下: draw.pieslice(xy, start, end, fill=None, outline=None) 其中,参数含义如下: xy:扇形所在的矩形区域,由坐标 (…

    python-answer 2023年3月25日
    00
  • PyCharm运行提示No Python Interpreter错误怎么办?

    PyCharm运行提示No Python Interpreter错误怎么办? 当在PyCharm中运行Python程序时,有时会遇到”No Python interpreter configured for the project”的错误提示。这个错误通常是由于PyCharm没有到Python解释器引起的。本文将详细讲解如何解决这个问题。 解决方法 方法一:…

    python 2023年5月13日
    00
  • python为图片和PDF去水印详解

    Python为图片和PDF去水印详解 前言 在许多实际应用中,我们需要处理一些图片和PDF文件,并且这些文件可能包含着不必要的水印。因此,本文将介绍如何使用Python去除这些水印。 需要提醒的是,本文所介绍的所有方法仅用于学习和技术研究,务必遵守各种法律法规和伦理道德规范。 去除图片水印 1. 使用Pillow库 Pillow是Python中一个非常常用的…

    python 2023年6月3日
    00
  • Python reversed()改变顺序

    当我们使用Python语言进行编程时,经常需要对一个序列进行逆序操作。Python提供了一个非常方便的方法:reversed()函数。在本篇文章中,我们将详细讲解Python reversed()函数的使用方法。 reversed()函数基本用法 reversed()函数用于将序列进行逆序操作,返回一个新的序列。它可以接收实参为序列,如字符串、列表、元组等。…

    python-answer 2023年3月25日
    00
  • Python实现的彩票机选器实例

    下面我会详细讲解Python实现的彩票机选器实例的完整攻略。 1. 制定需求 在开始编码之前,我们需要先制定需求,明确这个彩票机选器实例需要实现哪些功能,可以给用户带来什么样的体验。例如,这个彩票机选器需要实现以下功能: 用户可以指定选号个数,生成一组指定个数的彩票号码。 支持指定彩票号码的范围,例如从1到50,或从1到35等等。 彩票号码要求不能重复,即不…

    python 2023年5月23日
    00
  • 用Python将Excel数据导入到SQL Server的例子

    我可以为您提供详细的讲解。 1. 准备工作 在实现将Excel数据导入到SQLServer之前,我们需要做一些准备工作: 安装Python和相应的依赖库 安装SQLServer的Python包 准备Excel数据文件和SQLServer数据库 其中,安装Python和相应的依赖库可以参考Python官方网站和pip。安装SQLServer的Python包可以…

    python 2023年5月13日
    00
  • python实现心型照片墙效果

    下面是“python实现心型照片墙效果”的完整攻略。 1. 确定实现思路 首先我们需要确定实现思路,心型照片墙效果主要由以下几步完成: 读入图片 裁剪并调整图片 根据心型曲线排列图片并拼接 2. 读入图片 我们可以使用Pillow库来读入图片,Pillow是Python中处理图片的标准库之一,也是Python 3.x中最为常用的库之一。 以下是读取图片的Py…

    python 2023年6月6日
    00
  • python如何实现数组元素两两相加

    下面是Python实现数组元素两两相加的完整攻略: 什么是数组元素两两相加? 数组元素两两相加是指将数组中所有元素两两配对,然后相加得到一个新的数组。 例如,对于数组[1, 3, 5, 7],我们可以将它拆分成[(1, 3), (5, 7)]两组,然后相加得到[4, 12],即新的数组。 Python如何实现数组元素两两相加? Python中可以通过列表推导…

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