<?
/**
 * Price Grabber Feed Parser 
 * Yannick 3/31/10
 * Version 2.14
 *
 * @Array   All parameter should be passed in an array
 * Array[KEY]=>[VALUE]
 */

#########################################
#		PRICEGRABER LISTING SEARCH		#
#########################################
function PriceGrabberSearch($data)
{
	##### FETCH INPUT #####
	//	$data['v'] = '2.14';
	$data['v'] = '2.3';
	//	$data['offers'] = 1;
	$data['key'] = '828f05299b2';
	//	$data['no_filter'] = '1';
	if(!isset($data['limit']) || $data['limit'] < 1) {
		$data['limit'] = '20';
	}
	$filters = '';
	if(isset($data['filters'])) {
		$filters = $data['filters'];
		unset($data['filters']);
	}
	$expire = 3600 * 18;

	foreach ($data as $key => $value){
		$Param .= $key.'='.$value.'&';
		if (!stristr($key,"session")){
			$Param_mkey .= $key.'='.$value.'&';
		}
	}	
	if (stristr($_SERVER['HTTP_HOST'],"cheapstuff") || 1 ){
		$cache = 1;
	}
	if ($cache){
		class lib_PGMemcache extends Memcache {
			static private $instance = null;
			static private $port = 11211;
			static function mPGGet($ServerArray = array("192.168.30.32")) {
				if (self::$instance == null) {
					self::$instance = new Memcache;
					foreach  ($ServerArray as $Server)
						self::$instance->addServer($Server, self::$port);
				}
				return self::$instance;
			}
		}
		$mkey = "PG_search_".md5($Param_mkey.$filters);
		if ($Data = lib_PGMemcache::mPGGet()->get($mkey)) {
			$Data["cache"] = 1;
			if (is_array($Data) && count($Data) > 0){
				return $Data;
			} else {
				return "";
			}
		}
	}

	###### INIT DOM XML #####
	$Feed = new DomDocument();
	$FeedURL = "http://ah.pricegrabber.com/search_xml.php?".$Param.$filters;
	//$FeedURL = "http://sws.pricegrabber.com/search_xml.php?".$Param;
	//	prexit($FeedURL);
	###### CURL & PARSE XML #####
	$CurlData = array(	"url" => $FeedURL,
	"timeout" => '2',
	"ua" => $_SERVER['HTTP_USER_AGENT'] );

	$Feed->loadXML(curl_get_contents($CurlData));
	if($_GET['debug'] == 'msa123')
	echo '<hr>'.$FeedURL;

	############### RELATED SEARCH	###################
	if($Feed->getElementsByTagName("other_categories")->item(0))
	{
		for($i = 0; $Feed->getElementsByTagName("other_categories")->item($i); $i++)
		{
			$RelatedSearch[] = $Feed->getElementsByTagName("other_categories")->item($i)->nodeValue;
		}
	}

	########### RESULTS	LISTING	 TYPE 2	###############
	if ($Feed->getElementsByTagName("product")->item(0)) {

		$Data['Product']['RelatedSearch'] = $RelatedSearch;
		$Data['Product']['TotalMatches'] = $Feed->getElementsByTagName("num_results")->item(0)->nodeValue;
		$ResultsListing = $Feed->getElementsByTagName("product");

		for($i = 0; $ResultsListing->item($i); $i++) {
			$Data['Product'][$i]['Availability'] = "";
			$Data['Product'][$i]['id'] = $ResultsListing->item($i)->getElementsByTagName("masterid")->item(0)->nodeValue;
			$Data['Product'][$i]['Url'] = $ResultsListing->item($i)->getElementsByTagName("url")->item(0)->nodeValue;
			$Data['Product'][$i]['Title'] =  $ResultsListing->item($i)->getElementsByTagName("title")->item(0)->nodeValue;
			$Data['Product'][$i]['TitleShort'] =  $ResultsListing->item($i)->getElementsByTagName("title_short")->item(0)->nodeValue;
			$Data['Product'][$i]['Description'] = $ResultsListing->item($i)->getElementsByTagName("description")->item(0)->nodeValue;
			$Data['Product'][$i]['Manufacturer'] = $ResultsListing->item($i)->getElementsByTagName("manuf")->item(0)->nodeValue;

			if ($ResultsListing->item($i)->getElementsByTagName("image_large")->item(0)) {
				$Data['Product'][$i]['Image'] =  $ResultsListing->item($i)->getElementsByTagName("image_large")->item(0)->nodeValue;
			}

			if($ResultsListing->item($i)->getElementsByTagName("price")->item(0)->nodeValue) {

				$Data['Product'][$i]['Price'] =  $ResultsListing->item($i)->getElementsByTagName("price")->item(0)->nodeValue;
				$sellers = $ResultsListing->item($i)->getElementsByTagName("price")->item(0)->getAttribute('sellers');
				$Data['Product'][$i]['sellers'] = $sellers;

				if($sellers) {

					$sellers_obj =  $ResultsListing->item($i)->getElementsByTagName("offer");
					if($sellers_obj->item(0)->nodeValue) {

						for ($k=0; $k<$sellers ; $k++) {

							if($sellers_obj->item($k)->getElementsByTagName("avail")->item(0)->nodeValue == 'yes') {

								$Data['Product'][$i]['Availability'] = "IN STOCK";
								break;
							}
						}
					}
				}
			}
			if ($ResultsListing->item($i)->getElementsByTagName("partnum")->item(0)->nodeValue) {

				$Data['Product'][$i]['PartNum'] =  $ResultsListing->item($i)->getElementsByTagName("partnum")->item(0)->nodeValue;
			}
		}
	}

	########### RESULTS	LISTING	 TYPE 2	###############
	if ($Feed->getElementsByTagName("filter")->item(0))
	{
		$Filters = $Feed->getElementsByTagName("filter");
		for($i = 0; $Filters->item($i); $i++)
		{
			$Data['Filter'][$i]['name'] = $Filters->item($i)->getElementsByTagName("name")->item(0)->nodeValue;
			$Data['Filter'][$i]['var_name'] = $Filters->item($i)->getElementsByTagName("var_name")->item(0)->nodeValue;
			for($j=0;$j<100;$j++) {
				if($Filters->item($i)->getElementsByTagName("value")->item($j)) {
					$Data['Filter'][$i]['options'][$j]['value'] = $Filters->item($i)->getElementsByTagName("value")->item($j)->nodeValue;
					$Data['Filter'][$i]['options'][$j]['prod_count'] = $Filters->item($i)->getElementsByTagName("value")->item($j)->getAttribute('nr');
					$Data['Filter'][$i]['options'][$j]['name'] = $Filters->item($i)->getElementsByTagName("v_name")->item($j)->nodeValue;
				}
				else {
					break;
				}
			}
		}
	}

	if ($cache){
		if (is_array($Data) && count($Data) > 0){
			store_pg_search_cache($Data,$mkey,$expire);
		} else {
			store_pg_search_cache("NONE000",$mkey,$expire);
		}
	}
	return $Data;
}

#########################################
#		PRICEGRABER DETAIL LISTING		#
#########################################
function PriceGrabberDetail($data)
{
	##### FETCH INPUT #####
	$data['v'] = '2.14';
	$data['key'] = '828f05299b2';
	$data['offers'] = '1';

	foreach ($data as $key => $value){
		$Param .= $key.'='.$value.'&';
		if (!stristr($key,"session")){
			$Param_mkey .= $key.'='.$value.'&';
		}
	}
	if (stristr($_SERVER['HTTP_HOST'],"cheapstuff") ){
		$cache = 1;
	}
	$expire = 3600 * 24;

	if ($cache){

		class lib_PGMemcacheD extends Memcache {
			static private $instance = null;
			static private $port = 11211;
			static function mPGGet($ServerArray = array("192.168.30.32")) {
				if (self::$instance == null) {
					self::$instance = new Memcache;
					foreach  ($ServerArray as $Server)
						self::$instance->addServer($Server, self::$port);
				}
				return self::$instance;
			}
		}
		$mkey = "PG_detail_".md5($Param_mkey);
		if ($Data = lib_PGMemcacheD::mPGGet()->get($mkey)) {
			$Data["cache"] = 1;
			if (is_array($Data) && count($Data) > 0){
				return $Data;
			} else {
				return "";
			}
		}
	}

	###### INIT DOM XML #####
	$Feed = new DomDocument();
	$FeedURL = "http://sws.pricegrabber.com/search_xml.php?".$Param;

	###### CURL & PARSE XML #####
	$CurlData = array(	"url" => $FeedURL,
	"timeout" => '2',
	"ua" => $_SERVER['HTTP_USER_AGENT'] );

	$Feed->loadXML(curl_get_contents($CurlData));
	if($_GET['debug'] == 'msa123')
		echo '<hr>'.$FeedURL;

	########### RESULTS	LISTING	###############
	if ($Feed->getElementsByTagName("product")->item(0))
	{
		$Data['Title'] = $Feed->getElementsByTagName("title")->item(0)->nodeValue;
		$Data['TitleShort'] =  $Feed->getElementsByTagName("title_short")->item(0)->nodeValue;
		$Data['Image'] = $Feed->getElementsByTagName("image_large")->item(0)->nodeValue;
		$Data['Description'] = $Feed->getElementsByTagName("description")->item(0)->nodeValue;
		$Data['Stores'] = $Feed->getElementsByTagName("num_results")->item(0)->nodeValue;
		$Data['Price'] = $Feed->getElementsByTagName("price")->item(0)->nodeValue;
		$Data['Manufacturer'] = $Feed->getElementsByTagName("manuf")->item(0)->nodeValue;

		$offer_listings = $Feed->getElementsByTagName("offer");
		for($i = 0; $offer_listings->item($i); $i++)
		{
			$Data['Listing'][$i]['Retailer'] = $offer_listings->item($i)->getElementsByTagName("retailer")->item(0)->nodeValue;
			$Data['Listing'][$i]['Price'] = $offer_listings->item($i)->getElementsByTagName("price")->item(0)->nodeValue;
			$Data['Listing'][$i]['Availability']   = $offer_listings->item($i)->getElementsByTagName("avail")->item(0)->nodeValue;
			$Data['Listing'][$i]['Logo'] = $offer_listings->item($i)->getElementsByTagName("retailer_logo")->item(0)->nodeValue;
			$Data['Listing'][$i]['Rating'] = $offer_listings->item($i)->getElementsByTagName("pur_rating")->item(0)->nodeValue;
			$Data['Listing'][$i]['Url'] = $offer_listings->item($i)->getElementsByTagName("url")->item(0)->nodeValue;
		}
	}

	if ($cache){
		if (is_array($Data) && count($Data) > 0){
			store_pg_detail_cache($Data,$mkey,$expire);
		} else {
			store_pg_detail_cache("NONE000",$mkey,$expire);
		}
	}

	return $Data;
}

#########################################
#		PRICEGRABER POPULAR	ITEMS		#
#########################################
function PriceGrabberPopularItems($data)
{
	##### FETCH INPUT #####
	$data['v'] = '2.14';
	$data['key'] = '828f05299b2';

	foreach ($data as $key => $value)
	$Param .= $key.'='.$value.'&';

	###### INIT DOM XML #####
	$Feed = new DomDocument();
	$FeedURL = "http://sws.pricegrabber.com/search_xml.php?".$Param;

	###### CURL & PARSE XML #####
	$CurlData = array(	"url" => $FeedURL,
	"timeout" => '2',
	"ua" => $_SERVER['HTTP_USER_AGENT'] );

	$Feed->loadXML(curl_get_contents($CurlData));
	if($_GET['debug'] == 'msa123')
	echo '<hr>'.$FeedURL;

	########### RESULTS	LISTING	###############
	if ($Feed->getElementsByTagName("product")->item(0))
	{
		for($i = 0; $Feed->getElementsByTagName("product")->item($i); $i++)
		{
			$Data[$i]['ID'] = $Feed->getElementsByTagName("masterid")->item($i)->nodeValue;
			$Data[$i]['Title'] = $Feed->getElementsByTagName("title_short")->item($i)->nodeValue;
			$Data[$i]['Image'] = $Feed->getElementsByTagName("image_medium")->item($i)->nodeValue;
			$Data[$i]['ImageLarge'] = $Feed->getElementsByTagName("image_large")->item($i)->nodeValue;
			$Data[$i]['Description'] = $Feed->getElementsByTagName("description")->item($i)->nodeValue;
			$Data[$i]['Price'] = $Feed->getElementsByTagName("price")->item($i)->nodeValue;
			$Data[$i]['Url'] = $Feed->getElementsByTagName("url")->item($i)->nodeValue;
		}
	}

	return $Data;
}

function store_pg_search_cache($data,$mkey,$expire){
	lib_PGMemcache::mPGGet()->set($mkey, $data, 0, $expire);
}
function store_pg_detail_cache($data,$mkey,$expire){
	lib_PGMemcacheD::mPGGet()->set($mkey, $data, 0, $expire);

}

?>