Hack 79 Program AWS with Python

figs/expert.giffigs/hack79.gif

Use existing Python functions to handle Amazon requests for you.

This hack is another example of using someone else's interface to AWS to speed up your development. Behind the scenes, these functions handle all the work of building the proper URL, making the request, and organizing the results. The only thing you need to do is learn how the wrapper works.

79.1 What You Need

Mark Pilgrim's pyAmazon (http://diveintomark.org/projects/#pyamazon) makes quick work of an Amazon query in Python. The wrapper is a single file called amazon_wrap.py; be sure to save it to the same directory as the script that uses it.

If you'll be using pyAmazon in several files across different directories, save it to your Python installation's Lib directory so that it will be available to any script.

79.2 The Code

The code in amazon_wrap.py sets the License argument with your developer's token, and calls the searchByKeyword function using the argument supplied on the command line.

#!/usr/bin/python
# amazon_wrap.py
# A typical Amazon Web API Python script using Mark Pilgrim's
# pyAmazon Amazon Web Service API wrapper
# [http://diveintomark.org/projects/#pyamazon]
# Usage: python amazon_wrap.py <keyword> 

import sys

# Use the pyAmazon Functions
import amazon

# Set your dev token
amazon.setLicense(' insert developer token here ')

# Get the Keyword from input
if sys.argv [1:]:
    actor = sys.argv [1 ]
else:
    sys.exit('Usage: python amazon_wrap.py <keyword>')

# Make the Request
pythonBooks = amazon.searchByKeyword(actor)

# Print the Results
for book in pythonBooks:
    print book.ProductName
    print "by",
    authorList = book.Authors.Author
    if len(authorList) < 5:
        for author in authorList:
            print author + ", ",
    else:
        print book.Authors.Author, 
    print book.OurPrice + "\n"

The searchByKeyword function is shorthand that the program uses to make the Amazon request. There are several other shorthand functions, including searchByASIN, searchByUPC, searchByAuthor, and searchByArtist. Check the source of amazon.py for a full list.

The for statement at the end of the code loops through the results. The variable names mirror Amazon's results. By changing book.OurPrice to book.ListPrice or book.Asin, you can change what the script returns.

79.3 Running the Hack

Run the script on the command line like so:

python amazon_wrap.py "query words"

Replace query words with your preferred query; "google hacks", for example. Be sure to enclose phrases or queries consisting of more than one keyword in quotes, as otherwise spaces will separate the words into different script arguments.

79.4 Hacking the Hack

Python lets you work with the interpreter interactively, a fabulous way to get to know packages like pyAmazon and what information they return. Here's a sample interactive session (what I typed is called out in bold) that retrieves a list of Beatles CDs, gets information about the first CD listed, and looks for similar products based on its ASIN.

C:\Python22>python 
Python 2.2.1 (#34, Apr  9 2002, 19:34:33) [MSC 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import amazon 
>>> amazon.setLicense(' insert developer token ') 
>>> pythonCDs = amazon.searchByArtist('Beatles') 
>>> pythonCDs[0].ProductName 
u'Abbey Road'
>>> pythonCDs[0].OurPrice 
u'$13.49'
>>> pythonCDs[0].Asin 
u'B000002UB3'
>>> moreCDs = amazon.searchSimilar('B000002UB3') 
>>> moreCDs[0].ProductName 
u"Sgt. Pepper's Lonely Hearts Club Band"
>>>