schedule2019-02-14

cURLで気象APIからJSONデータを取得する|PHP

PHPの学習を進めている中でWEB APIから情報を取ってくる必要があったため、cURL関数を使いました。 cURLの使い方をまとめます。

対象とするAPIは以前にPythonで利用したOpenWeatherMapを利用します。 OpenWeatherMapの詳細については下記をご覧ください。

【Python】OpenWeatherMapで都市名から気象情報を取得する

環境

  • PHP7.2.4
  • Laravelで確認

cURL

PHP: cURL 関数 - Manual

cURLはHTTPリクエストで外部の情報を取得する関数です。 類似の関数file_get_contetns()もありますが、ヘッダやタイムアウト処理に問題があるようです。

基本的な書き方は以下の通りです。

// セッションを初期化
$conn = curl_init();
// リクエスト先urlをセット
curl_setopt($conn, CURLOPT_URL, $url);
// リクエストを実行
curl_exec($conn);
// セッションを閉じる
curl_close($conn);

これで$url`にGETを実行します。

$response = curl_exec($conn);

curl_exec()は実行結果を返してくれます。

気象情報のAPIを叩いてみる

以下は札幌市の現在の気象情報を取得するコードです。

$city = 'Sapporo'; // 札幌市
$api_key = "xxxxxxxxxxxxxxxxxxxxxxxxx";  // xxxに自分のAPI Keyを入力。

$url = "http://api.openweathermap.org/data/2.5/weather?units=metric&q=".$city."&APPID=".$api_key;

$conn = curl_init();
curl_setopt($conn, CURLOPT_URL, $url);
$res = curl_exec($conn);
curl_close($conn);

// 返り値の表示
echo $res;
// {"coord":{"lon":141.34,"lat":43.04},"weather":[{"id":803,"main":"Clouds","description":"broken clouds","icon":"04d"}],"base":"stations","main":{"temp":-3.95,"pressure":1020,"humidity":62,"temp_min":-5,"temp_max":-3},"visibility":10000,"wind":{"speed":2.6,"deg":360},"clouds":{"all":75},"dt":1550118600,"sys":{"type":1,"id":7973,"message":0.0054,"country":"JP","sunrise":1550093666,"sunset":1550131428},"id":2130404,"name":"Sapporo","cod":200}

ちゃんと返ってきました。

JSONをデコードする

返ってきたJSONをデコードして配列のように扱えるようにします。

$data = json_decode($res);

echo '観測点:'.$data->name. '<br>';
echo ' 時刻:'.date('Y/m/d H:i:s', $data->dt). '<br>';
echo ' 温度:'.$data->main->temp. '℃<br>';
echo ' 湿度:'.$data->main->humidity. '%<br>';
echo ' 気圧:'.$data->main->pressure. 'hPa<br>';

出力

観測点:Sapporo
 時刻:2019/02/14 05:00:00
 温度:-3.54℃
 湿度:58%
 気圧:1021hPa

おわりに

PHPの操作に少し慣れてきました。 JSONデータが扱いやすいところが好きですね。