一、寫在前面
前段時間寫過一篇微信好友大揭秘,很多朋友對itchat非常感興趣,今天下午又學到了itchat另一種有趣的玩法—微信自動回覆機器人。
程式很簡單僅僅三十行程式碼左右,實現了機器人自動與你的微信好友聊天,下麵是我的機器人小籠包跟自己微信好友聊天的截圖。
再給大家看看兩個機器人的對話
二、程式介紹
本程式透過itchat獲取微信的相關訊息,將微信訊息傳輸到機器人介面(本程式使用的是圖靈),獲取機器人的傳回訊息。將傳回訊息傳回給微信訊息的傳送人。以此實現將微信個人號變身為聊天機器人。
三、具體實現
安裝
itchat的安裝可以透過下麵這行程式碼
1pip install itchat
itchat.auto_login() 這種方法將會透過微信掃描二維碼登入,但是這種登入的方式確實短時間的登入,並不會保留登入的狀態,也就是下次登入時還是需要掃描二維碼。
1# 掃描二維碼登陸微信,實際上就是透過網頁版微信登陸
2 itchat.auto_login()
1itchat.auto_login(hotReload=True)
微信可以傳送各類訊息,文字、圖片、檔案等,下麵是具體的方法的介紹。
1itchat.send('Message Content', 'toUserName')
用下麵的程式碼舉一個小慄子,實現向檔案助手傳送資訊。
1import itchat
2
3itchat.auto_login(hotReload=True)
4itchat.send(u'測試訊息傳送', 'filehelper')
微信訊息的獲取
itchat
將根據接受到的訊息型別尋找對應的已註冊的方法。如果一個訊息型別沒有對應的註冊方法, 該訊息將會被捨棄。在執行過程中也可以動態註冊方法, 註冊方式與結果不變。註冊方法不帶具體物件註冊, 將註冊為普通訊息的回覆方法.
1 import itchat
2 from itchat.content import *
3 @itchat.msg_register(TEXT) #這裡的TEXT表示如果有人傳送文字訊息,那麼就會呼叫下麵的方法
4 def simple_reply(msg):
5 #這個是向傳送者傳送訊息
6 itchat.send_msg('已經收到了文字訊息,訊息內容為%s'%msg['Text'],toUserName=msg['FromUserName'])
7 return "T reveived: %s" % msg["Text"] #傳回的給對方的訊息,msg["Text"]表示訊息的內容
isFriendChat
表示好友之間,isGroupChat
表示群聊,isMapChat
表示公眾號。1import itchat
2from itchat.content import *
3
4@itchat.msg_register(TEXT, isFriendChat=True, isGroupChat=True,isMpChat=True)
5def text_reply(msg):
6 msg.user.send("%s : %s" % (mst.type, msg.text))
訊息型別
向註冊方法傳入的 msg
包含微信傳回的字典的所有內容.itchat
增加 Text
, Type
(也就是引數) 鍵值, 方便操作。
itcaht.content
中包含所有的訊息型別引數。例如圖片、語音、名片、分享等,也對應不同的註冊引數:
- 圖片對應
itchat.content.PICTURE
- 語音對應
itchat.content.RECORDING
- 名片對應
itchat.content.CARD
https://pypi.org/project/itchat/
1import itchat
2
3@itchat.msg_register(itchat.content.TEXT)
4def print_content(msg):
5 print(msg['Text'])
6
7itchat.auto_login()
8itchat.run()
透過執行上面的程式碼,實現基礎的文字資訊的接收。
實現與圖靈機器人的互動
實現機器人有很多種方法,最簡單的就是使用他人提供的介面。這裡以圖靈機器人為例,演示這一功能。圖靈機器人簡單而言就是以一定的規則給圖靈的伺服器傳送資料包(包含你對他說的話)圖靈的伺服器會以一定的規則給你傳回資料包(包含他回覆你的話)
你需要一個Tuling Key來告訴圖靈伺服器你有權和他對話。
18edce3ce905a4c1dbb965e6b35c3834d
2eb720a8970964f3f855d863d24406576
31107d5601866433dba9599fac1bc0083
471f28bf79c820df10d39b4074345ef8c
接下來需配置圖靈機器人
1{
2 'key' : 'TULING_KEY',
3 'info' : 'YOUR_MSG',
4 'userid' : 'USERID',
5}
下麵使用圖靈機器人向好友發送了hello
1#coding=utf8
2import requests
3
4apiUrl = 'http://www.tuling123.com/openapi/api'
5data = {
6 'key' : '8edce3ce905a4c1dbb965e6b35c3834d', # 如果這個Tuling Key不能用,那就換一個
7 'info' : 'hello', # 這是我們發出去的訊息
8 'userid' : 'wechat-robot', # 這裡你想改什麼都可以
9}
10# 我們透過如下命令傳送一個post請求
11r = requests.post(apiUrl, data=data).json()
12
13# 讓我們列印一下傳回的值,看一下我們拿到了什麼
14print(r)
完整程式碼:
1import requests
2import itchat
3
4KEY = '8edce3ce905a4c1dbb965e6b35c3834d'
5
6def get_response(msg):
7 # 這裡實現與圖靈機器人的互動
8 # 構造了要傳送給伺服器的資料
9 apiUrl = 'http://www.tuling123.com/openapi/api'
10 data = {
11 'key' : KEY,
12 'info' : msg,
13 'userid' : 'wechat-robot',
14 }
15 try:
16 r = requests.post(apiUrl, data=data).json()
17 # 字典的get方法在字典沒有'text'值的時候會傳回None而不會丟擲異常
18 return r.get('text')
19 # 為了防止伺服器沒有正常響應導致程式異常退出,這裡用try-except捕獲了異常
20 # 如果伺服器沒能正常互動(傳回非json或無法連線),那麼就會進入下麵的return
21 except:
22 # 將會傳回一個None
23 return
24
25# 這裡實現微信訊息的獲取
26@itchat.msg_register(itchat.content.TEXT)
27def tuling_reply(msg):
28 # 為了保證在圖靈Key出現問題的時候仍舊可以回覆,這裡設定一個預設回覆
29 defaultReply = 'I received: ' + msg['Text']
30 # 如果圖靈Key出現問題,那麼reply將會是None
31 reply = get_response(msg['Text'])
32 # a or b的意思是,如果a有內容,那麼傳回a,否則傳回b
33 # 有內容一般就是指非空或者非None,你可以用`if a: print('True')`來測試
34 return reply or defaultReply
35
36# 為了讓實驗過程更加方便(修改程式不用多次掃碼),我們使用熱啟動
37itchat.auto_login(hotReload=True)
38itchat.run()
itchat不僅僅能夠實現自動回覆,還有其他的相關功能比如群發助手,好友單刪檢測,獲取微信好友資訊等功能,後續會慢慢去體驗各種玩法。
小提示:不要頻繁操作,否則會禁止登入web微信。
(完)