Amazon Web Service
Amazon Web Service(AWS)を使うと、Amazonで検索した商品データを自分のサイトに載せる事ができます。商品データはXML形式で返されますので、これをPHPで解析してHTMLに成型します。
- このサービスを利用するには登録が必要です。
商品検索方法
http://xml-jp.amznxslt.com/onca/xml3?local=jp
このアドレスに検索用のパラメータを連結させて問い合わせします。
| オプションパラメータ | ||
|---|---|---|
| f= | XSLTを適用する場合はそのURL f=xmlとするとそのままXMLを取得できます。 |
|
| locale= | 国コード 日本はjp | |
| type= | lite 簡易版 heavy 完全版 |
|
| t= | アソシエイトID | |
| dev-t= | Subscription Id (デベロッパトークン) | |
| page= | 結果が複数ページに渡る場合のページ数 | |
| mode= | 検索する商品のジャンル | |
| 和書 | books-jp | |
| 洋書 | books-us | |
| 音楽 | music-jp | |
| 音楽クラシック | classical-jp | |
| DVD | dvd-jp | |
| ビデオ | vhs-jp | |
| エレクトロニクス | electronics-jp | |
| ソフトウェア | software-jp | |
| ゲーム | videogames-jp | |
| ASINSearch= | 商品固有のASIN(Amazon Standard Item Number)コード、もしくは書籍に付いているISBNコードを指定。 カンマ(,)で区切って複数指定可能 | |
| KeywordSearch= | 検索単語 | |
これ以外にも詳細な検索が行えるパラメータがいくつかあります。
XMLを解析する
アマゾンから返ってきたXMLは、PHP標準のDOM関数を使って自力で解析しても良いのですが、構造が複雑になると少々大変です。そこで、PEARのXML_Serializerパッケージに含まれているXML_Unserializerクラスを使います。これを使えば、XMLテキストを瞬時に連想配列にしてくれますので、後で好きな様にHTMLに加工できます。
(注) PEARがない場合、まずPEARを導入して下さい。
http://pear.php.net/package/XML_Serializer
PHP
- // XML_Unserializerクラスの読み込み
- require 'XML/Unserializer.php';
- class AWS_QueryString {
- var $_params;
- function AWS_QueryString($token, $assoc, $type = 'heavy', $format = 'xml',
- $locale = 'jp') {
- $this->_params = array();
- // 基本データだけ入れておく
- $this->add('dev-t', $token);
- $this->add('t', $assoc);
- $this->add('locale', $locale);
- $this->add('f', $format);
- $this->add('type', $type);
- }
- function add($name, $value) {
- $this->_params[$name] = $value;
- }
- function get($key) {
- if(array_key_exists($key, $this->_params)) {
- return $this->_params[$key];
- }
- return NULL;
- }
- function toString() {
- if(count($this->_params) > 0) {
- $tmp = array();
- $str = '';
- foreach($this->_params as $key => $value) {
- if($value) $tmp[] = "$key=$value";
- }
- }
- $str = implode('&', $tmp);
- $str = "http://xml-jp.amznxslt.com/onca/xml3?$str";
- return $str;
- }
- }
- class AWS_ProductData {
- var $_products;
- function AWS_ProductData($xmlsrc, $encoding = 'SJIS') {
- $lines = file($xmlsrc);
- $line = implode('', $lines);
- $line = mb_convert_encoding($line, $encoding, 'UTF-8');
- $unserializer =& new XML_Unserializer();
- // 解析に属性も含める
- $unserializer->setOption('parseAttributes', TRUE);
- $success = $unserializer->unserialize($line);
- if(is_object($success)) die( $success->getMessage() );
- $this->_products = $unserializer->getUnserializedData();
- }
- function getProducts() {
- return $this->_products;
- }
- }
- // アマゾン・リクエストID(デベロッパトークン)
- define('AWS_TOKEN', 'xxxxxxxx');
- // アマゾン・アソシエイトID
- define('AWS_ASSOC', 'xxxxx-22');
- $qs =& new AWS_QueryString(AWS_TOKEN, AWS_ASSOC);
- $qs->add('mode', 'music-jp');
- $qs->add('KeywordSearch', '宇多田ヒカル');
- $url = $qs->toString();
- $obj =& new AWS_ProductData($url);
- $products = $obj->getProducts();
- print '<pre>';
- print_r($products);
- print '</pre>';
商品リンク
http://www.amazon.co.jp/exec/obidos/ASIN/xxxxxxxxxx/xxxxx-22/ http://www.amazon.co.jp/exec/obidos/ASIN/xxxxxxxxxx/xxxxx-22/ref=nosim/
通常、商品が売れた場合の紹介料は3%ですが、下のようにref=nosimを付けたアドレスにリンクしておくと、そのページで購入された場合に限り5%になりますので、一応付けておきましょう。







