Hack 88 Program AWS with SOAP::Lite and Perl
Use a standard Perl SOAP module to make
requests and work with the responses.
Though SOAP requests and responses are more complex
than those of XML/HTTP, they're just as easy to work with if you have
the right tools.
88.1 What You Need
SOAP::Lite has become the standard way for Perl developers to work
with SOAP services. Many ISPs have SOAP::Lite installed, but it's not
yet ubiquitous. A quick request via email could save you hours of
straining with the manual installation process. If you're on a
Windows server, you can install it fairly painlessly with the package
manager at a command prompt:
ppm install SOAP::Lite
88.2 The Code
Instead of assembling URLs, making an Amazon request with SOAP
requires assembling a collection of variables and their values.
Create a file called
amazon.pl with the
following code:
#!/usr/bin/perl
# amazon.pl
# A typical Amazon Web API Perl script that uses the SOAP::Lite Module.
# Usage: perl amazon.pl <keyword>
#Your Amazon developer's token
my $dev_token='insert developer token';
#Your Amazon affiliate code
my $af_tag='insert associate tag';
#Location of the Amazon WSDL file
my $amazon_wdsl = "http://soap.amazon.com/schemas2/AmazonWebServices.wsdl";
use strict;
#Use the SOAP::Lite Perl module
use SOAP::Lite;
#Take the query from the command-line
my $keyword =shift @ARGV or die "Usage:perl amazon.pl <keyword>\n";
#Create a new SOAP::Lite instance, feeding it Amazon's WSDL
my $amazon_search = SOAP::Lite->service("$amazon_wdsl");
#Query Amazon
my $results = $amazon_search ->
KeywordSearchRequest(SOAP::Data->name("KeywordSearchRequest")
->type("KeywordRequest")
->value(\SOAP::Data->value(
SOAP::Data->name("keyword" => $keyword),
SOAP::Data->name("page" => "1"),
SOAP::Data->name("mode" => "books"),
SOAP::Data->name("tag" => $af_tag),
SOAP::Data->name("type" => "lite"),
SOAP::Data->name("devtag" => $dev_token)
))
);
foreach my $result (@{$results->{Details}}){
#Print out the main bits of each result
print
$result->{ProductName}|| "no title",
"\nby ",
join (', ', @{$result->{Authors}}),
"\n$result->{OurPrice}",
"\nASIN: $result->{Asin}",
"\n\n";
}
88.3 Running the Hack
Just call the script from the command line, with the keyword as an
argument:
perl amazon.pl "hacks"
|