2013-09-25 124 views
0

Twitter實現了一個streaming API,以一次一個地提供一個作爲JSON blob的推文。此外,庫,比如Python的requests可以從它像這樣消耗,模仿Twitter的流媒體API

import json 
import requests 

r = requests.get('http://httpbin.org/stream/20', stream=True) 

for line in r.iter_lines(): 

    # filter out keep-alive new lines 
    if line: 
     print json.loads(line) 

我怎麼有可能實現的,服務器端,這東西可以食用的一樣嗎?理想情況下,使用類似bottle

+0

由於要求2.0你不應該需要過濾掉常連接線。 – Lukasa

回答

0

server.py

import gevent.monkey; gevent.monkey.patch_all() 

import itertools 
import json 
import random 
import time 

import bottle 


@bottle.get("/foo") 
def foo(): 
    for i in range(5): 
    o = {"i": i, "r": random.random()} 
    print 'sending: {}'.format(o) 
    yield json.dumps(o) + "\n" 
    time.sleep(1) 


if __name__ == '__main__': 
    bottle.run(
    host="localhost", 
    port=1234, 
    server="gevent" 
) 

client.py

import json 
import pprint 
import sys 

import requests 


def main(url): 
    print 'Reading from {}'.format(url) 
    for line in requests.get(url, stream=True).iter_lines(chunk_size=1): 
    pprint.pprint(json.loads(line)) 
    print 'All done.' 


if __name__ == '__main__': 
    main(sys.argv[1]) 

使用,

$ python server.py & 
$ python client.py http://localhost:1234/foo 
0

可以製作一個基於uri的數據流模塊,而不會使其成爲RESTful。

例如 //site.org/stream/40/

即使世界幾種方式與像捲曲或請求的HTTP庫進行通信。基本方法是接受收件人的POST數據,將其存儲在具有唯一ID的數據庫中並等待響應。您可以使用JavaScript的xhr來查明響應是否準備就緒。

總而言之,它應該是一個python模塊,無論你使用django,bottle等都是你的調用。

希望有所幫助。