Для выгрузки товаров в Яндекс Маркет из веб магазина в формате yml, есть наиподробнейший мануал. Тем не менее, частые заказы связаны с тем, что "программист взялся и yml написать осилил, но почему он не подходит Яндексу".
Мешает ограничение на 3 бесплатных проверки. Но елки палки, уж проверить то xml на валидность можно? Есть отличный онлайн сервис для проверки xml. Проверка в два этапа, сначала скармливаем yml, затем shops.dtd Это избавит от большей части ошибок. Перечислю самые частые.
1.В неправильном порядке перечислены элементы.
Пример yml файла , который не пройдет валидацию.
1 2 3 4 5 6 7 8 9 10 |
<offer id="1208" available="true"> <price>3000</price> <url>http://sdsfsfsfsfs.ru/catalogue/17/1208/</url> <currencyId>RUR</currencyId> <categoryId>17</categoryId> <picture>http://sdsdssdsds.ru/uplfiles/2012101210550511.jpg</picture> <name>Комод Лотос с крышкой 2.06</name> <vendorCode>Комод Лотос с крышкой 2.06</vendorCode> <description>Размеры: Высота 840 см, Ширина 814 см, Глубина 400 см</description> </offer> |
Элементы price и url перепутаны, а ведь порядок указан в shops.dtd, да и в мануале черным по-белому указано блюсти правильный порядок.
2. Запрещенные символы
Стандарт XML не допускает использования в текстовых данных непечатаемых символов с ASCII-кодами в диапазоне значений от 0 до 31 (за исключением символов с кодами 9, 10, 13 — табуляция, перевод строки, возврат каретки). Опять таки в мануале указаны 5 символов, которые подлежат замене на их эквиваленты в текстовых полях.
Error parsing XML feed: Unterminated entity reference, 'gt' (строка 53105, столбец 25)
3. Несоответствие типу.
Выбирают тип vendor.model например и пытаются пихать в него какой либо элемент, специфичный для типа book. Или наоборот, не указывают обязательный эелемент. В результате примерно такое
Фатальная ошибка: Ошибка парсинга XML: Error parsing XML feed: Not enough elements to match content model : '(name,company,url,phone?,platform?,version?,agency?,email*,currencies,categories,store?,pickup?,delivery?,deliveryIncluded?,local_delivery_cost?,adult?,offers)' (строка 22, столбец
Или
Element 'store' is not valid for content model
И перечень основных ошибок от Яндекса.
Скрипт генерации yml для Яндекс Маркет [скачать]
Для того, чтобы избавиться от этих ошибок, написал простенький класс, который работает с типом "vendor-model". В Яндекс Маркете их несколько, но vendor-model подходит для большинства веб магазинов. Скрипт генерирует валидный yml-файл, с нормальным заголовком, с правильным порядком элементов и заменяет "неправильные" символы.
Пример его использования. В примере всего 1 товар, но их можно добавить сколько нужно.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
<?php include "YandexMarket.php"; public function viewAction() { $shopName = 'Все для домофонных ключей'; $companyName = 'OOO "ККККЕЙ"'; $siteURL = 'http://kkkkey.ru'; $market = new YandexMarket($shopName, $companyName, $siteURL); $market->addCurr('RUR', 1); $market->addCurr('USD', 'CBRF'); $market->addCat('Все товары',1); $model = self::_getModel(); $entries = $model->fetchEntries(); foreach ($entries as $entry) { // offer catId, title, entryId $offer = new OfferYmt($entry['id']); $offer->setUrl("http://ikey.ru/product/" . $entry['uri']); $offer->setRequired($entry['price1'], 'RUB', 1, $companyName, $entry['title']); $offer->setElem('description', $entry['data']); $market->addOffer($offer->save()); } //var_export($entries[1]); $xml = $market->save(); $this->_helper->layout->disableLayout(); $this->_helper->viewRenderer->setNoRender(); /* $view = new Zend_View(array('basePath'=>APPLICATION_PATH.'/views')); $view->xml = $xml; $this->render('/yamarket/view') ;*/ header('Content-type:application/xml'); $yml = iconv('utf-8', 'cp1251//IGNORE', $xml); //file_put_contents('ymt.xml', $yml); // а можно сохранить в файл echo $yml; } |
Напоследок замечу, что скрипт не является панацеей. Он лишь предназначен для упрощения работы по одной модели и даже ее реализует не полностью. К примеру, нельзя добавить больше одной картинки. Не проверяется длина элементов(512 для урл, 256 для некоторых полей, …). Тем не менее для 90% случаев, встречавшихся в практике, этого хватало. Если же вам нужно, что то большее или возникли проблемы? Welcome! https://www.free-lance.ru/users/fstrange
пример обновлен 24.07.2013
Свежие комментарии