在使用itchat开发图灵机器人过程中遇到的若干坑

第一次写博客,和大家分享一下我在用itchat开发图灵机器人中遇到的若干坑。由于是新手小白,所以踩到了颇多基础的坑,希望各位前辈在博客中发现低级错误,切勿鄙夷,还望斧正。

事情起源于前几天看到CSDN公众号发的一篇文章《如何用30行代码实现微信自动回复机器人》,文中介绍了如何使用itchat配合图灵机器人实现微信自动回复机器人,我对照着微信教程在Python中安装了itchat,这部分一般不会出啥错,有兴趣的就照常规方法安装就行。之后我继续照着教程把代码拷贝了一份,再之后去图灵机器人的官网注册了账号创建了机器人,关于这部分都没遇到啥坑。坑人的地方到了,运行的时候无法实现自动回复,只能回复默认回复。代码如下:

1import requests
 2import itchat
 3 4KEY = '8edce3ce905a4c1dbb965e6b35c3834d' 5 6def get_response(msg): 7 # 这里实现与图灵机器人的交互 8 # 构造了要发送给服务器的数据 9 apiUrl = 'http://www.tuling123.com/openapi/api' 10 data = { 11 'key' : KEY, 12 'info' : msg, 13 'userid' : 'wechat-robot', 14 } 15 try: 16 r = requests.post(apiUrl, data=data).json() 17 # 字典的get方法在字典没有'text'值的时候会返回None而不会抛出异常 18 return r.get('text') 19 # 为了防止服务器没有正常响应导致程序异常退出,这里用try-except捕获了异常 20 # 如果服务器没能正常交互(返回非json或无法连接),那么就会进入下面的return 21 except: 22 # 将会返回一个None 23 return 24 25# 这里实现微信消息的获取 26@itchat.msg_register(itchat.content.TEXT) 27def tuling_reply(msg): 28 # 为了保证在图灵Key出现问题的时候仍旧可以回复,这里设置一个默认回复 29 defaultReply = 'I received: ' + msg['Text'] 30 # 如果图灵Key出现问题,那么reply将会是None 31 reply = get_response(msg['Text']) 32 # a or b的意思是,如果a有内容,那么返回a,否则返回b 33 # 有内容一般就是指非空或者非None,你可以用`if a: print('True')`来测试 34 return reply or defaultReply 35 36# 为了让实验过程更加方便(修改程序不用多次扫码),我们使用热启动 37itchat.auto_login(hotReload=True) 38itchat.run()

以上代码运行只会返回defaultReply,说明程序接受到了监听的消息,考虑是图灵机器人API接口的问题,查看了官网的文档,接口长这样:

{
	"reqType":0,
    "perception": {
        "inputText": {
            "text": "附近的酒店"
        },
        "inputImage": {
            "url": "imageUrl"
        },
        "selfInfo": {
            "location": {
                "city": "北京",
                "province": "北京",
                "street": "信息路"
            }
        }
    },
    "userInfo": {
        "apiKey": "",
        "userId": ""
    }
}

和教程上简单的接口实现完全不同,复杂了不止一个档次,对于接口有兴趣的朋友请移步API V2.0接入文档,在百度上一番搜索后才知道教程上的接口是第一版本,现在官网提供的是第二版本,这个就有点坑了。照着官网文档上的接口实现了一下,程序还是不能运行。再次进行BUG的排查,进入图灵机器人后台查看日志,后台显示已经收到程序发送的信息,并且返回消息。那就是在接收返回消息到把消息发送给微信的代码出问题了。确定了问题接下来就一步步排查,先测试是否接受到了后台返回的消息。再次网上搜索,发现有人遇到相似问题,原因是json数据需要使用json.dumps()解析,插入代码后依旧不能运行,继续排查,测试代码如下:

# -*- coding: utf-8 -*-
"""
Created on Mon Dec 10 14:10:01 2018

@author: Loye
"""

import requests
import json

def get_response(msg): apiUrl='http://www.tuling123.com/openapi/api/v2' data= { "reqType":0, "perception": { "inputText": { "text": msg }, "selfInfo": { "location": { "city": "北京", "province": "北京", "street": "信息路" } } }, "userInfo":{ "apiKey":"5c680f292ff4399862e206a32ee", "userId": "7458" } } try: dat=json.dumps(data) req=requests.post(apiUrl,data=dat).json() print(req['results'][0]['values']['text']) nReq=str(req['results'][0]['values']['text']) # print('1') # dicm=json.loads(req) # str=dicm['results'][0]['values']['text'] # print(str) return nReq except: return if __name__=='__main__': # get_response('想要个萌萌哒女朋友') nReq=get_response('单身狗,好难过') print(nReq)

一番操作之后数据终于能传出来了,但运行调整好的程序,还是没能达到理想的效果。继续排除问题,现在就比较明确了,问题在itchat的部分。最后解决了问题,但不知道问题出在哪。itchat部分的测试代码如下

import itchat

def get_response(msg): if(msg['Text']=="1"): return 'hehe' else: return 'lala' @itchat.msg_register(itchat.content.TEXT) def tuling_reply(msg): # defaultReply='I received:'+msg['Text'] liAn=get_response(msg) itchat.send('%s: %s' % (msg['Type'], msg['Text']), msg['FromUserName']) # return reply or defaultReply return liAn or '666' itchat.auto_login(hotReload=True) itchat.run()

代码使用官方文档上的测试代码改编,但是在运行时还是没反应,至今没搞懂,希望有大神赐教。

最后没使用return,使用msg.user.send()来传递返回值。目前还只能达到聊天功能,看到图灵机器人上有斗图功能,但目前没发现文档可以参考,以后技术进步再写吧。最后附上完整代码:

# -*- coding: utf-8 -*-
"""
Created on Mon Dec 10 10:47:52 2018

@author: Loye
"""

import requests
import itchat
import json # 注册监听微信文本消息,微信自带表情也行,有文本传入,运行方法执行功能 @itchat.msg_register(itchat.content.TEXT) def tuling_reply(msg): # defaultReply='I received:'+msg['Text'] liAn=get_response(msg) # return reply or defaultReply msg.user.send(liAn) # 从微信接受消息,传递给后台图灵机器人,接收后台发回的消息,处理后返回 def get_response(msg): apiUrl='http://www.tuling123.com/openapi/api/v2' data= { "reqType":0, "perception": { "inputText": { "text": msg['Text'] }, "inputImage": { "url": "imageUrl" }, "selfInfo": { "location": { "city": "北京", "province": "北京", "street": "信息路" } } }, "userInfo":{ "apiKey":"5c680f292ff43998627e206a732ee", "userId": "7458" } } try: dat=json.dumps(data) req=requests.post(apiUrl,data=dat).json() lian=str(req['results'][0]['values']['text']) # json.loads(str) return lian except: return itchat.auto_login() itchat.run()

转载于:https://www.cnblogs.com/Loye-gao/p/10101884.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值