rugaard/dmi

丹麦气象研究所(DMI)的API

1.1.11 2024-06-16 19:32 UTC

This package is auto-updated.

Last update: 2024-09-16 20:02:11 UTC


README

🇩🇰🌤️ 丹麦气象研究所(DMI)API。

遗憾的是,丹麦气象研究所(DMI)尚未提供官方API(尚未)。

此包(以某种形式)是解决此问题的方案。它从官方DMI网站收集所有天气数据(预报和存档),并将其转换为结构化数据对象。

注意:由于数据是从网站提取的,如果网站进行任何破坏性更改,该包可能会停止工作。

如果发生这种情况,请毫不犹豫地创建问题,我将尽快调查。

⚠️ 免责声明

作为丹麦政府成为数字先驱的一部分,他们决定丹麦气象研究所(DMI)必须将其所有数据公开。

数据将在未来三年内分阶段发布,从2019年第三季度开始,直到2022年第四季度。遗憾的是,关于数据如何发布的信息不多。

根据数据的发布方式,此包在未来可能会发生变化。

由于数据未正式发布,此包在非常严格的许可证下提供,仅允许个人使用。

当DMI公开发布数据时,许可证将更改为更开源友好的(MIT)版本。

📖 目录

🚀 功能

📦 安装

您可以通过以下命令使用Composer安装此包

composer require rugaard/dmi

Laravel

此包附带了一个针对Laravel框架的“开箱即用”服务提供程序。如果您使用的是Laravel的新版本(>= 5.5),则服务提供程序将自动加载。

如果您使用的是旧版本,则需要手动将服务提供程序添加到config/app.php文件中

'providers' => [
    Rugaard\DMI\Providers\Laravel\ServiceProvider::class,
]

⚙️ 使用

您需要做的第一件事是实例化DMI客户端

# Instantiate the DMI client.
$dmi = new \Rugaard\DMI\DMI;

一旦完成,您就可以请求支持的功能之一或多个

# National forecast.
$forecast = $dmi->forecast();

# Location by coordinate.
$location = $dmi->locationByCoordinate(55.67594, 12.56553);

# National warnings.
$warnings = $dmi->warnings();

DMI客户端

处理所有DMI请求的DMI客户端

new DMI(?int $defaultLocationId, ?Client $httpClient);

方法

全国预报

获取最新的全国描述性预报。

forecast();

全国扩展预报

获取扩展的(7天)全国描述性预报。

extendedForecast();

搜索位置

按名称搜索位置。

search(string $query, int $limit);

通过ID获取位置

获取预定义位置的当前天气状况和最新预报。

注意:$includeRegional是获取位置的市镇地区所必需的。

location(?int $locationId, bool $includeRegional, bool $includeWarnings);

*会使DMI进行额外请求。

通过坐标获取位置

获取指定坐标位置的当前天气状况和最新预报。

注意:$includeRegional是获取位置的市镇地区所必需的。

locationByCoordinate(float $latitude, float $longitude, bool $includeRegional, bool $includeWarnings);

*会使DMI进行额外请求。

天气预警

获取全国天气预警。

warnings();

日出日落时间

获取预定义位置未来14天的日出和日落时间。

sunTimes(?int $locationId);

紫外线指数

获取预定义位置的当前紫外线指数。

uv(?int $locationId);

花粉

获取当前全国花粉测量数据。

pollen();

海洋站

获取DMI所属的所有海洋站。

seaStations(bool $withObservations, bool $withForecast);

*会使DMI进行额外请求。

通过ID获取海洋站

获取特定的海洋站。

seaStation(int $stationId, bool $withObservations, bool $withForecast);

*会使DMI进行额外请求。

存档天气数据

获取存档的天气数据。

archive(string $measurement, string $frequency, $period, ?int $municipalityId, string $country);

🌤 图标

位置获取天气数据时,响应将包含一个$icon值。此值的目的是确定哪个图标代表当前的天气状况。

下表列出了所有可能的图标和值。每个图标都与一个建议的emoji或图像相关联。

我建议下载来自Pixel Perfect的免费图标包,因为它包含的图标种类相对较少,且每个条件都包含白天和夜晚版本——而且它是免费的。

白天 (日出后)

夜晚 (日落后)

🏛 市镇

丹麦分为98个市镇。下表列出了所有市镇及其对应的ID。

🗣 常见问题解答 (FAQ)

我如何找到预定义位置的ID?

有两种方法可以找到它

  1. 使用此包的搜索端点

  2. 访问DMI网站,并使用右上角搜索功能。如果您的位置出现;点击它,您将被带到位置页面。现在您可以复制/粘贴位置URL中的ID。

https://www.dmi.dk/lokation/show/DK/2618425/København/

Tightenco\Collect\Support\Collection 类是什么,以及它是如何工作的?

所有端点返回的数据都在Tightenco\Collect\Support\Collection类中。该类是从Laravel中流行的Collection类移植过来的。

请参考Laravel的详细文档,以了解如何使用Collection
https://laravel.net.cn/docs/master/collections

🗺 路线图

内部缓存

一些端点,如全国预报日出和日落以及花粉测量,是那些不太经常更改/更新的端点。

通过实施某种形式的内部缓存,我们可以缓存这些类型的端点。这将增加响应时间,并避免向DMI发送不必要的请求。

🚓 许可证

本软件包受Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 (CC BY-NC-ND 4.0)许可协议的约束。

Creative Commons License