Python 模仿推特';s流式API
Twitter实现了一个用于将tweet作为JSON blob一次提供一条tweet的服务。此外,Python之类的库可以像这样使用它Python 模仿推特';s流式API,python,streaming,python-requests,bottle,Python,Streaming,Python Requests,Bottle,Twitter实现了一个用于将tweet作为JSON blob一次提供一条tweet的服务。此外,Python之类的库可以像这样使用它 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: pr
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)
我如何在服务器端实现可以以相同方式使用的东西?理想情况下,使用类似于?的东西可以创建一个基于uri滚动数据流的模块,而不必使用RESTful 比如说 //site.org/stream/40/ 有几种与HTTP库通信的方法,如curl或requests。一种基本方法是接受收件人的POST数据,将其存储在具有唯一id的数据库中,然后等待响应。您可以使用javascript的xhr来确定响应是否就绪 总之,在后端,它应该是一个python模块,无论您是否使用django、Battle等,这都是您的决定 希望能有所帮助。
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"
)
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])
client.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"
)
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
对于Requests 2.0,您不需要过滤掉keep-alive行。