20 прайсов поставщиков в один формат: как устроена контент-машина маркетплейса

20 прайсов поставщиков в один формат

У крупного маркетплейса есть проблема, о которой снаружи не догадываются: контент. Чтобы товар появился на портале, его надо получить от поставщика, привести к внутреннему формату, разложить по категориям и регулярно обновлять. Поставщиков десятки, и каждый отдает данные по-своему.

Начали с одного прайса. Сейчас работает около двадцати источников, и новые добавляются регулярно.

20 прайсов поставщиков в один формат

Модель работы: платеж за источник

Договорились сразу: оплата считается за каждый источник отдельно, ежемесячно. Эта схема оказалась удобной обеим сторонам, и я теперь часто ее предлагаю.

  • Заказчику понятно, за что платит. Добавили поставщика – добавился платеж. Поставщик отвалился – платеж ушел. Никаких переговоров о пересмотре общей суммы.
  • Легко начать. Первый прайс стоит столько же, сколько один прайс, а не как “проект интеграции”. Порог входа низкий.
  • Исполнителю честно. Каждый источник – это реальная работа и реальный риск поломки. Двадцать источников требуют в двадцать раз больше внимания, чем один.
  • Рост происходит сам. Заказчик не спрашивает разрешения и не запускает процесс согласования бюджета, он просто пишет: “вот еще один поставщик”.

Еще один плюс такой схемы: если бизнесу нужно временно сократить расходы, можно остановить часть источников, а не весь проект, и потом так же легко их вернуть.

Что приходит от поставщиков

Двадцать источников – это четыре принципиально разных типа.

XML-фиды по ссылке

Самый удобный вариант. Поставщик дает адрес, по которому лежит актуальный файл. Сложность только в том, что структура у всех разная: разные названия полей, разная вложенность, разная логика категорий и характеристик.

Google Таблицы

Примерно четверть источников ведется руками в таблицах. Это самый непредсказуемый формат: люди добавляют колонки, меняют порядок, пишут примечания в ячейках с ценами, вставляют пустые строки-разделители. Обработка таких источников должна быть параноидальной и не верить ничему.

Личные кабинеты с авторизацией

Поставщик выдает доступ к своему кабинету, откуда надо забирать каталог. Скрипт заходит под выданными данными и собирает информацию. Здесь главное – аккуратность: сессия, лимиты, корректное поведение. Работу от имени клиента с его же доступом я делаю только по прямому поручению.

Обычные сайты

Иногда у поставщика нет никакой выгрузки, есть только сайт. Тогда данные собираются прямо с него.

Единый внутренний формат – главное архитектурное решение

Соблазн написать двадцать отдельных скриптов “из источника сразу в формат портала” велик. Это ошибка, которая становится очевидной на пятом источнике.

Правильная схема – два слоя:

  1. Адаптер источника. Знает только одно: как достать данные у конкретного поставщика и привести их к единой внутренней структуре.
  2. Формирователь выгрузки. Знает только внутреннюю структуру и требования портала.

Что это дает:

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

Именно поэтому добавление новых прайсов в этом проекте идет потоком и не вызывает у меня паники.

Проверки, без которых нельзя

Когда источников двадцать, руками проверять невозможно. Поэтому каждая выгрузка проходит автоматический контроль:

  • количество товаров резко упало по сравнению с предыдущим разом – стоп и уведомление;
  • у большинства позиций исчезла цена – стоп;
  • появились нулевые или отрицательные цены – позиции отбрасываются;
  • дубли по артикулу внутри одного источника – сводятся по заданному правилу;
  • кодировка и спецсимволы – проверяются перед формированием файла.

Принцип простой: лучше не обновить каталог совсем, чем обновить его мусором. Пустой прайс на портале заметят за час, а тихо испорченные цены могут жить неделями и стоить денег.

Обновление раз в два часа

Частота подобрана под бизнес: данные должны быть свежими, но постоянное долбление источников никому не нужно. Двадцать источников обновляются по расписанию, разнесенному по времени, чтобы не создавать пиков нагрузки ни на сервере, ни у поставщиков.

Отдельно стоит сказать о разных скоростях. Не все источники нужны одинаково часто: у кого-то прайс меняется несколько раз в день, у кого-то раз в неделю. Расписание под каждый источник настраивается отдельно.

Что это дает бизнесу

  • Контент-команда не занимается механической работой. Люди работают над качеством карточек, а не над перекладыванием колонок.
  • Новый поставщик подключается быстро. Это прямо влияет на скорость роста ассортимента.
  • Данные однородны. Все товары на портале выглядят одинаково независимо от того, от кого пришли.
  • Проблемы видны сразу. Если поставщик сломал свой прайс, об этом известно в тот же день, а не когда пожалуется покупатель.

Кому подходит такая схема

Маркетплейсам, агрегаторам, дистрибьюторам и любым магазинам, работающим более чем с тремя-четырьмя поставщиками. Точка, после которой ручная обработка становится дороже автоматизации, наступает очень быстро – обычно на третьем-четвертом источнике.

Признак, что вам это уже нужно: в компании есть человек, который значительную часть недели занимается перекладыванием прайсов в нужный формат.

Опишите, сколько у вас поставщиков и в каком виде они отдают данные. Я скажу, сколько времени займет первый источник и как будет выглядеть подключение следующих. Подробнее о форматах – на странице конвертация прайс-листа поставщика в YML.

Частые вопросы

Почему не писать отдельный скрипт под каждого поставщика?+
Потому что на пятом источнике это становится неуправляемым. Правильная схема - два слоя: адаптер источника и формирователь выгрузки. Тогда изменение требований портала правится в одном месте, а не в двадцати.
Что произойдет, если поставщик отдаст испорченный прайс?+
Сработают проверки: резкое падение количества товаров, исчезновение цен, нулевые значения. Обновление останавливается, приходит уведомление. Лучше не обновить каталог, чем обновить его мусором.
Почему оплата считается за каждый источник отдельно?+
Так понятно обеим сторонам, за что платят. Добавили поставщика - добавился платеж, отвалился - платеж ушел. Начинать можно с одного прайса без согласования большого бюджета.
Как часто обновляются данные?+
Базово раз в два часа, но расписание под каждый источник настраивается отдельно - у кого-то прайс меняется несколько раз в день, у кого-то раз в неделю.
Похожая задача?

Опишите ее - за 15-20 минут скажу, решается ли она, каким путем и сколько примерно будет стоить. Без обязательств.

Обсудить задачу →