但是,在使用Eventbrite的API为其事件提供网站支持的过程中,我仍然坚持如何实现项目。
当前,我想通过日期过滤事件并将其显示在首页上,但是,Eventbrite API限制为每页仅50个项目。 API请求推出86个页面,每个页面包含50个项目。
如何在降低延迟的同时呈现这些事件? 我目前所需要的时间为104秒,然后将结果呈现到页面上。我正在尝试大O符号表示法,但我想我正在使用O(n²)。
代码如下:
routes.py:
from flask import Flask, render_template
from eventbrite import Eventbrite
from datetime import datetime
import requests, json
app = Flask(__name__)
# TODO: Remove outh key in file and register in sys
oKey = ‘<oauth-key>’
o_token_url = '&token={0}'.format(oKey)
@app.route("/")
def index():
base_url = 'https://www.eventbriteapi.com/v3/'
regions_url = base_url + 'system/regions/?token={0}'.format(oKey)
regions_result = requests.get(regions_url)
regions_obj = regions_result.json()
e_url = base_url + 'events/search/?token={0}&location.address=<city>&start_date.range_start=2018-07-02T12%3A00%3A00Z&page=2'.format(oKey)
e_result = requests.get(e_url)
e_obj = e_result.json()
list_events = []
for pg in range(1, e_obj['pagination']['page_count']):
print(pg)
startTime = datetime.now()
e_url = base_url + 'events/search/?token={0}&location.address=<city>&start_date.range_start=2018-07-02T12%3A00%3A00Z&page={1}'.format(oKey, pg)
e_result = requests.get(e_url)
e_obj = e_result.json()
for i in e_obj['events']:
an_event = {}
an_event['name'] = i['name']['text']
list_events.append(htx_event)
print(datetime.now() - startTime)
return render_template('index.html', events=list_events)
if __name__ == "__main__":
app.run(host='0.0.0.0')
index.html:
{% for event in events %}
{{event['name']}}<br>
{% endfor %}
我知道EB API批处理请求endpoint,但是我无法确定如何发送带有请求的url词典列表。
任何有关如何优化上面代码的技巧将不胜感激。我想我可以限制在任何给定时间显示的事件数量,但是对其他人如何处理此问题感兴趣。
答案 0 :(得分:2)
这需要很长时间,不是因为它是CPU密集型操作(可以通过算法优化来解决),而是因为每个HTTP请求都需要时间。为了缓解这种情况,您可以make requests concurrent (i.e. simultaneous)。为了进一步减少延迟,您可以tune re-use of TCP connections,这样就不会浪费时间为每个HTTP请求创建TCP连接。