【问题标题】:Programmatic access to Amazon Wishlist?以编程方式访问亚马逊愿望清单?
【发布时间】:2011-06-01 21:04:34
【问题描述】:

亚马逊最近更改了他们的 API,现在似乎无法使用这些 API 以编程方式访问我在亚马逊上的 WishList。除了屏幕抓取之外,任何人都知道有什么方法吗?也许是一些第三方服务(我不介意只使用公共数据)?

【问题讨论】:

    标签: api amazon-web-services google-apps-script amazon


    【解决方案1】:

    对于屏幕抓取,紧凑的布局样式可能会有所帮助:http://bililite.com/blog/2010/10/31/hacking-my-way-to-an-amazon-wishlist-widget/

    更新

    我自己在 google 电子表格中做了一些修改,并设法让 2 个基本实现工作。

    使用 Google Apps 脚本:

    在单元格 A1 中输入您的愿望清单 ID。将以下内容复制并粘贴到 google apps 脚本中(工具 > 脚本 > 脚本编辑器),然后运行 ​​getWishlist 函数:

    function getWishlist(){
      var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheets()[0];
      var wishlistId = sheet.getRange('a1').getValue(); 
      var response = UrlFetchApp.fetch("http://www.amazon.co.uk/registry/wishlist/" + wishlistId + "?layout=compact").getContentText();
      var asinRegex = /name="item.([\d]+)\.(?:[A-Z0-9]+).([A-Z0-9]+).*/g
      while (match = asinRegex.exec(response)) {
        var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheets()[0];
        var rowIndex = Number(match[1])+2;
        var asin = match[2];
        setRow(sheet, rowIndex, asin);
        var offers = UrlFetchApp.fetch("http://www.amazon.co.uk/gp/offer-listing/" + asin).getContentText();    
        setRow(sheet, rowIndex, asin, 
               getFirstMatch(/class="producttitle">(.+)</g, offers),
               getFirstMatch(/class="price">(.+)</g, offers));
      }  
      Browser.msgBox("Finished");
    }
    
    function getFirstMatch(regex, text) {
      var match = regex.exec(text);
      return (match == null) ? "Unknown" : match[1];
    }
    
    function setRow(sheet, index, a, b, c) {
      sheet.getRange('a' + index).setValue(a);
      sheet.getRange('b' + index).setValue(b);
      sheet.getRange('c' + index).setValue(c);
    }
    

    ​ ​​​ 注意,我遇到了一些与标题/价格匹配的正则表达式的问题。不知道为什么,但显示了基本思想。

    使用 Google 电子表格函数

    在单元格 A1 中输入您的愿望清单 ID。

    在 A2 中键入以下函数。它将使用您的愿望清单中每个项目的 id 字符串填充单元格及其下方的所有内容:

    =importXML("http://www.amazon.co.uk/registry/wishlist/"&A1&"?layout=compact", "//*[starts-with(@name, 'item.')]/@name")
    

    在 B2 中键入以下函数,它将从 id 字符串中提取 asin:

    =right(A2, 10)
    

    在 B3 中键入以下函数,它将获取 B2 中 asin 的报价列表并显示标题:

    =importXML("http://www.amazon.co.uk/gp/offer-listing/"&B2, "//h1")
    

    在 B4 中键入以下函数,它将获取 B2 中 asin 的报价列表并显示所有价格:

    =concatenate(importXML("http://www.amazon.co.uk/gp/offer-listing/"&B2, "//span[@class='price']"))
    

    【讨论】:

    • 刚刚尝试过,将 amazon.com 替换为 amazon.co.uk。获取 xpath 查询错误。有什么想法吗?
    • @LarryG.Wapnitsky 此代码基于 3 年前的亚马逊,因此 HTML 可能已更改。您能否分享有关您所看到的错误的更多详细信息,或者分享您的 Google 电子表格,我会看一看。
    【解决方案2】:

    一个叫 Justin Scarpetti 的人创建了一个非常简洁的“api”,它可以抓取您的愿望清单并以 json 格式返回数据。

    这是一个用于检索亚马逊愿望清单数据的小 API。没有 官方 API,因为亚马逊几年前关闭了它。唯一的办法 围绕那个...屏幕抓取。

    Amazon Wish Lister 使用 phpQuery(服务器端 CSS3 选择器驱动的 DOM 基于 jQuery 的 API)来抓取亚马逊的愿望清单页面并导出到 JSON、XML 或 PHP 数组对象。

    如果您想自己主持显示您的愿望清单,那就太完美了 网站。

    来源:Amazon Wish Lister

    【讨论】:

    • 嘿安迪,我可以在移动端使用这个吗?如果是,请告诉我路。
    • 嗨@Kumar 抱歉,但我无法提供任何关于将其与移动后端集成的建议。但是如果输出为 JSON,您应该可以在移动应用开发中使用它而不会遇到太多麻烦。
    猜你喜欢
    • 1970-01-01
    • 2013-04-27
    • 1970-01-01
    • 2011-10-16
    • 2018-12-02
    • 2013-03-23
    • 1970-01-01
    • 1970-01-01
    • 2010-12-19
    相关资源
    最近更新 更多