Пишем простой бот проверки доступности сайта для 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)

Вот и всё. Теперь мы можем исправно получать уведомления в Телеграм, если на интересующем нас сайте что-то идет не так.

{{ message }}

{{ 'Comments are closed.' | trans }}