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;
    }
	
?>