1. 程式人生 > 實用技巧 >用Python 80行程式碼實現一個微信訊息撤回捕捉功能

用Python 80行程式碼實現一個微信訊息撤回捕捉功能

自從微信出了這個訊息撤回功能小編我都已經快被折磨死了,小編本來就是個好奇心比較重的人,微信出了這個功能之後小編感覺身體一天不如一天了,每次看著女神發來的資訊又撤回,可謂是心裡癢癢啊。所以小編就寫了一個微信訊息撤回捕捉器,下面就讓小編教你怎麼擺脫單身逆襲白富美

很多人學習python,不知道從何學起。
很多人學習python,掌握了基本語法過後,不知道在哪裡尋找案例上手。
很多已經做案例的人,卻不知道如何去學習更加高深的知識。
那麼針對這三類人,我給大家提供一個好的學習平臺,免費領取視訊教程,電子書籍,以及課程的原始碼!
QQ群:961562169

1,模組介紹

首先的話要實現訊息撤回捕捉得用到python上一個十分強大的庫:itchat。如果大家沒有使用過的話小編就來介紹一下:

Projectdescription
itchatisaopensoucewechatapiprojectforpersonalaccount.
Itenablesyoutoaccessyourpersonalwechataccountthroughcommandline.

以上意思就是:itchat是一個面向個人賬戶的開源微信api專案。您可以通過命令列訪問您的個人微信帳戶。 所以說我們今天就要用到這個庫,首先我們要 :

pipinstallitchat

2,模組功能熟悉

小編這裡考慮到有些小夥伴從來沒用過這個模組,所以下面會對這個模組進行一個簡單的講解。

2.1 如何登入微信

既然我們要捕捉微信的撤回資訊那第一步肯定是要先登入微信,登入微信非常簡單隻需要兩行程式碼:

importitchat​itchat.login()

這樣就好了,是不是特別簡單,然後執行之後就會出現一個二維碼,掃描之後再手機上面授權登入,控制檯就會顯示你是否登入成功。

•Loginsuccessfullyas.

這樣就說明你登入成功了,但是這邊如果是新建立的微信和長期不使用的微信的話是無法登入網頁版微信的,所以這裡也會導致登入不上。如果登入不上,那也是沒有辦法的

2.2 獲取好友列表

importitchat
​itchat.auto_login(hotReload=True)
friends=itchat.get_friends()#好友列表
print(friends)

使用get_friends()這個函式就能獲取到好友列表的所有好友資訊,包括暱稱,備註名,地址,個性標籤,性別等等。

[{'UserName':
'@7c2215e17edf4b193f125d6ecf944abcaf19ba72e3eb24b8442d5e32d4a8be92',
'City':'','DisplayName':'','PYQuanPin':'','RemarkPYInitial':
'','Province':'','KeyWord':'','RemarkName':'','PYInitial':'',
'EncryChatRoomId':'','**':'','Signature':'','NickName':'**',
'RemarkPYQuanPin':'','HeadImgUrl':'**'

這裡我就隨便複製了一個好友的資訊,關於到隱私的問題我就把資訊全部用**代替了,我們重點是分析一下這些資訊的內容,比如最開始的UserName這個是使用者的唯一標識,相當於身份證號碼一樣的,所有的好友UserName都是不一樣的,然後是NickName:這是好友的暱稱,HeadImgUrl:這是好友的頭像地址,還有一些就不一一介紹了,大家感興趣的話可以自己去了解一下

2.3 傳送資訊給好友

我們現在準備傳送一條資訊給好友,具體怎麼操作呢?看下面程式碼

importitchat
​itchat.auto_login(hotReload=True)
itchat.send("人生苦短,我學python",toUserName="@c4326bda513bf7cdd19f1fa03dbf7e7bc3bbc57e5abb71fd580b2c3c32cddd99")

itchat.send()這個函式可以放兩個引數,第一個你要傳送給好友的資訊,第二個指定好友也就是toUserName=上面所說的唯一身份標識UserName但是上面方法我覺得還是有點不妥,然後我就改進了一下

importitchat
​itchat.auto_login(hotReload=True)friends=itchat.get_friends()nickName='你禿我不禿'
foriinfriends:
if'你禿我不禿'==i['NickName']:
itchat.send('人生苦短,我學python',toUserName=i['UserName'])
break

這樣我就可以發信息給任意好友,通過好友的暱稱哎好友列表中進行查詢,找到的話我就獲取該好友的UserName然後傳送訊息,也可以通過對好友的備註名RemarkName查詢,大家可以根據自己的喜好選擇

2.4 裝飾器

關於itchat這個模組還有很多功能,小編在這裡就不做過多講解了,我們只要瞭解訊息撤回所需要的知識點就行了,然後我們進行最後一個內容,裝飾器 關於裝飾器小編這邊簡單介紹一下,裝飾器的是勇於擴充套件原來函式功能的一種函式,目的是再不改變原函式名的情況下給函式增加新的功能。 例如我喜安智又一個函式foo(),你並不知道函式的實現原理,你肯定也不能去修改這個函式的程式碼而你需要給這個函式新增一個輸出開始執行時間和結束執行時間的功能,改如何實現,這時候你就可以用裝飾器了:

importtime
​defshow_time(foo):
definner():
print(time.time())foo()print(time.time())returninner
@show_timedeffoo():passfoo()

上面這段程式碼的意思:首先@show_time就是使用一個裝飾器show_time,這個時候就會將裝飾器的函式,也就是foo()作為引數傳遞給裝飾器show_time(),我們知到函式作為返回值的話,執行的其實是該函式,所以程式會執行內部函式inner(),此時輸出開始執行時間,然後呼叫foo()函式,最後輸出結束執行時間,這樣就實現了一個功能擴充套件,這也是很典型的面向切面程式設計思想。

3,如何監聽好友撤回的資訊

其實到了這裡我們就已經完成了訊息的監聽只需要稍加修改就好了,但是這個程式還是有一點問題的,就是所有的訊息我們都需要去儲存,好友正常傳送過來的訊息我們直接就能看到儲存下來不是多此一舉嗎,我們的目的是想知道好友撤回了什麼內容,這裡就涉及到如何監聽好友是否撤回了資訊這個問題了,其實也不難,Content模組為我們提供了NOTE型別,這個型別指的是系統訊息,所以我們可以自定義一個函式用來監聽系統訊息:

importitchat
fromitchat.contentimport*#匯入itchat下的content模組
itchat.auto_login(hotReload=True)
@itchat.msg_register(NOTE)
defnote_info(msg):#監聽系統訊息
print(msg)
​​itchat.run()

執行程式,我們撤回一條資訊測試一下,輸出的結果如下:

'DisplayName':'','ChatRoomId':0,'KeyWord':'','EncryChatRoomId':'','IsOwner':0}>,'Type':'Note','Text':'你撤回了一條訊息'}

則例擷取的部分的內容這樣會發小撤回資訊的文字內容“你撤回了一條資訊”,如意要想知道好友是否撤回了訊息就很簡單了,判斷一下,msg['Text']=='你撤回了一條資訊'就行了

4, 實現微信訊息撤回捕捉功能

現在關於程式的每個步驟程式碼到這裡也就分析完了,接下來就是對所有的程式碼進行一個總結以下就是所有程式碼的總結:

現在我們來測試一下首先我讓我兩個朋友一人給我發了一條資訊:

得到的結果: