1. 程式人生 > >用 Python 玩微信,機器人陪你嘮嗑

用 Python 玩微信,機器人陪你嘮嗑

此文首發於公眾號「Python知識圈」,點選這裡檢視。 

“   閱讀文字大概需要 5.2 分鐘

之前給大家分享了怎麼用 itchat 庫製作微信朋友性別統計圖,今天給大家介紹一個更強大的庫:wxpy 庫。

wxpy 在 itchat 的基礎上,通過大量介面優化提升了模組的易用性,並進行豐富的功能擴充套件,wxpy 庫可能是最優雅的微信個人號 API。

今天只用到 wxpy 庫其中的一個小功能:陪人聊天。

安裝

wxpy 庫支援 Python 3.4-3.6 版本和 2.7 版本。如果你的電腦只安裝了一個 Python 版本,直接用下面命令安裝:

pip install wxpy

如果你電腦同時裝了 2.7 和 3.x 版本,將上方命令中的 “pip” 替換為 pip3 或 pip2,可確保安裝到對應的 Python 版本中。

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

pip install -U wxpy

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

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

我用的 Python 版本是 3.6,程式碼編輯工具是 Pycharm。
安裝完成後在程式碼編輯工具 Pycharm 中匯入 wxpy 庫。

登陸微信

直接呼叫 wxpy 庫裡的 Bot() 方法就會彈窗微信二維碼,掃描即可登入微信。

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

登入後就可以對微信進行相關操作了。

建立圖靈機器人

接下來需要在圖靈機器人官網註冊賬號,點選下方閱讀原文可進入官網。

登入後建立機器人,填寫應用終端、應用行業、應用場景。

建立成功後就能得到 apikey。

介面請求 API

將剛註冊獲取的 apikey 和使用者輸入的資訊 info 作為 post 請求的參 data。直接用 request.post 請求圖靈機器人 api 地址,加上剛才的 data。這樣就完成了對圖靈機器人介面的請求。

robot = Bot()
def talk_robot(info='你好啊'):   #定義一個預設引數
    api_url = 'http://www.tuling123.com/openapi/api'  # 圖靈介面url
    apikey = 'xxxxxxxxxx'       # 註冊圖靈生成key 
    data = {'key': apikey, 'info': info}                                   
    r = requests.post(api_url, data=data).text

用 requests.post 處理後的返回的資料是 json 格式,比如我輸入的 info 引數是「大家好」,返回的 json 語句是:

{"code":100000,"text":"看來你心情還不錯哦!"}

當然,這個引數對應的回覆不止一條,這是隨機回覆的其中一條,也有可能回覆:

{"code":100000,"text":"你好,我就好。"}

我們現在需要把 json 語句的值提取出來,使用 json.loads(r)['text'] 方法提取出 text 值。

response = json.loads(r)['text']
return response

建立話癆機器人

wxpy 提供了註冊訊息的方法,可以簡單將各種型別的訊息註冊並自定義處理方式。註冊訊息使用簡單的 @bot.register() 方法。

定義一個回覆朋友訊息的函式,並將回覆的 message 這個字串使用 format() 方法格式化後作為上面 talk_robot() 函式的入參,返回機器人回覆的訊息。

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

@robot.register()
def reply_my_friend(msg):
    message = '{}'.format(msg.text)
    response = talk_robot(info=message)
    return response
embed()

這樣,我的小號就化身成為話癆微信機器人,我們在群裡不管說什麼,他都會搭話。

建立微智慧機器人

如果技術群里人多的在討論問題的話,這個話癆就會顯得不是太智慧,這時我們可以加個判斷條件對 TA 進行優化下,只有 @TA 時,TA 才會搭話。

@robot.register()
def print_group_msg(msg):
    if msg.is_at:
        message = '{}'.format(msg.text)
        response = talk_robot(info=message)
    return response
embed()

來看下這個微智慧的機器人。

這樣,簡單的兩款微信機器人就完成了,躍躍欲試的小夥伴趕緊試試吧。請記住用自己的小號來登入做成機器人,如果用自己常用的微信做成話癆機器人的話,你的各微信群會爆炸的,不明所以的吃瓜群眾還以為你的微信中病毒了呢。

用小號做話癆機器人的話也要注意把小號關注的公眾號取消關注,因為一旦公眾號有推文過來,你的話癆機器人就會搭話,而一般的公眾號都會設定關鍵詞回覆和收到訊息回覆的功能,所以他們會一直聊下去,但是這個免費的 api 介面每天的請求次數是有限制的,每天免費 1000 次請求。如果超過這個次數限制的話,TA 就只會說一句話:親愛的,當天請求次數已用完。當然,土豪請忽略我上面說的這句話。

如果群人數比較多,很活躍的話,可以用其他手機號再註冊圖靈獲取一個 apikey。

原始碼很簡單,可以自己敲下,如需參考我的原始碼,公眾號回覆「wxpy」獲取原始碼。

優化

以上建立的機器人只能識別中文和個別的英文,不識別表情、圖片、語音、視訊,這個後期會逐步優化的。

今天講的只是 wxpy 庫冰山一角的功能,還有很多有意思的功能:

  • 傳送文字、圖片、視訊、檔案;

  • 通過關鍵詞或使用者屬性搜尋 好友、群聊、群成員等;

  • 獲取好友/群成員的暱稱、備註、性別、地區等資訊;

  • 加好友,建群,邀請入群,移出群等等;

這個小機器人我放在我的技術交流群裡了,歡迎大家隨時進群體驗去撩 TA。以後我會逐步優化讓 TA 功能變得更強大。同時我會在公眾號分享出來,覺得這個專案有意思的不妨點個贊加個關注,讓我們一起用 Python 玩微信。

推薦閱讀:

30 行程式碼繪出你的微信朋友統計圖

本公眾號專注:

1.python 技術分享

2.python 爬蟲分享

3.資料、工具共享

歡迎關注我們,一起成長!


我建一個技術交流群,群裡有大佬,可以進群一起討論學習,共同進步。進群方式見公眾號聯絡方式處。
群裡我用 python 寫了個微信機器人,歡迎體驗!