Как получить доступ к элементу даты в JSON? - PullRequest
0 голосов
/ 06 апреля 2020

У меня есть настройка API Endpoint на Lambda, где мои приложения общаются и получают необходимые данные. Проблема, с которой я сейчас сталкиваюсь, пытается получить доступ к элементу, основанному на дне, предшествующем сегодняшней дате.

Язык: Python 3.7

Служба: AWS Лямбда

Поставщик: WeatherStack

Пример: https://weatherstack.com/documentation -> Функции API -> Прогноз погоды

Для доступа к этому элементу от поставщика API; Мне нужно в основном настроить структуру JSON, которая выглядит следующим образом:

"forecast": {
    "2020-04-04": {
        "date": "2020-04-04",
        "date_epoch": 1585958400,
        "astro": {
            "sunrise": "06:42 AM",
            "sunset": "07:31 PM",
            "moonrise": "03:26 PM",
            "moonset": "04:56 AM",
            "moon_phase": "Waxing Gibbous",
            "moon_illumination": 79
        },
        "mintemp": 46,
        "maxtemp": 54,
        "avgtemp": 50,
        "totalsnow": 0,
        "sunhour": 7.7,
        "uv_index": 2
    }
}

Теперь проблема здесь в дате "2020-04-04"; так как я не могу получить к нему доступ, просто позвонив по номеру api_endpoint['forecast'][0], поскольку он выдаст ошибку. Однако я проверил с помощью объектива и обнаружил, что у него есть один элемент в «прогнозе» - это, конечно, 2020-04-04, к которому у меня возникают проблемы при попытке доступа.

Я не знаю, есть способ динамически установить вызываемый элемент на основе вчерашней даты, поскольку провайдер API будет ежедневно изменять элемент прогнозируемой даты.

Я попытался api_endpoint['forecast'][datetime.now()] и получил ошибку. Есть ли способ установить [] после ['forecast] динамически через переменную, чтобы я всегда мог вызвать его на основе api_endpoint['forecast'][yesterdaysdate]?

Решение:

from datetime import timedelta, datetime
    ts = time.gmtime()
    todaysdate = (time.strftime("%Y-%m-%d", ts))
    yesterday_date = (datetime.datetime.utcnow() - timedelta(1)).strftime('%Y-%m-%d')

    data = api_response['forecast'][yesterday_date]

1 Ответ

1 голос
/ 06 апреля 2020

Если я правильно понимаю, вы хотите вызвать данные внутри api_endpoint ['Forecast'] [вчера_даты].

Если это так, это может быть достигнуто следующим образом:

from datetime import datetime, timedelta

yesterday_date = (datetime.now() - timedelta(1)).strftime('%Y-%m-%d')

# call to api
api_endpoint['forecast'][yesterday_date]

Если вы хотите, чтобы дни go, изменили timedelta(2) и т. Д.

Сегодня Переменная может быть назначена следующим образом:

current_date = datetime.now().strftime('%Y-%m-%d')
api_endpoint['forecast'][current_date]

Если ни одно из приведенных выше решений не отвечает на ваш вопрос, оставьте комментарий.

...