YML
|
|
Эта статья — о структуре YML-файлов. Чтобы узнать, как задать конкретный параметр товара, найдите его в справочнике. |
YML (Yandex Market Language) — собственный стандарт Яндекса, основанный на XML. В YML-файлах можно целиком описать каталог магазина в формате, удобном для автоматической генерации.
В этом руководстве описаны все необходимые элементы YML-файлов.
Совет
Если вы пользуетесь популярной CMS, возможно, для нее есть готовый модуль, который умеет генерировать YML-файлы. Список готовых модулей
Файлы для обновления каталога и файлы для управления размещением
С помощью YML-файлов можно решать две задачи:
- добавлять товары в каталог и обновлять информацию о них;
- управлять размещением товаров в магазинах.
YML-файлы, решающие разные задачи, отличаются набором обязательных элементов.
Заголовок
Нужен в любом YML-файле.
Пишется так:
<?xml version="1.0" encoding="UTF-8"?>
Заголовок занимает первую строку и начинается с нулевого символа. Подойдут кодировки UTF-8 и Windows-1251.
Корневой элемент <yml_catalog>
Нужен в любом YML-файле.
В любом XML-документе есть корневой элемент. Формат YML в качестве корневого использует элемент <yml_catalog> с атрибутом date.
В атрибуте укажите дату и время момента, на который актуальны данные в файле. Загружаемая версия каталога должна быть не старше 10 дней.
Дату и время нужно указать согласно стандарту RFC 3339, вот так:
<yml_catalog date="2022-05-22T14:37+03:00">
Обязательно указывайте часовой пояс. Он отсчитывается от UTC — например, красноярское время записывается так:
<yml_catalog date="2022-05-22T15:08+07:00">
Дату и время в будущем указывать нельзя.
Если файл долго генерируется, указывайте в атрибуте момент начала генерации. Почему?
Важно
Если вы передаете с помощью YML остатки или цены, атрибут date нужно указывать обязательно.
Элемент <shop>
Нужен в любом YML-файле.
В элемент <yml_catalog> в единственном экземпляре входит элемент <shop> без атрибутов. Он описывает магазин, для которого вы готовите файл.
В него вложены:
|
Элемент |
Тип данных |
Смысл |
|
|
Текст: |
Название вашего магазина |
|
|
Текст: |
Название вашей компании |
|
|
Текст:
|
Адрес сайта магазина, записанный согласно стандарту RFC 3986 |
|
|
Текст: |
Название системы управления контентом |
|
Содержит вложенные элементы |
Список категорий товаров, продаваемых в магазине |
|
|
Содержит вложенные элементы |
Список предложений — товаров, продающихся в магазине, с ценами |
Элемент <categories>
Совет
Если выбрать значение из списка Маркета, то товар сразу попадет в соответствующую категорию. При указании значения из списка категорий в вашем магазине определение категории товара на Маркете будет автоматическим.
Нужен только в YML-файле, управляющем товарами
Вложен в элемент <shop>, не имеет атрибутов. Помещается перед элементом <offers>. Содержит сколько угодно элементов <category>, каждый из которых описывает одну из категорий доступных в магазине товаров.
При создании категорий следуйте рекомендациям:
- указывайте конкретные категории — например, набор ножей лучше отнести к категории Столовые приборы, а не просто Посуда;
- выбирайте категории, которые описывают товар, а не абстрактный признак — например, лучше указать Духи, а не Подарки.
Каждой категории нужно присвоить уникальный идентификатор — целое положительное число длиной до 18 цифр — и записать его в атрибут id. Запись числа не должна начинаться с нуля — например, 055 не подойдет.
Чтобы вложить одну категорию в другую, используйте атрибут parentId.
Получится так:
<categories>
<category id="1">Книги</category>
<category id="2" parentId="1">Детективы</category>
<category id="3" parentId="1">Боевики</category>
<category id="4">Видео</category>
<category id="5" parentId="4">Комедии</category>
<category id="6">Принтеры</category>
<category id="7">Оргтехника</category>
</categories>
Элемент <offers>
Нужен в любом YML-файле. Содержимое вложенных элементов <offer> зависит от задачи, которую решает YML-файл.
Помещается после элемента <categories>. Не имеет атрибутов. Содержит сколько угодно элементов <offer>, каждый из которых описывает один товар в магазине. У <offer> есть обязательный атрибут id, который содержит ваш SKU товара. Что такое SKU
Важно
Элемент <shop-sku> устарел, его лучше не использовать. Если он есть, значение вашего SKU берется из него, а не из атрибута id элемента <offer>.
Внутри <offer> нужно указать характеристики товара (название, описание, производителя и так далее) или параметры размещения (цену, скидки, остатки и так далее).
|
|
Посмотрите справочник. Он подскажет, какие параметры обязательны и как их задать в YML-файле. Если YML-файл предназначен для добавления товаров, смотрите таблицу с характеристиками. Если для управления размещением — таблицу с параметрами размещения. |
Параметры доставки и самовывоза
Если магазин работает по модели DBS, в YML-файле можно задать, описывающие параметры доставки и самовывоза. Их нужно разместить:
- перед
<offers>, чтобы задать параметры для всего магазина; - внутри
<offer>, если нужно переопределить параметры для конкретного товара.
Чтобы Маркет учитывал параметры, заданные в YML-файле, нужно включить опцию Использовать данные из прайс-листа в кабинете. Инструкция
Элементы <delivery> и <pickup>
Нужны только в YML-файле, управляющем размещением.
<delivery>
Указывает, доступна ли курьерская доставка. Значение по умолчанию — true.
Добавьте в файл <delivery>false</delivery>, если магазин не доставляет товары.
<pickup>
Указывает, доступен ли самовывоз. Значение по умолчанию — true.
Добавьте в файл <pickup>false</pickup>, если самовывоз недоступен.
Элемент <delivery-options>
Нужен только в YML-файле, управляющем размещением.
Не имеет атрибутов. Содержит до пяти элементов <option>, каждый из которых описывает один из способов курьерской доставки (например, обычная, ускоренная и так далее).
Может быть вложен в <shop> и в <offer>.
Внутри <shop> элемент <delivery-options> определяет способы доставки, которые магазин предлагает по умолчанию.
Внутри <offer> элемент <delivery-options> указывает, что для конкретного товара действуют не общие условия доставки, а специальные.
Параметры способа доставки <option> задаются атрибутами:
- cost — не используется. Задайте любое число, чтобы файл прошел техническую проверку.
- days — срок в рабочих днях, целое число или интервал, записанный через дефис. Для доставки в день заказа укажите 0, для доставки на следующий день — 1. Максимальное значение — 60. На Маркете нельзя продавать товары с неизвестным сроком доставки. Если поле
daysоставить пустым, то товар будет скрыт с витрины. - order-before — до которого часа можно оформить доставку этим способом, чтобы срок начал отсчитываться с сегодняшнего дня. Целое число от 0 до 24. Это необязательный атрибут, значение по умолчанию — 13.
Получится так:
<delivery-options>
<option cost="123" days="4" order-before="18"/>
</delivery-options>
Здесь указано, что покупатель может оформить доставку в течение 4 дней. Если он оформляет заказ после 18:00, срок начнет отсчитываться со следующего дня.
Способы доставки должны отличаться друг от друга и ценой, и сроками.
Элемент <pickup-options>
Нужен только в YML-файле, управляющем размещением.
Не имеет атрибутов. Содержит до пяти элементов <option>, каждый из которых описывает один из способов самовывоза.
Может быть вложен в <shop> и в <offer>.
Внутри <shop> элемент <pickup-options> определяет способы самовывоза, которые магазин предлагает по умолчанию.
Внутри <offer> элемент <pickup-options> указывает, что для конкретного товара действуют не общие условия самовывоза, а специальные.
Параметры способа самовывоза задаются атрибутами:
- cost — не используется. Задайте любое число, чтобы файл прошел техническую проверку.
- days — срок в рабочих днях, целое число или интервал, записанный через дефис. Для самовывоза в день заказа укажите 0, для самовывоза на следующий день — 1. Максимальное значение — 60. На Маркете нельзя продавать товары с неизвестным сроком самовывоза. Если поле
daysоставить пустым, то товар будет скрыт с витрины. - order-before — до которого часа можно оформить самовывоз этим способом, чтобы срок начал отсчитываться с сегодняшнего дня. Целое число от 0 до 24. Это необязательный атрибут, значение по умолчанию — 13.
Получится так:
<pickup-options>
<option cost="123" days="2" order-before="18"/>
</pickup-options>
Здесь указано, что товар приедет на пункт выдачи в течение двух дней. Если покупатель оформляет заказ с самовывозом после 18:00, срок начнет отсчитываться со следующего дня.
Примеры готовых файлов
|
Для управления товарами |
|
|
Для управления размещением |
Можно ли разбить файл на несколько?
Да, можно, если магазин работает по модели DBS. Это полезно, если файл слишком большой или если, например, сведения о разных товарах у вас хранятся в разных базах данных — и генерировать отдельные файлы проще.
Единственное ограничение — старайтесь, чтобы один и тот же товар не попадал в разные файлы. Если один и тот же SKU будет в разных файлах, Маркет будет обновлять данные о нем при каждой загрузке каждого из файлов, и вам будет сложно уследить за изменениями.
Полезные ссылки
- Документация API Яндекс Маркета для продавцов
- Новости для партнеров
- Наш Телеграм-канал
- Обучающие видеоролики
Если указывать время завершения генерации, можно потерять изменения, внесенные вручную. Допустим, магазин начал генерировать файл в 12:00. В 12:05 вы через кабинет изменили цену товара. В 12:10 магазин сформировал файл, и его скачал Маркет. Если в файле будет стоять время 12:10, Маркет заменит внесенную вами цену на неактуальную из файла. Если же в нем будет стоять 12:00, ваше изменение будет считаться более поздним и никуда не денется.
Значение по умолчанию — это значение, которое используется, если элемента в файле нет. Например, если для элемента element значение по умолчанию true:
|
Чтобы задать true |
Чтобы задать false |
|
Можно не включать элемент в YML-файл. Если удобно, можно его задать явно:
|
Нужно обязательно задать значение в файле:
|