Чтение XML файла Яндекс Маркета в PHP

Если требуется сделать импорт или обновление товаров по XML файлу Яндекс Маркета, можно применить расширении PHP Simplexml. Эта библиотека довольно быстрая и работает с большими файлами. О структуре xml файла можно ознакомиться в разделе помощи Яндекса.

1
$ch = curl_init('http://site.com/market.xml');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_HEADER, false);
$html = curl_exec($ch);
curl_close($ch);
file_put_contents(__DIR__ . '/file.xml', $html);

$data = simplexml_load_file(__DIR__ . '/file.xml');
PHP

Если файл под паролем, нужно добавить авторизацию:

curl_setopt($ch, CURLOPT_USERPWD, 'логин:пароль');
PHP
2

Корневой раздел shop содержит информацию о магазине и другие разделы.
https://yandex.ru/support/partnermarket/elements/shop.html

// Дата и время генерации YML-файла.
echo strval($data['date']);

// name - короткое название магазина.
echo strval($data->shop->name);

// company - полное наименование компании.
echo strval($data->shop->company);

// url - URL главной страницы магазина.
echo strval($data->shop->url);
PHP
3

Элемент currencies содержит список валют магазина.
https://yandex.ru/support/partnermarket/currencies.html

<currencies>
	<currency id="RUR" rate="1"/>
	<currency id="USD" rate="60"/>
</currencies>
foreach ($data->shop->currencies->currency as $row) {
	$id   = strval($row['id']);
	$rate = strval($row['rate']);
	
	var_dump($id, $rate);
}
PHP
4

Блок категорий из представляет собой список, атрибут parentId указывает ID родительской категории.
https://yandex.ru/support/partnermarket/categories.html

<categories>
	<category id="1" parentId="0">Лоты для творчества</category>
	<category id="2" parentId="1">Картон</category>
	<category id="3" parentId="1">Трафареты</category>
</categories>
foreach ($data->shop->categories->category as $row) {
	$id = intval($row['id']);
	$parent = intval($row['parentId']);
	$name = strval($row);
	
	var_dump($id, $parent, $name);
}
PHP
5

В примере показаны только часто используемые элементы,
о всех элементах на https://yandex.ru/support/partnermarket/offers.html

<offer id="123" available="true">
	<url>http://site.com/product/123</url>
	<price>5000</price>
	<oldprice>6000</oldprice>
	<currencyId>RUR</currencyId>
	<categoryId>3</categoryId>
	<name>Краска с экстра блеском "Mystik ink"</name>	
	<vendor>Brand</vendor>
	<picture>http://site.com/img/123.jpg</picture>
	<description>Краска на основе сольвента идеально подходят для стекла</description>
</offer>
foreach ($data->shop->offers->offer as $row) {
	// id - идентификатор предложения.
	$id = intval($row['id']);
	
	// available - статус товара «в наличии» / «на заказ».
	$available = intval($row['available']);
	
	// url - URL страницы товара на сайте магазина. 
	$url = strval($row->url);
	
	// price - актуальная цена.
	$price = strval($row->price);	
	
	// oldprice - старая цена.
	$oldprice = strval($row->oldprice);	
	
	// currencyId - валюта.
	$currencyId = strval($row->currencyId);
	
	// currencyId - идентификатор категории товара.
	$categoryId = intval($row->categoryId);
	
	// name - название товара.
	$name = strval($row->name);		
	
	// vendor - название производителя.
	$vendor = strval($row->vendor);	
	
	// picture - изображение.
	$picture = strval($row->picture);
	
	// description - описание.
	$description = strval($row->description);
}
PHP
01.06.2018, обновлено 27.08.2019
14215

Комментарии 1

Алексей Мазай Алексей Мазай
13 октября 2020 в 14:38
Блин, огромное спасибо автору!!!! ))) Перерыл столько информации, но чтобы так просто и понятно не мог найти... Специально зарегился, чтобы коммент оставить! )))

, чтобы добавить комментарий.

Другие публикации

Получить фото из Instagram без API
Так как Instagram и Fasebook ограничили доступ к API, а фото с открытого аккаунта всё же нужно периодически получать и...
24588
+7
Метрика API
API Яндекс метрики позволяет получить информацию о посещаемости сайта и формировать отчеты, но с ограничением в 30 запросов в секунду и 5000 в сутки.
17218
+6
Автоматическое сжатие и оптимизация картинок на сайте
Изображения нужно сжимать для ускорения скорости загрузки сайта, но как это сделать? На многих хостингах нет...
28143
+8
Пример парсинга html-страницы на phpQuery
phpQuery – это удобный HTML парсер взявший за основу селекторы, фильтры и методы jQuery, которые позволяют...
62081
+25
Примеры использования cURL в PHP
cURL PHP – это библиотека предназначенная для получения и передачи данных через такие протоколы, как HTTP, FTP, HTTPS....
217212
+21
Работа с JSON в PHP
JSON (JavaScript Object Notation) – текстовый формат обмена данными, основанный на JavaScript, который представляет собой набор пар {ключ: значение}. Значение может быть массивом, числом, строкой и...
112935
+14