yml скрипт для Яндекс Маркета

Для выгрузки товаров в Яндекс Маркет из веб магазина в формате yml, есть наиподробнейший мануал. Тем не менее, частые заказы связаны с тем, что "программист взялся и yml написать осилил, но почему он не подходит Яндексу".

Мешает ограничение на 3 бесплатных проверки. Но елки палки, уж проверить то xml на валидность можно? Есть отличный онлайн сервис для проверки xml. Проверка в два этапа, сначала скармливаем yml, затем shops.dtd Это избавит от большей части ошибок. Перечислю самые частые.

1.В неправильном порядке перечислены элементы.

Пример yml файла , который не пройдет валидацию.

Элементы  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 товар, но их можно добавить сколько нужно.

Напоследок замечу, что скрипт не является панацеей. Он лишь предназначен для упрощения работы по одной модели и даже ее реализует не полностью. К примеру, нельзя добавить больше одной картинки. Не проверяется длина элементов(512 для урл, 256 для некоторых полей, …). Тем не менее для 90% случаев, встречавшихся в практике, этого хватало. Если же вам нужно, что то большее или возникли проблемы? Welcome! https://www.free-lance.ru/users/fstrange

пример обновлен 24.07.2013
 

You may also like...

  • Сергей

    список товаров пустой, проблема с созданием узлов для товара

    • А что он выводит в итоге показать можете?

      • Иван Монастырский

        да правда так, список категорий норм формирует в файле, а вот товары нет. WTF!!????
        то есть их в фале yml вообще нету, ошибки php не выводит.

        • Обновил файл и пример. Взяты с действующего интернет магазина.

  • Сергей

    public function setOffer($id, $sType){

    }
    вижу пустую функцию, тут что должно быть?

    • остаток от другой реализации. У клиента был какой то навороченный список товаров. В примере функция не востребована.

  • Сергей

    я уже переделал другим классом, но скрипт хотел бы допилить мало ли понадобится, пример показать не могу уже, вот вопросы по коду
    $offer = new OfferYmt($id);
    $offer->setUrl($url);
    $offer->setRequired($price, ‘RUB’, $idCat, $companyName, $name);
    $offer->setElem(‘description’, $description);
    $offer->setElem(‘picture’, $suImg);
    $market->addOffer($offer->save());
    вот методы с переменными, в коде методов видел YandexMarket::setAttr и он по идее отвечает за все теги, которые создаются в offerts, а он как раз и пустой

  • Иван Монастырский

    Пример плиз с более 1 категории и более 1 товара

  • Олег

    Что то у меня не работает, выдается ошибка: Parse error: syntax error, unexpected T_PUBLIC in Z:homemarketwwwindex.php on line 4

    Это строка с: public function viewAction() {

    • уберите эту функцию вообще и закрывающую скобку в конце
      Это опечатка

  • Sergey Volvich

    для битрикса делал подобное))) а то у них то покупать приблуду за 2к как-то не по нашему0))

  • Ерунда какая-то а не класс. Не работает!
    Откуда взялось это? self::_getModel(); Из воздуха?

  • Artem Rizhenkov

    Всё работает, спасибо большое! Правда пора опять обновлять библиотеку — в яндексе новые правила по deliveryOptions