python微信撤回监测代码

当用户在微信中撤回一条消息时,Python可以通过调用微信网页版API来监测到该消息的撤回。下面是一份完整的Python微信撤回监测代码攻略。

1.准备工作

首先需要创建一个微信开发者账号,并获取网页版微信的cookie和服务器请求地址。

2.导入依赖库

需要使用的依赖库如下:

import requests
import time
import json
import re
import itchat

其中,requests库是用于发送HTTP请求;time库是用于处理时间的函数;json库是用于JSON格式的编码解码;re是用于正则表达式操作;itchat是一个基于网页微信的Python库,可以用于自动化发送和接收消息。

3.登录网页版微信并获取cookie

将网页版微信的登录页面保存下来,然后使用requests库发送POST请求,带上微信账号和密码,即可模拟登录。登录成功后,可以从response中的cookie字段获取到登录后的cookie信息。

url = 'https://login.weixin.qq.com/jslogin'
params = {
    'appid': 'wx782c26e4c19acffb',
    'redirect_uri': 'https://wx.qq.com/cgi-bin/mmwebwx-bin/webwxnewloginpage',
    'fun': 'new',
    'lang': 'zh_CN',
    '_': int(time.time()),
}
r = requests.get(url, params=params)
pattern = r'window.QRLogin.code = (\d+); window.QRLogin.uuid = "(\S+?)";'
search = re.search(pattern, r.text)
if search.group(1) == '200':
    uuid = search.group(2)
    print('获取到uuid:', uuid)
    show_qr_code()
else:
    print('登录失败')

以上代码中,show_qr_code()是自定义的一个函数,用于将登录二维码显示在控制台中。

4.显示登录二维码并等待扫描

使用如下代码,可以在控制台中显示出微信的登录二维码,并等待用户扫描。

def show_qr_code():
    params = {
        'appid': 'wx782c26e4c19acffb',
        'uuid': uuid,
        'last': '_',
        '_': int(time.time()),
    }
    url = 'https://login.weixin.qq.com/qrcode/' + uuid
    r = requests.get(url, params=params)
    with open('qr_code.png', 'wb') as f:
        f.write(r.content)
    print('正在等待扫描二维码...')
    itchat.auto_login(hotReload=True, enableCmdQR=2)

当用户使用手机扫描二维码后,网页版微信会将扫描结果推送给Python程序。

5.获取用户信息

登录成功后,需要获取用户的基本信息。

def get_user_info():
    url = 'https://wx.qq.com/cgi-bin/mmwebwx-bin/webwxinit?r=-424911548&lang=en_US&pass_ticket=' + pass_ticket
    params = {'BaseRequest': base_request}
    headers = {'Content-Type': 'application/json; charset=UTF-8'}
    r = requests.post(url, headers=headers, data=json.dumps(params))
    result = json.loads(r.text)
    me = result['User']
    return me

该代码将获取当前登录用户的基本信息,包括用户ID、昵称、头像等信息。

6.接收并处理消息

使用itchat库中的itchat.run()可以启动微信客户端,开始接收和处理微信消息。

def on_message_received(msg):
    """
    处理用户发送的消息
    """
    if msg['Type'] == 'Text':
        print(msg['Content'])

以上代码用于处理收到的文本消息。

7.检查消息是否撤回

on_message_received()方法中,检查消息是否撤回,在撤回消息时执行相应的操作。

def on_message_revoked(msg):
    """
    处理消息撤回事件
    """
    if msg['Status'] == 4:
        print('检测到消息撤回:', msg['Content'])

itchat.run()

以上代码实现了微信撤回监测功能。假如有A和B两个朋友,B在微信中发送了一条消息,A已经成功接收到了消息。当B撤回消息时,Python程序会检测到这一事件,并在控制台中输出一条相应的信息。

示例代码:

``` python
import requests
import time
import json
import re
import itchat

uuid = ''
base_request = {}
pass_ticket = ''

def get_login_info():
global base_request, pass_ticket
url = 'https://wx.qq.com/cgi-bin/mmwebwx-bin/webwxinit?r=2025002138&lang=en_US&pass_ticket=' + pass_ticket
headers = {'Content-Type': 'application/json; charset=UTF-8'}
params = {'BaseRequest': base_request}
r = requests.post(url, headers=headers, data=json.dumps(params))
result = json.loads(r.text)
contact_list = result['ContactList']
my_info = result['User']
print('登录成功,昵称:', my_info['NickName'])

def login():
global uuid
url = 'https://login.weixin.qq.com/jslogin'
params = {
'appid': 'wx782c26e4c19acffb',
'redirect_uri': 'https://wx.qq.com/cgi-bin/mmwebwx-bin/webwxnewloginpage',
'fun': 'new',
'lang': 'zh_CN',
'_': int(time.time()),
}
r = requests.get(url, params=params)
pattern = r'window.QRLogin.code = (\d+); window.QRLogin.uuid = "(\S+?)";'
search = re.search(pattern, r.text)
if search.group(1) == '200':
uuid = search.group(2)
print('获取到uuid:', uuid)
show_qr_code()
else:
print('登录失败')

def show_qr_code():
params = {
'appid': 'wx782c26e4c19acffb',
'uuid': uuid,
'last': '',
'
': int(time.time()),
}
url = 'https://login.weixin.qq.com/qrcode/' + uuid
r = requests.get(url, params=params)
with open('qr_code.png', 'wb') as f:
f.write(r.content)
print('正在等待扫描二维码...')
itchat.auto_login(hotReload=True, enableCmdQR=2)
base_request = itchat.base_request(itchat.get_QRuuid())
pass_ticket = base_request["pass_ticket"]
get_login_info()

def get_user_info():
url = 'https://wx.qq.com/cgi-bin/mmwebwx-bin/webwxinit?r=-424911548&lang=en_US&pass_ticket=' + pass_ticket
params = {'BaseRequest': base_request}
headers = {'Content-Type': 'application/json; charset=UTF-8'}
r = requests.post(url, headers=headers, data=json.dumps(params))
result = json.loads(r.text)
me = result['User']
return me

def on_message_received(msg):
"""
处理用户发送的消息
"""
if msg['Type'] == 'Text':
print(msg['Content'])

def on_message_revoked(msg):
"""
处理消息撤回事件
"""
if msg['Status'] == 4:
print('检测到消息撤回:', msg['Content'])

login()

itchat.msg_register(itchat.content.TEXT)(on_message_received)
itchat.run()

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python微信撤回监测代码 - Python技术站

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

相关文章

  • Python3中.whl文件创建及使用

    下面是关于“Python3中.whl文件创建及使用”的完整攻略,内容主要包括如何创建.whl文件和如何使用.whl文件。 1. 什么是.whl文件 .wheel文件(缩写为.whl)是Python软件包的一种新格式,也是.dist-info和.egg-info两种格式的继承和统一。.whl文件是一个ZIP格式的压缩包,里面包含了Python模块的代码,以及其…

    python 2023年6月3日
    00
  • Python利用PyVista进行mesh的色彩映射的实现

    关于Python利用PyVista进行mesh的色彩映射的实现攻略,我来给你详细讲解。整个过程可以总结为以下几个步骤: 安装PyVista 首先你需要安装PyVista,可以通过pip命令进行安装,具体命令如下: pip install pyvista 创建mesh并设置颜色映射 接下来,你需要使用PyVista创建mesh,并设置颜色映射。可以通过以下代码…

    python 2023年6月3日
    00
  • 使用NumPy将每一行除以一个向量元素

    使用NumPy将每一行除以一个向量元素的过程,可以通过以下步骤实现: 第一步,导入NumPy库。在Python代码中,我们通常使用import语句导入NumPy库。 import numpy as np 第二步,定义一个NumPy数组。这里我们定义一个3行2列的数组。 arr = np.array([[1, 2], [3, 4], [5, 6]]) 第三步,…

    python-answer 2023年3月25日
    00
  • 基于sklearn实现Bagging算法(python)

    基于sklearn实现Bagging算法(python) Bagging算法是一种集成学习方法,它通过对多个基分类器的测结果进行平均或投票来提高模型的准确性。本文将详细介绍如何Python中的sklearn库实现Bagging算法提供两个示例说明。 Bagging算法简介 Bagging法是一种集成学习方法,它通过对多个基分类器的测结果进行平均或投票来提高模…

    python 2023年5月14日
    00
  • pandas中read_csv的缺失值处理方式

    在pandas数据分析库中,read_csv()函数用于读取以逗号分隔的(csv)文件格式。在处理CSV文件时我们经常会遇到缺失值这个问题,下面是pandas中read_csv的缺失值处理方式的完整攻略。 1. 缺失值的类型 pandas中的缺失值分为两种类型: NaN:表示缺失数值的特殊浮点数,即“Not a Number”。 None:表示缺失值的Pyt…

    python 2023年6月3日
    00
  • 使用带有 Python 模拟的生成器来复制服务器响应

    【问题标题】:Using a generator with Python mock to replicate server responses使用带有 Python 模拟的生成器来复制服务器响应 【发布时间】:2023-04-03 05:32:01 【问题描述】: 我想使用一个列表(转换为生成器)来模拟我的 API 调用(使用 unittest.mock)。…

    Python开发 2023年4月8日
    00
  • Python实现按中文排序的方法示例

    下面我会详细讲解“Python实现按中文排序的方法示例”的完整攻略,包括读取中文字符的方式、安装中文字符排序库、使用中文字符排序库的方法以及两个排序的示例。 读取中文字符 由于中文字符在计算机中的表示方法并不是直接的字符,而是Unicode编码的形式,因此在读取中文字符之前需要先将其转化为Unicode编码。可以采用以下方式读取中文字符: chinese_s…

    python 2023年5月20日
    00
  • Django笔记二十五之数据库函数之日期函数

    本文首发于公众号:Hunter后端原文链接:Django笔记二十五之数据库函数之日期函数 日期函数主要介绍两个大类,Extract() 和 Trunc() Extract() 函数作用是提取日期,比如我们可以提取一个日期字段的年份,月份,日等数据 Trunc() 的作用则是截取,比如 2022-06-18 12:12:12,我们可以根据需求获取到日期 202…

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