我必须将我的API请求限制为每分钟10次调用,如何修改for循环来完成此操作?
我想在time.sleep(8)
循环中添加for observation
而没有任何运气......有什么想法吗?
import arrow # learn more: https://python.org/pypi/arrow
from WunderWeather import weather # learn more: https://python.org/pypi/WunderWeather
import time
api_key = ''
extractor = weather.Extract(api_key)
zip = '53711'
# get 20170101 00:00
begin_date = arrow.get("2017","YYYY")
# get 20171231 23:00
end_date = arrow.get("2018","YYYY").shift(hours=-1)
for date in arrow.Arrow.range('hour',begin_date,end_date):
# get date object for feature
# http://wunderweather.readthedocs.io/en/latest/WunderWeather.html#WunderWeather.weather.Extract.date
date_weather = extractor.date(zip,date.format('YYYYMMDD'))
# use shortcut to get observations and data
# http://wunderweather.readthedocs.io/en/latest/WunderWeather.html#WunderWeather.date.Observation
for observation in date_weather.observations:
time.sleep(8)
print("Date:",observation.date_pretty)
print("Temp:",observation.temp_f)
答案 0 :(得分:0)
可能解释为什么您仍然超出API限制可能与添加时间等待的行有关。如果您获得的API响应不包含任何观察,则内部循环将不会执行。所以首先我会尝试在API调用之后立即在外部循环中等待时间。
您可能还会考虑使用来自twisted的loopingCall之类的东西来安排您的任务每隔X秒运行一次 http://twistedmatrix.com/documents/9.0.0/core/howto/time.html
答案 1 :(得分:0)
根据您想要数据的实时性或者您可以承受的一天,您可以获得过去日期的所有观察结果,这将是一次API调用以检索一天的数据(或者它可能是当天观察的结束日摘要)。
或者,如果您每隔x分钟左右尝试获取当前天气(在限制范围内) 我会使用某种带有计时器的循环(或者可能是扭曲的,这似乎抽象了“循环”),但是调用以下之一(取决于你正在寻找的东西)。您当前的代码正在查找过去的日期,但这些其他端点是当天。
你不想在观察循环中使用计时器,因为如上所述,可能没有计时器。
可以类似于以下示例调用 http://wunderweather.readthedocs.io/en/latest/index.html#additional-examples