SAE 了解数据格式

2018-07-24 15:27 更新

到了这一步,在微信上关注那个测试账号,发送的信息已经会到我们的 SAE 的 app 服务上了。

微信过来的信息都是 XML 格式的,具体地可以参考文档:

http://mp.weixin.qq.com/wiki/index.php?title=%E6%8E%A5%E6%94%B6%E6%99%AE%E9%80%9A%E6%B6%88%E6%81%AF

虽然文档上有具体的数据例子,但是,一般还是自己亲眼看到过来的数据,心理上才会踏实一些吧,所以,我们在代码上添加一些逻辑,使用 storage 服务把请求过来的数据保存下来。SAE 环境上标准的输出不太好用,所以开发时把 storage 当成记日志的地方就好了,还有现成的 Web 工具可以直接查看呢。

先去把应用的 storage 服务开启,并创建一个 Bucket,Bucket 我这里取的名字是 log ,为了方便查看,把权限改成 public 。

然后修改 index.wsgi 代码:

# -*- coding: utf-8 -*-

import re
import time
from sae.storage import Bucket

def application(environ, start_response):
    if environ.get('REQUEST_METHOD', 'GET') == 'GET':
        q = environ.get('QUERY_STRING')
        m = re.findall('echostr=(.*)', q)[0]
        s = m.split('&', 1)[0]
        start_response('200 ok', [('content-type', 'text/plain')])
        return [s]


    length = environ.get('CONTENT_LENGTH', 0)
    length = int(length)
    body = environ['wsgi.input'].read(length)

    bucket = Bucket('log')
    bucket.put_object('%s.txt' % int(time.time()), body)
    start_response('200 ok', [('content-type', 'text/plain')])
    return ['']

用户的数据都是通过 POST 方法过来的,所以,对于 GET 方法,我们还是原来的逻辑,直接返回 echostr 的数据即可。

wsgi 接口上,获取 POST 数据的简单方法,就是先拿到 CONTENT_LENGTH 头,它标识了 HTTP 请求的 body 部分的长度。然后从 environ['wsgi.input'] 这个 file like 对象中读取指定长度的数据即可。

上面代码中,body 就是一个 XML 形式的数据了,我们目前也不做任何处理,直接以时间戳为名,存到 storage 中去。

提交代码,然后在微信上向这个测试账号发一些不同类型的信息吧,文字,图像,语音。

文字内容:

<xml><ToUserName><![CDATA[gh_b47caeadeeb7]]></ToUserName>
<FromUserName><![CDATA[ov_QzuF0iskLIXqu0r71qOLmZV6B]]></FromUserName>
<CreateTime>1407299911</CreateTime>
<MsgType><![CDATA[text]]></MsgType>
<Content><![CDATA[文本内容]]></Content>
<MsgId>6044307093609310161</MsgId>
</xml>

图像内容:

<xml><ToUserName><![CDATA[gh_b47caeadeeb7]]></ToUserName>
<FromUserName><![CDATA[ov_QzuF0iskLIXqu0r71qOLmZV6B]]></FromUserName>
<CreateTime>1407300008</CreateTime>
<MsgType><![CDATA[image]]></MsgType>
<PicUrl><![CDATA[http://mmbiz.qpic.cn/mmbiz/EiaMylXxR8B.../0]]></PicUrl>
<MsgId>6044307510221137887</MsgId>
<MediaId><![CDATA[HFQ8FFcieYaRJaNJZecI602qXXU16pqDz3SGY44PGDWbe_mqQBPiQbD_62_N6UDu]]></MediaId>
</xml>

直接访问 PicUrl 都可以看到图片的。

语音内容:

<xml><ToUserName><![CDATA[gh_b47caeadeeb7]]></ToUserName>
<FromUserName><![CDATA[ov_QzuF0iskLIXqu0r71qOLmZV6B]]></FromUserName>
<CreateTime>1407300099</CreateTime>
<MsgType><![CDATA[voice]]></MsgType>
<MediaId><![CDATA[qYVLd_UHsrXw5xPiu5ZMNFtIhxpjVojHICbuCvXLPWnarPF8hvY0Ft-GaF2pfUVo]]></MediaId>
<Format><![CDATA[amr]]></Format>
<MsgId>6044307901063161835</MsgId>
<Recognition><![CDATA[]]></Recognition>
</xml>

现在也不用去管这堆 XML 的解析问题,了解一下这些数据就可以了。


以上内容是否对您有帮助:
在线笔记
App下载
App下载

扫描二维码

下载编程狮App

公众号
微信公众号

编程狮公众号