2011-03-03

【AmazonAWS】商品に付いたBrowseNodesのパース方法

AmazonAWSのItemLookupのResponseGroupにBrowseNodesを入れると、そのItemが属してるカテゴリを引っ張ってこれる。
でもこのXMLが結構複雑でなかなか手をつけられないでいたのだけど、思いのほか簡単な方法で何とかなったのでそのときのメモ。ちなみにそのときのサイトは「多賀城屋書店」というサイトで携帯サイトだった。

今回は例として「涼宮ハルヒの驚愕」を使って解説してみる。



AWSのBrowseNodesは下の例のような<BrowseNode></BrowseNode>が「複数」あることと、一番上にある階層のカテゴリがXML入れ子の一番深いところにあるのが特徴。
下の例だと「本→Featured Categories→文庫総合→ライトノベル→男性向け→角川スニーカー文庫」というならびになる。


--XML例はじめ--

<BrowseNode>
  <BrowseNodeId>2220015051</BrowseNodeId>
  <Name>角川スニーカー文庫</Name>
  <Ancestors>
    <BrowseNode>
      <BrowseNodeId>2189055051</BrowseNodeId>
      <Name>男性向け</Name>
      <Ancestors>
        <BrowseNode>
          <BrowseNodeId>2189052051</BrowseNodeId>
          <Name>ライトノベル</Name>
          <Ancestors>
            <BrowseNode>
              <BrowseNodeId>2189048051</BrowseNodeId>
              <Name>文庫総合</Name>
              <Ancestors>
                <BrowseNode>
                  <BrowseNodeId>202188011</BrowseNodeId>
                  <Name>Featured Categories</Name>
                  <Ancestors>
                    <BrowseNode>
                      <BrowseNodeId>465392</BrowseNodeId>
                      <Name>本</Name>
                    </BrowseNode>
                  </Ancestors>
                </BrowseNode>
              </Ancestors>
            </BrowseNode>
          </Ancestors>
        </BrowseNode>
      </Ancestors>
    </BrowseNode>
  </Ancestors>
</BrowseNode>

--XML例終わり--


タグの解説をすると、
・<BrowseNodeId>はカテゴリIDで数字のデータ
・<Name>はカテゴリ名
・<Ancestors>は、現在のカテゴリより「階層が上」のカテゴリ
という感じ。

実際にXMLをパースするときはおそらくDOMやらを使うんだろうけど、携帯サイトでそんなことやったら結構な負荷だし自分で実装するのもめんどくさい。
そこで、正規表現で切り出そうと考えた。

上のXMLをよく見ると、「</BrowseNode>」がはじめて出てくるのが「一番上の階層の閉じタグ」、ということに気づいた。
であれば、
「/<BrowseNode>(.*?)</BrowseNode>/」
というような正規表現パターンで「階層の上半分を取ってこれる(上の例の青い字の部分を取り出せる)。

ここからもう一度正規表現で<BrowseNodeId>と<Name>を切り出せばOK。
結構簡単なことだったんだなぁ、と思ったw


---注意----
BrowseNodeには「Children」という商品が属してるカテゴリよりも下位の階層のカテゴリも返してくれる。
今回はそこまで必要じゃなかったので割愛。

ZenBack

WebMoney ぷちカンパ