我最近在 GitHub 上看到一个有趣的库 https://GitHub.com/pandolia/qqbot , 感觉很有意思, 就像用图灵机器人结合起来做一个群聊机器人. 用了一晚上的时间就实现了, 还是很简单的.
准备
首先我们要安装 qqbot 这个库用 pip 安装就行了, 只要输入 pip install qqbot, 就可以了, 同时我们图灵机器人部分需要用 requests 库来调用图灵机器人的 API, 同样我们输入 pip install requests 来安装. 然后我们创建两个文件 sample.py Turingrbot.py
图灵机器人
我们这里不是自己训练一个能聊天的机器人, 那就太费劲了, 重复造轮子是很蠢的事情, 这里我们用别人做好的机器人来用, 我们这里选用的是图灵机器人 http://www.turingapi.com/#/platfrom , 首先我们在图灵机器人的官网里注册一个账号, 然后在创建一个机器人, 然后机器人页面, 要里面有个 apikey 很重要, 这是我们调用我们的机器人的唯一凭证, 后面有很重要的重要. 一切都准备好了, 接下来我们就开始写我们的代码了.
Turingbot.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
sample.py
首先我们要引入我们上面写的文件 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 来加载我们写的插件, 这样你在群里 @机器人并说话, 他就会自动通过图灵机器人来回复你了.
来源: http://www.jianshu.com/p/952cfc433cba