CakePHP

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' ); // "&"が"&amp;"になっているので、変換

// 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"]

-CakePHP
-, , , ,