
概要:
今回は、Amazon のProduct Advertising APIを使って、簡単な検索結果を表示したいと思います。
Product Advertising APIは、アクセスする際に、URLコードの中に、ユーザのAccess Key ID(アクセスキー) と
Secret Access Key(秘密アクセスキー) を埋め込み、その情報をもとに認証し、検索などの承認作業を行います。
その承認がOKで、パラメータに誤りがなければ、要求された操作(たとえば、検索など)の結果をXMLの形式で出力します。
出力結果のXML情報を解析することで、自分が表示したい情報を取得し、HTML情報へ変換し、出力できます。
例えば、Amazonで提供されているアフィリエイトのウィジェットのようなものを自分用に作成することもできるわけです。
では、早速、PHPのサンプルコードを作成して試してみましょう。
参照ページ : http://docs.amazonwebservices.com/AWSECommerceService/latest/DG/
Amazon Product Advertising APIを利用するためには、まず、以下のIDを取得する必要があります。
また、アフィリエイトも同時に行う場合は、アフィリエイトIDも必要です。
- http://aws.amazon.com/へアクセスします。

- 右の"Sign Up Now"をクリックしてサインインします。
もし、サインインするIDを持っていない場合は、"I am a new user. "をクリックして、新規ユーザIDを作成します。

- サインインしたら、最初のメイン画面に戻ります。

右上から [Your Account] - [Access Identifiers] をクリックします。
以下のような画面へ遷移します。

- 画面下方に、以下のような表が表示されいます。

既に作成されていれば、Access Key ID は表示されています。Secret Access Key は"Show"をクリックすることで表示されます。

まだ作成していない場合は、そのしたの"Create Key"をクリックして作成します。
アフィリエイトキーは、日本のページから作成できます。
https://affiliate.amazon.co.jp/へアクセスして、"無料アカウント作成"をクリックして作成します。

作成したアカウントが、アフィリエイトキーとなります。
Amazon のProduct Advertising APIは、URLに操作パラメータを指定し、アクセスすることでXMLの情報を返信してくれます。
そのため、WEBブラウザで、直接URLアドレスを指定すれば確かめることができます。
ただ、アクセスキーと秘密アクセスキーを使って、Amazonでは、認証を行い、スパム対策をしています。
そのため、URLのアドレス情報に、先に取得したアクセスキーと秘密アクセスキーを埋め込んで、Amazonへアクセスする必要があります。
そのURLコードへアクセスキーと秘密アクセスキーを埋め込むソフトを、Amazonの以下のウェブサイトで提供しています。
http://associates-amazon.s3.amazonaws.com/signed-requests/helper/index.html
では、このページを使って、URLコードを作ってみましょう。
- アクセスキーと秘密アクセスキーを画面上部へ入力します。

- Unsigned URLには、元のURLコードを指定します。ここでは、サンプルとして以下のをそのまま入力します。
http://ecs.amazonaws.com/onca/xml?Service=AWSECommerceService &Version=2009-03-31 &Operation=ItemSearch &SearchIndex=Books &Keywords=harry+potter
- 入力を終えたら、下方へ移動し、"Dispaly Signed URL"をクリックすると、上の欄の"Signed URL"へURLコードが表示されます。


- "Signed URL"のURLコードをコピーし、WEBブラウザのアドレスへ貼り付けます。
すると、以下のような返信情報(XML情報が)が表示されるとおもいます。

このような画面が表示されればOKです。
PHPが動作可能か確認します。
以下は、Windowsのコマンドプロンプトで確認した例です。
UNIXでも同様のコマンドを入力して確認できます。
1 2 3 4 | C:\> php -v PHP 5.1.2 (cli) (built: Jan 11 2006 16:40:00) Copyright (c) 1997-2006 The PHP Group Zend Engine v2.1.0, Copyright (c) 1998-2006 Zend Technologies |
今回の記事では、バージョンがPHP5以上でなければなりません。
これで準備が整いました。
次に、PHPのサンプルコードを元に、試してみましょう。
以下は、簡単なソフトウェアの検索を行うためのPHPのサンプルソースです。
[sample.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 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 | //------------------------------------------------------------------- // Define your id. //------------------------------------------------------------------- // user id information define("ACCESS_KEY_ID" , 'Your Access id. ' ); define("SECRET_ACCESS_KEY" , 'Your Secret Access id. '); define("ASSOCIATE_TAG" , 'Your Associate id.' ); // access url(Jpanan) define("ACCESS_URL" , 'http://ecs.amazonaws.jp/onca/xml' ); // define("ACCESS_URL", 'https://aws.amazonaws.jp/onca/xml'); //------------------------------------------------------------------- //------------------------------------------------------------------- // this function is encode with RFC3986 format. //------------------------------------------------------------------- function urlencode_RFC3986($str) { return str_replace('%7E', '~', rawurlencode($str)); } //------------------------------------------------------------------- // Main routine. //------------------------------------------------------------------- $base_param = 'AWSAccessKeyId='.ACCESS_KEY_ID; $params = array(); $params['Service'] = 'AWSECommerceService'; $params['Version'] = '2009-10-01'; $params['Operation'] = 'ItemSearch'; $params['SearchIndex'] = 'Software'; $params['Sort'] = 'salesrank'; $params['Keywords'] = 'Windows'; // search key ( UTF-8 ) $params['AssociateTag'] = ASSOCIATE_TAG; $params['ResponseGroup'] = 'ItemAttributes,Offers, Images ,Reviews '; $params['SignatureMethod'] = 'HmacSHA256'; // signature format name. $params['SignatureVersion'] = 2; // signature version. // time zone (ISO8601 format) $params['Timestamp'] = gmdate('Y-m-d\TH:i:s\Z'); // sort $param by asc. ksort($params); // create canonical string. $canonical_string = $base_param; foreach ($params as $k => $v) { $canonical_string .= '&'.urlencode_RFC3986($k).'='.urlencode_RFC3986($v); } // create signature strings.( HMAC-SHA256 & BASE64 ) $parsed_url = parse_url(ACCESS_URL); $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) ); // create URL strings. $url = ACCESS_URL.'?'.$canonical_string.'&Signature='.urlencode_RFC3986($signature); // request to amazon !! $response = file_get_contents($url); // response to strings. $parsed_xml = null; if(isset($response)){ $parsed_xml = simplexml_load_string($response); } $err_count=0; // print out of response. if( $response && isset($parsed_xml) && !$parsed_xml-->faultstring && !$parsed_xml-->Items-->Request-->Errors ){ // total results num. $total_results = $parsed_xml-->Items-->TotalResults; // total results pages. $total_pages = $parsed_xml-->Items-->TotalPages; print("All Result Count:".$total_results." | Pages :".$total_pages ); print("<table>"); foreach($parsed_xml-->Items-->Item as $current){ $nerr=0; print("<tr><td><font size='-1'>"); print('<a href="'.$current-->DetailPageURL.'"><img src="'.$current-->SmallImage-->URL.'" border=0></a><br >'); print('<a href="'.$current-->DetailPageURL.'">'.$current-->ItemAttributes-->Title.'</a><br />'); print($current-->ItemAttributes-->Manufacturer.'<br />'); if(isset($current-->Offers) && isset($current-->Offers-->Offer)){ print( $current-->Offers-->Offer-->OfferListing-->Price-->FormattedPrice.'<br />'); } else { print($current-->ItemAttributes-->ListPrice-->FormattedPrice.'<br />'); } if(isset($current-->CustomerReviews-->TotalReviews) && $current-->CustomerReviews-->TotalReviews>0){ print('Rate:<a href="'.$current-->ItemLinks-->ItemLink[2]-->URL.'">'); print($current-->CustomerReviews-->AverageRating.'('. $current-->CustomerReviews-->TotalReviews .')'.'<br />'); print('</a><hr />'); } print("</td></tr>"); } print("</table>"); } |
もし、そのまま利用する場合は、以下の3項目を設定すれば、Windowsというキーワードで検索したソフトウェアを人気順で取得します。
6行目:あなたのアクセスキーを設定します。
7行目:あなたの秘密アクセスキーを設定します。
8行目:あなたのアソシエイトキーを設定します。
設定したphpファイルをあなたのWEBサーバ上でアクセスできるところへアップロードします。
WEBブラウザから、アップロードしたphpへアクセスしてみてください。
例えば、WEBサーバのカレントから、amazonディレクトリの配下へアップロードした場合は、以下のようなURLでアクセスします。
http://www.example.com/amazon/sample.php
以下のような画面が表示されるはずです。

変更が必要な個所は、以下の行だと思います。
34行目:'Operation'は、操作を指定します。ここでは、"ItemSearch"=商品検索 を指定しています。
36行目:'SearchIndex'は、検索する商品カテゴリを指定します。ここでは、'Software'=ソフトウェア を指定しています。
37行目:'Sort'は、検索結果の順番を指定します。ここでは、'salesrank'=人気順 を指定しています。
操作、検索結果の順番は、他にもいろいろと指定することができます。詳細は、以下のページを参照してください。
http://docs.amazonwebservices.com/AWSECommerceService/latest/DG/JPSortValuesArticle.html
39行目:'Keywords'は、検索キーを指定します。ここでは、'Windows'という文字列で検索文字列しています。
文字列は、複数指定することができます。'+'記号や' '空白を用いて続けて指定します。
42行目:'ResponseGroup'は、検索結果情報を指定します。ここでは、'ItemAttributes'=商品属性情報,'Offers'=商品価格情報, 'Images'=商品画像情報 ,'Reviews '=商品レビュー情報を指定しています。
検索結果情報は、他にもいろいろと指定することができます。詳細は、以下のページを参照してください。
http://docs.amazonwebservices.com/AWSECommerceService/latest/DG/CHAP_ResponseGroupsList.html
76行目:出力情報のXML情報をパーサにかけて文字列へ変換しています。
少しのPHPの知識があれば、自分用のAmazonウィジェットを作成できます。
このようにAmazon のProduct Advertising APIへアクセスするPHPのライブラリは、既にあります。
たとえば、tarzanやServices_Amazonなども参照されると良いと思います。
今回は、わかりやすいように、ベタで作成してみました。
自分で、いろいろと触ってみると、理解も深まると思います。一度、試されてみてはいかがでしょうか。
(以下に表示される本の紹介は、このAmazon のProduct Advertising APIを使って検索された結果を表示しています。)

今回の記事では、PHPについて、少し知識が必要です。詳しく知りたい方は、以下の本なども良いと思います。
本から学ぶことは多いと思います。ネットだけでは判らない様々な事に気づかされます。
![]() PHPによるWebアプリケーションスーパーサンプル 第2版 |
![]() PHPでつくるWEBアプリケーション制作講座 (web creators books) |
![]() PHPによるWebアプリケーションスーパーサンプル活用編 第2版 |
![]() ゼロからできる PHP+MySQL Webシステム構築 |
![]() ゼロからわかる PHP超入門 |








