您的位置:首页 > 移动开发 > 微信开发

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

2018-02-13 16:27 302 查看
人工智能很火,但是智能算法对于大多数人来说门槛儿还是挺高的
对于我们这种喜欢折腾的码农来说,就算不会算法也要又一颗想折腾的心
我们不会算法,可以基于已经成熟的算法成果来做一些好玩儿的东西
本文介绍下微信公众号接入图灵机器人实现智能回复功能
申请微信公众号;
申请新浪SAE,初次申请新浪会给200个云豆,完全够我们玩儿一阵儿了;
在新浪SAE上创建一个python的项目,使用git或者svn把工程代码拉下来,我使用的是git;
使用pyCharm创建flask项目;
flask项目接入微信公众号;
申请图灵机器人,网站是http://www.tuling123.com/;
flask对接图灵机器人api;
将flask代码提交到sae上;
结束。

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


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


图2
如上图所示,点击进入微信的这个页面,具体路径是左侧下方的开发标签下的基本配置,点击进入后,点击服务器配置按钮进入上图所示页面,
需要填写的又两个内容:URL 这个就是新浪SAE创建应用后对应的地址
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 = 'http://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上传到新浪云上了,上传成功后,试试给微信公众号发一段文字吧,说不定一次就成功了
欢迎关注公主号
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  python wechat flask