手把手教你擴充套件個人微訊號(2)(微信控制器、群發助手、好友刪除檢測)
現在的日常生活已經離不開微信,本文將會拋磚引玉演示如何使用
Python
呼叫微信API做一些有意思的東西。
看完這一系列教程,你就能從頭開始實現自己關於微信的想法。
本文為教程的第二部分,主要以微信控制器、群發助手、好友刪除檢測為例演示如何呼叫微信API。
Python基礎並不困難,所以即使沒有這方面基礎輔助
搜尋引擎
也完全可以學習本教程。
關於本教程有任何建議或者疑問,都歡迎郵件與我聯絡(i7meavnktqegm1b@qq。com),或者在github上提出。
教程流程簡介
這一系列教程從如何分析微信協議開始,第一部分教你如何從零開始獲取並模擬擴充套件個人微訊號所需要的協議。
第二部分將會就這些協議進行利用,以各專案為例介紹一些微信有意思功能的實現。
第三部分就協議的一些高階用法進行介紹,對
框架
做進一步介紹與擴充套件。
本文為教程的第二部分。
簡單成果展示
完成了本文的學習,你將會完成三個小專案:(出於方便二次閱讀,括號中都放上了原始碼連結)
透過微信操作的音樂播放器(原始碼)
訊息內容與
物件
可自定義的訊息群發助手(原始碼)
特定好友刪除檢測(原始碼)
使用微信協議完成機器人較為平常,如果對具體細節感興趣,可以添加個人號littlecodersh並回復“原始碼”。
本文主要基於微信API的第三方包itchat,你可以在專案主頁獲取更多資訊。
本部分所需環境
本文是這一教程的第二部分,需要基本的pip可用的Python環境。
本教程使用的環境如下:
Windows 8。1 (其他平臺也可用)
Python 2 or 3
微信版本6。3。25
微信控制器
在專案主頁上,專門有人就微信作為智慧家居入口向我提出了很多想法。
如果微信可以作為控制器,就可以不必自制手機端客戶端的麻煩。
其實這個需求實現起來非常簡單,這裡我借鑑了yaphone的RasWxMusicbox,使用了其中部分的程式碼作為演示。
這是一個透過微信控制電腦播放音樂的小專案,那麼主要就是三個功能:
輸入“幫助”,顯示幫助
輸入“關閉”,關閉音樂播放
輸入具體歌名,進入歌曲的選擇
換成程式碼就是這樣一個邏輯:
if
msg
==
u
‘關閉’
:
close_music
()
(
u
‘音樂已關閉’
)
if
msg
==
u
‘幫助’
:
(
u
‘幫助資訊’
)
else
:
(
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
:
(
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