PHPの学習を進めている中でWEB APIから情報を取ってくる必要があったため、cURL関数を使いました。 cURLの使い方をまとめます。
対象とするAPIは以前にPythonで利用したOpenWeatherMapを利用します。 OpenWeatherMapの詳細については下記をご覧ください。
【Python】OpenWeatherMapで都市名から気象情報を取得する
環境
- PHP7.2.4
- Laravelで確認
cURL
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データが扱いやすいところが好きですね。
PHP Warning Illegal string offset 'foo'
PHPschedule2020-02-03
PHP Notice:Undefined indexの対処
PHPschedule2020-01-17
PHP compact関数で宣言していない変数の扱い
PHPschedule2020-01-15