Hack 82 Program XML/HTTP with VBScript

figs/expert.giffigs/hack82.gif

Accessing Amazon within Windows is a job for VBScript.

VBScript is a common scripting language for the Windows platform. It's very similar to Visual Basic, and in fact this hack is modified from the example VBA application included with the Amazon developer's kit. With a few slight modifications, this code could be used in a Word macro, a Visual Basic program, or an ASP web page. In this case, it's written for Windows Scripting Host, and will run just like any other program.

82.1 What You Need

This example requires a Windows machine and the Microsoft XML Parser. If Internet Explorer 4.0 or higher is installed on your machine, the parser is already there.

82.2 The Code

Create a text file called amazon_price.vbs with the following code:

' amazon_price.vbs
' This VBScript prompts for an ASIN, and returns the price.
' Usage: double-click amazon_price.vbs, enter ASIN.

Sub AmazonQuery(ASIN_In)
  Dim SelectedText
  Dim MSXML
  Dim XMLURL
  Dim Loaded
    
  ' Make sure that some text is selected
  If ((Len(ASIN_In) = 0) Or (ASIN_In < " ")) Then
    WScript.Echo "Please enter an ASIN."
    Exit Sub
  End If
  
  ' Set Associate ID and Developer Token
  AffiliateTag = "insert associate tag"
  DeveloperToken = "insert developer token"
  
  ' Create an instance of the MSXML Parser
  Set MSXML = CreateObject("MSXML.DOMDocument")
  
  ' Set MSXML Options
  MSXML.Async = False
  MSXML.preserveWhiteSpace = False
  MSXML.validateOnParse = True
  MSXML.resolveExternals = False
 
  ' Form the request URL
  XMLURL = "http://xml.amazon.com/onca/xml3" + _
           "?t=" + AffiliateTag + _
           "&dev-t=" + DeveloperToken + _
           "&page=1" + _
           "&f=xml" + _
           "&mode=books" + _
           "&type=lite" + _
           "&AsinSearch=" + ASIN_In
  
  ' Issue the request and wait for the response
  Loaded = MSXML.Load(XMLURL)

  ' If the request is loaded successfully, continue
  If (Loaded) Then

    ' Look for the ErrorMsg tag
    Set XMLError = MSXML.SelectNodes("//ErrorMsg")
    
    ' If it exists, display the message and exit
    If XMLError.length > 0 Then
       WScript.Echo MSXML.SelectSingleNode("//ErrorMsg").text
       Exit Sub
    End If

    ' If there's no error, use XPath to get the product name
    ' and the price
    WScript.Echo "The price of " + _
      MSXML.SelectSingleNode("ProductInfo/Details/ProductName").text + _
      " is " + _
      MSXML.SelectSingleNode("ProductInfo/Details/OurPrice").text
  Else
    WScript.Echo "The service is not available."
  End If
    
End Sub

strASIN = InputBox("Please enter a product ASIN.")

AmazonQuery(strASIN)

As you can see, this script looks for two specific pieces of information in the response: the product name and the price. The XPath queries to reach those pieces of info are:

ProductInfo/Details/ProductName
ProductInfo/Details/OurPrice

By changing these paths, you can bring up any other bits of available data.

82.3 Running the Hack

To run this code, double-click the file you created. You should be prompted for an ASIN. The script will contact Amazon and return the price.