首先宣告,本文主要就是在試圖復現這篇檔案中所說的:
想查看微信好友撤回的訊息?Python幫你搞定
因此要是下文中有什么講的不清楚的地方,大家也可以參考上面這篇檔案,(總感覺騰訊云里面抓來一篇教自動化爬微信的工具的檔案,em…不得不說,騰訊心挺大啊!)
一、pip Install itchat
既然都用python解決問題了,第一步當然是明確用什么庫啦,直接執行pip install itchat:

👌 done!
二、itchat.login()
下完了庫,就得試下庫的最入門用法啦,啦啦啦:

但沒想到,復現到這一步時就出問題了,直接用itchat庫像上面這樣操作,登陸的會是微信的網頁版,而騰訊之前為了防止大家用計算機自動化操作微信從而可能會導致一些安全問題,封停了網頁版微信API,如果只是像上面這樣做的話,控制臺會提醒說“由于安全原因,此微信號不能使用網頁版微信,你可以使用+Windows+版微信或+Mac+版微信登錄,”
ok,男人要有耐心,遇事心平氣和,google+知乎,若沒試過七七四十九種解決方案,萬不可直接考慮砸電腦,
很好,經過幾次試錯以后,找到一種簡單便捷的解決方案:

很好,如上操作完,登陸成功!哦耶??!
三、itchat.search_friends() + send()
很好,登陸成功,來試著給好友發條訊息?
我大概執行了下面這樣的代碼:

執行結果:
很好,發送成功!
四、@itchat.msg_register()
接下來我們要監聽一下好友發送的訊息,嘗試在本機執行參考檔案中的這段代碼:

在我本機復現的效果,沒毛病,效果杠杠的,發啥我都能在控制臺監聽到了,嘿嘿嘿:

五、def reserver_info(msg)
接下來我們來復現下面👇這一段:

我本機上的情況(抄的我好開心啊[捂臉]):

六、@itchat.msg_register([TEXT, PICTURE, RECORDING])
上面完成了對于文字內容的監聽,接下來要感受一下圖片、語音什么的如何處理了,
嘗試復現下面的代碼:

本機復現成功,結果我就先不放了,不然又得打碼,好麻煩[捂臉]
原文中對于圖片格式和音頻格式的講解:

七、os.mkdir() + info()
我們現在牽扯到應該怎么存盤圖片和語音資訊了,
而我接下來繼續的行為,低情商的說法叫:繼續抄;高情商的說法:人家代碼的可復用性好高,
在本機復現這段代碼:

執行結果:

是python就是這么容易順利執行,讓人感覺枯燥且乏味嗎?Hhh,當年勞資要是想用別人的C++的代碼,沒個取經的精神,過上那么九九八十一難是絕對調不通滴呀,再一次,手動捂臉:[捂臉]
八、note_info(msg)
現在我們能夠存盤聊天資訊了,就是既然是要做防撤回軟體,我們應該只需要存那些撤回了的資訊,那么靠什么來判別哪些資訊是撤回訊息呢?Content模塊為我們提供了NOTE型別,該型別指的是系統訊息:

好,我們繼續在本地復現上面的程式:

復現成功,枯燥,
九、完整程式代碼
最后就是完整程式的代碼:
import itchat
from itchat.content import *
import os
import time
import xml.dom.minidom # 決議xml模塊
# 這是保存撤回訊息的檔案目錄(如:圖片、語音等),這里已經寫死了,大家可以自行修改
temp = '/Users/yourname/Documents/itchat' + '/' + '撤回的訊息'
if not os.path.exists(temp):
os.mkdir(temp)
itchat.auto_login(True) # 自動登錄
dict = {} # 定義一個字典
# 這是一個裝飾器,給下面的函式添加新功能
# 能夠捕獲好友發送的訊息,并傳遞給函式引數msg
@itchat.msg_register([TEXT, PICTURE, FRIENDS, CARD, MAP, SHARING, RECORDING, ATTACHMENT, VIDEO]) # 文本,語音,圖片
def resever_info(msg):
global dict # 宣告全域變數
info = msg['Text'] # 取出訊息內容
msgId = msg['MsgId'] # 取出訊息標識
info_type = msg['Type'] # 取出訊息型別
name = msg['FileName'] # 取出訊息檔案名
# 取出訊息發送者標識并從好友串列中檢索
fromUser = itchat.search_friends(userName=msg['FromUserName'])['NickName']
ticks = msg['CreateTime'] # 獲取資訊發送的時間
time_local = time.localtime(ticks)
dt = time.strftime("%Y-%m-%d %H:%M:%S", time_local) # 格式化日期
# 將訊息標識和訊息內容添加到字典
# 每一條訊息的唯一標識作為鍵,訊息的具體資訊作為值,也是一個字典
dict[msgId] = {"info": info, "info_type": info_type, "name": name, "fromUser": fromUser, "dt": dt}
@itchat.msg_register(NOTE) # 監聽系統提示
def note_info(msg):
# 監聽到好友撤回了一條訊息
if '撤回了一條訊息' in msg['Text']:
# 獲取系統訊息中的Content結點值
content = msg['Content']
# Content值為xml,決議xml
doc = xml.dom.minidom.parseString(content)
# 取出msgid標簽的值
result = doc.getElementsByTagName("msgid")
# 該msgId就是撤回的訊息標識,通過它可以在字典中找到撤回的訊息資訊
msgId = result[0].childNodes[0].nodeValue
# 從字典中取出對應訊息標識的訊息型別
msg_type = dict[msgId]['info_type']
if msg_type == 'Recording': # 撤回的訊息為語音
recording_info = dict[msgId]['info'] # 取出訊息標識對應的訊息內容
info_name = dict[msgId]['name'] # 取出訊息檔案名
fromUser = dict[msgId]['fromUser'] # 取出發送者
dt = dict[msgId]['dt'] # 取出發送時間
recording_info(temp + '/' + info_name) # 保存語音
# 拼接提示訊息
send_msg = '【發送人:】' + fromUser + '\n' + '發送時間:' + dt + '\n' + '撤回了一條語音'
itchat.send(send_msg, 'filehelper') # 將提示訊息發送給檔案助手
# 發送保存的語音
itchat.send_file(temp + '/' + info_name, 'filehelper')
del dict[msgId] # 洗掉字典中對應的訊息
print("保存語音")
elif msg_type == 'Text':
text_info = dict[msgId]['info'] # 取出訊息標識對應的訊息內容
fromUser = dict[msgId]['fromUser'] # 取出發送者
dt = dict[msgId]['dt'] # 取出發送時間
# 拼接提示訊息
send_msg = '【發送人:】' + fromUser + '\n' + '發送時間:' + dt + '\n' + '撤回內容:' + text_info
# 將提示訊息發送給檔案助手
itchat.send(send_msg, 'filehelper')
del dict[msgId] # 洗掉字典中對應的訊息
print("保存文本")
elif msg_type == 'Picture':
picture_info = dict[msgId]['info'] # 取出訊息標識對應的訊息內容
fromUser = dict[msgId]['fromUser'] # 取出發送者
dt = dict[msgId]['dt'] # 取出發送時間
info_name = dict[msgId]['name'] # 取出檔案名
picture_info(temp + '/' + info_name) # 保存圖片
# 拼接提示訊息
send_msg = '【發送人:】' + fromUser + '\n' + '發送時間:' + dt + '\n' + '撤回了一張圖片'
itchat.send(send_msg, 'filehelper') # 將圖片發送給檔案助手
# 發送保存的語音
itchat.send_file(temp + '/' + info_name, 'filehelper')
del dict[msgId] # 洗掉字典中對應的訊息
print("保存圖片")
itchat.run()
運行結果:

~~~over~~~
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/348403.html
標籤:python
上一篇:前端知識之JavaScript
