Веб-приложение: парсит объявления OLX по заданным запросам, сравнивает цену со средней по похожим объявлениям, даёт AI-вердикт по каждому лоту (стоит ли брать) и раз в сутки формирует таблицу "Топ дня" с лучшими предложениями.
Полноценный веб-сервис для поиска выгодных предложений на OLX. Парсит объявления по заданным запросам, сравнивает цену со средней по рынку, даёт AI-вердикт по каждому лоту (брать / подождать / пропустить) и раз в сутки автоматически формирует таблицу "Топ дня" с лучшими предложениями.
Полностью автоматический пайплайн: парсинг → AI-анализ → живая лента на сайте, без единого ручного действия после запуска.
- Backend: FastAPI, SQLAlchemy, SQLite, APScheduler
- Frontend: React (Vite), React Router
- AI: Groq API (Llama 3.1)
- Парсинг: BeautifulSoup4, Requests
- Зайди на https://console.groq.com
- Зарегистрируйся (email или через Google) — бесплатно, карта не нужна
- Слева найди раздел API Keys → Create API Key
- Скопируй ключ — он понадобится на шаге 3
cd backend
python -m venv venv
# Активация виртуального окружения:
# Windows:
venv\Scripts\activate
# macOS / Linux:
source venv/bin/activate
pip install -r requirements.txt# Windows: copy .env.example .env
# macOS/Linux:
cp .env.example .envОткрой файл .env и заполни:
GROQ_API_KEY— ключ, полученный на шаге 1SEARCH_QUERIES— что искать на OLX, через запятую (например:iphone 13,playstation 5)
uvicorn app.main:app --reload --port 8000Если всё ок, увидишь в терминале что сервер поднялся на http://localhost:8000.
Проверить можно, открыв в браузере: http://localhost:8000/docs — там интерактивная
документация API (Swagger), где можно вручную дёрнуть любой эндпоинт.
Не закрывай этот терминал — backend должен работать постоянно, пока пользуешься сайтом.
Открой новый терминал (backend должен продолжать работать в старом):
cd frontend
npm install
npm run devЧерез пару секунд появится ссылка вида http://localhost:5173 — открой её в браузере.
- На сайте открой вкладку "Объявления"
- В поле "Запустить парсинг вручную" введи запрос (например
iphone 13) и нажми кнопку — это заставит бэкенд сразу пойти спарсить OLX, не дожидаясь таймера - Через несколько секунд обнови страницу (или нажми "Применить") — должны появиться карточки объявлений с AI-вердиктом
- Вкладка "Топ дня" заполнится автоматически в полночь — либо вызови вручную:
curl -X POST http://localhost:8000/daily-top/generate-now
backend/app/scraper.py— тянет HTML со страницы поиска OLX, вытаскивает карточки объявленийbackend/app/ai_verdict.py— каждое новое объявление отправляется в Groq (бесплатная LLM), получаем текстовую оценку + короткую рекомендацию (buy/wait/skip)backend/app/scheduler.py— фоновые задачи: парсинг по таймеру + сбор топ-10 дня в полночьbackend/app/main.py— REST API (FastAPI), который отдаёт данные фронтендуfrontend/— React-приложение, два экрана: лента объявлений и топ дня
Парсер ничего не находит. OLX периодически меняет вёрстку сайта. Открой
backend/app/scraper.py, найди константы SELECTOR_* в начале файла — их может
понадобиться обновить под актуальную структуру HTML (смотри через DevTools в браузере).
AI-вердикт не появляется / пишет "AI не настроен". Проверь, что GROQ_API_KEY
в .env заполнен и что backend был перезапущен после изменения .env.
Фронтенд не видит бэкенд (ошибка CORS или "не удалось загрузить"). Убедись, что
backend запущен на порту 8000, а в frontend/.env (создай, если нет) указано:
VITE_API_BASE=http://localhost:8000
- Backend: Render.com или Railway.app — оба имеют бесплатный tier, подключаешь
GitHub-репозиторий, они сами ставят зависимости и запускают
uvicorn - Frontend: Vercel.com или Netlify.com — тоже бесплатно, просто подключаешь репозиторий,
они сами собирают
npm run build - Не забудь после деплоя backend обновить
VITE_API_BASEво фронтенде на реальный URL, аFRONTEND_ORIGINв backend.env— на реальный URL фронта (для CORS)