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

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

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

  • pip install qqbot

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

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

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

    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机器人已经完成了,但是这个机器人只会回复哈哈,这时咱们去查看我们的接口审核通过了没(假设通过
    ),
  • 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()
  • 至此开发已经完成了,。还有许多不完善的地方,希望大家能够帮助改进,我的项目地址
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,456评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,370评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,337评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,583评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,596评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,572评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,936评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,595评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,850评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,601评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,685评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,371评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,951评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,934评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,167评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,636评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,411评论 2 342

推荐阅读更多精彩内容