微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Windows下用python来获取微信撤回消息

转自:https://blog.csdn.net/sunzhibin1/article/details/83348304

娱乐(windows系统)

安装itchat

itchat一个开源的python微信库,支持发送消息、图片、视频、地图、名片、文件等,还可以实现自动回复等多种功能
看到的一个文档还不错 http://www.voidcn.com/article/p-zwmtezfk-e.html

1.安装python3.6

2.安装成功之后,进入pip3.exe所在的目录

    一般在安装目录的script目录下:C:\Users\Administrator\AppData\Local\Programs\Python\python37\Scripts

    安装itchat:pip3.exe install itchat 下图我的已经安装过了(注意:使用3以及以上版本执行)。

分享图片

 

代码

新建一个wx.py,编辑以下内容

# -*-encoding:utf-8-*-
import os
import re
import shutil
import time
import itchat
from itchat.content import *

# 说明:可以撤回的有文本文字、语音、视频、图片、位置、名片、分享、附件

# {msg_id:(msg_from,msg_to,msg_time,msg_time_rec,msg_type,msg_content,msg_share_url)}
msg_dict = {}

# 文件存储临时目录
rev_tmp_dir = "/RevDir/"
if not os.path.exists(rev_tmp_dir): os.mkdir(rev_tmp_dir)

# 表情有一个问题 | 接受信息和接受note的msg_id不一致 巧合解决方案
face_bug = None


# 将接收到的消息存放在字典中,当接收到新消息时对字典中超时的消息进行清理 | 不接受不具有撤回功能的信息
# [TEXT,PICTURE,MAP,CARD,SHARING,RECORDING,ATTACHMENT,VIDEO,FRIENDS,NOTE]
@itchat.msg_register([TEXT,VIDEO])
def handler_receive_msg(msg):
    global face_bug
    # 获取的是本地时间戳并格式化本地时间戳 e: 2017-04-21 21:30:08
    msg_time_rec = time.strftime("%Y-%m-%d %H:%M:%s",time.localtime())
    # 消息ID
    msg_id = msg[Msgid]
    # 消息时间
    msg_time = msg[CreateTime]
    # 消息发送人昵称 | 这里也可以使用RemarkName备注 但是自己或者没有备注的人为None
    msg_from = (itchat.search_friends(userName=msg[FromUserName]))["NickName"]
    # 消息内容
    msg_content = None
    # 分享链接
    msg_share_url = None
    if msg[Type] == Text             or msg[Type] == Friends:
        msg_content = msg[Text]
    elif msg[Type] == Recording             or msg[Type] == Attachment             or msg[Type] == Video             or msg[Type] == Picture:
        msg_content = r"" + msg[FileName]
        # 保存文件
        msg[Text](rev_tmp_dir + msg[FileName])
    elif msg[Type] == Card:
        msg_content = msg[RecommendInfo][NickName] + r" 的名片"
    elif msg[Type] == Map:
        x,y,location = re.search(
            "<location x=\"(.*?)\" y=\"(.*?)\".*label=\"(.*?)\".*",msg[OriContent]).group(1,2,3)
        if location is None:
            msg_content = r"纬度->" + x.__str__() + " 经度->" + y.__str__()
        else:
            msg_content = r"" + location
    elif msg[Type] == Sharing:
        msg_content = msg[Text]
        msg_share_url = msg[Url]
    face_bug = msg_content
    # 更新字典
    msg_dict.update(
        {
            msg_id: {
                "msg_from": msg_from,"msg_time": msg_time,"msg_time_rec": msg_time_rec,"msg_type": msg["Type"],"msg_content": msg_content,"msg_share_url": msg_share_url
            }
        }
    )


# 收到note通知类消息,判断是不是撤回并进行相应操作
@itchat.msg_register([NOTE])
def send_msg_helper(msg):
    global face_bug
    if re.search(r"\<\!\[CDATA\[.*撤回了一条消息\]\]\>",msg[Content]) is not None:
        # 获取消息的id
        old_msg_id = re.search("\<msgid\>(.*?)\<\/msgid\>",msg[Content]).group(1)
        old_msg = msg_dict.get(old_msg_id,{})
        if len(old_msg_id) < 11:
            itchat.send_file(rev_tmp_dir + face_bug,toUserName=filehelper)
            os.remove(rev_tmp_dir + face_bug)
        else:
            msg_body = "告诉你一个秘密: ?" + "\n"                        + old_msg.get(msg_from) + " 撤回了 " + old_msg.get("msg_type") + " 消息" + "\n"                        + old_msg.get(msg_time_rec) + "\n"                        + "内容 ?" + "\n"                        + r"" + old_msg.get(msg_content)
            # 如果是分享存在链接
            if old_msg[msg_type] == "Sharing": msg_body += "\n就是这个链接? " + old_msg.get(msg_share_url)

            # 将撤回消息发送到文件助手
            itchat.send(msg_body,toUserName=filehelper)
            # 有文件的话也要将文件发送回去
            if old_msg["msg_type"] == "Picture"                     or old_msg["msg_type"] == "Recording"                     or old_msg["msg_type"] == "Video"                     or old_msg["msg_type"] == "Attachment":
                file = @[email protected]%s % (rev_tmp_dir + old_msg[msg_content])
                itchat.send(msg=file,toUserName=filehelper)
                os.remove(rev_tmp_dir + old_msg[msg_content])
            # 删除字典旧消息
            msg_dict.pop(old_msg_id)


if __name__ == __main__:
    itchat.auto_login(hotReload=True,enableCmdQR=1)
    itchat.run()

 

执行

 扫码登录

分享图片

你就可以在文件传输助手中查看到撤回的微信了

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐