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

前回Amazon Product Advertising API のリクエストパラメータが明確になったので、色々と試してみた。やってみてわかるところもあったので検討課題も含めて記録しておく。

1.検索結果のチューニング

音楽(Music)をターゲットにして、ItemSearchで検索してみる。
Artistに「janis joplin」を指定する。
結果の制御としては、取得ページ数(3)を指定、ソート条件としてtitleの昇順、取得内容として、「ItemAttributes,Tracks」を指定してみた。

パラメータをまとめると、以下のようになる。

http://ecs.amazonaws.jp/onca/xml
?Service=AWSECommerceService
&Version=2011-08-01
&Operation=ItemSearch
&AssociateTag=kahnn-22
&SearchIndex=Music
&Artist=janis+joplin
&Sort=titlerank
&ItemPage=3
&ResponseGroup=ItemAttributes,Tracks

これにより、ItemSearchResponse から Request 等が無くなる代わりに Item情報が詳細(Track付)になった。また、ItemPageを変更することで最大10ページ分(タイトル昇順で先頭から100件)までの商品情報が取得可能になる。ちなみに11ページ目を指定すると、エラーコードとしてAWS.ParameterOutOfRangeが、メッセージとして「ItemPage として指定した値は無効です。有効な値は、1から10までのものです。」が返される。結構親切。

ざっと見たところ、結果の中で重要となりそうなのは、以下の要素と思われる。(商品カテゴリによって変わるはず)
詳細は、Response Elements 参照。

Item/Items主要要素
要素 説明
Items/TotalResults 検索結果件数 206
Items/TotalPages 検索結果ページ数(1ページ10件で計算) 21
Items/Item/ASIN Amazon Standard Identification Number」の略で、Amazonグループが取り扱う、書籍以外の商品を識別する10けたの英数字番号。 B0000025OG
Items/Item/ItemAttributes/Artist アーティスト Janis Joplin
Items/Item/ItemAttributes/Binding 商品のカテゴリを表す CD
Items/Item/ItemAttributes/Format フォーマット(ここでは輸入品かどうか) Import
Items/Item/ItemAttributes/Label レーベル SONY
Items/Item/ItemAttributes/ListPrice このタグの中に価格が入っている。CurrencyCode で通貨種別、Amountで値段を表す。表示だけならFormattedPriceで表示用の値段が取得できる。
Items/Item/ItemAttributes/Manufacturer メーカー SONY
Items/Item/ItemAttributes/Publisher 出版元 SONY
Items/Item/ItemAttributes/ReleaseDate 販売開始日 1990-10-25
Items/Item/ItemAttributes/Title 商品タイトル Farewell Song
Items/Item/ItemAttributes/EAN European Article Number, which is a number that uniquely identifies an item.(JANに同じ。基本は13ケタだが8ケタもあり) 0074643756921
Items/Item/ItemAttributes/UPC Universal Product Code, which is a 12 digit number, 6 of which represents an item's manufacturer. These numbers are translated into a bar code that is printed on an item or its packaging.(こちらは主にアメリカ、カナダ) 074643756921
Items/Item/ItemAttributes/SKU Stock Keeping Unit (SKU) is a number that uniquely identifies an item.(在庫管理用IDだが、UPCと同じになっていたり、そうでなかったり) 074643756921

2.商品とASINの割り当て

「同じ商品(CD)」が、ASIN違いで複数返ってくることがある。どの国の版か、再販か、販売元はどこか、といった違いによって同じ内容のCDであっても、別物として返されるのが注意点。より良い品質のためには、TitleやArtistを使ってまとめる必要がありそう。

ASINの割り当てルールは明確ではないけど、Amazon Standard Identification Numberを見ると、同じ商品に対するASINは複数ありうるけど、あるASINが指し示す商品は World Wide にユニークらしい。
実際に「どうぶつの森(ASIN=B0002FQD8G)」で試してみると、以下のように全て同じ商品(日本語版)を指している事がわかる。各国のローカル版は別商品(別ASIN)となっている。

ASINの特定までいけば商品比較は簡単だけど、実際の使い勝手を考えると、やはり、それ以外の条件でまとめられるようにすべきかな。

3.書籍検索(ISBNの取り扱い)

書籍を検索してみる。ソート条件として発行日が新しい順にする。

パラメータをまとめると、以下のようになる。

http://ecs.amazonaws.jp/onca/xml
?Service=AWSECommerceService
&Version=2011-08-01
&Operation=ItemSearch
&AssociateTag=kahnn-22
&SearchIndex=Books
&Author=江戸川乱歩
&Title=人間椅子
&Sort=daterank
&ItemPage=1
&ResponseGroup=ItemAttributes

検索結果を見ると、以下の特徴があった。Musicとはまた違う要素がある。ProductGroupを見て細かくハンドリングすべきだと思われる。

  • 検索結果には、紙の書籍だけでなくオーディオブック(ASIN=B003YBG1XW)やKindle版(ASIN=4394301076)も含まれる。そもそも短編集の中の一編とかはどう扱うべきか、という問題もありそう。
  • 紙の書籍には ISBN(10ケタ)が含まれる。ASINには ISBNと同じコード(4041053285)が入っており、要素自体が無くなることはなさそう。
  • ただし、紙の書籍であってもFormatが"古書"の場合は ISBN は存在せず、ASINだけがふられている。
  • 上記のパラメータ指定だと、中古品は出てこない。在庫が無い場合は、ListPrice 要素が出てこない。

4.電化製品検索(色違い)

色違いなどのバリエーションがある商品を検索してみる。
Title にコンパクトデジカメ「PENTAX Optio LS465」を指定して、ソート条件として発売日が新しい順にする。

パラメータをまとめると、以下のようになる。

http://ecs.amazonaws.jp/onca/xml
?Service=AWSECommerceService
&Version=2011-08-01
&Operation=ItemSearch
&AssociateTag=kahnn-22
&SearchIndex=Electronics
&Title=PENTAX+Optio+LS465
&Sort=-releasedate
&ItemPage=1
&ResponseGroup=ItemAttributes

検索結果を見ると、以下の特徴があった。

  • ルビーピンクのモデルしか引っかからない。本来は3色あるはず。
  • カメラ本体以外にアクセサリ等が引っかかる。
  • Title に説明(メーカ名から色まで)が入っている。色違いは ASINだけでなく Title も異なることになりそう。
  • Model, MPN, PartNumber あたり(OPTIOLS465PK)が、メーカの製品コードと思われる。(これは、色が違えば異なる。黒の場合はOPTIOLS465BKとなる)

このままだと、色違いモデルが取れないので調べてみると、ItemLookupオペレーションで 、ItemId にParentASINを指定し、ResponseGroup に VariationMatrix を指定すると、バリエーションがとれるらしい。

パラメータは以下のようになる。ItemId=B00C1A5A6G は、取得した ParentASIN の値。

http://ecs.amazonaws.jp/onca/xml
?Service=AWSECommerceService
&Version=2011-08-01
&Operation=ItemLookup
&AssociateTag=kahnn-22
&ItemId=B00C1A5A6G
&IdType=ASIN
&ResponseGroup=Large,VariationMatrix

取得した結果には、Items/Item/Variations が追加され、バリエーション数(TotalVariations)、Color等のバリエーション種別(VariationDimension)、バリエーション数分の商品(Items/Item/Variations/Item)が入っている。個々の商品のASINとVariationAttributeを見れば、色違いの製品個々をハンドリングすることができる。以下のようになる。

<ItemLookupResponse>
  <Items>
    <Item>
      <!-- ItemLookupで検索した結果の商品情報
           ParentASIN を指定した結果、ASIN とParentASIN に同じIDが入っている。
        -->
      <ASIN>B00C1A5A6G</ASIN>
      <ParentASIN>B00C1A5A6G</ParentASIN>
      .....
      <!-- ItemLookupで検索した結果のバリエーション情報 -->
      <Variations>
        <!-- バリエーションの数や属性 -->
        <TotalVariations>3</TotalVariations>
        <VariationDimensions>
          <VariationDimension>Color</VariationDimension>
        </VariationDimensions>
        <!-- バリエーション−1 (ParentASINが同じことに注意) -->
        <Item>
          <ASIN>B00855ZPEI</ASIN>
          <ParentASIN>B00C1A5A6G</ParentASIN>
          <ItemAttributes></ItemAttributes>
          <VariationAttributes>
            <VariationAttribute>
              <Name>Color</Name><Value>アメジストパープル</Value>
            </VariationAttribute>
          </VariationAttributes>
        </Item>
        <!-- バリエーション−2 (ParentASINが同じことに注意) -->
        <Item>
          <ASIN>B00855ZMFA</ASIN>
          <ParentASIN>B00C1A5A6G</ParentASIN>
          <ItemAttributes></ItemAttributes>
          <VariationAttributes>
            <VariationAttribute>
              <Name>Color</Name><Value>サファイヤブラック</Value>
            </VariationAttribute>
          </VariationAttributes>
        </Item>
        <!-- バリエーション−3 は省略 -->

      </Variations>
      .....
    </Item>
  </Items>
</ItemLookupResponse>

5.ゲームソフト(中古の取り扱いと価格)

中古品を含む情報を検索してみる。ただし、在庫があるものだけを取得する。ソート条件として安い商品からにする。ResponseGroup に OfferFull を追加しておく。

パラメータをまとめると、以下のようになる。

http://ecs.amazonaws.jp/onca/xml
?Service=AWSECommerceService
&Version=2011-08-01
&Operation=ItemSearch
&AssociateTag=kahnn-22
&SearchIndex=VideoGames
&Brand=任天堂
&Title=とびだせ+どうぶつの森
&Sort=price
&ItemPage=1
&Condition=All
&Availability=Available
&ResponseGroup=ItemAttributes,OfferFull

Titleだけ指定した場合の検索結果を見ると、攻略本や関連グッズ、同梱版も引っかかる。Brandまで指定すれば、だいぶ減る。
Offer は、新品と中古それぞれで最も安い価格の情報が取得できる。もし、Amazon出品の商品だけにしたい場合は、MerchantId=Amazon を指定する。その場合、OfferSummary は他の Merchant も含めて取得できるが、Offers では Amazon の出品物のみが返る。

6.ここまでのまとめ

ここまでで、アクセス方法や結果の取り扱いについては一通り抑えたはず。
仕様を割り切れば、各国版Amazon間の横断検索は割と簡単にできそう。手間仕事なだけ。どこまで使い勝手を上げるかで、作業量が大きく変わる。

ポイントとなるのは、API のアクセス数制限への対処と、結果の精度向上。取得したデータのキャッシュと、キーワードの翻訳、類似商品のマージ等をやっていく必要がある。
そうすると、類似検索を含むテキスト処理も必要になりそうなので、今度はそちらの方を確認してみる。