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:
  1. // XML_Unserializerクラスの読み込み
  2. require 'XML/Unserializer.php';
  3.  
  4. class AWS_QueryString {
  5.   var $_params;
  6.  
  7.   function AWS_QueryString($token, $assoc, $type = 'heavy', $format = 'xml',
  8. $locale = 'jp') {
  9.     $this->_params = array();
  10.     // 基本データだけ入れておく
  11.     $this->add('dev-t', $token);
  12.     $this->add('t', $assoc);
  13.     $this->add('locale', $locale);
  14.     $this->add('f', $format);
  15.     $this->add('type', $type);
  16.   }
  17.   function add($name, $value) {
  18.     $this->_params[$name] = $value;
  19.   }
  20.   function get($key) {
  21.     if(array_key_exists($key, $this->_params)) {
  22.       return $this->_params[$key];
  23.     }
  24.     return NULL;
  25.   }
  26.   function toString() {
  27.     if(count($this->_params)> 0) {
  28.       $tmp = array();
  29.       $str = '';
  30.       foreach($this->_params as $key => $value) {
  31.         if($value) $tmp[] = "$key=$value";
  32.       }
  33.     }
  34.     $str = implode('&', $tmp);
  35.     $str = "http://xml-jp.amznxslt.com/onca/xml3?$str";
  36.     return $str;
  37.   }
  38. }
  39.  
  40. class AWS_ProductData {
  41.   var $_products;
  42.  
  43.   function AWS_ProductData($xmlsrc, $encoding='SJIS') {
  44.     $lines = file($xmlsrc);
  45.     $line = implode('', $lines);
  46.     $line = mb_convert_encoding($line, $encoding, 'UTF-8');
  47.    
  48.     $unserializer =& new XML_Unserializer();
  49.     // 解析に属性も含める
  50.     $unserializer->setOption('parseAttributes', TRUE);
  51.     $success = $unserializer->unserialize($line);
  52.     if(is_object($success)) die( $success->getMessage() );
  53.     $this->_products = $unserializer->getUnserializedData();
  54.   }
  55.   function getProducts() {
  56.     return $this->_products;
  57.   }
  58. }
  59.  
  60. // アマゾン・リクエストID(デベロッパトークン)
  61. define('AWS_TOKEN', 'xxxxxxxx');
  62. // アマゾン・アソシエイトID
  63. define('AWS_ASSOC', 'xxxxx-22');
  64.  
  65. $qs =& new AWS_QueryString(AWS_TOKEN, AWS_ASSOC);
  66. $qs->add('mode', 'music-jp');
  67. $qs->add('KeywordSearch', '宇多田ヒカル');
  68. $url = $qs->toString();
  69. $obj =& new AWS_ProductData($url);
  70. $products = $obj->getProducts();
  71.  
  72. print '<pre>';
  73. print_r($products);
  74. 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%になりますので、一応付けておきましょう。

参考資料

  • Search

Copyright (c) 2004-2008 MT312 All Rights Reserved.
Powered by WordPress ME