開源一段代碼-微信好友分析
今天早上翻筆記的時(shí)候,發(fā)現(xiàn)了一份3個(gè)月前寫的代碼,當(dāng)時(shí)是覺得好玩寫的,現(xiàn)在就分享出來給大家。代碼的github地址我已經(jīng)放在了文章尾部,需要的童鞋可以自取。其實(shí)代碼邏輯相當(dāng)簡(jiǎn)單,當(dāng)然,如果初學(xué)的童鞋看代碼可能有不明白的地方,我也專門錄制了一段半小時(shí)的視頻對(duì)代碼進(jìn)行講解。

寫于3個(gè)月前的代碼
看完本文,你可以了解到:
- 一些可視化工具的使用(pyecharts)
- python圖片工具PIL庫的使用
- 自然語言處理工具包結(jié)巴分詞的使用
- 爬蟲的基礎(chǔ)知識(shí)
- 微信網(wǎng)頁api工具itchat的使用
好了,廢話不多說,直入正題:
先告訴大家這份代碼能干嘛——
- 統(tǒng)計(jì)好友的性別
- 統(tǒng)計(jì)好友的地域分布,并且可視化在地圖上展示
- 將好友的昵稱做成詞云
- 統(tǒng)計(jì)好友個(gè)性簽名中的高頻詞匯
- 將所有好友的頭像合并成一張大圖
- 微信自動(dòng)發(fā)送與回復(fù)消息
- 擴(kuò)展功能
1.統(tǒng)計(jì)好友性別

微信好友性別統(tǒng)計(jì)
以上就是二胖的微信好友啦,一共有306人,嗯,二胖的好友不多哈。其中男性占據(jù)60%,沒辦法,理工科學(xué)校的男生就是這樣,其他這一類人表示的是并未填寫性別信息的好友。
2.統(tǒng)計(jì)好友地域分布
第二個(gè)功能是統(tǒng)計(jì)你的微信好友在信息中填寫的個(gè)人位置信息,下圖是二胖的好友的位置分布:

條形圖
可以看到,二胖的好友中有很大一部分人在北京,是因?yàn)槎执髮W(xué)在北京念書,現(xiàn)在也在北京工作。
當(dāng)然,條形圖能形象地展示各個(gè)地區(qū)之間的人數(shù)差別,但是展示的信息并不全面,也不那么直觀,所以二胖又做了一個(gè)地圖的可視化,如下圖所示,顏色越暖代表這個(gè)地方的好友越多:

地圖可視化
3.將好友的昵稱做成詞云
我們和微信好友聊天的時(shí)候,看見的基本都是我們對(duì)他們的備注名,很好有人去關(guān)心他們的昵稱,說實(shí)在的,這么一統(tǒng)計(jì)才知道,其實(shí)好友的昵稱還真的挺有意思,各位要是感興趣可以跑一下試試。
由于這個(gè)詞云中含有較多的個(gè)人信息,所以我就不放在這里了。
4.統(tǒng)計(jì)好友個(gè)性簽名中的高頻詞匯
這個(gè)功能的原理就是對(duì)每個(gè)好友的個(gè)性簽名利用自然語言處理技術(shù)提取關(guān)鍵詞,然后按照詞頻來生成詞云,下面詞云中的關(guān)鍵詞個(gè)頭越大表示越多人使用,看來二胖的好友們說得最多是“自己”,“我們”。

個(gè)性簽名關(guān)鍵詞詞頻統(tǒng)計(jì)
5.將所有好友的頭像合并成一張大圖
這其實(shí)就是用程序?qū)⒑糜训念^像們下載下來,然后用PIL工具合成一張大圖,看起來比較有趣,如下圖就是二胖用部分好友的頭像做的一張頭像圖:
6.微信自動(dòng)發(fā)送與回復(fù)消息
這里的自動(dòng)接收消息,二胖只做了一個(gè)簡(jiǎn)單的demo,可以先給大家看看:
其中“機(jī)器人”,就是當(dāng)前程序運(yùn)行的微信號(hào),一段簡(jiǎn)單的聊天:

自動(dòng)回復(fù)消息
我們可以在程序中設(shè)定好關(guān)鍵詞,然后當(dāng)發(fā)送消息***關(guān)鍵詞的時(shí)候就可以回復(fù)相應(yīng)的語句。當(dāng)然這只是簡(jiǎn)單的示范,大家可以根據(jù)自己的需求發(fā)送相應(yīng)的消息。
比如逢年過節(jié)可以用程序群發(fā)祝福消息,那和用微信本身群發(fā)有什么區(qū)別呢,區(qū)別就在于,程序可以個(gè)性化發(fā)送消息。
舉個(gè)例子:比如新年來了,你要給大家發(fā)送新年祝賀。
如果你直接發(fā)送“年年都有今日,歲歲都有今朝,祝你新年快樂。”對(duì)面接收人肯定會(huì)想到你是群發(fā)的。
那用程序有什么不同呢,程序在遍歷你的微信好友時(shí),可以獲取他的昵稱、備注等信息。在發(fā)送祝福的時(shí)候,程序可以加上昵稱、姓名等信息,還可以隨機(jī)發(fā)送詞庫中的祝福語。
以上祝福可以變成:“hi,鐵柱,年年都有今日,歲歲都有今朝,祝你新年快樂”。當(dāng)然這都是后話了。
除此之外,對(duì)于一些做銷售相關(guān)工作的童鞋,這個(gè)功能相對(duì)更有用。因?yàn)椴煌目蛻艨赡軙?huì)問到很多相似的問題,那么把這些高頻的問題回答寫進(jìn)程序就可以實(shí)現(xiàn)自動(dòng)回答了。
目前網(wǎng)絡(luò)上也有這樣的服務(wù),不過二胖認(rèn)為它們存在問題,1是服務(wù)需要付費(fèi),2是把微信運(yùn)行在別人的平臺(tái)上不安全。
7.擴(kuò)展
所謂擴(kuò)展,就是將個(gè)人微信做成一個(gè)服務(wù),通過在程序中請(qǐng)求其他服務(wù)的api而獲得相應(yīng)的信息,比如獲取一些實(shí)時(shí)消息。
舉個(gè)小例子:二胖前段時(shí)間在玩一款叫萊茨狗的游戲,很簡(jiǎn)單,就是用戶通過一定虛擬積分在一個(gè)平臺(tái)上買賣虛擬寵物“萊茨狗”,那么當(dāng)有低價(jià)狗出現(xiàn)的時(shí)候怎么***時(shí)間知道呢?
答案就是寫個(gè)程序進(jìn)行監(jiān)控,沒錯(cuò),只要有賣家拋狗,那么只要價(jià)格和等級(jí)符合自己定的策略,就可以通過計(jì)算機(jī)篩選出這只狗,然后把交易鏈接發(fā)出來??墒嵌忠膊荒芤恢弊陔娔X面前等啊,所以二胖選擇讓程序?qū)⑿畔⒅苯影l(fā)送到微信,這樣二胖只要帶著手機(jī)就能實(shí)時(shí)接收交易數(shù)據(jù)了,可以看看下面的小視頻:
左邊是二胖的手機(jī),右邊是電腦屏幕,顯示的是實(shí)時(shí)交易數(shù)據(jù)。只要右邊的交易數(shù)據(jù)符合我的策略,交易鏈接就會(huì)通過微信發(fā)送給我,當(dāng)然二胖現(xiàn)在早已不玩這個(gè)游戲啦。
玩股票的朋友也可以用這個(gè)方法監(jiān)控股票哦。
放一張之前的截圖:5月10日,獲取到的符合策略的狗狗。

5月萬游戲的推送消息
其實(shí)原理很簡(jiǎn)單,利用的就是微信web端的api,來實(shí)現(xiàn)微信好友信息的獲取、信息的收發(fā)以及拿到微信好友信息之后的一些分析操作。

微信網(wǎng)頁版
流程為:
- 獲取好友信息
- 分析好友信息
- 通過api收發(fā)好友信息
由于文本闡述不清,所以就看視頻吧,如果你有時(shí)間,請(qǐng)現(xiàn)在用電腦打開觀看,我相信你點(diǎn)了收藏之后再次打開的概率就很低了,高清視頻可以在公眾號(hào)后臺(tái)回復(fù):微信好友
即可獲取。

github代碼
github地址:https://github.com/yangxuanxc/wechat_friends