PHPでjson形式データを出力する
今回は楽天ブックスDVD/Blu-ray検索APIを例に説明します。
楽天ブックスDVD/Blu-ray検索API
リクエストURLの詳しい説明は上記リンクに載っています。例えば、「ガンダム」というタイトルで検索し、結果を価格の安い順に並べたいときのリクエストURLは以下のようになります。(リクエストURLのjsonをrestに変えるとxml形式になります)
http://api.rakuten.co.jp/rws/3.0/json?
developerId[YOUR_developerID]
&operation=BooksDVDSearch
&version=2011-07-07
&title=%E3%82%AC%E3%83%B3%E3%83%80%E3%83%A0
&sort=%2BitemPrice
※楽天APIを使うにはデベロッパーIDが必要です。[YOUR_developerID]を自分のIDに変更してください。
このjson形式のデータをデコードして連想配列に格納してやり、データを操作します。
詳しいやり方は以下のコードを見てください。
私はdvdsearchというファンクションを作りました。引数に検索したい文字列をいれてやると結果が返ってきます。
例えば、$keyword="ガンダム"としたときの結果は以下のようになります。
ソースコード
<?php function dvdsearch($keyword){ $developer_id=[YOUR_developerID]; $operation="BooksDVDSearch"; //受け取った商品名をUTF-8にエンコード $title=urlencode(mb_convert_encoding($keyword, "UTF-8",auto)); $contents = file_get_contents("http://api.rakuten.co.jp/rws/3.0/json?developerId=".$developer_id."&operation=".$operation."&version=2011-07-07&title=".$title); //JSON エンコードされた文字列を受け取り、それを PHP の変数に連想配列(2番目の引数trueなら)として変換する $json_values = json_decode($contents,true); //検索結果の総商品数 $count=$json_values["Body"]["BooksDVDSearch"]["count"]; for ($i=0;$i<$count;$i++) { //商品名 $item_titel=$json_values["Body"]["BooksDVDSearch"]["Items"]["Item"][$i]["title"]; //商品説明 $item_caption=$json_values["Body"]["BooksDVDSearch"]["Items"]["Item"][$i]["itemCaption"]; //商品説明があるかチェック $item_caption=emptyCheck($item_caption); //価格 $item_price=$json_values["Body"]["BooksDVDSearch"]["Items"]["Item"][$i]["itemPrice"]; //商品URL $item_url=$json_values["Body"]["BooksDVDSearch"]["Items"]["Item"][$i]["itemUrl"]; //画像URL $image_url=$json_values["Body"]["BooksDVDSearch"]["Items"]["Item"][$i]["largeImageUrl"]; print("<dl>"); print("<dt>"); print($item_titel); print("</dt>"); print("<dd>"); //画像リンク print("<a href=\""); print($item_url); print(" \" Target=\"_blank\">"); print("<Img Src="); print(" \" "); print($image_url); print(" \" "); print(" Border= \" 0 \" >"); print("</a>"); print("</dd>"); print("<dd>"); print($item_caption); print("</dd>"); print("<dd>"); print($item_price."円"); print("</dd>"); print("</dl>"); } } //商品説明がない場合があるのでチェックし適当な文字列を入れる function emptyCheck($char){ if($char == ""){ $char = "商品説明なし"; } return $char; } ?>