SAE 了解數(shù)據(jù)格式

2018-07-24 15:27 更新

到了這一步,在微信上關(guān)注那個測試賬號,發(fā)送的信息已經(jīng)會到我們的 SAE 的 app 服務(wù)上了。

微信過來的信息都是 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

雖然文檔上有具體的數(shù)據(jù)例子,但是,一般還是自己親眼看到過來的數(shù)據(jù),心理上才會踏實一些吧,所以,我們在代碼上添加一些邏輯,使用 storage 服務(wù)把請求過來的數(shù)據(jù)保存下來。SAE 環(huán)境上標準的輸出不太好用,所以開發(fā)時把 storage 當成記日志的地方就好了,還有現(xiàn)成的 Web 工具可以直接查看呢。

先去把應(yīng)用的 storage 服務(wù)開啟,并創(chuàng)建一個 Bucket,Bucket 我這里取的名字是 log ,為了方便查看,把權(quán)限改成 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 ['']

用戶的數(shù)據(jù)都是通過 POST 方法過來的,所以,對于 GET 方法,我們還是原來的邏輯,直接返回 echostr 的數(shù)據(jù)即可。

wsgi 接口上,獲取 POST 數(shù)據(jù)的簡單方法,就是先拿到 CONTENT_LENGTH 頭,它標識了 HTTP 請求的 body 部分的長度。然后從 environ['wsgi.input'] 這個 file like 對象中讀取指定長度的數(shù)據(jù)即可。

上面代碼中,body 就是一個 XML 形式的數(shù)據(jù)了,我們目前也不做任何處理,直接以時間戳為名,存到 storage 中去。

提交代碼,然后在微信上向這個測試賬號發(fā)一些不同類型的信息吧,文字,圖像,語音。

文字內(nèi)容:

<xml><ToUserName><![CDATA[gh_b47caeadeeb7]]></ToUserName>
<FromUserName><![CDATA[ov_QzuF0iskLIXqu0r71qOLmZV6B]]></FromUserName>
<CreateTime>1407299911</CreateTime>
<MsgType><![CDATA[text]]></MsgType>
<Content><![CDATA[文本內(nèi)容]]></Content>
<MsgId>6044307093609310161</MsgId>
</xml>

圖像內(nèi)容:

<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 都可以看到圖片的。

語音內(nèi)容:

<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>

現(xiàn)在也不用去管這堆 XML 的解析問題,了解一下這些數(shù)據(jù)就可以了。


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號