KeyError при попытке получить определенные данные ответа API

Я хочу вытащить и распечатать dt, температуру, погоду, влажность и скорость ветра с учетом широты и долготы.

Я думал, что использование data = r.json() позволит мне получить доступ к ответу API, как к словарю, и получить доступ/распечатать нужные мне элементы с помощью print(r[]), однако я получаю KeyError: 'dt '

def get_weather(lat,lon):

    import json
    import requests

    r = requests.post('https://api.openweathermap.org/data/2.5/onecall?lat={}&lon={}&exclude=hourly,daily&appid=92d93ccc6ac5587d35d3ccc4479083a1'.format(lat,lon))

    data = r.json()

    dt = data["dt"]
    temp = data["temp"]
    weather = data["weather"]
    humidity = data["humidity"]
    wind_speed = data["wind_speed"]

    print(r["dt"])
    print(r["temp"])
    print(r["weather"])
    print(r["humidity"])
    print(r["wind_speed"])

get_weather(33,44)

person findAwayJay    schedule 02.11.2020    source источник


Ответы (1)


«dt» является членом «current», поэтому вам нужно получить к нему доступ через 2 ключа, вы можете увидеть это, если распечатаете все элементы в json, как показано ниже:

def get_weather(lat,lon):

    import json
    import requests

    r = requests.post('https://api.openweathermap.org/data/2.5/onecall?lat={}&lon={}&exclude=hourly,daily&appid=92d93ccc6ac5587d35d3ccc4479083a1'.format(lat,lon))

    data = r.json()

    for k,v in data.items():
        print(k,v)
    
    current = data['current']
    print(current['dt'])

get_weather(33,44)
person barker    schedule 02.11.2020