Add XML processing script to fetch and transform product data

This commit is contained in:
2024-11-04 16:03:02 +01:00
parent a447cfa891
commit 62de8e20c3

93
interblue.pl/index.php Normal file
View File

@@ -0,0 +1,93 @@
<?php
// Włącz wyświetlanie błędów dla celów debugowania
error_reporting(E_ALL);
ini_set('display_errors', 1);
// Definiowanie źródłowego URL pliku XML i nazwy pliku docelowego
$source_url = 'https://sollux-lighting.com/product_feed/news072024/XML_polski_PLN_new_07_2024.xml';
$target_file = 'new_products.xml';
// Pobranie i załadowanie źródłowego pliku XML
$source_xml = simplexml_load_file($source_url);
if ($source_xml === false) {
die('Błąd podczas ładowania źródłowego pliku XML.');
}
// Utworzenie nowego dokumentu XML z korzeniem <products>
$xml = new SimpleXMLElement('<?xml version="1.0" encoding="UTF-8"?><products></products>');
// Definicja nazw elementów, które zawierają ceny
$price_fields = [
'cena_detaliczna_brutto_pln',
// Dodaj tutaj inne pola cen, jeśli istnieją
// 'cena_inna_field',
];
// Iteracja przez każdy produkt w źródłowym pliku XML
foreach ($source_xml->product as $product) {
// Tablica do przechowywania adresów URL obrazów
$images = [];
// Iteracja przez wszystkie dzieci elementu <product>
foreach ($product->children() as $child) {
$child_name = $child->getName();
// Sprawdzenie, czy element jest jednym z obrazów (image_1, image_2, ..., image_25)
if (preg_match('/^image_\d+$/', $child_name)) {
$url = trim((string)$child);
// Dodanie niepustego URL do tablicy obrazów
if (!empty($url)) {
$images[] = $url;
}
}
}
// Utworzenie nowego elementu <product> w nowym XML
$new_product = $xml->addChild('product');
// Ponowna iteracja przez dzieci oryginalnego <product>, aby skopiować nieobrazkowe elementy
foreach ($product->children() as $child) {
$child_name = $child->getName();
// Pomijanie elementów obrazów
if (!preg_match('/^image_\d+$/', $child_name)) {
// Pobranie wartości elementu
$value = (string)$child;
// Sprawdzenie, czy element jest polem cenowym
if (in_array($child_name, $price_fields)) {
// Zamiana kropki na przecinek w wartości ceny
$value = str_replace('.', ',', $value);
}
// Dodanie elementu do nowego <product>
$new_child = $new_product->addChild($child_name);
// Sprawdzenie, czy zawartość to HTML i potrzeba CDATA
// Jeśli chcesz zachować tagi HTML, możesz użyć CDATA
if (strpos($child_name, 'opis_krotki_html') !== false || strpos($child_name, 'opis_dlugi_korzysci_html') !== false) {
$node = dom_import_simplexml($new_child);
$no = $node->ownerDocument;
$node->appendChild($no->createCDATASection($value));
} else {
$new_child[0] = htmlspecialchars($value);
}
}
}
// Połączenie wszystkich adresów URL obrazów w jeden ciąg oddzielony przecinkami
$images_str = implode(',', $images);
// Dodanie nowego elementu <images> do nowego <product>
$new_product->addChild('images', htmlspecialchars($images_str));
}
// Zapisanie nowego pliku XML na serwerze
if($xml->asXML($target_file)) {
echo "Nowy plik XML został utworzony: $target_file";
} else {
echo "Wystąpił błąd podczas zapisywania nowego pliku XML.";
}
?>