1. 程式人生 > >用QQbot實現圖靈機器人

用QQbot實現圖靈機器人

我最近在Github上看到一個有趣的庫qqbot,感覺很有意思,就像用圖靈機器人結合起來做一個群聊機器人。用了一晚上的時間就實現了,還是很簡單的。

準備

首先我們要安裝qqbot這個庫用pip安裝就行了,只要輸入pip install qqbot,就可以了,同時我們圖靈機器人部分需要用requests庫來呼叫圖靈機器人的API,同樣我們輸入pip install requests來安裝。然後我們建立兩個檔案sample.py Turingrbot.py

圖靈機器人

我們這裡不是自己訓練一個能聊天的機器人,那就太費勁了,重複造輪子是很蠢的事情,這裡我們用別人做好的機器人來用,我們這裡選用的是

圖靈機器人,首先我們在圖靈機器人的官網裡註冊一個賬號,然後在建立一個機器人,然後機器人頁面,要裡面有個apikey很重要,這是我們呼叫我們的機器人的唯一憑證,後面有很重要的重要。一切都準備好了,接下來我們就開始寫我們的程式碼了。

首先我們先引入我們需要的庫:

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來載入我們寫的外掛,這樣你在群裡@機器人並說話,他就會自動通過圖靈機器人來回復你了。