changeset 42:3f400072bf14

merge, involved ediff3 wrt getAmazonInfo.php
author Charlie Root
date Sat, 05 Jan 2019 06:21:12 -0500
parents 0578c6e438d3 (diff) 2c0c95bd97a6 (current diff)
children dbc006408d2b
files xml/getAmazonInfo.php
diffstat 1 files changed, 584 insertions(+), 584 deletions(-) [+]
line wrap: on
line diff
--- a/xml/getAmazonInfo.php	Fri Jan 04 18:03:24 2019 -0500
+++ b/xml/getAmazonInfo.php	Sat Jan 05 06:21:12 2019 -0500
@@ -1,584 +1,584 @@
-<?php
-
-include_once "doAmazonRequest.inc";
-
-function getAmazonDet($isbn,$go,$localeIn)
-{
-  $Adefault=array(
-		  'language'           =>'en',           //what language to render the page in
-		  'locale'             =>$localeIn,           //which server's products? available: ca,de,fr,jp,uk,us
-		  //'mode'               =>'books',        //what product category?
-		  'page'               =>1,              //first page to show (we are counting from 1 not 0)
-		  //'search'             =>'Machiavelli',  //what to search for?
-		  'operation'          =>'ItemLookup',   //what to do?	//ItemSearch
-		  'searchindex'        =>'Books',        //what product category for search?
-		  'searchparameter'    =>'ItemId',       //what kind of search?
-		  'searchparameterdata'=>$isbn,  //what to search for?
-		  //here some debugging flags you can put at the end of the URL to call this script with, like: '?show_array=true'
-		  'show_array'         =>false,          //debug: show complete incoming array? You can use this to see what other information Amazon is sending
-		  'show_url'           =>false,          //debug: show XML request url to be send to Amazon?
-		  'show_xml'           =>false,          //debug: show incoming XML code from Amazon?
-		  );
-  //change the debug options to true if you want to activate them or call the script with '?show_array=true' to see what actual information you're getting from Amazon and how little my standard script is actually showing of it
-  //for all parameters see if the user has overruled it or use the default
-  foreach ($Adefault as $i=>$d) {
-    $$i=isset($_GET[$i])?$_GET[$i]:$d;
-  }
-  switch($locale){
-  case "us": 
-    $loc = 0;
-    break;
-  case "uk": 
-    $loc = 1;
-    break;
-  case "ca": 
-    $loc = 2;
-    break;
-  case "de": 
-    $loc = 3;
-    break;
-  case "fr": 
-    $loc = 4;
-    break;
-  };		
-
-  try {  
-    return getAmazonDetRemote($go,$language,$locale,$loc,
-			      $page,$operation,$searchparameter,
-			      $searchparameterdata,
-			      $show_array,$show_url,$show_xml);
-  }
-  catch (Exception $e) {
-    return getAmazonDetLocal($go,$language,$loc,
-			     $page,$operation,$searchparameter,
-			     $searchparameterdata,
-			     $show_array,$show_url,$show_xml);
-  }
-}
-
-function getAmazonDetRemote($go,$language,$locale,$loc,
-			    $page,$operation,$searchparameter,
-			    $searchparameterdata,
-			    $show_array,$show_url,$show_xml)
-{
-  global $output, $Aassociates_id, $Aserver;
-
-  //if(go != 1)
-  //include "aws_signed_request.php";  
-  //this is the data that is used to form the request for AWS
-  //this is the part that is search specific
-  $parameters=array(
-		    'Operation'       =>$operation              ,
-		    //'Keywords'        =>urlencode($search)      ,
-		    "$searchparameter"=>$searchparameterdata    ,
-		    'ItemPage'        =>$page                   ,  //which page?
-		    'AssociateTag'    =>$Aassociates_id[$locale],
-		    'ResponseGroup'   =>'ItemAttributes,Reviews,EditorialReview,OfferSummary,Offers,Images,AlternateVersions,SalesRank,BrowseNodes'                ,  //Small, Medium, Large or SellerListing,'BrowseNodes',// ,
-		    'ReviewSort'	  =>'-HelpfulVotes'
-		    );
-
-  if (isset($searchindex) && $searchindex!='Books') {
-    // HST did this
-    // Used to be in $parameters init above, but
-    // that caused an error:
-    // If idType equals ASIN, SearchIndex cannot be present
-    //'SearchIndex'     =>$searchindex      ,  //Books for example.
-    $parameters['SearchIndex']=$searchindex;
-  }
-  $xml=doAmazonRequest($Aserver[$locale]['ext'],$parameters,3,'i');  // may throw exception
-  set_error_handler(function () {
-      global $output;
-      file_put_contents('/var/ywww/debug/phpDebug',
-			"Caught one?: ".$searchparameterdata,
-			FILE_APPEND);
-      file_put_contents('/var/ywww/debug/phpDebug',
-			print_r($output, TRUE)."\n",
-			FILE_APPEND);
-    } );
-  $review = $xml->Items->Item->CustomerReviews->IFrameURL;
-  restore_error_handler();
-  //echo $review;
-  if ($review != "")
-    {
-      $review1 = "";
-      $review2 = "";
-      $review3 = "";
-      $text = @file_get_contents($review . "&truncate=300");
-      $removeTop1 = preg_replace('~<div class="crIFrameHeaderLeftColumn">(.*?)<div class="crIFrameHeaderHistogram">~si', '', $text);
-      $removeTop2 = preg_replace('~<div class="crIFrameHeaderHistogram">(.*?)<div class="crIframeReviewList">~si', '', $text);
-      if (preg_match('~<body[^>]*>(.*?)</body>~si', $removeTop2, $body)){ $getBody = trim($body[1]); } else { $getBody = $removeTop2;}
-      $removeDiv = preg_replace('~<div[^>]*>(.*?)</div>~si', '', $getBody);
-      $removeCloseDivs = preg_replace('/<\/div>/','', $removeDiv);
-      $setBoundary = str_replace('<!-- BOUNDARY -->','BOTTOM-TOP', $removeCloseDivs);
-      //replace <!-- BOUNDARY --> with BOTTOM-TOP
-      $remove1 = '~<table cellpadding="0"(.*?)%">~s';
-      $setBoundary = preg_replace($remove1,'', $setBoundary);
-      $remove2 = '~</td><td bg(.*?)</table>~s';
-      $setBoundary = preg_replace($remove2,'', $setBoundary);
-      $remove3 = '~<a name=(.*?)</a>~s';
-      $setBoundary = preg_replace($remove3,'', $setBoundary);
-      $setBoundary2 = str_replace('<br />','', $setBoundary);
-      //remove all extra crap;
-      $setBoundary3 = str_replace('</td>','BOTTOM', $setBoundary2);
-      //replace </td> with BOTTOM
-		
-      if (preg_match_all('~TOP(.*?)BOTTOM~s', $setBoundary3, $reviews))
-	{ 
-	  $reviewContents = $reviews[1];
-	  //print_r($reviewContents);
-	  $review1 = trim($reviewContents[0]);
-	  $review1 = str_replace("\n", "", $review1);
-	  $review1 = str_replace("\r", "", $review1);
-	  if (isset($reviewContents[1])) {
-	    $review2 = trim($reviewContents[1]);
-	    $review2 = str_replace("\n", "", $review2);
-	    $review2 = str_replace("\r", "", $review2);
-	  }
-	  else {
-	    $review2 = "";
-	  }
-	  if (isset($reviewContents[2])) {
-	    $review3 = trim($reviewContents[2]);
-	    $review3 = str_replace("\n", "", $review3);
-	    $review3 = str_replace("\r", "", $review3);
-	  }
-	  else {
-	    $review3 = "";
-	  }
-	}
-      else
-	{
-	  $review1 = "";
-	  $review2 = "";
-	  $review3 = "";
-	  //echo "EPIC FAIL";
-	}
-
-      unset($xml->Items->Item->CustomerReviews);
-      $xdoc = new DomDocument;
-      $xdoc->loadXML($xml->asXML());
-		
-      $cReviews = $xdoc ->createElement('CustomerReviews');
-      $cReviewHolder = $xdoc ->createElement('Review');
-      $cReview = $xdoc ->createElement('Content');
-      $cReviewHolder2 = $xdoc ->createElement('Review');
-      $cReview2 = $xdoc ->createElement('Content');	
-      $cReviewHolder3 = $xdoc ->createElement('Review');
-      $cReview3 = $xdoc ->createElement('Content');
-		
-      $txtNode = $xdoc ->createTextNode ($review1);
-      $cReview -> appendChild($txtNode);
-		
-      $txtNode2 = $xdoc ->createTextNode ($review2);
-      $cReview2 -> appendChild($txtNode2);
-		
-      $txtNode3 = $xdoc ->createTextNode ($review3);
-      $cReview3 -> appendChild($txtNode3);
-		
-      $cReviewHolder -> appendChild($cReview);
-      $cReviewHolder2 -> appendChild($cReview2);
-      $cReviewHolder3 -> appendChild($cReview3);
-		
-      $cReviews -> appendChild($cReviewHolder);
-      $cReviews -> appendChild($cReviewHolder2);
-      $cReviews -> appendChild($cReviewHolder3);
-		
-      $xdoc->documentElement->childNodes->item(1)->childNodes->item(1)->appendChild($cReviews);
-      $newXML = simplexml_import_dom($xdoc);
-      $output = $newXML->asXml();
-    }
-	
-  if($go == 1) {
-    $item = $xml->Items->Item[0];
-    if ($item && $item->ItemAttributes && $item->ItemAttributes->Title) {
-      $title = $item->ItemAttributes->Title; }
-    else { $title = "[no title]"; };
-    file_put_contents('/var/ywww/debug/phpDebug',"win: $title\n",
-		      FILE_APPEND);
-    return $output;
-  }
-  else {
-    if ($xml->Items->Item) {
-      $title = $xml->Items->Item[0]->ItemAttributes->Title;
-      $author = $xml->Items->Item[0]->ItemAttributes->Author;
-      $binding = $xml->Items->Item[0]->ItemAttributes->Binding;
-      $dewey = $xml->Items->Item[0]->ItemAttributes->DeweyDecimalNumber;
-      if($dewey == "")
-	$dewey = "null";
-      $imageURL = $xml->Items->Item[0]->MediumImage->URL;
-      $salesRank = $xml->Items->Item[0]->SalesRank;
-      $pubDate = $xml->Items->Item[0]->ItemAttributes->PublicationDate;
-      if (strlen($pubDate)==4) { $pubDate=$pubDate."-01-01";}
-      if (strlen($pubDate)==7) { $pubDate=$pubDate."-01";}
-      if (strlen($pubDate)==0) {
-	$pubDate="null";
-      }
-      else {
-	$pubDate="\"$pubDate\"";
-      }
-      $publisher = $xml->Items->Item[0]->ItemAttributes->Publisher;
-    }
-    else {
-      $title = $salesRank = "";
-      $dewey = "null";
-    }
-			
-    $genreID = "";
-    $genre = "";		
-    $genArr = array();
-
-    if ($xml->Items->Item[0] && $xml->Items->Item[0]->BrowseNodes) {
-      for($i=0;$i<sizeof($xml->Items->Item->BrowseNodes->BrowseNode);$i++){	
-	//sexy recursive function
-	findGenre($xml->Items->Item->BrowseNodes->BrowseNode[$i], $genreID, $genre);
-				
-	if($genre != "")
-	  $genArr[strval($genreID)] = strval($genre);
-	//$genArr[$i] = array(strval($genreID) => strval($genre));
-
-	//echo $genre;
-	//echo $genreID;
-				
-	$genre = "";
-	$genreID = "";
-      }
-    }
-			
-    $g1 = "null";
-    $g2 = "null";
-    $g3 = "null";
-    $loop = 1;
-			
-    foreach ($genArr as $key => $value) {
-      //echo "$key => $value";
-      if ($key>2047) {
-	//HST added
-	break;
-      }
-      $queryG = "CALL b_addBrowseNode($key,\"$value\")";	//add the name value pair for genre to new table	
-      //echo $queryG;
-      include "../../private/db.php";
-      $resG = mysqli_query($link, $queryG);
-      mysqli_close($link);
-				
-      switch ($loop) {
-      case 1:
-	$g1 = $key;
-	break;
-      case 2:
-	$g2 = $key;
-	break;
-      case 3:
-	$g3 = $key;
-	break;
-      }
-				
-      $loop++;
-    }
-			
-    if($salesRank == "")
-      $salesRank = "null";
-			
-    if($title != "")
-      {
-	include "../../private/db.php";
-	if ($publisher->count()==0) {
-	  $publisher="null";
-	}
-	else {
-	  $publisher=mysqli_real_escape_string($link,$publisher);
-	  if (strlen($publisher)>30) {
-	    $publisher=rtrim(substr($publisher,0,30),"\\");
-	  }
-	  $publisher="\"".$publisher."\"";
-	}
-	if ($author->count()==0) {
-	  $author="unknown";
-	}
-	else {
-	  $author=mysqli_real_escape_string($link,$author);
-	  if (strlen($author)>30) {
-	    $author=rtrim(substr($author,0,30),"\\");
-	  }
-	}
-	$author="\"".$author."\"";
-	$title=mysqli_real_escape_string($link,$title);
-	if (strlen($title)>100) {
-	  $title=rtrim(substr($title,0,100),"\\");
-	}
-	$title="\"".$title."\"";
-	$review1 = mysqli_real_escape_string($link,$review1);
-	if (strlen($review1)>500) { $review1=rtrim(substr($review1,0,500),"\\");}
-	$review2 = mysqli_real_escape_string($link,$review2);
-	if (strlen($review2)>500) { $review2=rtrim(substr($review2,0,500),"\\");}
-	$review3 = mysqli_real_escape_string($link,$review3);
-	if (strlen($review3)>500) { $review3=rtrim(substr($review3,0,500),"\\");}
-			
-	$queryInsert = "CALL b_addNewBook(\"$searchparameterdata\",$title, $author,\"$binding\",\"$imageURL\", $dewey, $salesRank,$pubDate,$publisher,$g1,$g2,$g3,$loc)";	             
-	//echo $queryInsert;
-				
-	$res = mysqli_query($link, $queryInsert);
-	if (!$res) {
-	  $err=mysqli_error( $link );
-	  mysqli_close($link);
-	  file_put_contents('/var/ywww/debug/phpDebug',
-			    "anb failed: $queryInsert\n$err\n",
-			    FILE_APPEND);
-	  exit($err);
-	}
-	$queryInsertReviews = "CALL b_insertReviews(\"$searchparameterdata\",\"$review1\",\"$review2\",\"$review3\")";
-	if($review1 != "") {
-	  $res = mysqli_query($link, $queryInsertReviews);
-	  if (!$res) {
-	    $err=mysqli_error( $link );
-	    mysqli_close($link);
-	    file_put_contents('/var/ywww/debug/phpDebug',
-			      "anr failed: $queryInsertReviews\n",
-			      FILE_APPEND);
-	    exit($err);
-	  }
-	}
-	mysqli_close($link);	//do not remove. reset is needed otherwise mysqli_fetch_array doesn't work after first loop		
-      }
-
-    echo $output;
-  }
-}
-
-function getAmazonDetLocal($go,$language,$loc,
-			   $page,$operation,$searchparameter,
-			   $searchparameterdata,
-			   $show_array,$show_url,$show_xml)
-{
-  global $output;
-  //look up info from db	
-  include "../../private/db.php"; 
-  $query = "CALL b_getBookInfo('$searchparameterdata', $loc)";
-  //echo $query;
-  $res = mysqli_query($link, $query) or exit( mysqli_error( $link ));
-	
-  $output = "";
-  $output .=  "<?xml version=\"1.0\" encoding=\"UTF-8\"?>";
-  $output .=  "<Details>";
-  if ( mysqli_num_rows( $res ) > 0 )
-    {
-      $rows=mysqli_fetch_array($res, MYSQLI_ASSOC);
-      mysqli_close($link);	//do not remove. reset is needed otherwise mysqli_fetch_array doesn't work after first loop						
-      $output .=  "<ASIN>" . $searchparameterdata . "</ASIN>";
-      $output .=  "<Title>" . htmlspecialchars($rows["Title"]) . "</Title>";			
-      $output .=  "<Author>" . htmlspecialchars($rows["Author"]) . "</Author>";
-      $output .=  "<Binding>" . htmlspecialchars($rows["Binding"]) . "</Binding>";
-      $output .=  "<Dewey>" . htmlspecialchars($rows["DeweyDecimal"]) . "</Dewey>";
-      $output .=  "<ImageURL>" . htmlspecialchars($rows["ImageURL"]) . "</ImageURL>";
-      $output .=  "<SalesRank>" . htmlspecialchars($rows["SalesRank"]) . "</SalesRank>";
-      $output .=  "<PublicationDate>" . htmlspecialchars($rows["PublicationDate"]) . "</PublicationDate>";
-      $output .=  "<Publisher>" . htmlspecialchars($rows["Publisher"]) . "</Publisher>";
-      $output .=  "<Genre1>" . htmlspecialchars($rows["Genre1"]) . "</Genre1>";
-      $output .=  "<Genre2>" . htmlspecialchars($rows["Genre2"]) . "</Genre2>";
-      $output .=  "<Genre3>" . htmlspecialchars($rows["Genre3"]) . "</Genre3>";
-      $output .=  "<ProductGroup>Book</ProductGroup>";
-      $output .=  "<Error>AccountLimitExceeded</Error>";
-			
-    }
-  else {
-    mysqli_close($link);	//do not remove. reset is needed otherwise mysqli_fetch_array doesn't work after first loop
-  }
-  $output .=  "</Details>";
-  echo $output;
-}
-
-function findGenre($browseNode, &$ID, &$gen)
-{
-	if($browseNode->Name == "Subjects")
-	{
-		 return true;		 
-	}
-	else
-	{
-		if($browseNode->Ancestors->BrowseNode)
-		{
-			if(findGenre($browseNode->Ancestors->BrowseNode, $ID, $gen) == true)
-			{
-				$gen = $browseNode->Name;
-				$ID = $browseNode->BrowseNodeId;
-			}		
-		}
-		return false;		
-	}
-}
-
-if(!isset($ret))
-{
-	include "aws_signed_request.php";
-	getAmazonDet('default',0,'us');	//will get overwritten from URI params
-	// by the foreach ($Adefault as ... loop above
-}
-/*Caught oneSimpleXMLElement Object
-(
-    [OperationRequest] => SimpleXMLElement Object
-        (
-            [RequestId] => d2eaacba-2411-44e7-b268-f23a20167330
-            [Arguments] => SimpleXMLElement Object
-                (
-                    [Argument] => Array
-                        (
-                            [0] => SimpleXMLElement Object
-                                (
-                                    [@attributes] => Array
-                                        (
-                                            [Name] => AWSAccessKeyId
-                                            [Value] => AKIAIHTNWC7L6LOUY4LQ 
-                                        )
-
-                                )
-
-                            [1] => SimpleXMLElement Object
-                                (
-                                    [@attributes] => Array
-                                        (
-                                            [Name] => AssociateTag
-                                            [Value] => bookwhack-21
-                                        )
-
-                                )
-
-                            [2] => SimpleXMLElement Object
-                                (
-                                    [@attributes] => Array
-                                        (
-                                            [Name] => ItemId
-                                            [Value] => B004Q3Q3Y4
-                                        )
-
-                                )
-
-                            [3] => SimpleXMLElement Object
-                                (
-                                    [@attributes] => Array
-                                        (
-                                            [Name] => ItemPage
-                                            [Value] => 1
-                                        )
-
-                                )
-
-                            [4] => SimpleXMLElement Object
-                                (
-                                    [@attributes] => Array
-                                        (
-                                            [Name] => Operation
-                                            [Value] => ItemLookup
-                                        )
-
-                                )
-
-                            [5] => SimpleXMLElement Object
-                                (
-                                    [@attributes] => Array
-                                        (
-                                            [Name] => ResponseGroup
-                                            [Value] => ItemAttributes,Reviews,EditorialReview,OfferSummary,Offers,Images,AlternateVersions,SalesRank,BrowseNodes
-                                        )
-
-                                )
-
-                            [6] => SimpleXMLElement Object
-                                (
-                                    [@attributes] => Array
-                                        (
-                                            [Name] => ReviewSort
-                                            [Value] => -HelpfulVotes
-                                        )
-
-                                )
-
-                            [7] => SimpleXMLElement Object
-                                (
-                                    [@attributes] => Array
-                                        (
-                                            [Name] => Service
-                                            [Value] => AWSECommerceService
-                                        )
-
-                                )
-
-                            [8] => SimpleXMLElement Object
-                                (
-                                    [@attributes] => Array
-                                        (
-                                            [Name] => Timestamp
-                                            [Value] => 2016-12-15T23:12:34Z
-                                        )
-
-                                )
-
-                            [9] => SimpleXMLElement Object
-                                (
-                                    [@attributes] => Array
-                                        (
-                                            [Name] => Version
-                                            [Value] => 2011-08-01
-                                        )
-
-                                )
-
-                            [10] => SimpleXMLElement Object
-                                (
-                                    [@attributes] => Array
-                                        (
-                                            [Name] => Signature
-                                            [Value] => SUXfFZHQ74Joc+WDLx87uzemTdtHijNohykqafJXYKQ=
-                                        )
-
-                                )
-
-                        )
-
-                )
-
-            [RequestProcessingTime] => 0.3518217620000000
-        )
-
-    [Items] => SimpleXMLElement Object
-        (
-            [Request] => SimpleXMLElement Object
-                (
-                    [IsValid] => True
-                    [ItemLookupRequest] => SimpleXMLElement Object
-                        (
-                            [IdType] => ASIN
-                            [ItemId] => B004Q3Q3Y4
-                            [ResponseGroup] => Array
-                                (
-                                    [0] => ItemAttributes
-                                    [1] => Reviews
-                                    [2] => EditorialReview
-                                    [3] => OfferSummary
-                                    [4] => Offers
-                                    [5] => Images
-                                    [6] => AlternateVersions
-                                    [7] => SalesRank
-                                    [8] => BrowseNodes
-                                )
-
-                            [VariationPage] => All
-                        )
-
-                    [Errors] => SimpleXMLElement Object
-                        (
-                            [Error] => SimpleXMLElement Object
-                                (
-                                    [Code] => AWS.InvalidParameterValue
-                                    [Message] => B004Q3Q3Y4 is not a valid value for ItemId. Please change this value and retry your request.
-                                )
-
-                        )
-
-                )
-
-        )
-
-)
-*/
-	/*$xml = new SimpleXMLElement("<?xml version=\"1.0\"?><ItemLookupErrorResponse xmlns=\"http://ecs.amazonaws.com/doc/2009-03-31/\"><Error><Code>AccountLimitExceeded</Code><Message>Account limit of 2056 requests per hour exceeded.</Message></Error><RequestID>290ed059-730c-4789-93b4-6d21e11053d3</RequestID></ItemLookupErrorResponse>");*/
-?>
+<?php
+
+include_once "doAmazonRequest.inc";
+
+function getAmazonDet($isbn,$go,$localeIn)
+{
+  $Adefault=array(
+		  'language'           =>'en',           //what language to render the page in
+		  'locale'             =>$localeIn,           //which server's products? available: ca,de,fr,jp,uk,us
+		  //'mode'               =>'books',        //what product category?
+		  'page'               =>1,              //first page to show (we are counting from 1 not 0)
+		  //'search'             =>'Machiavelli',  //what to search for?
+		  'operation'          =>'ItemLookup',   //what to do?	//ItemSearch
+		  'searchindex'        =>'Books',        //what product category for search?
+		  'searchparameter'    =>'ItemId',       //what kind of search?
+		  'searchparameterdata'=>$isbn,  //what to search for?
+		  //here some debugging flags you can put at the end of the URL to call this script with, like: '?show_array=true'
+		  'show_array'         =>false,          //debug: show complete incoming array? You can use this to see what other information Amazon is sending
+		  'show_url'           =>false,          //debug: show XML request url to be send to Amazon?
+		  'show_xml'           =>false,          //debug: show incoming XML code from Amazon?
+		  );
+  //change the debug options to true if you want to activate them or call the script with '?show_array=true' to see what actual information you're getting from Amazon and how little my standard script is actually showing of it
+  //for all parameters see if the user has overruled it or use the default
+  foreach ($Adefault as $i=>$d) {
+    $$i=isset($_GET[$i])?$_GET[$i]:$d;
+  }
+  switch($locale){
+  case "us": 
+    $loc = 0;
+    break;
+  case "uk": 
+    $loc = 1;
+    break;
+  case "ca": 
+    $loc = 2;
+    break;
+  case "de": 
+    $loc = 3;
+    break;
+  case "fr": 
+    $loc = 4;
+    break;
+  };		
+
+  try {  
+    return getAmazonDetRemote($go,$language,$locale,$loc,
+			      $page,$operation,$searchparameter,
+			      $searchparameterdata,
+			      $show_array,$show_url,$show_xml);
+  }
+  catch (Exception $e) {
+    return getAmazonDetLocal($go,$language,$loc,
+			     $page,$operation,$searchparameter,
+			     $searchparameterdata,
+			     $show_array,$show_url,$show_xml);
+  }
+}
+
+function getAmazonDetRemote($go,$language,$locale,$loc,
+			    $page,$operation,$searchparameter,
+			    $searchparameterdata,
+			    $show_array,$show_url,$show_xml)
+{
+  global $output, $Aassociates_id, $Aserver;
+
+  //if(go != 1)
+  //include "aws_signed_request.php";  
+  //this is the data that is used to form the request for AWS
+  //this is the part that is search specific
+  $parameters=array(
+		    'Operation'       =>$operation              ,
+		    //'Keywords'        =>urlencode($search)      ,
+		    "$searchparameter"=>$searchparameterdata    ,
+		    'ItemPage'        =>$page                   ,  //which page?
+		    'AssociateTag'    =>$Aassociates_id[$locale],
+		    'ResponseGroup'   =>'ItemAttributes,Reviews,EditorialReview,OfferSummary,Offers,Images,AlternateVersions,SalesRank,BrowseNodes'                ,  //Small, Medium, Large or SellerListing,'BrowseNodes',// ,
+		    'ReviewSort'	  =>'-HelpfulVotes'
+		    );
+
+  if (isset($searchindex) && $searchindex!='Books') {
+    // HST did this
+    // Used to be in $parameters init above, but
+    // that caused an error:
+    // If idType equals ASIN, SearchIndex cannot be present
+    //'SearchIndex'     =>$searchindex      ,  //Books for example.
+    $parameters['SearchIndex']=$searchindex;
+  }
+  $xml=doAmazonRequest($Aserver[$locale]['ext'],$parameters,3,'i');  // may throw exception
+  set_error_handler(function () {
+      global $output;
+      file_put_contents('/var/ywww/debug/phpDebug',
+			"Caught one?: ".$searchparameterdata,
+			FILE_APPEND);
+      file_put_contents('/var/ywww/debug/phpDebug',
+			print_r($output, TRUE)."\n",
+			FILE_APPEND);
+    } );
+  $review = $xml->Items->Item->CustomerReviews->IFrameURL;
+  restore_error_handler();
+  //echo $review;
+  if ($review != "")
+    {
+      $review1 = "";
+      $review2 = "";
+      $review3 = "";
+      $text = @file_get_contents($review . "&truncate=300");
+      $removeTop1 = preg_replace('~<div class="crIFrameHeaderLeftColumn">(.*?)<div class="crIFrameHeaderHistogram">~si', '', $text);
+      $removeTop2 = preg_replace('~<div class="crIFrameHeaderHistogram">(.*?)<div class="crIframeReviewList">~si', '', $text);
+      if (preg_match('~<body[^>]*>(.*?)</body>~si', $removeTop2, $body)){ $getBody = trim($body[1]); } else { $getBody = $removeTop2;}
+      $removeDiv = preg_replace('~<div[^>]*>(.*?)</div>~si', '', $getBody);
+      $removeCloseDivs = preg_replace('/<\/div>/','', $removeDiv);
+      $setBoundary = str_replace('<!-- BOUNDARY -->','BOTTOM-TOP', $removeCloseDivs);
+      //replace <!-- BOUNDARY --> with BOTTOM-TOP
+      $remove1 = '~<table cellpadding="0"(.*?)%">~s';
+      $setBoundary = preg_replace($remove1,'', $setBoundary);
+      $remove2 = '~</td><td bg(.*?)</table>~s';
+      $setBoundary = preg_replace($remove2,'', $setBoundary);
+      $remove3 = '~<a name=(.*?)</a>~s';
+      $setBoundary = preg_replace($remove3,'', $setBoundary);
+      $setBoundary2 = str_replace('<br />','', $setBoundary);
+      //remove all extra crap;
+      $setBoundary3 = str_replace('</td>','BOTTOM', $setBoundary2);
+      //replace </td> with BOTTOM
+		
+      if (preg_match_all('~TOP(.*?)BOTTOM~s', $setBoundary3, $reviews))
+	{ 
+	  $reviewContents = $reviews[1];
+	  //print_r($reviewContents);
+	  $review1 = trim($reviewContents[0]);
+	  $review1 = str_replace("\n", "", $review1);
+	  $review1 = str_replace("\r", "", $review1);
+	  if (isset($reviewContents[1])) {
+	    $review2 = trim($reviewContents[1]);
+	    $review2 = str_replace("\n", "", $review2);
+	    $review2 = str_replace("\r", "", $review2);
+	  }
+	  else {
+	    $review2 = "";
+	  }
+	  if (isset($reviewContents[2])) {
+	    $review3 = trim($reviewContents[2]);
+	    $review3 = str_replace("\n", "", $review3);
+	    $review3 = str_replace("\r", "", $review3);
+	  }
+	  else {
+	    $review3 = "";
+	  }
+	}
+      else
+	{
+	  $review1 = "";
+	  $review2 = "";
+	  $review3 = "";
+	  //echo "EPIC FAIL";
+	}
+
+      unset($xml->Items->Item->CustomerReviews);
+      $xdoc = new DomDocument;
+      $xdoc->loadXML($xml->asXML());
+		
+      $cReviews = $xdoc ->createElement('CustomerReviews');
+      $cReviewHolder = $xdoc ->createElement('Review');
+      $cReview = $xdoc ->createElement('Content');
+      $cReviewHolder2 = $xdoc ->createElement('Review');
+      $cReview2 = $xdoc ->createElement('Content');	
+      $cReviewHolder3 = $xdoc ->createElement('Review');
+      $cReview3 = $xdoc ->createElement('Content');
+		
+      $txtNode = $xdoc ->createTextNode ($review1);
+      $cReview -> appendChild($txtNode);
+		
+      $txtNode2 = $xdoc ->createTextNode ($review2);
+      $cReview2 -> appendChild($txtNode2);
+		
+      $txtNode3 = $xdoc ->createTextNode ($review3);
+      $cReview3 -> appendChild($txtNode3);
+		
+      $cReviewHolder -> appendChild($cReview);
+      $cReviewHolder2 -> appendChild($cReview2);
+      $cReviewHolder3 -> appendChild($cReview3);
+		
+      $cReviews -> appendChild($cReviewHolder);
+      $cReviews -> appendChild($cReviewHolder2);
+      $cReviews -> appendChild($cReviewHolder3);
+		
+      $xdoc->documentElement->childNodes->item(1)->childNodes->item(1)->appendChild($cReviews);
+      $newXML = simplexml_import_dom($xdoc);
+      $output = $newXML->asXml();
+    }
+	
+  if($go == 1) {
+    $item = $xml->Items->Item[0];
+    if ($item && $item->ItemAttributes && $item->ItemAttributes->Title) {
+      $title = $item->ItemAttributes->Title; }
+    else { $title = "[no title]"; };
+    file_put_contents('/var/ywww/debug/phpDebug',"win: $title\n",
+		      FILE_APPEND);
+    return $output;
+  }
+  else {
+    if ($xml->Items->Item) {
+      $title = $xml->Items->Item[0]->ItemAttributes->Title;
+      $author = $xml->Items->Item[0]->ItemAttributes->Author;
+      $binding = $xml->Items->Item[0]->ItemAttributes->Binding;
+      $dewey = $xml->Items->Item[0]->ItemAttributes->DeweyDecimalNumber;
+      if($dewey == "")
+	$dewey = "null";
+      $imageURL = $xml->Items->Item[0]->MediumImage->URL;
+      $salesRank = $xml->Items->Item[0]->SalesRank;
+      $pubDate = $xml->Items->Item[0]->ItemAttributes->PublicationDate;
+      if (strlen($pubDate)==4) { $pubDate=$pubDate."-01-01";}
+      if (strlen($pubDate)==7) { $pubDate=$pubDate."-01";}
+      if (strlen($pubDate)==0) {
+	$pubDate="null";
+      }
+      else {
+	$pubDate="\"$pubDate\"";
+      }
+      $publisher = $xml->Items->Item[0]->ItemAttributes->Publisher;
+    }
+    else {
+      $title = $salesRank = "";
+      $dewey = "null";
+    }
+			
+    $genreID = "";
+    $genre = "";		
+    $genArr = array();
+
+    if ($xml->Items->Item[0] && $xml->Items->Item[0]->BrowseNodes) {
+      for($i=0;$i<sizeof($xml->Items->Item->BrowseNodes->BrowseNode);$i++){	
+	//sexy recursive function
+	findGenre($xml->Items->Item->BrowseNodes->BrowseNode[$i], $genreID, $genre);
+				
+	if($genre != "")
+	  $genArr[strval($genreID)] = strval($genre);
+	//$genArr[$i] = array(strval($genreID) => strval($genre));
+
+	//echo $genre;
+	//echo $genreID;
+				
+	$genre = "";
+	$genreID = "";
+      }
+    }
+			
+    $g1 = "null";
+    $g2 = "null";
+    $g3 = "null";
+    $loop = 1;
+			
+    foreach ($genArr as $key => $value) {
+      //echo "$key => $value";
+      if ($key>2047) {
+	//HST added
+	break;
+      }
+      $queryG = "CALL b_addBrowseNode($key,\"$value\")";	//add the name value pair for genre to new table	
+      //echo $queryG;
+      include "../../private/db.php";
+      $resG = mysqli_query($link, $queryG);
+      mysqli_close($link);
+				
+      switch ($loop) {
+      case 1:
+	$g1 = $key;
+	break;
+      case 2:
+	$g2 = $key;
+	break;
+      case 3:
+	$g3 = $key;
+	break;
+      }
+				
+      $loop++;
+    }
+			
+    if($salesRank == "")
+      $salesRank = "null";
+			
+    if($title != "")
+      {
+	include "../../private/db.php";
+	if ($publisher->count()==0) {
+	  $publisher="null";
+	}
+	else {
+	  $publisher=mysqli_real_escape_string($link,$publisher);
+	  if (strlen($publisher)>30) {
+	    $publisher=rtrim(substr($publisher,0,30),"\\");
+	  }
+	  $publisher="\"".$publisher."\"";
+	}
+	if ($author->count()==0) {
+	  $author="unknown";
+	}
+	else {
+	  $author=mysqli_real_escape_string($link,$author);
+	  if (strlen($author)>30) {
+	    $author=rtrim(substr($author,0,30),"\\");
+	  }
+	}
+	$author="\"".$author."\"";
+	$title=mysqli_real_escape_string($link,$title);
+	if (strlen($title)>100) {
+	  $title=rtrim(substr($title,0,100),"\\");
+	}
+	$title="\"".$title."\"";
+	$review1 = mysqli_real_escape_string($link,$review1);
+	if (strlen($review1)>500) { $review1=rtrim(substr($review1,0,500),"\\");}
+	$review2 = mysqli_real_escape_string($link,$review2);
+	if (strlen($review2)>500) { $review2=rtrim(substr($review2,0,500),"\\");}
+	$review3 = mysqli_real_escape_string($link,$review3);
+	if (strlen($review3)>500) { $review3=rtrim(substr($review3,0,500),"\\");}
+			
+	$queryInsert = "CALL b_addNewBook(\"$searchparameterdata\",$title, $author,\"$binding\",\"$imageURL\", $dewey, $salesRank,$pubDate,$publisher,$g1,$g2,$g3,$loc)";	             
+	//echo $queryInsert;
+				
+	$res = mysqli_query($link, $queryInsert);
+	if (!$res) {
+	  $err=mysqli_error( $link );
+	  mysqli_close($link);
+	  file_put_contents('/var/ywww/debug/phpDebug',
+			    "anb failed: $queryInsert\n$err\n",
+			    FILE_APPEND);
+	  exit($err);
+	}
+	$queryInsertReviews = "CALL b_insertReviews(\"$searchparameterdata\",\"$review1\",\"$review2\",\"$review3\")";
+	if($review1 != "") {
+	  $res = mysqli_query($link, $queryInsertReviews);
+	  if (!$res) {
+	    $err=mysqli_error( $link );
+	    mysqli_close($link);
+	    file_put_contents('/var/ywww/debug/phpDebug',
+			      "anr failed: $queryInsertReviews\n",
+			      FILE_APPEND);
+	    exit($err);
+	  }
+	}
+	mysqli_close($link);	//do not remove. reset is needed otherwise mysqli_fetch_array doesn't work after first loop		
+      }
+
+    echo $output;
+  }
+}
+
+function getAmazonDetLocal($go,$language,$loc,
+			   $page,$operation,$searchparameter,
+			   $searchparameterdata,
+			   $show_array,$show_url,$show_xml)
+{
+  global $output;
+  //look up info from db	
+  include "../../private/db.php"; 
+  $query = "CALL b_getBookInfo('$searchparameterdata', $loc)";
+  //echo $query;
+  $res = mysqli_query($link, $query) or exit( mysqli_error( $link ));
+	
+  $output = "";
+  $output .=  "<?xml version=\"1.0\" encoding=\"UTF-8\"?>";
+  $output .=  "<Details>";
+  if ( mysqli_num_rows( $res ) > 0 )
+    {
+      $rows=mysqli_fetch_array($res, MYSQLI_ASSOC);
+      mysqli_close($link);	//do not remove. reset is needed otherwise mysqli_fetch_array doesn't work after first loop						
+      $output .=  "<ASIN>" . $searchparameterdata . "</ASIN>";
+      $output .=  "<Title>" . htmlspecialchars($rows["Title"]) . "</Title>";			
+      $output .=  "<Author>" . htmlspecialchars($rows["Author"]) . "</Author>";
+      $output .=  "<Binding>" . htmlspecialchars($rows["Binding"]) . "</Binding>";
+      $output .=  "<Dewey>" . htmlspecialchars($rows["DeweyDecimal"]) . "</Dewey>";
+      $output .=  "<ImageURL>" . htmlspecialchars($rows["ImageURL"]) . "</ImageURL>";
+      $output .=  "<SalesRank>" . htmlspecialchars($rows["SalesRank"]) . "</SalesRank>";
+      $output .=  "<PublicationDate>" . htmlspecialchars($rows["PublicationDate"]) . "</PublicationDate>";
+      $output .=  "<Publisher>" . htmlspecialchars($rows["Publisher"]) . "</Publisher>";
+      $output .=  "<Genre1>" . htmlspecialchars($rows["Genre1"]) . "</Genre1>";
+      $output .=  "<Genre2>" . htmlspecialchars($rows["Genre2"]) . "</Genre2>";
+      $output .=  "<Genre3>" . htmlspecialchars($rows["Genre3"]) . "</Genre3>";
+      $output .=  "<ProductGroup>Book</ProductGroup>";
+      $output .=  "<Error>AccountLimitExceeded</Error>";
+			
+    }
+  else {
+    mysqli_close($link);	//do not remove. reset is needed otherwise mysqli_fetch_array doesn't work after first loop
+  }
+  $output .=  "</Details>";
+  echo $output;
+}
+
+function findGenre($browseNode, &$ID, &$gen)
+{
+	if($browseNode->Name == "Subjects")
+	{
+		 return true;		 
+	}
+	else
+	{
+		if($browseNode->Ancestors->BrowseNode)
+		{
+			if(findGenre($browseNode->Ancestors->BrowseNode, $ID, $gen) == true)
+			{
+				$gen = $browseNode->Name;
+				$ID = $browseNode->BrowseNodeId;
+			}		
+		}
+		return false;		
+	}
+}
+
+if(!isset($ret))
+{
+	include "aws_signed_request.php";
+	getAmazonDet('default',0,'us');	//will get overwritten from URI params
+	// by the foreach ($Adefault as ... loop above
+}
+/*Caught oneSimpleXMLElement Object
+(
+    [OperationRequest] => SimpleXMLElement Object
+        (
+            [RequestId] => d2eaacba-2411-44e7-b268-f23a20167330
+            [Arguments] => SimpleXMLElement Object
+                (
+                    [Argument] => Array
+                        (
+                            [0] => SimpleXMLElement Object
+                                (
+                                    [@attributes] => Array
+                                        (
+                                            [Name] => AWSAccessKeyId
+                                            [Value] => AKIAIHTNWC7L6LOUY4LQ 
+                                        )
+
+                                )
+
+                            [1] => SimpleXMLElement Object
+                                (
+                                    [@attributes] => Array
+                                        (
+                                            [Name] => AssociateTag
+                                            [Value] => bookwhack-21
+                                        )
+
+                                )
+
+                            [2] => SimpleXMLElement Object
+                                (
+                                    [@attributes] => Array
+                                        (
+                                            [Name] => ItemId
+                                            [Value] => B004Q3Q3Y4
+                                        )
+
+                                )
+
+                            [3] => SimpleXMLElement Object
+                                (
+                                    [@attributes] => Array
+                                        (
+                                            [Name] => ItemPage
+                                            [Value] => 1
+                                        )
+
+                                )
+
+                            [4] => SimpleXMLElement Object
+                                (
+                                    [@attributes] => Array
+                                        (
+                                            [Name] => Operation
+                                            [Value] => ItemLookup
+                                        )
+
+                                )
+
+                            [5] => SimpleXMLElement Object
+                                (
+                                    [@attributes] => Array
+                                        (
+                                            [Name] => ResponseGroup
+                                            [Value] => ItemAttributes,Reviews,EditorialReview,OfferSummary,Offers,Images,AlternateVersions,SalesRank,BrowseNodes
+                                        )
+
+                                )
+
+                            [6] => SimpleXMLElement Object
+                                (
+                                    [@attributes] => Array
+                                        (
+                                            [Name] => ReviewSort
+                                            [Value] => -HelpfulVotes
+                                        )
+
+                                )
+
+                            [7] => SimpleXMLElement Object
+                                (
+                                    [@attributes] => Array
+                                        (
+                                            [Name] => Service
+                                            [Value] => AWSECommerceService
+                                        )
+
+                                )
+
+                            [8] => SimpleXMLElement Object
+                                (
+                                    [@attributes] => Array
+                                        (
+                                            [Name] => Timestamp
+                                            [Value] => 2016-12-15T23:12:34Z
+                                        )
+
+                                )
+
+                            [9] => SimpleXMLElement Object
+                                (
+                                    [@attributes] => Array
+                                        (
+                                            [Name] => Version
+                                            [Value] => 2011-08-01
+                                        )
+
+                                )
+
+                            [10] => SimpleXMLElement Object
+                                (
+                                    [@attributes] => Array
+                                        (
+                                            [Name] => Signature
+                                            [Value] => SUXfFZHQ74Joc+WDLx87uzemTdtHijNohykqafJXYKQ=
+                                        )
+
+                                )
+
+                        )
+
+                )
+
+            [RequestProcessingTime] => 0.3518217620000000
+        )
+
+    [Items] => SimpleXMLElement Object
+        (
+            [Request] => SimpleXMLElement Object
+                (
+                    [IsValid] => True
+                    [ItemLookupRequest] => SimpleXMLElement Object
+                        (
+                            [IdType] => ASIN
+                            [ItemId] => B004Q3Q3Y4
+                            [ResponseGroup] => Array
+                                (
+                                    [0] => ItemAttributes
+                                    [1] => Reviews
+                                    [2] => EditorialReview
+                                    [3] => OfferSummary
+                                    [4] => Offers
+                                    [5] => Images
+                                    [6] => AlternateVersions
+                                    [7] => SalesRank
+                                    [8] => BrowseNodes
+                                )
+
+                            [VariationPage] => All
+                        )
+
+                    [Errors] => SimpleXMLElement Object
+                        (
+                            [Error] => SimpleXMLElement Object
+                                (
+                                    [Code] => AWS.InvalidParameterValue
+                                    [Message] => B004Q3Q3Y4 is not a valid value for ItemId. Please change this value and retry your request.
+                                )
+
+                        )
+
+                )
+
+        )
+
+)
+*/
+	/*$xml = new SimpleXMLElement("<?xml version=\"1.0\"?><ItemLookupErrorResponse xmlns=\"http://ecs.amazonaws.com/doc/2009-03-31/\"><Error><Code>AccountLimitExceeded</Code><Message>Account limit of 2056 requests per hour exceeded.</Message></Error><RequestID>290ed059-730c-4789-93b4-6d21e11053d3</RequestID></ItemLookupErrorResponse>");*/
+?>