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.
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
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"; }
Just call the script from the command line, with the keyword as an argument:
perl amazon.pl "hacks"