用QQbot實現圖靈機器人
我最近在Github上看到一個有趣的庫qqbot,感覺很有意思,就像用圖靈機器人結合起來做一個群聊機器人。用了一晚上的時間就實現了,還是很簡單的。
準備
首先我們要安裝qqbot這個庫用pip安裝就行了,只要輸入pip install qqbot
,就可以了,同時我們圖靈機器人部分需要用requests庫來呼叫圖靈機器人的API,同樣我們輸入pip install requests
來安裝。然後我們建立兩個檔案sample.py Turingrbot.py
圖靈機器人
我們這裡不是自己訓練一個能聊天的機器人,那就太費勁了,重複造輪子是很蠢的事情,這裡我們用別人做好的機器人來用,我們這裡選用的是
首先我們先引入我們需要的庫:
import json
import requests
import re
然後構造一個函式def answer(ask):
然後我們寫入我們圖靈機器人的apiurl以及你的請求的json
url = 'http://openapi.tuling123.com/openapi/api/v2' body = { "reqType":0, "perception": { "inputText": { "text": "" } }, "userInfo": { "apiKey": "#你的apikey", "userId": "你的userid" } } body['perception']['inputText']['text'] = ask data = json.dumps(body)
記得要把aptKey和userid改成你自己的,接下來我們要寫一個post請求把json傳輸過去,來獲得圖靈機器人返回的值。
response = requests.post(url, data = data)
retext = response.text
這裡傳回來的值不是json所以我們要用正則匹配,來找到我們的需要得到的回覆,並處理返回結果
answ = re.compile('{.*?results":.*?values.*?text":"(.*?)"}', re.S) text = re.findall(answ, retext) text = str(text[0]) return text
這樣我們的圖靈機器人這部分就寫好了,接下來我們要寫qqbot外掛部分 完整程式碼為:
import json
import requests
import re
def answer(ask):
url = 'http://openapi.tuling123.com/openapi/api/v2'
body = {
"reqType":0,
"perception": {
"inputText": {
"text": ""
}
},
"userInfo": {
"apiKey": "#你的apikey",
"userId": "#你的uerid"
}
}
body['perception']['inputText']['text'] = ask
data = json.dumps(body)
response = requests.post(url, data = data)
retext = response.text
answ = re.compile('{.*?results":.*?values.*?text":"(.*?)"}', re.S)
text = re.findall(answ, retext)
text = str(text[0])
return text
首先我們要引入我們上面寫的檔案import TuringRobot as tr
,然後再定義一個自己的訊息響應函式,這個註冊的響應函式的函式名必須為 “onQQMessage” ,函式引數也必須和下面的一致:
ef onQQMessage(bot, contact, member, content):
answer = tr.answer(content)
if '@ME' in content:
bot.SendTo(contact, answer)
這裡的意思就是如果機器人得到的對話中有@他的情況,就會觸發響應,來呼叫我們寫的圖靈機器人的方法。
部署機器人
我們把我們寫好的兩個檔案放到我們qqbot的外掛資料夾內(放到 ~/.qqbot-tmp/plugins/ 目錄下( ~ 代表使用者主目錄, win7 下為 C:\Users\xxx ),或系統中可以 import 到的目錄下(如 python 的安裝目錄下的 Lib/site-packages 目錄)。)然後在終端(或cmd)中輸入qqbot來開啟qq機器人,程式執行後會自動跳出二維碼來讓我們掃描登入,登入完畢後,再開啟一個終端輸入qq plug sample
來載入我們寫的外掛,這樣你在群裡@機器人並說話,他就會自動通過圖靈機器人來回復你了。