今天下午又學到了itchat另外一種有趣的玩法---微信自動回覆機器人。web
程序很簡單僅僅三十行代碼左右,實現了機器人自動與你的微信好友聊天,下面是個人機器人小籠包跟本身微信好友聊天的截圖。json
本程序經過itchat獲取微信的相關消息,將微信消息傳輸到機器人接口(本程序使用的是圖靈),獲取機器人的返回消息。將返回消息返回給微信消息的發送人。以此實現將微信我的號變身爲聊天機器人。api
安裝服務器
itchat的安裝能夠經過下面這行代碼微信
pip install itchat
登陸
itchat.auto_login() 這種方法將會經過微信掃描二維碼登陸,可是這種登陸的方式確實短期的登陸,並不會保留登陸的狀態,也就是下次登陸時仍是須要掃描二維碼。函數
# 掃描二維碼登錄微信,實際上就是經過網頁版微信登錄 itchat.auto_login()
若是加上hotReload==True,那麼就會保留登陸的狀態,至少在後面的幾回登陸過程當中不會再次掃描二維碼,該參數生成一個靜態文件itchat.pkl用於存儲登陸狀態post
itchat.auto_login(hotReload=True)
微信信息的發送
微信能夠發送各種消息,文本、圖片、文件等,下面是具體的方法的介紹。學習
itchat.send('Message Content', 'toUserName')
該發送消息的函數須要兩個參數,消息的內容與接受者的UserName,即標識符。
用下面的代碼舉一個小栗子,實現向文件助手發送信息。測試
import itchat itchat.auto_login(hotReload=True) itchat.send(u'測試消息發送', 'filehelper')
itchat 將根據接受到的消息類型尋找對應的已註冊的方法。若是一個消息類型沒有對應的註冊方法, 該消息將會被捨棄。在運行過程當中也能夠動態註冊方法, 註冊方式與結果不變。註冊方法不帶具體對象註冊, 將註冊爲普通消息的回覆方法.spa
import itchat from itchat.content import * @itchat.msg_register(TEXT) #這裏的TEXT表示若是有人發送文本消息,那麼就會調用下面的方法 def simple_reply(msg): #這個是向發送者發送消息 itchat.send_msg('已經收到了文本消息,消息內容爲%s'%msg['Text'],toUserName=msg['FromUserName']) return "T reveived: %s" % msg["Text"] #返回的給對方的消息,msg["Text"]表示消息的內容
帶對象參數註冊, 對應消息對象將調用該方法,其中isFriendChat
表示好友之間,isGroupChat
表示羣聊,isMapChat
表示公衆號。
import itchat from itchat.content import * @itchat.msg_register(TEXT, isFriendChat=True, isGroupChat=True,isMpChat=True) def text_reply(msg): msg.user.send("%s : %s" % (mst.type, msg.text))
消息類型
向註冊方法傳入的 msg 包含微信返回的字典的全部內容.itchat 增長 Text, Type(也就是參數) 鍵值, 方便操做。
itcaht.content
中包含全部的消息類型參數。例如圖片、語音、名片、分享等,也對應不一樣的註冊參數:
itchat.content.PICTURE
itchat.content.RECORDING
itchat.content.CARD
其他的能夠參考官方API
https://pypi.org/project/itchat/
import itchat @itchat.msg_register(itchat.content.TEXT) def print_content(msg): print(msg['Text']) itchat.auto_login() itchat.run()
經過運行上面的代碼,實現基礎的文本信息的接收。
實現機器人有不少種方法,最簡單的就是使用他人提供的接口。這裏以圖靈機器人爲例,演示這一功能。圖靈機器人簡單而言就是以必定的規則給圖靈的服務器發送數據包(包含你對他說的話)圖靈的服務器會以必定的規則給你返回數據包(包含他回覆你的話)
你須要一個Tuling Key來告訴圖靈服務器你有權和他對話。
18edce3ce905a4c1dbb965e6b35c3834d 2eb720a8970964f3f855d863d24406576 31107d5601866433dba9599fac1bc0083 471f28bf79c820df10d39b4074345ef8c
接下來需配置圖靈機器人
{ 'key' : 'TULING_KEY', 'info' : 'YOUR_MSG', 'userid' : 'USERID', }
下面使用圖靈機器人向好友發送了hello
#coding=utf8 import requests apiUrl = 'http://www.tuling123.com/openapi/api' data = { 'key' : '8edce3ce905a4c1dbb965e6b35c3834d', # 若是這個Tuling Key不能用,那就換一個 'info' : 'hello', # 這是咱們發出去的消息 'userid' : 'wechat-robot', # 這裏你想改什麼均可以 } # 咱們經過以下命令發送一個post請求 r = requests.post(apiUrl, data=data).json() # 讓咱們打印一下返回的值,看一下咱們拿到了什麼 print(r)
完整代碼:
import requests import itchat KEY = '8edce3ce905a4c1dbb965e6b35c3834d' def get_response(msg): # 這裏實現與圖靈機器人的交互 # 構造了要發送給服務器的數據 apiUrl = 'http://www.tuling123.com/openapi/api' data = { 'key' : KEY, 'info' : msg, 'userid' : 'wechat-robot', } try: r = requests.post(apiUrl, data=data).json() # 字典的get方法在字典沒有'text'值的時候會返回None而不會拋出異常 return r.get('text') # 爲了防止服務器沒有正常響應致使程序異常退出,這裏用try-except捕獲了異常 # 若是服務器沒能正常交互(返回非json或沒法鏈接),那麼就會進入下面的return except: # 將會返回一個None return # 這裏實現微信消息的獲取 @itchat.msg_register(itchat.content.TEXT) def tuling_reply(msg): # 爲了保證在圖靈Key出現問題的時候仍舊能夠回覆,這裏設置一個默認回覆 defaultReply = 'I received: ' + msg['Text'] # 若是圖靈Key出現問題,那麼reply將會是None reply = get_response(msg['Text']) # a or b的意思是,若是a有內容,那麼返回a,不然返回b # 有內容通常就是指非空或者非None,你能夠用`if a: print('True')`來測試 return reply or defaultReply # 爲了讓實驗過程更加方便(修改程序不用屢次掃碼),咱們使用熱啓動 itchat.auto_login(hotReload=True) itchat.run()
itchat不只僅可以實現自動回覆,還有其餘的相關功能好比羣發助手,好友單刪檢測,獲取微信好友信息等功能,後續會慢慢去體驗各類玩法。
小提示:不要頻繁操做,不然會禁止登陸web微信。