JSONデータの扱い方/Web APIの利用
(ブログ記事の一覧は「こちら」)
JSON(JavaScript Object Notation)とは、データを定義するためのフォーマットの1つです。同じような考えのフォーマットとして他にはXMLやCSVがあります。
最近では、Web APIの実行結果でよく使われるフォーマットとしては、JSONが多く見られます。
JSONは、その名前の通りJavaScriptでデータをパース(解析)するのに適していますが、PHPでも容易にパースするための関数が用意されていますので、その方法を学びましょう。
ここで学ぶこと
参考:
JSON(PHPマニュアル)
json_encode(PHPマニュアル)
json_decode(PHPマニュアル)
例題
作成するもの
json_decode関数を用いて、基本的な形式のJSONデータの読み取り方法について確認していきましょう。
例1
以下のJSONデータをパース(解析)します。シンプルな例です。
ファイル名を「sample_json1.txt」で作成して、後ほど作成するPHPファイルと同じ場所に置いてください。
{ "user" : { "id" : "A1234567", "name" : "Taro Yamada" } }
プログラム
以下の処理で、JSONデータを取得することができます。「sample_json1.php」として作成してください。
<?php $data = file_get_contents('./sample_json1.txt'); $results = json_decode($data, true); echo($results["user"] . "<br>"); echo($results["user"]["id"] . "<br>"); echo($results["user"]["name"] . "<br>"); var_dump($results); ?>
実行、確認
「sample_json1.txt」に記述している"id"と"name"が取得できていることを確認してください。
例2
以下のJSONデータをパース(解析)します。レイヤーが1つ増えた例です。
ファイル名を「sample_json2.txt」で作成して、後ほど作成するPHPファイルと同じ場所に置いてください。
{ "user" : { "info" : { "id" : "A1234567", "name" : "Taro Yamada" } } }
プログラム
以下の処理で、JSONデータを取得することができます。「sample_json2.php」として作成してください。
<?php $data = file_get_contents('./sample_json2.txt'); $results = json_decode($data, true); echo($results["user"] . "<br>"); echo($results["user"]["info"] . "<br>"); echo($results["user"]["info"]["id"] . "<br>"); echo($results["user"]["info"]["name"] . "<br>"); var_dump($results); ?>
実行、確認
「sample_json2.txt」に記述している"id"と"name"が取得できていることを確認してください。
例3
以下のJSONデータをパース(解析)します。配列を含む例です。
ファイル名を「sample_json3.txt」で作成して、後ほど作成するPHPファイルと同じ場所に置いてください。
{ "users" : [ { "id" : "A1234567", "name" : "Taro Yamada" }, { "id" : "B1234567", "name" : "Jiro Tanaka" }, { "id" : "C1234567", "name" : "Ichiro Suzuki" } ] }
プログラム
以下の処理で、JSONデータを全て取得することができます。「sample_json3.php」として作成してください。
<?php $data = file_get_contents('./sample_json3.txt'); $results = json_decode($data, true); echo($results["users"] . "<br>"); echo($results["users"][0]["id"] . "<br>"); echo($results["users"][0]["name"] . "<br>"); echo($results["users"][1]["id"] . "<br>"); echo($results["users"][1]["name"] . "<br>"); echo($results["users"][2]["id"] . "<br>"); echo($results["users"][2]["name"] . "<br>"); var_dump($results); ?>
実行、確認
「sample_json3.txt」に記述している"id"と"name"が取得できていることを確認してください。
例4
json_encode関数についても確認してみましょう。こちらは値をJSON形式のデータに返す場合になります。
プログラム
「sample_json_encode.php」として作成してください。
<?php $data ='{ "user" : { "id" : "A1234567", "name" : "Taro Yamada" } }'; $results = json_encode($data); echo($results . "<br>"); var_dump($results); ?>
実行、確認
Warningなどが表示されていなければ成功です。
課題1
例3のJSONデータについて、パース(解析)を行い、HTMLのtableタグを使用して、以下のような表での表示を作成してください。
id | name |
---|---|
A1234567 | Taro Yamada |
B1234567 | Ichiro Suzuki |
C1234567 | Ichiro Suzuki |
課題2
Web APIの例として、天気予報API「OpenWeatherMap API」を試してみましょう。
準備
まずはOpenWeatherMap のサイトにアクセスして、右上の「Sign Up」からユーザー登録を行ってください。(無料)
登録が完了すると、APIを利用するための「App ID」が作成されます。
例えば、以下のURLにアクセスすると、現在の東京の天気情報を受け取ることができます。(最後の xxxx ... の部分は、登録時に取得した「App ID」を入力します。)
https://api.openweathermap.org/data/2.5/weather?q=Tokyo&appid=xxxxxxxxxxxxxxxxxxxxxxxx
つまり、Web APIとは、HTTPを通して目的の結果を得ることのできるインターフェースと言えます。
問題
最適な方法とまでは言えないですが、file_get_contents関数を用いてHTTP通信を実行することができます。
<?php $results = file_get_contents("https://api.openweathermap.org/data/2.5/weather?q=" . $_GET['city'] . "&appid=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"); ?>
上記の例は、別画面で地域を設定してからGETで受け取った場合になります。
まずは天気情報の結果のJSONデータ全体を取得してください。
次に、JSONデータのパースを行い、「現在の天気」「気温」「湿度」の結果だけを取り出すプログラムを作成してください。
現在の天気情報についての詳細は、こちらを参照してください。