#!/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; }