はい、前回やっていたことはかなり非効率であることが分かりました。再帰するのか否かはおいておきまして、そもそも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: #最下層の場合の処理