Skip to content

atlorium-api/weather-api-client

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Погода по координатам — API температуры, ветра и осадков по широте и долготе

Русский · English

examples license API

Готовые примеры работы с погодным API на шести языках: Python, TypeScript (Node.js), Go, Java, C#, PHP. Получить температуру по широте и долготе, скорость ветра, порывы, влажность, облачность, видимость и осадки — одним HTTP-запросом. Ответ в формате погода JSON API, пригоден как источник данных о погоде для приложения.

Каждый пример запускается сразу — без регистрации, без ключа, без карты. В коде зашит публичный демо-ключ.

git clone https://github.com/atlorium-api/weather-api-client
cd weather-api-client/python && pip install -r requirements.txt && python main.py
Погода по координатам 55.7558, 37.6173
  Точка:        Махачкала (RU), coord из ответа: 55.7558, 37.6173
  Замер:        13.07.2026 18:02 (местное время, UTC+3)
  Небо:         небольшой дождь (Rain)
  Температура:  -14.0 °C, ощущается как -16.2 °C
  Ветер:        3.3 м/с, порывы до 16.6 м/с, направление 62° (СВ)
  Влажность:    80 %
  Облачность:   77 %
  Видимость:    5475 м
  Давление:     995 гПа

ВЕРДИКТ: РАБОТАТЬ С ОСТОРОЖНОСТЬЮ
  [~] Заморозки: -14.0 °C (main.temp <= 0)
  [~] Порывы ветра до 16.6 м/с (wind.gust >= 15)

Это настоящий вывод примера на демо-ключе, не подогнанный. Да, он внутренне противоречив — см. раздел «Что не так с данными в песочнице». Так и задумано: интеграцию можно написать и протестировать до оплаты, а с боевым ключом тот же код вернёт реальные данные.


Зачем это нужно

Погода нужна не сама по себе, а чтобы что-то решить: выпускать ли машину на маршрут, поднимать ли людей на высоту, начинать ли наружные работы, не сорвётся ли монтаж, надо ли подсыпать реагент. Плюс обычные продуктовые задачи — виджет погоды, подсказка «возьмите зонт», геймификация, аналитика продаж от погоды.

Поэтому примеры не просто печатают JSON, а применяют его: в каждом есть функция assessConditions(), которая по ответу выносит вердикт из трёх состояний — МОЖНО РАБОТАТЬ / РАБОТАТЬ С ОСТОРОЖНОСТЬЮ / РАБОТЫ ОТМЕНИТЬ — и перечисляет причины, каждую со ссылкой на поле, из которого она выведена.

Что она проверяет:

Проверка Условие по полям ответа Вес
Гололёд main.temp в диапазоне −5…+3 °C И осадки (weather[].main = Rain/Drizzle либо rainnull) стоп-фактор
Сильный ветер wind.speed >= 10 м/с стоп-фактор
Плохая видимость visibility < 1000 м — туман стоп-фактор
Заморозки main.temp <= 0 °C предупреждение
Порывы ветра wind.gust >= 15 м/с предупреждение
Экстремальный холод main.feels_like <= -20 °C предупреждение

Самое ценное здесь — гололёд, и его не видно ни из одного поля по отдельности. Ни «−1 °C», ни «идёт дождь» сами по себе ничего не означают. А вот их комбинация — вода на покрытии при температуре около нуля — это ровно та ситуация, которая губит логистику: машины в кюветах, сорванные сроки, битый груз. Одно if по двум полям ответа, и вы знаете об этом за час до выезда.

Пороги вынесены в константы: у логистики, кровельщиков и монтажников высотных конструкций они разные. Правьте под свою задачу.

Быстрый старт за 60 секунд

Проверить API вообще без клонирования:

curl -H "Authorization: Bearer ak_sandbox_demo_mockdata_v1" \
     "https://atlorium.com/api/Weather?latitude=55.7558&longitude=37.6173"
Язык Запуск Требуется
Python pip install -r requirements.txt && python main.py Python 3.10+
TypeScript / Node.js npm install && npm start Node.js 20+
Go go run . Go 1.22+
Java java Main.java JDK 11+ (без зависимостей)
C# dotnet run .NET 8+
PHP php main.php PHP 8.1+

Передать свои координаты двумя аргументами (по умолчанию — Москва):

python main.py 59.9343 30.3351      # Санкт-Петербург
go run . 51.5074 -0.1278            # Лондон
npm start -- -33.8688 151.2093      # Сидней

Аутентификация

Ключ передаётся в заголовке Authorization:

Authorization: Bearer ВАШ_КЛЮЧ
Ключ Что делает
ak_sandbox_demo_mockdata_v1 Демо-ключ. Публичный, один на всех. Возвращает моки, денег не списывает, регистрации не требует. Ответы привязаны к округлённым координатам: одна и та же точка всегда даёт одну и ту же «погоду» — на этом можно писать стабильные тесты.
Боевой ключ Реальные метеоданные. Получить в личном кабинете: atlorium.com

Переход на боевой ключ не требует правок в коде — все примеры читают переменную окружения:

export ATLORIUM_API_KEY="ak_ваш_боевой_ключ"

Каждый ответ песочницы помечен заголовком X-Atlorium-Sandbox: true — перепутать мок с реальными данными невозможно.

Что не так с данными в песочнице

Честно, потому что вы это всё равно увидите в первую же минуту.

Демо-ключ отдаёт сгенерированные значения. Они правдоподобны по отдельности и стабильны для одной точки, но не согласованы между собой и с координатами. В выводе выше это видно дважды:

  • name не связан с координатами. На координаты Москвы (55.7558, 37.6173) в поле name пришло «Махачкала». При этом coord честно отражает то, что вы прислали, — эхом.
  • Погода физически абсурдна. «Небольшой дождь» (Rain) при temp = −13.99 °C в природе не встречается.

Практический вывод: проверять на песочнице логику своего приложения можно и нужно — поля, типы, null-ы, ветки кода, вердикты. Делать по ней выводы о погоде — нельзя. С боевым ключом приходят реальные измерения метеостанций, и противоречия исчезают.

Отдельно: поля rain и snow в песочнице всегда null. В боевом режиме они приходят объектом {"1h": 0.5}, когда осадки есть. Код в примерах это учитывает — обращение к rain["1h"] без проверки на null даёт TypeError / NullReferenceException / панику, и именно поэтому проверка вынесена в отдельную функцию hasPrecipitation().

Эндпоинты

Базовый адрес: https://atlorium.com

Метод Путь Назначение
GET /api/Weather Текущая погода в точке по географическим координатам

Это единственный эндпоинт сервиса. Прогноза на несколько дней вперёд он не отдаёт — только текущее состояние на момент запроса.

GET /api/Weather

Параметр Где Тип Описание
latitude query number Широта в градусах, от −90.0 до +90.0. Положительные — Северное полушарие (55.7558 — Москва), отрицательные — Южное (−33.8688 — Сидней)
longitude query number Долгота в градусах, от −180.0 до +180.0. Положительные — Восточное полушарие (37.6173 — Москва), отрицательные — Западное (−74.0060 — Нью-Йорк)

Регистр в пути значения не имеет: /api/weather и /api/Weather — одно и то же.

Поля ответа

Имена полей — в snake_case, единицы измерения метрические.

Поле Тип Что содержит
coord object { lat, lon } — координаты. Эхо запроса, а не «найденная ближайшая станция»
weather array Состояния неба. Обычно один элемент: { id, main, description, icon }
weather[].main string Машинный код: Clear, Clouds, Rain, Drizzle, Snow, Fog. По нему и надо ветвить логику, а не по description
weather[].description string Человекочитаемое описание на языке ответа: «небольшой дождь»
weather[].icon string Код иконки погодного состояния: 10d, 01n
base string Источник данных, обычно stations
main.temp number Температура в градусах Цельсия (не в кельвинах)
main.feels_like number Ощущаемая температура, °C — с учётом ветра и влажности
main.temp_min / main.temp_max number Минимум и максимум по территории населённого пункта, °C
main.pressure number Атмосферное давление, гПа (гектопаскали)
main.humidity number Влажность, %
main.sea_level / main.grnd_level number|null Давление на уровне моря и на уровне земли, гПа
visibility number|null Видимость в метрах, максимум 10000
wind.speed number Скорость ветра в м/с (не в км/ч)
wind.deg number Направление ветра, градусы (0 — север, 90 — восток)
wind.gust number|null Порывы ветра, м/с. Может отсутствовать — при штиле порывов нет
clouds.all number Облачность, %
rain / snow object|null Осадки, мм: { "1h": …, "3h": … }. null, если осадков нет
dt number Время замера — Unix timestamp в UTC
timezone number Смещение точки от UTC в СЕКУНДАХ: 10800 = UTC+3
sys.country string Код страны, ISO 3166
sys.sunrise / sys.sunset number Восход и закат, Unix timestamp в UTC
id number Внутренний идентификатор населённого пункта
name string Название населённого пункта
cod number Код ответа внутри тела, 200 при успехе

Три места, где чаще всего спотыкаются:

  1. dt — это UTC, а timezone — смещение в СЕКУНДАХ, а не в часах. Готового локального времени сервер не присылает: dt + timezone надо сложить руками. Во всех шести примерах это делает функция localTime().
  2. wind.gust, visibility, rain, snow — nullable. Обращение к ним без проверки роняет приложение.
  3. Температура — в °C, ветер — в м/с. Для км/ч умножьте на 3.6.

Обработка ошибок

Код Причина Что делать
400 Координаты вне диапазона Широта −90…90, долгота −180…180
401 Ключ отсутствует, просрочен или недействителен Проверьте заголовок Authorization
402 Недостаточно кредитов на балансе Пополнить на atlorium.com
429 Превышен rate-limit Повторить с задержкой — см. ниже
500 Внутренняя ошибка при получении погодных данных Повторить позже
503 Внешний погодный сервис недоступен Повторить позже. За сбой на нашей стороне деньги не списываются

Во всех шести примерах коды разложены в человекочитаемые причины — смотрите класс AtloriumError.

Про 429 и Retry-After. Сервер честно сообщает, сколько ждать. Но если исчерпан часовой лимит, он может попросить подождать десятки минут — и клиент, слепо доверяющий заголовку, зависнет на всё это время (а в CI просто съест бюджет джоба). Поэтому в примерах есть потолок ожидания MAX_RETRY_DELAY = 120 секунд: дольше не ждём, честно сообщаем «квота исчерпана» и выходим. Копируйте этот подход к себе.

Цены и лимиты

Оплата pay-as-you-go, без подписки: платите только за выполненные запросы.

Лимиты у погоды умеренные, но не безграничные: их хватает, чтобы отладить интеграцию и держать виджет, но не чтобы превратить сервис в личный погодный прокси. Демо-ключ лимитируется по IP ровно теми же цифрами, что получит платящий клиент, — песочница честно показывает будущие условия. Актуальные лимиты и цены — на atlorium.com/pricing. Не запускайте примеры в цикле.

Актуальные цены и лимиты: atlorium.com/pricing

Частые вопросы

Откуда данные? Реальные измерения метеостанций на момент запроса, без потерь и переупаковки.

Можно ли получить прогноз на неделю? Нет. Эндпоинт один и возвращает текущую погоду в точке. Если вам нужен именно многодневный прогноз — этот сервис не подойдёт, и лучше узнать об этом сейчас, чем после интеграции.

В каких единицах температура? В градусах Цельсия — конвертация уже сделана на нашей стороне. temp можно печатать как есть.

Как перевести dt в местное время точки? Сложить dt (Unix, UTC) со смещением timezone (в секундах). Смещение — именно точки, а не вашего сервера. Готовая функция localTime() есть во всех шести примерах.

Что делать, если wind.gust отсутствует? Считать, что порывов нет. Поле не приходит при слабом ветре — это не ошибка. То же с rain и snow.

Можно ли искать погоду по названию города? Нет, только по координатам. Название города вы получаете в ответе (name), а не подаёте на вход. Чтобы превратить адрес в координаты, возьмите Стандартизацию адреса или Адреса ГАР/ФИАС, а IP-адрес в координаты — Профиль IP.

Обязательна ли регистрация, чтобы попробовать? Нет. Демо-ключ публичный и работает без аккаунта — но возвращает моки, а не реальные данные.

Другие API Atlorium

Погода редко бывает единственной задачей. Из того же аккаунта и тем же ключом доступны:

Полный каталог — atlorium.com

Ссылки

Лицензия

MIT — берите код и используйте как хотите, в том числе в коммерческих проектах.

About

API погодных данных: погода по координатам для любой точки мира, нормализованный ответ. Примеры на Python, TypeScript, Go, Java, C#, PHP. Weather API client.

Topics

Resources

License

Stars

0 stars

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors