摘要:本文為教程的第二部分,主要以微信控制器群發助手好友刪除檢測為例演示如何調用微信。教程流程簡介這一系列教程從如何分析微信協議開始,第一部分教你如何從零開始獲取并模擬擴展個人微信號所需要的協議。
現在的日常生活已經離不開微信,本文將會拋磚引玉演示如何使用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() 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
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/38220.html
摘要:所以就想著自己寫一個干脆,經過一周漫長的開發主要是時間太零散了,把第一版定制化微信機器人給完成了,第一版里實現了幾個功能自動添加好友,并同時根據附加信息打備注。 showImg(https://segmentfault.com/img/remote/1460000018578411?w=1080&h=719); 運營公眾號也有半年了,今年5月份開始的,之前一直用一款windows工具來...
摘要:關于本教程有任何建議或者疑問,都歡迎郵件與我聯系,或者在上提出教程流程簡介教程將會從如何分析微信協議開始,第一部分將教你如何從零開始獲取并模擬擴展個人微信號所需要的協議。 現在的日常生活已經離不開微信,難免會生出微信有沒有什么API可以使用的想法。 那樣就可以拿自己微信做個消息聚合、開個投票什么的,可以顯然沒有這種東西。 不過還好,有網頁版微信不就等于有了API么,這個項目就是出于這個...
摘要:行代碼實現微信自動回復機器人一寫在前面今天下午又學到了另一種有趣的玩法微信自動回復機器人。將返回消息返回給微信消息的發送人。以此實現將微信個人號變身為聊天機器人。 30行代碼實現微信自動回復機器人 一、寫在前面 今天下午又學到了itchat另一種有趣的玩法---微信自動回復機器人。 程序很簡單僅僅三十行代碼左右,實現了機器人自動與你的微信好友聊天,下面是我的機器人小籠包跟自己微信好友聊...
摘要:如何在低成本有限的時間里策劃一場合格的裂變活動呢常做裂變的朋友可能回到個詞裂變系數投入與產出比。存在成本的裂變活動嗎答案存在。在這條新規則宣布后,裂變分享率增加到了。優點進一步驗證用戶的朋友圈,防止渾水摸魚。 ...
閱讀 2670·2021-11-25 09:43
閱讀 2578·2021-11-22 09:34
閱讀 2822·2021-11-12 10:34
閱讀 1430·2021-10-20 13:46
閱讀 2300·2019-08-30 13:21
閱讀 928·2019-08-30 11:21
閱讀 482·2019-08-30 11:20
閱讀 2185·2019-08-29 17:20