Files
kupshop/class/class.AutomaticImportCycloConnect.php
2025-08-02 16:30:27 +02:00

174 lines
5.4 KiB
PHP

<?php
/**
* @author Petr Knap <knap@wpj.cz>
*
* @since 2013-03-08
*
* @category kupshop
*
* @version 1.3
*/
class AutomaticImportCycloConnect
{
private $BuyersID;
private $Password;
private $SaveTo;
private $UserAgent = 'Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.0; Trident/5.0; chromeframe/11.0.696.57)';
private $N = 3;
private $TotalCount;
private $TransactionID;
private $data;
private $BaseUrl;
private $InitUrl = '?RequestName=CreateTextSearchRequest&SearchString=';
private $NextUrl = '?RequestName=SearchResultRequest&ResultFormat=ITEM_DETAIL';
private $StepSize = 200;
public function __construct($BuyersID = null, $Password = null)
{
$this->BuyersID = $BuyersID;
$this->Password = $Password;
}
public function Run()
{
self::initCommunication();
self::getItemsDetails();
self::saveXML();
}
public function __set($name, $value)
{
switch ($name) {
case 'BuyersID':
$this->BuyersID = $value;
break;
case 'Password':
$this->Password = $value;
break;
case 'SaveTo':
$this->SaveTo = $value;
break;
case 'UserAgent':
$this->UserAgent = $value;
break;
case 'N':
$this->N = $value;
break;
case 'BaseUrl':
$this->BaseUrl = $value;
break;
case 'stepSize':
$this->StepSize = $value;
break;
default:
throw new Exception('Variable '.$name.' not found.');
}
}
public function __get($name)
{
switch ($name) {
case 'BuyersID':
return $this->BuyersID;
break;
case 'Password':
return $this->Password;
break;
case 'SaveTo':
return $this->SaveTo;
break;
case 'UserAgent':
return $this->UserAgent;
break;
case 'N':
return $this->N;
break;
case 'BaseUrl':
return $this->BaseUrl;
break;
case 'stepSize':
return $this->StepSize;
break;
default:
throw new Exception('Variable '.$name.' not found.');
}
}
private function downloadXmlFile($url)
{
$stop = $this->N;
do {
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 600);
curl_setopt($curl, CURLOPT_USERAGENT, $this->UserAgent);
curl_setopt($curl, CURLOPT_FAILONERROR, true);
// curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($curl, CURLOPT_AUTOREFERER, true);
curl_setopt($curl, CURLOPT_TIMEOUT, 1200);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
$data = curl_exec($curl);
curl_close($curl);
$stop--;
} while ($data == '' && $stop > 0);
if ($data == '') {
throw new Exception('Blank file was downloaded from '.$url.'.');
}
return $data;
}
private function saveXML($SaveTo = null)
{
if ($SaveTo === null) {
$SaveTo = $this->SaveTo;
}
file_put_contents($SaveTo, $this->data);
}
private function initCommunication()
{
$this->data = self::downloadXmlFile($this->BaseUrl.$this->InitUrl.'&BuyersID='.$this->BuyersID.'&Password='.$this->Password);
$this->data = new SimpleXMLElement($this->data);
$responseCode = $this->data->xpath('vct:ResponseCode');
$responseCode = $responseCode[0];
if ($responseCode != 200) {
throw new Exception('Response code: '.$responseCode);
}
$transactionID = $this->data->xpath('vct:TransactionID');
$this->TransactionID = $transactionID[0];
$totalCount = $this->data->xpath('vcc:TotalCount');
$this->TotalCount = $totalCount[0];
}
private function getItemsDetails()
{
$start = 0;
$this->data = '<?xml version="1.0" encoding="utf-8"?><xml>';
do {
try {
$data = self::downloadXmlFile($this->BaseUrl.$this->NextUrl.'&BuyersID='.$this->BuyersID.'&Password='.$this->Password.'&TransactionID='.$this->TransactionID.'&StartIndex='.$start.'&Count='.$this->StepSize);
$ns = new SimpleXMLElement($data);
$ns = $ns->getNamespaces(true);
foreach ($ns as $prefix => $name) {
$data = str_replace('<'.$prefix.':', '<', $data);
$data = str_replace('</'.$prefix.':', '</', $data);
}
$data = str_replace('<?', '<!-- ?', $data);
$data = str_replace('?>', '? -->', $data);
$this->data = $this->data.$data;
} catch (Exception $e) {
print_r($e->getMessage()."\n");
}
// sleep(90);
$start += $this->stepSize;
} while ($start < $this->TotalCount);
$this->data = $this->data.'</xml>';
}
}