Конвертер Excel в XML для Prom.ua: як віддати маркетплейсу пряме посилання на прайс

Конвертер Excel в XML для Prom.ua

Типова ситуація в українському e-commerce: постачальник надсилає прайс у форматі Excel, а маркетплейс приймає тільки XML або YML за посиланням. Між цими двома фактами лежить ручна робота, яку власник магазину робить по кілька разів на тиждень: відкрив файл, поправив колонки, зберіг у потрібному вигляді, залив кудись, оновив посилання в кабінеті. Півгодини щоразу, і кожен раз є шанс щось переплутати.

Клієнт прийшов з коротким запитом: “потрібна програмка, яка перетворює мій вхідний Excel на XML і віддає пряме посилання, щоб я поставив його в кабінеті на Prom.ua і товари оновлювалися самі”. Розповім, як я це зробив, чому не став писати програму для комп’ютера і які деталі в такій задачі зазвичай недооцінюють.

Конвертер Excel в XML для Prom.ua

Чому не програма для комп’ютера, а сервіс

Найпростіше рішення на вигляд – написати програму під Windows, віддати клієнту exe-файл і забути. На практиці це погана ідея, і я майже завжди від неї відмовляю.

  • Програма живе на одному комп’ютері. Захворів співробітник, зламався ноутбук, поїхали у відпустку – оновлення прайсу не сталося.
  • Оновлення доводиться розсилати. Змінився формат прайсу – треба зібрати нову версію і простежити, щоб її встановили. Помножте на кількох співробітників.
  • Пряме посилання все одно потрібне. Маркетплейс не ходить на комп’ютер користувача. Файл усе одно треба десь розмістити, тобто без сервера не обійтися.
  • Діагностика неможлива. Коли щось пішло не так, я не бачу, що саме сталося на чужій машині.

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

Як влаштований процес

Крок 1. Завантаження файлу

Клієнт відкриває сторінку, вибирає Excel-файл, натискає кнопку. Одразу отримує повідомлення, що файл прийнято. Ніякої реєстрації, ніяких налаштувань – одна кнопка. Це важливо: чим менше елементів на екрані, тим менше приводів помилитися.

Крок 2. Обробка на сервері

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

  • Ціна. У прайсах вона приходить як завгодно: з пробілами між розрядами, з комою замість крапки, з валютою в тій самій комірці, з націнкою в сусідній колонці. Усе це приводиться до одного числа.
  • Наявність. “Є”, “в наявності”, “+”, “так”, число залишку, порожня комірка – усе це треба перекласти в те, що розуміє майданчик.
  • Артикул. Він має бути унікальним і незмінним. Якщо в постачальника артикул дублюється або міняється, товар на майданчику з’їдуть.
  • Категорії. Назви категорій постачальника зіставляються з категоріями магазину. Це робиться один раз таблицею відповідностей.
  • Фото. Посилання перевіряються, биті відсіюються. Товар без фото продається погано, але товар із посиланням на неіснуючу картинку виглядає ще гірше.

Крок 3. Формування XML

З нормалізованих даних збирається файл потрібної структури. Тут важливі дрібниці, через які майданчик відхиляє фід: кодування, екранування спецсимволів у назвах і описах, коректні типи полів, обов’язкові атрибути. Один незакритий амперсанд у назві товару – і весь файл не пройде перевірку.

Крок 4. Викладка і пряме посилання

Готовий файл лягає в моє хмарне сховище за постійною адресою. Адреса не змінюється ніколи – це принципово. Клієнт один раз прописав її в кабінеті маркетплейсу, і далі просто завантажує новий Excel, а майданчик за розкладом сам забирає свіжу версію.

Крок 5. Відповідь у Telegram

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

Чому Telegram-група, а не бот і не пошта

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

  • Керування доступом на боці клієнта. Йому не треба писати мені “додайте, будь ласка, ще одну людину”. Додав сам, прибрав сам.
  • Спільна історія. Уся команда бачить, коли востаннє оновлювався прайс і чи були помилки.
  • Нічого не губиться. Пошта потрапляє в спам, повідомлення в групі – ні.
  • Зворотний зв’язок. Питання ставлять прямо в групі, я бачу контекст: який файл, коли, з якими попередженнями.

Грабельки, про які варто знати заздалегідь

Постачальник міняє формат без попередження

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

Порожні і зіпсовані рядки

У реальних прайсах трапляються рядки-роздільники, підсумкові рядки, коментарі, об’єднані комірки. Усе це треба відсіювати, інакше в каталог поїдуть товари з назвою “Разом” і ціною порожньою.

Дублі

Один і той самий товар може зустрітися в прайсі двічі з різною ціною. Правило треба задати явно: брати перший, брати останній, брати мінімальну ціну. Мовчазно залишати обидва не можна – маркетплейс сприйме це як дві різні картки.

Кодування

Кирилиця в старих вивантаженнях досі приїжджає в несподіваних кодуваннях. Це вирішується автоматичним визначенням, але перевіряти результат очима на першому запуску обов’язково.

Що змінилося для клієнта

До: відкрити файл, вручну перебрати колонки, зберегти, залити, перевірити. Півгодини і ризик помилки в кожному кроці.

Після: завантажив файл, отримав повідомлення в Telegram, пішов у своїх справах. Маркетплейс сам забирає оновлення за розкладом.

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

Куди це зазвичай розростається

Конвертація прайсу майже ніколи не лишається єдиною задачею. Практично всі клієнти з такою задачею через якийсь час приходять із продовженням:

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

Нерідко простий конвертер Excel в XML згодом переростає в повноцінний моніторинг цін конкурентів. Про такий моніторинг є окремий розбір у блозі.

Скільки це коштує

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

Складніший варіант – кілька джерел, автоматичне забирання файлів, правила націнки, обробка фото – теж оцінюється після розмови. Детальніше про напрямок можна почитати на сторінці конвертація прайс-листа постачальника в YML.

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

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

Чому не програма для комп'ютера, а серверний сервіс?+
Програма живе на одному комп'ютері і залежить від людини. Маркетплейсу все одно потрібне посилання на файл, значить сервер потрібен у будь-якому разі. Серверний варіант ще й дозволяє мені бачити помилки і лагодити їх.
Чи не зміниться посилання на прайс при оновленні?+
Ні, адреса постійна. Клієнт прописує її в кабінеті один раз, далі майданчик сам забирає свіжу версію за розкладом.
Що буде, якщо постачальник змінить структуру прайсу?+
Колонки шукаються за назвами заголовків, а не за номерами. Якщо потрібну колонку знайти не вдалося, обробка зупиняється і повідомляє про це, а не заливає зіпсовані дані.
Чи можна забирати прайс автоматично, без ручного завантаження?+
Так, це найчастіше продовження задачі: файл забирається з пошти, за посиланням або з особистого кабінету постачальника.
Схожа задача?

Опишіть її - за 15-20 хвилин скажу, чи вирішується вона, яким шляхом і скільки орієнтовно коштуватиме. Без зобов'язань.

Обговорити задачу →