[ Team LiB ] |
Hack 80 Program AWS with PerlA 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 NeedThis 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 CodeThis 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 HackFrom 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" |
[ Team LiB ] |