首页 文章

从NOAA获得每小时和六小时的天气

提问于
浏览
0

我试图从NOAA获取天气数据并解析它以获得当前的温度,湿度和其他值 . 我试图从其网站获取JSON数据,该网站使用纬度和经度值来获取位置的天气数据 . 我很难获得数据,我发现我们必须使用CURl来完成它,我不知道使用CURL .

这是我用来获取数据的URL

https://api.weather.gov/points/ $ latitude,$经度/预测” .

这是我尝试的,基于我在这里找到的一个例子 . 我想知道如何传递纬度和经度,并在网址末尾添加预测

<?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>";
?>

1 回答

  • 0

    只需将坐标附加到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 失败时返回 false ,因此 $response === false 测试 . 在这种情况下我使用===否则PHP可能会将空字符串解释为 false ,这在此上下文中没有意义 .

    • 除非我将SSL版本设置为6(或 CURL_SSLVERSION_TLSv1_2 ),否则网络连接将失败

    • 除非我指定了可信的用户代理,否则API将禁止我访问数据,在本例中为Firefox .

相关问题