Черт возьми! Не успел…. или мониторинг сайта и оповещение на почту с помощью Node JS.
Привет 👋. Давненько я не писал статеек.
Я очень люблю канал …and Action! на youtube. Там парень рассказывает о том, как снимается кино и прочие интересности. Недавно они сделали анонс своей короткометражки. Ее покажут 19 января в Москве, в библиотеке им. Н.А. Некрасова. Но перейдя на сайт для бронирования места, я обнаружил что регистрация закончена.
Что же делать? Есть небольшая вероятность, что кто-нибудь откажется от билета. Пора написать мониторинг! К тому же я давно хотел попробовать отправку почты с помощью NodeJS.
Начнем с того, что нужно написать небольшой мониторинг сайта. Сделать http запрос и получить тело html страницы, в NodeJS, можно несколькими способами. Я возьму стандартный модуль http. Создадим файл index.js и напишем в нем следующий скрипт:
И запускаем node index.js
.
Мы просто делаем запрос до нужного нам ресурса и проверяем, есть ли в ответе та самая строка. Т.е. когда строка о закрытой регистрации не будет найдена, мы сможем уведомить себя об этом.
Отлично. Теперь сделаем уведомление на почту. Воспользуемся модулем nodemailer.
Напишем скрипт:
Плагин отлично работает с gmail и yandex. Только будьте осторожны со своими секретными паролями, не оставляйте их в публичном доступе.
Далее все просто. Создаем опции, контент письма, создаем специальный объект транспортера и отправляем.
Так… осталось соединить эти вещи. Когда скрипт мониторинга не обнаружит ненавистную строку, о том что регистрация закрыта, отправим себе письмо.
Итоговый скрипт выглядит примерно так:
Я проверил скрипт просто. Создал пустой текстовый файл со строкой “Регистрация на мероприятие завершена”, на сервисе github gist. И начал мониторить эту страницу со своего локального компьютера. Как только я удалил эту строку и gist-a — мне пришло то самое письмо — оповещение.
В целом можно было бы и закончить… но было бы нелепо держать мониторинг на локальной машине. Вынесем его на сервер.
Я воспользуюсь новым сервисом - облако от яндекса. Там дают пробный период, так что можно поиграть. Описывать его в данной статье не буду, если интересно — напишите в комментариях, сделаю простенький обзор.
Копируем файлы на уделенный сервер с помощью ssh, через терминал. И сталкиваемся с проблемой запуска скрипта. Дело в том, что если мы закроем терминал, то процесс NodeJS будет тут же завершен. В данной проблеме нам поможет модуль forever. Это CLI (консольная) утилита для мониторинга ваших процессов. Т.е. ваши процессы будут как demons в linux. Если node программа, запущенная через forever, завершится — forever запустит программу вновь. Но в нашем случае нам нужно просто запустить некую программу и оставить работать её на сервере, не боясь закрыть терминал.
Устанавливаем на сервере глобально:
sudo npm install forever -g
Запускаем с ключем -m 1 (перезапускать программу только один раз):
forever start -m 1 ./index.js
Просмотреть список всех процессов node:
forever list
Если нужно убить процесс, то выполним эту команду (0 — индекс процесса):
forever stop 0
Вот и все! Теперь наша программа запущена модулем forever. Можно смело закрыть терминал и идти по своим делам. Наша программа будет мониторить целевой сайт и если на нем пропадёт строка “Регистрация на мероприятие завершена” — отправит сообщение на почту и программа завершится.
Вот в целом и все! Без лишних подробностей 😊. В этом репозитории код из примеров, плюс добавил туда логи.
… оказалось что облако замораживает выполнение скриптов если к серверу нет обращений… так что тут еще нужно покопаться…
На самом деле, все решилось гораздо проще. На сайте библиотеки, где я должен был зарегистрироваться, форма была просто скрыта 😂, поэтому я легко получил своё приглашение.
Я надеюсь, вам понравился пост. Если да, похлопайте 👏, чтобы помочь другим найти эту информацию. И не стесняйтесь оставлять комментарии — буду рад любым замечаниям!