Hack 35 Publish Your Amazon Reviews on Your Site

figs/expert.giffigs/hack35.gif

With a little screen scraping, you can gather all the reviews you've posted to Amazon and publish them on your own web site.

If you've contributed reviews to Amazon and also have your own space on the Web, you might want to gather your reviews together and make them available to readers of your site. With your Amazon ID [Hack #43] in hand, you can link directly to a page on Amazon that lists all of your reviews:

http://www.amazon.com/exec/obidos/tg/cm/member-reviews/-/insert Amazon ID

If you want to take it a step further, you can use some regular-expression pattern matching to grab your reviews with one request and format them for your site.

35.1 The Code

The following ASP script requires your Amazon ID. Create a file called my_reviews.asp and enter the following code:

<% Const AmazonID = "insert Amazon ID " %>
<html>
<head>
    <title>My Amazon Reviews</title>
</head>

<body>
<%
strURL = "http://www.amazon.com/exec/obidos/tg/cm/member-reviews/-/" & _
          AmazonID & "/t/ "
Set xmlhttp = Server.CreateObject("Msxml2.SERVERXMLHTTP")
xmlhttp.Open "GET", strURL, false
xmlhttp.Send(Now)
strContent = xmlhttp.responseText
Set xmlhttp = Nothing

Set objRegExpr = New regexp
objRegExpr.Pattern = "<a [^>].*detail/-/(.*?)/[^>].*><b>(.*?)</b>[\s\S]*?(\[RETURN]
d) out of 5 stars[\s\S]*?<b>(.*?)</b> \n(.*?)\n<br>\n(.*?)\n<br><br>"
objRegExpr.Global = True
objRegExpr.IgnoreCase = True
Set objMatches = objRegExpr.Execute(strContent)
If objMatches.Count = 0 Then
    response.write "No reviews found."
Else
    For Each objMatch In objMatches
        strASIN = objMatch.SubMatches(0)
        strTitle = objMatch.SubMatches(1)
        strRating = objMatch.SubMatches(2)
        strReviewTitle = objMatch.SubMatches(3)
        strReviewDate = objMatch.SubMatches(4)
        strReviewText = objMatch.SubMatches(5)
        response.write "<u>" & strTitle & "</u> - "
        response.write "ASIN: " & strASIN & "<br>"
        response.write "(" & strRating & " stars.) "
        response.write "<b>" & strReviewTitle & "</b>, " 
        response.write strReviewDate & "<br>"
        response.write "<blockquote>" & strReviewText & "</blockquote>"
        response.write "<br><br>"
        response.flush
    Next
End If
Set objMatches = Nothing
Set objRegExpr = Nothing
%>
</body>
</html>

This code requests the review page from Amazon and finds matches in the HTML for the relevant data. It breaks the review down into its parts (ASIN, title, rating, review title, date, and review text) and formats it for the page.

35.2 Running the Hack

Upload the file to a web server running IIS, and request it from your browser. The page should show your Amazon reviews. Screen scraping is a costly process that requires trips to remote servers, so if you're going to make this page public, it's a good idea to use the same method to cache this data in memory [Hack #94] as you can with Amazon Web Services responses.