Files
cdnPRO/strefakierowcy-pl/index.php
2024-10-25 16:01:25 +02:00

119 lines
3.4 KiB
PHP

<?
use SimpleXMLElementExtended as GlobalSimpleXMLElementExtended;
error_reporting( E_ALL ^ E_NOTICE ^ E_STRICT ^ E_WARNING ^ E_DEPRECATED );
$time_start = microtime(true);
class SimpleXMLElementExtended extends SimpleXMLElement
{
/**
* Add value as CData to a given XML node
*
* @param SimpleXMLElement $node SimpleXMLElement object representing the child XML node
* @param string $value A text to add as CData
* @return void
*/
private function addCDataToNode(SimpleXMLElement $node, $value = '')
{
if ($domElement = dom_import_simplexml($node))
{
$domOwner = $domElement->ownerDocument;
$domElement->appendChild($domOwner->createCDATASection("{$value}"));
}
}
/**
* Add child node with value as CData
*
* @param string $name The child XML node name to add
* @param string $value A text to add as CData
* @return SimpleXMLElement
*/
public function addChildWithCData($name = '', $value = '')
{
$newChild = parent::addChild($name);
if ($value) $this->addCDataToNode($newChild, "{$value}");
return $newChild;
}
/**
* Add value as CData to the current XML node
*
* @param string $value A text to add as CData
* @return void
*/
public function addCData($value = '')
{
$this->addCDataToNode($this, "{$value}");
}
}
function xml_adopt($root, $new) {
$node = $root->addChild($new->getName(), (string) $new);
foreach($new->attributes() as $attr => $value) {
$node->addAttribute($attr, $value);
}
foreach($new->children() as $ch) {
xml_adopt($node, $ch);
}
}
// $ch = curl_init();
// curl_setopt($ch, CURLOPT_URL,'https://www.strefakierowcy.pl/tools/market/google2.xml');
// $fp = fopen( 'google-feed.xml', 'w+' );
// curl_setopt( $ch, CURLOPT_FILE, $fp );
// curl_exec ( $ch );
// curl_close ( $ch );
// fclose( $fp );
unlink('google-feed-parsed.xml');
$xml_feed = new GlobalSimpleXMLElementExtended('<?xml version="1.0"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:g="http://base.google.com/ns/1.0"/>');
$xml_feed->addChild('title', 'strefakierowcy.pl');
$xml_feed->addChild('updated', date('Y-m-d'));
$xml = new XMLReader();
$xml->open('google-feed.xml');
$doc = new DOMDocument('1.0', 'utf-8');
$root = $doc->createElementNS('http://www.w3.org/2005/Atom', 'feed');
$root->setAttributeNS('http://www.w3.org/2000/xmlns/', 'xmlns:g', 'http://base.google.com/ns/1.0');
$doc->appendChild($root);
$counter = 0;
$allowedNodeNames = [
'title', 'g:id', 'link', 'g:image_link', 'g:google_product_category',
'g:brand', 'g:gtin', 'g:mpn'
];
while ($xml->read() && $counter < 90000) {
if ($xml->name == 'item') {
$node = $xml->expand();
$sourceItem = $doc->importNode($node, true);
$item = $doc->createElement('item');
foreach ($sourceItem->childNodes as $child) {
$nodeName = ($child->prefix ? $child->prefix . ':' : '') . $child->localName;
if (in_array($nodeName, $allowedNodeNames)) {
$newChild = $doc->createElement($child->localName, $child->textContent);
$item->appendChild($newChild);
}
}
if ( $item->hasChildNodes())
$root->appendChild($item);
$counter++;
}
}
$doc->formatOutput = true;
$xml_string = $doc->saveXML();
file_put_contents('google-feed-parsed.xml', $xml_string);
$xml->close();
$time_end = microtime(true);
$execution_time = ($time_end - $time_start);
echo '<p><b>Total Execution Time:</b> '.$execution_time.' s</p>';