Отправляем себе сообщения в телеграмм через питон. Как это может быть полезно в работе аналитика?

Отправляем себе сообщения в телеграмм через питон. Как это может быть полезно в работе аналитика?

Детектив Данных
Вот такие сообщения мне приходят каждое рабочее утро

Немного предыстории: есть у меня один регулярный ежедневный отчёт, который грузится самым первым, еще до начала рабочего дня. Отчёт состоит из нескольких тяжелых SQL запросов, и по ним я обычно с помощью команды %%time отслеживал скорость загрузки данных. В запросы могут быть внесены изменения, и хочется отследить повлияло ли это на быстродействие выгрузки. И вообще понять - а как сегодня работает сервер, будем ли мы летать или пол дня выгружать "select * from table".

И вот однажды я наткнулся на статью как собственно отправить сообщение себе в телегу через питон - первое, что пришло на ум - уведомление о окончании загрузки.

Ты можешь быть на созвоне, есть, спать в конце концов - а тут сообщение на часах "отчёт Х загружен". Отлично, сейчас поставлю следующую выгрузку а с этими данными можно начинать работать.

Наконец-то мне пригодилась функция скриншота экрана часов)

Или что поинтереснее "запрос Y выполнен за пятнадцать минут" Хм... А так то он обычно выгружается по сорок - значит пора бить тревогу и идти смотреть - а что там произошло? а что-то да произошло раз время сократилось. А ты вовремя пришёл, поправил и поставил заново - не потеряв драгоценные часы работы, и поиск места ошибок постфактум окончания выгрузки с неполными данными.

Порядок такой:

  • создаём своего бота, берём с него всю инфу
  • пишем код на отправку сообщений
  • нюансы и доделки

Создаём бота

Открываем поиск и ищем 

@BotFather

Придумываем название бота (должно оканчиваться на bot), пусть будет detective_test_report_bot

Вам будет выдан токен примерно такого вида, сохраняем его

1234567894:HUJRhjh_sPoO135eQz4EwbFBKJkTcIGBMCM66

В целом больше ничего тут не нужно, кроме пожалуй аватарки бота, которую можно загрузить прямо тут через команду

/setuserpic

Переходим в уже наш созданный бот и жмём/вводим команду

/start

И обязательно пишем боту любой текст

hello world


С телегой закончили, начинаем питонить:

 import requests
TOKEN = "В КАВЫЧКИ ВСТАВЛЯЕМ СВОЙ ТОКЕН"
url = f"https://api.telegram.org/bot{TOKEN}/getUpdates"
print(requests.get(url).json())

 

В результате выполнения кода вы увидите информацию о последнем отправленном сообщении боту, среди всей информации вы увидите кусок

…'chat': {'id'4815162342,…. Вот  это число id нам и нужно это наш чат айди

 Сохраняем ваш чат айди в переменную

 

Готово. Уже сейчас мы можем отправить себе первое сообщение: 

import requests
report_name = 'Ежедневный мониторинг'
bot_token = '1234567894:HUJRhjh_sPoO135eQz4EwbFBKJkTcIGBMCM66'
chat_id = ‘4815162342
 send_message_url = f'https://api.telegram.org/bot{bot_token}/sendMessage'
message_text = f'Отчёт {report_name} - загрузка окончена'

 payload = {
   'chat_id': chat_id,
   'text': message_text
   }
 response = requests.post(send_message_url, data=payload)
message_text

Результат мы увидим после выполнения ячейки, и смотрим в телегу. Всё работает.

Не может быть

Давайте теперь подумаем как мы можем улучшить и сделать сообщения более полезными и содержательными

1.        Время загрузки отчетов

2.       Небольшое условное форматирование, смайлики

3.       Отправка сообщений нескольким пользователям

4.       Графики


Поехали сначала - время запроса

Перед запросом, или отчётом фиксируем текущее время

import time
start_time = time.time()

после отчета или его части фиксируем время окончания, и округляем получившуюся разницу :

end_time = time.time()
elapsed_time = end_time - start_time
elapsed_minutes_end = round(elapsed_time / 60)

Теперь мы можем добавить в сообщение время выполнения запроса, или загрузки отчета в целом. Просто редактируем наш message_text заодно выполнив два переноса строки с помощью «\n\n» не забыв взять сообщение в скобки

message_text = (f'Запрос 3 - данные загружены за {elapsed_minutes_3} минут\n\n'
f'Отчёт {report_name} загружен за {elapsed_minutes_end} минут ')

Супер. Отчет стал полезнее, давайте поколдуем что-бы он стал немного нагляднее:

Добавим новый атбирут в payload:

'parse_mode': 'Markdown' – теперь мы можем просто поставить ** в тексте и шрифт выделится жирным, ну или

'parse_mode': 'HTML' если вы как и я (используем свои знаниями из 2005 года) хотите использовать теги <b> </b>

Что-то не хватает – смайликов! Помогут отделить один вид сообщений от других – как ни странно ничего выдумывать не надо, просто копируете понравившийся смайлик и вставляете в свой текст в питоне. Можно вставить напрямую, а можно использовать юникод код например «\u2198\ufe0f» для стрелки (юникод можно посмотреть в теле ссылки например telegram.org/a/img-apple-64/2198-fe0f.png или найти любую таблицу с кодами)

Может случиться необходимость когда сообщение с бота нужно отправить нескольким коллегам – всё просто отправляем коллегу писать сообщение бота и смотрим его чат айди, с помощью первого кода в статье, а дальше запускаем самый стандартный цикл отправки через for, теперь оба айди сохраняем в переменную

chat_ids = ['151675936', '463459322']

и сам цикл

for chat_id in chat_ids:
   payload = {'chat_id': chat_id,  'text': message_text, 'parse_mode': 'Markdown' }
   response = requests.post(send_message_url, data=payload)
message_text -- в конце (уже вне цикла) я вывожу себе одно сообщение для проверки.


Вот и всё, ничего сложного и довольно удобно. Но отправлять можно не только сообщения, но и небольшие файлы и фото, например графики (только аккуратно, данные составляющие коммерческую тайну через телегу я бы не советовал никуда отправлять без предварительных согласований), а что-то нейтральное - вроде времени отработки запроса - почему бы и нет? В следующем посте - создадим мини базу для хранения времени загрузки отчётов, настроим её обновление, отрисуем график с помощью библиотеки matplotlib, покопаемся в мелочах и отправим себе удобную картинку с анализом нашей загрузки. Жду ваших эмоций к посту, комментариев - и до скорой встречи в новых статьях!

Report Page