Данные о погоде веб-сервисов NCDC с помощью REST и PHP

Я пытаюсь прочитать данные об осадках из веб-служб Национального центра климатических данных с 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";
}   

person BenW    schedule 09.02.2020    source источник
comment
Вместо этого вы должны смотреть на var_dump($curl_response). В моем случае это дает мне ошибку 500 с сервера. Может быть проблема с запросом, который вы отправили на сервер. Я предполагаю, что в моем случае это просто из-за токена, но это может быть ваша проблема. Также проверьте json_last_error_msg(). Не думайте, что синтаксический анализатор JSON преуспел. Также может быть проблема с json, который сервер отправляет обратно. Кроме того, я не вижу здесь проблем с PHP. В любом случае мы ничего не сможем исправить в вашем коде. Вам нужно будет обратиться к документации и поддержке API.   -  person Sherif    schedule 09.02.2020
comment
Или, может быть, попробуйте использовать docs.guzzlephp.org/en/stable/quickstart.html намного проще и основано на ООП, и это поможет с отладкой   -  person Benyamin Limanto    schedule 09.02.2020


Ответы (1)


Оказывается, 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>";
}
person BenW    schedule 13.02.2020