[ Team LiB ] |
Hack 96 Compare International SalesFind 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 CodeThis 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.
96.2 Running the HackTo 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: http://example.com/us_vs_uk.asp?artist=Dylan Figure 6-10 shows the differing results for Bob Dylan's sales. Figure 6-10. International sales differences of Bob Dylan CDsThis 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. |
[ Team LiB ] |