changeset 2:45ae2aeb2b52

original
author robert
date Wed, 28 Dec 2016 12:44:57 +0000
parents 7a532f1e0f07
children a5e5475bf357
files php/read/getBookDetails.php
diffstat 1 files changed, 318 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/php/read/getBookDetails.php	Wed Dec 28 12:44:57 2016 +0000
@@ -0,0 +1,318 @@
+<?php
+
+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;
+				
+				//if($browseNode->Name == "Literature & Fiction") //to return one level up the tree as well
+				//	return true;
+			}		
+		}
+		return false;		
+	}
+}
+
+if(isset($_GET['isbn'])){
+	$isbn = $_GET['isbn'];
+	if(isset($_GET['locale'])){
+	$locale=$_GET['locale'];
+	
+	switch ($locale) {
+    case "uk":
+        $loc = 1;
+        break;
+    case "us":
+        $loc = 0;
+        break;
+    case "ca":
+        $loc = 2;
+        break;
+	case "de":
+        $loc = 3;
+        break;
+	case "fr":
+        $loc = 4;
+        break;
+	case "":
+        $loc = 0;
+        break;
+	}
+	}
+	else{
+	$loc=0;
+	}
+	$output = "";
+
+	$output .=  "<?xml version=\"1.0\" encoding=\"UTF-8\"?>";
+	$output .=  "<BookDetails>";
+	
+	$proceed = true;
+	include "../../../private/db.php";
+
+	$query = "CALL b_getBookInfo('$isbn', $loc)";
+	//select Timestamp,Title,Author,Binding,DeweyDecimal,ImageURL,SalesRank,PublicationDate,Publisher,Genre1,Genre2,Genre3 from books where ISBN = '$isbn'";
+	//echo $query;
+	$res = mysqli_query($link, $query) or exit( mysqli_error( $link ));
+	
+	if ( mysqli_num_rows( $res ) > 0 )
+	{
+		$rows=mysqli_fetch_array($res, MYSQLI_ASSOC);
+		$timestamp=$rows['Timestamp'];
+		//echo $timestamp;
+		date_default_timezone_set('UTC');
+		$dbStamp = strtotime($timestamp);
+		//echo $dbStamp;
+		$unixTime = time();
+		//echo $unixTime;			
+		$timeDiff = $unixTime - $dbStamp;
+		//echo $timeDiff;
+		
+		if($timeDiff < 2592000) //if it has been updated in the last 30 days 
+		{	
+			$proceed = false;
+			$output .=  "<ISBN>" . $isbn . "</ISBN>";
+			$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>";
+		}
+	}
+	mysqli_close($link);	//do not remove. reset is needed otherwise mysqli_fetch_array doesn't work after first loop
+	include "../../../private/db.php";
+	
+	if($proceed == true)
+	{
+		include "aws_signed_request.php"; 
+		//book does not exist already so look up all the info from browse nodes....
+
+		$Adefault=array(
+		  'language'           =>'en',           //what language to render the page in
+		  'locale'             =>'us',           //which server's products? available: ca,de,fr,jp,uk,us
+		  'page'               =>1,              //first page to show (we are counting from 1 not 0)
+		  'operation'          =>'ItemLookup',   //what to do?	//ItemSearch
+		  'searchparameter'    =>'ItemId',       //what kind of search?
+		  'searchindex'     => 'Books',
+		  'searchparameterdata'=>$isbn,  //what to search for?
+		  'search' =>$isbn,
+		  //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
+
+		$Aassociates_id=array(
+		  'uk' => 'bookwhack-21',
+		  'us' => 'your02b-20',
+		  'ca' => 'book009-20',
+		  'de' => 'book04c-21',
+		  'fr' => 'book07f-21',
+		);
+
+		$Aserver=array(
+		  'ca' => array(
+			'ext' => 'ca'                      ,  //Canadian normal server
+			'nor' => 'http://www.amazon.ca'    ,  //Canadian normal server
+			'xml' => 'http://xml.amazon.com'   ,  //Canadian xml server
+		  ),
+		  'de' => array(
+			'ext' => 'de'                      ,  //German normal server
+			'nor' => 'http://www.amazon.de'    ,  //German normal server
+			'xml' => 'http://xml-eu.amazon.com',  //German xml server
+		  ),
+		  'fr' => array(
+			'ext' => 'fr'                      ,  //French normal server
+			'nor' => 'http://www.amazon.fr'    ,  //French normal server
+			'xml' => 'http://xml-eu.amazon.com',  //French xml server
+		  ),
+		  'jp' => array(
+			'ext' => 'jp'                      ,  //Japanese normal server, not co.jp!
+			'nor' => 'http://www.amazon.co.jp' ,  //Japanese normal server
+			'xml' => 'http://xml.amazon.com'   ,  //Japanese xml server
+		  ),
+		  'uk' => array(
+			'ext' => 'co.uk'                   ,  //UK normal server
+			'nor' => 'http://www.amazon.co.uk' ,  //UK normal server
+			'xml' => 'http://xml-eu.amazon.com',  //UK xml server
+		  ),
+		  'us' => array(
+			'ext' => 'com'                     ,  //USA normal server
+			'nor' => 'http://www.amazon.com'   ,  //USA normal server
+			'xml' => 'http://xml.amazon.com'   ,  //USA xml server
+		  ),
+		);
+			
+		$public_key ="AKIAJBXEHTNCU6LLFNIA";
+		$private_key="Dgyv7aR6uGe3OtY95Dj6hHpDS/UEtyboMWpJchYA";
+
+		//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;
+		}
+
+		  $parameters=array(
+			'Operation'       =>$operation              ,
+			'Keywords'        =>urlencode($search)      ,
+			'SearchIndex'     =>$searchindex            ,  //Books for example.
+			"$searchparameter"=>$searchparameterdata    ,
+			'ItemPage'        =>$page                   ,  //which page?
+			'AssociateTag'    =>$Aassociates_id[$locale],
+			'ResponseGroup'   =>'ItemAttributes,Images,SalesRank,BrowseNodes'
+		  );
+
+
+		$ext=$Aserver[$locale]['ext'];  
+		$file_data=$ext;
+		ksort($parameters);
+		foreach ($parameters as $i=>$d) {
+		  $file_data.='&'.$i.'='.$d;
+		}
+
+		$url=aws_signed_request($ext,$parameters,$public_key,$private_key);  
+		//echo $url;
+
+		$crl = curl_init();
+		$timeout = 5;
+		curl_setopt ($crl, CURLOPT_URL,$url);
+		curl_setopt ($crl, CURLOPT_ENCODING , "gzip"); 
+		curl_setopt ($crl, CURLOPT_RETURNTRANSFER, 1);
+		curl_setopt ($crl, CURLOPT_CONNECTTIMEOUT, $timeout);
+		$out = curl_exec($crl);
+		curl_close($crl);
+
+		//echo $out;
+		
+		$xml = new SimpleXMLElement($out);
+		//use this xml to pull out the necessary information and save it
+	
+		$title="";
+		$author="";
+		$binding="";
+		$dewey="";
+		$imageURL="";
+		$salesRank="";
+		$pubDate="";
+		$publisher="";
+	
+		$title = $xml->Items->Item->ItemAttributes->Title;
+		$author = $xml->Items->Item->ItemAttributes->Author;
+		$binding = $xml->Items->Item->ItemAttributes->Binding;
+		$dewey = $xml->Items->Item->ItemAttributes->DeweyDecimalNumber;
+		if($dewey == "")
+			$dewey = "null";
+		$imageURL = $xml->Items->Item->MediumImage->URL;
+		$salesRank = $xml->Items->Item->SalesRank;
+		$pubDate = $xml->Items->Item->ItemAttributes->PublicationDate;
+		$publisher = $xml->Items->Item->ItemAttributes->Publisher;
+		
+		/*echo $title;
+		echo $author;
+		echo $binding;
+		echo $dewey;
+		echo $imageURL;
+		echo $salesRank;
+		echo $pubDate;
+		echo $publisher;*/
+		
+		$genreID = "";
+		$genre = "";		
+		$genArr = array();
+		$g1 = "null";
+                $g2 = "null";
+                $g3 = "null";
+		if(isset($xml->Items->Item->BrowseNodes->BrowseNode)){		
+		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";
+			$queryG = "CALL b_addBrowseNode($key,\"$value\")";	//add the name value pair for genre to new table	
+			//echo $queryG;
+			$resG = mysqli_query($link, $queryG);
+			
+			switch ($loop) {
+			case 1:
+				$g1 = $key;
+				break;
+			case 2:
+				$g2 = $key;
+				break;
+			case 3:
+				$g3 = $key;
+				break;
+			}
+			
+			$loop++;
+		}
+		}
+		
+		if($salesRank == "")
+			$salesRank = "null";
+		
+		mysqli_close($link);	//do not remove. reset is needed otherwise mysqli_fetch_array doesn't work after first loop
+		include "../../../private/db.php";
+		
+		$title = strtr($title, '"', "'");	
+		$queryInsert = "CALL b_addNewBook(\"$isbn\",\"$title\", \"$author\",\"$binding\",\"$imageURL\", $dewey, $salesRank,\"$pubDate\",\"$publisher\",$g1,$g2,$g3,$loc)";	
+		//echo $queryInsert;
+		
+		$resG = mysqli_query($link, $queryInsert) or exit( mysqli_error( $link ));
+		mysqli_close($link);	//do not remove. reset is needed otherwise mysqli_fetch_array doesn't work after first loop		
+
+		
+		$output .=  "<ISBN>" . htmlspecialchars($isbn) . "</ISBN>";
+		$output .=  "<Title>" . htmlspecialchars($title) . "</Title>";
+		$output .=  "<Author>" . htmlspecialchars($author) . "</Author>";
+		$output .=  "<Binding>" . htmlspecialchars($binding) . "</Binding>";
+		$output .=  "<Dewey>" . htmlspecialchars($dewey) . "</Dewey>";
+		$output .=  "<ImageURL>" . htmlspecialchars($imageURL) . "</ImageURL>";
+		$output .=  "<SalesRank>" . htmlspecialchars($salesRank) . "</SalesRank>";
+		$output .=  "<PublicationDate>" . htmlspecialchars($pubDate) . "</PublicationDate>";
+		$output .=  "<Publisher>" . htmlspecialchars($publisher) . "</Publisher>";
+		$output .=  "<Genre1>" . htmlspecialchars($g1) . "</Genre1>";
+		$output .=  "<Genre2>" . htmlspecialchars($g2) . "</Genre2>";
+		$output .=  "<Genre3>" . htmlspecialchars($g3) . "</Genre3>";	
+		$output .=  "<ProductGroup>Book</ProductGroup>";
+	}
+	
+	$output .=  "</BookDetails>";
+	
+	echo $output;
+}
+?>