Кейс: Автоматизация прайсов автомобильных шин и дисков.

Кейс: Автоматизация прайсов автомобильных шин и дисков.

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

Чем особенны прайсы шин и дисков.

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

Требования к программе:

  1. Умение сшивать данные с разных ячеек, в заданной последовательности;
  2. Преобразовывать, распознавать части текста в строке (позже будет ясно);
  3. Сложные условия распределения по категориям;
  4. Фильтр по количеству (скорее всего понадобится отсеять товары с количеством менее 4);
  5. Настройка уникальности товара в прайсе;

С первыми четырьмя пунктами справляются только программы Etrade Price list Importer и Inter-price от Bitforce. Пятый пункт нужен только в том случае, если в прайсе поставщика нет кода поставщика и названий, только характеристики. Такой прайс был всего один, для таких случаев подойдет только решение Etrade, на нем и остановился.

Внимание! Сразу предупреждаю, предлагаемое решение очень сложное, но не обязательное. Многие прайсы можно импортировать как есть, но в таком случае вам придется искать одинаковые позиции и заполнять характеристики вручную, что в разы дольше и сложнее предлагаемой автоматизации. Для тех, кто столкнулся с этим и хочет поставить точку в этом вопросе могут читать дальше. Начнем.

Настройка дополнительных полей

Первое что необходимо сделать — добавить в дополнительные поля.

Я выделил следующие характеристики для Шин:

  • Индекс скорости/нагрузки
  • Профиль (мм)
  • Ширина профиля
  • Высота профиля (%)
  • Радиус
  • Сезон
  • Индекс скорости
  • Наличие шипов
  • RunFlat
  • Увеличенная грузоподъемность

Дополнительно для грузовых могут быть:

  • Камерность
  • Применяемость/Тип использования
  • Слойность
  • Тип конструкции

Для автомобильных дисков:

  • Диаметр диска
  • Вылет (диски) ET
  • Диаметр расположения отверстий PCD
  • Диаметр ступицы(диски) DIA
  • Количество отверстий
  • Марка машины, к которой подходит диск
  • Цвет

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

Список дополнительных полей
Список дополнительных полей

Если будете повторять мои действия, идентификаторы ID поля будут отличаться, и в макроподстановках нужно использовать их.

Теперь покажу на реальных примерах.

Пример первый, в прайсе есть характеристики

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

Все характеристики в отдельном поле
Все характеристики в отдельном поле

Все характеристики в одних раздельных полях.
Стандартные поля настраиваем как обычно:

Стандартные поля, прайс1
Стандартные поля, прайс1

Обязательно необходимо указать в данном случае код поставщика, и указать что он участвует в уникальности товара, иначе многие товары “склеются”, это как раз тот пункт пятый, которые предъявлял в требовании для данной тематики.

Настраиваем уникальность, прайс 1
Настраиваем уникальность, прайс 1

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

Настройка дополнительных полей, прайс 1
Настройка дополнительных полей, прайс 1

И внесем пару мелких штрихов. Если мы хотим, чтоб у нас в названии были слово шипы, если они есть, а также признак что шины усилены — XL, прописываем в доп. полях условия меняющие ДА на слова Шипы, и XL, RunFlat в нужных полях

ЕСЛИ ({Столбец_k}=’Да’,’Шипы’,’ ‘)

ЕСЛИ ({Столбец_M}=’Да’,’XL’,’ ‘)

ЕСЛИ ({Столбец_n}=’Да’,’Runflat’,’ ‘)

Это также можно сделать через автозамену, но указав нужное поле.

На самом деле XL параметр необязателен, это больше для ориентации клиентов. Если посмотреть шины представленные на Яндекс-Маркете — там нигде не используется добавка XL. Т.к. далее парсил фотографии с Яндекс-Маркета, данное обозначение с названия пришлось удалять.  Лучше сразу решить надо ли оно.

Также в данном прайсе очищаем в поле радиуса не нужный ноль в конце.  В итоге для каждого товара у нас появляются красивые заполненные характеристики:

Характеристики в доп. полях
Характеристики в доп. полях

И Теперь формируем название в том виде, которое нам надо. Наиболее часто шины обозначают таким способом:

{Производитель} {модель} {RunFlat} {Ширина профиля}/{Высота профиля} {Диаметр} {Индекс нагрузки +Индекс скорости} {шипы, если есть}

Сформируем такие названия используя макроподстановки

Формируем названия
Формируем названия

Напоминаю, что ID полей будут отличаться в вашей базе. Но после формирования и проверки, выражение стоит сохранить, оно будет одинаковая для всех прайсов.

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

Ограничиваем импорт от 4шт
Ограничиваем импорт от 4 шт.

Возможно вы наоборот хотите выделится, и продавать тем, кто ищет замену одной, тогда эту опции использовать не надо. Или же можно сделать, если их менее 4 шт, то дополнительная наценка на такие товары, и статус “внимание менее шт” — это также просто настроить.

И собственно результат:

Необходимые названия
Необходимые названия

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

Частный случай первого варианта

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

Используем различные поля
Используем различные поля

Т.е. в гарантию мы поместили высоту шины, в единицу измерения — ширину, в вес индекс, в объем скорость, в габарит шипы. Что куда — вообще не играет роли.

И обязательно включаем уникальность для них:

Все поля учитываем
Все поля учитываем

Включаем уникальность для них.

Если в одном прайсы и шины и диски — и полей под все характеристики не хватает, надо загружать прайс дважды, один раз шины, второй диски.

Пример второй, прайс без характеристик

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

Вариант 2 - данные не разделены
Вариант 2 — данные не разделены

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

Радиус: R(\d\d[.,]?\d?) (C?)   — Символ «С» отдельно, потому-что в данном прайсе он также через пробел, также учитываем дробные радиусы.

Ширина профиля: (\d\d\d)/

Высота профиля: /(\d\d)

Индекс скорости: \s(\d*/?\d\d\d?)[lmnpqrstuhvwyz]\s  — выражение получилось несколько сложным, потому что индексы скорости бывают двойные, а также существует индекс скорости R, который совпадает с обозначением радиуса, перед которым также 2 цифры.

Индекс нагрузки \d\d([lmnpqrstuhvwyz])\s

Разбиваем характеристики по полям
Разбиваем характеристики по полям

И последнее: модель — делать будем обратным путем, удалять из названия все ранее перечисленное, и производителя — и на выходе останется только модель

Очищаем модель
Очищаем модель

И проверяем итоговый результат:

Результат обработки прайса 2
Результат обработки прайса 2

Как видим все необходимые поля и модель сформировались из названия. Теперь осталось сложить название в заданной нами последовательности. Аналогично все делается для дисков.

Показал 2 крайних случая, все остальные прайсы обычно, что-то среднее между 1 и 2 примером.

Прочие нюансы

-Чтобы в начале названий товара еще была принадлежность к сезону, или типа авто —  Летние шины, грузовые шины —  необходимо добавить еще макроподстановку {CAT_NAME}  или {CAT_ADDON_TEXT1} или {RULES_IMPORT_ADDON_TEXT1}  в зависимости от каталога, поэтому в примерах их не указываю.

— Многие поставщики в данной тематики дают прайс в формате XML где уже все разбито по колонкам. Запросите такую возможность у поставщика.

-Очень важный момент: привести производителей, модели и цвета к единым значениям. Некоторые поставщики используют по-разному написания бренда и модели (кириллицей, латиницей), для образца лучше брать Яндекс-Маркет.

-Букву обозначающую скорость, обязательно писать без пробела от индекса шины, чтоб эти слова были слитные — это избавит от ошибок сопоставления.

— Лучше не использовать в названии «XL», т.к. в реальных названиях этих обозначений нет, а технологию «RunFlat» лучше обозначать сразу после модели.

-После цифр радиуса или ширины удаляйте ,0  (т.е R16 а не R16,0 )

— Во всех дробных числах заменяйте запятую на точку

Заключение

Обработки прайсов шин и дисков, тема действительно уникальна, и интересна. Вынеc много нового для себя от данной работы. В данной статье пытался максимально подробно описать все нюансы, чтоб могли настроить свои прайс-листы. Вы также всегда можете обратится ко мне, и получить качественную настройку Ваших прайсов. Цена настройки одного прайс листа — 4000 российских рублей (60$).