2011-11-26 76 views
13

当使用亚马逊的网络服务获取任何产品信息时,是否有直接获得平均顾客评分(1-5星)的方法?下面是我使用的参数:亚马逊产品广告API:获取平均客户评级

Service=AWSECommerceService 
Version=2011-08-01 
Operation=ItemSearch 
SearchIndex=Books 
Title=A Game of Thrones 
ResponseGroup=Large 

我希望它有一个客户评价为4.5和2177总篇而是我得到的回应如下。

<CustomerReviews><IFrameURL>http://www.amazon.com/reviews/iframe?...</IFrameURL></CustomerReviews> 

有没有办法让客户的整体评价,除了用于reading the <IFrameURL/> value,使得对于评论的那个页面另一个HTTP请求,然后屏幕抓取的HTML?这种方法很脆弱,因为亚马逊可以轻松更改评论页面结构,这会破坏我的应用程序。

回答

4

据我所知,亚马逊改变了它的API,所以它不可能得到reviewrank信息。如果您检查this Link注最高审计机关:

截至2010年11月8日,只有iframe网址被请求 内容返回。

然而,用你用来获取Iframe的参数测试,现在看起来连iframe都不能工作了。因此,即使在“激励客户购买”一章中的最新API参考文献中,“评论”部分也完全缺失。

但是:因为我也非常感兴趣,如果它仍然有可能以某种方式获取reviewrank信息 - 甚至可能不使用亚马逊API,但竞争对手的API来获得评论排名信息 - 我会设立一个赏金,如果任何人都可以提供有用的东西。赏金将在两天内设置在this topic

2

您可以抓取iframe评论网址,然后使用css来定位它,以便只显示星级评分。这并不理想,因为您没有获取原始数据,但它是向您的页面添加评分的简单方法。在这一行动

样本 - http://spamtech.co.uk/positioning-content-inside-an-iframe/

+0

那么,这就引发了一个Google XML架构的想法。猜猜我会手动输入客户项目的评分。 – Imperative

0

亚马逊拥有访问等级/检讨他们的API信息完全去除的支持。文档提到客户评分形式的响应元素,但这也不起作用。

谷歌购物使用Viewpoints的一些评论和other sources

17
+0

这会持续吗?希望它不会在未来破裂! – Micro

+0

如果你刮掉这样的链接,你的IP是否会被列入黑名单? – rockyraw

+0

这是一种可能的方式,但仅限于几次擦伤。当您查找多个项目时,该页面将请求验证码以阻止漫游器。也许你必须从第一个amazon-api请求中获取iframe url – Jokus

2

这里是一个VBS脚本,将刮评级。将下面的代码粘贴到文本文件,将其重命名为Test.vbs,然后双击以在Windows上运行。

sAsin = InputBox("What is your ASIN?", "Amazon Standard Identification Number (ASIN)", "B000P0ZSHK") 
if sAsin <> "" Then 
    sHtml = SendData("http://www.amazon.com/gp/customer-reviews/widgets/average-customer-review/popover/ref=dpx_acr_pop_?contextId=dpx&asin=" & sAsin) 
    sRating = ExtractHtml(sHtml, "<span class=""a-size-base a-color-secondary"">(.*?)<\/span>") 
    sReviews = ExtractHtml(sHtml, "<a class=""a-size-small a-link-emphasis"".*?>.*?See all(.*?)<\/a>") 
    MsgBox sRating & vbCrLf & sReviews 
End If 

Function ExtractHtml(sHtml,sPattern) 
    Set oRegExp = New RegExp 
    oRegExp.Pattern = sPattern 
    oRegExp.IgnoreCase = True 
    Set oMatch = oRegExp.Execute(sHtml) 
    If oMatch.Count = 1 Then 
     ExtractHtml = Trim(oMatch.Item(0).SubMatches(0)) 
    End If 
End Function 

Function SendData(sUrl) 
    Dim oHttp 'As XMLHTTP30 
    Set oHttp = CreateObject("Msxml2.XMLHTTP") 
    oHttp.open "GET", sUrl, False 
    oHttp.send 
    SendData = Replace(oHttp.responseText,vbLf,"") 
End Function 
相关问题