2011-01-09 12 views
3

私は書籍リストを作成するウェブサイト(www.7bks.com)を持っています。現時点ではかなりシンプルです。私は既にAmazon APIを使って本の情報や画像などをサイトに取り込んでいます。Amazon BrowseNodes APIで意味のあることをする

私がしたいのは、Amazon APIを使用してカテゴリやプルダウンのデータをプルバックして、自分のサイトのリストを閲覧する何らかの方法を作り出すことです。残念ながら、タグapiメソッドは廃止されました。

最も可能性の高い候補は、Amazon APIのBrowseNodesメソッド(http://docs.amazonwebservices.com/AWSEcommerceService/2005-10-05/ApiReference/BrowseNodesResponseGroup.html)ですが、この呼び出しから返されるデータはかなりです無意味で、私は私たちの頭を一緒にしてそれを理解する方法を見つけ出すことができると期待していました。

ここでは、取得するデータの種類を示すGoogleスプレッドシートを示します。そうしない人間として、リストを見てみると

https://spreadsheets.google.com/ccc?key=0ApVjkgehRamudHd5SlNhYllPQkZDSDY1cllfQVBQM1E&hl=en&authkey=CN_MxoAO

:私はBrowseNodes APIを介して3冊の本をサンプルリスト(http://www.7bks.com/list/549002)を採取し、走りましたSci-Fiとファンタジーに関するリストである可能性が高いことを知るためには、本が何であるかを知る必要があります。それは主に、目が "カスタムストア"や "フィクション完了"などの無意味なカテゴリを破棄するのに優れているからです。

カテゴリのリストをデデュープしたり、すべての3冊の本に表示されるカテゴリを見てみましたが、まだかなりのデータが残っています。このデータをどのようにユーザーに意味のあるものに変えることができるか、あなたの考えが大好きです。

これまでのところ、データをスキャンしてハードコードされたリストに一致させることを考えました。だから、のようなもの:

カウント( "企業金融&法")場合にはカウント( "サイエンス・フィクション&ファンタジー")> 3は、リストは、SCI Fiの ある場合> 3、リストには、ビジネス

など

です

これは非常に堅牢ですが、理想的にはもう少し柔軟性のある/強力なものを作りたいと思っています。

すべての提案を歓迎します。

これは高レベルの質問だと思うので、私はAPIを呼び出すのに影響されるべきではありませんが、私はPython/Appengine/Webappを使っています。

おかげ

トム

UPDATEデスクに対するヘッドの多く叩いた後、私は私の満足度にこのこの問題を解決するために管理してきました。それは複雑ではありませんが、私は何かしたいPythonコードを一緒にハックしました。私は自分のコードや提案を改善する人を歓迎します。

基本的にコードの根底にあるロジックは、 です。1)XMLツリーでは、開始するノードの最下位ノード(books>サブジェクト)が、本の実際の内容について最もよく推測されます。例えば。これのために:http://www.amazon.co.uk/Surface-Detail-Iain-M-Banks/dp/1841498939/それは "科学小説"を返します。ビンゴ。 2)一般的には、開始する検索結果(書籍>件名)に限定することで、多くの優れた情報が捨てられます。したがって、 3)私は同様の本のリストを取得しようとし、それらをオフに引っ張って、それが失敗した場合、私はちょうど元の本に割り当てられたカテゴリを取得します。

帳: http://www.amazon.co.uk/Surface-Detail-Iain-M-Banks/dp/1841498939/

タグ: 現代フィクション 製品

#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/Godel-Escher-Bach-Eternal-anniversary/dp/0140289208/ 数学 の心理 歴史数理論理 一般AAS 人気の数学 科学、技術&医療 芸術マインドの&音楽 理念 アマゾン 数学 アーキテクチャ&ロジック 現代哲学:1900- ロジック クラシックス 物理学 形而上学 物理学の哲学 一般 技術科学の 代数的整数論 人工知能 歴史

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 クラシックス ショートストーリーs

答えて

2

これまでのところ、データをスキャンしてハードコードされたリストに一致させることをお勧めします。だから、何かのように:

カウント(「サイエンス・フィクション&ファンタジー」)> 3は、リストがある科学Fiのカウント(「企業金融&法」)> 3は、リストがあるビジネス

私はこれを考えている場合場合悪い考えではないかもしれませんか?アマゾンのトップレベルの書籍カテゴリを手に入れ、それらのカテゴリとのみマッチさせる。あまりエレガントではありませんが、うまくいくでしょう。

また、Google Book APIのdc:件名データを使用できますか? (私はそれを使用していないので、ゴミでもあります)。

0

ハム..まず、正常APiは2011-08-01となりました。あなたは最新のドキュメントを見て自分自身に好意を持てるかもしれませんか? Advertising Products API

私にとって、XMLは非常に意味があります。

答えを正しく理解したい場合は、XMLをビジュアルスタジオのXMLエディタにコピーして、ノードを開いたり閉じたりできます。

構造は、このようなものです:

<BrowseNode> 
     <BrowseNodeId>10399</BrowseNodeId> 
     <Name>Classics</Name> 
     <Ancestors> 
     <BrowseNode> 
      <BrowseNodeId>17</BrowseNodeId> 
      <Name>Literature &amp; Fiction</Name> 
      <Ancestors> 
      <BrowseNode> 
       <BrowseNodeId>1000</BrowseNodeId> 
       <Name>Subjects</Name> 
       <IsCategoryRoot>1</IsCategoryRoot> 

お知らせ "IsCategoryRoot":

<BrowseNodes> 
    <BrowseNode>...</BrowseNode> 
     <BrowseNode>...</BrowseNode> 
     <BrowseNode>...</BrowseNode> 
     <BrowseNode>...</BrowseNode> 
    </BrowseNodes> 

次に、各BrowseNodeの内側に、それはこのようなものでしょうか?これはそれほど一般的ではないので、それを使用して意味をなさないので、それ以上のポイントはありません。書籍の名前は「科目」ですが、eBookの「分類」ですので、「IsCategoryRoot」要素を確認するのがより効果的です。

私はあなたがしたいことを100%確信していませんが、私は多くのPythonを知らないのですが、私はデータベースを知っています...私は本のASIN識別子を取得しますamazon.Comでも同じasinを探すことができますが、co.uk、Fr、deなども...)、テーブルに入れて、他のどのようなデータでも役立ちます。カテゴリのテーブルを作成しますそこに名前とIDを入れて、それぞれの下位レベルのBrowseNodeに1つのリンクテーブルを入れて、 BrowseNodeIDと本のASIN、次にネストされたブラウゼノイド(実際には親や祖先)を子供のIDと自分のID。明らかに、これらのカテゴリを挿入する前に、それが既に存在していないことを確認します。

ここでの目標は、書籍ごとに1つのレコード、カテゴリごとに1つのレコード、書籍とカテゴリの間、および必要に応じてカテゴリ間のリンク数を増やすことです。

このように、カテゴリから書籍を検索することは非常に簡単であり、逆もまた同様です。

私はちょっと長かったですが、あなたの質問に対する短い答えはありません。お役に立てれば。

バーナード

関連する問題