Документация Engee
Notebook

Получение данных с публичного API OpenWeatherMap

В этом примере рассматривается процесс получения данных с публичного API общедоступного источника открытых данных - погодного сервиса OpenWeatherMap.

Введение

OpenWeatherMap использует платный API (есть функционально ограниченный бесплатный доступ), чтобы предоставить данные текущей погоды, прогноза и карт с погодными явлениями, такими как облака, ветер, давление и осадки. Все погодные данные могут быть получены в форматах JSON, XML или HTML. В этом примере мы воспользуемся бесплатным доступом к сервису для демонстрации возможностей и инструментов такой работы.

Начало работы

Работа с API на языке Julia может быть выполнена с использованием пакета HTTP.jl, который предоставляет удобные функции для отправки HTTP-запросов и обработки ответов.

Для начала установим библиотеки HTTP.jl и JSON3.jl для работы с JSON-данными:

In [ ]:
import Pkg; Pkg.add(["HTTP", "JSON3"]);

Отправка GET-запроса

Теперь напишем код для отправки GET-запроса к API OpenWeatherMap:

Для работы программы Вам необходимо указать в переменной api_key свой токен API для доступа к сервису.

In [ ]:
using HTTP, JSON3

# Ваш API ключ от OpenWeatherMap
api_key = "введите Ваш API токен";

# Интересующий город
city = "Moscow,ru";

# URL для запроса
url = "http://api.openweathermap.org/data/2.5/weather?q=$city&APPID=$api_key&units=metric";

# Отправка GET-запроса
response = HTTP.get(url);

Здесь мы используем HTTP.get(url) для отправки GET-запроса к API.

Извлечение полученных данных

Теперь проверяем статус ответа: если статус равен 200, значит запрос успешен. Далее мы используем функцию JSON3.read(response.body) для парсинга JSON-ответа. Таким образом мы извлекаем и выводим информацию о погоде из полученных данных.

In [ ]:
# Проверка статуса ответа
if response.status == 200
    # Парсинг JSON-ответа
    data = JSON3.read(response.body)

    # Извлечение и вывод информации о погоде
    println("Сегодня:           $(Date(now()))")
    println("Погода в городе    $(data.name):")
    println("Температура:       $(data.main.temp)°C")
    println("Влажность:         $(data.main.humidity)%")
    println("Описание:          $(data.weather[1].description)")
else
    println("Ошибка при запросе: статус $(response.status)")
end
Сегодня:           2025-02-05
Погода в городе    Moscow:
Температура:       -1.32°C
Влажность:         67%
Описание:          overcast clouds

Далее выведем в печать весь полученный JSON3 объект:

In [ ]:
println("$data")
{
        "coord": {
                    "lon": 37.6156,
                    "lat": 55.7522
                 },
      "weather": [
                   {
                               "id": 804,
                             "main": "Clouds",
                      "description": "overcast clouds",
                             "icon": "04d"
                   }
                 ],
         "base": "stations",
         "main": {
                          "temp": -1.32,
                    "feels_like": -6.76,
                      "temp_min": -2.76,
                      "temp_max": -1.3,
                      "pressure": 1032,
                      "humidity": 67,
                     "sea_level": 1032,
                    "grnd_level": 1011
                 },
   "visibility": 10000,
         "wind": {
                    "speed": 5.32,
                      "deg": 54,
                     "gust": 10.33
                 },
       "clouds": {
                    "all": 92
                 },
           "dt": 1738739674,
          "sys": {
                       "type": 2,
                         "id": 2095214,
                    "country": "RU",
                    "sunrise": 1738732545,
                     "sunset": 1738764680
                 },
     "timezone": 10800,
           "id": 524901,
         "name": "Moscow",
          "cod": 200
}

Эти данные доступны для работы в рамках бесплатного доступа к сервису OpenWeatherMap.

Заключение

Это базовый пример работы с API для получения данных из открытых источников в Engee. В зависимости от конкретного API, с которым Вы работаете, Вам может потребоваться адаптировать код для обработки различных типов запросов и ответов.