<?php
/**
 * Kelkoo Feed Parser 
 * Yannick 6/1/11
 * Version V2
 * http://developer.kelkoo.com/
 *
 * @Array   All parameter should be passed in an array
 * Array[KEY]=>[VALUE]
 * Required Input : 
 * domain (view domain-country list )
 * Search
 * pID
 * key
 * Optional Input :
 * orderby
 * page
 * filter
 */

#########################################
#		Kelkoo LISTING SEARCH		#
#########################################
function KelkooSearch($data)
{
	##### FETCH INPUT #####
	if($data['orderby'])
	$orderby = $data['orderby'];
	else
	$orderby = 'default_ranking';

	if($data['page'] && $data['page'] > 1)
	{
		$start = ($data['page']-1) *  20;
	}
	else
	{
		$start = 1;
	}

	if(!isset($data['results']) || $data['results'] < 1) {
		$data['results'] = '20';
	}

	if($data['filter'])
	{
		$Filter = split(',',$data['filter']);
		$XmlRefinement = '&refinement='.$data['filter'];
	}

	###### INIT DOM XML #####
	$ResultFeed = new DomDocument();
	$Query = "/V2/productSearch?query=".urlencode($data['search'])."&sort=".$orderby."&start=".$start."&results={$data['results']}&show_products=1&show_subcategories=1&show_refinements=1".$XmlRefinement;
	$url = UrlSigner('http://'.$data['domain'], $Query, $data['pID'], $data['key']);

	###### CURL & PARSE XML #####
	$CurlData = array(	"url" => $url,
	"timeout" => '4',
	"ua" => $_SERVER['HTTP_USER_AGENT'] );
	$xml = curl_get_contents($CurlData);
	if(simplexml_load_string($xml)) {

		$ResultFeed->loadXML($xml);
		if($_GET['debug'] == 'msa123')
		echo '<hr>'.$url;

		#############################################################
		#						REFINEMENT							#
		#############################################################
		if($ResultFeed->getElementsByTagName("Refinement")->item(0))
		{
			$Refinement = $ResultFeed->getElementsByTagName("Refinement");

			for($i = 0; $Refinement->item($i) && $i < 6; $i++)
			{
				$RefinementType[$i] = $Refinement->item($i)->getAttribute('label');
				$RefineValue = $Refinement->item($i)->getElementsByTagName("RefineValue");
				for($n = 0; $RefineValue->item($n) && $n < 9; $n++)
				{
					$KelkooData['Refinement'][$i][$n][0] = $RefineValue->item($n)->getElementsByTagName("Title")->item(0)->nodeValue;
					$KelkooData['Refinement'][$i][$n][1] = $RefineValue->item($n)->getElementsByTagName("Value")->item(0)->nodeValue;
					$KelkooData['Refinement'][$i][$n][2] = $RefineValue->item($n)->getElementsByTagName("NumberOfProducts")->item(0)->nodeValue;
				}
			}
		}

		#############################################################
		#						CATEGORY							#
		#############################################################
		$CategoryListings = $ResultFeed->getElementsByTagName("Categories");

		if ($CategoryListings->item(0))
		{
			foreach($CategoryListings->item(0)->getElementsByTagName("SubCategory") as $CategoryArray)
			{
				$KelkooData['Category'][] = $CategoryArray->getElementsByTagName("Title")->item(0)->nodeValue;
			}
		}

		#############################################################
		#						PRODUCT							#
		#############################################################
		$Products = $ResultFeed->getElementsByTagName("Products")->item(0);
		if($Products) {
			$KelkooData['Product']['TotalMatches'] = $Products->getAttribute('totalResultsAvailable');

			for($i = 0; $Products->getElementsByTagName("Product")->item($i); $i++)
			{
				$KelkooData['Product'][$i]['Title'] = $Products->getElementsByTagName("Product")->item($i)->getElementsByTagName("ProductName")->item(0)->nodeValue;
				$KelkooData['Product'][$i]['Availability'] = str_replace("Availability: ", '', $Products->getElementsByTagName("Product")->item($i)->getElementsByTagName("Availability")->item(0)->nodeValue);
				$KelkooData['Product'][$i]['Description'] = $Products->getElementsByTagName("Product")->item($i)->getElementsByTagName("Summary")->item(0)->nodeValue;
				$KelkooData['Product'][$i]['Price'] = $Products->getElementsByTagName("Product")->item($i)->getElementsByTagName("Price")->item(0)->nodeValue;
				$KelkooData['Product'][$i]['Url'] = $Products->getElementsByTagName("Product")->item($i)->getElementsByTagName("Url")->item(0)->nodeValue;
				$KelkooData['Product'][$i]['Image'] = $Products->getElementsByTagName("Product")->item($i)->getElementsByTagName("ListImage")->item(0)->getElementsByTagName("Url")->item(0)->nodeValue;
			}
		}
	}

	return $KelkooData;
}

function UrlSigner($urlDomain, $urlPath, $partner, $key){

	settype($urlDomain, 'String');
	settype($urlPath, 'String');
	settype($partner, 'String');
	settype($key, 'String');

	$URL_sig = "hash";
	$URL_ts = "timestamp";
	$URL_partner = "aid";

	$URLreturn = "";
	$URLtmp = "";
	$s = "";
	// get the timestamp
	$time = time();

	// replace " " by "+"
	$urlPath = str_replace(" ", "+", $urlPath);

	// format URL
	$URLtmp = $urlPath . "&" . $URL_partner . "=" . $partner . "&" . $URL_ts . "=" . $time;

	// URL needed to create the tokken
	$s = $urlPath . "&" . $URL_partner . "=" . $partner . "&" . $URL_ts . "=" . $time . $key;

	$tokken = "";
	$tokken = base64_encode(pack('H*', md5($s)));
	$tokken = str_replace(array("+", "/", "="), array(".", "_", "-"), $tokken);

	$URLreturn = $urlDomain . $URLtmp . "&" . $URL_sig . "=" . $tokken;

	return $URLreturn;
}

/*
include '/lib/php/include/lib.php';
$data = array(  "domain" => "ecs-fr.kelkoo.fr",
"search" => "cars",
"pID" => "96919839",
"key" => "zz0k6Btu");
$RSSFeed = KelkooSearch($data);
var_dump($RSSFeed);
*/

?>