Amazon APIののBrowseNodeは変態過ぎる・・・
AmazonのAPI使ったサイトも作りなおそうと思ったが、BrowseNodeの仕様が変態過ぎた。
前回のYahoo!中心のAPIではカテゴリツリーの上位も含めて商品が所属する全部にカテゴリと商品コードの組み合わせを登録してソートできるようにしたが、
商品数が少ないなら別だが、末端以外のカテゴリでもソートできるようにするにはそうするしかないと思うんでAmazonもそうしようと思ってたが、
AmazonのAPIが返す商品のBrowseNodeは、
↓複数のブラウズノードが設定されている商品だと並列になっている
<BrowseNode></BrowseNode>
<BrowseNode></BrowseNode>
<BrowseNode></BrowseNode>
↓並列に並んだ<BrowseNode>内に子要素に<BrowseNode>が出現する。
<BrowseNode>
<Ancestors>
<BrowseNode></BrowseNode>
<Ancestors>
<BrowseNode></BrowseNode>
</Ancestors>
</Ancestors>
</BrowseNode>
<BrowseNode>
<Ancestors>
<BrowseNode></BrowseNode>
</Ancestors>
</BrowseNode>
しかも親から子ではなく子がルートまでの先祖を内包していて、入れ子構造が逆だからやりにくい・・・
↓さらに、<Ancestors>ではなく<Children>で一段下の子要素を内包する場合もある。
<BrowseNode>
<Children>
<BrowseNode></BrowseNode>
<BrowseNode></BrowseNode>
<BrowseNode></BrowseNode>
</Children>
</BrowseNode>
<BrowseNode>
<Ancestors><BrowseNode></BrowseNode></Ancestors>
</BrowseNode>
XMLのパースはいつもモジュール使わず正規表現でやるが、
<Ancestors>か<Children>どっちかだけならできそうではあるが、同じ要素が並列にも入れ子にも登場してくると正規表現じゃ無理あるわ。
今日はちょっといじったけど、この件はちょい中断する。
商品の取得とBrowseNodeLookupでのノード解析をわけてやるかなあ。
そうすれば<Children>ごっそり消しちゃえば残りのノードに全部商品登録しちゃえばいいし。
あと著者等の人物データ使ってサイト作ること考えてたが、
昨日の人物情報DBの仕様だと、一人の人物に複数の商品が設定されるから人物取り出すにはgroup byしなきゃだから同じテーブルに直接人物情報は書けない。
group byで別テーブルに移すとなると常時更新ってのは難しいな・・・