Если у вас есть свой интернет-магазин и вы хотите время от времени проверять, не изменились ли цены на товары у производителя (поставщика), то вам может пригодиться следующий код 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 – тег, в котором указывается ссылка на собственный интернет-магазин.
