下面是“利用Python找回微信撤回信息”的完整攻略:
前言
当我们在微信聊天过程中,发现信息被对方撤回了,如果你想找回这条消息,那么可以使用Python进行实现。
基本思路
- 使用itchat库进行微信登录;
- 接收到信息并打印在控制台上,同时保存在一个字典中;
- 监听撤回信息事件,找到该信息后将该条信息删除,并将被撤回的信息发送给自己。
具体实现
步骤一:登录微信
首先,我们需要登录我们的微信账号,这里可以使用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()
函数来注册信息类型。代码中的 TEXT
和 SHARING
代表了我们要监听的信息类型,isFriendChat=True
和 isGroupChat=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技术站