PHP скрипт генерации YML файла для Маркета, SATU и других

Блог

Приветствую! Дамы и Господа!

Я пишу в своем блоге не только информацию для начинающих, по крайней мере, этой записью, я это докажу.

В своей работе, я периодически сталкиваюсь с разного рода задачами, и в этот раз, меня попросили написать скрипт для генерации YML файла.

Данный скрипт обращается к базе данных сайта, берет из заданных колонок и строк. нужную информацию и из этого формирует файл YML формата, который многим нужен для загрузки в Яндекс Маркет, в различные агрегаторы и пр.

В данном случае, скрипт был нужен для выгрузки более 8000 товаров в онлайн гипермаркет SATU. Кто не знает — вот ссылочка: https://satu.kz/.

Вот что умеет данный скрипт:

  1. Автоматическое обновление при обращении. Т.е. при каждом обращении, в файл попадает только актуальная информация из базы данных.
  2. Формирование данных XML формата.

И собственно все. Можно расширить эти возможности, к примеру, сделать разбивку на несколько файлов. Или можно поменять формат и использовать скрипт для собственных целей.

Вот он готовенький. Вам необходимо только указать данные доступа к базе данных MySQL, нужные таблицы, и выборку значений. Если будут вопросы, можете задать их мне. На этом все. Код ниже.

Спасибо за внимание!

<?php
// Подключение к ДБ.
$dbh = new PDO('mysql:dbname=dbname;host=localhost', 'LOGIN', 'PASSWORD', 
	array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES 'utf8'"));
$out = '<?xml version="1.0" encoding="UTF-8"?>' . "\r\n";
$out .= '<yml_catalog date="' . date('Y-m-d H:i') . '">' . "\r\n";
$out .= '<shop>' . "\r\n";
 
// Короткое название магазина, должно содержать не более 20 символов.
$out .= '<name>Name</name>' . "\r\n";
 
// Полное наименование компании, владеющей магазином.
$out .= '<company>ООО «БУРАТИНО»</company>' . "\r\n";
 
// URL главной страницы магазина.
$out .= '<url>http://site.ru/</url>' . "\r\n";
 
// Список курсов валют магазина.
$out .= '<currencies>' . "\r\n";
$out .= '<currency id="RUR" rate="1"/>' . "\r\n";
$out .= '</currencies>' . "\r\n";
 
// Список категорий магазина:
// id     - ID категории.
// parent - ID родительской категории.
// name   - Название категории.
$sth = $dbh->prepare("SELECT `id`, `idMerge`, `name`, `name_chpu` FROM `catalogFolders` where id!=245 AND id!=134 AND id!=144 AND id!=2 AND id!=16 AND id!=15 AND id!=142 AND id!=65 ORDER BY name");
$sth->execute();
$category = $sth->fetchAll(PDO::FETCH_ASSOC);
 
$out .= '<categories>' . "\r\n";
foreach ($category as $row) {
	$out .= '<category id="' . $row['id'] . '" parentId="' . $row['idMerge'] . '">'
	. $row['name'] . '</category>' . "\r\n";
}
 
$out .= '</categories>' . "\r\n";
 
// Вывод товаров:
$sth = $dbh->prepare("SELECT `id`, `idMerge`, `price2`, `price1`, `image`, `fullName`, `fullName_chpu`, `desc`, `num`, `art` FROM `catalogGoods` where idMerge!=245 AND idMerge!=134 AND idMerge!=144 AND idMerge!=2 AND idMerge!=16 AND idMerge!=15 AND idMerge!=142 AND idMerge!=65 AND idMerge!=0 AND price1!=0 AND art<20");
$sth->execute();
$prods = $sth->fetchAll(PDO::FETCH_ASSOC);
 
$out .= '<offers>' . "\r\n";
foreach ($prods as $row) {
	$out .= '<offer id="' . $row['id'] . '" selling_type="u">' . "\r\n";
 
	// URL страницы товара на сайте магазина.
	$out .= '<url>http://site.ru/catalog/' . $row['fullName_chpu'] . '</url>' . "\r\n";
 
	// Цена, предполагается что в БД хранится цена и цена со скидкой.
	if (!empty($row['price1'])) {
		$out .= '<price>' . $row['price1'] . '</price>' . "\r\n";
		$out .= '<prices>' . "\r\n";
		$out .= '<price>' . "\r\n";
		$out .= '<value>' . $row['price2'] . '</value>' . "\r\n";
		$out .= '<quantity>5</quantity>' . "\r\n";
		$out .= '</price>' . "\r\n";
		$out .= '</prices>' . "\r\n";
	} else {
		$out .= '<price>' . $row['price1'] . '</price>' . "\r\n";
	}
 
	// Валюта товара.
	$out .= '<currencyId>RUR</currencyId>' . "\r\n";
 
	// ID категории.
	$out .= '<categoryId>' . $row['idMerge'] . '</categoryId>' . "\r\n";
 
	// Изображения товара, до 10 ссылок.
	$out .= '<picture>http://site.ru/catalogImages/' . $row['image'] . '</picture>' . "\r\n";
 
	// Название товара.
	$out .= '<name>'.$row['fullName'].'</name>' . "\r\n";
 
	// Описание товара, максимум 3000 символов.
	$out .= '<description>' . stripslashes($row['desc']) . '</description>' . "\r\n";   
	
	//Минимальное количество 
	$out .= '<minimum_order_quantity>1</minimum_order_quantity>' . "\r\n"; 
	
	//Количество в наличии
	$out .= '<quantity_in_stock>'.$row['num'].'</quantity_in_stock>' . "\r\n";
	
	//Артикул
	$out .= '<vendorCode>'.$row['art'].'</vendorCode>' . "\r\n";
	$out .= '</offer>' . "\r\n";
}
 
$out .= '</offers>' . "\r\n";
$out .= '</shop>' . "\r\n";
$out .= '</yml_catalog>' . "\r\n";
 
header('Content-Type: text/xml; charset=utf-8');
echo $out;
exit;

Оцените статью
IMprog