Mc Smog 3299cca574 feat: add product detail enrichment for Magnit products
- Add isDetailsFetched field to Product model
- Add fetchProductDetails() and fetchProductObjectInfo() methods to MagnitApiScraper
- Add ProductParser methods for detail parsing
- Add ProductService methods: getProductsNeedingDetails(), updateProductDetails(), markAsDetailsFetched()
- Add enrich-product-details.ts script with statistics tracking
- Update package.json with "enrich" script command
- Add E2E_GUIDE.md documentation
- Exclude debug scripts from tsconfig type-check (temporary)

Co-Authored-By: Claude <noreply@anthropic.com>
2026-01-22 01:52:50 +05:00

Supermarket Scraper - Magnit API

Система скрапинга товаров из магазинов Магнит через API.

Требования

  • Node.js 18+
  • pnpm
  • Docker и Docker Compose (для PostgreSQL)

Установка

  1. Установите зависимости:
pnpm install
  1. Установите браузеры для Playwright:
pnpm exec playwright install chromium
  1. Настройте переменные окружения:
cp .env.example .env

Отредактируйте .env и укажите:

  • DATABASE_URL - строка подключения к PostgreSQL
  • MAGNIT_STORE_CODE - код магазина для скрапинга (например, "992301")
  1. Запустите PostgreSQL через Docker:
docker-compose up -d
  1. Сгенерируйте Prisma Client:
pnpm prisma:generate
  1. Создайте миграции Prisma:
pnpm prisma:migrate

Использование

Тестирование подключения к БД

pnpm test-db

Запуск скрапинга

pnpm dev

Или с указанием кода магазина:

MAGNIT_STORE_CODE=992301 pnpm dev

Структура проекта

supermarket/
├── src/
│   ├── config/          # Конфигурация
│   ├── database/         # Prisma схема и клиент
│   ├── scrapers/         # Скраперы API
│   ├── services/         # Сервисы (Product, Parser)
│   ├── scripts/          # CLI скрипты
│   └── utils/            # Утилиты (Logger, Errors)
├── docker-compose.yml    # PostgreSQL контейнер
└── package.json

API Магнита

  • Endpoint: POST /webgate/v2/goods/search
  • Защита: Запрос на каталог работает без защиты, но для детальной информации требуется Playwright сессия

База данных

Используется PostgreSQL с расширением pgvector (для будущих embeddings).

Модели:

  • Store - магазины
  • Category - категории товаров
  • Product - товары со всеми полями из API
  • ScrapingSession - сессии скрапинга

Разработка

Prisma команды

# Генерация клиента
pnpm prisma:generate

# Создание миграции
pnpm prisma:migrate

# Открыть Prisma Studio
pnpm prisma:studio

Сборка

pnpm build

Важные моменты

  1. Запрос на каталог работает без защиты - можно использовать обычный HTTP запрос
  2. Для получения детальной информации о товарах требуется инициализация сессии через Playwright
  3. Все товары получаются без фильтрации по категориям (пустой массив categories: [])
  4. Rate limiting: задержка 300ms между запросами

Записки

Интеграция Requestly с Cursor

Написал нейросеткой по быстрому правило по статье https://requestly.com/blog/how-to-use-cursor-to-generate-api-testcases-in-requestly/ Может быть кривое правило

todos

Description
No description provided
Readme 198 KiB
Languages
TypeScript 100%