歡迎光臨
每天分享高質量文章

30行代碼實現微信自動回覆機器人

                  

一、寫在前面

前段時間寫過一篇微信好友大揭秘,很多朋友對itchat非常感興趣,今天下午又學到了itchat另一種有趣的玩法—微信自動回覆機器人。

程式很簡單僅僅三十行代碼左右,實現了機器人自動與你的微信好友聊天,下麵是我的機器人小籠包跟自己微信好友聊天的截圖。

 

再給大家看看兩個機器人的對話

二、程式介紹

 

本程式通過itchat獲取微信的相關訊息,將微信訊息傳輸到機器人接口(本程式使用的是圖靈),獲取機器人的傳回訊息。將傳回訊息傳回給微信訊息的發送人。以此實現將微信個人號變身為聊天機器人。

 

三、具體實現

安裝
itchat的安裝可以通過下麵這行代碼

1pip install itchat
登錄
itchat.auto_login() 這種方法將會通過微信掃描二維碼登錄,但是這種登錄的方式確實短時間的登錄,並不會保留登錄的狀態,也就是下次登錄時還是需要掃描二維碼。
1# 掃描二維碼登陸微信,實際上就是通過網頁版微信登陸
2    itchat.auto_login()
如果加上hotReload==True,那麼就會保留登錄的狀態,至少在後面的幾次登錄過程中不會再次掃描二維碼,該引數生成一個靜態檔案itchat.pkl用於儲存登錄狀態
1itchat.auto_login(hotReload=True)
微信信息的發送
微信可以發送各類訊息,文本、圖片、檔案等,下麵是具體的方法的介紹。

1itchat.send('Message Content''toUserName')
該發送訊息的函式需要兩個引數,訊息的內容與接受者的UserName,即識別符號。
用下麵的代碼舉一個小慄子,實現向檔案助手發送信息。
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 增加 TextType(也就是引數) 鍵值, 方便操作。

itcaht.content 中包含所有的訊息型別引數例如圖片、語音、名片、分享等,也對應不同的註冊引數:

  • 圖片對應itchat.content.PICTURE
  • 語音對應itchat.content.RECORDING
  • 名片對應itchat.content.CARD
其餘的可以參考官方API
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微信。

(完)

    赞(0)

    分享創造快樂