Вивантаження каталогу у форматі YML (XML)

37 хв

YML — різновид XML для товарних каталогів, який став фактичним стандартом обміну: у ньому приймають фіди маркетплейси, агрегатори цін, рекламні кабінети, CMS і чимало облікових систем. Якщо сервіс просить «XML-фід», «прайс у форматі YML» або «товарний файл» — майже завжди йдеться саме про нього.

У Elbuz є готові типи вивантаження під конкретні майданчики, де все вже підігнано під їхні вимоги. А є універсальний YML — для всіх інших випадків: коли сервіс приймає стандартний фід, коли файл потрібен партнеру чи підряднику, коли ви робите фід під власний сайт. Про нього ця стаття.

Зворотний напрямок — читання чужого YML — описано в статті про імпорт каталогу з XML / YML. Загальні правила будь-якого вивантаження (відбір товарів, ціни, запуск, журнал) — в огляді вивантаження товарів; тут лише те, що стосується формату.

Де це у програмі

У вікні вивантаження створіть шаблон: у списку типів відкрийте групу «XML-фід (YML)» й оберіть «YML (XML)» — це і є універсальний фід, решта пунктів групи налаштовані під конкретні майданчики. Один шаблон — один файл: якщо фіди потрібні різним сервісум і з різним складом даних, робіть окремі шаблони, а не переналаштовуйте один.

Картка «Шаблон XML» з текстом файлу вивантаження та макросами
1Поле з текстом шаблону
  1. Поле з текстом шаблону — початок файлу yml_catalog/shop із макросом {datetime}.

Що всередині файлу

Новий шаблон одразу створюється з готовим фідом — переписувати його з нуля не потрібно. У файлі три частини:

Частина файлуЩо в ній
ШапкаКореневий вузол yml_catalog з датою вивантаження, далі shop: назва магазину, компанія, адреса сайту, службові відомості про платформу й пошта. Тут же блок currencies — валюта фіда та її курс
КатегоріїБлок categories, у ньому рядок category на кожен розділ: власний ідентифікатор, ідентифікатор батьківського розділу й назва. Так у файлі відтворюється ваше дерево
ПропозиціїБлок offers, у ньому offer на кожен товар: посилання, ціна, валюта, категорія, фото, назва, виробник, артикул, опис і характеристики

Рядок категорії й рядок товару розмножує сама програма: у шаблоні вони описані один раз, а у файл потрапляють стільки разів, скільки у вас розділів і товарів.

Шаблон XML: файл складаєте ви

Головна відмінність цього типу вивантаження від решти: вміст файлу задаєте ви самі, у полі «Шаблон XML». Це один суцільний документ — такий, яким має вийти фід, — а замість значень у ньому стоять макроси у фігурних дужках: {name}, {price}, {uuid} і так далі. Під час вивантаження кожен макрос замінюється значенням конкретного товару.

Звідси гнучкість: сервіс просить додатковий вузол — ви дописуєте рядок у шаблон; просить інше ім'я вузла — перейменовуєте; не приймає опис — прибираєте. Жодного програмування, звичайний текст.

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

Не тримайте назви макросів у голові: натисніть Ctrl+Space або просто введіть { — і з'явиться підказка. Поруч із полем є повний довідник макросів, згрупований за змістом: поля товару, мовні версії полів, спец-макроси, категорії маркетплейсів, генератор описів і посадкові сторінки, шапка файлу та ім'я файлу. Клік по макросу вставляє його в позицію курсора.

Нерозпізнані макроси під час вивантаження просто зникають із результату — без попередження й без запису в журналі. Тобто описка у назві дасть не помилку, а порожній вузол у фіді, і помітите ви це вже на боці сервісу. Саме тому перед першим бойовим запуском варто зробити пробне вивантаження — воно якраз показує макроси, які програма не впізнала (див. нижче).

Підшаблони: фото й характеристики

У товара не одне фото й не одна характеристика, тому для них є окремі підшаблони — рядки, які повторюються стільки разів, скільки у товара фотографій або атрибутів. У головному шаблоні на їхньому місці стоять макроси {image_list} і {attribute_list}, а самі рядки задаються у картці «Підшаблони».

Приклад із життя: одному сервісу потрібні фото вузлом picture, іншому — image з атрибутом, третьому головне фото окремо від решти. Усе це — правка одного рядка підшаблону, головний шаблон не чіпається.

Ідентифікатор товару

У пропозиції offer ідентифікатором за замовчуванням іде UUID товару — власний незмінний ключ картки в Elbuz. Це важливо для будь-якого приймача фіда: доки ідентифікатор стабільний, сервіс оновлює наявні позиції; якщо ж він змінюється від вивантаження до вивантаження, на тому боці плодяться дублі.

Той самий UUID читає й імпорт: коли фід із Elbuz завантажується назад — у вас чи у партнера, — товари впізнаються за ним і не дублюються. Тому міняти ідентифікатор у шаблоні варто лише тоді, коли приймач фіда прямо вимагає іншого (наприклад, числового коду).

Поруч стоїть атрибут групування: різновиди одного товару (кольори, розміри) отримують спільний ідентифікатор головної картки, тож на боці приймача вони складаються в один товар із варіантами, а не розсипаються окремими позиціями.

Наявність

Наявність у пропозиції — це атрибут available, і підставляє його макрос {xml_stock_status}. Значення береться не з повітря: у картці «Пов'язані налаштування» є кнопка «Налаштування оновлення за наявністю товару», де кожному вашому статусу задається, що саме піде у фід (колонка «Назва на сайті (у файлі)») і яку кількість показувати. За замовчуванням статус «в наявності» дає true, решта — false; якщо приймач хоче не true/false, а власні слова, впишіть їх там же.

Вікно «Налаштування оновлення за наявністю товару» з таблицею статусів наявності
1Активність налаштування
2Назва на сайті (у файлі)
  1. Активність налаштування — галочка визначає, чи діє правило для цього статусу наявності.
  2. Назва на сайті (у файлі) — текст, під яким статус потрапить у файл вивантаження.

Це зручніше, ніж здається: у вас може бути десяток внутрішніх статусів («очікується», «під замовлення», «знято з виробництва»), а у фід поїдуть лише два стани — так, як розуміє приймач.

Рядок цієї таблиці діє, лише доки в ньому стоїть «Активність налаштування». Зняли галочку — і для товарів із цим статусом програма повертається до вбудованого правила: вбудований статус «в наявності» дає true, решта — false, а кількість береться вже не зі статусу, а з активності товару: 1000 для активного, 0 для вимкненого. Збоку це виглядає як «налаштування збереглося, а у файлі старе значення», тому галочку в рядку варто перевіряти першою.

НіТакТакНіТовар із його статусомнаявностіДля цього статусу стоїтьгалочка«Активністьналаштування»?available: true длявбудованого статусу«в наявності», false длярештиЗаповнено«Назва на сайті (уфайлі)»?available — ваш текстavailable: true, якщо статусозначає наявність,false для відсутності,передзамовлення й інших
Перше розгалуження — галочка «Активність налаштування»: без неї таблиця для цього статусу не діє зовсім, і ваш текст у файл не потрапить

Категорії, фото, характеристики

НалаштуванняЩо робить
Категорії (галочка)Чи включати у файл блок розділів. Деякі сервіси приймають фід без дерева — тоді галочку можна зняти
Символ роздільника категорійЧим розділяти рівні у повному шляху розділу, коли він іде одним рядком
Фото (галочка)Чи вивантажувати зображення
Посилання на фото товаруАдреса, з якої приймач качатиме фото: домен і папка. Фото віддаються посиланнями, а не файлами
Максимальна кількість фотографійОбмеження на товар — у більшості майданчиків свій ліміт, і зайві фото вони або відкидають, або відхиляють увесь фід
Атрибути, Опції (галочки)Чи вивантажувати характеристики й опції товару

Якщо в довіднику заведений — кілька назв однієї характеристики, зведених до головної, — у файл іде один параметр: з іменем головного атрибута, а значення з усіх прив'язаних збираються в нього. Товар із заповненими «Температура» і «Цветовая температура» віддає один «Цветовая температура» з обома значеннями, а не два параметри з однаковим іменем. Окремої галочки для цього немає: правило діє в усіх YML-шаблонах.

Хто головніший — галочка чи макрос

Одне й те саме поле задається у двох місцях: галочкою в картці «Що вивантажувати» і рядком у шаблоні. Коли вони суперечать одне одному, виграє не завжди те, що очікуєш.

  • Фото й характеристики: макрос сильніший за галочку. Якщо в рядку товару стоїть {image_list}, фото поїдуть у файл, навіть коли галочку «Фото» знято. Так само {attribute_list} вмикає характеристики попри зняту галочку «Атрибути». Щоб фото справді не потрапили у фід, приберіть макрос із шаблону — знятої галочки замало.
  • Категорії: галочка сильніша за шаблон. Знята галочка «Категорії» — і рядків category у файлі не буде, хоч би що було описано в шаблоні. Сама обгортка при цьому лишається порожньою: <categories></categories>.
  • Товари: галочка вимикає весь блок. Знята галочка «Товари» — у файлі буде шапка, категорії й закривні теги, і жодного offer. Прогін при цьому завершується штатно, у журналі — «Вивантаження даних завершено», і саме цей порожній файл ляже на постійне посилання.
  • Підшаблон порожній — рядок ставить програма. Не заповнили «Підшаблон фото» — у файл піде <picture>адреса</picture>. Не заповнили «Підшаблон характеристики» — <param name="Назва" unit="одиниця">Значення</param>. Заповнили свій рядок — програма підставляє тільки його і власних вузлів не додає.

Усередині рядка товару підстановка теж іде в жорсткому порядку: спочатку формули у подвійних квадратних дужках, потім окремі характеристики {attribute_61}, потім поля товару, потім списки {image_list}, {video_list}, {attribute_list}. Усе, що лишилося у фігурних дужках після цього, вирізається з файлу.

Програма визначає, що фід іде на відомий майданчик, не лише за типом вивантаження, а й за текстом: латинські «rozetka» або «prom» у назві шаблону чи в підшаблоні характеристики, а також вузли selling_type, portal_category_id, portal_id у шаблоні. Щойно режим увімкнувся, правила міняються мовчки: у режимі Rozetka фото обрізаються до 15 на товар, значення характеристик — до 255 символів, а з текстових полів вирізаються посилання й картинки; у режимі Prom фото обрізаються до 10, а головна картка товару з варіантами у фід не потрапляє взагалі — їдуть тільки варіанти. Позначки «Вивантажено» така головна картка не отримує, тож із галочкою «Вивантажувати лише нові дані» вона щоразу потрапляє у вибірку: прогін без змін не закінчиться на «файл не сформовано», а покладе на постійне посилання файл без жодного offer і запише звичайне завершення. Тому не називайте універсальний шаблон «як у Rozetka» чи «Prom-подібний»: досить одного латинського слова в назві.

Обмеження вивантаження

Окрема картка задає, чий саме залишок і яка мова потрапляють у фід: магазин, склад, мовна версія полів і галочка «лише в наявності в цьому магазині». Це не те саме, що відбір товарів (він живе в загальних налаштуваннях шаблону): тут ви обираєте, з якого джерела брати числа й тексти для тих товарів, які вже пройшли відбір.

Поруч — галочка «Вивантажувати лише нові дані»: у файл потраплять тільки товари, змінені з часу минулого вивантаження. Корисно для великих каталогів і частих оновлень, але приймач має розуміти часткові фіди — інакше він вирішить, що решта товарів зникла.

Що буде з товаром, який зник із фіда

У YML немає ознаки «товар видалено». Файл — це просто повний перелік того, що ви продаєте зараз, і позиція, якої в ньому більше немає, не отримує жодної команди. Що з нею робити, вирішує сам сервіс: один знімає її з публікації, інший лишає висіти такою, якою забрав минулого разу. З боку Elbuz це не видно й не керується.

Керований спосіб сказати «більше не продається» лише один: лишити товар у фіді й віддати йому ознаку відсутності — той самий {xml_stock_status} і таблиця статусів наявності. Виключати товар із відбору варто тоді, коли він вам більше не потрібен на цьому майданчику взагалі, а не тоді, коли просто закінчився на складі.

Товар зникає з файлу, якщо спрацювала хоч одна з умов — і жодна з них у журналі не називається поіменно:

Чому товар не потрапив у файлДе перевіряти
У товара знято ознаку «Вивантажувати у файл (на сайт)»Картка товару або сітка базового каталогу
Товар не проходить умови відбору шаблону. У щойно створеному шаблоні там уже стоїть умова «товар активний»Умови відбору товарів у картці шаблону
Категорія товару вимкнена або в ній знято ознаку вивантаженняДовідник категорій
Товар не прив'язаний до жодної категоріїКартка товару
Товар — опція, а галочку «Опції» знятоКартка шаблону, «Що вивантажувати»
Обрано магазин, а товар не входить до його складу«Обмеження вивантаження» → «Магазин»
Обрано склад, а на ньому товару немає: нульовий залишок і статус не «в наявності»«Обмеження вивантаження» → «Склад»
Стоїть «Вивантажувати лише нові дані», а товар не змінювався з минулого прогонуКартка шаблону, «Що вивантажувати»

Перевірити конкретний товар швидше, ніж перебирати вісім рядків: у вікні «Перевірити» можна вказати номер товару. Якщо він не проходить, програма так і напише — «Товар #… не потрапив у вивантаження: він не проходить умови цього шаблону».

Як влаштоване «Вивантажувати лише нові дані»

Позначка про вивантаження живе в товарі, а не в шаблоні. Наприкінці успішного прогону програма ставить «Вивантажено» тим товарам, які реально потрапили у файл, а будь-яка правка товару — у картці чи прямо в сітці базового каталогу — знімає цю позначку назад. Наступний частковий фід збере рівно тих, у кого позначки немає.

Звідси три наслідки, через які галочку легко зрозуміти неправильно.

  • Змін не було — файл не оновиться зовсім. Порожня вибірка для програми означає провал прогону: у журналі з'явиться «Вивантаження даних НЕ завершено: файл не сформовано», дата останнього вивантаження не зрушить, а по постійному посиланню лишиться попередній файл. Це не поломка, але й не «все гаразд». Виняток — режим Prom, коли у вибірці є головні картки з варіантами (див. вище).
  • Позначка спільна на всі шаблони. Вона стоїть у товарі один раз, а не окремо під кожен фід. Якщо галочку увімкнено у двох шаблонах, чий прогін пройшов першим — той і забрав зміни; другому дістанеться порожньо.
  • Приймач має розуміти часткові файли. Сервіс, який вважає фід повним переліком, після часткового вирішить, що решти товарів у вас більше немає, — з усіма наслідками з попереднього розділу.

Повторний прогін і ваші правки

Вивантаження працює в один бік: воно нічого не пише в картки товарів. Ціну, назву, опис, фото — усе, що ви правите в Elbuz, черговий прогін не чіпає й не повертає до старого. Єдине, що він змінює в базі, — позначка «Вивантажено» у товарах цього прогону та рядок самого шаблону, куди лягають посилання на файл, його розмір і дата.

Складніше з другим боком: що станеться з даними, які ви правили в кабінеті сервісу — переписали там назву, переставили категорію, підрізали опис. Це вирішує сервіс, а не Elbuz, і однакової відповіді для всіх приймачів немає. З нашого боку є рівно один важіль — склад вузлів у шаблоні: немає у файлі вузла <name> — сервісу нізвідки взяти нову назву, і ваша лишиться. Ведете якесь поле вручну на боці сервісу — приберіть відповідний рядок із шаблону, і фід перестане на нього претендувати.

Друга половина відповіді — ідентифікатор: доки {uuid} у пропозиції стабільний, сервіс оновлює наявні картки, а не створює поруч нові. Саме тому змінювати ідентифікатор у робочому шаблоні не варто (див. розділ вище).

Пробне вивантаження

Перед першим бойовим запуском натисніть «Перевірити». Програма виконає той самий код, що й повне вивантаження, але на одному товарі, збереже результат в окремий файл і покаже його вам — разом із переліком макросів, яких вона не впізнала. Боєвий файл і посилання на нього при цьому не чіпаються.

Це найшвидший спосіб зловити описку в назві макроса, зайвий вузол чи не ту адресу фото — на одному товарі, а не на тридцяти тисячах.

Показує перевірка чотири речі: готовий XML так, як його побачить приймач (перші 200 КБ); перелік нерозпізнаних макросів; помилки розмітки з номером рядка й колонки — їх знаходить справжній розбирач XML, той самий, яким користуються приймачі; і помилки у формулах — окремо «такого поля немає» й окремо «синтаксис формули». Номер товару, на якому вона проганялася, теж видно: без нього неясно, на чому саме шаблон перевірився.

Передпольотне зведення і стоп-правила

Перед кожним прогоном — і ручним, і за розкладом — програма рахує, що саме зараз піде у файл: усього товарів, з них у наявності, немає в наявності, під замовлення, без статусу наявності. Зведення лягає першим рядком у журнал прогону, а поруч — цифри минулого успішного прогону, щоб зміну було видно без пошуку. Прогін, що закінчився без нового файлу (порожня вибірка, «Стоп», помилка), точкою відліку не стає.

На цих числах працюють три стоп-правила. Пороги за замовчуванням такі:

ПравилоСпрацьовуєЩо робить
Обвал наявностіТоварів у наявності стало менше більш ніж на 30% щодо минулого успішного прогонуПопереджає
Обвал кількості товарівЗагальна кількість товарів упала більш ніж на 50%Попереджає
Порожнє вивантаженняПід умови шаблону не підійшов жоден товарПопереджає

Будь-яке з них можна перемкнути з «попередити» на «зупинити» — тоді прогін не почнеться взагалі: файл не перезбереться, по постійному посиланню лишиться попередній, а в журналі стане «Вивантаження зупинено стоп-правилом». Це і є страховка від того, щоб обвал у базовому каталозі не поїхав на майданчик.

Пороги задаються трьома шарами: вбудовані значення, потім загальні для акаунта, потім — власні для конкретного шаблону; останній шар перекриває попередні. Діалог зі зведенням перед ручним запуском можна вимкнути на весь акаунт; самі стоп-правила при цьому працюють далі, просто мовчки, у журнал.

Два випадки, коли на захист розраховувати не варто. Перший: шаблон ще жодного разу не вивантажився успішно — два правила з трьох порівнюють із минулим успішним прогоном, а його ще не було, і у зведенні перед запуском так і написано: «Шаблон ще не вивантажувався — порівнювати немає з чим». Другий: умови відбору використовують поля, які програма не вміє швидко порахувати, — тоді замість зведення в журнал іде рядок «Передпольотне зведення не розраховано…», і правила цього разу не спрацюють узагалі.

Що відбувається під час прогону

Натиснули «Вивантажити» — програма робить це в такому порядку:

  1. Рахує передпольотне зведення й перевіряє стоп-правила. Спрацювало правило з дією «зупинити» — на цьому все й закінчується.
  2. Створює файл заново, з нуля: спочатку шапка, далі рядки категорій, далі товари. Кожні 500 рядків написане скидається у файл, а в журнал іде рядок «Вивантаження товарів 500 із 12345» — по ньому видно, що робота йде і на якій вона позначці.
  3. Кладе готовий файл на FTP, якщо FTP налаштований. На підключення дається 10 секунд, на саму закачку — 120. Не встигли — у журналі буде рядок із кодом помилки, але прогін усе одно вважається успішним: FTP на його результат не впливає.
  4. Оновлює файл у сховищі: спочатку кладе новий, і лише коли він ліг, прибирає інші файли цього шаблону. Не вдалося залити — у журналі рядок «Файл не завантажився в хмарне сховище. Попередній файл і посилання на нього залишено без змін», далі «Вивантаження даних НЕ завершено: файл не сформовано», а посилання й дата в картці шаблону лишаються колишніми.
  5. Записує в картку шаблону посилання, розмір файлу, дату й тривалість прогону — і лише в самому кінці ставить товарам позначку «Вивантажено», якщо увімкнено «лише нові дані».
ТакНіТакНіНіТакЗапуск: кнопка«Вивантажити»,розклад або«Вивантажити всішаблони»Передпольотне зведенняі перевірка стоп-правилСпрацювало правило врежимі«Зупинитививантаження»?«Вивантаження зупиненостоп-правилом».За посиланням лишаєтьсяпопередній файлФайл збирається з нуля:шапка, категорії, товариЖоден товар не пройшоввідбірабо натиснули «Стоп»?«Вивантаження даних НЕзавершено:файл не сформовано».За посиланням лишаєтьсяпопередній файлФайл іде на FTP, якщойого налаштовано.Збій FTP прогін не зупиняєНовий файлзалився у сховище?«Файл не завантажився вхмарне сховище».«Вивантаження даних НЕзавершено».За посиланням лишаєтьсяпопередній файлЗі сховища прибираютьсяінші файли шаблонуУ шаблон записуютьсяпосилання, розмір і датаТоварам ставиться«Вивантажено»,якщо увімкнено«Вивантажувати лишенові дані»«Вивантаження данихзавершено»
Три бічні гілки — коли прогін закінчується без нового файлу: за посиланням тоді лишається попередній. Файл у сховищі змінюється лише на нижньому, прямому шляху

Журнал прогону йде в панель «Операції», вікно шаблона при цьому не блокується — в програмі можна працювати далі. Поруч із журналом є «Стоп»: програма перевіряє його після кожного товару.

Запуск кнопкою виконується в тому самому запиті, що й натискання, тому вкладку браузера до кінця роботи краще не закривати. Два способи, яким браузер не потрібен зовсім: розклад (його виконує сервер) і кнопка «Вивантажити всі шаблони» — вона запускає окремий фоновий процес і проганяє шаблони один за одним.

Якщо прогін обірвався

Зупинили кнопкою, перервався зв'язок, упав процес — наслідки однакові, бо файл публікується одним останнім кроком:

  • по постійному посиланню лишається попередній файл — приймач забере його, а не напівзібраний;
  • дата останнього вивантаження в картці шаблону не оновлюється, а в журналі з'являється «Вивантаження даних НЕ завершено: файл не сформовано» — рядком помилки, не звичайним завершенням;
  • позначки «Вивантажено» не ставляться: вони пишуться в самому кінці, тож наступний прогін із «лише новими даними» збере рівно ті самі товари й нічого не загубить;
  • повторювати можна одразу — файл щоразу збирається з нуля, задвоїтися нема чому. Вивантаження у файл не тарифікується: скільки б разів ви його не перезапустили, з балансу за це нічого не списується.

Те саме, якщо файл зібрався, але не залився у сховище: попередні файли шаблону прибираються тільки після вдалої заливки нового, тож за посиланням лишається вчорашній фід, а в журналі перед підсумковим рядком стоїть «Файл не завантажився в хмарне сховище. Попередній файл і посилання на нього залишено без змін».

Окрема історія — обрив вивантаження за розкладом. Доки програма вважає, що вивантаження вже виконується, наступні завдання за розкладом пропускаються з рядком «Скасовано вивантаження за розкладом, причина - вивантажується інший шаблон (конфлікт обробки даних)». Якщо прогін помер так, що не встиг зняти за собою замок, сторож знімає замок сам — не раніше ніж через годину від старту завдання і півгодини тиші в журналі. Живий довгий прогін сторож не чіпає: кожен його рядок у журналі — це і є пульс.

ТакНіНіТакПрогін помер, позначкалишиласяНастав час завдання зарозкладомІнше вивантаження зарозкладомще виконується?Завдання скасовано:«Скасовано вивантаженняза розкладом…»Завдання позначаєтьсяяк таке, що виконуєтьсяШаблон завдання«Активний»?Шаблон пропускається.У журналі нічогоЗвичайний прогін шаблонузі стоп-правиламиСторож знімає позначку:минула годинавід старту і пів години тишів журналі
Два способи, якими завдання за розкладом закінчується без прогону: зайнято іншим вивантаженням — з рядком у журналі, шаблон вимкнений — мовчки

Куди лягає файл і як оновлюється

Готовий файл Elbuz кладе у ваше сховище й дає на нього постійне посилання — саме його ви віддаєте сервісу. За розкладом файл перезбирається, посилання лишається тим самим, тож налаштовувати приймач щоразу не треба. За потреби той самий файл можна класти на FTP приймача — кнопка налаштування є в картці «Пов'язані налаштування».

Частоту обирайте за товаром: якщо ціни й залишки рухливі, має сенс кілька разів на день; якщо каталог статичний — раз на добу. Розклад задається кнопкою «Налаштування розкладу» в тій самій картці «Пов'язані налаштування». Докладніше про запуск, розклад і журнал прогону — в огляді вивантаження товарів.

Ім'я файлу задається в колонці «Файл» у списку шаблонів, і в ньому працюють макроси {DATE}, {DATETIME} і {TIME}. Виглядає зручно, але новий файл щоразу лягає під новим іменем, а після його заливки програма прибирає зі сховища інші файли цього шаблону. Тобто адреса, яку ви віддали сервісу вчора, сьогодні вже не оновлюється, а то й перестає працювати, і фід у нього просто «зникне». Дату в імені має сенс ставити тільки тоді, коли файл забирають руками; для постійного посилання ім'я має бути незмінним.

Ще одна дрібниця на цю тему: до збереженого посилання щоразу дописується службовий «хвіст» на кшталт ?uuid=384512 — щоразу інший. Сама адреса файлу від цього не змінюється, тож сервісу можна віддати посилання без хвоста.

Скільки це триває і де межі

Скільки збирається саме ваш фід, програма не вгадує — вона це показує. У списку шаблонів по кожному рядку видно: коли востаннє вивантажувалося, скільки тривав прогін, скільки важить файл, скільки товарів пішло і скільки з них були в наявності — зі стрілкою зміни щодо минулого разу. Перший же прогін називає ваше число, і далі розклад планується за ним, а не за здогадками.

Стелі на кількість товарів чи розмір файлу у вивантаженні немає. Числа, які в програмі таки зашиті:

  • написане скидається у файл порціями по 500 рядків — на цьому ж кроці оновлюється лічильник у журналі;
  • «Вивантажити всі шаблони» бере лише активні шаблони, проганяє їх по одному й має спільну стелю в одну годину на весь пакет;
  • на закачку файлу по FTP дається 120 секунд, на підключення — 10;
  • у тимчасовій папці лишаються три останні файли, решта видаляється на початку кожного прогону;
  • рядок підшаблону — до 255 символів;
  • у демонстраційному акаунті у фід іде не більше 100 товарів — на бойових акаунтах цього обмеження немає;
  • вікно «Перевірити» показує перші 200 КБ файлу.

Вимкнути шаблон чи видалити

У шапці картки шаблону є перемикач стану: «Активний» / «Вимкнений». Вимкнений шаблон поводиться так:

  • не виконується за розкладом — і не пише про це нічого. У журналі порожньо: пропуск вимкненого шаблона вважається вашим свідомим рішенням, а не збоєм. Якщо фід «перестав оновлюватися сам по собі», перевіряти треба саме цей перемикач;
  • пропускається в «Вивантажити всі шаблони» — туди беруться тільки активні;
  • усе одно запуститься вручну — кнопка запуску в рядку списку й кнопка «Вивантажити» в самій картці перемикача не питають.

Головне, чого не робить вимкнення: файл у сховищі нікуди не дівається. Посилання працює далі, сервіс качає з нього останній зібраний фід — просто той більше не оновлюється. Вимкнення шаблона не знімає товари з майданчика; воно заморожує файл у тому вигляді, у якому він був на момент останнього прогону. Увімкнули назад — наступний прогін збере файл заново, відновлювати нічого не потрібно, усі налаштування на місці.

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

Якщо помилковий фід уже забрали

Помилку помітили після того, як сервіс уже прочитав файл. Порядок дій такий.

  1. Виправте шаблон і натисніть «Перевірити». Перевірка проганяє той самий код на одному товарі й показує готовий XML, нерозпізнані макроси й помилки розмітки. Це найдешевший спосіб переконатися, що друга спроба не буде такою ж, як перша.
  2. Запустіть вивантаження. Файл за постійним посиланням замінюється цілком: до попереднього нічого не дописується, новий займає його місце. Виправлений фід стає єдиним, що можна забрати.
  3. Дочекайтеся, поки сервіс перечитає файл. Коли саме — залежить від розкладу на його боці; прискорити це з Elbuz не можна. Якщо в кабінеті сервісу є кнопка «оновити з фіда», швидше натиснути її.
  4. Якщо помилковий прогін ішов із «лише новими даними», зніміть цю галочку й віддайте один повний фід. Інакше виправлення поїдуть не для всіх товарів, а лише для тих, які встигли змінитися після помилкового прогону.

Відкотитися на вчорашній файл не вийде: новий файл лягає у сховище на місце попереднього, а в тимчасовій папці тримаються тільки три останні й лише до наступного прогону. Історії правок самого шаблону теж немає — попередній текст поля ніде не зберігається. Перед серйозною переробкою шаблону скопіюйте його вміст собі: це єдина резервна копія, яка у вас буде.

Сценарії

Назви й описи на майданчику ведете вручну

Задача: у кабінеті сервісу ви самі переписали назви товарів і не хочете, щоб наступний фід їх затирав.

Що зробити: у полі «Шаблон XML» приберіть із рядка товару вузол <name> (так само — <description>, якщо описи теж ведете там).

Що вийде: у файлі цих вузлів не буде, тож сервісу нізвідки взяти нову назву. Ціна, наявність і решта вузлів, які лишилися в шаблоні, ідуть у файл як і раніше. Чого не станеться: назви в картках Elbuz не зміняться — вивантаження в картки товарів не пише.

Товар закінчився, але має лишитися на майданчику

Задача: позиція тимчасово відсутня, і на майданчику вона має показуватися як «немає в наявності», а не зникати.

Що зробити: товар лишіть у відборі шаблону. У картці «Пов'язані налаштування» відкрийте «Налаштування оновлення за наявністю товару», у рядку свого статусу поставте «Активність налаштування» і, якщо приймач чекає не false, впишіть його слово в «Назва на сайті (у файлі)».

Що вийде: товар іде у фід, а {xml_stock_status} підставляє значення з цього рядка. Чого не станеться: якщо замість цього виключити товар із відбору, жодної команди «знято з продажу» сервіс не отримає — він просто не побачить рядка (що буде з товаром, який зник із фіда).

Великий каталог, приймач розуміє часткові файли

Задача: віддавати сервісу за розкладом лише те, що змінилося, а не весь каталог щоразу.

Що зробити: увімкніть «Вивантажувати лише нові дані» і задайте частоту кнопкою «Налаштування розкладу».

Що вийде: у файл потрапляють товари без позначки «Вивантажено»; після успішного прогону вона ставиться саме їм, а правка товару її знімає. Чого не станеться: якщо з минулого прогону нічого не змінилося, новий файл не збереться — у журналі «Вивантаження даних НЕ завершено: файл не сформовано», за посиланням лишиться попередній. І не вмикайте галочку у двох шаблонах одночасно: позначка одна на товар, зміни забере той шаблон, що пройде першим.

Не пустити на майданчик обвал наявності

Задача: якщо в базовому каталозі раптом «зникла» наявність, фід не має поїхати на майданчик.

Що зробити: у зведенні перед запуском натисніть «Налаштувати пороги» й для правила обвалу наявності оберіть режим «Зупинити вивантаження». Поріг за замовчуванням — 30%; для обвалу кількості товарів — 50%.

Що вийде: і ручний прогін, і прогін за розкладом не почнуться, у журналі — «Вивантаження зупинено стоп-правилом: …», за посиланням лишається попередній файл. Чого не станеться: поки шаблон жодного разу не вивантажився успішно, правила обвалу не спрацюють — порівнювати ще немає з чим; діє лише правило порожнього вивантаження.

Сервіс не приймає фото у фіді

Задача: приймач відхиляє файл із вузлами фото або бере зображення з іншого джерела.

Що зробити: приберіть макрос {image_list} з рядка товару в «Шаблон XML».

Що вийде: вузлів фото, які давав {image_list}, у файлі не буде. Чого не станеться: однієї знятої галочки «Фото» для цього замало — поки {image_list} стоїть у шаблоні, фото підуть у файл (хто головніший — галочка чи макрос).

Коли брати готовий тип, а не універсальний

Якщо приймач — відомий майданчик, для нього зазвичай уже є свій тип вивантаження: у ньому враховані обов'язкові вузли, ліміти й особливості ідентифікаторів. Універсальний YML беріть тоді, коли готового типу немає: власний сайт, партнерський обмін, сервіс аналітики, нішевий агрегатор. Перевірити просто — відкрийте список типів при створенні шаблону й пошукайте назву сервісу; немає в списку — беріть YML (XML).

Формат стандартний, але кожен сервіс додає свої умови: обов'язкові вузли, довжину назви, ліміт фото, набір валют, вимогу до категорій. Тому не орієнтуйтеся на «загальний YML» — відкрийте вимоги того сервісу, якому віддаєте фід, і підженіть шаблон під них. Пробне вивантаження на одному товарі показує результат так, як його побачить приймач.

Чого вивантаження не робить

  • Не знімає товар із продажу на боці сервісу. Зникнення з фіда — не команда на видалення, у файлі просто немає такого рядка. Керовано зняти позицію можна лише статусом наявності всередині фіда.
  • Не змінює дані в Elbuz. Прогін не чіпає жодного поля картки товару. Єдиний його слід у базі — позначка «Вивантажено» і рядок шаблону з посиланням, розміром і датою.
  • Не перевіряє вимоги приймача. Єдина автоматична перевірка — чи вийшов коректний XML, та й ту робить пробне вивантаження, а не бойовий прогін. Обов'язкові вузли, довжина назви, набір валют, ліміт фото — це умови конкретного сервісу, і про їх порушення ви дізнаєтеся від нього, а не з журналу прогону.
  • Не показує, що приймач файл прочитав. Журнал закінчується на тому, що файл покладено у сховище. Чи забрав його сервіс, коли саме і що з ним зробив — з боку Elbuz не видно.
  • Не зберігає попередніх версій. Ні старого файлу, ні старого тексту шаблону: обидва перезаписуються без копії.
Розбір частих проблем
Що ви бачитеЧому такЩо зробити
«Вивантаження даних НЕ завершено: файл не сформовано» Прогін обірвався або вибірка вийшла порожньою: жоден товар не пройшов умови шаблону Відкрийте «Перевірити» — воно назве причину. Найчастіша: увімкнено «лише нові дані», а змін не було (як влаштована галочка)
Фід перестав оновлюватися, у журналі за розкладом порожньо Шаблон вимкнений: за розкладом він пропускається мовчки Перемкніть стан у шапці картки на «Активний» (вимкнути чи видалити)
«Скасовано вивантаження за розкладом, причина - вивантажується інший шаблон (конфлікт обробки даних)» За розкладом одночасно виконується тільки одне вивантаження Дочекайтеся завершення сусіднього прогону. Якщо він помер, замок знімається сам (обрив прогону)
«Під умови цього шаблону не підійшов жоден товар — вивантажувати нічого» Відбір, категорії, магазин або склад відсікли все Перевірте умови відбору, обрані категорії, магазин і склад (чому товар зникає з файлу)
«Товар #… не потрапив у вивантаження: він не проходить умови цього шаблону» Конкретний товар відсікається однією з восьми умов Пройдіть таблицю причин згори вниз: ознака вивантаження, категорія, відбір, магазин, склад
«Макроси не розпізнано, і вони будуть вирізані з файлу: …» Описка в назві макроса: такого поля немає Вставляйте макроси з підказки (Ctrl+Space) або з довідника поруч із полем, а не руками
«У шаблоні не знайдено повторюваний вузол товару… Зміни НЕ збережено» Вузол товара перейменували або зіпсували, і програма більше не знає, який рядок розмножувати Поверніть тег на місце або впишіть його нове ім'я в «Розширене» → «Тег рядка товару»
«Вивантаження зупинено стоп-правилом: …» Кількість товарів або наявність упали різкіше за поріг Перевірте статуси наявності в базовому каталозі. Файл при цьому не змінився (стоп-правила)

Часті питання

Що таке YML і чим він відрізняється від звичайного XML?

YML — це XML із наперед відомою структурою для товарних каталогів: корінь yml_catalog, усередині магазин, блоки валют, категорій і пропозицій. Саме тому приймачі розуміють такий файл без додаткової розмітки, тоді як довільний XML доводиться описувати вручну.

Чи треба редагувати шаблон, якщо мене влаштовує стандартний фід?

Ні. Новий шаблон створюється вже з робочим фідом: шапка, валюта, категорії й пропозиції з основними полями. Правити його потрібно лише тоді, коли приймач просить додаткові вузли або інші імена.

Що буде, якщо помилитися в назві макроса?

Нерозпізнаний макрос під час вивантаження видаляється з результату без попередження — у файлі просто буде порожньо на цьому місці. Тому перед бойовим запуском робіть пробне вивантаження: воно показує перелік макросів, яких програма не впізнала.

Звідки береться значення available у фіді?

З таблиці, яку відкриває кнопка «Налаштування оновлення за наявністю товару» в картці «Пов'язані налаштування»: там кожному вашому статусу задано, що саме піде у фід і яку кількість показувати. За замовчуванням «в наявності» дає true, решта — false, але значення можна замінити на власні слова, якщо приймач вимагає інших. Рядок діє, лише доки в ньому стоїть «Активність налаштування».

Скільки фото потрапляє у фід і звідки беруться посилання?

Стільки, скільки задано в полі «Максимальна кількість фотографій», а адреса складається з поля «Посилання на фото товару» — домену й папки, де лежать зображення. Самі файли у фід не вкладаються: приймач качає їх за посиланнями.

Як у фід потрапляють різновиди товару?

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

Що буде з товаром, якого більше немає у фіді?

Вирішує сервіс, а не Elbuz: у YML немає ознаки «видалено», є тільки перелік того, що є. Один приймач знімає таку позицію з публікації, інший лишає її висіти. Якщо потрібно керовано сказати «більше не продається», товар має лишитися у фіді з ознакою відсутності — це задається таблицею статусів наявності, а не виключенням товару з відбору.

Прогін обірвався — що зараз лежить за посиланням?

Попередній файл. Новий публікується одним останнім кроком, тож напівзібраний фід приймачу не дістанеться. Дата останнього вивантаження не зрушиться, у журналі буде «Вивантаження даних НЕ завершено: файл не сформовано», а повторити прогін можна одразу — файл щоразу збирається з нуля.

Якщо вимкнути шаблон, фід зникне у сервісу?

Ні. Файл лишається у сховищі, посилання працює, сервіс качає з нього останній зібраний фід — просто той більше не оновлюється, бо за розкладом вимкнений шаблон пропускається (і нічого про це не пише в журнал). Видалення шаблона теж не прибирає файл зі сховища: щоб сервіс перестав отримувати дані, посилання прибирають на його боці.

Увімкнув «лише нові дані», а в журналі «файл не сформовано». Це помилка?

Це означає, що з минулого прогону не змінився жоден товар: вибірка вийшла порожня, тому новий файл не збирався й по посиланню лишився попередній. Позначка «Вивантажено» ставиться товарам у кінці успішного прогону й знімається будь-якою правкою товару. Врахуйте ще, що позначка спільна на всі шаблони: якщо галочка увімкнена у двох, зміни забере той, чий прогін пройшов першим.

Чи була стаття корисною?