#!/usr/bin/perl -w
use LWP::UserAgent;
use HTTP::Cookies;
use Mysql;
use strict;
my $qin = &get_qstring();
my $url;
# Perform an item lookup
if ( $qin->{'itemId'} ) {
my $query = $qin->{'itemId'};
$url = "http://ecs.amazonaws.com/onca/xml?Service=AWSECommerceService&Version=2005-03-23&Operation=ItemLookup&AWSAccessKeyId=11QBA28JZ4XRBT28V6R2&ItemId=" . $query . "&ResponseGroup=Images,Small";
# Perform an item search by Artist Name
} elsif ( $qin->{'artistName'} ) {
my $query = $qin->{'artistName'};
$url = "http://webservices.amazon.com/onca/xml?Service=AWSECommerceService&AWSAccessKeyId=11QBA28JZ4XRBT28V6R2&Operation=ItemSearch&Artist=" . $query . "&SearchIndex=Music&ResponseGroup=Images,Request,Small&Version=2005-10-13";
# Perform a similarity lookup
} elsif( $qin->{'similarItemId'} ) {
my $query = $qin->{'similarItemId'};
$url = "http://ecs.amazonaws.com/onca/xml?Service=AWSECommerceService&Version=2005-03-23&Operation=SimilarityLookup&ContentType=text%2Fxml&AWSAccessKeyId=11QBA28JZ4XRBT28V6R2&Validate=False&XMLEscaping=Single&ItemId=" . $query. "&SimilarityType=Intersection&ResponseGroup=Images,SalesRank,Small";
# Error out
} else {
print( "Content-type:text/xml\n\n");
print( "Invalid or Missing Argument: The script accepts itemId, artistName, or similarItemId" );
exit;
}
# Make a db connection
my $conn=Mysql->connect( "", "", "", "" );
# See if we have a record in the cache for this URL in the ... 365 days
my $query=$conn->query( "select ContentType,Content from ProxyCache where URL=\'$url\' AND
TimeStamp>(DATE_SUB(NOW(), INTERVAL 365 DAY))
ORDER By TimeStamp DESC" );
if ( $query->numrows > 0 ) {
my %record=$query->fetchhash;
print "Content-type:",$record{ContentType},"\n\n";
print $record{Content};
} else {
# get page
my $result = &www( "GET", $url, '' );
#print page
my $contentType;
if ( $result->content_type ) {
$contentType=$result->content_type;
} else {
$contentType="text/xml";
}
my $content = $result->content;
# If the result is good, cache it.
if ( $result->is_success ) {
my $expression = "insert into ProxyCache (URL,ContentType,Content) values (" .
$conn->quote($url) . ", " .
$conn->quote($contentType) . ", " .
$conn->quote($content) . ")";
$conn->query( $expression );
}
print( "Content-type:$contentType\n\n");
print $result->content;
}
# Perform an HTTP GET w/LWP
sub www {
my ( $method, $url, $vars ) = @_;
# Set up a User Agent
my $ua = LWP::UserAgent->new;
$ua->timeout(1800);
# build request
my $req = HTTP::Request->new($method => $url);
# send request & resturn response
my $res = $ua->request($req);
return $res;
}
# Parse the Query String
sub get_qstring {
my ($i, $op, $key, $val, $arglist );
my $qin= $ENV{'QUERY_STRING'};
my @qin = split(/[&;]/,$qin);
my %qin;
foreach $i (0 .. $#qin) {
$qin[$i] =~ s/\+/ /g;
($key, $op, $val) = split(/((?:\%3C|\%3E|=){1,2})/,$qin[$i],3); # splits on the first =.
$op =~ s/%(..)/pack("c",hex($1))/ge;
$key =~ s/%(..)/pack("c",hex($1))/ge;
$val =~ s/%(..)/pack("c",hex($1))/ge;
if ( !( exists $qin{$key} ) ) {
$qin{$key} = {};
}
$qin{$key} = $val;
}
return \%qin;
}