Пишем простой бот проверки доступности сайта для Telegram на Python
Приведу пример простейшего бота проверяльщика доступности сайтов по http.
Цель - написать запускающийся по крону скрипт, который проверяет всё ли в порядке с сайтом (отдается ли указанная страница с кодом 200), и если что-то не в порядке то уведомить нас в телеграме средствами нами созданного бота.
Начнем с создания бота. Для этого воспользуемся родителем всех ботов @BotFather. Интерфейс у него достаточно понятный. Просто говорим ему /newbot, вводим имя бота и username бота. После этого нам выдают индивидуальный токен для нашего бота.
Теперь установим все нужные нам библиотеки для работы.
Я писал на Python версии 2.7. В ubuntu 16.04 он у меня был установлен по-умолчанию, так что если у вас его нет - то вы можете его взять например на официальном сайте
Так же нам необходима библиотека pyTelegramBotAPI которая под капотом делает за вас все тонкости манипуляций с API Telergam. На github странице указано как установить библиотеку. Если у вас установлен pip вы можете сделать просто
pip install pytelegrambotapi
Теперь когда всё необходимое установлено - напишем сам код.
#подключение необходимых библиотек import telebot import requests #идентификаторы бота и вашего с ним чата token = 'your_bot_token' your_chat_id = your_chat_id #функция проверки сайта def check_200(hostname): #создаем экземпляр бота bot = telebot.TeleBot(token) #делаем запрос к сайту r = requests.get(hostname) #если что-то не в порядке уведомляем нас об этом средствами бота if r.status_code != 200: bot.send_message(your_chat_id, hostname + ': ' + str(r.status_code)) #возвращать нам ничего не обязательно pass #применяем функцию проверки к целевому сайту check_200("http://www.example.com")
Теперь остается запускать этот скрипт по крону:
*/10 * * * * python путь_к_этому_скрипту
P.S. Возникате вопрос о том откуда же брать chat_id? Токен бота мы знаем когда генерим бота, а вот chat_id не узнаем пока не вступим в чат с ботом и не напишем ему сообщение. Как только бот получит от нас сообщение он среди всех данных получит и chat_id. Поэтому сначала можно заставить его признаться какой же он:
#подключение необходимой библиотеки import telebot #идентификатор бота token = 'your_bot_token' bot = telebot.TeleBot(token) #на каждое ваше сообщение бот ответит идентификатором чата @bot.message_handler(content_types=["text"]) def say_chat_id(message): bot.send_message(message.chat.id, message.chat.id) #long polling для слушающего бота if __name__ == "__main__": bot.polling(none_stop=True)
Вот и всё. Теперь мы можем исправно получать уведомления в Телеграм, если на интересующем нас сайте что-то идет не так.
{{ 'Comments (%count%)' | trans {count:count} }}
{{ 'Comments are closed.' | trans }}