Данные

ECS → InSales Pipeline

Собирает каталог автотоваров из нескольких поставщиков и готовит CSV для загрузки в InSales.

Веб-интерфейс pipeline импорта товаров в InSales.

Что решает проект

ECS → InSales — расширяемый production-пайплайн подготовки и обогащения товарного каталога автокомпонентов для импорта в платформу InSales.

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

Поддерживаемые источники

Контракт с источниками абстрагирован через интерфейс SourceParser, что позволяет легко подключать новые площадки: - ECS Tuning — прямой HTML-скрейпинг со страниц каталога; - Tunershop.shop — интеграция через Magento 2 GraphQL API; - Armaspeed — извлечение через WordPress REST API в связке с JSON-LD разметкой; - aFe Power — Magento 2 GraphQL с извлечением сложных таблиц fitment-совместимости.

Архитектура и ключевые паттерны

В основе пайплайна лежат классические паттерны проектирования: - Strategy: парсеры конкретных магазинов (ECSParser, TunershopParser, ArmaspeedParser, aFeParser) взаимозаменяемы и изолированы; - Facade / Pipeline: фасадный объект управляет полным циклом обработки товара без раскрытия внутренней сложности внешнему коду; - Template Method: базовый класс Store определяет общий алгоритм специфичной логики магазинов (нормализация моделей, синонимы, парсинг изображений); - Registry: реестр ProductRegistry хранит историю обработанных товаров и гарантирует идемпотентность и дедупликацию между повторными запусками; - Fallback Chain: многоуровневая цепочка резервных значений защищает пайплайн от сбоев при недоступности внешних LLM.

Единая модель данных и AI-слой

Внутри системы используется единая датакласс-модель Product, включающая около 42 полей (оригинальное и русское наименование, производитель, цены, габариты, fitment-совместимость, SEO-поля, ссылки на медиа).

Пакет ai/ построен вокруг DeepSeek API: модуль AIEnricher отвечает за комплексное обогащение, AINaming нормализует русскоязычные названия, AIDescriptions генерирует продающие описания и особенности, AISEO формирует метатеги, а ManufacturerFinder ищет и нормализует данные о брендах.

Нормализация применяемости и конвейер изображений

Для автокомпонентов критически важно точно сопоставить совместимость с марками и моделями автомобилей. Модули applicability.py разбирают fitment-таблицы, нормализуют алиасы брендов и разделяют комбинированные индексы кузовов.

Компонент ImageResolver реализует полный конвейер медиа: многопоточное скачивание через ThreadPoolExecutor, удаление водяных знаков, дедупликацию идентичных файлов, оптимизацию и раздачу через локальный HTTP-сервер для формирования валидных ссылок в CSV InSales.

Интерфейсы, эксплуатация и тестирование

Проект поддерживает два режима работы: CLI-утилиту для пакетного скриптового запуска и Web UI на FastAPI + Jinja2 + vanilla JS с отображением прогресса и лимитов.

Сервис подготовлен к работе под управлением systemd. Качество кода подтверждено обширным набором тестов: около 199 pytest-тестов покрывают парсеры, устойчивость к повреждённому JSON, работу с изображениями, правила применяемости и структуру CSV.