Монорепозиторный проект на TypeScript для парсинга веб-сайта Steam. Приложение собирает и анализирует данные из магазина Steam, включая информацию об играх, жанрах, тегах, ценах, количестве игроков онлайн и связях между похожими продуктами.
Steam Web Parser предназначен для:
- Сбора информации об играх и программном обеспечении из магазина Steam
- Отслеживания количества игроков онлайн с помощью Steam API
- Мониторинга цен
- Анализа связей между похожими продуктами ("More Like This")
- Предоставления веб-интерфейса для просмотра и визуализации собранных данных
- Монорепозиторий: Проект использует подход монорепозитория с рабочими пространствами pnpm.
- Пакет Core: Содержит основную функциональность для парсинга веб-страниц Steam.
- База данных: PostgreSQL для хранения данных.
- ORM: Prisma для доступа к базе данных и управления ею.
Приложение построено на базе Puppeteer для автоматизации браузера в headless-режиме и сбора данных с веб-страниц Steam. Основная логика распределена между специализированными воркерами: TopSellerGrabber для списков лидеров продаж, AppGrabber для извлечения детальной информации о приложениях и SearchGrabber для функционала поиска. Задачи обрабатываются через асинхронную очередь с настраиваемой параллельностью.
Для хранения данных используется PostgreSQL, взаимодействие с которой реализовано через Prisma ORM.
Схема базы данных включает сущности приложений (App), их URL-адресов (AppUrl) и связей между ними (AppToApp),
что позволяет анализировать граф рекомендаций "More Like This".
HTTP JSON API позволяет получить краткую информацию о приложениях и рекомендациях "More Like This".
Документация API доступна через Swagger UI по адресу /api-docs после запуска API сервера. Спецификация в формате JSON доступна по адресу /swagger.json.
- Node.js (v18 или новее)
- pnpm (v8 или новее)
- Docker и Docker Compose
corepack enable
corepack use pnpm
pnpm run buildУказать переменные окружения:
cd packages/core
cp .env.example .envЗапустить БД и создать схему:
docker-compose up -d db
pnpm run prisma:generate && pnpm run prisma:migrateЗапуск основного краулера в фоне, он будет добирать игры в глубину, которые остались после поиска через API
cd packages/core
pnpm run crawlИли можно запустить сбор данных из каталога Top Sellers
cd packages/core
pnpm run crawl:topЗапуск API сервера
cd packages/core
pnpm run apiЗапуск UI
cd packages/ui
pnpm run devСбор данных о количестве игроков онлайн и ценах
cd packages/core
pnpm run online_n_priceДля сбора данных потребуется указать STEAM_API_KEY в packages/core/.env. Это ключ для Steam Web-API, который можно получить по адресу https://steamcommunity.com/dev/apikey
Проект использует ESLint и Prettier для поддержания стиля кода:
pnpm run lint: Запуск ESLint для проверки и исправления ошибок.pnpm run format: Форматирование кода с помощью Prettier.