CakePHPで楽天APIを叩いてみる(1)コンポーネント編
2013/05/09
以前、楽天の商品検索APIを叩いて一覧を取得、表示するというプロゴラムをCakePHPを使って書いたのですが、そのソースが発掘されたので、解説を入れながら晒してみたいと思います。
コンポーネントの練習という側面もあったので、APIをコンポーネント化して使用するという仕様です。
では早速、コンポーネント化した商品検索APIのコードです。
/app/controllers/comonents/rakuten_api.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 |
<?php class RakutenApiComponent extends Object { /** * 【楽天】商品検索API * */ function rakuten_item_search( $conditions=array() ) { // アフィリエイトID define('AFFILIATE_ID', '********.%%%%%%%%.########.&&&&&&&&') // デベロッパーID define('DEVELOPPER_ID', '12345678901234567890124567890123'); // API名 define('ITEM_API_NAME', '楽天商品検索API'); // APIのURL define('ITEM_API_BASE_URL', 'http://api.rakuten.co.jp/rws/3.0/rest?'); // オペレーション名 define('ITEM_OPERATION', 'ItemSearch'); // APIバージョン define('ITEM_API_VERSION', '2010-09-15'); // $api_def = array( 'developerId' => AFFILIATE_ID, 'affiliateId' => DEVELOPPER_ID, 'operation' => ITEM_OPERATION, 'version' => ITEM_API_VERSION, ); // パラメータ配列をマージして作成 $api_params = array_merge($conditions, $api_def); // API選択 $api_url = ITEM_API_BASE_URL; // $api_url .= http_build_query($api_params); $api_url = html_entity_decode($api_url, ENT_QUOTES, 'UTF-8' ); // "&"が"&"になっているので、変換 // CakePHPのパーサを使用 uses('Xml'); $xml = new XML($api_url); $xml_array = Set::reverse($xml); if( $xml_array['Response']['Header']['Status'] == 'Success' ) { // 返り値の設定 $ret = array( 'ret_status' => $xml_array['Response']['Header']['Status'], 'ret_item' => $xml_array['Response']['Body']['ItemSearch'], ); return $ret; } else { $ret = array( 'ret_status' => $xml_array['Response']['Header']['Status'], 'ret_item' => NULL ); return $ret; } } } ?> |
解説といっても、流れ的にAPIを叩く準備をして、実行し、返り値であるxmlデータを取得したら、Cakephpのパーサを利用して配列化し、リターンするという感じで、こちらのコンポーネントに関しては特に難しいことはしていません。
このコンポーネントを呼び出すコントローラーの方がまだややこしいくらいです。
xmlデータのパース部分も3行で終わっていますしね。
とりあえず今回はここまでとして、次回はコントローラーを紹介してみます。
[tgAmazonItemLookup asin="4798033146" related="1"]