使用Amazon BrowseNodes API执行有意义的操作

我有一个网站(www.7bks.com),人们创建图书清单。目前它相当简单。我已经在使用Amazon API将书籍信息,图像等提取到网站上。 我想做的是以某种方式使用Amazon API撤回类别和/或标记数据,以创建一些浏览我网站上的列表的方式。不幸的是,标签api方法已经停止。 最有可能的候选者是Amazon API的BrowseNodes方法(http://docs.amazonwebservices.com/AWSEcommerceService/2005-10-05/ApiReference/BrowseNodesResponseGroup.html)但是从这个调用返回的数据是非常荒谬的,我是希望我们能够集思广益,弄清楚如何理解它。 这是一个谷歌电子表格,向您展示我得到的数据类型。我选择了一个示例列表(http://www.7bks.com/list/549002)并通过BrowseNodes API运行了三本书: https://spreadsheets.google.com/ccc?key=0ApVjkgehRamudHd5SlNhYllPQkZDSDY1cllfQVBQM1E&hl=en&authkey=CN_MxoAO 将列表视为人类,您不需要知道这些书是什么,以便看到该列表可能与科幻和幻想有关。这主要是因为眼睛擅长丢弃无意义的类别,如“自定义商店”和“小说完成”。 我尝试重复删除类别列表,或只查看所有3本书出现的类别,但它仍然是相当废话的数据。我很想知道如何将这些数据变成对用户有意义的东西。 到目前为止,我最好的想法是扫描数据并匹配硬​​编码列表。所以类似于: 如果Count(“科幻与幻想”)> 3则列表是科幻 如果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 流行数学 科学,技术和医 艺术与艺术音乐 心灵哲学 亚马逊 数学 建筑与建筑逻辑 当代哲学: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 经 短篇小说     
已邀请:
到目前为止,我最好的想法是扫描数据并匹配硬​​编码列表。所以类似于:      如果Count(“科幻小说和幻想”)> 3那么列表是sci fi如果Count(“商业金融和法律”)> 3然后列表是商业 我想这可能不是一个坏主意?从亚马逊获取顶级图书类别并与之匹配。它不是很优雅但它会起作用。 或者,也许你可以使用来自Google Book API的dc:subject数据? (我没有使用它,所以它也可能是垃圾)。     
嗯..首先,the curent APi的日期是2011-08-01。也许你可以通过查看最新的文档帮自己一个忙?广告产品API 对我来说,XML很有意义! 也许是因为,当我想要正确理解其中一个答案时,我将XML复制到visual studio XML编辑器中,在那里我可以打开和关闭节点。 结构是这样的:
  <BrowseNodes>
    <BrowseNode>...</BrowseNode>
      <BrowseNode>...</BrowseNode>
      <BrowseNode>...</BrowseNode>
      <BrowseNode>...</BrowseNode>
    </BrowseNodes>
然后在每个BrowseNode内部,它将是这样的:
<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”?没有比这更高的点,因为这是非常通用的,使用它没有意义。名称是书籍的“主题”,但它是电子书的“类别”,因此检查“IsCategoryRoot”元素似乎更有意义。 我不是100%肯定你想做什么,我不太了解python,但我知道数据库...我会得到书ASIN标识符(这是亚马逊全球独一无二的,这意味着你可以寻找和amazon.Com上的asin一样,但是,co.uk,Fr,de等......),放入一个表格,连同你觉得有用的其他数据,为类别创建一个表格,放在那里他们的名字和id,然后是一个链接表,每个较低级别的BrowseNode有一个条目,带有 BrowseNodeID和book的ASIN,然后对于嵌套的browsenode(事实上是父母或祖先),把他们的孩子id和他们自己的id。显然,在插入这些类别之前,我会检查它是否已经存在。 这里的目标是每本书有一个记录,每个类别一个记录,以及书籍类别之间的链接,以及需要之间的链接。 这样,从类别中搜索书籍非常容易,反之亦然。 对不起,如果我有点长,但你的问题没有简短的答案。希望这可以帮助。 伯纳德     

要回复问题请先登录注册