Пишем 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
Библоиотеки:
jasonlvhit/gocron
A currently maintained fork of this project has been migrated to https://github.com/go-co-op/gocron Disclaimer: we (the…
github.com
https://github.com/chromedp/chromedp
Ten articles before and after
Bot Telegram Untuk Membantu Sekolah/Kuliah Kamu – Telegram Group
Create a telegram bot – Telegram Group
Sending a message from Python to a Telegram chat: the simplest way – Telegram Group
Creating a Telegram Bot: Full Beginner’s Guide 2021 – Telegram Group
.Net Core Console Uygulması İle Telegram Botu Geliştirmek – Telegram Group
Пошаговый мануал: Как создать бота в Телеграм? – Telegram Group
Python ile Telegram Chatbot + Heroku – Telegram Group
TRX1 Dev Blog #1 (January 2021). TRX1’s January 2021 development report. – Telegram Group
How to code a recipe recommendation Telegram bot – Telegram Group
Telegram Bot Oluşturma. Telegram son günlerde ülkemizde ve… – Telegram Group