Быстрый старт
Чтобы сделать свой первый запрос в API Яндекс Погоды, необходимо получить ключ доступа.
Получить тестовый бесплатный ключ самостоятельно можно на странице API Яндекс Погоды.
Для авторизации доступа необходимо полученный ранее ключ передать в заголовке HTTP-запроса X-Yandex-Weather-Key
Далее необходимо сформировать сам запрос в соответствии со схемой.
Вы можете начать с простого запроса:
{
weatherByPoint(request: { lat: 52.37125, lon: 4.89388 }) {
now {
temperature
}
}
}
Этот запрос буквально означает: "Покажите мне текущие данные о температуре для этих координат".
Вам нужно передать этот текст в парметре body
POST-запроса. HTTP-запрос выполняется по адресу https://api.weather.yandex.ru/graphql/query
. Вы можете использовать любой HTTP-клиент.
Пример на языке Python
Далее представлен минимальный работающий пример на языке программирования Python. Чтобы его запустить, достаточно вставить свой ключ доступа к API в значение переменной access_key
и выполнить этот код с помощью интерпретатора.
import requests
# insert your real key here!
access_key = "your_key"
headers = {
"X-Yandex-Weather-Key": access_key
}
query = """{
weatherByPoint(request: { lat: 52.37125, lon: 4.89388 }) {
now {
temperature
}
}
}"""
response = requests.post('https://api.weather.yandex.ru/graphql/query', headers=headers, json={'query': query})
print(response.content)
Как сформировать запрос к GraphQL в API Яндекс Погоды
Для формирования запросов в API Яндекс Погоды используется язык запросов GraphQL.
GraphQL позволяет зафиксировать схему, описывающую данные в API понятным для пользователя образом. Данная схема однозначно определяет то, как должен быть сформирован запрос в API и каким будет формат ответа.
Основным преимуществом GraphQL-схемы (вместо, например, REST API) является возможность получить за один запрос любое подмножество данных. При разработке приложений это позволяет писать более короткий и понятный код, т.к. нет необходимости описывать логику склеивания данных из ответов на запросы по разным типам данных. Более того, большинство провайдеров погодных API тарифицируют количество запросов в API за единицу времени. Это значит, что получение всех необходимых данных за один запрос (вместо нескольких) экономически более выгодно.
Запрос – это простой текст, похожий на JSON. Каждый запрос заключается в фигурные скобки.
{
# request parameters
}
Выше был рассмотрен пример запроса "температуры сейчас в точке". Ключевым в этом запросе является вызов метода weatherByPoint
с параметром request
, для которого устанавливается значение:
{
lat: 52.37125,
lon: 4.89388
}
Тем самым можно сообщить системе "покажи погоду в точке" и указать, для какой точки необходимо получить данные. Далее укажите, какие конкретно данные нужно получить. Для этого добавьте необходимые структуры в запрос внутри метода weatherByPoint
:
weatherByPoint(request: { lat: 52.37125, lon: 4.89388 })
{
now { # weather for now
temperature # temperature value
}
}
Выполнив такой запрос, ответ будет:
{
"data": {
"weatherByPoint": {
"now": {
"temperature": 20
}
}
}
}
Как пользоваться playground и подробнее изучить GraphQL-схему
API Яндекс Погоды оснащен интерактивным интерфейсом-песочницей, с помощью которого можно пробовать составлять запросы и выполнять их. Песочница позволяет составлять запрос с использованием возможностей автодополнения и интерактивной документации, в которой подробно описана GraphQL-схема API. После составления запроса его можно сразу выполнить и убедиться, что запрос составлен корректно.
Также в песочнице есть возможность сгенерировать рабочий код для Python и Node.JS и выполнить его в командной строке с помощью утилиты curl
.