Пишем telegram бота для мониторинга сайта на Golang

Roman Kuzmenko
2 min readFeb 16, 2021

Идея появилась неожиданно, когда мы хотели забронировать домик для празднования дня рождения, но нужным нам дом не нашелся на известных всем 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

Библоиотеки:

https://github.com/chromedp/chromedp

--

--