Як завантажити каталог з XML / YML: стандартний фід без розмітки колонок

31 хв

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

Коли це знадобиться:

  • Каталог є у вигляді YML-фіда (Prom, Rozetka, Hotline, CMS) — товари лягають у каталог разом із категоріями.
  • Фід лежить за посиланням — шаблон за розкладом оновлює ціни й залишки.
  • Ціни у фіді в іншій валюті — програма перераховує їх у базову за курсом із фіда.
  • Кольори й розміри — окремі пропозиції — з однаковим group_id вони складаються в один товар із варіантами.

З чого почати: шаблон типу «XML» з посиланням на фід у вікні «Завантаження».

Що вміє імпорт XML / YML

Де це і хто має доступ

Меню
Довідники → Операції → Завантаження даних → шаблон типу «XML»
Право доступу
вікно «Завантаження» у «Правах груп»
Підготувати
файл .xml / .yml або пряме посилання на фід

Джерело в шаблоні — «Локальний файл» або «Зовнішнє посилання». За розкладом працює тільки посилання.

Форма шаблону «Yandex Market (формат YML)» з вибором джерела даних
1Перемикач «Локальний файл / Зовнішнє посилання»
2Поле джерела (файл або посилання)
  1. Перемикач дозволяє обрати, звідки брати файл — локальний комп'ютер чи зовнішнє посилання.
  2. Поле джерела показує обраний файл або адресу посилання, з якої буде завантажено дані.

Який фід Elbuz прочитає без розмітки

YML — це XML із наперед відомою структурою. У корені лежить yml_catalog, у ньому — магазин із трьома блоками: валюти (currencies), категорії (categories) і пропозиції (offers). Кожна пропозиція offer — один товар. Назви елементів стандартні, тому Elbuz сам знає, де ціна, де картинка, а де категорія.

XML із довільними назвами вузлів цей шаблон не прочитає — такий файл вантажать універсальним імпортом, де відповідність полів задаєте ви.

YML — специфікація Yandex Market, яку підтримують багато майданчиків. Опис формату для конкретного майданчика — у його довідці, наприклад у Prom: Імпорт через YML — формат файлу. Elbuz читає стандартні елементи YML незалежно від джерела.

Вікно «Завантаження» зі списком шаблонів імпорту
1Рядок шаблону «Yandex Market (формат YML)»
  1. Рядок шаблону «Yandex Market (формат YML)» типу XML у списку завантажень.

Як Elbuz упізнає товар із фіда

Ключ зіставлення — атрибут id пропозиції (offer id="…"). Elbuz записує його в поле товару «ID товару (рядок UUID)» і на кожному прогоні шукає картку саме за ним. Стабільний id — повторний імпорт оновлює наявну картку. Id, що змінюється від вивантаження до вивантаження, щоразу дає дублі. Детальніше: повторний імпорт без дублів.

Атрибут group_id зв'язує варіанти одного товару: пропозиції з однаковим group_id складаються в один товар із варіантами, перша в групі стає основною.

Id береться так, як записаний у файлі. Два фіди з простою нумерацією (1, 2, 3…) дають однакові ключі, і другий шаблон перепише картки першого. Розводить їх галочка «Перевірити унікальність записів з урахуванням цього джерела завантаження». Детальніше: два шаблони на той самий товар.

Дублі від нестабільного id видно в сітці товарів: назва однакова, «ID товару (рядок UUID)» різний, «Дата додавання» — день прогону. Спершу полагодьте джерело, потім приберіть зайве. Детальніше: якщо завантажили не те.

Куди потрапляють значення пропозиції

Елемент YMLПоле картки в Elbuz
атрибут idUUID (ключ зіставлення)
name (або vendor + model для type="vendor.model")назва товару
price (+ priceuah/pricerub/priceusd/pricekzt) та currencyIdціна (перераховується у вашу базову валюту за курсом)
oldpriceстара ціна
атрибут available (true/false), presence, stockстатус наявності
quantityзалишок
vendorCode (або code)артикул (MPN)
vendor (або publisher)виробник
categoryId / category / блок categoriesкатегорія товару
picture / image (кілька)фото (перше — головне)
descriptionопис
barcode / ISBNштрихкод (EAN) / ISBN
param name="…"характеристики (атрибути); param name="sku" → артикул SKU
url, keywordsпосилання на товар, ключові слова (теги)
manufacturer_warrantyгарантія

Для пропозиції типу vendor.model назва збирається з бренду й моделі, інколи з префіксом типу (typePrefix). Елемент param стає атрибутом товару: name — назва атрибута, вміст — значення. Елемента у фіді немає — поле нової картки лишається порожнім.

Що перезапише повторний прогін

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

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

Шлях однієї пропозиції на прогоні. Гілка «ні» від першого ромба — нова позиція: без розділу вона не стане карткою. Гілка «так» — наявна картка, і тут усе вирішують два прапорці на самій картці.
нітакнітактакнітакніПропозиція з файлуЄ картка з таким idсеред тих, що бачить шаблон?categoryId збігсяз розділом каталогу?Заводиться нова карткаКартку не створеноНа картці прапорець«Не оновлювати»?Поля, ціна, назва й опислишаються як булиОновлюються поля, назва й описНа картці прапорець«Фіксована ціна»?Ціна лишається вашаЦіна й стара ціна — з фіда
  • Початок або кінець
  • Дія або результат
  • Розвилка: далі шлях залежить від відповіді

Як читаються наявність і ціна

Статус наявності береться з першого, що знайдеться у пропозиції:

У фідіСтатус у картці
текст у presence чи stock («в наявності», «під замовлення»)за вашими правилами визначення статусу
атрибут available="true"«у наявності»
атрибут available="false"«немає»
нічогоперший статус довідника з класифікацією «Є» і його «Кількість за замовчуванням»

Фід без ознаки наявності зробить товари такими, що є на складі. Якщо це не те, перевірте статуси й кількість у довіднику до першого прогону.

Звідки береться статус наявності. Текст у presence важить більше за атрибут available. Правила визначення статусу й статус за замовчуванням ставлять ще й кількість — з довідника, а не з фіда.
такніtruefalseінший тексттакніПропозиція з файлуЗаповненийелемент presence?Береться текст presenceБереться атрибут available,а якщо він порожній — елементstockЗначення true або false?Статус «у наявності»Статус «немає»Текст збігся з правиламивизначення статусу?Статус із правилаі його кількістьПерший статус із наявністю «Є»і його кількість за замовчуванням
  • Початок або кінець
  • Дія або результат
  • Розвилка: далі шлях залежить від відповіді

Валюта й ціна

Ціна береться з першого заповненого елемента: price, priceuah, pricerub, priceusd, pricekzt. Валюту задає currencyId, курс — блок currencies самого фіда:

  • Валюта товару є в currencies — ціна перераховується в базову за курсом із фіда.
  • Курс валюти товару у фіді дорівнює 1, вона не ваша базова, а курсу базової у фіді немає — курс береться з вашого довідника валют.
  • Валюти товару в currencies немає — ціна завантажується без перерахунку, «як є».

Як із фіда будуються категорії

Дерево категорій Elbuz будує з блоку categories: кожен category з атрибутами id і parentId задає розділ і його батька. Товар прив'язується до розділу за своїм categoryId.

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

Вже наявні картки такий фід оновить нормально, свій розділ вони збережуть.

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

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

Як оновлювати каталог за посиланням

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

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

Що перевіряє планувальник, перш ніж запустити шаблон. Якщо хоч одна з трьох перевірок не пройдена, цього разу каталог не зміниться.
такнінітакнітакНастав час за розкладомУже йде іншезавантаження за розкладом?У журналі «Скасованозавантаженняза розкладом»Шаблон «Активний»?Шаблон пропущеноУ шаблоні заповнене поле«Посилання на файл ізтоварами»?Нічого не завантажуєтьсяФайл забирається за посиланнямПрогін іде так само,як після кнопки «Завантажити»
  • Початок або кінець
  • Дія або результат
  • Розвилка: далі шлях залежить від відповіді
Шапка шаблону «Yandex Market (формат YML)»
1Стан шаблону
2Історія запусків
3Завантажити
  1. Пілюля стану показує, чи шаблон «Активний» або «Вимкнений».
  2. Значок «Історія запусків» відкриває журнал попередніх завантажень.
  3. Кнопка «Завантажити» запускає завантаження за цим шаблоном.

Пауза, тривалість і обрив прогону

  • Пауза. Пілюля «Вимкнений» у шапці шаблону зупиняє розклад, товари й налаштування лишаються. Детальніше: вимкнути шаблон чи видалити.
  • Тривалість. Стелі за кількістю пропозицій немає, файл читається потоково. Тривалість останнього прогону стоїть у колонці «Останнє завантаження», історію показує «Історія запусків». Детальніше: межі прогону, як перевірити завантаження.
  • Лічильник у журналі оновлюється кожну тисячу пропозицій, тож на невеликому фіді рядка «З файлу отримано товарів» може не бути — підсумок покаже «Всього товарів завантажено».
  • Обрив. Записане до зупинки лишається, повторний запуск безпечний, якщо id у фіді не змінюються. Два завантаження одночасно не запускайте. Детальніше: якщо прогін обірвався.

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

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

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

Блоки «Що завантажувати» та «Повʼязані налаштування» у формі шаблону
1Видалення записів, яких немає у файлі
2Унікальність з урахуванням джерела
3Налаштування розкладу
  1. Видаляти записи в базовому каталозі, яких немає в завантаженому файлі — прибирає з каталогу товари, відсутні в новому файлі.
  2. Перевірити унікальність записів з урахуванням цього джерела завантаження — порівнює записи лише в межах цього джерела.
  3. Налаштування розкладу — кнопка відкриває розклад автоматичного завантаження.
Три перевірки перед видаленням. Нижня розвилка визначає, по якій частині каталогу пройде видалення: без прапорця перевірки унікальності — по всьому.
нітакнітакнітакКрок видаленняУвімкнено «Видаляти записив базовому каталозі, яких немаєв завантаженому файлі»?Нічого не видаляєтьсяЗ файлу прочитанохоча б один товар?Картки не видаляютьсяУвімкнено «Перевіритиунікальністьзаписів з урахуваннямцього джерела завантаження»?Під перевірку йде весь каталогПід перевірку йдуть картки цьогошаблону,заведені вручну, з прайс-листа йпарсеромВидаляються картки, яких немає уфайлі,з описом, фото й атрибутами
  • Початок або кінець
  • Дія або результат
  • Розвилка: далі шлях залежить від відповіді

Сценарії

Постачальник віддає фід за посиланням, ціни й залишки мають оновлюватися самі

Що ввімкнути. У шаблоні — «Зовнішнє посилання» й адресу фіда в полі «Посилання на файл із товарами (Каталог)». Далі «Налаштування розкладу» в блоці «Повʼязані налаштування»; пілюля в шапці шаблону — «Активний».

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

Каталог має в точності повторювати фід

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

Що вийде. На кожному прогоні картки, яких немає у файлі, видаляються з описом, фото й атрибутами. Друга галочка береже товари інших шаблонів завантаження; заведені вручну, з прайс-листа чи парсером під видалення потрапляють. Видалене не відновлюється. Галочка видалення неактивна — у вашої групи немає на неї права.

Два постачальники нумерують товари однаково

Що ввімкнути. «Перевірити унікальність записів з урахуванням цього джерела завантаження» в шаблонах обох фідів.

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

Ціну ставите самі, а залишок і наявність беруться з фіда

Що ввімкнути. У картці товару — прапорець «Фіксована ціна».

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

Що робити, коли фід завантажився не так

Розбір частих проблем
Що ви бачитеЧому такЩо зробити
«Файл не вдалося передати на сервер. Можливо, він завеликий або зв'язок обірвався» Файл із комп'ютера не доїхав до сервера: обмеження розміру сервера або обрив зв'язку Завантажте фід за посиланням — там цього обмеження немає (оновлення за посиланням)
«Всього товарів завантажено: 0» За посиланням приїхав не фід — сторінка помилки чи форма входу — або файл не YML Відкрийте посилання в браузері й переконайтеся, що віддається XML. Каталог не постраждав (зник із фіда)
Пропозицій у файлі сотні, а нових карток не додалося Для нових позицій не знайшовся розділ: немає блоку categories або categoryId не збігається Перевірте блок розділів у фіді (категорії)
Кирилиця в назвах «поламана» Файл не в кодуванні UTF-8 Попросіть джерело віддавати фід в UTF-8
Ціна завантажилася в чужій валюті, без перерахунку Валюти товару немає в блоці currencies фіда Додайте валюту з курсом у фід (валюта й ціна)
XML завантажився, а ціни, фото чи назви порожні Назви вузлів у файлі не стандартні для YML Вантажте файл універсальним імпортом з власною розміткою
«Скасовано завантаження за розкладом, причина - завантажується інший шаблон (конфлікт обробки даних)» У цю мить уже йшло інше завантаження Рознесіть розклади шаблонів у часі (обрив прогону)
«Операція перервана користувачем!» Спрацювала кнопка зупинки — ваша чи іншого співробітника Запустіть завантаження знову: повтор безпечний (обрив прогону)

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

Яка різниця між XML і YML?

YML — це XML із фіксованою структурою Yandex Market. Файл зі структурою YML (yml_catalog, offers, categories) вантажиться шаблоном «XML» без розмітки. Довільний XML вантажать універсальним імпортом.

XML надіслав постачальник — вантажити його в каталог чи в прайс-лист?

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

Чому в товарах немає опису чи характеристик?

Elbuz бере лише те, що є у фіді. Немає у пропозиції description чи param — поля лишаться порожніми. Дозаповнити картки можна парсером зі сторонніх сайтів.

Як зупинити автоматичне оновлення, нічого не видаляючи?

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

Після кожного завантаження з'являються копії товарів. Чому?

Джерело віддає нові id пропозицій на кожне вивантаження. Попросіть джерело зробити id сталими, а копії приберіть (дублі).

Чи можна віддати свій каталог у форматі YML?

Так, це окремий шаблон вивантаження — вивантаження у форматі YML (XML).

Суміжні теми

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