如何用Python記錄微信撤回的訊息

專注的阿熊發表於2021-11-05

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 = 外匯跟單gendan5.comdict[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()


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69946337/viewspace-2840867/,如需轉載,請註明出處,否則將追究法律責任。

相關文章