【发布时间】:2011-06-01 21:04:34
【问题描述】:
亚马逊最近更改了他们的 API,现在似乎无法使用这些 API 以编程方式访问我在亚马逊上的 WishList。除了屏幕抓取之外,任何人都知道有什么方法吗?也许是一些第三方服务(我不介意只使用公共数据)?
【问题讨论】:
标签: api amazon-web-services google-apps-script amazon
亚马逊最近更改了他们的 API,现在似乎无法使用这些 API 以编程方式访问我在亚马逊上的 WishList。除了屏幕抓取之外,任何人都知道有什么方法吗?也许是一些第三方服务(我不介意只使用公共数据)?
【问题讨论】:
标签: api amazon-web-services google-apps-script amazon
对于屏幕抓取,紧凑的布局样式可能会有所帮助: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']"))
【讨论】:
一个叫 Justin Scarpetti 的人创建了一个非常简洁的“api”,它可以抓取您的愿望清单并以 json 格式返回数据。
这是一个用于检索亚马逊愿望清单数据的小 API。没有 官方 API,因为亚马逊几年前关闭了它。唯一的办法 围绕那个...屏幕抓取。
Amazon Wish Lister 使用 phpQuery(服务器端 CSS3 选择器驱动的 DOM 基于 jQuery 的 API)来抓取亚马逊的愿望清单页面并导出到 JSON、XML 或 PHP 数组对象。
如果您想自己主持显示您的愿望清单,那就太完美了 网站。
【讨论】: