首頁 >後端開發 >Python教學 >如何用Python實現微信訊息防撤回

如何用Python實現微信訊息防撤回

little bottle
little bottle轉載
2019-04-29 11:18:253014瀏覽

微信(WeChat)是騰訊公司於2011年1月21日推出的一款社群軟體,今天將帶大家了解一下用Python實現微信防撤回,有興趣的朋友可以了解一下。

一、背景介紹

產品的更新迭代必然會伴隨著功能的推出和下線,今天我們要講的便是微信在2014年推出的一個小小的新功能:撤回訊息,使用此功能者提神醒腦、神清氣爽,但被施用者卻可能會抓耳撓腮、咬牙切齒的想知道你到底撤回了啥,這就是所謂的好奇害死貓(Curiosity kills the cat),今天我們就來用Python實現防微信消息撤回,滿足一下大家的好奇心!相關教學:Python影片教學

如何用Python實現微信訊息防撤回

二、功能設計

我們希望當有好友或群組中有人撤回訊息的時候,第一時間能把原訊息、發送者訊息轉發到文件助手中(當然你也可以把訊息發回給他,哈哈),這樣方便我們查看。

給大家來示範實現的功能。
如何用Python實現微信訊息防撤回

三、功能實作

1.微信撤回訊息實作原理

我們先來了解微信撤回訊息的原理:

其實微信撤回訊息原理就是操作者在點擊撤回的時候,客戶端會自動發一條系統訊息:“xxx撤回了一條訊息”,然後對方app端收到訊息後解析,替換原訊息,改個顯示的樣式即可

豬哥給大家示範一下正常訊息撤回訊息的內容到底有什麼差別:
正常訊息:Content='你好騷啊',大家留意一下MsgId='8784390488772995470'
如何用Python實現微信訊息防撤回
#撤回訊息:Content是一串xml格式的內容
如何用Python實現微信訊息防撤回
我們在下面把它格式化看看

<sysmsg type="revokemsg">
  <revokemsg>
    <session>xxx</session>
    <oldmsgid>1090336364</oldmsgid>
    <msgid>8784390488772995470</msgid>
    <replacemsg><![CDATA["猪哥" 撤回了一条消息]]></replacemsg>
  </revokemsg>
</sysmsg>

分析上面撤回的Content字段我們發現<msgid>8784390488772995470 msgid></msgid>的id與我們先前發送訊息的id是一致的,而<replacemsg></replacemsg>這個標籤也驗證了我的猜想,確實是用新訊息取代原訊息。

2.找到被撤回訊息

根據抓取正常訊息撤回訊息的內容我們發現規則:撤回訊息中會包含先前被撤回的那條訊息的msgid,那我們只要找到之前那條訊息就可以了,而wxpy模組預設我們快取了最近的200則訊息,所以我們只要遍歷這些歷史訊息然後比較msgid就可以找到被撤回的那條訊息啦!
如何用Python實現微信訊息防撤回
如果你微信訊息太過頻繁,2分鐘內訊息數量超過200,則可以將max_history設定大些。

3.轉發被撤回訊息

原理也搞懂了,被撤回的訊息也找到了,就差最後一步轉發訊息了,如果你之前玩過wxpy一定會了吧,只要一行程式碼就可以將訊息轉發:

msg.forward(bot.file_helper)

4.程式碼

#原理和流程講完了,程式碼貼出來給大家看看,註解還是比較詳細,有不懂得話可以在學習群中問我。
如何用Python實現微信訊息防撤回

四、功能驗證

如何用Python實現微信訊息防撤回


微信訊息防撤回功能實現簡單,但實用性很好,目前專案的唯一缺點就是易用性差,簡單說就是我們還沒有將專案部署伺服器,每次使用都得打開電腦然後運作還得一直開著,豬哥考慮後面將專案部署在雲端伺服器上或打包成apk,這樣就使用起來就非常方便了,而且還可以把apk發給朋友,讓朋友也體驗此功能!

學會這招,再也不用好奇對方到底撤回了啥消息,快下載專案試試吧!下載專案後可直接執行不需要修改程式碼! ###

以上是如何用Python實現微信訊息防撤回的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:cnblogs.com。如有侵權,請聯絡admin@php.cn刪除