Пишем telegram бота для мониторинга сайта на Golang
Идея появилась неожиданно, когда мы хотели забронировать домик для празднования дня рождения, но нужным нам дом не нашелся на известных всем booking или airb&b, и нормальной системы оповещения о бронировании не было. Так как я не определился с датами, а постоянно мониторить сайт желания и времени не было, я решил сделать небольшой хак и автоматизировать свои действия.
Стоит отметить, что это про проект just for fun, и я не являюсь экспертом в разработке систем мониторинга и т.п. Если вам также интересно прокачивать свои навыки в разработке, статья будет вам полезной.
Как работает.
Бот по заданному интервалу присылаем в чат фуллскрин нужной страницы.
Пишем код.
Для начала нужно найти библиотеку, которая могла имитировать Chromium и загружать сайты, немного погуглив, нашел chromedp(ссылки будут внизу).
Вся основная логика приложения будет находиться в директории pkg.
Создадим файл screenshot.go в директории pkg. Теперь при запуске функции Run и передачи в параметрах url нашего сайта, программа запустит эмулятор (в headless режиме) и сделает скриншот сайта, записав в переменную imageBuf картинку в байт-коде. Внутри функции screenshotTasks мы конфигурируем и переходим на страницу. Для того чтобы получить скриншот полной страницы мы эмулируем устройство.
Теперь будем подключать телеграмм:
Создадим файл telegram.go в директории pkg. В функцию SendPhoto передаем в качестве параметра картинку и конфиги бота, далее отправляем фото от имени бота в телеграм чат. Для того чтобы бот мог слать сообщения в чат, нужно добавить бота в группу.
Отлично, теперь наш бот может нам присылать скриншоты сайта, теперь осталось реализовать очередь задач и задать определенный интервал. Для этого будем использовать пакет gocron. Создадим файл job.go в директории pkg, функция RunJob принимает в качестве аргументов запускаемую функцию и конфиг. Таким образом наша функция будет запускаться с заданным интервалом.
Еще немного про запуск. Для парсинга yml кофига в приложении используется viper. Для запуска создадим директорию cmd и внутри файл main.go.
Сам файл конфигурации находится в директории config.
Итог.
Бот со своей задачей справляется отлично. Вы также можете запустить его, клонировав репозиторий и установив все как сказано в README.md. В дальнейшем, я думаю доработать код, чтобы он принимал несколько сайтов для мониторинга и обернуть в докер. Также если будем его часто использовать можно написать админку.
Ссылки.
Репозиторий с кодом:
https://github.com/Kuzmrom7/ping-go
Библоиотеки: