肉とビールとパンケーキ by @sotarok

少し大人になった「肉とご飯と甘いもの」

Amazonのノードが深く広すぎる(AmazonECSのBrowseNodesついて書き出してみた)

音楽のジャンルノードを追っているのだが、ひとつの子が複数の親にぶるさがりすぎていてもうわけがわからない(笑)


AmazonECS4を使ってアイテムデータを取り出した場合のノードは、例えば(以下print_rした結果。ちなみにデータの取得にはServices_Amazonを使ってる)、

[BrowseNodes] => Array
    (
        [BrowseNode] => Array
            (
                [0] => Array
                    (
                        [BrowseNodeId] => 575456
                        [Name] => ロック
                        [Ancestors] => Array
                            (
                                [BrowseNode] => Array
                                    (
                                        [BrowseNodeId] => 569294
                                        [Name] => オルタナティヴロック
                                        [Ancestors] => Array
                                            (
                                                [BrowseNode] => Array
                                                    (
                                                        [BrowseNodeId] => 562032
                                                        [Name] => ジャンル別
                                                        [Ancestors] => Array
                                                            (
                                                                [BrowseNode] => Array
                                                                    (
                                                                        [BrowseNodeId] => 561956
                                                                        [Name] => 音楽
                                                                    )
                                                            )
                                                    )
                                            )
                                    )
                            )

                    )
                [1] => Array
                    (
                        [BrowseNodeId] => 1058384
                        [Name] => Nu Metal
                        [Ancestors] => Array
                            (
                                [BrowseNode] => Array
                                    (
                                        [BrowseNodeId] => 603394
                                        [Name] => Hard Rock & Metal
                                        [Ancestors] => Array
                                            (
                                                [BrowseNode] => Array
                                                    (
                                                        [BrowseNodeId] => 564624
                                                        [Name] => 輸入盤
                                                        [Ancestors] => Array
                                                            (
                                                                [BrowseNode] => Array
                                                                    (
                                                                        [BrowseNodeId] => 562036
                                                                        [Name] => フォーマット別
                                                                        [Ancestors] => Array
                                                                            (
                                                                                [BrowseNode] => Array
                                                                                    (
                                                                                        [BrowseNodeId] => 561956
                                                                                        [Name] => 音楽
                                                                                    )
                                                                            )
                                                                    )
                                                            )
                                                    )
                                            )
                                    )
                            )
                    )
                [2] => Array
                            ...

このようになっています。

BrowseNodesの中に配列でノードがつまっていて、各配列が、上から下までの再帰的な配列で返ってきます。
例えば、「オルタナティヴロック(ノードID=569294)」を検索したとするすると、配列の[0]にあるように、そのノードを含むツリーが上から下まで全部返ってきます。「Ancestors」は「原始ノード」のことなので、要するにソイツの親のこと。つまり、アマゾンのこの商品のジャンルノード[0]は、

音楽 > ジャンル別 > オルタナティヴロック > ロック

となっています。この商品は、例えば、配列[1]にあるように、フォーマット別で言えば

音楽 > フォーマット別 > 輸入版 > Hard Rock & Metal > Nu Metal

にも該当しています。そしてそのほかのノードの下にも・・・というように、この商品が該当しているノードのすべての配列が、BrowseNodesの中におさまっています。

で、何がこれを煩雑にしているかというと、音楽のジャンルで考えれば、日本語でジャンルわけされたものと、輸入版 > 英語でのジャンル分け が異なるということです。輸入版のCDの場合、日本語でのジャンル分けのほかに、英語でのジャンル分けも存在します。しかも、英語でのジャンル数や種類と日本語でのそれは数もツリーもまったく異なっています。

要するに、アマゾンのデータを使って音楽のジャンルわけを追うのは、不可能、ということがわかりました。(おい

ただまあ、ノードの図作ってみるのも面白そうだから時間があったらやってみるかなあ。結構複雑なネットワークになっちゃってるけど。あれ?誰かやってたっけな?そんなこと・・・





ここからは余談。

まあ、音楽のジャンル分け自体が、正直言って意味不明な部分もあり、昨今の多様化する音楽スタイル(ちょっと前ならミクスチャーとか)によって、ジャンルという分類自体が意味をなさなくなってきている気もする。音楽好きの友達と話してても、「なんとなくそんなかんじだよね」という、主観的なイメージに基づく分類がかなり多いし、明確にどのジャンルがどこからどこまでをカバーしていて、誰がどこに属す!と言い切ることなんてできないわけで。

ただまあ、音楽データを整理するときに、「明らかにヒップホップとブルースは違うよね」、くらいの大まかな区切りが欲しかったから、ちょっとアマゾンのノード追ってたんだけど、どうもなんかうまくいかないな(笑)しかも自分の詳しくないジャンルのアーティストはまったくわからないしね。*1

まあー・・・。どうしてくれようかね(笑)


#補足ですが、アマゾンのノードは別に「ジャンル分け」だけに利用されてるわけではありません。
#例えば、「○○セール!」などにもノードIDを割り振り、そのセールに該当する商品にはそのノードIDをつけています。
#まあ今回は音楽のジャンルを追っていたのでそういう話になってますが。

*1:ラップとかヒップホップとかわからん