如何用Python查看微信好友撤回的消息?
https://cloud.tencent.com/developer/article/1701130
因此要是下文中有什么講的不清楚的地方,大家也可以參考上面這篇文檔。
一、pip Install itchat
二、itchat.login()
但沒(méi)想到,復(fù)現(xiàn)到這一步時(shí)就出問(wèn)題了。直接用itchat庫(kù)像上面這樣操作,登陸的會(huì)是微信的網(wǎng)頁(yè)版,而騰訊之前為了防止大家用計(jì)算機(jī)自動(dòng)化操作微信從而可能會(huì)導(dǎo)致一些安全問(wèn)題,封停了網(wǎng)頁(yè)版微信API,如果只是像上面這樣做的話,控制臺(tái)會(huì)提醒說(shuō)“由于安全原因,此微信號(hào)不能使用網(wǎng)頁(yè)版微信。你可以使用+Windows+版微信或+Mac+版微信登錄。”
三、itchat.search_friends() + send()
四、@itchat.msg_register()
五、def reserver_info(msg)
接下來(lái)我們來(lái)復(fù)現(xiàn)下面??這一段:
我本機(jī)上的情況(抄的我好開心啊[捂臉]):
六、@itchat.msg_register([TEXT, PICTURE, RECORDING])
七、os.mkdir() + info()
八、note_info(msg)
九、完整程序代碼
import?itchat
from?itchat.content?import?*
import?os
import?time
import?xml.dom.minidom????#?解析xml模塊
#?這是保存撤回消息的文件目錄(如:圖片、語(yǔ)音等),這里已經(jīng)寫死了,大家可以自行修改
temp?=?'/Users/yourname/Documents/itchat'?+?'/'?+?'撤回的消息'
if?not?os.path.exists(temp):
????os.mkdir(temp)
itchat.auto_login(True)????#?自動(dòng)登錄
dict?=?{}????#?定義一個(gè)字典
#?這是一個(gè)裝飾器,給下面的函數(shù)添加新功能
#?能夠捕獲好友發(fā)送的消息,并傳遞給函數(shù)參數(shù)msg
@itchat.msg_register([TEXT,?PICTURE,?FRIENDS,?CARD,?MAP,?SHARING,?RECORDING,?ATTACHMENT,?VIDEO])??#?文本,語(yǔ)音,圖片
def?resever_info(msg):
????global?dict????#?聲明全局變量
????info?=?msg['Text']??#?取出消息內(nèi)容
????msgId?=?msg['MsgId']??#?取出消息標(biāo)識(shí)
????info_type?=?msg['Type']??#?取出消息類型
????name?=?msg['FileName']??#?取出消息文件名
????#?取出消息發(fā)送者標(biāo)識(shí)并從好友列表中檢索
????fromUser?=?itchat.search_friends(userName=msg['FromUserName'])['NickName']
????ticks?=?msg['CreateTime']??#?獲取信息發(fā)送的時(shí)間
????time_local?=?time.localtime(ticks)
????dt?=?time.strftime("%Y-%m-%d?%H:%M:%S",?time_local)??#?格式化日期
????#?將消息標(biāo)識(shí)和消息內(nèi)容添加到字典
????#?每一條消息的唯一標(biāo)識(shí)作為鍵,消息的具體信息作為值,也是一個(gè)字典
????dict[msgId]?=?{"info":?info,?"info_type":?info_type,?"name":?name,?"fromUser":?fromUser,?"dt":?dt}
@itchat.msg_register(NOTE)??#?監(jiān)聽系統(tǒng)提示
def?note_info(msg):
????#?監(jiān)聽到好友撤回了一條消息
????if?'撤回了一條消息'?in?msg['Text']:
????????#?獲取系統(tǒng)消息中的Content結(jié)點(diǎn)值
????????content?=?msg['Content']
????????#?Content值為xml,解析xml
????????doc?=?xml.dom.minidom.parseString(content)
????????#?取出msgid標(biāo)簽的值
????????result?=?doc.getElementsByTagName("msgid")
????????#?該msgId就是撤回的消息標(biāo)識(shí),通過(guò)它可以在字典中找到撤回的消息信息
????????msgId?=?result[0].childNodes[0].nodeValue
????????#?從字典中取出對(duì)應(yīng)消息標(biāo)識(shí)的消息類型
????????msg_type?=?dict[msgId]['info_type']
????????if?msg_type?==?'Recording':????#?撤回的消息為語(yǔ)音
????????????recording_info?=?dict[msgId]['info']??#?取出消息標(biāo)識(shí)對(duì)應(yīng)的消息內(nèi)容
????????????info_name?=?dict[msgId]['name']?#?取出消息文件名
????????????fromUser?=?dict[msgId]['fromUser']?#?取出發(fā)送者
????????????dt?=?dict[msgId]['dt']?#?取出發(fā)送時(shí)間
????????????recording_info(temp?+?'/'?+?info_name)?#?保存語(yǔ)音
????????????#?拼接提示消息
????????????send_msg?=?'【發(fā)送人:】'?+?fromUser?+?'\n'?+?'發(fā)送時(shí)間:'?+?dt?+?'\n'?+?'撤回了一條語(yǔ)音'
????????????itchat.send(send_msg,?'filehelper')?#?將提示消息發(fā)送給文件助手
????????????#?發(fā)送保存的語(yǔ)音
????????????itchat.send_file(temp?+?'/'?+?info_name,?'filehelper')
????????????del?dict[msgId]?#?刪除字典中對(duì)應(yīng)的消息
????????????print("保存語(yǔ)音")
????????elif?msg_type?==?'Text':
????????????text_info?=?dict[msgId]['info']?#?取出消息標(biāo)識(shí)對(duì)應(yīng)的消息內(nèi)容
????????????fromUser?=?dict[msgId]['fromUser']?#?取出發(fā)送者
????????????dt?=?dict[msgId]['dt']?#?取出發(fā)送時(shí)間
????????????#?拼接提示消息
????????????send_msg?=?'【發(fā)送人:】'?+?fromUser?+?'\n'?+?'發(fā)送時(shí)間:'?+?dt?+?'\n'?+?'撤回內(nèi)容:'?+?text_info
????????????#?將提示消息發(fā)送給文件助手
????????????itchat.send(send_msg,?'filehelper')
????????????del?dict[msgId]?#?刪除字典中對(duì)應(yīng)的消息
????????????print("保存文本")
????????elif?msg_type?==?'Picture':
????????????picture_info?=?dict[msgId]['info']?#?取出消息標(biāo)識(shí)對(duì)應(yīng)的消息內(nèi)容
????????????fromUser?=?dict[msgId]['fromUser']?#?取出發(fā)送者
????????????dt?=?dict[msgId]['dt']?#?取出發(fā)送時(shí)間
????????????info_name?=?dict[msgId]['name']?#?取出文件名
????????????picture_info(temp?+?'/'?+?info_name)?#?保存圖片
????????????#?拼接提示消息
????????????send_msg?=?'【發(fā)送人:】'?+?fromUser?+?'\n'?+?'發(fā)送時(shí)間:'?+?dt?+?'\n'?+?'撤回了一張圖片'
????????????itchat.send(send_msg,?'filehelper')?#?將圖片發(fā)送給文件助手
????????????#?發(fā)送保存的語(yǔ)音
????????????itchat.send_file(temp?+?'/'?+?info_name,?'filehelper')
????????????del?dict[msgId]?#?刪除字典中對(duì)應(yīng)的消息?
????????????print("保存圖片")
itchat.run()
評(píng)論
圖片
表情















