получать почасовую и шестичасовую информацию о погоде от NOAA

Я пытаюсь получить данные о погоде от NOAA и проанализировать их, чтобы получить текущую температуру, влажность и другие значения. Я пытаюсь получить данные JSON со своего веб-сайта, который использует значения широты и долготы для получения данных о погоде местоположения. У меня возникают проблемы с получением данных, и я узнал, что мы должны использовать CURl, чтобы сделать это, и я понятия не имею об использовании CURL.

это URL, который я использую, чтобы получить данные

«https://api.weather.gov/points/$ Широта, долгота $ / прогноз».

Это то, что я попробовал, основываясь на одном примере, который я нашел здесь. Я хочу знать, как передать широту и долготу, и добавить прогноз в конце в 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>";
?>

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.
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]