阅读背景:

flask+新浪sae+图灵机器人实现超简单微信公众号智能回复功能

来源:互联网 

人工智能很火,但是智能算法对于大多数人来说门槛儿还是挺高的


对于我们这种喜欢折腾的码农来说,就算不会算法也要又一颗想折腾的心


我们不会算法,可以基于已经成熟的算法成果来做一些好玩儿的东西


本文介绍下微信公众号接入图灵机器人实现智能回复功能


  1. 申请微信公众号;

  2. 申请新浪SAE,初次申请新浪会给200个云豆,完全够我们玩儿一阵儿了;

  3. 在新浪SAE上创建一个python的项目,使用git或者svn把工程代码拉下来,我使用的是git;

  4. 使用pyCharm创建flask项目;

  5. flask项目接入微信公众号;

  6. 申请图灵机器人,网站是https://www.tuling123.com/;

  7. flask对接图灵机器人api;

  8. 将flask代码提交到sae上;

  9. 结束。


效果如下,做完以后不由的感觉python的方便快捷


图1


申请微信公众号,新浪云申请,新建应用这些就不赘述了


flask接入微信公众号


图2


如上图所示,点击进入微信的这个页面,具体路径是左侧下方的开发标签下的基本配置,点击进入后,点击服务器配置按钮进入上图所示页面,


需要填写的又两个内容:

  1. URL 这个就是新浪SAE创建应用后对应的地址

  2. token,这个令牌可随意填写一个,和flask服务里校验接口里的token一致就行



下面就到校验接口的部分了,直接上代码吧,校验方法如下:

    

@app.route('/', methods=['GET'])
def wechat():
if request.method == 'GET':
# 这里改写你在微信公众平台里输入的token
       token = 'xxxxxx'
       # 获取输入参数
       query = request.args
signature = query.get('signature', '')
timestamp = query.get('timestamp', '')
nonce = query.get('nonce', '')
echostr = query.get('echostr', '')
s = [timestamp, nonce, token]
s.sort()
s = ''.join(s)

if hashlib.sha1(s).hexdigest() == signature:
resp = make_response(echostr)
resp.headers['content-type'] = 'text'
           return resp
else:
return ""


简单流程就是,点击图2中的按钮后,微信会向URL指向的地址发送一个http的GET请求,会带4个参数,分别是signature,timestamp,nonce和echostr,token,timestamp,nonce进行sha1后于signature进行比较是否相等,如果相等返回echostr,微信端接收到回和发出去的值进行比较,如果一致,则会显示成功。


flask对接图灵机器人api


用户通过微信公众号输入框发送的文字,在服务端接收到后,有一个MsgType字段,如果该字段是text,则表示的是文字,将text发送给图灵的API进行语义分析,别获取到返回的json,具体代码如下:

@app.route('/', methods=['POST'])
def autoreplay():
xml = ET.fromstring(request.data)
toUser = xml.find('ToUserName').text
fromUser = xml.find('FromUserName').text
msgType = xml.find("MsgType").text
createTime = xml.find("CreateTime")
if msgType == 'text':
content = xml.find('Content').text
content = text_reply(content)
resp = make_response(reply_text(fromUser,
       
toUser, reply(fromUser, content)))
resp.headers['content-type'] = 'text'
       return resp
elif msgType == 'location':
location.getInfo(xml)
else:
'暂不支持图片视频语音类'


上面这段代码是解析http各个字段的,主要获取到content,将content扔给text_replay方法


def text_reply(msg):
info = msg['Text'].encode('utf-8')
url = 'https://www.tuling123.com/openapi/api'
   data = {u"key": "申请的key", "info": info, u"loc": "",
           
"userid": ""}
response=request.post(url,data).content
s = json.loads(response, encoding='utf-8')
return s['text']


下面就是将写好的代码通过git上传到新浪云上了,上传成功后,试试给微信公众号发一段文字吧,说不定一次就成功了


欢迎关注公主号



分享到: