Shop Scanner API — сервис для поиска товаров на маркетплейсах с возможностью фильтрации по категориям, рейтингу, скидкам и диапазону цен. API позволяет искать товары на Wildberries и возвращает результаты в удобном для использования формате.
- Node.js (версия 14 или выше)
- MongoDB (версия 4.4 или выше)
- Клонируйте репозиторий:
git clone https://github.com/your-username/Shop-Scanner.git
cd Shop-Scanner- Установите зависимости:
npm install- Создайте файл
.envв корне проекта со следующим содержимым:
PORT=3000
MONGODB_URI=mongodb://localhost:27017/shop_scanner
NODE_ENV=development
Для запуска сервера в режиме разработки:
npm run start:apiСервер будет доступен по адресу: http://localhost:3000
GET /api/categories
Возвращает список доступных категорий.
Пример ответа:
{
"categories": ["Одежда", "Обувь", "Детские товары", "Спорт", "Красота", "Ювелирные изделия"],
"total": 6
}POST /api/search
Создает новую задачу поиска товаров с указанными параметрами фильтрации.
Параметры запроса (в теле JSON):
categories(array): Список категорий для поискаminRating(number, опционально): Минимальный рейтинг товаровminDiscount(number, опционально): Минимальная скидка в процентахpriceRange(object, опционально): Диапазон ценmin(number): Минимальная ценаmax(number): Максимальная цена
Пример запроса:
{
"categories": ["Детские товары"],
"minRating": 4,
"minDiscount": 20,
"priceRange": {
"min": 1000,
"max": 5000
}
}Пример ответа:
{
"taskId": "83ea3f72-c335-4047-807b-101d6c94b717",
"status": "pending",
"progress": 0
}GET /api/search/{taskId}
Возвращает результаты задачи поиска по её ID.
Пример ответа:
{
"taskId": "83ea3f72-c335-4047-807b-101d6c94b717",
"status": "completed",
"progress": 100,
"results": [
{
"id": "test-детские-товары-1",
"title": "Тестовый товар 1 для категории Детские товары",
"brand": "Бренд 1",
"category": "Детские товары",
"price": 1000,
"originalPrice": 1500,
"discount": 33,
"rating": 4.73,
"imageUrl": "https://example.com/image1.jpg",
"productUrl": "https://example.com/product1"
},
// Другие товары...
]
}GET /api/products/{category}
Возвращает товары для указанной категории с возможностью фильтрации.
Параметры запроса (query parameters):
minRating(опционально): Минимальный рейтингminDiscount(опционально): Минимальная скидка в процентахminPrice(опционально): Минимальная ценаmaxPrice(опционально): Максимальная цена
Пример:
GET /api/products/Спорт?minRating=4&minDiscount=20&minPrice=1000&maxPrice=5000
POST /api/products/update-all
Запускает обновление товаров для всех категорий.
Параметры запроса (опционально в теле JSON):
minRating(number): Минимальный рейтингminDiscount(number): Минимальная скидкаpriceRange(object): Диапазон ценmin(number): Минимальная ценаmax(number): Максимальная цена
API использует модель асинхронных задач для поиска товаров. Это означает:
- При запросе поиска создается задача с уникальным
taskId - Поиск выполняется в фоновом режиме
- Статус и результаты можно получить по ID задачи
- Результаты сохраняются в базе данных и доступны для повторного получения
Категории определены статически в конфигурационном файле src/config/marketplaces/wildberries.ts. Каждая категория имеет:
- Имя (например, "Одежда", "Обувь")
- ID категории на Wildberries
- Subject для запроса к API Wildberries
Если API Wildberries недоступен или возвращает ошибку, система генерирует тестовые данные для обеспечения работоспособности интерфейса.
В текущей версии API нет автоматического обновления данных. Обновление происходит:
- При первом запросе к категории, если данных нет в базе
- При вызове эндпоинта
/api/products/update-all
API имеет функцию очистки старых задач поиска (старше 24 часов), но она не вызывается автоматически.
GET http://localhost:3000/api/categories
POST http://localhost:3000/api/search
{
"categories": ["Детские товары"],
"minRating": 4,
"minDiscount": 20,
"priceRange": {
"min": 1000,
"max": 5000
}
}GET http://localhost:3000/api/search/83ea3f72-c335-4047-807b-101d6c94b717
GET http://localhost:3000/api/products/Спорт?minRating=4&minDiscount=20&minPrice=1000&maxPrice=5000
POST http://localhost:3000/api/products/update-all
{
"minRating": 4,
"minDiscount": 20,
"priceRange": {
"min": 1000,
"max": 5000
}
}src/app.ts- точка входа приложенияsrc/controllers/- контроллеры для обработки запросовsrc/services/- бизнес-логика и сервисыsrc/models/- модели данныхsrc/config/- конфигурационные файлыsrc/api/- интерфейсы для работы с внешними API
Приложение использует MongoDB для хранения результатов поиска. Основные коллекции:
searchresults- результаты поиска товаров
- API Wildberries может блокировать запросы (код 498) из-за защиты от ботов
- Отсутствует автоматическое обновление данных
- Ограниченный набор категорий, определенный в конфигурации
Возможные улучшения:
- Добавить авторизацию для API
- Реализовать периодическое обновление данных с помощью планировщика задач
- Расширить поддержку для других маркетплейсов
- Реализовать обход защиты от ботов для стабильного получения данных
- Добавить кеширование запросов для повышения производительности