amwhalen/noaa

NOAA 预报和当前天气服务的客户端库

0.1.5 2015-12-28 03:10 UTC

This package is not auto-updated.

Last update: 2024-09-28 18:28:13 UTC


README

Build Status

概述

此库提供了一种PHP客户端,用于访问NOAA的预报和当前天气服务。

当前天气数据由 NOAA的当前天气条件XML馈送 提供。预报数据由 NOAA的全国数字预报数据库(NDFD)REST Web服务 提供。国家海洋和大气管理局(NOAA)是美国联邦机构,因此他们提供的数据仅适用于美国地区。

要求

  • PHP 5.3.0+
  • PHP cURL
  • PHP SimpleXML

当前天气条件

要找到您的当前天气条件,您首先需要知道当地NOAA气象观测站ID。您可以在以下位置搜索您当地的站ID:http://www.weather.gov/xml/current_obs/。如果您想对站数据做些什么,还有一个站点的XML列表:http://www.weather.gov/xml/current_obs/index.xml。以下是一些获取当前天气条件的示例代码

require_once 'noaa/Forecaster.php';
$config = new \noaa\weather\Configuration();
$myWritableCacheDirectory = dirname(__FILE__) . '/cache';
$config->setCache(new \noaa\weather\cache\FileCache($myWritableCacheDirectory));
$forecaster = new \noaa\Forecaster($config);
$stationId = 'KBAF';
try {
    // returns a CurrentWeather object or throws an exception on API error
    $current = $forecaster->getCurrentWeather($stationId);
} catch (\Exception $e) {
    echo "Error: " . $e->getMessage() . "\n";
}
echo "Temperature: " . $current->getTemperatureF() . " °F\n";

您可以在example/current.php文件中找到更多示例代码。

预报

要检索预报数据,需要提供纬度和经度。有许多API可以将地址和邮编转换为纬度和经度,但这些转换超出了此库的范围。API提供的数据是6am-6pm(所提供位置的当地时间)的24小时汇总数据。提供的降水概率是日间和夜间6小时汇总,分别为6am-6pm和6pm-6am。以下是一些获取从当前时间开始的7天预报的示例代码

require_once 'noaa/Forecaster.php';
$config = new \noaa\weather\Configuration();
$myWritableCacheDirectory = dirname(__FILE__) . '/cache';
$config->setCache(new \noaa\weather\cache\FileCache($myWritableCacheDirectory));
$forecaster = new \noaa\Forecaster($config);
$lat = '42.16';
$lng = '-72.72';
$startTime = date('Y-m-d', time());
$numDays = 7;
try {
    // returns a Forecast object or throws an exception on API error
    $forecast = $forecaster->getForecastByLatLng($lat, $lng, $startTime, $numDays);
} catch (\Exception $e) {
    echo "There was an error fetching the forecast: " . $e->getMessage() . "\n";
}
// get ForecastDay object for the first day of the forecast
$day = $forecast->getDay(0);
echo "High Temperature: " . $day->getHighTemperature() . "\n";

您可以在example/forecast.php文件中找到更多示例代码。

夜间预报

对于晚上(当地时间下午6点后)制作的预报,预报结果中的第一天将是“明天”。doesStartAtNight()方法将告诉您预报是否是“夜间”预报

$forecast->doesStartAtNight();

还将有一个关于“今天”的信息仍然有价值,那就是下午6点至凌晨6点的降水概率。可以通过以下方式检索该概率

if ($forecast->doesStartAtNight()) {
    $tonightsPrecipitation = $forecast->getPrecipitationProbabilityTonight();
}

缓存

NOAA建议API消费者每小时只请求一次新数据。此库提供了一个简单的FileCache类,它只需要一个可写的目录来存储缓存数据。它将根据文件修改时间自动处理缓存失效。您设置的目录必须存在并可写。

如果您想使用除提供的FileCache之外的缓存,创建自己的缓存也很容易。只需创建一个实现\ noaa\ weather\ cache\Cache接口的类。使用setCache()配置方法设置您自己的自定义缓存类。有关示例,请参阅noaa/weather/cache/ArrayCache.php文件。

以下是如何不使用缓存机制实例化Forecaster对象(不推荐!)

require_once 'noaa/Forecaster.php';
$forecaster = new \noaa\Forecaster();

许可

MIT许可

版权(c)2023 Andrew M. Whalen

本软件及其相关文档文件(以下简称“软件”)的副本的任何人均可免费获得,不受限制地使用、复制、修改、合并、发布、分发、再许可或出售软件副本的权利,并允许软件的接收者执行上述操作,但需遵守以下条件

上述版权声明和本许可声明应包含在软件的所有副本或主要部分中。

软件按“原样”提供,不提供任何形式的保证,无论是明示的还是暗示的,包括但不限于对适销性、特定用途的适用性和非侵权的保证。在任何情况下,作者或版权所有者均不对任何索赔、损害或其他责任负责,无论基于合同、侵权或其他法律行为,无论是由软件本身引起的、与软件的使用或其他相关事宜引起的。