Hack 80 Program AWS with Perl
 
A lightweight XML parser is all you need to
work with Amazon's data in Perl scripts.
Even without wrapper functions, retrieving data
directly from Amazon with XML/HTTP is straightforward. You just need
the ability to grab a file from the Web and parse the results.
80.1 What You Need
This hack requires two common Perl modules: one to handle the HTTP
request and another to parse the XML. Once the Amazon request URL is
built, LWP::Simple handles sending the request and receiving the XML
with a get( ) function. You can find out more
about LWP::Simple at CPAN (http://search.cpan.org/dist/libwww-perl/lib/LWP/Simple.pm).
XML::Simple (http://search.cpan.org/author/GRANTM/XML-Simple-2.04/lib/XML/Simple.pm)
is a lightweight XML parser. It provides a quick, simple interface
for working with XML.
Many ISPs have both of these modules installed already. If not, you
can install them with CPAN:
perl -MCPAN -e shell
cpan> install XML::Simple
If you have a Win32 system, you can install them from the command
line with the package manager like this:
ppm install XML::Simple
80.2 The Code
This code accepts a command-line argument and builds an Amazon URL
with the argument as the keyword. Create
the file
amazon_http.pl
with the following code:
#!/usr/bin/perl
# amazon_http.pl
# A typical Amazon Web API Perl script using the XML/HTTP interface
# Usage: amazon_http.pl <keyword>
#Your Amazon developer's token
my $dev_key='insert developer token';
#Your Amazon affiliate code
my $af_tag='insert associate tag';
#Take the keyword from the command-line
my $keyword =shift @ARGV or die "Usage:perl amazon_http.pl <keyword>\n";
#Assemble the URL
my $url = "http://xml.amazon.com/onca/xml3?t=" . $af_tag .
"&dev-t=" . $dev_key .
"&type=lite&f=xml&mode=books&" .
"KeywordSearch=" . $keyword;
use strict;
#Use the XML::Parser and LWP::Simple Perl modules
use XML::Simple;
use LWP::Simple;
my $content = get($url);
die "Could not retrieve $url" unless $content;
my $xmlsimple = XML::Simple->new( );
my $response = $xmlsimple->XMLin($content);
foreach my $result (@{$response->{Details}}){
#Print out the main bits of each result
print
join "\n",
$result->{ProductName}||"no title",
"ASIN: " . $result->{Asin} . ", " .
$result->{OurPrice} . "\n\n";
}
The foreach at the end of the code loops through
the results from Amazon and prints them out. By changing the variable
names, you can change the information that is displayed. For example,
changing OurPrice on the last line to
ListPrice would display that price instead of
Amazon's price.
80.3 Running the Hack
From the command line, call the script like so:
perl amazon_http.pl hacks
Be sure to enclose phrases or multiple keywords in quotes, like so:
perl amazon.http.pl "google hacks"
|