NCD C Данные о погоде веб-служб с REST и PHP - PullRequest
0 голосов
/ 09 февраля 2020

Я пытаюсь прочитать данные об осадках из онлайн-сервисов National Climati c Data Center с PHP, но не могу понять, как их читать. В документации сказано, что это веб-сервис RESTful. Я получил токен, и я перепробовал все, что мог придумать, и искал в Интернете любые предложения, которые я мог найти, но я не могу заставить его что-либо вернуть. Мой первый шаг - использовать веб-сервис для запроса списка наборов данных, поэтому я знаю, какой набор данных использовать при запросе фактических данных. Вот код, который я использовал, чтобы попытаться запросить наборы данных. Кто-нибудь может направить меня в правильном направлении, чтобы прочитать результаты.

$url = "https://www.ncdc.noaa.gov/cdo-web/api/v2/datasets?stationid=COOP:010957";
$curl_post_data = array("token" => $token);
$curl = curl_init($url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_POSTFIELDS, $curl_post_data);
curl_setopt($curl, CURLOPT_HTTPHEADER,array('Content-type: application/json','Content-length: '.strlen($curl_post_data)));
$curl_response = curl_exec($curl);
curl_close($curl);
$json_a = json_decode($curl_response,TRUE);
var_dump($json_a); // just to see the structure.
echo "\n";
foreach($json_a as $row){
   echo $row->status;
   echo "\n";
}   

1 Ответ

1 голос
/ 13 февраля 2020

Оказывается, что API V2, описанный вышеупомянутой ссылкой, устарел, и они вернулись к API V1 . Жаль, что они не удосужились удалить документацию V2 из Интернета. V1 не требует токена, поэтому поиск данных очень прост (после определения правильных идентификаторов станций и наборов данных). Вот мой новый код, который работает:

$string = file_get_contents("https://www.ncei.noaa.gov/access/services/data/v1?dataset=local-climatological-data&stations=72509014739&units=standard&startDate=2020-02-01&endDate=2020-02-12&format=json");
$json_a = json_decode($string, TRUE);
foreach($json_a as $item){
    echo $item['DATE'] . " " . $item['HourlyDryBulbTemperature'] . "F, " . $item['HourlyPrecipitation'] . "in</br>";
}
...