微信(WeChat)是騰訊公司於2011年1月21日推出的一款社群軟體,今天將帶大家了解一下用Python實現微信防撤回,有興趣的朋友可以了解一下。
產品的更新迭代必然會伴隨著功能的推出和下線,今天我們要講的便是微信在2014年推出的一個小小的新功能:撤回訊息
,使用此功能者提神醒腦、神清氣爽,但被施用者卻可能會抓耳撓腮、咬牙切齒的想知道你到底撤回了啥,這就是所謂的好奇害死貓(Curiosity kills the cat),今天我們就來用Python實現防微信消息撤回,滿足一下大家的好奇心!相關教學:Python影片教學
我們希望當有好友或群組中有人撤回訊息的時候,第一時間能把原訊息、發送者訊息轉發到文件助手中(當然你也可以把訊息發回給他,哈哈),這樣方便我們查看。
給大家來示範實現的功能。
我們先來了解微信撤回訊息的原理:
其實微信撤回訊息原理就是操作者在點擊撤回的時候,客戶端會自動發一條系統訊息:“xxx撤回了一條訊息”,然後對方app端收到訊息後解析,替換原訊息,改個顯示的樣式即可
豬哥給大家示範一下正常訊息
和撤回訊息
的內容到底有什麼差別:
正常訊息:Content='你好騷啊'
,大家留意一下MsgId='8784390488772995470'
#撤回訊息:Content是一串xml格式的內容
我們在下面把它格式化看看
<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>
這個標籤也驗證了我的猜想,確實是用新訊息取代原訊息。
根據抓取正常訊息
和撤回訊息
的內容我們發現規則:撤回訊息中會包含先前被撤回的那條訊息的msgid
,那我們只要找到之前那條訊息就可以了,而wxpy
模組預設我們快取了最近的200則訊息,所以我們只要遍歷這些歷史訊息然後比較msgid
就可以找到被撤回的那條訊息啦!
如果你微信訊息太過頻繁,2分鐘內訊息數量超過200,則可以將max_history
設定大些。
原理也搞懂了,被撤回的訊息也找到了,就差最後一步轉發訊息了,如果你之前玩過wxpy
一定會了吧,只要一行程式碼就可以將訊息轉發:
msg.forward(bot.file_helper)
#原理和流程講完了,程式碼貼出來給大家看看,註解還是比較詳細,有不懂得話可以在學習群中問我。
以上是如何用Python實現微信訊息防撤回的詳細內容。更多資訊請關注PHP中文網其他相關文章!