1. 程式人生 > >如何做機器人微信訊息的傳送

如何做機器人微信訊息的傳送

研究微信機器人訊息,實現智慧時代。 一、微信訊息的基本獲取與處理 微信訊息的指定傳送 其中將重點介紹微信訊息的獲取與處理。

二、實驗環境 在終端中輸入以下命令,完成微信的API包itchat的安裝。

我們這裡使用python3的環境(python2也是可行的):

sudo pip3 install itchat --upgrade 通過該命令判斷是否安裝成功:

python3 -c “import itchat” 如果沒有報錯資訊說明你已經將實驗環境安裝完成。

三、實驗原理 通過微信的Python介面itchat獲取微信訊息。

將微信訊息傳輸到機器人介面,獲取微信機器人的返回訊息。

將返回訊息返回給微信訊息的傳送人。

實現將微信個人號變為聊天機器人的目的。

四、實驗步驟 0. 基礎知識 為了照顧一些從未使用過Python的新使用者與使用其他語言的使用者,這裡簡單的講一下以下的程式碼如何使用。

下面的每一段描述都給出了相應的測試程式碼,如果沒有特殊說明這段程式碼可以這樣使用:

開啟桌面的Xfce終端,先將目錄通過以下命令切到桌面。

cd Desktop 之後使用gedit編輯器編輯我們的主程式。

你也完全可以使用vim,會使用vim的話想必也知道這裡應該輸入什麼命令了。

gedit test.py 最後將給出的程式碼複製進編輯器,儲存並退出,使用如下命令就可以使用了。

python3 test.py 那麼,就讓我們開始正式進入Python操作微信的探索之旅吧。

  1. 實現微信訊息的獲取 itchat的註冊時根據型別註冊的。

在獲取相應型別的資訊時會呼叫該函式。

我們現在只需要獲取最簡單的文字訊息,那麼只需要這樣註冊:

import itchat

@itchat.msg_register(itchat.content.TEXT) def print_content(msg): print(msg[‘Text’])

itchat.auto_login() itchat.run() 其中第三行即註冊的操作,通過裝飾符將print_content註冊為處理文字訊息的函式。

微信有各種型別的資料,例如圖片、語音、名片、分享等,也對應不同的註冊引數:

圖片對應itchat.content.PICTURE 語音對應itchat.content.RECORDING 名片對應itchat.content.CARD 其餘的這裡就不一一列舉,更具體的內容可以自行搜尋itchat閱讀文件 執行命令

python3 test.py 就可看到我們開始登陸微信: 掃碼完成以後最基礎的文字資訊的接收就完成了,你可以嘗試用他人的微信給自己發一條資訊。

如果你不想要每次執行程式都掃碼,可以在登陸命令中進行設定:

itchat.auto_login(hotReload=True) 2. 實現微信訊息的傳送 微信可以傳送各類訊息,文字、圖片、檔案等,不過我們現在只需要使用文字的傳送。

其餘的訊息的傳送有興趣可以自行閱讀。

itchat.send(‘Message Content’, ‘toUserName’) 該傳送訊息的函式需要兩個引數,訊息的內容與接受者的UserName,即識別符號。

那麼我們試著向檔案傳輸助手傳送一條訊息:

#coding=utf8 import itchat

itchat.auto_login(hotReload=True)

注意實驗樓環境的中文輸入切換

itchat.send(u’測試訊息傳送’, ‘filehelper’) 開啟手機看一下是否就完成了訊息的傳送。

儲存程式碼後,執行命令:

python3 test.py 掃描登入後的效果如下:

send-hello

當然,還有一種更加快捷的回覆方法就是在註冊函式中直接回復。

例如下面的例子將會將文字訊息原封不動的返回。

import itchat

@itchat.msg_register(itchat.content.TEXT) def print_content(msg): return msg[‘Text’]

itchat.auto_login() itchat.run() 這種方式顯然更加直觀也更加簡單(不需要輸入接受者的UserName)

我們本次實踐將會採用這種方式。

  1. 實現最簡單的與圖靈機器人的互動 要做一個能夠與人交流的機器人有很多種方法,最簡單的莫過於使用他人提供的介面。

我們這裡以圖靈機器人為例,演示這一功能。

圖靈機器人簡單而言就是以一定的規則給圖靈的伺服器傳送資料包(包含你對他說的話)

圖靈的伺服器會以一定的規則給你返回資料包(包含他回覆你的話)

你需要一個Tuling Key來告訴圖靈伺服器你有權和他對話,我這裡免費提供一些:

8edce3ce905a4c1dbb965e6b35c3834d eb720a8970964f3f855d863d24406576 1107d5601866433dba9599fac1bc0083 71f28bf79c820df10d39b4074345ef8c

傳送的規則簡而言之是這樣的:

{ ‘key’ : ‘TULING_KEY’, ‘info’ : ‘YOUR_MSG’, ‘userid’ : ‘USERID’, } 其中userId是使用者的標誌,讓知道你是你。(也就是一個Tuling Key可以有多個使用者)

而返回的內容基本是這樣的:

{ ‘code’: 0, ‘text’: ‘RETURN_MSG’, } 我們需要的內容就在text鍵裡面。

這裡我們使用requests包完成整個操作(已經包含在itchat包的安裝中了)。

最後值得一提的就是這是一個post請求,那麼直接上程式碼應該比我絮絮叨叨的說要直觀很多。

#coding=utf8 import requests

data = { ‘key’ : ‘8edce3ce905a4c1dbb965e6b35c3834d’, # 如果這個Tuling Key不能用,那就換一個 ‘info’ : ‘hello’, # 這是我們發出去的訊息 ‘userid’ : ‘wechat-robot’, # 這裡你想改什麼都可以 }

我們通過如下命令傳送一個post請求

r = requests.post(apiUrl, data=data).json()

讓我們列印一下返回的值,看一下我們拿到了什麼

print® 我們可以看到他回覆了你好。

reply-hello

至此我們已經理解並掌握了所有需要的內容,下面將其組裝起來即可。

五、實驗程式 我先從概念上說一下組裝是一個怎麼樣的過程。

當然,如果你覺得程式碼更直觀,我也在程式碼中為你寫好了註釋。

這裡我們首先將與伺服器的互動定義為一個函式。

最後啟動,我們的程式就完成了。

#coding=utf8 import requests import itchat

KEY = ‘8edce3ce905a4c1dbb965e6b35c3834d’

def get_response(msg): # 這裡我們就像在“3. 實現最簡單的機器人的互動”中做的一樣 # 構造了要傳送給伺服器的資料

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

這裡是我們在“1. 實現微信訊息的獲取”中已經用到過的同樣的註冊方法

@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() 六、實驗結果 在本機上通過如下命令可以執行該程式

python3 main.py 掃碼登陸後程序就成功運行了。

之後在手機上使用別的賬號給自己的微訊號傳送訊息即可獲得機器人的回覆。

這裡給出使用的效果圖:

demo

如果你想要通過與其他使用者的互動完成該操作,自行在註冊的函式中進行修改即可。

如果你的本地環境並非Python3也沒有關係,itchat同樣完美支援Python2。

很榮幸您的抽出寶貴時間觀看,轉載請註明出處,一起交流分享。