1. 程式人生 > >撤回的微信訊息真的看不到?78 行 Python 程式碼幫你看穿一切!

撤回的微信訊息真的看不到?78 行 Python 程式碼幫你看穿一切!

(點選上方藍字,快速關注我們)

來源:AlicFeng

https://www.jianshu.com/p/712d19374b2e

導讀:Python曾經對我說:"時日不多,趕緊用Python"。於是看到了一個基於python的微信開源庫:itchat,玩了一天,做了一個程式,把私聊撤回的資訊可以收集起來併發送到個人微信的檔案傳輸助手,包括:

(1) who :誰傳送的
(2) when :什麼時候傳送的訊息
(3) what:什麼資訊
(4) which:哪一類資訊,包括:文字、圖片、語音、視訊、分享、位置、附件
...

01 程式碼實現

# -*-encoding:utf-8-*-
import os
import re
import
 shutil
import time
import itchat
from itchat.content import *

# 說明:可以撤回的有文字文字、語音、視訊、圖片、位置、名片、分享、附件

# {msg_id:(msg_from,msg_to,msg_time,msg_time_rec,msg_type,msg_content,msg_share_url)}
msg_dict = {}

# 檔案儲存臨時目錄
rev_tmp_dir = "/home/alic/RevDir/"
if not os.path.exists(rev_tmp_dir): os.mkdir(rev_tmp_dir)

# 表情有一個問題 | 接受資訊和接受note的msg_id不一致 巧合解決方案

face_bug = None

# 將接收到的訊息存放在字典中,當接收到新訊息時對字典中超時的訊息進行清理 | 不接受不具有撤回功能的資訊
# [TEXT, PICTURE, MAP, CARD, SHARING, RECORDING, ATTACHMENT, VIDEO, FRIENDS, NOTE]
@itchat.msg_register([TEXT, PICTURE, MAP, CARD, SHARING, RECORDING, ATTACHMENT, VIDEO])
def handler_receive_msg(msg):
   global face_bug
   # 獲取的是本地時間戳並格式化本地時間戳 e: 2017-04-21 21:30:08

   msg_time_rec = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
   # 訊息ID
   msg_id = msg['MsgId']
   # 訊息時間
   msg_time = msg['CreateTime']
   # 訊息傳送人暱稱 | 這裡也可以使用RemarkName備註 但是自己或者沒有備註的人為None
   msg_from = (itchat.search_friends(userName=msg['FromUserName']))["NickName"]
   # 訊息內容
   msg_content = None
   # 分享的連結
   msg_share_url = None
   if msg['Type'] == 'Text' 
           or msg['Type'] == 'Friends':
       msg_content = msg['Text']
   elif msg['Type'] == 'Recording' 
           or msg['Type'] == 'Attachment' 
           or msg['Type'] == 'Video' 
           or msg['Type'] == 'Picture':
       msg_content = r"" + msg['FileName']
       # 儲存檔案
       msg['Text'](rev_tmp_dir + msg['FileName'])
   elif msg['Type'] == 'Card':
       msg_content = msg['RecommendInfo']['NickName'] + r" 的名片"
   elif msg['Type'] == 'Map':
       x, y, location = re.search(
           "<location x="(.*?)" y="(.*?)".*label="(.*?)".*", msg['OriContent']).group(123)
       if location is None:
           msg_content = r"緯度->" + x.__str__() + " 經度->" + y.__str__()
       else:
           msg_content = r"" + location
   elif msg['Type'] == 'Sharing':
       msg_content = msg['Text']
       msg_share_url = msg['Url']
   face_bug = msg_content
   # 更新字典
   msg_dict.update(
       {
           msg_id: {
               "msg_from": msg_from, "msg_time": msg_time, "msg_time_rec": msg_time_rec,
               "msg_type": msg["Type"],
               "msg_content": msg_content, "msg_share_url": msg_share_url
           }
       }
   )

# 收到note通知類訊息,判斷是不是撤回並進行相應操作
@itchat.msg_register([NOTE])
def send_msg_helper(msg):
   global face_bug
   if re.search(r"<![CDATA[.*撤回了一條訊息]]>", msg['Content']) is not None:
       # 獲取訊息的id
       old_msg_id = re.search("<msgid>(.*?)</msgid>", msg['Content']).group(1)
       old_msg = msg_dict.get(old_msg_id, {})
       if len(old_msg_id) < 11:
           itchat.send_file(rev_tmp_dir + face_bug, toUserName='filehelper')
           os.remove(rev_tmp_dir + face_bug)
       else:
           msg_body = "告訴你一個祕密~" + " " 
                      + old_msg.get('msg_from') + " 撤回了 " + old_msg.get("msg_type") + " 訊息" + " " 
                      + old_msg.get('msg_time_rec') + " " 
                      + "撤回了什麼 ⇣" + " " 
                      + r"" + old_msg.get('msg_content')
           # 如果是分享存在連結
           if old_msg['msg_type'] == "Sharing": msg_body += " 就是這個連結➣ " + old_msg.get('msg_share_url')

           # 將撤回訊息傳送到檔案助手
           itchat.send(msg_body, toUserName='filehelper')
           # 有檔案的話也要將檔案傳送回去
           if old_msg["msg_type"] == "Picture" 
                   or old_msg["msg_type"] == "Recording" 
                   or old_msg["msg_type"] == "Video" 
                   or old_msg["msg_type"] == "Attachment":
               file = '@[email protected]%s' % (rev_tmp_dir + old_msg['msg_content'])
               itchat.send(msg=file, toUserName='filehelper')
               os.remove(rev_tmp_dir + old_msg['msg_content'])
           # 刪除字典舊訊息
           msg_dict.pop(old_msg_id)

if __name__ == '__main__':
   itchat.auto_login(hotReload=True,enableCmdQR=2)
   itchat.run()

該程式可以直接在終端執行,在終端掃碼成功夠即可登入成功,同時也可以打包在window系統執行(注意修改一下路徑,推薦使用相對路徑)。

➜  ~ python wx.py
Getting uuid of QR code.
Downloading QR code.
Please scan the QR code to log in.
Please press confirm on your phone.
Loading the contact, this may take a little while.
�[3;J
Login successfully as AlicFeng
Start auto replying.

02 效果圖

640?

03 itchat

上面都是程式設計邏輯的小事,我還是記錄一下itchat微信這個開源庫。

1. 簡介


itchat是一個開源的微信個人號介面,使用python呼叫微信變得非常簡單。簡單是用itchat程式碼即可構建一個基於微信的即時通訊,更不錯的體現在於方便擴充套件個人微信的在其他平臺的更多通訊功能。

2. 安裝

pip3 install itchat

3. itchat - Helloworld

僅僅三行程式碼傳送一條資訊給檔案傳輸助手。

import itchat
itchat.auto_login(hotReload=True)
itchat.send('Hello AlicFeng', toUserName='filehelper')

4. 檢視客戶端

640?

學習最重要的還是API說明手冊:

Github for itchat:

https://github.com/liduanwei/ItChat

中文API:

http://itchat.readthedocs.io/zh/latest/

看完本文有收穫?請轉發分享給更多人

關注「Python開發者」,提升Python技能

640?wx_fmt=png

640?wx_fmt=jpeg

相關推薦

撤回訊息真的到?78 Python 程式碼看穿一切

(點選上方藍字,快速關注我們)來源:AlicFenghttps://www.jianshu.co

Android 支付_掃碼支付,我來填坑

0.概述: 本文講的是微信支付中的掃碼支付的模式二:該模式下,二維碼連結由微信支付返回給商戶,商戶將得到的二維碼連結轉成二維碼圖片,使用者通過掃碼支付,此方式下生成的二維碼2小時內有效。 微信支付官網地址:https://pay.weixin.qq.com/

破解WiFi密碼如何操作?一招檢視密碼

對用手機使用者來說我們使用最多的軟體莫過於騰訊的微信了!對於使用最為廣泛的軟體來說,如果能夠幫助我們解決網路問題那無疑是最好的,因為有時你們破解wifi還要下載一大堆破解軟體。現在直接通過微信就能破解WIFI了。而且還能檢視破解密碼。 下面小編就和你們講解一下吧: 一

裡為什麼到來訪者的痕跡?

眾所周知,QQ中有個功能叫做“訪客”,可以通過這個功能鍵檢視“誰看過我”和“我看過誰”,如果開通了黃鑽還可以檢視“被擋訪客”,但是同樣是騰訊公司開發的兩款社交軟體,微信卻看不到來訪者的痕跡,小編認為原因有三點: 1. 淘汰無用功能,提升使用者體驗。當一款APP的實用程式越簡化,那麼這款

破解WiFi密碼如何操作?一招密碼

搜索框 方法 技術分享 mage com alt 有時 破解 程序 對用手機用戶來說我們使用最多的軟件莫過於騰訊的微信了!對於使用最為廣泛的軟件來說,如果能夠幫助我們解決網絡問題那無疑是最好的,因為有時你們破解wifi還要下載一大堆破解軟件。現在直接通過微信就能破解WIFI

大早上起來錯過女神給我發的訊息,還好我用Python找回來了

一大早醒來,發現女神昨晚發來三條訊息,但是顯示都已撤回,OMG,我錯過了什麼?群裡有一個漂亮妹紙的爆照照片撤回了,想看又看不到!群裡大佬分享的經典語錄被撤回了,感覺錯過一個億!怎麼辦?用無所不能的 Python 就可以將這些撤回的訊息發給你的微信,讓你從此走上人生巔峰 專案環境 語言:Pyt

工作郵件能及時回覆?10Python程式碼自動回覆

  最近工作上有個需求,當爬蟲程式遇到異常的時候,需要通知相應的人員進行修復。如果是國外可能是通過郵件的方式來通知,但國內除了萬年不變的 qq 郵箱,大部分人都不會去再申請其他的賬號,qq 郵箱也是閒的蛋疼的時候才會瞄一眼。你還記得上次看郵箱的內容是什麼時候嗎? 學習Pyth

python學習 -女神或者男神把訊息撤回後好慌,有了這個媽媽再也擔心到女神或者男神撤回訊息了(超詳解)

簡介   有時候在忙工作,女朋友發了一個訊息,就撤回了,但是人天生的都有一顆好奇心,而且在當今這個時代找個女朋友不容易,一個程式猿找一個女朋友更是不容易的。人家好不容易跟你,你還不得把人家當老佛爺侍候著,侍候著也不行,還得小心翼翼地侍候著,但是宣告:巨集哥可能過分寵她,但絕對不是妻管嚴哈!因此當她撤回訊息後

女神把訊息撤回後好慌,幾十程式碼檢視撤回訊息

曾幾何時Python對我說:"時日已不多,速度學Python"。於是乎上天讓我看到了一個基於python的微信開源庫:itchat,玩的不亦樂乎,接著我做了一個程式,可以把微信好友撤回的資訊收集起來,然後會自動傳送到我的個人微信的檔案傳輸助手。     程

女神把訊息撤回後好慌, Python幾十程式碼輕鬆檢視撤回訊息!

曾幾何時Python對我說:"時日已不多,速度學Python"。於是乎上天讓我看到了一個基於python的微信開源庫:itchat,玩的不亦樂乎,接著我做了一個程式,可以把微信好友撤回的資訊收集起來,然後會自動傳送到我的個人微信的檔案傳輸助手。小夥伴需要Python學習資料的話私信我回復01,會自

python實現檢視訊息撤回

娛樂(windows系統) 1.安裝itchat itchat是一個開源的python微信庫,支援傳送訊息、圖片、視訊、地圖、名片、檔案等,還可以實現自動回覆等多種功能。 看到的一個文件還不錯 https://segmentfault.com/a/1190000

訊息撤回工具

微信聊天的時候,一疏忽竟然錯過了什麼,對方撤回了一條訊息,一位小妹妹給你發了一張不可描述的照片,下一秒她又後悔選擇了撤回。那麼到哪去尋找撤回的訊息呢?難道我們就不能做點什麼? 就在昨天,我的一位好友殼子使用itchat庫做了一個儲存微信訊息的功能,在得到殼子的授權之後,

記錄查恢復刪除。怎麽同時登錄兩個

我們正常認為在第一個手機上可以正常登陸,但是第二個手機登陸的時候會提示你該賬號已經在另一點登陸,強制要求下線,然後就自動下線退出了。 我找了一個可以幫忙設置同時登入的,不會掉線,Q:44100244,技術太棒了,我在這裏介紹他給有需要幫助的朋友們哦。需要幫助的可以找他Q44100244。太厲

ios瀏覽器click事件起作用的解決方法

ont func 手機 alert 微信 搜索 pan font js代碼 $(document).on( "click", ".weui_cell", functi

二次分享顯示摘要和圖片的解決方法

conf eight sage 接口 所有 微信公眾平臺 取消 onf split 微信二次分享不顯示摘要和圖片的解決方法 解決不顯示摘要和圖片的問題,需要調用微信公眾號的js-sdk的api ,需要前端和後臺的配合, 後臺需要返回 appid (公眾號的appid )

小程序搶占千億藍海市場 跟還是跟這波浪潮?

微信小程序 采寶小程序 支付藍海 一石驚起千層浪,一場重塑未來3年移動互聯網行業格局的大戲正在拉開帷幕,各行業的千億級流量風口即將噴薄而出。13年前的淘寶,7年前的微博,4年前的微信公眾平臺,有人賺的盆缽滿地,有人卻一無所獲。同樣的機遇,為何天差地別呢?原因就在於市場先機! 我們

充值話費到賬客服電話

電話O755-85OOO6O3微信充值話費不到賬客服電話O755-32914926撥通後請再按225#鍵或者226#鍵分機號切記雖然網上經常有刷單被騙的新聞傳出,雖然有法律人士說這個行業屬於灰色,但仍算是一個不錯的選擇。因為時間自由,雖然不能賺大錢,但收入也還能讓人基本滿意,主要是如果找對平臺,投入很少收益卻

裂變程序】需公眾號免接口影視裂變系統正式上線

target tao kit 實現 jpg cin orm 朋友 fff 濤舅舅免接口影視裂變系統,不需要公眾號接口的限制即可分享裂變 以我們長期以來的驗證,本系統具有以下亮點: 同時完美支持電影和電視劇,可以設定劇集鏈接結構完全隨機,減少被抓取特征

收到圖紙打開怎麽辦?手機接收下載的文件在哪

版本 文件管理 f2c 選擇 ces 分享 如何 軟件下載 如果 都知道現在真的很流行手機看圖,CAD手機看圖是為了方便大家看圖的一款軟件,目前是做到了可以隨時隨地看圖,不論身在何處,只要有手機,有CAD手機看圖軟件,打開圖紙即可瀏覽,方便又快捷.那麽如何有人從微信或者QQ

解封賬號符合要求 解封輔助45一單

小時 虛擬 登錄 一個 手機 發送 短信 圖片驗證碼 解決辦法 1、微信登陸圖片驗證碼提示過錯 解決辦法:一般是因為運用無線網絡的原因,切換成手機網絡即可 2、輔佐解封過程中提示操作頻頻 解封辦法: a.替換登錄設備 b.半響之後從頭約請 3、發送短信過程中不能發送 解