Как сделать несколько вызовов API с нескольких страниц в одном URL
Так что название немного сбивает с толку, я думаю...
У меня есть сценарий, который я пишу, который будет отображать некоторые случайные данные и другие несущественные, когда я открываю свою оболочку. Я использую запросы для выполнения вызовов API, так как я использую более одного URL. Для своих данных о погоде я использую API WeatherUnderground, поскольку он будет предлагать активные оповещения. Данные предупреждений и условий находятся на отдельных страницах. Я не могу понять, как вставить соответствующее имя в объект grequests, когда он делает запросы. Вот код, который у меня есть:
URLS = ['http://api.wunderground.com/api/'+api_id+'/conditions/q/autoip.json',
'http://www.ourmanna.com/verses/api/get/?format=json',
'http://quotes.rest/qod.json',
'http://httpbin.org/ip']
requests = (grequests.get(url) for url in URLS)
responses = grequests.map(requests)
data = [response.json() for response in responses]
#json parsing from here
В URL 'http://api.wunderground.com/api/'+api_id+'/conditions/q/autoip.json'
Мне нужно сделать запрос API к условиям и предупреждениям, чтобы получить нужные мне данные. Как мне сделать это, не переписывая четвертую строку URLS?
я пробовал
pages = ['conditions', 'alerts']
URL = ['http://api.wunderground.com/api/'+api_id+([p for p in pages])/q/autoip.json']
но, как я уверен, некоторые из вас более опытные программисты знают, бросили и исключение. Итак, как я могу перебрать эти страницы, или мне придется выписать оба полных URL-адреса?
Спасибо!
1 ответ
Хорошо, я смог выяснить, как вызывать каждую страницу внутри объекта grequests, используя простой цикл for. Вот код, который я использовал для получения ожидаемых результатов:
import grequests
pages = ['conditions', 'alerts']
api_id = 'myapikeyhere'
for p in pages:
URLS = ['http://api.wunderground.com/api/'+api_id+'/'+p+'/q/autoip.json',
'http://www.ourmanna.com/verses/api/get/?format=json',
'http://quotes.rest/qod.json',
'http://httpbin.org/ip']
#create grequest object and retrieve results
requests = (grequests.get(url) for url in URLS)
responses = grequests.map(requests)
data = [response.json() for response in responses]
#json parsing from here
Я все еще не уверен, почему я не мог понять это раньше.
Документация для библиотеки grequests здесь