1. 程式人生 > >30行程式碼實現微信自動回覆機器人

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
[email protected]_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
[email protected]_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# 這裡實現微信訊息的獲取
[email protected]_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微信。

文章首發自公眾號【Ahab雜貨鋪】關注公眾號技術分享第一時間送達!