O'Reilly Hacks
oreilly.comO'Reilly NetworkSafari BookshelfConferences Sign In/My Account | View Cart   
Book List Learning Lab PDFs O'Reilly Gear Newsletters Press Room Jobs  


 
Buy the book!
Amazon Hacks
By Paul Bausch
August 2003
More Info

HACK
#96
Compare International Sales
Find out what products are hot on either side of the pond with Amazon locale-based queries
The Code
[Discuss (0) | Link to this hack]

Why are some albums more popular in the U.K. than in the U.S.? This hack can't answer that question, but it can point out what the differences are. It uses two features of AWS requests, sort and locale, to generate parallel lists of bestsellers by artist.

The Code

This ASP code makes two ArtistSearch requests. Both are sorted by sales rank, and the only difference between the two is the setting for the locale. In the first query, locale is left blank, for the default Amazon.com store. The other query sets the locale to uk, searching Amazon.co.uk. Create a file called us_vs_uk.asp with the following code:

<html>
<head>
    <title>International Sales</title>
</head>

<body>
<%
Dim arUSResults(10,4)
Dim arUKResults(10,4)

Sub AmazonTopArtist(artist,locale)
    
' Set Associate ID and Developer Token
AssociatesID = "insert associate tag"
DeveloperToken = "insert developer token"
  
  ' Form the request URL
XMLURL = "http://xml.amazon.com/onca/xml3" & _
       "?t=" & AssociateID & _
       "&dev-t=" & DeveloperToken & _
       "&page=1" & _
       "&f=xml" & _
       "&mode=music" & _
       "&type=lite" & _
       "&sort=+salesrank" & _
       "&ArtistSearch=" & Server.URLEncode(artist)
       If locale = "uk" Then
           XMLURL = XMLURL & "&locale=uk"
       End If
  
Set xmlhttp = Server.CreateObject("Msxml2.SERVERXMLHTTP")
xmlhttp.Open "GET", XMLURL, false
xmlhttp.Send(Now)
    
' Issue the request and wait for the response
Set ProductInfo = xmlhttp.ResponseXML

Set Details = ProductInfo.SelectNodes("//Details")
For x = 0 to (Details.length-1)
    If locale = "uk" Then
      arUKResults(x,1) = Details(x).selectSingleNode("ProductName").text
      arUKResults(x,2) = Details(x).selectSingleNode("Asin").text
      arUKResults(x,3) = Details(x).selectSingleNode("ImageUrlSmall").text
      arUKResults(x,4) = Details(x).getAttribute("url")
    Else
      arUSResults(x,1) = Details(x).selectSingleNode("ProductName").text
      arUSResults(x,2) = Details(x).selectSingleNode("Asin").text
      arUSResults(x,3) = Details(x).selectSingleNode("ImageUrlSmall").text
      arUSResults(x,4) = Details(x).getAttribute("url")
    End If
Next
Set Details = Nothing
Set ProductInfo = Nothing
Set xmlhttp = Nothing
 
End Sub

strArtist = request("artist")

Call AmazonTopArtist(strArtist,"us")
Call AmazonTopArtist(strArtist,"uk")

response.write "<table border=""1"" cellpadding=""5"">"
response.write "<tr><th>UK Top Sales</th><th>US Top Sales</th></tr>"
response.write "<tr>"
For y = 0 To 9
    response.write "<tr>"
    response.write "<td align=""center"" valign=""top"">"
    response.write "<a href=""" & arUKResults(y,4) & """>"
    response.write arUKResults(y,1)
    response.write "</a><br><br>"
    response.write "<img border=""0"" src=""" & arUKResults(y,3) & """>"
    response.write "</td>" & vbCrLf
    response.write "<td align=""center"" valign=""top"">"
    response.write "<a href=""" & arUSResults(y,4) & """>"
    response.write arUSResults(y,1)
    response.write "</a><br><br>"
    response.write "<img border=""0"" src=""" & arUSResults(y,3) & """>"
    response.write "</td>" & vbCrLf
    response.write "</tr>"
Next
response.write "</table>"
%>
</body>
</html>

The results are saved in arrays, arUKResults and arUSResults. Once both queries are set, they're used to print out a table with the results.

TIP

Though you can use your associate tag to make alternate locale requests, you'll need to be a member of the specific locale's associates program to get affiliate fees from the links. For example, if you're a U.S. Amazon associate pointing to Amazon.co.uk, you won't receive affiliate fees from those sales. To do so, you would need to create a separate affiliate tag with the U.K. associates program.

The Code

This ASP code makes two ArtistSearch requests. Both are sorted by sales rank, and the only difference between the two is the setting for the locale. In the first query, locale is left blank, for the default Amazon.com store. The other query sets the locale to uk, searching Amazon.co.uk. Create a file called us_vs_uk.asp with the following code:

<html>
<head>
    <title>International Sales</title>
</head>

<body>
<%
Dim arUSResults(10,4)
Dim arUKResults(10,4)

Sub AmazonTopArtist(artist,locale)
    
' Set Associate ID and Developer Token
AssociatesID = "insert associate tag"
DeveloperToken = "insert developer token"
  
  ' Form the request URL
XMLURL = "http://xml.amazon.com/onca/xml3" & _
       "?t=" & AssociateID & _
       "&dev-t=" & DeveloperToken & _
       "&page=1" & _
       "&f=xml" & _
       "&mode=music" & _
       "&type=lite" & _
       "&sort=+salesrank" & _
       "&ArtistSearch=" & Server.URLEncode(artist)
       If locale = "uk" Then
           XMLURL = XMLURL & "&locale=uk"
       End If
  
Set xmlhttp = Server.CreateObject("Msxml2.SERVERXMLHTTP")
xmlhttp.Open "GET", XMLURL, false
xmlhttp.Send(Now)
    
' Issue the request and wait for the response
Set ProductInfo = xmlhttp.ResponseXML

Set Details = ProductInfo.SelectNodes("//Details")
For x = 0 to (Details.length-1)
    If locale = "uk" Then
      arUKResults(x,1) = Details(x).selectSingleNode("ProductName").text
      arUKResults(x,2) = Details(x).selectSingleNode("Asin").text
      arUKResults(x,3) = Details(x).selectSingleNode("ImageUrlSmall").text
      arUKResults(x,4) = Details(x).getAttribute("url")
    Else
      arUSResults(x,1) = Details(x).selectSingleNode("ProductName").text
      arUSResults(x,2) = Details(x).selectSingleNode("Asin").text
      arUSResults(x,3) = Details(x).selectSingleNode("ImageUrlSmall").text
      arUSResults(x,4) = Details(x).getAttribute("url")
    End If
Next
Set Details = Nothing
Set ProductInfo = Nothing
Set xmlhttp = Nothing
 
End Sub

strArtist = request("artist")

Call AmazonTopArtist(strArtist,"us")
Call AmazonTopArtist(strArtist,"uk")

response.write "<table border=""1"" cellpadding=""5"">"
response.write "<tr><th>UK Top Sales</th><th>US Top Sales</th></tr>"
response.write "<tr>"
For y = 0 To 9
    response.write "<tr>"
    response.write "<td align=""center"" valign=""top"">"
    response.write "<a href=""" & arUKResults(y,4) & """>"
    response.write arUKResults(y,1)
    response.write "</a><br><br>"
    response.write "<img border=""0"" src=""" & arUKResults(y,3) & """>"
    response.write "</td>" & vbCrLf
    response.write "<td align=""center"" valign=""top"">"
    response.write "<a href=""" & arUSResults(y,4) & """>"
    response.write arUSResults(y,1)
    response.write "</a><br><br>"
    response.write "<img border=""0"" src=""" & arUSResults(y,3) & """>"
    response.write "</td>" & vbCrLf
    response.write "</tr>"
Next
response.write "</table>"
%>
</body>
</html>


O'Reilly Home | Privacy Policy

© 2007 O'Reilly Media, Inc.
Website: | Customer Service: | Book issues:

All trademarks and registered trademarks appearing on oreilly.com are the property of their respective owners.