Skip to content

Webappmaster-Eugene/msk_flat_parser

Repository files navigation

Moskvartaly Monitor

Мониторинг свободных квартир на сайте москварталы.рф с уведомлениями в Telegram.

Функции

  • 🔍 Автоматический парсинг квартир с заданными фильтрами
  • 📱 Уведомления в Telegram при появлении свободных квартир
  • 🔄 Проверка каждые 1-3 минуты (настраивается)
  • 💚 Heartbeat-уведомления каждые 6 часов (00:00, 06:00, 12:00, 18:00)
  • 🛡️ Защита от блокировки (рандомные задержки, ротация User-Agent)
  • 📊 Хранение истории в SQLite
  • 🐳 Готов к деплою в Docker/Coolify

🎯 Как это работает

Логика мониторинга

  1. Бот открывает страницу с вашими фильтрами на сайте москварталы.рф
  2. Нажимает "Показать N квартир" чтобы загрузить список
  3. Считает кнопки на карточках квартир:
    • "забронировано" — квартира занята (нельзя кликнуть)
    • "забронировать" — квартира ДОСТУПНА (можно кликнуть и забронировать)
  4. Если появилась хоть одна кнопка "забронировать" → отправляет вам уведомление в Telegram 🎉

Уведомления

Событие Когда отправляется
🚀 Запуск При старте бота
🎉 Свободная квартира Когда появляется кнопка "забронировать"
💚 Heartbeat Каждые 6 часов (00:00, 06:00, 12:00, 18:00)
⚠️ Ошибка При сбое парсинга

Быстрый старт

1. Создание Telegram бота

  1. Напишите @BotFather в Telegram
  2. Отправьте /newbot и следуйте инструкциям
  3. Сохраните полученный токен

2. Получение Chat ID

  1. Напишите вашему боту любое сообщение
  2. Откройте: https://api.telegram.org/bot<YOUR_TOKEN>/getUpdates
  3. Найдите "chat":{"id": — это ваш Chat ID

3. Настройка

# Клонируйте репозиторий
cd moskvartaly-monitor

# Скопируйте конфигурацию
cp .env.example .env

# Отредактируйте .env
# TELEGRAM_BOT_TOKEN=your_token
# TELEGRAM_CHAT_ID=your_chat_id

4. Локальный запуск

# Установка зависимостей
npm install

# Установка браузера Playwright
npx playwright install chromium

# Тест скрейпера (без Telegram)
npm run test:scraper

# Запуск в режиме разработки
npm run dev

# Сборка и запуск
npm run build
npm start

5. Docker

# Сборка
npm run build
docker-compose build

# Запуск
docker-compose up -d

# Логи
docker-compose logs -f

Конфигурация

Переменная Описание По умолчанию
TELEGRAM_BOT_TOKEN Токен Telegram бота
TELEGRAM_CHAT_ID ID чата для уведомлений
CHECK_INTERVAL_MINUTES Интервал проверки (минуты) 2
RANDOM_DELAY_MIN_SECONDS Мин. случайная задержка 0
RANDOM_DELAY_MAX_SECONDS Макс. случайная задержка 60
USE_PROXY Использовать прокси false
PROXY_URL URL прокси сервера
HEADLESS Режим без GUI true
LOG_LEVEL Уровень логирования info

Добавление профилей поиска

Редактируйте файл src/config/search-profiles.ts:

export const searchProfiles: SearchProfile[] = [
  {
    id: 'my-search',
    name: 'Мой поиск',
    url: 'https://москварталы.рф/kvartiry/?...',
    enabled: true,
    notifyOnNew: true,
    notifyOnAvailable: true,
    notifyOnPriceChange: false,
  },
];

Деплой в Coolify

  1. Создайте новый сервис "Docker Compose"
  2. Укажите репозиторий
  3. Добавьте переменные окружения:
    • TELEGRAM_BOT_TOKEN
    • TELEGRAM_CHAT_ID
  4. Деплой!

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

src/
├── index.ts           # Точка входа
├── logger.ts          # Логирование
├── config/            # Конфигурация
├── scraper/           # Парсинг сайта
├── database/          # SQLite хранилище
├── notifier/          # Telegram уведомления
├── scheduler/         # Планировщик задач
└── types/             # TypeScript типы

🔍 Как проверить что бот работает правильно

Способ 1: Наблюдение за логами

# Запустите бот и смотрите логи в реальном времени
npm run dev

Вы увидите:

INFO: Navigating to https://...           # Открывает страницу
INFO: Found "Показать квартир" button     # Нашёл кнопку
INFO: Показать 39 квартир                 # Текст кнопки (39 квартир!)
INFO: Found booking buttons via getByText # Ищет кнопки бронирования
INFO: availableCount: 0, bookedCount: 39  # Результат: 0 свободных, 39 занятых
INFO: All apartments still booked         # Все ещё забронированы

Способ 2: Проверка на тестовой странице

# Запустите тест на странице где ЕСТЬ доступные квартиры
npx ts-node src/test-scraper.ts --test-available

Должно показать:

availableCount: 1012   # Много доступных!
bookedCount: 0
🎉 FOUND AVAILABLE APARTMENTS!

Способ 3: Просмотр скриншотов

Бот сохраняет скриншоты в папку data/:

  • debug-1-loaded.png — страница после загрузки
  • debug-2-after-show.png — после клика "Показать квартир"
  • debug-3-final.png — финальный вид списка квартир

Откройте их и убедитесь что видите таблицу с квартирами.

Способ 4: Тест Telegram

# Проверить что Telegram работает
npx ts-node src/test-telegram.ts

Вы получите сообщение "🚀 Мониторинг квартир запущен" в Telegram.

Способ 5: Heartbeat каждые 6 часов

После запуска бота вы будете получать сообщения "💚 Бот работает нормально" в:

  • 00:00
  • 06:00
  • 12:00
  • 18:00

Если сообщение не пришло — значит бот упал.


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

  1. Количество квартир динамическое — сейчас 39, завтра может быть 40 или 35
  2. Бот ищет именно кнопку "забронировать" — если кто-то отменит бронь, кнопка изменится с "забронировано" на "забронировать"
  3. Проверка каждые 1-3 минуты — с рандомной задержкой чтобы не блокировали
  4. Логи показывают всё — если что-то не так, смотрите логи

Лицензия

MIT

About

msk_flat_parser

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors