利用python + qqbot + 聚合数据api 实现qq智能聊天机器人

使用qqbot + 聚合数据 api 实现qq智能聊天机器人 python2,3全版本兼容

借鉴了 qqbot 这位兄弟写的qqbot的库,原理是使用smartqq 来抓取包, 来分析qq聊天的各种api
  • 首先准备工作,下载qqbot的库

  • pip install qqbot

  • 去聚合数据注册一个账号,进行实名认证并且申请 问答机器人,这个审核过程可能会有1-2个小时左右,不过你实名认证的同时可以进行申请问答机器人这个api

  • 准备工作做完之后,就开始我们的开发工作了,

  • 在命令行输入 qq 成功运行后会弹出二维码,至此qqbot 运行成功,

    利用python + qqbot + 聚合数据api 实现qq智能聊天机器人_第1张图片
    QQ截图20170324220809.png

  • 在项目目录下新建一个py文件名为qqtest.py 代码如下

from qqbot import QQBotSlot as qqbotslot,RunBot
from random import randint
@qqbotslot
def onQQMessage(bot, contact, member, content):
#在这里过滤过来的输入, content的内容是监听qq上所有的输入
# 当群里有人@你的时候 传入过来的会被转化为[@ME]
# 所以使用 @ME 来过滤其他人在群里面at你
if '@ME' in content:
#四个参数的详细
#bot : QQBot 对象,提供 List/SendTo/Stop/Restart 四个接口,详见本文档第五节
#contact : QContact 对象,消息的发送者,具有 ctype/qq/uin/nick/mark/card/name 属性,这些属性都是 str 对象
#member : QContact 对象,仅当本消息为 群或讨论组 消息时有效,代表实际发消息的成员
#content : str 对象,消息内容
bot.SendTo(contact,'@'+member.name+" 哈哈 ")
#这里是因为部分群里面的at无法转化为[@ME]所以自己过滤at自己的内容
elif '@' in content and '光' in content:
bot.SendTo(contact,'@'+member.name+" 哈哈 ")
RunBot()```

  • 到此一个基本的qq机器人已经完成了,但是这个机器人只会回复哈哈,这时咱们去查看我们的接口审核通过了没(假设通过
    ),
  • 利用python + qqbot + 聚合数据api 实现qq智能聊天机器人_第2张图片
    QQ截图20170324222900.png
  • 来到这里查看自己的appkey,复制下来作为自己的key值到时候来做调用api的凭证
  • 接下来的代码是python3请求接口的代码。python2请求接口的代码聚合数据提供的有查看代码实例
  • 创建文件 juheapi.py
#!/usr/bin/python
# -*- coding: utf-8 -*-
import json, urllib,urllib.parse,urllib.request
#----------------------------------
# 问答机器人调用示例代码 - 聚合数据
# 在线接口文档:http://www.juhe.cn/docs/112
#----------------------------------
header={"User-Agent":'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.59 Safari/537.36',"Content-Type":'text/html; charset=utf-8'}
def main(text = '哈哈哈'):
 
    #配置您申请的APPKey
    appkey = ""

    #1.问答
    return request1(appkey,"GET",text)
#问答
def request1(appkey, m="GET", text="哈哈"):
    url = "http://op.juhe.cn/robot/index"
    params = {
        "key" : appkey, #您申请到的本接口专用的APPKEY
        "info" : text, #要发送给机器人的内容,不要超过30个字符
        "dtype" : "", #返回的数据的格式,json或xml,默认为json
        "loc" : "", #地点,如北京中关村
        "lon" : "", #经度,东经116.234632(小数点后保留6位),需要写为116234632
        "lat" : "", #纬度,北纬40.234632(小数点后保留6位),需要写为40234632
        "userid" : "", #1~32位,此userid针对您自己的每一个用户,用于上下文的关联
 
    }
    params = urllib.parse.urlencode(params)
    if m =="GET":
        req = urllib.request.Request("%s?%s" % (url, params), data=None,headers=header)
        f = urllib.request.urlopen(req)
    else:
        req = urllib.request.Request(url+params, data=None,headers=header)
        f = urllib.request.urlopen(req)
 
    content = f.read().decode()
    res = json.loads(content)
    if res:
        error_code = res["error_code"]
        if error_code == 0:
            #成功请求
            # print (res["result"])
            # return res['result']
            # print (res['result']['text'])
            return res['result']['text']
        else:
            err = json.dumps(res)
            with open('log.txt','a+') as oo:
                oo.write(err+"\n\r"+text) 
            # print ("%s:%s" % (res["error_code"],res["reason"]))
            return "我好像出错了$%$*%*&^#$@#%$@#%"
    else:
        return "我的接口好像出错了,哈哈哈,创造我的人技术不行啊"
  • 我上面进行过稍微改动便于我们使用 qqtest.py 来调用,额外加了一个参数text 到时候作为机器人的内容传进来,
  • 所以根据这样的api内容我们重新修改我们qqtest文件的代码
from qqbot import QQBotSlot as qqbotslot,RunBot
from random import randint
import juheapi
@qqbotslot
def onQQMessage(bot, contact, member, content):
    if '@ME' in content:
        # //拿取回答答案
        wenti = content.split('[@ME]')[-1]
        daan = juheapi.main(wenti)
        bot.SendTo(contact,'@'+member.name+"  "+daan)
    elif '@' in content and '光' in content:
        wenti = content.split('光')[-1]
        daan = juheapi.main(wenti)
        bot.SendTo(contact,'@'+member.name+"  "+daan)
RunBot()
  • 至此开发已经完成了,。还有许多不完善的地方,希望大家能够帮助改进,我的项目地址

你可能感兴趣的:(利用python + qqbot + 聚合数据api 实现qq智能聊天机器人)