您當前的位置:首頁 > 詩詞

手把手教你擴充套件個人微訊號(2)(微信控制器、群發助手、好友刪除檢測)

作者:由 LittleCoder 發表于 詩詞時間:2016-09-28

現在的日常生活已經離不開微信,本文將會拋磚引玉演示如何使用

Python

呼叫微信API做一些有意思的東西。

看完這一系列教程,你就能從頭開始實現自己關於微信的想法。

本文為教程的第二部分,主要以微信控制器、群發助手、好友刪除檢測為例演示如何呼叫微信API。

Python基礎並不困難,所以即使沒有這方面基礎輔助

搜尋引擎

也完全可以學習本教程。

關於本教程有任何建議或者疑問,都歡迎郵件與我聯絡(i7meavnktqegm1b@qq。com),或者在github上提出。

教程流程簡介

這一系列教程從如何分析微信協議開始,第一部分教你如何從零開始獲取並模擬擴充套件個人微訊號所需要的協議。

第二部分將會就這些協議進行利用,以各專案為例介紹一些微信有意思功能的實現。

第三部分就協議的一些高階用法進行介紹,對

框架

做進一步介紹與擴充套件。

本文為教程的第二部分。

簡單成果展示

完成了本文的學習,你將會完成三個小專案:(出於方便二次閱讀,括號中都放上了原始碼連結)

透過微信操作的音樂播放器(原始碼)

訊息內容與

物件

可自定義的訊息群發助手(原始碼)

特定好友刪除檢測(原始碼)

使用微信協議完成機器人較為平常,如果對具體細節感興趣,可以添加個人號littlecodersh並回復“原始碼”。

本文主要基於微信API的第三方包itchat,你可以在專案主頁獲取更多資訊。

本部分所需環境

本文是這一教程的第二部分,需要基本的pip可用的Python環境。

本教程使用的環境如下:

Windows 8。1 (其他平臺也可用)

Python 2 or 3

微信版本6。3。25

微信控制器

手把手教你擴充套件個人微訊號(2)(微信控制器、群發助手、好友刪除檢測)

手把手教你擴充套件個人微訊號(2)(微信控制器、群發助手、好友刪除檢測)

在專案主頁上,專門有人就微信作為智慧家居入口向我提出了很多想法。

如果微信可以作為控制器,就可以不必自制手機端客戶端的麻煩。

其實這個需求實現起來非常簡單,這裡我借鑑了yaphone的RasWxMusicbox,使用了其中部分的程式碼作為演示。

這是一個透過微信控制電腦播放音樂的小專案,那麼主要就是三個功能:

輸入“幫助”,顯示幫助

輸入“關閉”,關閉音樂播放

輸入具體歌名,進入歌曲的選擇

換成程式碼就是這樣一個邏輯:

if

msg

==

u

‘關閉’

close_music

()

print

u

‘音樂已關閉’

if

msg

==

u

‘幫助’

print

u

‘幫助資訊’

else

print

interact_select_song

msg

))

那麼現在需要解決的就是如何關閉音樂,如何選擇音樂和如何使用微信互動。

關閉音樂我們這裡使用開啟空檔案的方式,而選擇音樂我們使用網易雲音樂的API完成:

import

os

# 透過該命令安裝該API: pip install NetEaseMusicApi

from

NetEaseMusicApi

import

interact_select_song

with

open

‘stop。mp3’

‘w’

as

f

pass

def

close_music

():

os

startfile

‘stop。mp3’

而微信的呼叫可以透過itchat包簡單的完成,這裡要注意的是:

有些賬號無法與自己通訊,所以我們選擇與檔案傳輸助手(filehelper)通訊

為了防止對於其他訊息的響應,我們在第一行過濾了無關資訊

itchat。run的選項分別為允許熱拔插,方便除錯

# 接上段程式

# 透過該命令安裝該API: pip install itchat

import

itchat

@itchat。msg_register

itchat

content

TEXT

def

music_player

msg

):

if

msg

‘ToUserName’

!=

‘filehelper’

return

if

msg

‘Text’

==

u

‘關閉’

close_music

()

itchat

send

u

‘音樂已關閉’

‘filehelper’

if

msg

‘Text’

==

u

‘幫助’

itchat

send

u

‘幫助資訊’

‘filehelper’

else

itchat

send

interact_select_song

msg

‘Text’

]),

‘filehelper’

itchat

auto_login

True

itchat

send

HELP_MSG

‘filehelper’

itchat

run

()

itchat對常用功能都做好了

封裝

,呼叫還是非常容易的。

完整的程式我放在了gist上面,使用時不要忘記安裝第三方包。

透過與檔案傳輸助手的互動,微信就能夠輕鬆變成其他程式的入口。

群發助手

在簡訊的時代,逢年過節都會需要接收和傳送大量的簡訊。

雖然自己也看到簡訊就煩,但不發又怕會錯過什麼。

所以當時就產生了各式各樣的群發工具,最簡單的比如在訊息中加入暱稱,讓人感覺不像群發。

不過可惜的是,微信自帶的群發助手真的只是群發。

當然,稍加操作,一切皆有可能。

例如在訊息中加入暱稱:

透過get_friends方法可以輕鬆獲取所有的好友(好友首位是自己)

基於不同的好友可以傳送不同的訊息

這條程式執行後是真的會發訊息出去,如果只是演示目的,把itchat。send改為print即可

#coding=utf8

import

itchat

time

itchat

auto_login

True

SINCERE_WISH

=

u

‘祝

%s

新年快樂!’

friendList

=

itchat

get_friends

update

=

True

)[

1

:]

for

friend

in

friendList

# 如果是演示目的,把下面的方法改為print即可

itchat

send

SINCERE_WISH

%

friend

‘DisplayName’

or

friend

‘NickName’

]),

friend

‘UserName’

])

time

sleep

5

又例如給特定的人傳送特定的訊息。

我們這裡透過群聊實現,劃定一個群聊,在群聊內則私信傳送祝福。

如果僅是建立群聊不說話,對方是不會有提示的

群聊如果不

儲存到通訊錄

,是無法在各裝置之間同步的(所以itchat也無法讀取到)

群聊在被獲取的時候不會自帶使用者

列表

,所以需要使用update_chatroom更新使用者列表

當然,如果只是演示目的,把itchat。send改為print即可

#coding=utf8

import

itchat

time

itchat

auto_login

True

REAL_SINCERE_WISH

=

u

‘祝

%s

新年快樂!!’

chatroomName

=

‘wishgroup’

itchat

get_chatrooms

update

=

True

chatrooms

=

itchat

search_chatrooms

name

=

chatroomName

if

chatrooms

is

None

print

u

‘沒有找到群聊:’

+

chatroomName

else

chatroom

=

itchat

update_chatroom

chatrooms

0

][

‘UserName’

])

for

friend

in

chatroom

‘MemberList’

]:

friend

=

itchat

search_friends

userName

=

friend

‘UserName’

])

# 如果是演示目的,把下面的方法改為print即可

itchat

send

REAL_SINCERE_WISH

%

friend

‘DisplayName’

or

friend

‘NickName’

]),

friend

‘UserName’

])

time

sleep

5

所以我的通訊錄裡會有從來不用的

客戶群

、教師群什麼的。

完整的程式我放在了gist上面,使用時不要忘記安裝第三方包。

當然,為了防止誤操作,完整程式中我把所有的itchat。send換成了print。

另外,不只有文字可以傳送,檔案、圖片也都是可行的,具體操作見itchat的文件了。

itchat獲取微信可以獲取到的各種內容也都非常方便。

其餘的例如生日,節日什麼的就看具體需求了。

好友刪除檢測

有時候我們會想知道某個好友有沒有刪除自己或者把自己拉入黑名單。

這一操作使用itchat也會變的非常簡單。

原理的話,在於將好友拉入群聊時,非好友和黑名單好友不會被拉入群聊。

所以群聊的

返回值

中就有了好友與你關係的資料。

另外,群聊在第一次產生普通訊息時才會被除建立者以外的人發現的(系統訊息不算普通訊息)。

這樣,就可以隱蔽的完成好友檢測。

寫成程式碼的話,這個操作就是這樣的:(只是演示,不能執行,執行版本在段末)

chatroomUserName

=

‘@1234567’

friend

=

itchat

get_friends

()[

1

r

=

itchat

add_member_into_chatroom

chatroomUserName

friend

])

if

r

‘BaseResponse’

][

‘ErrMsg’

==

‘’

status

=

r

‘MemberList’

][

0

][

‘MemberStatus’

itchat

delete_member_from_chatroom

chatroom

‘UserName’

],

friend

])

return

{

3

u

‘該好友已經將你加入黑名單。’

4

u

‘該好友已經將你刪除。’

}

get

status

u

‘該好友仍舊與你是好友關係。’

其中,透過add_member_into_chatroom操作獲取我們需要的

返回值

,即可得到好友的狀態。

同樣的,這次我們也將檔案傳輸助手作為終端,具體方法與控制器一節類似。

這次我們確定的互動方式是接收“名片”訊息,並判斷名片中的好友與自己的關係。

那麼獲取名片資訊的內容可以這麼寫:

import

itchat

@itchat。msg_register

itchat

content

CARD

def

get_friend

msg

):

if

msg

‘ToUserName’

!=

‘filehelper’

return

friendStatus

=

get_friend_status

msg

‘RecommendInfo’

])

itchat

send

friendStatus

‘NickName’

],

‘filehelper’

itchat

auto_login

True

itchat

run

()

那麼我們所需要的所有部分就都解決了,下面將他們組合起來即可。

完整的程式我放在了gist上面,使用時不要忘記安裝第三方包。

在網頁版微信的介面受到限制之前完全可以批次進行這一操作,檢測哪些好友刪除了自己。

但目前顯然操作存在頻率限制,所以只能做一些變通了。

之後的內容

到這裡這一篇文章的主要內容就結束了。

主要從微信作為終端使用、自定義的訊息互動、微信協議研究三方面開了一個簡單的頭。

其餘有一些過於大眾,如機器人,就不再贅述。

而另一些,需要一定的基礎或者不適合分享,就留給各位自行研究。

如果要留個懸念,可以想象新增好友的方法status傳2,輕鬆實現好友病毒式擴張。

利用微信的API可以做很多事情,文件我放在這裡,祝好運!

結束語

希望讀完這篇文章能對你有幫助,有什麼不足之處萬望指正(鞠躬)。

有什麼想法或者想要關注我的更新,歡迎來Github上

Star

或者

Fork

160928

LittleCoder

EOF

標簽: ItChat  微信  好友  friend  群聊