Парсинг YML-фідів для імпорту товарів в 1С-Бітрікс

Парсинг YML-фідів для імпорту товарів в 1С-Бітрікс Постачальник надіслав YML-файл на 50 000 товарів — а в Бітрікс потрібно завантажити все за вихідні. Стандартні інструменти не справляються: крива кодування, пропущені категорії, дублі оферів і таймаути при завантаженні картинок. Ми автоматизуємо
Послуги, які ми пропонуємо
Показано 1 з 1Усі 1626 послуг
Парсинг YML-фідів для імпорту товарів в 1С-Бітрікс
Середній
~1-2 тижні

Наші компетенції:

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

Останні роботи

  • image_website-b2b-advance_0.webp
    Розробка сайту компанії B2B ADVANCE
    1440
  • image_bitrix-bitrix-24-1c_fixper_448_0.webp
    Розробка веб-сайту для компанії ФІКСПЕР
    1013
  • image_bitrix-bitrix-24-1c_development_of_an_online_appointment_booking_widget_for_a_medical_center_594_0.webp
    Розробка на базі Бітрікс, Бітрікс24, 1С для компанії Development of an Online
    751
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Розробка на базі 1С Підприємство для компанії МИРСАНБЕЛ
    872
  • image_crm_dolbimby_434_0.webp
    Розробка сайту на CRM Бітрікс24 для компанії DOLBIMBY
    791
  • image_crm_technotorgcomplex_453_0.webp
    Розробка на базі Бітрікс24 для компанії ТЕХНОТОРГКОМПЛЕКС
    1153

Парсинг YML-фідів для імпорту товарів в 1С-Бітрікс

Постачальник надіслав YML-файл на 50 000 товарів — а в Бітрікс потрібно завантажити все за вихідні. Стандартні інструменти не справляються: крива кодування, пропущені категорії, дублі оферів і таймаути при завантаженні картинок. Ми автоматизуємо цей процес так, щоб ви забули про ручний імпорт. За 10+ років роботи з Бітрікс ми обробили понад 500 000 товарів через YML-фіди та напрацювали перевірені рішення, які економлять до 70% часу на кожному імпорті.

Чому YML кращий за Excel для імпорту?

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

Структура YML-фіду

YML — це XML-формат для товарних фідів від Яндекса. Постачальники часто надають саме YML: структура задокументована, даних достатньо для повноцінного імпорту. Це простіше, ніж парсити довільний Excel, але своїх нюансів вистачає.

<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE yml_catalog SYSTEM "shops.dtd"> <yml_catalog date="2025-03-15 10:30"> <shop> <name>Назва магазину</name> <currencies> <currency id="RUR" rate="1"/> </currencies> <categories> <category id="1">Електроніка</category> <category id="2" parentId="1">Смартфони</category> </categories> <offers> <offer id="12345" available="true"> <url>https://shop.ua/product/12345</url> <price>29990</price> <currencyId>RUR</currencyId> <categoryId>2</categoryId> <picture>https://shop.ua/img/12345.jpg</picture> <name>Смартфон Samsung Galaxy A54</name> <vendor>Samsung</vendor> <vendorCode>SM-A546</vendorCode> <description>Опис товару</description> <param name="Колір">Чорний</param> <param name="Об'єм пам'яті">128 ГБ</param> </offer> </offers> </shop> </yml_catalog> 

Ключові елементи: offer id — унікальний ідентифікатор (аналог XML_ID в Бітрікс), available — ознака наявності, categoryId — посилання на категорію, param — довільні характеристики.

Парсинг категорій та побудова дерева

Категорії в YML утворюють ієрархію через атрибут parentId. При імпорті потрібно створити відповідну структуру розділів в інфоблоці. Алгоритм:

  1. Завантажити всі категорії в асоціативний масив [id => ['name' => ..., 'parentId' => ...]].
  2. Рекурсивно побудувати дерево.
  3. Для кожної категорії: знайти розділ за XML_ID = 'yml_cat_{id}' або створити новий.
  4. Зберегти маппінг [yml_id => bitrix_section_id].
$sectionId = CIBlockSection::GetList( [], ['IBLOCK_ID' => $iblockId, 'XML_ID' => 'yml_cat_' . $cat['id']], false, ['ID'] )->Fetch()['ID']; if (!$sectionId) { $bs = new CIBlockSection(); $sectionId = $bs->Add([ 'IBLOCK_ID' => $iblockId, 'XML_ID' => 'yml_cat_' . $cat['id'], 'NAME' => $cat['name'], 'IBLOCK_SECTION_ID' => $parentBitrixId, 'ACTIVE' => 'Y', ]); } 

Імпорт товарів (offers) та робота із зображеннями

Основний цикл обробки — обхід усіх оферів в XML. Для кожного створюється або оновлюється елемент інфоблоку. Особлива увага — завантаження зображень: при фіді на 10 000 товарів це 10 000 HTTP-запитів. Ми використовуємо перевірку хешу URL та паралельне завантаження через агенти, щоб скоротити час у 3–5 разів.

foreach ($xml->shop->offers->offer as $offer) { $xmlId = (string)$offer['id']; $available = (string)$offer['available'] === 'true'; $params = []; foreach ($offer->param as $param) { $params[(string)$param['name']] = (string)$param; } $fields = [ 'IBLOCK_ID' => $iblockId, 'NAME' => (string)$offer->name, 'XML_ID' => $xmlId, 'ACTIVE' => $available ? 'Y' : 'N', 'IBLOCK_SECTION_ID' => $sectionMap[(string)$offer->categoryId] ?? null, 'PROPERTY_VALUES' => [ 'VENDOR' => (string)$offer->vendor, 'ARTICLE' => (string)$offer->vendorCode, ], ]; $existId = getElementByXmlId($xmlId, $iblockId); $el = new CIBlockElement(); if ($existId) { $el->Update($existId, $fields); } else { $el->Add($fields); } updatePrice($existId ?: $el->LAST_ID, (float)$offer->price); } 

Які типи оферів підтримує YML?

YML розрізняє кілька типів, кожен зі своїми обов'язковими полями:

Тип Атрибут Особливість
Простий type="simple" або без атрибута Всі категорії, базові поля
Одяг type="vendor.model" Поля vendor, model, розмірна сітка
Книги type="book" Поля author, publisher, ISBN
Аудіокниги type="audiobook" Специфічні медіа-поля

На практиці 80% постачальників використовують простий тип. Специфічні типи потребують додаткового маппінгу властивостей.

Як прискорити імпорт товарів із зображеннями?

Зображення — найвужче місце. Наш підхід: перед скачуванням порівнюємо хеш URL із попереднім імпортом (зберігаємо у властивості). Якщо URL не змінився — зображення не завантажуємо. Для нових товарів — фонові агенти з обмеженням 5 одночасних потоків. Це економить до 70% часу на партії з 50 000 товарів.

Типові помилки при парсингу та як їх уникнути

  • Проблема з кодуванням — YML приходить в UTF-8, а Бітрікс може очікувати windows-1251. Рішення: конвертація через iconv() перед парсингом.
  • Відсутні категорії — коли в YML вказано categoryId, якого немає в блоці категорій. Рішення: створювати відсутні категорії з позначкою «Тимчасова».
  • Дублі оферів — кілька записів з однаковим id. Рішення: використовувати XML_ID та перевіряти наявність перед додаванням.

Приклад з практики

Нещодавно налаштували імпорт для інтернет-магазину електроніки — 30 000 товарів від 5 постачальників. Основна проблема: різні схеми категорій (в одного — вкладеність 2 рівні, в іншого — 4). Вирішили через проміжний маппінг: таблиця-словник в HL-блоці. За 4 дні розробили універсальну обв'язку, яка зараз оновлює каталог щоденно по Cron.

Що входить в роботу

Етап Склад
Аналіз YML-фіду Перевірка структури, всіх типів оферів, кодування
Проектування Схема маппінгу категорій та властивостей
Розробка Скрипт імпорту з обробкою дублів, логуванням
Тестування Пробний імпорт на копії, перевірка помилок
Деплой та підтримка Налаштування агентів, документація, 1 місяць супроводу

Терміни розробки

Варіант Термін
Базовий імпорт (товари, ціни, категорії) 2–3 дні
Повний з характеристиками та зображеннями 4–5 днів
Багатопостачальницька система з UI та дедуплікацією 7–10 днів

Під ключ розробляємо як прості інтеграції, так і складні мульти-фіди. Хочете налаштувати парсинг YML під свій магазин? Зв'яжіться — оцінимо проект за 1 день. Гарантуємо якість та дотримання термінів. Замовте парсинг YML — і забудьте про ручний імпорт назавжди.