first commit
This commit is contained in:
169
dekodum.cz/index.php
Normal file
169
dekodum.cz/index.php
Normal file
@@ -0,0 +1,169 @@
|
||||
<?php
|
||||
error_reporting(E_ALL ^ E_NOTICE ^ E_STRICT ^ E_WARNING ^ E_DEPRECATED);
|
||||
include '../_plugins/medoo.php';
|
||||
$reader = new XMLReader();
|
||||
$writer = new XMLWriter();
|
||||
|
||||
$mdb = new medoo([
|
||||
'database_type' => 'mysql',
|
||||
'database_name' => 'host117523_temp',
|
||||
'server' => 'localhost',
|
||||
'username' => 'host117523_temp',
|
||||
'password' => 'XAGwZ3XRa9fgtM63um7v',
|
||||
'charset' => 'utf8'
|
||||
]);
|
||||
|
||||
// Otwórz plik XML do odczytu
|
||||
if (!$reader->open('googleProducts.xml')) {
|
||||
die("Failed to open the XML file");
|
||||
}
|
||||
|
||||
// Liczba wszystkich elementów `item`
|
||||
$totalItems = 0;
|
||||
while ($reader->read()) {
|
||||
if ($reader->nodeType == XMLReader::ELEMENT && $reader->localName == 'item') {
|
||||
$totalItems++;
|
||||
}
|
||||
}
|
||||
$reader->close();
|
||||
|
||||
// Otwórz ponownie plik XML do przetwarzania
|
||||
$reader->open('googleProducts.xml');
|
||||
|
||||
// Otwórz plik tymczasowy XML do zapisu
|
||||
$tempFile = 'googleProducts_temp.xml';
|
||||
$writer->openURI($tempFile);
|
||||
$writer->startDocument('1.0', 'UTF-8');
|
||||
$writer->setIndent(true);
|
||||
|
||||
// Dodanie przestrzeni nazw
|
||||
$writer->startElement('rss');
|
||||
$writer->writeAttribute('version', '2.0');
|
||||
$writer->writeAttribute('xmlns:g', 'http://base.google.com/ns/1.0');
|
||||
$writer->startElement('channel');
|
||||
|
||||
// Inicjalizacja zmiennych
|
||||
$products = [];
|
||||
$skipFirstItems = 1000;
|
||||
$processedItems = 0;
|
||||
$hasMoreItems = false;
|
||||
|
||||
// Przeczytaj XML strumieniowo
|
||||
while ($reader->read()) {
|
||||
if ($reader->nodeType == XMLReader::ELEMENT && $reader->localName == 'item') {
|
||||
if ($processedItems < $skipFirstItems) {
|
||||
// Przetwórz elementy `item` do momentu przekroczenia limitu `skipFirstItems`
|
||||
$product = [];
|
||||
$depth = $reader->depth;
|
||||
$processedItems++;
|
||||
|
||||
while ($reader->read() && !($reader->nodeType == XMLReader::END_ELEMENT && $reader->depth == $depth)) {
|
||||
if ($reader->nodeType == XMLReader::ELEMENT) {
|
||||
$currentElement = $reader->name;
|
||||
$namespaceURI = $reader->namespaceURI;
|
||||
} elseif ($reader->nodeType == XMLReader::TEXT || $reader->nodeType == XMLReader::CDATA) {
|
||||
if (!isset($product[$currentElement])) {
|
||||
$product[$currentElement] = '';
|
||||
}
|
||||
$product[$currentElement] .= $reader->value;
|
||||
}
|
||||
}
|
||||
|
||||
// Dodaj produkt do listy produktów
|
||||
$products[] = $product;
|
||||
} else {
|
||||
$hasMoreItems = true;
|
||||
// Przepisywanie pozostałych elementów `item`
|
||||
$writer->startElement('item');
|
||||
$depth = $reader->depth;
|
||||
|
||||
while ($reader->read() && !($reader->nodeType == XMLReader::END_ELEMENT && $reader->depth == $depth)) {
|
||||
if ($reader->nodeType == XMLReader::ELEMENT) {
|
||||
$writer->startElement($reader->name);
|
||||
if ($reader->hasAttributes) {
|
||||
while ($reader->moveToNextAttribute()) {
|
||||
$writer->writeAttribute($reader->name, $reader->value);
|
||||
}
|
||||
$reader->moveToElement();
|
||||
}
|
||||
} elseif ($reader->nodeType == XMLReader::TEXT) {
|
||||
$writer->text($reader->value);
|
||||
} elseif ($reader->nodeType == XMLReader::CDATA) {
|
||||
$writer->writeCData($reader->value);
|
||||
} elseif ($reader->nodeType == XMLReader::END_ELEMENT) {
|
||||
$writer->endElement();
|
||||
}
|
||||
}
|
||||
$writer->endElement();
|
||||
}
|
||||
} elseif ($reader->nodeType == XMLReader::ELEMENT && $reader->localName != 'rss' && $reader->localName != 'channel') {
|
||||
// Przepisywanie elementów XML poza przetworzonymi 'item' oraz pomijanie 'rss' i 'channel'
|
||||
$writer->startElement($reader->name);
|
||||
if ($reader->hasAttributes) {
|
||||
while ($reader->moveToNextAttribute()) {
|
||||
$writer->writeAttribute($reader->name, $reader->value);
|
||||
}
|
||||
$reader->moveToElement();
|
||||
}
|
||||
} elseif ($reader->nodeType == XMLReader::TEXT) {
|
||||
$writer->text($reader->value);
|
||||
} elseif ($reader->nodeType == XMLReader::CDATA) {
|
||||
$writer->writeCData($reader->value);
|
||||
} elseif ($reader->nodeType == XMLReader::END_ELEMENT && $reader->localName != 'rss' && $reader->localName != 'channel') {
|
||||
$writer->endElement();
|
||||
}
|
||||
}
|
||||
|
||||
// Zakończ elementy
|
||||
$writer->endElement(); // channel
|
||||
$writer->endElement(); // rss
|
||||
|
||||
// Zakończ dokument
|
||||
$writer->endDocument();
|
||||
$writer->flush();
|
||||
|
||||
// Zamknij oba pliki
|
||||
$reader->close();
|
||||
|
||||
// Podmiana oryginalnego pliku tymczasowym
|
||||
if (!rename($tempFile, 'googleProducts.xml')) {
|
||||
die("Failed to replace the original XML file");
|
||||
}
|
||||
|
||||
// echo '<pre>' . print_r($products, true) . '</pre>';
|
||||
|
||||
// Wyświetl produkty i zapisz do bazy danych
|
||||
$addedProducts = 0;
|
||||
foreach ($products as $product) {
|
||||
$productId = $product['g:id'];
|
||||
// Sprawdź, czy produkt już istnieje w bazie danych
|
||||
$existingProduct = $mdb->get('dekodum_xml', '*', ['product_id' => $productId]);
|
||||
|
||||
if (!$existingProduct) {
|
||||
$addedProducts++;
|
||||
// Jeśli produkt nie istnieje, dodaj go do bazy danych
|
||||
$mdb->insert('dekodum_xml', [
|
||||
'product_id' => $productId,
|
||||
'title' => $product['title'],
|
||||
'link' => $product['link'],
|
||||
'image_link' => $product['g:image_link'],
|
||||
'mpn' => $product['g:mpn'],
|
||||
'brand' => $product['g:brand'],
|
||||
'google_product_category' => $product['g:google_product_category'],
|
||||
'item_group_id' => $product['g:item_group_id'],
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
||||
$remainingItems = $totalItems - $processedItems;
|
||||
|
||||
echo "Pierwsze $skipFirstItems elementów 'item' zostało odczytanych. Dodałem $addedProducts produktów. Pozostało $remainingItems elementów do przetworzenia.";
|
||||
|
||||
// Odśwież stronę, jeśli są jeszcze elementy 'item'
|
||||
if ($hasMoreItems) {
|
||||
echo '<script>
|
||||
setTimeout(function(){
|
||||
window.location.reload();
|
||||
}, 1000);
|
||||
</script>';
|
||||
}
|
||||
Reference in New Issue
Block a user