Якщо у вас є свій інтернет-магазин і ви хочете час від часу перевіряти, чи не змінилися ціни на товари у виробника (постачальника), то в нагоді може знадобитися наступний код PHP:
<?php
// Функція для отримання HTML-коду сторінки за URL
function getHtmlContent($url) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$html = curl_exec($ch);
curl_close($ch);
return $html;
}
// Функція для отримання ціни з HTML-коду
function getPrice($html, $xpathQuery) {
$dom = new DOMDocument();
@$dom->loadHTML($html);
$xpath = new DOMXPath($dom);
$priceNode = $xpath->query($xpathQuery)->item(0);
if ($priceNode) {
$price = preg_replace('/\D/', '', $priceNode->textContent); // Видаляє всі букви та залишає тільки цифри
return $price;
}
return null;
}
// Функція для отримання назви товару з HTML-коду
function getTitle($html) {
$dom = new DOMDocument();
@$dom->loadHTML($html);
$titleNode = $dom->getElementsByTagName('title')->item(0);
return $titleNode ? trim($titleNode->textContent) : null;
}
// Завантаження XML-файлу
$xml = simplexml_load_file('priselist.xml');
// Масив для зберігання результатів
$results = [];
foreach ($xml->url as $urlSet) {
$manufacturerUrl = isset($urlSet->manufacturer) ? (string)$urlSet->manufacturer : null;
$mysiteUrl = isset($urlSet->mysite) ? (string)$urlSet->mysite : null;
$msUrl = isset($urlSet->ms) ? (string)$urlSet->ms : null;
$csUrl = isset($urlSet->cs) ? (string)$urlSet->cs : null;
// Отримання HTML-коду сторінок
$manufacturerHtml = $manufacturerUrl ? getHtmlContent($manufacturerUrl) : null;
$mysiteHtml = $mysiteUrl ? getHtmlContent($mysiteUrl) : null;
$msHtml = $msUrl ? getHtmlContent($msUrl) : null;
$csHtml = $csUrl ? getHtmlContent($csUrl) : null;
// Отримання цін
$manufacturerPrice = $manufacturerHtml ? getPrice($manufacturerHtml, '//div[@class="rm-product-center-price"]/span') : null;
$mysitePrice = $mysiteHtml ? getPrice($mysiteHtml, '//div[@class="PricesalesPrice vm-display vm-price-value"]/span[@class="PricesalesPrice"]') : null;
$msPrice = $msHtml ? getPrice($msHtml, '//div[@class="PricesalesPrice vm-display vm-price-value"]/span[@class="PricesalesPrice"]') : null;
$csPrice = $csHtml ? getPrice($csHtml, '//div[@class="PricesalesPrice vm-display vm-price-value"]/span[@class="PricesalesPrice"]') : null;
// Отримання назв товарів
$manufacturerTitle = $manufacturerHtml ? getTitle($manufacturerHtml) : null;
$mysiteTitle = $mysiteHtml ? getTitle($mysiteHtml) : null;
$msTitle = $msHtml ? getTitle($msHtml) : null;
$csTitle = $csHtml ? getTitle($csHtml) : null;
// Додавання результатів в масив
$results[] = [
'title' => [
'manufacturer' => $manufacturerTitle,
'mysite' => $mysiteTitle,
'ms' => $msTitle,
'cs' => $csTitle
],
'price' => [
'manufacturer' => $manufacturerPrice,
'mysite' => $mysitePrice,
'ms' => $msPrice,
'cs' => $csPrice
]
];
}
// Виведення результатів у вигляді таблиці
echo "<table border='1'>";
foreach ($results as $index => $result) {
echo "<tr><th colspan='3'>URL Set " . ($index + 1) . "</th></tr>";
echo "<tr><th>Site</th><th>Title</th><th>Price</th></tr>";
$prices = $result['price'];
$basePrice = $prices['manufacturer'];
foreach (['manufacturer', 'mysite', 'ms', 'cs'] as $site) {
if (isset($prices[$site])) {
$price = $prices[$site];
$color = ($price !== null && $price === $basePrice) ? 'yellow' : 'red';
echo "<tr>";
echo "<td>{$site}</td>";
echo "<td>{$result['title'][$site]}</td>";
echo "<td style='background-color: {$color};'>{$price}</td>";
echo "</tr>";
}
}
echo "<tr><td colspan='3' style='background-color: #000; height: 1px;'></td></tr>"; // Розділювач
}
echo "</table>";
?>
За допомогою цього коду ви можете пройтись по посиланням, які містить в собі XML-файл і виконати парсинг сторінок, витягнувши з HTML ціну і назву товара. А потім ці дані записуються в таблицю і відбувається порівняння цін. Якщо ціни не співпадають, то комірка зафарбовується в червоний колір. Якщо ціни однакові - то комірка буде жовтого кольору.
Таким чином, можна слідкувати за цінами товарів на сайті виробника або постачальника, і оперативно змінювати їх в своєму інтернет-магазині.
Звісно що краще працювати з XML файлами які надаються постачальниками і в яких одразу вказуються і опис і вся інша інформація про товари. Але в моєму випадку такого файлу у виробника не було. Тому й довелося шукати варіант швидкого отримання актуальних цін з чужого сайту і порівняння їх з цінами мого інтернет-магазину.
Приклад файлу XML
<?xml version="1.0" encoding="UTF-8"?>
<urlset>
<url>
<manufacturer>Посилання 1 на товар 1</manufacturer>
<mysite>Посилання 2 на товар 1</mysite>
</url>
<url>
<manufacturer>Посилання 1 на товар 2</manufacturer>
<mysite>Посилання 2 на товар 2</mysite>
</url>
</urlset>
В даному прикладі:
- manufacturer - тег в якому вказується посилання на товар виробника;
- mysite - тег в якому вказується посилання на власний інтернет-магазин.
