python微信撤回监测代码

yizhihongxing

当用户在微信中撤回一条消息时,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对称加密算法AES、DES3实例详解

    下面是详细讲解“Python3对称加密算法AES、DES3实例详解”的完整攻略,包括算法原理、Python实现和两个示例。 算法原理 对称加密算法是一种常用的加密算法,其基本思想是使用同一个密钥对数据进行加密和解密。常用的对称加密算法包括AES、DES、3DES等。其中,AES是一种高级加密标准,其基本思想是使用一个密钥对数据进行加密和解密密钥长度可以是12…

    python 2023年5月14日
    00
  • python 实现将字典dict、列表list中的中文正常显示方法

    要在 Python 中将中文正常地显示出来,需要注意两点:编码格式和输出方式。下面是详细的步骤说明: 设置编码格式 首先,需要在 Python 文件中设置编码格式,常用的有 UTF-8 和 GBK 两种格式,这里以 UTF-8 为例。 在 Python 文件的开头添加如下代码: # -*- coding: utf-8 -*- 此代码是告诉 Python 解释…

    python 2023年5月13日
    00
  • Python爬虫基础之爬虫的分类知识总结

    针对“Python爬虫基础之爬虫的分类知识总结”这篇文章,我将为您提供以下攻略: 一、了解爬虫分类的基础知识 在这篇文章中,作者首先讲解了爬虫的分类,分别是通用爬虫、聚焦爬虫、增量式爬虫和深度爬虫。其中,通用爬虫指的是抓取互联网上全部网页;聚焦爬虫是抓取特定领域网站的数据;增量式爬虫是根据已抓取内容的变化量,只抓取已更新的内容;深度爬虫是指对于一个网站,不能…

    python 2023年5月14日
    00
  • Python os.mkdir()与os.makedirs()的使用区别

    当我们需要在Python脚本中创建一个文件夹时,可以使用Python内置的os模块中提供的os.mkdir()函数或os.makedirs()函数。这两个函数都用于在指定路径创建新目录,但它们之间有一些区别,本文将详细介绍其使用区别。 os.mkdir() os.mkdir()函数用来创建单层目录,即在指定路径上创建一个新目录,如果路径的上级目录不存在,则会…

    python 2023年6月2日
    00
  • Python是什么?有什么用途?

    Python是一种高级、解释性的计算机编程语言。它拥有简单易学、简洁优美、易读易写等诸多优点,深受程序员的喜爱。Python可以应用于多种领域,包括web开发、人工智能、科学计算、数据分析等。 Python的应用范围非常广泛,下面我来列举几个典型的应用场景: 1. Web开发 Python可以用来开发web应用。有很多web框架可以供开发者选择,如Djang…

    python 2023年4月19日
    00
  • Spring事件发布监听,顺序监听,异步监听方式

    下面是关于Spring事件发布监听、顺序监听和异步监听的详细攻略: Spring事件发布监听 1. 什么是Spring事件 Spring事件是一种用于对象之间通信的机制,它允许一个组件封装某些信息(也称为事件),并将该事件通知其他组件。Spring事件可以用于解耦,减少组件之间的依赖关系并提高代码的可重用性,是Spring应用程序中常用的一种机制。 2. 如…

    python 2023年6月13日
    00
  • Python中反转二维数组的行和列问题

    Python中反转二维数组的行和列问题需要理解矩阵的基本概念并掌握Python列表的特点和操作。 1. 矩阵的转置 矩阵转置是指矩阵的行列互换。在Python中,可以使用嵌套的列表表示矩阵,例如: matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]] 以上代码定义了一个$3 \times 3$的矩阵,它可以看作是一个包含3个子…

    python 2023年6月6日
    00
  • python3读取excel文件只提取某些行某些列的值方法

    针对“python3读取excel文件只提取某些行某些列的值方法”的问题,我为您提供以下完整攻略: 1. 安装依赖库 使用Python读写Excel需要依赖第三方库openpyxl和pandas,您需要确保已经安装它们。如果您正在使用anaconda,可以通过以下命令进行安装: conda install openpyxl pandas 如果您没有使用ana…

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