Weather Undground API лимит вызовов в минуту
Я должен ограничить свой запрос 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)
2 ответа
В зависимости от того, как в реальном времени вам нужны ваши данные или вы можете позволить себе отставать на один день, вы можете получить все наблюдения за датой в прошлом, которая будет представлять собой один вызов API для извлечения данных за день (или это может быть конец дня). резюме наблюдений за текущий день).
В качестве альтернативы, если вы пытаетесь получить текущую погоду каждые х минут или около того (под лимитом), я бы использовал какой-то цикл с таймером (или, возможно, витой, который, кажется, абстрагирует "петлю"), но сделал бы вызов к одному из следующих (в зависимости от того, что вы ищете). Ваш текущий код ищет даты в прошлом, но эти другие конечные точки относятся к текущему дню.
Вам не нужен таймер в цикле наблюдений, поскольку, как упоминалось выше, его может не быть.
http://wunderweather.readthedocs.io/en/latest/WunderWeather.html
http://wunderweather.readthedocs.io/en/latest/WunderWeather.html
которые можно назвать похожими на следующие примеры: http://wunderweather.readthedocs.io/en/latest/index.html
Возможное объяснение того, почему вы все еще превышаете лимит API, может быть связано со строкой, на которой вы добавляете время ожидания. Если полученный ответ API не содержит никаких наблюдений, внутренний цикл не будет выполнен. Итак, сначала я бы попытался переместить время ожидания во внешнем цикле сразу после вызова API.
Вы также можете использовать что-то вроде loopingCall из twisted, чтобы планировать выполнение своей задачи каждые X секунд. http://twistedmatrix.com/documents/9.0.0/core/howto/time.html