python乾貨|用python玩轉微信

編程語言 Python 微信 移動互聯網 阿蘭·圖靈 幼稚鬼學編程 2018-11-28

用python實現微信聊天

準備工作

安裝非常簡單,從官方源下載安裝

pip install -U wxpy

或者從豆瓣源安裝

pip install -U wxpy -i "https://pypi.doubanio.com/simple/"

模塊初探

安裝完成後,我們來試下幾個基本的功能

1. 掃碼登錄微信

from wxpy import *
bot = Bot()

運行上面的程序,會彈出二維碼,用手機微信掃一掃即可實現登錄。

但上面的程序有一個缺點,每次運行都要掃二維碼。不過wxpy非常貼心地提供了緩存的選項,如下

bot = Bot(cache_path=True)

這樣把登錄信息保存下來,就不用每次都掃二維碼了。

2. 發送消息

bot.file_helper.send("hello")

這裡的file_helper就是微信的文件傳輸助手,我們給文件傳輸助手發送一條消息,可以在手機端收到如下的消息

python乾貨|用python玩轉微信

3. 接受消息

我們實現一個收到消息自動回覆的功能。

@bot.register()
def print_message(msg):
print(msg.text)
return msg.text

# 進入Python命令行,讓程序保持運行
embed()

打開自己的公眾號管理平臺,在後端向自己發送消息,就可以收到如下的消息回覆

python乾貨|用python玩轉微信

4. 搜索好友及微信群

我們來實現一個搜索公司群、定位老闆並轉發老闆消息的功能

from wxpy import *

bot = Bot(cache_path=True)

# 定位公司群
company_group = bot.groups().search('公司微信群')[0]

# 定位老闆
boss = company_group.search('老闆大名')[0]

# 將老闆的消息轉發到文件傳輸助手
@bot.register(company_group)
def forward_boss_message(msg):
if msg.member == boss:
msg.forward(bot.file_helper, prefix='老闆發言')

# 堵塞線程
embed()

對於老闆喜歡在群裡面喊話的同學來說,這是一個福音,以後再也不用擔心錯失老闆的重要信息了~~

數據統計

wxpy的好友統計功能非常好用,可以很方便地統計好友的地理位置分佈和性別分佈。

下面的代碼中,統計了下自己的好友的分佈情況,並打印出人數最多的10個地區。

from wxpy import *

bot = Bot(cache_path=True)
friends_stat = bot.friends().stats()

friend_loc = [] # 每一個元素是一個二元列表,分別存儲地區和人數信息
for province, count in friends_stat["province"].iteritems():
if province != "":
friend_loc.append([province, count])

# 對人數倒序排序
friend_loc.sort(key=lambda x: x[1], reverse=True)

# 打印人數最多的10個地區
for item in friend_loc[:10]:
print item[0], item[1]

統計出來的地區分佈數據畫成圖表如下

python乾貨|用python玩轉微信

大多數的好友也來自上海,上面的圖表也如實地反應了這一情況。

統計性別分佈的代碼如下

for sex, count in friends_stat["sex"].iteritems():
# 1代表MALE, 2代表FEMALE
if sex == 1:
print "MALE %d" % count
elif sex == 2:
print "FEMALE %d" % count

把性別分佈的數據生成圖表如下

python乾貨|用python玩轉微信

可以看到好友中男性佔了大多數。男性朋友多多,老婆放心多多,嗯~~

聊天機器人

有了上面功能簡介部分的基礎,我們來實現一個聊天機器人。

聊天機器人基於圖靈機器人。圖靈機器人可以在圖靈機器人-中文語境下智能度最高的機器人大腦註冊賬號,並創建機器人。需記下api key,調用圖靈API的時候會用到。

# -*- coding: utf-8 -*-
import json
import requests
from wxpy import *

# 調用圖靈機器人API,發送消息並獲得機器人的回覆
def auto_reply(text):
url = "http://www.tuling123.com/openapi/api"
api_key = "你的api key"
payload = {
"key": api_key,
"info": text,
"userid": "123456"
}
r = requests.post(url, data=json.dumps(payload))
result = json.loads(r.content)
return "[tuling] " + result["text"]

bot = Bot(console_qr=True, cache_path=True)

@bot.register(mp)
def forward_message(msg):
return auto_reply(msg.text)

embed()

運行上面的程序,發送消息給自己,可以看到如下的對話

python乾貨|用python玩轉微信

機器人太逗了,上來就要紅包,還把我當男朋友了~

Python實現的微信好友數據分析

數據分析

分析微信好友數據的前提是獲得好友信息,通過使用 itchat 這個模塊,這一切會變得非常簡單,我們通過下面兩行代碼就可以實現:

itchat.auto_login(hotReload = True)
friends = itchat.get_friends(update = True)

同平時登錄網頁版微信一樣,我們使用手機掃描二維碼就可以登錄,這裡返回的friends對象是一個集合,第一個元素是當前用戶。所以,在下面的數據分析流程中,我們始終取friends[1:]作為原始輸入數據,集合中的每一個元素都是一個字典結構,以我本人為例,可以注意到這裡有Sex、City、Province、HeadImgUrl、Signature這四個字段,我們下面的分析就從這四個字段入手:

python乾貨|用python玩轉微信

好友性別

分析好友性別,我們首先要獲得所有好友的性別信息,這裡我們將每一個好友信息的Sex字段提取出來,然後分別統計出Male、Female和Unkonw的數目,我們將這三個數值組裝到一個列表中,即可使用matplotlib模塊繪製出餅圖來,其代碼實現如下:

def analyseSex(firends):
sexs = list(map(lambda x:x['Sex'],friends[1:]))
counts = list(map(lambda x:x[1],Counter(sexs).items()))
labels = ['Unknow','Male','Female']
colors = ['red','yellowgreen','lightskyblue']
plt.figure(figsize=(8,5), dpi=80)
plt.axes(aspect=1)
plt.pie(counts, #性別統計結果
labels=labels, #性別展示標籤
colors=colors, #餅圖區域配色
labeldistance = 1.1, #標籤距離圓點距離
autopct = '%3.1f%%', #餅圖區域文本格式
shadow = False, #餅圖是否顯示陰影
startangle = 90, #餅圖起始角度
pctdistance = 0.6 #餅圖區域文本距離圓點距離
)
plt.legend(loc='upper right',)
plt.title(u'%s的微信好友性別組成' % friends[0]['NickName'])
plt.show()

這裡簡單解釋下這段代碼,微信中性別字段的取值有Unkonw、Male和Female三種,其對應的數值分別為0、1、2。通過Collection模塊中的Counter()對這三種不同的取值進行統計,其items()方法返回的是一個元組的集合,該元組的第一維元素表示鍵,即0、1、2,該元組的第二維元素表示數目,且該元組的集合是排序過的,即其鍵按照0、1、2 的順序排列,所以通過map()方法就可以得到這三種不同取值的數目,我們將其傳遞給matplotlib繪製即可,這三種不同取值各自所佔的百分比由matplotlib計算得出。下圖是matplotlib繪製的好友性別分佈圖:

python乾貨|用python玩轉微信

看到這個結果,我一點都不覺得意外,男女比例嚴重失衡,這雖然可以解釋我單身的原因,可我不覺得通過調整男女比例就能解決問題,好多人認為自己單身是因為社交圈子狹小,那麼是不是擴展了社交圈子就能擺脫單身呢?我覺得或許這樣會增加脫單的概率,可幸運之神應該不會眷顧我,因為我的好運氣早在我24歲以前就消耗完啦。在知乎上有一個熱門的話題:現在的男性是否普遍不再對女性展開追求了?,其實哪裡會有人喜歡孤獨呢?無非是怕一次又一次的失望罷了。有的人並不是我的花兒,我只是恰好途徑了她的綻放。曾經有人說我是一個多情的人,可她永遠不會知道,我做出的每一個決定都熾熱而悲壯。所謂”慧極必傷,情深不壽;謙謙君子,溫潤如玉”,世人苦五毒者大抵如此。

用python實現在微信群刷屏

第一步:安裝itchat:

在Python/Lib/site-packages文件夾下增加了sitecustomize.py,

裡邊代碼如下:

try:

reload # Python 2.7

except NameError:

try:

from importlib import reload # Python 3.4+

except ImportError:

from imp import reload # Python 3.0 - 3.3

安裝完成後是這樣的:

python乾貨|用python玩轉微信

第二步:實現發送消息到群

具體代碼如下:

python乾貨|用python玩轉微信

在發送信息前,先登錄微信,

itchat.auto_login(hotReload=True)

這是表示熱登錄,在一定時間內不需要重新登錄

rooms=itchat.get_chatrooms(update=True) #拿到所有微信群
rooms=itchat.search_chatrooms(gname) #搜索指定微信群(模糊搜索)

這兩行代碼,第一個是拿到所有的微信群,第二個是拿到指定的微信群。

在獲取微信群的信息後我們就需要向微信群發送信息了,用到的方法如下:

python乾貨|用python玩轉微信

itchat.send(msg,toUserName),msg指的是發送的內容,toUserName指的是發送的對象(若不指定默認發送給自己)

好,在這裡代碼也就寫完了,我放在了send_onegroup方法,指的是發送一個群,若想發送所有群,去掉rooms=itchat.search_chatrooms(grame).

運行效果如下:

python乾貨|用python玩轉微信

python 獲取微信好友列表

python乾貨|用python玩轉微信

python乾貨|用python玩轉微信

python乾貨|用python玩轉微信

python乾貨|用python玩轉微信

python乾貨|用python玩轉微信

最後

python乾貨|用python玩轉微信

前幾天有私信小編要Python的學習資料,小編整理了一些有深度的Python教程和參考資料,從入門到高級的都有,文件已經打包好了,正在學習Python的同學可以下載學習學習。文件下載方式:點擊小編頭像,關注後私信回覆“資料”即可下載。首先把代碼擼起來!首先把代碼擼起來!首先把代碼擼起來!重要的事說三遍,哈哈。“編程是門手藝活”。什麼意思?得練啊。

相關推薦

推薦中...