python3+qqBot+圖靈機器人實現qq聊天機器人


原理:

  通過Python3的qqBot開源庫,基於騰訊的smartQQ協議登錄個人QQ,實現監控、收集QQ消息,進而通過圖靈機器人API接入方式實現自動聊天。


 

零、前期准備:

  1、Python3

  2、qqBot & requests & re

  3、申請圖靈機器人



 

 

一、安裝Python3的3個庫:

  Windows下打開cmd命令提示符,進入python,嘗試import導入一下庫。若均已安裝,則顯示如下:

 

 1 Microsoft Windows [版本 10.0.17134.407]
 2 (c) 2018 Microsoft Corporation。保留所有權利。
 3 
 4 C:\Users\20173>python
 5 Python 3.7.0 (v3.7.0:1bf9cc5093, Jun 27 2018, 04:59:51) [MSC v.1914 64 bit (AMD64)] on win32
 6 Type "help", "copyright", "credits" or "license" for more information.
 7 >>> import qqbot
 8 >>> import requests
 9 >>> import re
10 >>>

  

  若未安裝,則可直接輸入pip安裝

 

C:\Users\20173>pip install qqbot
...
C:\Users\20173>pip install requests
...
C:\Users\20173>pip install re
...

 

二、關於qqBot:

  若成功安裝qqBot后,安裝路徑應該在Python安裝路徑的 \Lib\site-packages\qqbot 里

  此時進入qqbot下的 plugins 子目錄下,並直接修改 sample.py 插件文件

  原始sample.py插件內容如下:

 1 # -*- coding: utf-8 -*-
 2 
 3 # 插件加載方法: 
 4 # 先運行 qqbot ,啟動成功后,在另一個命令行窗口輸入: qq plug qqbot.plugins.sample
 5 
 6 def onQQMessage(bot, contact, member, content):
 7     if content == '-hello':
 8         bot.SendTo(contact, '你好,我是QQ機器人')
 9     elif content == '-stop':
10         bot.SendTo(contact, 'QQ機器人已關閉')
11         bot.Stop()

  可以容易得知,contact參數代表聯系人(qq好友、群、臨時會話),content代表接受的消息內容。

  他們的實際意義如下:

1 bot     : QQBot   對象,提供 List/SendTo/Stop/Restart 等接口,詳見本文檔第五節
2 contact : QContact 對象,消息的發送者,具有 ctype/qq/uin/nick/mark/card/name 等屬性
3 member  : QContact 對象,僅當本消息為“群消息”或“討論組消息”時有效,代表實際發消息的成員(群成員)
4 content : str    對象,接受的消息內容

  若想詳細了解可參考Github源碼地址:https://github.com/pandolia/qqbot

 

  由此,我們可以知道,我們只需對str對象類型的 content 參數進行處理,並把結果通過調用 bot.SendTo(contact, "要回復內容") 即可

 

三、關於圖靈機器人及調用的API:

  首先是接入說明(詳細說明:https://www.kancloud.cn/turing/www-tuling123-com/718227):

    -->API V2.0是基於圖靈機器人平台語義理解、深度學習等核心技術,為廣大開發者和企業提供的在線服務和開發接口。

    -->編碼方式  UTF-8(調用圖靈API的各個環節的編碼方式均為UTF-8)

    -->接口地址  http://openapi.tuling123.com/openapi/api/v2

    -->請求方式  HTTP POST

    -->請求參數  請求參數格式為 json

  

  也就是說,我們只需把上一步的 content 內容寫到指定位置的 json 里,然后把發到接口地址,再從響應的內容里提取所要的回復內容即可。

 

四、代碼實現:

  以下即為sample.py文件內容:

# -*- coding: utf-8 -*-
import json
import requests
import re
# 插件加載方法: 
# 先在命令行運行 qqbot ,
# 啟動成功后,在另一個命令行窗口輸入: qq plug qqbot.plugins.sample
def answerMessage(ask_message): url = 'http://openapi.tuling123.com/openapi/api/v2' body = { "reqType":0, "perception": { "inputText": { "text": "" } }, "userInfo": { "apiKey": "此處填機器人的APIKey(32位16進制數字)", "userId": "此處填圖靈機器人的用戶名(六位數字)" } } body['perception']['inputText']['text'] = ask_message data = json.dumps(body) response = requests.post(url, data = data) retext = response.text answ_text = re.findall((re.compile('{.*?results":.*?values.*?text":"(.*?)"}', re.S)), retext) text = str(answ_text[0]) try: answ_shows = re.findall((re.compile('{.*?showtext":"(.*?)",', re.S)), retext) return str(answ_shows[0]) except IndexError: answ_names = re.findall((re.compile('{.*?name":"(.*?)",', re.S)), retext) answ_urls = re.findall((re.compile('{.*?detailurl":"(.*?)"}', re.S)), retext) try: for index in range(3): text = text+"\n原標題"+str(index+1)+":"+str(answ_names[index])+"\n鏈接地址:"+str(answ_urls[index]) return (text) except IndexError: return (str(answ_text[0])) def onQQMessage(bot, contact, member, content): answer = answerMessage(content) bot.SendTo(contact, answer)

這里我有對新聞資訊和查詢天氣做了處理,中間有幾個異常處理,想簡單的話可分析下API說明,不用這么多也行的。

五、啟動方式
  首先啟動qqbot:

  
  這是不出意外的話會彈出照片窗口,掃描二維碼即可登錄;
  若長時間不彈出二維碼,請自行找到地址(如上圖,我的是:C:\Users\20173\.qqbot-tmp\plugins),手動打開並掃描登陸。
  成功后繼續顯示如下:


  其次加載sample.py插件:
  再打開一個終端(上買啟動那個不要關閉),輸入:qq plug qqbot.plugins.sample



拓展:有興趣可研究下.json文件用處及用法,還有re,requests等。
  另外這里也可對此機器人回復內容等進行進一步的探索和拓展。




***每天進步一點點***
===感激並前行着===

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM