Engee 文档
Notebook

从OpenWeatherMap公共API获取数据

此示例描述从公共获取数据的过程
一个公开可用的开放数据源的API,OpenWeatherMap天气服务.

导言

[OpenWeatherMap](https://openweathermap.org /)使用付费API(功能有限的免费访问)提供当前天气数据,预测和地图,其中包含云,风,压力和降水等天气事件。
所有天气数据都可以以[JSON,XML或HTML]格式获得[2]。
在此示例中,我们将使用免费访问服务来演示此类工作的功能和工具。

[2]:https://engee.com/helpcenter/stable/ru/feature/input-output-functions.html

开始行动

使用Julia API可以使用
的HTTP包。jl,为发送提供了方便的功能
HTTP请求和响应处理。

首先,我们将安装HTTP库。jl和JSON3。使用JSON数据的jl:

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

发送GET请求

现在让我们编写向OpenWeatherMap API发送GET请求的代码。:

要使程序工作,您需要在变量中指定 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-запроса
try
    response = HTTP.get(url);
catch err;
    println("Введите Ваш API токен!")
end

在这里我们使用 HTTP.get(url) 向API发送GET请求。

提取接收到的数据

现在我们检查响应状态:如果状态为200,则请求成功。
接下来,我们使用函数 JSON3.read(response.body) 用于解析JSON响应。
这就是我们从接收到的数据中提取和输出天气信息的方式。

In [ ]:
# Проверка ввода токена
if isdefined(Main, :response)
    # Проверка статуса ответа
    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
else
    println("Введите Ваш API токен!")
end
Сегодня:           2025-02-05
Погода в городе    Moscow:
Температура:       -1.32°C
Влажность:         67%
Описание:          overcast clouds

接下来,我们将打印所有收到的 JSON3 对象:

In [ ]:
# Проверка ввода токена
if isdefined(Main, :data)
    println("$data")
else
    println("Введите Ваш API токен!")
end
{
        "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从开源获取数据的基本示例
在英吉利。 根据您正在使用的特定API,
您可能需要调整代码以处理不同的
请求和响应的类型。