Amazon国別サイト横断検索のために - Amazon Product Advertising API (その1)

各国のAmazonサイトを横断検索してみるサービスが幾つかあって、ちょっと調べただけでも「TAKEWARI」や「World Private Trading」とかが見つかる。
ただ、実際に使ってみるとこちらの意図通りに動いてくれるとは限らなくて、自分なりに使いやすいものを作ってみようかということで、必要そうな技術について調査してみることにした。
まずは、商品情報を検索する必要があるという事で、Product Advertising API の調査から。

Amazon Product Advertising API(リンク作成用API)について

以下に引用するが、要はプログラムから利用可能な Webサービスを提供してくれているという事。それでドンドンとAmazon経由で商品を売ってほしいと。

Product Advertising API は、Amazon の商品情報や関連コンテンツをプログラムを通してアクセスできるサービスを提供することで、Web 開発者の皆様が、ご自分の Web サイトでAmazon の商品を紹介することによる紹介料の獲得を可能とします。

内容と利用方法は、Product Advertising API から順番にドキュメントを読みながら確認していけば良いわけだけど、ちょっとわかりにくい。記録しておかないと忘れそう。

1.Product Advertising API アカウント作成

まずは amazon.com でアカウントを作成する必要がある。トップページから、「アカウント作成」をクリックして手続開始。

ステップ1. Amazon.com のアカウントでログイン

Amazon.com のアカウントを作成する必要があるけど、これはそもそも持っていたので問題なし。

ステップ2. アカウント情報の入力 (登録済みアカウント)

アカウント登録済みならば住所とかは大丈夫だが、以下は追加で入力が必要。

  • ライセンス契約への了承
  • Website or Application Description

サイト説明は適当に以下のような感じで入力。

 In my Web site, I will introduce a review for electrical products.
 And, we plan to introduce by using Product Advertising API.

これで、作成が成功するはず。Manage Your Account をクリックして確認する。

2.Getting Set Up with Product Advertising API

開発者ガイド(日本語参考訳)から、左側のナビゲーションからプログラミングガイドを順番にやっていくことで、APIが利用可能になる。
ただ、読みにくいし API Version も古いので、.com の方を見た方が良いと思う。そんな難しいことは書いてない。

Step 1: Become an Associate

Amazon アソシエイト・プログラムへの参加手続きをおこなう。ここで欲しいのが Associate tag で、XXXXX-22 とかの良く見る形式。これは、既に登録しているのでパス。

Step 2: Get an AWS Access Key ID

AWS Access Key ID と Secret Access Key で構成された鍵ペアの取得をおこなう。Amazon Web サービスのインフラストラクチャを利用しているので、(所謂)AWSのコンソールから辿って取得できる。「ここ」のページで、Access Key ID と Secret Access Key を表示できるので、copy して保存すればOK。
他にも幾つかアクセス証明書があるけど、とりあえず、このキーペアがあれば試せる。

Step 3: Get the Tools You Need

公式のサポート言語としては、JavaC#PerlPHP がサポートされていて、そのためのツールキットがダウンロードできる。ただ、REST (using HTTP GET/POST) が使えるので、他の言語でも利用は可能。実際のところ、Python でも python-amazon-product-api を使う事で容易に使用できる模様。

ただ、とりあえず色々と試してみるだけならば、Product Advertising API Signed Requests Helper のページが便利。先ほど取得した AWS Access Key ID と Secret Access Key を先頭に入力して、Unsigned URL のところに実行したい(プレーンな)URLを入力してから、「Display Signed URL」をクリックすると「Signed URL」に実際に実行可能なURLが出てくるので、後はそれ使ってブラウザ等で結果取得ができる。

Step 4: Set Up Your Development Environment

これは省略。実際に組む時に見ればよいし、たいした手間は無い。

3.Product Advertising API Signed Requests Helper の利用

何はともあれ、Product Advertising API Signed Requests Helper で試せるので、色々とやってみる。

まず、典型的には、以下のような URL を利用する。

http://ecs.amazonaws.jp/onca/xml  #=> 日本Amazonを利用。jp->com で米国など。
?Service=AWSECommerceService      #=> サービス指定で固定
&Version=2011-08-01               #=> APIバージョン (2013-08-11現在)
&Operation=ItemSearch             #=> 商品検索の実行
&SearchIndex=Books                #=> 対象のカテゴリ
&Keywords=harry+potter            #=> 検索キー
&AssociateTag=XXXXX-22            #=> アソシエイトタグ(トラッキングID)

実際に Signed URL を表示すると、以下のようになる。AWSAccessKeyId, Timestamp, Signature が付加されているのがわかる。

http://ecs.amazonaws.jp/onca/xml?AWSAccessKeyId=YYYYYYYYYYYYYYYYYYYYYYYYY&AssociateTag=XXXXX-22&Keywords=harry%20potter&Operation=ItemSearch&SearchIndex=Books&Service=AWSECommerceService&Timestamp=2013-08-10T05%3A00%3A20.000Z&Version=2011-08-01&Signature=gIR2DTFh3cCb3meUgO3GL%2FvPY9JrrUX7kF3pTdom25Y%3D

このURLでアクセスすると、以下のような XML (詳細省略) が取得される。検索パラメータ、カテゴリによってXMLの構成は異なる結果となる。正確なところは WSDL を読めば良いのだろうけど、やる気は起きないので、ざっと概略のみ。

<ItemSearchResponse>
  <!-- 要求内容を返す -->
  <OperationRequest>
    <HTTPHeaders>
      <Header>
    </HTTPHeaders>
    <RequestId/>
    <Arguments>
      <Argument/> # 複数
    </Arguments>
    <RequestProcessingTime>0.1764530000000000</RequestProcessingTime>
  </OperationRequest>

  <!-- 検索結果を返す -->
  <Items>
    <!-- 要求の解釈結果 -->
    <Request>
      <IsValid>True</IsValid>
      <ItemSearchRequest>
        <Keywords>harry potter</Keywords>
        <ResponseGroup>Small</ResponseGroup>
        <SearchIndex>Books</SearchIndex>
      </ItemSearchRequest>
    </Request>

    <!-- 件数情報 -->
    <TotalResults>413</TotalResults>
    <TotalPages>42</TotalPages>
    <MoreSearchResultsUrl>後続取得のためのURL</MoreSearchResultsUrl>

    <!-- 商品アイテム情報×取得数
      (取得できたアイテム数だけ続く、ただし、ページサイズ(例えば10)まで)
       -->
    <Item>
      <ASIN>059035342X</ASIN>
      <DetailPageURL/>

      <!-- 各種操作をおこなうためのURLリスト -->
      <ItemLinks>
        <ItemLink>
          <Description>Add To Wishlist</Description> # ここで何の操作かわかる
          <URL>http://www.amazon.co.jp/gp/registry/wishlist/...
          </URL>
        </ItemLink>
        ...
        他には、Tell A Friend, All Customer Reviews, All Offers といったところ
      </ItemLinks>

      <!-- 商品の属性情報(ここはカテゴリで結構違う) -->
      <ItemAttributes>
        <Author>J. K. Rowling</Author>
        <Creator Role="イラスト">Mary GrandPre</Creator>
        <Manufacturer>Scholastic Paperbacks</Manufacturer>
        <ProductGroup>Book</ProductGroup>
        <Title>Harry Potter and the Sorcerer's Stone</Title>
      </ItemAttributes>
    </Item>

    <!-- 以下続く... -->

  </Items>
</ItemSearchResponse>

後は、マニュアル見ながらURLのパラメータを変化させて挙動を確認していく。長くなったので、ここで分割する。