Парсер vs официальный API Telegram: чем отличается результат
В чём разница между парсингом через MTProto-клиент и официальным Bot API Telegram, какие данные доступны, где есть лимиты и почему серьёзные сервисы используют MTProto.
У Telegram два совершенно разных интерфейса доступа к данным. Bot API — публичный HTTP-API для ботов. MTProto — протокол клиентов мессенджера, который используют Telegram Desktop, мобильные приложения и сторонние библиотеки вроде Telethon и Pyrogram. Эти два мира дают разные данные, разные ограничения и подходят для разных задач. Если вы выбираете инструмент для выгрузки постов канала, важно понимать, что под капотом.
Bot API: что это и для чего
Bot API — то, что вы получаете, когда регистрируете бота через @BotFather. HTTP-эндпоинты на api.telegram.org/bot<token>/method, простой формат запросов, токен на бота. Идеально для интеграций: новый пост в канале — бот получает channel_post update — пишет себе в БД.
Что Bot API даёт хорошо: реагирует на новые сообщения в реальном времени, поддерживает отправку и приём команд, предоставляет API для inline-ботов и keyboards. Что плохо: получить историю канала за прошлый год через Bot API нельзя в принципе. Бот видит только сообщения, опубликованные после того, как он добавлен в канал, и доступа к архивным данным у него нет.
Это значит, что для задачи «выгрузить весь архив TG-канала» Bot API не подходит. Никак. Технически невозможно.
MTProto: то, как работают клиенты
MTProto — собственный бинарный протокол Telegram, по которому общаются Telegram Desktop, iOS- и Android-клиенты. Через MTProto доступны те же данные, которые видит обычный пользователь: вся история публичного канала, реакции, форварды, комментарии, медиа. Авторизация — по номеру телефона и SMS-коду, после чего клиент получает session-файл и работает от имени аккаунта.
Стандартные библиотеки для Python — Telethon и Pyrogram. Через них можно выполнить iter_messages(channel_id) и получить полный архив, постранично, с фильтрами по датам и тексту.
Минусы тоже есть. Авторизация требует своего номера телефона. У Telegram есть FloodWait — защита от слишком частых запросов; при превышении клиент получает паузу от секунды до десятков минут. Реакции тянутся отдельным запросом, медиа-альбомы (несколько фото в одном посте) приходится склеивать по полю grouped_id. Это всё нюансы, которые в Bot API просто не существуют.
Что отдаёт Bot API, чего не отдаёт MTProto, и наоборот
Главное практическое различие — архив и реакции.
Bot API отдаёт: сообщения после момента добавления бота в канал, базовые метрики поста (текст, дата, тип медиа), inline-кнопки, callback-данные. Не отдаёт: историю до бота, реакции пользователей по эмодзи, точные просмотры, список форвардов.
MTProto отдаёт: весь архив канала, реакции по типам с разбивкой, число просмотров (с nuance — для очень старых постов VK может отдавать 0), форварды, источники репостов, комментарии в обсуждениях. Не отдаёт: уведомления нового сообщения через webhook (это специальность Bot API).
Вывод. Если задача — реагировать на события в реальном времени и выполнять команды, ваш выбор Bot API. Если задача — собрать архив для анализа, единственный путь — MTProto-клиент.
Какие данные попадают в выгрузку
Качественный парсер на MTProto собирает по каждому посту:
- id, дата, время, текст, длина текста;
- просмотры на момент выгрузки;
- реакции — общее число и разбивка по эмодзи;
- число форвардов и комментариев;
- тип медиа и количество вложений;
- признак репоста и ссылку на оригинальный канал;
- прямую ссылку на пост.
Это и есть « 15 колонок выгрузки», которые мы используем во всех экспортах. Без разбивки реакций по эмодзи теряется половина смысла — именно по ней видно, как аудитория реально воспринимает контент.
Почему сервисы выгрузки используют MTProto
Потому что иначе не получить архив. Все мониторинговые системы и сервисы вроде vygruzka.online работают именно через MTProto-клиенты на стороне сервиса. Это значит: вам не нужно регистрировать своего бота, не нужно добавлять его в канал, не нужно ждать год, чтобы накопилась история. Сервисный аккаунт уже подписан на канал технически — и собирает весь архив за минуты.
Для пользователя это полностью непрозрачно: вы вставляете ссылку, получаете xlsx. Но понимать разницу полезно, особенно когда выбираете между Bot API и сторонним сервисом для той задачи, где Bot API физически не справится.
Когда выбирать что
Bot API — для интеграций реального времени, чат-ботов, реакций на события в канале, отправки push-уведомлений в чаты. Хорошо документирован, бесплатный, без лимитов на токены.
MTProto-парсер — для исторических выгрузок, медиамониторинга, контент-анализа, исследований. Своими силами — на Telethon. Готовое решение — онлайн-сервис.
Самый частый ошибочный выбор: «давайте сделаем бота, который будет каждый день копировать новые посты канала в БД». Технически возможно, но за месяц вы получите только месяц данных, а если вам нужен анализ за год — собирать его уже неоткуда. MTProto решает эту задачу за одну выгрузку. Подробнее про разные подходы — в материале как выгрузить посты из Telegram-канала в Excel — 3 способа.