Как сделать несколько вызовов 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 здесь

Другие вопросы по тегам