
CakePHPで楽天APIを叩いてみる(1)コンポーネント編
2013/05/09
以前、楽天の商品検索APIを叩いて一覧を取得、表示するというプロゴラムをCakePHPを使って書いたのですが、そのソースが発掘されたので、解説を入れながら晒してみたいと思います。
コンポーネントの練習という側面もあったので、APIをコンポーネント化して使用するという仕様です。
では早速、コンポーネント化した商品検索APIのコードです。
/app/controllers/comonents/rakuten_api.php
[php]
<?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;
}
}
}
?>
[/php]
解説といっても、流れ的にAPIを叩く準備をして、実行し、返り値であるxmlデータを取得したら、Cakephpのパーサを利用して配列化し、リターンするという感じで、こちらのコンポーネントに関しては特に難しいことはしていません。
このコンポーネントを呼び出すコントローラーの方がまだややこしいくらいです。
xmlデータのパース部分も3行で終わっていますしね。
とりあえず今回はここまでとして、次回はコントローラーを紹介してみます。
[tgAmazonItemLookup asin="4798033146" related="1"]