AmazonAPIを使って商品へのリンクを作成したい。
下のような、画像をクリックするとAmazonのページへ飛ぶやつだ。
AmazonAPIの基本は、リクエストとしてURLを送信し、レスポンスにXMLが返ってくるもの。
そのXMLデータから画像やリンクを作成することで、おなじみのアフィリエイトリンクができる。
その画像リンクを作成したいのだが、一気にやるのは難しい。
順序立ててやっていこう。
今回はAmazonAPIを利用して、商品情報のXMLを取得する。
ちなみにアソシエイトID、アクセスキー、シークレットキーが必要なので準備しておく。
1. Amazon Product Advertising APIを使ってみる
リクエストとして、以下のURLを送る。
ちなみに、以下のURLをアクセスキーだけ変更しても商品情報は取得できないので注意。
タイムスタンプやシグネチャを動的に生成しないといけない。
自分は以下のURLをPHPで作成した(後述)。
AWSAccessKeyId=[自分のアクセスキー]
&ItemId=4839947597
&Operation=ItemLookup
&ResponseGroup=ItemAttributes
&Service=AWSECommerceService
&Timestamp=2014-11-15T03%3A20%3A32Z
&Version=2011-08-01
&Signature=QUWf%2FGxZaFKjowDsufO%2FoKKQzN%2BDcreGALe%2FPYhezuA%3D
今回は、ItemLookupというIDから商品情報を取得するタイプのオペレーションを使用している。
オペレーションには、キーワードから商品検索するタイプなどもある。
URLの構成・作り方についてはこちらを参照。
また、各々のパラメータの意味についてはこちらを参照。
そして、レスポンスとして以下の様なXMLが返ってくる。
アクセスキーのところはピンクで塗りつぶしてある。
全体はキャプションできなかったけど、下の方にズラズラと本のデータが並んでる。
これで、Amazonから商品情報が取得できたことになる。
2. PHPでAPIを使用する際のサンプル
以下が今回作成したプログラムになる。
今回のデータを実行すると、上記のXMLツリーが表示されるように作ってある。
ただ、本来ならオブジェクトとしてパースして使うのが一般的。そこは注意。
<?php ItemLookup('4800710642'); function ItemLookup ($id) { $params = array(); // 必須 $access_key_id = '自分のアクセスキー'; $secret_access_key = '自分のシークレットキー'; $params['AssociateTag'] = '自分のアソシエイトタグ'; $baseurl = 'http://ecs.amazonaws.jp/onca/xml'; // パラメータ $params['Service'] = 'AWSECommerceService'; $params['AWSAccessKeyId'] = $access_key_id; $params['Version'] = '2011-08-01'; $params['Operation'] = 'ItemLookup'; $params['ItemId'] = $id; $params['ResponseGroup'] = 'ItemAttributes'; $params['Timestamp'] = gmdate('Y-m-d\TH:i:s\Z'); ksort($params); // 送信用URL・シグネチャ作成 $canonical_string = ''; foreach ($params as $k => $v) { $canonical_string .= '&' . urlencode_rfc3986($k) . '=' . urlencode_rfc3986($v); } $canonical_string = substr($canonical_string, 1); $parsed_url = parse_url($baseurl); $string_to_sign = "GET\n{$parsed_url['host']}\n{$parsed_url['path']}\n{$canonical_string}"; $signature = base64_encode(hash_hmac('sha256', $string_to_sign, $secret_access_key, true)); $url = $baseurl . '?' . $canonical_string . '&Signature=' . urlencode_rfc3986($signature); // xml取得 $xml = request($url); // xml出力 header('Content-type: text/xml; charset=UTF-8'); echo $xml; } function urlencode_rfc3986($str) { return str_replace('%7E', '~', rawurlencode($str)); } function request($url){ $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1); $response = curl_exec($ch); curl_close($ch); return $response; //return simplexml_load_string($response); //オブジェクトとして返す場合 }
ネットに落ちてるソースを継ぎ接ぎしたものなので、間違ってたらごめんね。
このプログラムでややこしいのは、シグネチャの部分。
シグネチャは署名のことで、送信者から送られた正しいリクエストであるかを判断する。
しかし、APIの使用例を載せるのって難しい・・・
みんな、自分のアクセスキーを晒したがらないだろうし。
タイムスタンプやシグネチャーも固定値ではないし。
参考
Amazon Web サービス入門(Product Advertising API)
コメント
[…] PHPを使ってAmazon Product Advertising APIから商品情報取得 […]