当用户在微信中撤回一条消息时,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技术站