Hack 96 Compare International Sales


Find out what products are hot on either side of the pond with Amazon locale-based queries.

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.

96.1 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:

    <title>International Sales</title>

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
' 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")
      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
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>"
response.write "</table>"

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.

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.

96.2 Running the Hack

To run this code, put us_vs_uk.asp on a server and request it from your browser, passing the artist variable in the querystring, like so:


Figure 6-10 shows the differing results for Bob Dylan's sales.

Figure 6-10. International sales differences of Bob Dylan CDs

This code is also using the SmallImageURL value to display an image. The images come from their respective servers, so half are from the images-eu.amazon.com server, while the rest are from images.amazon.com.