rugaard / dmi
丹麦气象研究所(DMI)的API
Requires
- php: ^7.2|^8.0|^8.1|^8.2|^8.3
- ext-json: *
- ext-simplexml: *
- guzzlehttp/guzzle: ^6.0|^7.0
- tightenco/collect: ^7.0|^8.0|^9.0
Requires (Dev)
- mockery/mockery: ^1.0
- phpunit/phpunit: ^8.0|^9.0|^10.0|^11.0
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?
有两种方法可以找到它
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)许可协议的约束。