原文链接:点击打开链接

摘要: 之前有主流的小黄鸡机器人,但是没找到官方的网页版。(小黄鸡提供付费 API )尝试使用http://www.niurenqushi.com/app/simsimi/(虽然事实证明这个网站用的是图灵机器人的 API 而非小黄鸡 API ,后面我们会再谈 API 怎么用) 很简单的一个请求。

之前有主流的小黄鸡机器人,但是没找到官方的网页版。(小黄鸡提供付费 API )尝试使用
http://www.niurenqushi.com/app/simsimi/(虽然事实证明这个网站用的是图灵机器人的 API 而非小黄鸡 API ,后面我们会再谈 API 怎么用)

很简单的一个请求。 http://www.niurenqushi.com/app/simsimi/ajax.aspx?txt=

网址后面加上内容就可以了。

# -*- coding: utf-8 -*-import requestsdef talk(content):s = requests.session()r = s.post('http://www.niurenqushi.com/app/simsimi/ajax.aspx?txt='+content)recontent = r.textreturnrecontent#如果请求失败自己试试加上headers

抓到了自动回复的内容以后,我们将用户输入的文本内容当作 content 传入,获取回复再返回即可。

从小黄鸡的回复我们可以看出来,丫并不是小黄鸡,而是图灵机器人伪装的。与其给人刷请求量还不如自己去申请一个图灵机器人的 API ,可以自己定制很多东西。 
http://www.tuling123.com/ 注册以后会分配自己的 key ,免费版每天 5000 次请求。

官方提供了几种接入方式,其中一种是微信公众平台接入,这种方法直接接入图灵机器人提供的链接而不是自己的服务器,所以对于公众号来讲定制功能的限定就很多,但是如果有小伙伴没有自己的服务器的话,可以用这个尝尝鲜。

我们已经搭好了 Python 环境的服务器,所以选择 API 接入。 http://www.tuling123.com/html/doc/api.html(推荐自己详细阅读文档) 
下面是对 API 调用的 Python 代码: 
存储为talk_api.py

(这里的重点是根据返回值中不同的 code 对相应返回的格式进行处理,否则会运行不成功或者返回信息不全)

# -*- coding: utf-8 -*-import requestsimportjsonglobal ss = requests.session()def talk(content):url = 'http://www.tuling123.com/openapi/api'da = {"key": "your API key", "info": content}data = json.dumps(da)r = s.post(url, data=data)j = eval(r.text)code = j['code']if code == 100000:recontent = j['text']elif code == 200000:recontent = j['text']+j['url']elif code == 302000:recontent = j['text']+j['list'][0]['info']+j['list'][0]['detailurl']elif code == 308000:recontent = j['text']+j['list'][0]['info']+j['list'][0]['detailurl']else:recontent = '这货还没学会怎么回复这句话'returnrecontent修改其中的 API key,然后修改之前的 weixinInterface.pydef POST(self):str_xml = web.data() #获得post来的数据xml = etree.fromstring(str_xml)#进行XML解析#content=xml.find("Content").text#获得用户所输入的内容msgType=xml.find("MsgType").textfromUser=xml.find("FromUserName").texttoUser=xml.find("ToUserName").textifmsgType == 'image':try:picurl = xml.find('PicUrl').textdatas = imgtest(picurl)return self.render.reply_text(fromUser, toUser, int(time.time()), '图中人物性别为'+datas[0]+'\n'+'年龄为'+datas[1])except:return self.render.reply_text(fromUser, toUser, int(time.time()),  '识别失败,换张图片试试吧')else:content = xml.find("Content").text  # 获得用户所输入的内容if content[0:2] == u"快递":post = str(content[2:])kuaidi = cxkd.detect_com(post)returnself.render.reply_text(fromUser,toUser,int(time.time()), kuaidi)else:try:msg = talk_api.talk(content, userid)returnself.render.reply_text(fromUser,toUser,int(time.time()), msg)except:return self.render.reply_text(fromUser,toUser,int(time.time(

这样我们就实现了调用图灵机器人 API 微信公众号后台自动回复的功能。你可以在http://www.tuling123.com/web/robot_settings!index.action?cur=l_02 修改机器人设定,机器人后台会根据设定自动修改相应回复。 
示例:

实现了文本信息的聊天以后我就在想,我们已经可以处理文本、图片了,能不能处理语音呢? 
刚好看到微信官方提供了接口:

这就意味着我们不需要做太多的修改就可以将接收到的语音消息作为文本信息处理了。 
修改weixinInterface.py

def POST(self):str_xml = web.data() #获得post来的数据xml = etree.fromstring(str_xml)#进行XML解析#content=xml.find("Content").text#获得用户所输入的内容msgType=xml.find("MsgType").textfromUser=xml.find("FromUserName").texttoUser=xml.find("ToUserName").text#picurl = xml.find('PicUrl').text#return self.render.reply_text(fromUser,toUser,int(time.time()), content)ifmsgType == 'image':try:picurl = xml.find('PicUrl').textdatas = imgtest(picurl)return self.render.reply_text(fromUser, toUser, int(time.time()), '图中人物性别为'+datas[0]+'\n'+'年龄为'+datas[1])except:return self.render.reply_text(fromUser, toUser, int(time.time()),  '识别失败,换张图片试试吧')elifmsgType == 'voice':content = xml.find('Recognition').texttry:msg = takl_api.talk(content, userid)returnself.render.reply_text(fromUser,toUser,int(time.time()), msg)except:return self.render.reply_text(fromUser,toUser,int(time.time()), content + '这货还不够聪明,换句话聊天吧')#return self.render.reply_text(fromUser,toUser,int(time.time()), content)else:content = xml.find("Content").text  # 获得用户所输入的内容if content[0:2] == u"快递":post = str(content[2:])#result = cxkd.cxkd('PQ00708467161')r = urllib2.urlopen('http://www.kuaidi100.com/autonumber/autoComNum?text='+post)h = r.read()k = eval(h)kuaidi = k["auto"][0]['comCode']'''j = requests.get('http://www.kuaidi100.com/query?type=huitongkuaidi&postid=280472503105')l = j.text#l = j.read()#m = eval(l)#outcome = ''#for c in m['data']:'''#outcome = outcome + c['time']+'   '+c['context']+'\n'returnself.render.reply_text(fromUser,toUser,int(time.time()), kuaidi)else:try:msg = talk_api.talk(content)returnself.render.reply_text(fromUser,toUser,int(time.time()), msg)except:return self.render.reply_text(fromUser,toUser,int(t

这里重点就是加上了 elifmsgType == 'voice' 这部分。 
示例:

这一步做完以后就已经实现了大部分我想要的功能了,但还是有一点问题,因为机器人并不理解上下文的语义,所以会出现这样的情况:
由于机器人并没有理解上下文语义,前一句话问你要去哪儿,你告诉他北京以后他却不知道你是因为什么回复的北京。所以要告诉机器人是谁在跟他聊天。

查看微信和图灵机器人的开发文档可以看到:

从微信接收到消息是,我们就能够获取到用户的 OpenID了,只需要将这个 ID 作为 userid 传给图灵机器人 API ,就可以保持上下文对话的语境了。(但是userid只支持0-9和数字,而微信 ID 中带有下划线,所以需要做一些简单处理)

修改talk_api.py (最终):

# -*- coding: utf-8 -*-import requestsimportjsonglobal ss = requests.session()def talk(content, userid):url = 'http://www.tuling123.com/openapi/api'da = {"key": "your key here", "info": content, "userid": userid}data = json.dumps(da)r = s.post(url, data=data)j = eval(r.text)code = j['code']if code == 100000:recontent = j['text']elif code == 200000:recontent = j['text']+j['url']elif code == 302000:recontent = j['text']+j['list'][0]['info']+j['list'][0]['detailurl']elif code == 308000:recontent = j['text']+j['list'][0]['info']+j['list'][0]['detailurl']else:recontent = '这货还没学会怎么回复这句话'returnrecontent可以看到,我们需要两个参数,content 和 userid 。修改 weixinInterface.py(最终):def POST(self):str_xml = web.data() #获得post来的数据xml = etree.fromstring(str_xml)#进行XML解析#content=xml.find("Content").text#获得用户所输入的内容msgType=xml.find("MsgType").textfromUser=xml.find("FromUserName").texttoUser=xml.find("ToUserName").textuserid = fromUser[0:15]#picurl = xml.find('PicUrl').text#return self.render.reply_text(fromUser,toUser,int(time.time()), content)ifmsgType == 'image':try:picurl = xml.find('PicUrl').textdatas = imgtest(picurl)return self.render.reply_text(fromUser, toUser, int(time.time()), '图中人物性别为'+datas[0]+'\n'+'年龄为'+datas[1])except:return self.render.reply_text(fromUser, toUser, int(time.time()),  '识别失败,换张图片试试吧')elifmsgType == 'voice':content = xml.find('Recognition').texttry:msg = talk_api.talk(content, userid)returnself.render.reply_text(fromUser,toUser,int(time.time()), msg)except:return self.render.reply_text(fromUser,toUser,int(time.time()), content + '这货还不够聪明,换句话聊天吧')#return self.render.reply_text(fromUser,toUser,int(time.time()), content)else:content = xml.find("Content").text  # 获得用户所输入的内容if content[0:2] == u"快递":post = str(content[2:])#result = cxkd.cxkd('')r = urllib2.urlopen('http://www.kuaidi100.com/autonumber/autoComNum?text='+post)h = r.read()k = eval(h)kuaidi = k["auto"][0]['comCode']'''j = requests.get('http://www.kuaidi100.com/query?type=huitongkuaidi&postid=280472503105')l = j.text#l = j.read()#m = eval(l)#outcome = ''#for c in m['data']:'''#outcome = outcome + c['time']+'   '+c['context']+'\n'returnself.render.reply_text(fromUser,toUser,int(time.time()), kuaidi)else:try:msg = talk_api.talk(content, userid)returnself.render.reply_text(fromUser,toUser,int(time.time()), msg)except:return self.render.reply_text(fromUser,toUser,int

提交代码即可。 
测试:

Python开发微信公众号后台(系列三)相关推荐

  1. python开发微信公众号开发教程百度云_Python开发微信公众号后台(系列一)

    Python 开发微信公众号后台(系列一) 專 欄段晓晨,写过一点爬虫,写过几篇文章.能力虽 有限,会尽量把想说的东西讲清楚. 知乎 ID :段小草 知乎专栏:小段同学的杂记, https://zhu ...

  2. python开发微信公众号自动回复音乐

    利用python开发微信公众号,对接实现自动回复音乐,并下载音乐,是公众号更自动化. 本次采用新浪sae部署,新浪sae 1.新浪SAE 创建python应用 1)选择共享环境,使用多少扣费多少,不适 ...

  3. 技术小白用python搭建微信公众号后台

    其实既然你有做开发者模式的想法,那你肯定是有些基础的. 至少会学过一些基础的编程语言. 而读完本片文章,你理解后绝对可以自己开发(一些简单的)功能.不过需要注意的是,本文只是"授人以渔&qu ...

  4. [基于Python的微信公众号后台开发:2]文字消息的接收与解密

    文章目录 1.服务器安装pycryptodome 2.下载微信官方提供的解密SDK 3.上传SDK到服务器 4.开始测试 5.发送消息到公众号 6.测试解密:把所有参数套入官方给的Sample.py文 ...

  5. python公众号教学_Python微信公众号后台开发教程

    本篇文章开启Python开发微信公众号后台 准备: 云服务平台:(我用的是京东云的) 公众号:自己注册一个就行 Git:代码管理平台 了解平台 进入公众号后台,查看开发相关项 基本配置(服务器配置等) ...

  6. Python进行微信公众号开发

    一.微信公众号的准备: 1. 注册 访问地址:https://mp.weixin.qq.com/ 按照提示注册即可 注意:本文样例使用个人公众号,由于个人公众号没有接口权限,自定义菜单无法进行开发,同 ...

  7. python训练营微信公众号真实性_用python进行微信公众号开发(仅测试学习)

    今天看到篇教程,是用python开发微信公众号的,觉得有意思,就敲代码实现了一下,成功后更觉得好玩,故记录,方便开发深入时使用. 基础背景介绍: 首先得有个人微信号(没有自行注册),为方便测试学习: ...

  8. 视频教程-基于python的微信公众号开发教程-微信开发

    基于python的微信公众号开发教程 微信企业号星级会员.10多年软件从业经历,国家级软件项目负责人,主要从事软件研发.软件企业员工技能培训.已经取得计算机技术与软件资格考试(软考)--"信 ...

  9. Django开发微信公众号

    一.微信公众号的准备: 1. 注册 访问地址:https://mp.weixin.qq.com/  按照提示注册即可  注意:本文样例使用个人公众号,由于个人公众号没有接口权限,自定义菜单无法进行开发 ...

最新文章

  1. 二维码是什么原理?第一次有人说得这么明白
  2. 欧几里德结构数据与 非欧几里德结构数据
  3. 实验三 编程、编译、连接、跟踪
  4. wordpress拒绝访问_Nginx + Wordpress页面或帖子URL返回拒绝访问
  5. php mysql 权重_PHP对MySql的常用操作
  6. 三星旗舰机系列名称即将更换 S10或成最后绝唱
  7. python运维脚本简书_Python运维篇:会Python的运维工程师价值多少?
  8. 生命游戏(康威的生命游戏) Game Of Life - Conway Cocos Creator 3.x版实现
  9. VBA从工作表另存为工作簿
  10. 99乘法表,九九乘法表
  11. 注塑机计算机控制器,注塑机微机控制器,Microprocessor-based Controller for PIM,音标,读音,翻译,英文例句,英语词典...
  12. 坐标系之间的旋转平移变换与对应变换矩阵的关系
  13. N、Z、Q、R 分别代表什么
  14. Android录音下————AudioRecord源码分析
  15. elk笔记13--Queries-compound queries
  16. Imblearn package study(不平衡数据处理之过采样、下采样、综合采样)
  17. root+android+8.0,安卓8.0,手机ROOT权限获取依旧必备还是多此一举
  18. [AFCTF2018]一道有趣的题目
  19. Android Camera开发(一)之基础知识
  20. PQMAGIC磁盘分区大师

热门文章

  1. 数据库索引和EFCore的索引映射
  2. Centos7 yum安装git
  3. tableviewcell选中不变色。
  4. Servlet3.0 开启异步两种方式
  5. 分析影响网速变慢的原因
  6. tcp协议栈实现,tcp定时器与滑动窗口实现
  7. Unity3d中实现翻书效果(一)
  8. 9. 设计二个函数分别计算sinx和cosx_从并发模型看 Go 的语言设计
  9. javascript实现增删改查
  10. 鞋子商店APP源码和设计报告