Назад к проектам

QuizPlease Autoreg - Парсер и Telegram-бот

Запущен: 2025 Production Обновлено: Январь 2026

Автоматическая система мониторинга расписания игр на quizplease.ru с отправкой уведомлений в Telegram и полным CI/CD циклом. Работает 24/7 как systemd-сервис.

Python 3.11 BeautifulSoup4 Requests Telegram Bot API GitHub Actions Systemd Ubuntu Server JSON CI/CD

Возможности системы

Технологический стек и архитектура

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

quizplease-autoreg/ ├── .github/workflows/ # CI/CD пайплайны GitHub Actions │ ├── deploy.yml # Автоматический деплой на сервер │ └── fix-git.yml # Утилита для исправления Git репозитория ├── src/ # Исходный код проекта │ ├── extract_classic_games.py # Основной парсер расписания игр │ ├── telegram_notifier.py # Telegram бот для отправки уведомлений │ ├── get_chat_id.py # Утилита получения Chat ID пользователя │ ├── config.example.py # Пример конфигурационного файла │ └── config.py # Фактическая конфигурация (не в Git) ├── data/ # Хранение данных │ ├── classic_games.json # Текущее расписание игр │ └── games_history.json # История изменений расписания ├── logs/ # Логи работы системы ├── requirements.txt # Зависимости Python проекта ├── quizplease-autoreg.service # Конфигурация Systemd сервиса └── README.md # Полная документация проекта

CI/CD Pipeline

  • Trigger: Push в main ветку на GitHub
  • Подготовка: Установка Python 3.11 и зависимостей
  • Развертывание: SSH подключение к production серверу
  • Обновление: Обновление кода из репозитория Git
  • Установка: Установка зависимостей Python через pip
  • Перезапуск: Перезапуск systemd сервиса с новым кодом
  • Уведомление: Отправка статуса деплоя в Telegram

Ключевые компоненты

  • extract_classic_games.py — Основной модуль парсера с многоуровневой обработкой данных
  • telegram_notifier.py — Telegram бот для отправки уведомлений о новых играх
  • get_chat_id.py — Утилита для получения Chat ID Telegram пользователя
  • config.py — Конфигурация проекта (токены, настройки)
  • requirements.txt — Зависимости Python (BeautifulSoup4, requests, python-telegram-bot)
  • quizplease-autoreg.service — Конфигурация Systemd сервиса для автозапуска

Решенные задачи и технические решения

Задача 1: Надежный парсинг сайта с динамической структурой

Проблема: Сайт quizplease.ru имеет сложную HTML-структуру, которая может изменяться со временем, что приводит к сбоям парсинга.

Решение:

  • Многоуровневое извлечение данных: Реализация нескольких методов поиска для каждого поля данных
  • Резервные селекторы: Альтернативные CSS-селекторы на случай изменений структуры сайта
  • Валидация данных: Проверка корректности извлеченных данных перед сохранением
  • Хэширование: Создание уникальных идентификаторов игр для отслеживания изменений во времени

Задача 2: Обеспечение бесперебойной работы 24/7

Проблема: Система должна работать надежно и автоматически восстанавливаться после сбоев сети, сервера или обновлений сайта.

Решение:

  • Systemd сервис: Production-ready конфигурация systemd с автоперезапуском при сбоях
  • Комплексное логирование: Логирование в файлы и systemd journal для упрощения отладки
  • Обработка ошибок: Грейсфул деградация при сбоях сети или недоступности сервера
  • Таймауты: Настройка таймаутов HTTP-запросов для предотвращения зависаний

Задача 3: Автоматизация деплоя и обновлений

Проблема: Ручное обновление кода на сервере было трудоемким, подверженным ошибкам и требовало постоянного внимания.

Решение: CI/CD пайплайн на GitHub Actions

  • Автоматический триггер: Деплой автоматически запускается при пуше в main ветку
  • Безопасное подключение: Использование SSH-ключей через GitHub Secrets для безопасного доступа
  • Полный цикл: Обновление кода → установка зависимостей → перезапуск сервиса
  • Уведомления: Отправка статуса деплоя в Telegram для мониторинга

Задача 4: Интеллектуальные уведомления без спама

Проблема: Необходимо избегать спама пользователей, но при этом своевременно информировать о важных изменениях.

Решение:

  • Только изменения: Уведомления отправляются только при обнаружении новых игр или изменении статуса существующих
  • Полная информация: Детализированные сообщения с эмодзи и Markdown форматированием
  • Читабельный формат: Структурированные сообщения с четким разделением информации
  • Уведомления об ошибках: Сообщения о проблемах в работе парсера для быстрого реагирования

Задача 5: Безопасность и конфигурация

Проблема: Безопасное хранение чувствительных данных (токены бота, Chat ID) и простая настройка проекта.

Решение:

  • Шаблон конфигурации: config.example.py для безопасного клонирования репозитория
  • Отдельный файл: config.py не отслеживается в Git для защиты данных
  • Встроенная утилита: get_chat_id.py для удобного получения Chat ID пользователя
  • Изоляция: Сервис работает под отдельным пользователем Linux с ограниченными правами

Пример работы в Telegram

Система отправляет подробные уведомления при обнаружении новых игр или изменении статуса существующих:

Telegram уведомление о новой игре

Уведомление о новой игре с полной информацией

Сводка по всем играм

Сводка по всем доступным играм

Уведомление о свободных местах

Уведомление о записи в резерв

Быстрый старт и использование

Установка

# Клонируйте репозиторий git clone https://github.com/Mikhail15011976/quizplease-autoreg.git cd quizplease-autoreg # Установите зависимости Python pip install -r requirements.txt # Настройте конфигурацию cp src/config.example.py src/config.py # Отредактируйте src/config.py, добавив ваш токен Telegram бота # Получение Chat ID для уведомлений python src/get_chat_id.py # Отправьте боту команду /start и скопируйте ваш Chat ID

Запуск

# Локальный запуск (для тестирования) python src/extract_classic_games.py # Конфигурация systemd сервиса sudo nano /etc/systemd/system/quizplease-autoreg.service # Скопируйте содержимое файла quizplease-autoreg.service # и настройте пути в соответствии с вашей системой # Включение и запуск сервиса sudo systemctl daemon-reload sudo systemctl enable quizplease-autoreg sudo systemctl start quizplease-autoreg

Управление сервисом

# Проверить статус работы сервиса sudo systemctl status quizplease-autoreg # Просмотреть логи в реальном времени sudo journalctl -u quizplease-autoreg -f # Перезапустить сервис (после обновления конфигурации) sudo systemctl restart quizplease-autoreg # Остановить сервис sudo systemctl stop quizplease-autoreg # Запустить сервис после остановки sudo systemctl start quizplease-autoreg

Ссылки на проект

Технические детали проекта

Язык программирования: Python 3.11

Основные библиотеки: BeautifulSoup4, Requests, python-telegram-bot

Хранение данных: JSON файлы (classic_games.json, games_history.json)

Инфраструктура: Ubuntu Server 20.04+, Systemd, GitHub Actions CI/CD

Статус: Production, работает с 2025 года

Частота проверки: Каждые 15 минут в рабочее время

Уведомления: Telegram бот с форматированными сообщениями