从 NOAA 获取每小时和六个小时的天气
to get hourly and six hours based weather from NOAA
我正在尝试从 NOAA 获取天气数据并对其进行解析以获取当前温度、湿度和其他值。我正在尝试从其网站获取 JSON 数据,该数据使用纬度和经度值来获取位置的天气数据。我在获取数据时遇到了麻烦,我发现我们必须使用 CURl 来完成它,但我不知道如何使用 CURL.
这是我用来获取数据的URL
"https://api.weather.gov/points/$latitude,$longitude/forecast".
这是我尝试的方法,基于我在此处找到的一个示例。我想知道如何传递纬度和经度,并在 url
的末尾添加预报
<?php
/**
* Created by PhpStorm.
*/
$url='https://api.weather.gov/points/'; //noaa url of choice
$params=array('39.7456','-97.0892','forecast');
$curl = curl_init();
curl_setopt($curl, CURLOPT_FAILONERROR, true);
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_HTTPHEADER, $params);
curl_setopt($curl, CURLOPT_URL, $url);
$result = curl_exec($curl);
$data = json_decode($result);
curl_close($curl);
echo "<pre>";
echo json_encode($data, JSON_PRETTY_PRINT);
echo "<pre>";
?>
只需将坐标附加到 URL。
<?php
$ch = curl_init('https://api.weather.gov/points/39.7456,-97.0892/forecast');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_SSLVERSION => 6,
CURLOPT_USERAGENT => 'Firefox',
]);
$response = curl_exec($ch);
if($response === false)
exit(curl_error($ch));
print_r(json_decode($response));
关于代码的几点说明:
- 将 URL 传递给
curl_init
与使用 curl_setopt(CURLOPT_URL
设置相同
curl_exec
returns false
失败,因此 $response === false
测试。我在这种情况下使用了 ===,否则 PHP 可能会将空字符串解释为 false
,这在这种情况下没有意义。
- 网络连接会失败,除非我将 SSL 版本设置为 6(或
CURL_SSLVERSION_TLSv1_2
)
- API 将禁止我访问数据,除非我指定了可信的用户代理,在本例中为 Firefox。
我正在尝试从 NOAA 获取天气数据并对其进行解析以获取当前温度、湿度和其他值。我正在尝试从其网站获取 JSON 数据,该数据使用纬度和经度值来获取位置的天气数据。我在获取数据时遇到了麻烦,我发现我们必须使用 CURl 来完成它,但我不知道如何使用 CURL.
这是我用来获取数据的URL
"https://api.weather.gov/points/$latitude,$longitude/forecast".
这是我尝试的方法,基于我在此处找到的一个示例。我想知道如何传递纬度和经度,并在 url
的末尾添加预报<?php
/**
* Created by PhpStorm.
*/
$url='https://api.weather.gov/points/'; //noaa url of choice
$params=array('39.7456','-97.0892','forecast');
$curl = curl_init();
curl_setopt($curl, CURLOPT_FAILONERROR, true);
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_HTTPHEADER, $params);
curl_setopt($curl, CURLOPT_URL, $url);
$result = curl_exec($curl);
$data = json_decode($result);
curl_close($curl);
echo "<pre>";
echo json_encode($data, JSON_PRETTY_PRINT);
echo "<pre>";
?>
只需将坐标附加到 URL。
<?php
$ch = curl_init('https://api.weather.gov/points/39.7456,-97.0892/forecast');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_SSLVERSION => 6,
CURLOPT_USERAGENT => 'Firefox',
]);
$response = curl_exec($ch);
if($response === false)
exit(curl_error($ch));
print_r(json_decode($response));
关于代码的几点说明:
- 将 URL 传递给
curl_init
与使用curl_setopt(CURLOPT_URL
设置相同
curl_exec
returnsfalse
失败,因此$response === false
测试。我在这种情况下使用了 ===,否则 PHP 可能会将空字符串解释为false
,这在这种情况下没有意义。- 网络连接会失败,除非我将 SSL 版本设置为 6(或
CURL_SSLVERSION_TLSv1_2
) - API 将禁止我访问数据,除非我指定了可信的用户代理,在本例中为 Firefox。