CakePHP amazonAPI使うよー
・コンポーネントつくるよー
App::import('Core', array('Xml', 'HttpSocket')); class AmazonComponent extends Object { var $params = array( 'Service' => 'AWSECommerceService', 'AWSAccessKeyId' => 'HOGEEEEEEEEEE', //アクセスキー 'AssociateTag' => 'aaa-22' //アソシエイトのタグ ); var $sKey = 'HIMITSUGIRLTOPSEACRET'; //シークレットキー(最近導入されたアレ) var $baseUrl = 'http://ecs.amazonaws.jp/onca/xml'; //comでもjpでも好きにしたらいいさ /** * signature作成 */ function _signature($params){ $params['Timestamp'] = gmdate('Y-m-d\TH:i:s\Z'); ksort($params); $str = ''; foreach($params as $key => $val){ $str .= '&'.$this->_rfc3986($key).'='.$this->_rfc3986($val); } $str = substr($str,1); $url = parse_url($this->baseUrl); $signatureStr = "GET\n{$url['host']}\n{$url['path']}\n{$str}"; $signature = base64_encode(hash_hmac('sha256', $signatureStr, $this->sKey, true)); $params['Signature'] = $this->_rfc3986($signature); return $str.'&Signature='.$this->_rfc3986($signature); //return $params; } /** * RFC3986形式 */ function _rfc3986($str) { return str_replace('%7E', '~', rawurlencode($str)); } /** * データ取得 */ function searchIndex($pr = array()) { $options = array( 'Operation' => 'ItemSearch', ); $params = array_merge($this->params, $options); $params = array_merge($params, $pr); $params = $this->_signature($params); $socket = new HttpSocket(); $header = aa('header', aa('User-Agent', 'amazon')); $response = $socket->get($this->baseUrl, $params, $header); $result = Set::reverse(new Xml($response)); if (isset($result["ItemSearchResponse"]['Items']['Request']['Errors'])) { foreach ($result["ItemSearchResponse"]['Items']['Request']['Errors'] as $error) { $this->__lastErrors['itemSearch'][] = $error; } return false; } return $result; }
コントローラーから呼ぶよー
$param = array( 'SearchIndex' => 'Music', 'ResponseGroup' => 'Medium', 'Sort' => '-releasedate', 'Artist' => urldecode($artistName) ); $musicData = $this->Amazon->searchIndex($param);
こことここともやし日記さんを参考にしたよー(というかほとんどコードまるっとうつさせてもらったよ!)
なんまら参考になったですよー!ありがとうございました!