Добавлены таймауты запросов к сайту и Telegram, общий предел выполнения 9 минут и файловая блокировка запусков. База сообщений сохраняется атомарно. Регрессионные тесты запускаются перед публикацией Docker-образа.
2.5 KiB
VodokanalParser
Запуск в Docker
docker volume create vodokanal_bot_data
docker run -d --name VodokanalBot \
--restart=always \
-v vodokanal_bot_data:/app/data \
-e TZ='Europe/Moscow' \
-e TELEGRAM_TOKEN='TOKEN' \
-e TELEGRAM_CHANNEL='CHAT_ID' \
ghcr.io/serega404/vodokanalbot:main
Запуск в Docker Compose
Укажи TELEGRAM_TOKEN и TELEGRAM_CHANNEL в docker-compose.yml, затем запусти:
docker compose up -d --build
Интеграции
Бот проверяет сообщения каждые 10 минут. Параллельные запуски защищены файловой блокировкой: если предыдущий запуск ещё работает, очередная проверка пропускается, не помечая сообщения обработанными. Следующий успешный запуск снова сравнит сообщения за текущий день с базой.
Один запуск ограничен 9 минутами. Запрос к сайту водоканала имеет таймаут
10 секунд на подключение и 60 секунд ожидания данных, запросы к Telegram —
60 секунд. База data/db.json заменяется атомарно, чтобы прерывание записи
не повредило предыдущие данные.
Общая логика парсинга, работы с data/db.json и поиска новых сообщений вынесена в parser.py.
Для новой интеграции достаточно создать свой адаптер отправки и передать его в publish_new_posts:
from parser import create_session, publish_new_posts
session = create_session()
publish_new_posts(
send_message=lambda message: print(message),
session=session,
url="http://www.tgnvoda.ru/avarii.php",
)
Библиотеки
Лицензия
Распространяется под MIT License. Смотри файл LICENSE для того что бы узнать подробности.