diff --git a/README.en.md b/README.en.md new file mode 100644 index 0000000..7f8619d --- /dev/null +++ b/README.en.md @@ -0,0 +1,41 @@ +# NPR MeteoBot + +[Русский](README.md) · **English** + +[![CI](https://github.com/EDeev/npr_meteobot/actions/workflows/ci.yml/badge.svg)](https://github.com/EDeev/npr_meteobot/actions/workflows/ci.yml) + +A Telegram bot for schoolchildren in the Norilsk industrial area: it sends class cancellations due to frost +and wind ("aktirovka") for the user's shift and district and shows the weather forecast. + +**Status:** school project (2022), completed, archived + +**Stack:** Python 3.10 · aiogram 2 · SQLite · Selenium + BeautifulSoup (city administration site, Gismeteo) · pymorphy2 + +- Subscription to cancellations by shift (1 or 2) and district: Norilsk, Talnakh, Oganer, Kayerkan +- Regular checks of the administration site and broadcasts to subscribers +- Weather forecast for the day and up to 10 days ahead (Gismeteo data) + +## Running + +```bash +pip install -r requirements.txt +BOT_TOKEN=token_from_BotFather python bot.py +``` + +The `sub.db` database is created on first run from `schema.sql`. Cancellations need Chrome: the +administration site is read with Selenium. + +## License + +School project (2022). The code is open for study; there is no separate license. + +## Author + +**Egor Deev** — [GitHub](https://github.com/EDeev) · [Telegram](https://t.me/DeevEgor) · [egor@deev.space](mailto:egor@deev.space) + +--- + +
+ ⭐ If you find this project useful, give it a star on GitHub! +

Made with ❤️ — deev.space

+
diff --git a/README.md b/README.md index 3c46a3c..a5ef80e 100644 --- a/README.md +++ b/README.md @@ -1,139 +1,41 @@ # NPR MeteoBot -Автоматизированная система мониторинга метеорологических условий и уведомлений об актировках учебных занятий для Норильского промышленного района (НПР). +**Русский** · [English](README.en.md) -## 📋 Описание проекта +[![CI](https://github.com/EDeev/npr_meteobot/actions/workflows/ci.yml/badge.svg)](https://github.com/EDeev/npr_meteobot/actions/workflows/ci.yml) -NPR MeteoBot представляет собой интеллектуальную систему на базе Telegram-бота, предназначенную для: -- Мониторинга погодных условий в четырех районах НПР -- Автоматического отслеживания актировок учебных занятий -- Персонализированных уведомлений пользователей -- Предоставления детализированных метеорологических данных +Telegram-бот для школьников Норильского промышленного района: присылает актировки (отмену занятий +из-за мороза и ветра) для своей смены и района и показывает прогноз погоды. -### Основные возможности: -- **Персонализация**: Настройка по смене обучения и району проживания -- **Автоматизация**: Регулярный мониторинг официальных источников -- **Уведомления**: Система подписок с гибкими настройками -- **Актуальность**: Интеграция с Gismeteo и официальным сайтом города +**Статус:** школьный проект (2022), завершён, в архиве -## 🏗️ Архитектура системы +**Стек:** Python 3.10 · aiogram 2 · SQLite · Selenium + BeautifulSoup (сайт администрации, Gismeteo) · pymorphy2 -### Компоненты: -- `bot.py` - Основной модуль Telegram-бота с обработкой команд -- `sql.py` - Модуль работы с базой данных SQLite -- `info.py` - Парсинг данных с внешних источников -- `config.py` - Конфигурационные параметры системы +- Подписка на актировки по смене (1 или 2) и району: Норильск, Талнах, Оганер, Кайеркан +- Регулярная проверка сайта администрации и рассылка подписчикам +- Прогноз погоды на день и на 10 дней вперёд (данные Gismeteo) -### Структура базы данных: -- **users**: Профили пользователей с настройками -- **weather**: Кэш метеорологических данных -- **parts**: Данные об актировках по сменам -- **data**: Системная информация +## Запуск -## 🛠️ Технологический стек - -### Backend: -- **Python 3.7+** - Основной язык разработки -- **aiogram 2.x** - Фреймворк для Telegram Bot API -- **SQLite** - Локальная база данных -- **asyncio** - Асинхронное программирование - -### Парсинг данных: -- **Selenium WebDriver** - Автоматизация браузера -- **BeautifulSoup4** - HTML-парсинг -- **requests** - HTTP-запросы - -### Обработка данных: -- **pymorphy2** - Морфологический анализ русского языка - -## 🚀 Установка и настройка - -### Предварительные требования: -```python -# Установка ChromeDriver для Selenium -# Ubuntu/Debian: -sudo apt-get install chromium-chromedriver - -# Windows: загрузить с https://chromedriver.chromium.org/ -``` - -### Установка зависимостей: -```python +```bash pip install -r requirements.txt +BOT_TOKEN=токен_от_BotFather python bot.py ``` -### Конфигурация: -1. Получите токен бота в [@BotFather](https://t.me/BotFather) -2. Обновите `API_TOKEN` в `config.py` -3. Создайте структуру базы данных SQLite +База `sub.db` создаётся при первом запуске из `schema.sql`. Для актировок нужен Chrome: сайт +администрации читается через Selenium. -### Запуск: -```python -python bot.py -``` +## Лицензия -## 📊 Функциональные возможности +Школьный проект (2022). Код открыт для изучения, отдельной лицензии нет. -### Команды бота: -- `/start` - Инициализация и настройка профиля -- `/town` - Изменение города и смены обучения -- `/acta` - Просмотр текущих актировок -- `/weather` - Детализированный прогноз погоды -- `/storm` - Штормовые предупреждения -- `/letter` - Управление подпиской на уведомления -- `/notice` - Настройка типа уведомлений +## Автор -### Автоматические процессы: -- **timer()** - Мониторинг актировок (каждую минуту) -- **wind()** - Обновление погодных данных (каждые 20 минут) -- **clear()** - Очистка устаревших данных (каждые 5 минут) - -## 🎯 Целевые районы - -Система обслуживает четыре района НПР: -- **Центральный район** (Норильск) -- **Район Талнах** -- **Район Оганер** -- **Район Кайеркан** - -## 🔧 Конфигурационные параметры - -### Временные интервалы мониторинга: -- Прогноз погоды: 1, 4, 7, 10, 13, 16, 19, 22 часа -- Проверка актировок: ежеминутно -- Обновление погоды: каждые 20 минут - -### Источники данных: -- **Актировки**: [norilsk-city.ru/meteo](https://www.norilsk-city.ru/meteo/) -- **Погода**: [gismeteo.ru](https://www.gismeteo.ru/) - -## 📈 Масштабируемость - -Система спроектирована для: -- Обработки 17,000+ активных пользователей -- Асинхронной обработки запросов -- Отказоустойчивой работы с внешними API - -## ⚠️ Ограничения - -- Зависимость от доступности внешних источников данных -- Требует настройки ChromeDriver для корректного парсинга -- Локальная SQLite база данных (не подходит для кластерного развертывания) - -## 📝 Лицензия - -Проект разработан для образовательных и некоммерческих целей. - -## 👥 Автор - -**Деев Егор Викторович** - Backend Developer -- GitHub: [@EDeev](https://github.com/EDeev) -- Email: egor@deev.space -- Telegram: [@Egor_Deev](https://t.me/Egor_Deev) +**Деев Егор Викторович** — [GitHub](https://github.com/EDeev) · [Telegram](https://t.me/DeevEgor) · [egor@deev.space](mailto:egor@deev.space) ---
- Разработано с использованием современных технологий асинхронного программирования и автоматизации веб-парсинга. -

Создано с ❤️ от вашего дорогого - deev.space ©

+ ⭐ Если проект оказался полезным, поставьте звёздочку на GitHub! +

Сделано с ❤️ — deev.space