edo1z blog

プログラミングなどに関するブログです

Product Advertising APIのBrowseNodeLookupで本(和書)のBrowseNodeを全部取得する(2)


はい、前回やっていたことはかなり非効率であることが分かりました。再帰するのか否かはおいておきまして、そもそもBrowseNodeLookupの結果のルールに先程気づきまして、非常に複雑でめんどうなことをしていたと気づいた次第です。

さて、何がルールかというと、RootのLookupをした場合は、ancestorが一つだけあります。中間のLookupをした場合は、ancestorが複数あります。最下層のLookupをした場合は、ancestorがございません。このancestorの数を確認するだけで、最下層か否かを確認することが可能であります。どうでしょうか?衝撃的事実であったのではないかと思います。ぜひ、Browsenodeの取得に苦慮されている方がいましたら、この事実を教えてあげるといいと思います。

それでは失礼します。

コードは大体下記のようになるのではないでしょうか?

browsenodes = result.browsenodelookupresponse.browsenodes
ancestorsList = browsenodes.findAll('ancestors')
ancestorIdList = []

for ancestors in ancestorsList:
    if ancestors.browsenode:
        ancestorIdList.append(int(ancestors.browsenode.browsenodeid.contents[0]))
        ancestors.extract()

browseNodeList = browsenodes.findAll('browsenode')

#最下層じゃない
if len(ancestorIdList) > 0:
    #最下層じゃない場合の処理

#最下層
else:
    #最下層の場合の処理