1. 程式人生 > 其它 >【乾貨】python玩轉微信:微信好友統計資訊全掌握

【乾貨】python玩轉微信:微信好友統計資訊全掌握

在過去的幾個月中,由於在新生群中回答問題費時費力,同時又有許多重複而又有固定答案的回答,我受到一些知乎文章的啟發,維護了一個基於itchat的群聊機器人。從剛開始接入圖靈機器人時只會尬聊的機器人,之後又加入了api.ai的按照訊息內容自動回覆,而後再加入了回覆表情功能,使得機器人變得越來越有趣。

現在,由於itchat的更新和被wxpy一些更有趣的功能所吸引,我計劃將這個機器人分步重寫,並將完整的機器人構建步驟展現給大家。

安裝wxpy

安裝wxpy非常簡單,如果你擁有pip,請直接按照Github中的方法安裝:

從 PYPI 官方源下載安裝 (在國內可能比較慢或不穩定):

pip install -U wxpy

從豆瓣 PYPI 映象源下載安裝 (推薦國內使用者選用):

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

Github上和文件中給出了最簡單的登入機器人的方式,在程式中寫上這兩行並執行,會通過圖片掃描二維碼並登入微信。

# 匯入模組
from wxpy import *
# 初始化機器人,掃碼登陸
bot = Bot()

有些情況下,可能不能通過終端開啟圖片(例如部署在伺服器上時),我們可以通過引數選擇在終端內顯示二維碼,這樣程式碼會變為:

from wxpy import *
bot = Bot(console_qr=True)

如果你發現這樣設定終端中的二維碼變形了,可以嘗試傳入console_qr=1(或其他倍數)來進行調整字幅寬度。如果需要反色顯示,可以使用負數來進行反色操作。

如果你認為每次都需要掃描二維碼很麻煩,可以啟用快取,來儲存自己的登入狀態:

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

或微信好友資訊

傳送訊息

首先我們嘗試給自己和檔案傳輸助手發訊息:

# 給機器人自己傳送訊息
bot.self.send('Hello World!')
# 給檔案傳輸助手傳送訊息
bot.file_helper.send('Hello World!')

如果無法給機器人自身傳送訊息,請參考機器人物件 - wxpy 0.3.9.7 文件

http://wxpy.readthedocs.io/zh/latest/bot.html#wxpy.Bot.self

# 查詢暱稱為'乙醚。'的好友
my_friend = bot.friends().search(u'乙醚。')[0]
# <Friend: 乙醚。

wxpy同時也包括了傳送不同型別訊息的方法,通過這些方法我們可以傳送各種不同型別的訊息。以下是文件給出的樣例使用方式:

# 傳送文字
my_friend.send('Hello, WeChat!')
# 傳送圖片
my_friend.send_image('my_picture.png')
# 傳送視訊
my_friend.send_video('my_video.mov')
# 傳送檔案
my_friend.send_file('my_file.zip')
# 以動態的方式傳送圖片
my_friend.send('@img@my_picture.png')

通過使用這些方法,我們就可以自定義一個在合適的時候做合適的事情的機器人了!

由於群聊機器人設計暫時需要好友相關內容不多,此處不再作過過多贅述,如果有需要搜尋好友的可以參考聊天物件 - wxpy 0.3.9.7 文件

http://wxpy.readthedocs.io/zh/latest/chats.html#module-wxpy

自動處理訊息

wxpy提供了註冊訊息的方法,可以簡單將各種型別的訊息註冊並自定義處理方式。

註冊訊息使用簡單的@bot.register()方法

# 獲取所有型別的訊息(好友訊息、群聊、公眾號,不包括任何自己傳送的訊息)
# 並將獲得的訊息列印到控制檯
@bot.register()
def print_others(msg):
    print(msg)

同時wxpy也可以給註冊訊息的型別加上限制,

# 回覆 my_friend 傳送的訊息
@bot.register(my_friend)def reply_my_friend(msg):
    return 'received: {} ({})'.format(msg.text, msg.type)
# 回覆傳送給自己的訊息,可以使用這個方法來進行測試機器人而不影響到他人
@bot.register(bot.self, except_self=False)def reply_self(msg):
    return 'received: {} ({})'.format(msg.text, msg.type)
# 打印出所有群聊中@自己的文字訊息,並自動回覆相同內容# 這條註冊訊息是我們構建群聊機器人的基礎
@bot.register(Group, TEXT)def print_group_msg(msg):
    if msg.is_at:
        print(msg)
        msg.reply(meg.text)

當然僅僅寫以上內容,會導致你的程式主程式執行結束自然退出。wxpy給出了embed()方法,在程式末尾(或其他你想要暫停除錯的地方)加上embed()方法就可以讓程式保持執行,同時進入Python命令列。

# 進入 Python 命令列、讓程式保持執行# 推薦使用
embed()
# 或者僅僅堵塞執行緒
# bot.join()

關於訊息註冊的文件,更多內容可以參考訊息處理 - wxpy 0.3.9.7 文件

http://wxpy.readthedocs.io/zh/latest/messages.html#id11

現在,你已經可以用這個微信機器人和自動回覆訊息玩了!刺不刺激呢!

下一篇中,我將就如何將API接入機器人進行闡述。

wxpy 接入圖靈機器人相當方便,我們首先需要到圖靈機器人官網進行註冊

http://www.tuling123.com/

通過註冊Tuling 物件,當我們接收到訊息的時候,可以直接使用tuling機器人來幫我們進行答覆。其他的業務需求各位可以根據自己的需求來完成相應的邏輯。

from wxpy import *bot = Bot()
 
# 獲取好友
 
dear = bot.friends().search('被單')[0]

#  註冊獲得個人的圖靈機器人key 填入
  
tuling = Tuling(api_key='******')

# 使用圖靈機器人自動與指定好友聊天
 
@bot.register(dear)

def reply_my_friend(msg):    
 
print(msg)
    tuling.do_reply(msg)

embed()

你可能會遇到的一些問題

報錯[SSL: CERTIFICATE_VERIFY_FAILED]

可能的解決方案一:

pip install -U requests[security]

可能的解決方案二:

進如python後執行:

import certifi print(certifi.old_where())
# /usr/local/lib/python2.7/site-packages/certifi/weak.pem

把打印出的路徑放入環境變數REQUESTS_CA_BUNDLE中。具體而言是在*nix環境下執行:

export REQUESTS_CA_BUNDLE='What you get'

或是在Windows中使用系統面板進行修改。