Большинство современных мессенджеров предоставляют своим пользователям API, предназначенные для различных задач. На примере Telegram посмотрим, как работать с API, что они умеют и чем могут быть полезны.
Если вы не зарегистрированы в Telegram — самое время зарегистрироваться. Вы можете не пользоваться аккаунтом в повседневности, но для учёбы он необходим. Возможно, вам будет удобно работать через десктопную версию приложения, её можно скачать с официального сайта: https://telegram.org/.
API в Telegram
У мессенджера Telegram есть два API — Bot API и Client API.
- Bot API предназначен для работы с ботами.
- Client API позволяет управлять вашим аккаунтом: отправлять от вашего имени сообщения, вступать в группы или изменять информацию в своём профиле.
Начнём с Client API.
Управление аккаунтом через Client API
Для работы с Client API необходима аутентификация по токену, получить его можно на специальном сайте Telegram.
Получение токена для Client API
Зайдите на https://my.telegram.org и введите номер телефона, привязанный к вашему аккаунту:
Запустите Telegram: вам придёт код подтверждения для сайта, введите его в поле на сайте и нажмите кнопку Next.
В открывшемся окне нажмите на ссылку API development tools и введите данные для создания нового приложения. Заполните как минимум поля App title, Short name и укажите платформу: Web.
В следующем окне скопируйте и сохраните значения api_id и api_hash.
Готово! Эти идентификаторы вы перенесёте в код, они будут передаваться в Client API с каждым вашим запросом — и Client API опознает вас как владельца определённого аккаунта.
Программный клиент Telegram
Отправлять запросы к Client API можно через ваш Telegram-клиент на телефоне или на компьютере или через программный клиент.
Для работы с Client API существует несколько популярных Python-библиотек, которые эмулируют работу приложения. С чем-то подобным вы сталкивались в теме «Тестирование Django»: класс Client()
в тестах эмулировал работу браузера, отправляя запросы и получая ответы от сервера.
Для создания программного клиента возьмём библиотеку pyrogram.
Создайте директорию /client_api, перейдите в неё, установите и активируйте виртуальное окружение, установите библиотеку pyrogram
:
mkdir client_api # Создаём директорию
cd client_api # Переходим в эту директорию
python3 -m venv venv # Создаём виртуальное окружение
. venv/bin/activate # Активируем виртуальное окружение
# Для Windows команда source venv/Scripts/activate
pip3 install pyrogram # Устанавливаем библиотеку
Создайте и откройте файл /client_api/main.py в текстовом редакторе, перенесите в него код:
from pyrogram import Client
api_id = <Ваш api_id>
api_hash = "<Ваш api_hash>"
with Client("my_account", api_id, api_hash) as app:
# Первый параметр метода send_message — id (int) или имя (str) того пользователя,
# которому будет отправлено сообщение.
# Зарезервированное слово "me" означает ваш собственный аккаунт.
app.send_message("me", "Привет, это я!")
Сохраните файл и запустите его:
python3 main.py
При первом запуске программы в командной строке будет запрошен номер телефона, на который зарегистрирован ваш Telegram-аккаунт. Введите номер в консоль, после этого на телефон или в Telegram придёт проверочный код. Скопируйте этот код и вставьте в командную строку. Эта процедура выполняется только один раз, после этого приложение будет зарегистрировано.
Из вашего приложения будет отправлено сообщение."me"
— это зарезервированное слово, заменяющее ID аккаунта, для которого выдан токен. Следовательно, сообщение будет отправлено из вашего аккаунта в ваш аккаунт; оно отобразится во вкладке «Избранное» в вашем мессенджере.
Если изменить "me"
на ID аккаунта вашего друга в Telegram, то сообщение уйдёт ему.
Получить ID по имени пользователя можно у справочного Telegram-бота @userinfobot. Чтобы найти этого бота, введите его имя в окно поиска над списком контактов в вашем мобильном или настольном клиенте Telegram.
Начните диалог с ботом: нажмите кнопку Start.
Для начала бот отправит вам информацию о вашем аккаунте: ID, имя (то, что указано в полях First и Last name) и язык.
Перешлите ему любое сообщение от человека, ID которого вам нужен. Чтобы переслать чьё-то сообщение — кликните по нему правой кнопкой мыши (если Telegram установлен на компьютере) и выберите вариант «Переслать сообщение» (Forward Message). Затем укажите, что сообщение следует переслать боту @userinfobot.
Если Telegram запущен на мобильном устройстве — вызовите меню долгим нажатием на сообщение и проделайте всё то же самое.
В ответ бот отправит информацию о пользователе: ID, имя (First name) и фамилию (Last name).
Список всех доступных методов библиотеки pyrogram доступен в документации.
Не увлекайтесь рассылкой сообщений через бота: в Client API есть лимит по количеству запросов. Если вы будете слишком часто отправлять сообщения, Telegram может принять вас за злоумышленника-спамера и забанить, лишить доступа к сервису. Telegram не раскрывает точных ограничений.
В первый раз блокировка продлится 24 часа, последующие будут длиться дольше. Во избежание блокировок мы бы предложили отправлять сообщения только на аккаунты из вашего контакт-листа и не отправлять суммарно более десяти сообщений в час.