利用itchat模块登录网页版微信,将自己微信收到的所有消息都缓存下来,当检测到有消息撤回时,将撤回消息的缓存版本通过文件传输助手发送到自己的手机上。
于是你就可以看到别人撤回的消息是什么了!!!
效果是这样的:
源代码:
# Python查看微信撤回消息
# 公众号: Charles的皮卡丘
# 作者: Charles
import re
import os
import time
import itchat
import platform
from itchat.content import TEXT
from itchat.content import *
msg_info = {}
face_package = None
# 处理接收到的信息
@itchat.msg_register([TEXT, PICTURE, FRIENDS, CARD, MAP, SHARING, RECORDING, ATTACHMENT, VIDEO], isFriendChat=True, isMpChat=True)
def handleRMsg(msg):
global face_package
# 接收消息的时间
msg_time_receive = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
# 发信人
try:
msg_from = itchat.search_friends(userName=msg['FromUserName'])['NickName']
except:
msg_from = 'WeChat Official Accounts'
# 发信时间
msg_time_send = msg['CreateTime']
# 信息ID
msg_id = msg['MsgId']
msg_content = None
msg_link = None
# 文本或者好友推荐
if msg['Type'] == 'Text' or msg['Type'] == 'Friends':
msg_content = msg['Text']
print('[Text/Friends]: %s' % msg_content)
# 附件/视频/图片/语音
elif msg['Type'] == 'Attachment' or msg['Type'] == "Video" or msg['Type'] == 'Picture' or msg['Type'] == 'Recording':
msg_content = msg['FileName']
msg['Text'](str(msg_content))
print('[Attachment/Video/Picture/Recording]: %s' % msg_content)
# 推荐名片
elif msg['Type'] == 'Card':
msg_content = msg['RecommendInfo']['NickName'] + '的推荐名片,'
if msg['RecommendInfo']['Sex'] == 1:
msg_content += '性别男。'
else:
msg_content += '性别女。'
print('[Card]: %s' % msg_content)
# 位置信息
elif msg['Type'] == 'Map':
x, y, location = re.search("
if location is None:
msg_content = r"纬度:" + x.__str__() + ", 经度:" + y.__str__()
else:
msg_content = r"" + location
print('[Map]: %s' % msg_content)
# 分析的音乐/文章
elif msg['Type'] == 'Sharing':
msg_content = msg['Text']
msg_link = msg['Url']
print('[Sharing]: %s' % msg_content)
msg_info.update(
{
msg_id: {
"msg_from": msg_from,
"msg_time_send": msg_time_send,
"msg_time_receive": msg_time_receive,
"msg_type": msg["Type"],
"msg_content": msg_content,
"msg_link": msg_link
}
}
)
face_package = msg_content
# 监听是否有消息撤回
@itchat.msg_register(NOTE, isFriendChat=True, isGroupChat=True, isMpChat=True)
def monitor(msg):
if '撤回了一条消息' in msg['Content']:
recall_msg_id = re.search("\(.*?)\<\/msgid\>", msg['Content']).group(1)
recall_msg = msg_info.get(recall_msg_id)
print('[Recall]: %s' % recall_msg)
# 表情包
if len(recall_msg_id) < 11:
itchat.send_file(face_package, toUserName='filehelper')
else:
msg_prime = '---' + recall_msg.get('msg_from') + '撤回了一条消息---\n' \
'消息类型:' + recall_msg.get('msg_type') + '\n' \
'时间:' + recall_msg.get('msg_time_receive') + '\n' \
'内容:' + recall_msg.get('msg_content')
if recall_msg['msg_type'] == 'Sharing':
msg_prime += '\n链接:' + recall_msg.get('msg_link')
itchat.send_msg(msg_prime, toUserName='filehelper')
if recall_msg['msg_type'] == 'Attachment' or recall_msg['msg_type'] == "Video" or recall_msg['msg_type'] == 'Picture' or recall_msg['msg_type'] == 'Recording':
file = '@fil@%s' % (recall_msg['msg_content'])
itchat.send(msg=file, toUserName='filehelper')
os.remove(recall_msg['msg_content'])
msg_info.pop(recall_msg_id)
if __name__ == '__main__':
if platform.platform()[:7] == 'Windows':
itchat.auto_login(enableCmdQR=False, hotReload=True)
else:
itchat.auto_login(enableCmdQR=True, hotReload=True)
itchat.run()
顺便你还可以分析一下微信好友的构成:Python简单分析微信好友mp.weixin.qq.com
当然你也可以预测预测自己的颜值!Python实现颜值预测mp.weixin.qq.com
做个AI五子棋:Python实现AI五子棋【初版】mp.weixin.qq.com
用Python和Excel生成小姐姐:【Python+VBA】在Excel中生成小姐姐mp.weixin.qq.com
欢迎搜索关注我的微信公众号:Charles的皮卡丘
不定期分享更多有趣好玩的Python脚本~