#!/usr/bin/perl5
#############################################################
$sitecode = "blackbookshelfin";
$defaulttemplatefile = "apipetemplate.html";
$templatedir = "../cgi-bin/";
$http_os = "UNIX"; # UNIX or NT
$newbrowserwindow=0;
$maxtime=20;
$siteaddress="www.amazon.com";

# Uncomment the following lines if you are having problems with timeouts
#  from Amazon.

use LWP::UserAgent;
$useLWP=1;
###### PLEASE CHANGE NOTHING BELOW THIS LINE!
##################################
$aversion="Anaconda Version: [1.2.1] [PIPELINE AMAZON.COM] [07/01/99]";
$I11II1I11I111111=$sitecode; $I1I1111I11III1II=$defaulttemplatefile;
$I1I11I1III1I11I1=$templatedir; $I1III11I11IIII11=$http_os;
$I1111111I11I1111=$newheadingcolor;
$I1I1II11III1II1I=$newshippingcolor; $I11III1I1IIII11I=$logfile;
$I1IIIIII11II111I=$siteaddress; $I1I111111I111II1=$maxtime;
$I1I1II1I111II1I1=$cgibinurl;
$I11II11III11I111=$aversion; use Socket; if($newbrowserwindow)
{ $I11I11I1I1I11111=qq| target="_blank" |; } $| = 1; $I1111II1II1I11II = "";
$I111I1II11111I1I = $ENV{SCRIPT_NAME}; unless($I111I1II11111I1I =~ /^\//){
$I111I1II11111I1I = "/$I111I1II11111I1I"; }
if($I1I1II1I111II1I1) { $I111I1II11111I1I =~ s|.*/([^/]+$)|$1|gs;
$I111I1II11111I1I = $I1I1II1I111II1I1 . $I111I1II11111I1I; }
if($I1111111I11I1111)
{	$I11II11II1IIII1I = "color[ =\"#]+CC6600"; $I1IIII11II11I1I1 =
"color=\"$I1111111I11I1111\""; }
if($I1I1II11III1II1I) {	$I11I1I1I11I1111I = "color[ =\"#]+990033";
$I1111I1I1II1IIII = "color=\"$I1I1II11III1II1I\""; } $I1IIII111II1IIII =
$ENV{'QUERY_STRING'} . "&"; $I111I1111IIIII1I=0;
print "Content-type: text/html\n\n"; $_=$I1IIII111II1IIII;
if(!($I11II11III11I111 =~ m|\w:\s*\[.*?\]\s*\[.*?\]\s*\[.*?\]|i))
{ print "INVALID ANACONDA INSTALLATION!\n"; exit; } if(m/command=(.*?)\&/i)
{ $I11I1III11IIII1I=URLDecodeString($1); s/command=(.*?)\&//i; }
if($I11I1III11IIII1I =~ m|version|i) { print "$I11II11III11I111\n";
exit; } if(m/passurl=(.*?)\&/i) { $I111II1I1IIIII1I=$1; s/passurl=(.*?)\&//i; }
$I1I11I1I1I1III1I=$_; if(length($I1I11I1I1I1III1I)>0)	 {
$I1I11I1I1I1III1I = "&$I1I11I1I1I1III1I";
} m/keyword(.*?)\&/i; $I1II1I111III11II=$1;  if($I11III1I1IIII11I &&
$I1II1I111III11II)
{ open(logfile1,">>$I11III1I1IIII11I"); $I11I1I1III1II1I1 =
$I1II1I111III11II; $I11I1I1III1II1I1 =~ s/^[=\+]+//; while
($I11I1I1III1II1I1 =~ s/\+/ /) { };
print logfile1 "$I11I1I1III1II1I1\n";  close logfile1;  }
if(m/template=(.*?)\&/i) { $I111II11111111II=$1; s/template=(.*?)\&//i; }
if(m/postkey=(.*?)\&/i) { $I111IIIIII1III11=URLDecodeString($1);
s/postkey=(.*?)\&//i; }
if(m/prekey=(.*?)\&/i) { $I1III1IIII1II1I1=URLDecodeString($1);
s/prekey=(.*?)\&//i; }
if(m/f1=(.*?)\&/i) { $f1=URLDecodeString($1); s/f1=(.*?)\&//i; }
if(m/f2=(.*?)\&/i) { $f2=URLDecodeString($1); s/f2=(.*?)\&//i; }
if(m/f3=(.*?)\&/i) { $f3=URLDecodeString($1); s/f3=(.*?)\&//i; }
if(m/f4=(.*?)\&/i) { $f4=URLDecodeString($1); s/f4=(.*?)\&//i; }
if(m/f5=(.*?)\&/i) { $f5=URLDecodeString($1); s/f5=(.*?)\&//i; }
if(m/f6=(.*?)\&/i) { $f6=URLDecodeString($1); s/f6=(.*?)\&//i; }
if(m/f7=(.*?)\&/i) { $f7=URLDecodeString($1); s/f7=(.*?)\&//i; }
if(m/f8=(.*?)\&/i) { $f8=URLDecodeString($1); s/f8=(.*?)\&//i; }
if(m/f9=(.*?)\&/i) { $f9=URLDecodeString($1); s/f9=(.*?)\&//i; }
if(m/c1=(.*?)\&/i) { $I1111111I11I1111=URLDecodeString($1); s/c1=(.*?)\&//i; }
if(m/c2=(.*?)\&/i) { $I1I1II11III1II1I=URLDecodeString($1); s/c2=(.*?)\&//i; }
$I1IIII111II1IIII=$_; if($I111II1I1IIIII1I) {
$I1II11II11I1I11I=$I111II1I1IIIII1I;
$I1II11II11I1I11I =~ s|http://([^/]*)$|/|i; $I1II11II11I1I11I =~
s|http://(.*?)/|/|i;
$I1II11II11I1I11I =~ s|\?(.*?)$||; $I11I1I11I11I1I11 = $1;
$I11I11II1I11I11I = &HTTPGet("$I1II11II11I1I11I", "$I1IIIIII11II111I", 80,
"$I11I1I11I11I1I11");
if ($I11I11II1I11I11I =~ m#Location:(.+)ASIN/(.+?)/#m)  {
$I1I1IIII11I1II11="http://$I1IIIIII11II111I/exec/obidos/ASIN/$2/$I11II1I11I11111
1";
print "<HTML><HEAD><TITLE></TITLE><META HTTP-EQUIV=\"REFRESH\"
CONTENT=\"0;URL=$I1I1IIII11I1II11\"></HEAD></BODY></HTML>\n";
exit;  } if ($I11I11II1I11I11I =~ m#Location: http://(.+?)/(.+)$#m)
{  @I111I11IIII1II1I = split(/\?/, $2); $I11I11II1I11I11I=&HTTPGet("/$I111I11IIII1II1I[0]", "$1", 80,
"$I111I11IIII1II1I[1]");
}  if ($I11I11II1I11I11I =~ m#Location:(.+)ASIN/(.+?)/#m)  {
$I1I1IIII11I1II11="http://$I1IIIIII11II111I/exec/obidos/ASIN/$2/$I11II1I11I11111
1";
print "<HTML><HEAD><TITLE></TITLE><META HTTP-EQUIV=\"REFRESH\"
CONTENT=\"0;URL=$I1I1IIII11I1II11\"></HEAD></BODY></HTML>\n";
exit;  } if ($I11I11II1I11I11I =~ m#Location: http://(.+?)/(.+)$#m)
{  @I111I11IIII1II1I = split(/\?/, $2);
$I11I11II1I11I11I=&HTTPGet("/$I111I11IIII1II1I[0]", "$1", 80,
"$I111I11IIII1II1I[1]");
}	 $I111II1II1111III=0; $I1IIII1II1I1111I=0; $I11I11II1I11I11I =~
s|<form(.*?)>||igm;
$I11I11II1I11I11I =~ s|<select(.*?)>||igm; $I11I11II1I11I11I =~
s|</select>||igm;
$I11I11II1I11I11I =~ s|<input(.*?)>||igm; $I11I11II1I11I11I =~
s|<option(.*?)>(.*?)$||igm;
$I11I11II1I11I11I =~ s|</form>||igm; $I11I11II1I11I11I =~ s|<A
NAME\=top></A>|\n<A NAME\=top></A>\n|im;
$I11I11II1I11I11I =~ s|<td><A
href\=\"/g/v7/nav/top-nav\.map(.*?)</td>|<td><A
href="/g/v7/nav/top-nav.map$1</td>\n|im;
$I11I11II1I11I11I =~ s|<b>Search by Author, Title, Subject</b>||igm;
$I11I11II1I11I11I =~ s|<b>Browse:</b>||igm; $I11I11II1I11I11I =~
s|<b>Keyword Search</b>||igm;
$I11I11II1I11I11I =~ s|<b>Search:</b>||igm; $I11I11II1I11I11I =~
s|<A[^>]*>text only</A>||igs;
foreach $I1II111II11I111I (split(/\n/, $I11I11II1I11I11I))  {
$_=$I1II111II11I111I; if(m|portal-tag\.gif| || m|Full search:|)
{ next; } if (($I111II1II1111III==1) && (m|Top of Page| || m|Privacy
Policy</a>|))
{ last; } if (m|top-nav\.map|) {  next;  } if (m|middle-[\w\-]*.gif|)
{  next;  } if (m|books-nav\.map| || m|second-nav\.map| ||
m|top-nav-590\.map| || m|top-home-nav\.map| || m|bottom-nav\.map| ||
m|music-nav\.map| || m|video-nav\.map| || m|gifts-nav\.map| ||
m|/nav/[\w\-]*nav\.map|)
{  next;  } if (m|<table border\=0|) { $I111II1II1111III=1; }
if ($I111II1II1111III==1)  { 	 $I1111II1II1I11II .= "$_\n";  }
} }	 foreach $I111III1111I1I1I (split(/\n/, $I1111II1II1I11II))
{ $_=$I111III1111I1I1I;
s|=\"/([^"]*?)\.gif\"|=\"http://$I1IIIIII11II111I/$1\.gif\"|ig;
s|=\"/([^"]*?)\.jpg\"|=\"http://$I1IIIIII11II111I/$1\.jpg\"|ig;
s/<img (.*?) src="\/(.*?)"/<img $1 src="http:\/\/$I1IIIIII11II111I\/$2"/ig;
s/<img(.*?)src=\/(.*?) /<img $1 src="http:\/\/$I1IIIIII11II111I\/$2" /ig;
if($I1111111I11I1111) { s/$I11II11II1IIII1I/$I1IIII11II11I1I1/i;
} if($I1I1II11III1II1I) { s/$I11I1I1I11I1111I/$I1111I1I1II1IIII/i;
}	 s|href=/exec/obidos/(.*?)>|href=\"/exec/obidos/$1\">|ig;
s|\"/exec/obidos/ASIN/(.*?)/(.*?)\"|\"/exec/obidos/ASIN/$1/$I11II1I11I111111\"$I
11I11I1I1I11111|ig;
s|\"/exec/obidos/ISBN=(.*?)/(.*?)\"|\"/exec/obidos/ISBN=$1/$I11II1I11I111111\"$I
11I11I1I1I11111|ig;
s|\"/exec/obidos/(.*?)\"|\"$I111I1II11111I1I\?passurl=http://$I1IIIIII11II111I/e
xec/obidos/$1$I1I11I1I1I1III1I"|ig;
s|action=\"/exec/obidos/(.*?)\"|href=\"$I111I1II11111I1I\?passurl=http://$I1IIII
II11II111I/exec/obidos/$1$I1I11I1I1I1III1I"|ig;
s|\"$I111I1II11111I1I\?passurl=http://$I1IIIIII11II111I/exec/obidos/ASIN(.*?)$I1
I11I1I1I1III1I|\"http://$I1IIIIII11II111I/exec/obidos/ASIN$1|gi;
s|\"$I111I1II11111I1I\?passurl=http://$I1IIIIII11II111I/exec/obidos/ISBN(.*?)$I1
I11I1I1I1III1I|\"http://$I1IIIIII11II111I/exec/obidos/ISBN$1|gi;
s|\"$I111I1II11111I1I\?passurl=http://$I1IIIIII11II111I/exec/obidos/redirect\-to
\-external\-url|\"http://$I1IIIIII11II111I/exec/obidos/redirect\-to\-external\-u
rl|gi;
s|\"$I111I1II11111I1I\?passurl=http://$I1IIIIII11II111I/exec/obidos/(.*?)\-query
\-page/(.*?)\"|\"http://$I1IIIIII11II111I/exec/obidos/redirect\?tag=$I11II1I11I1
11111\&path=$1\-query\-page\"|gi;
$I11I11111IIII1II .= "$_\n"; } $I1I1II1I1I11I1I1=0; while
($I11I11111IIII1II =~ m|<table|igm)
{ $I1I1II1I1I11I1I1++; } $I11I1I1IIIII11I1=0; while ($I11I11111IIII1II =~
m|</table>|igm)
{ $I11I1I1IIIII11I1++; } if($I1I1II1I1I11I1I1 > $I11I1I1IIIII11I1)
{ while ($I1I1II1I1I11I1I1 > $I11I1I1IIIII11I1) { $I11I11111IIII1II .=
"</td></tr></table>";
$I11I1I1IIIII11I1++; } } elsif($I1I1II1I1I11I1I1 < $I11I1I1IIIII11I1)
{ @I1I11I111II1III1 = split(/<\/table>/i, $I11I11111IIII1II);
$I11I11111IIII1II = ''; while ($I1I1II1I1I11I1I1) { $I1I1II1I1I11I1I1--;
$I11I11111IIII1II =
"$I1I11I111II1III1[$I1I1II1I1I11I1I1]</table>$I11I11111IIII1II";
} } $I1111II1II1I11II = $I11I11111IIII1II; $I1111II1II1I11II .= "\n";
$I1I11IIIIIIII111 = $I1I11I1III1I11I1; $I1I11IIIIIIII111 .=
$I111II11111111II?$I111II11111111II:$I1I1111I11III1II;
if(-s $I1I11IIIIIIII111) { open(TEMPLATEFILE,$I1I11IIIIIIII111);
while($I1111II1II1I1II1=<TEMPLATEFILE>) {
	while($I1111II1II1I1II1 =~
m/\<\!\-\-\s*\#INCLUDE\s+VIRTUAL=\"(.+)\"\s*\-\-\>/i)
{ open(INCFILE, $1); $I111IIIII1II11II = "";
while($I1I1III1I11IIII1=<INCFILE>) { $I111IIIII1II11II .=
"$I1I1III1I11IIII1\n"; }
close INCFILE; $I1111II1II1I1II1 =~
s/\<\!\-\-\s*\#INCLUDE\s+VIRTUAL=\"(.+)\"\s*\-\-\>/$I111IIIII1II11II/ig; }
$I1111II1II1I1II1 =~ s/\<\!\-\-\s*ANACONDARESULTS\s*\-\-\>/$I1111II1II1I11II/;
$I1111II1II1I1II1 =~ s/\<\!\-\-\s*ANACONDAF1\s*\-\-\>/$f1/;
$I1111II1II1I1II1 =~ s/\<\!\-\-\s*ANACONDAF2\s*\-\-\>/$f2/;
$I1111II1II1I1II1 =~ s/\<\!\-\-\s*ANACONDAF3\s*\-\-\>/$f3/;
$I1111II1II1I1II1 =~ s/\<\!\-\-\s*ANACONDAF4\s*\-\-\>/$f4/;
$I1111II1II1I1II1 =~ s/\<\!\-\-\s*ANACONDAF5\s*\-\-\>/$f5/;
$I1111II1II1I1II1 =~ s/\<\!\-\-\s*ANACONDAF6\s*\-\-\>/$f6/;
$I1111II1II1I1II1 =~ s/\<\!\-\-\s*ANACONDAF7\s*\-\-\>/$f7/;
$I1111II1II1I1II1 =~ s/\<\!\-\-\s*ANACONDAF8\s*\-\-\>/$f8/;
$I1111II1II1I1II1 =~ s/\<\!\-\-\s*ANACONDAF9\s*\-\-\>/$f9/;
$I1111II1II1I1II1 =~
s/\<\!\-\-\s*ANACONDASITECODE\s*\-\-\>/$I11II1I11I111111/;
$I1111II1II1I1II1 =~ s/\<\!\-\-\s*TEMPLATE\s*\-\-\>/$I111II11111111II/;
$I1I1111I1II1I111 .= "$I1111II1II1I1II1\n"; } close TEMPLATEFILE; print
"$I1I1111I1II1I111\n";
} else { print "Anaconda Error - template file \"$I1I11IIIIIIII111\" not
found!\n";
} exit; sub HTTPGet { local($I111II1I11I1I111, $I111I1I1I1IIIII1,
$I1II11I11111III1, $I1IIIIIII1II1111) = @_;
local($I11111I1I11II1II, $I11111III111III1, $socket); local
($I11II11III111111);
if($useLWP) { $I1II11I1I1III1I1 = new LWP::UserAgent;
$I1II11I1I1III1I1->agent('Mozilla/4.0');
my $I1I111II1IIIII1I = new HTTP::Request
'GET',"http://$I111I1I1I1IIIII1$I111II1I11I1I111?$I1IIIIIII1II1111";
my $I111II11111I1I11 = $I1II11I1I1III1I1->request($I1I111II1IIIII1I);
$I11II11III111111=$I111II11111I1I11->as_string; } else { $socket =
&OpenSocket($I111I1I1I1IIIII1, $I1II11I11111III1);
$I11111I1I11II1II = &FormatFormVars($I1IIIIIII1II1111); $I111II1I11I1I111
.= "?" . $I11111I1I11II1II;print  $socket <<__END_OF_SOCKET__;
GET $I111II1I11I1I111 HTTP/1.0
Accept: text/html
Accept: text/plain
User-Agent: Mozilla/4.0


__END_OF_SOCKET__

$I11II11III111111 = &RetrieveHTTP($socket); }
if(length($I11II11III111111)==0)	{ print "Anaconda Error -
$I1IIIIII11II111I failed to respond in $I1I111111I111II1 seconds.\n";
	exit; }
$I11II11III111111; } sub HTTPPost { local($I111II1I11I1I111,
$I111I1I1I1IIIII1, $I1II11I11111III1, $I1IIIIIII1II1111) = @_;
local($I11111I1I11II1II, $I11111III111III1, $socket); local
($I11II11III111111, $I1III11III111111);
if($useLWP) { $I1II11I1I1III1I1 = new LWP::UserAgent;
$I1II11I1I1III1I1->agent('Mozilla/4.0');
my $I1I111II1IIIII1I = new HTTP::Request
'POST',"http://$I111I1I1I1IIIII1$I111II1I11I1I111";
$I1II11I1I1III1I1->agent('Mozilla/4.0');
$I1I111II1IIIII1I->content_type('application/x-www-form-urlencoded');
$I1I111II1IIIII1I->content("$I1IIIIIII1II1111"); $I111II11111I1I11 =
$I1II11I1I1III1I1->request($I1I111II1IIIII1I);
$I11II11III111111=$I111II11111I1I11->as_string; } else { $socket =
&OpenSocket($I111I1I1I1IIIII1, $I1II11I11111III1);
$I11111I1I11II1II = &FormatFormVars($I1IIIIIII1II1111); $I1III11III111111 =
length($I11111I1I11II1II);print $socket <<__END_OF_SOCKET__;
POST $I111II1I11I1I111 HTTP/1.0
Accept: text/html
Accept: text/plain
User-Agent: Mozilla/4.0
Content-type: application/x-www-form-urlencoded
Content-length: $I1III11III111111

$I11111I1I11II1II
__END_OF_SOCKET__

$I11II11III111111 = &RetrieveHTTP($socket); }
if(length($I11II11III111111)==0)	{ print "Anaconda Error -
$I1IIIIII11II111I failed to respond in $I1I111111I111II1 seconds.\n";
	exit; }
$I11II11III111111; }  sub FormatFormVars { local ($I1IIIIIII1II1111) = @_;
$I1IIIIIII1II1111 =~ s/ /%20/g; $I1IIIIIII1II1111; }  sub RetrieveHTTP {
local ($socket) = @_; local ($I11II11III111111,$I11111III111III1,
$I111111I1III1I11);
$I11II11III111111 = read_sock($socket, $I1I111111I111II1); if
($I11II11III111111 =~ /200/) {
while(<$socket>) { $I11II11III111111 .= $_; } } close $socket;
$I11II11III111111; } sub OpenSocket { local($I111I1I1I1IIIII1,
$I1II11I11111III1) = @_;
local($I111II1II1I11I11, $I11II1II1I1I11II, $I111III111I11II1);
local($I11I1I1I1111111I); local($AF_INET, $SOCK_STREAM, $SOCK_ADDR);
local($PROTOCOL, $HTTP_PORT);  $AF_INET = AF_INET; $SOCK_STREAM = SOCK_STREAM;
$SOCK_ADDR = "S n a4 x8"; $PROTOCOL = (getprotobyname('tcp'))[2];
$HTTP_PORT = $I1II11I11111III1; $HTTP_PORT = 80 unless ($HTTP_PORT =~ /^\d+$/);
$PROTOCOL = 6 unless ($PROTOCOL =~ /^\d+$/); $I111II1II1I11I11 =
(gethostbyname($I111I1I1I1IIIII1))[4];
$I11II1II1I1I11II = join (".", unpack("C4", $I111II1II1I11I11));
$I111III111I11II1 = pack($SOCK_ADDR, $AF_INET,  $HTTP_PORT, $I111II1II1I11I11);
$I11I1I1I1111111I = pack($SOCK_ADDR,  $AF_INET, 0, "\0\0\0\0");
socket (S, $AF_INET, $SOCK_STREAM, $PROTOCOL) ||  &web_error( "Can't make
socket:$!\n");
bind (S,$I11I1I1I1111111I) ||  &web_error( "Can't bind:$!\n");
connect(S, $I111III111I11II1) ||  &web_error( "Can't connect socket:$!\n");
select(S); $| = 1; select (STDOUT); S; }  sub read_sock {
local($I1IIII1111I11III, $I1III111III1II11) = @_;
local($I1I1I1II1I11I1II,$I11II11III111111);
local($I1I11III1I1II111,$I11II1I1111I1II1,$I11II1I1I11I1I1I);
$I1III111III1II11 += time; $I11II11III111111 = ""; $I1I11III1I1II111 = '';
vec($I1I11III1I1II111, fileno($I1IIII1111I11III), 1) = 1; $I11II1I1I11I1I1I
= 0;
read_socket:  while (($I1III111III1II11 > time) && ($I11II1I1I11I1I1I <= 0)) {
$I1I1111III1II11I = 1024; $I1I1I1II1I11I1II = " " x 1025; $I11II1I1I11I1I1I
= 1;
if ($I1III11I11IIII11 ne "NT") { $I11II1I1I11I1I1I =
select($I11II1I1111I1II1=$I1I11III1I1II111, undef, undef,.2);
} } if ($I11II1I1I11I1I1I > 0) { $I1I1111III1II11I =
sysread($I1IIII1111I11III, $I1I1I1II1I11I1II, 1024);
if ($I1I1111III1II11I > 0) { $I11II11III111111 .= $I1I1I1II1I11I1II;
} } $I11II11III111111; } sub web_error { local ($I11III1II111I111) = @_;
$I11III1II111I111 = "Error Occured: $I11III1II111I111"; return
"$I11III1II111I111<p>\n";
}  sub URLDecodeString { my($I1IIII1111I1111I) = shift; $I1IIII1111I1111I
=~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
return $I1IIII1111I1111I; } 1;
