私は、書籍リストを作成する Web サイト (www.7bks.com) を持っています。現時点ではかなり単純です。私はすでに Amazon API を使用して、本の情報や画像などをサイトにプルしています。
私がやりたいことは、どうにかして Amazon API を使用してカテゴリやタグ データを取得し、サイトのリストをブラウジングする何らかの方法を作成することです。残念ながら、tag api メソッドは廃止されました。
最も可能性の高い候補は Amazon API の BrowseNodes メソッド ( http://docs.amazonwebservices.com/AWSEcommerceService/2005-10-05/ApiReference/BrowseNodesResponseGroup.html ) ですが、この呼び出しから返されるデータはかなり無意味であり、私は頭をまとめて、それを理解する方法を見つけられることを願っています。
これは、私が取得したデータの種類を示す Google スプレッドシートです。サンプル リスト ( http://www.7bks.com/list/549002 ) を選び、BrowseNodes API を介して 3 冊の本を実行しました。
人間としてリストを見ると、リストがSFとファンタジーに関するものである可能性が高いことを確認するために、本が何であるかを知る必要はありません. それは主に、「カスタム ストア」や「フィクション コンプリート」などの無意味なカテゴリを破棄するのが得意な目だからです。
カテゴリのリストの重複を排除するか、3 本すべてに表示されるカテゴリだけを調べてみましたが、それでもかなりくだらないデータです。このデータをユーザーにとって意味のあるものに変える方法について、ご意見をお待ちしております。
これまでの私の最善の考えは、データをスキャンして、ハードコードされたリストに一致させることです。次のようなものです:
Count("SF & ファンタジー") > 3 の場合、リストは SF です。 Count("ビジネス ファイナンス & 法律") > 3 の場合、リストはビジネスです。
等
これは非常に厳格ですが、理想的には、もう少し柔軟で強力なものを構築したいと考えています。
すべての提案を歓迎します。
これは高レベルの質問だと思うので、API の呼び出し方法に影響されるべきではありませんが、参考までに Python/Appengine/Webapp を使用しています。
ありがとう
トム
更新机に頭をぶつけた後、この問題を満足のいくように修正することができました。それほど複雑ではありませんが、私が望むことを実行するいくつかの Python コードを一緒にハックしました。私のコードを改善したり、提案を提供したりする人を歓迎します。
基本的に、コードの根底にあるロジックは次のとおりです。1) XML ツリーでは、開始するノード (本 > 主題) の最下部のノードが、本が実際に何について書かれているかを最もよく推測します。例: http://www.amazon.co.uk/Surface-Detail-Iain-M-Banks/dp/1841498939/「サイエンス フィクション」を返します。ビンゴ。2) 通常、最初の結果 (書籍 > 主題) だけに限定することで、多くの有益な情報が失われます。したがって、3) 似たような本のリストを取得して、それらからカテゴリを取得しようとします。それが失敗した場合は、元の本に割り当てられたカテゴリを取得します。
おそらく、次のようにコードを提供することで最もよく説明されます。
#takes as input the xml output of the amazon api browsenodes call
def getcategories(xml):
#fetches the names of all the nodes, stores them in a list
categories = []
for book in xml.getElementsByTagName('BrowseNode'):
category = get_text(book,'Name')
categories.append(category)
#turn the one list into a series of individual lists
#each individual list should be a particular tree from browsenode
#each list will end 'Books'
#the first item in the list should be the bottom of the tree
taglists = []
while 'Books' in categories:
find = categories.index('Books') + 1
list = categories[:find]
taglists.append(list)
for word in list:
categories.remove(word)
#now, we only return the first item from a list which contains 'Subjects'
final = []
for tagset in taglists:
while 'Subjects' in tagset:
final.append(tagset[0])
tagset.pop(tagset.index('Subjects'))
return final
class Browsenodes(webapp.RequestHandler):
def get(self):
#get the asin of the target book
asin = self.request.get('term')
if book_title:
#fetch the amazon key
api = API(AWS_KEY, SECRET_KEY, 'uk', processor=minidom_response_parser)
try:
#try getting a list of similar books - note the response group set to browsenodes
result = api.similarity_lookup(asin, ResponseGroup='BrowseNodes')
except:
#there aren't always a list of similar books, so as a failsafe just get the book I wanted.
result = api.item_lookup(asin, ResponseGroup='BrowseNodes')
final = getcategories(result)
#turn it into a set to de-dupe multiple listings of the same category
self.response.out.write(set(final))
出力のフレーバーを与えるには:
本: http://www.amazon.co.uk/Surface-Detail-Iain-M-Banks/dp/1841498939/
タグ: 現代フィクション 製品 スペース オペラ サイエンス フィクション
http://www.amazon.co.uk/Godel-Escher-Bach-Eternal-anniversary/dp/0140289208/ 心理学 数学史 数学的論理 AAS ポピュラー数学 科学、技術、医療 芸術と音楽 心の哲学 Amazon 数学アーキテクチャ& Logic Contemporary Philosophy: 1900- Logic Classics Physics Metaphysics Philosophy of Physics 一般的なテクノロジー 代数的数論 人工知能 科学史
http://www.amazon.co.uk/Flatland-Romance-Dimensions-Dover-Thrift/dp/048627263X/ 現代フィクション 数学哲学 一般 AAS ポピュラー数学哲学 科学的、技術的、医学的精神哲学 サイエンス フィクション 数学 現代哲学: 1900- 代数的数論 製品 古典 形而上学 & 幻想 神話 & おとぎ話 トポロジー 一般的なトピック 一般的な理論的方法 形而上学 人工知能 科学の歴史
http://www.amazon.co.uk/Victoria-Condor-Books-Knut-Hamsun/dp/0285647598/ 現代小説 文芸小説 心理学 一般 AAS 古典 短編小説