Amazonカテゴリ一覧 23,420 件（BrowseNodeデータ収集結果）

## Amazonの商品カテゴリ(BrowseNode)
Amazon のカテゴリは内部的には BrowseNode って名前で扱われているのだが、その情報を得るための [BrowseNodeLookup](https://images-na.ssl-images-amazon.com/images/G/09/associates/paapi/dg/index.html?BrowseNodeLookup.html) という API があるものだから、つい収集欲が出てしまいデータ収集してしまった。。

## 集めてしまったもの (23,420件)
- Text形式(軽) … http://files.clock-up.jp/amazon-browse-nodes/amazon-browse-nodes-20160830.txt
- Html形式(重) … http://files.clock-up.jp/amazon-browse-nodes/amazon-browse-nodes-20160830.html

### 参考：一部抜粋

```
…
2351649051:Amazonビデオ
  2351650051:カテゴリー別
    2478465051:外国映画
      2478466051:SF
      2478467051:アクション
        2478468051:アジアンアクション
        2478469051:スパイ
        2478470051:パニック
        2478471051:刑事
…
2275256051:Kindle本
  2292699051:文学・評論
    2292754051:小説・文芸
      2292764051:日本の小説・文芸
      2292763051:中国の小説・文芸
      2292756051:アジアの小説・文芸
      2292765051:英米の小説・文芸
…
    2292767051:歴史・時代小説
    2292768051:経済・社会小説
    2292724051:ミステリー・サスペンス・ハードボイルド
    2292700051:SF・ホラー・ファンタジー
    2292725051:ロマンス
    2292701051:エッセー・随筆
    2292736051:古典
…
170563011:日用品
  170566011:食器用洗剤
  170567011:食器洗い機用洗剤
  170575011:野菜洗浄剤
…
```


## BrowseNodeLookup API について
- [Product Advertising API](https://images-na.ssl-images-amazon.com/images/G/09/associates/paapi/dg/index.html?BrowseNodeLookup.html) (日本語)
- [BrowseNodeLookup - Product Advertising API](http://docs.aws.amazon.com/AWSECommerceService/latest/DG/BrowseNodeLookup.html) (英語)

指定の BrowseNode にどのような子要素がぶらさがっているかどうかが、BrowseNodeLookup の応答内 Children 要素によって分かる。これで再帰的に情報を辿れる。

```xml
…
<BrowseNode>
  <BrowseNodeId>163357</BrowseNodeId> 
    <Name>Comedy</Name> 
    <Children>
    <BrowseNode>
      <BrowseNodeId>599826</BrowseNodeId> 
      <Name>Boxed Sets</Name> 
    </BrowseNode>
    <BrowseNode>
      <BrowseNodeId>538712</BrowseNodeId>
      <Name>African American Comedy</Name> 
    </BrowseNode>
    …
```


## 最上位 BrowseNode 情報について
ある BrowseNode の子要素が取得できるとして、まず起点となる BrowseNode はどこから求めれば良いのか、というと、BrowseNode の ID 固有値の一覧がところどころに載っていたりする。

- https://images-na.ssl-images-amazon.com/images/G/09/associates/paapi/dg/index.html?BrowseNodeIDs.html
- [SearchIndexとBrowseNode一覧 - 前人未踏の領域へ](http://d.hatena.ne.jp/takeR/20140804/1407126274)

ただ、こういった固定値をもとにデータ収集をするのはどうにもしっくりこないので、今回は Amazon のカテゴリ一覧ページを起点とした。

- https://www.amazon.co.jp/gp/site-directory … 一般ユーザ向け商品カテゴリ一覧ページ

## URLに含まれる BrowseNode の ID について
Amazon のページを閲覧しているときの URL を見ると、クエリ文字列内に ```node=XXXXXX``` という部分が見つかる。この ```XXXXXX``` の部分が BrowseNode の ID。

逆にいうと BrowseNode の ID が分かっていれば、```https://www.amazon.co.jp/b/?node=<ID>``` という URL へのアクセスでそのカテゴリのページが開ける。

## BrowseNode の階層や総数について
今回は site-directory 以下の BrowseNode 群を起点として情報を収集したが、実はもっと上層の BrowseNode から辿ると今回の 23,420 件以上の BrowseNode が取得できてしまう。が、さすがに3万を超えたあたりから気が遠くなり始めたのでやめた。

site-directory より上層の BrowseNode が何故分かるのかというと、BrowseNodeLookup の応答内に Ancestors という親を示す要素が含まれているから。

```xml
…
<Ancestors>
  <BrowseNode>
    <BrowseNodeId>549726</BrowseNodeId> 
    <Name>Performing Arts</Name> 
…
```

## 重複したツリー構造
ひとつの BrowseNode が複数の子要素を持つのは良いとして、実はひとつの BrowseNode が複数の親要素を持つこともよくある。

```
…
2275256051:Kindle本
  …
  2293143051:コミック
    …
    3418785051:コミック雑誌 ← 重複
  …
  2275257051:雑誌
    …
    3418785051:コミック雑誌 ← 重複
```

たとえば上の例では、「3418785051:コミック雑誌」という BrowseNode が「2293143051:コミック」「2275257051:雑誌」両方の子要素としてぶらさがっている。


## おわり
こういうデータ収集はあまり真似するようなものではないと思うのでお勧めはしない。詳細は今のところは伏せるができる限り Amazon サーバへの負担が少ない形で情報を集めるよう努力はした。人が集めたデータを眺めるくらいがちょうどよい楽しみ方だと思う。

https://www.amazon.co.jp/gp/site-directory
ちなみにこの site-directory ページの title タグは

> Amazon.co.jp - 地球上で最大級の品ぞろえ

である。
たしかにその通りなんだろうなぁ(´･_･`)