Данные
ECS → InSales Pipeline
Собирает каталог автотоваров из нескольких поставщиков и готовит CSV для загрузки в 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.