Практика работы с Telegram
Экспорт комментариев Telegram в JSONL: пример на Python
Выгрузка доступного обсуждения одного поста через Telethon: подготовка, предел выборки, поля результата и причины неполного экспорта.

Редактура структуры: . Упорядочены разделы и пояснения. Даты исходных снимков, примеров и функциональных проверок указаны отдельно.
Одна платформа · разные задачи
Подписка Telecobra
Соберите инструменты для работы с Telegram в одном кабинете. Сроки доступа, цены и условия — на странице подписки.
В этой инструкции описана только часть возможностей платформы. Полный список доступен в разделе функций.
Выберите один пост и его обсуждение#
Здесь результатом будет JSONL с сообщениями из доступной ветки одного поста. Каждая строка — отдельный JSON-объект. Пример сохраняет текст и связь ответа, но не скачивает вложения и не собирает карточки авторов.
Для публичной ссылки
t.me/channel_name/123источник — канал@channel_name, а123— ID поста. Именно эту пару передают команде ниже. Не подставляйте вместо ID поста ID отдельного комментария.По документации Telegram комментарии образуют ветку у автоматически пересланной копии поста в связанной группе обсуждения. Пост в канале и его копия в группе — сообщения в разных пространствах идентификаторов.
Числа в схеме вымышленные. Вложенный ответ остаётся частью той же ветки. В API Telegram есть отдельные поля для непосредственного родителя и корня ветки; этот небольшой экспорт сохраняет только непосредственный
reply_to. Для поиска исходной копии API также предоставляетmessages.getDiscussionMessage; описанный CLI не требует вводить её ID вручную.Сообщения, авторы и подписчики — разные единицы учёта. Один автор может оставить несколько сообщений. Автор комментария не обязательно состоит в обсуждении: требование вступления зависит от настроек группы. Список комментариев также не является списком подписчиков канала.
Подготовьте Python и свой доступ#
Скачайте готовые Python-примеры с README и лицензией MIT и распакуйте архив. Для этой инструкции нужен
export_telegram.pyиз корня распакованного архива. В архиве исходный код; сессий, ключей и готовой базы пользователей нет.Используйте Python 3.11+ и отдельное виртуальное окружение. Получите API ID и API Hash своего приложения на my.telegram.org. Задайте
TELEGRAM_API_ID,TELEGRAM_API_HASHи отдельное имя файлаTELEGRAM_SESSIONчерез переменные среды; значения в статью и скриншоты не помещайте.При первом запуске с обращением к Telegram потребуется обычный вход владельца. Метод getReplies доступен пользовательским аккаунтам: токен Bot API не заменяет этот сценарий. Тем же аккаунтом заранее откройте пост и обсуждение. Публичная ссылка на канал не доказывает доступность всей ветки.
Файл сессии хранит доступ к аккаунту. Не передавайте его другим людям и не используйте одновременно несколькими работающими клиентами. Условия библиотеки и форма входа отделены от подписки Telecobra.
Запустите просмотр, затем выгрузку#
Перейдите в корень распакованного архива, где находится
export_telegram.py. Подставьте свой источник и положительный ID поста:Первая команда только выводит параметры и не использует сеть.
--executeвключает вход и чтение Telegram.--limitограничивает число записей: диапазон 1–10000 задан самим примером, а не объявлен Telegram как квота. По умолчанию итератор Telethon идёт от новых сообщений к старым; лимит не является фильтром дат.Существующий выходной файл не перезаписывается. Автоматического продолжения частичной выгрузки нет: для повторной попытки задайте новое имя и затем сравните записи из того же обсуждения.
Как сообщение превращается в строку JSONL
Ниже фрагмент скачиваемого
export_telegram.py, а не самостоятельный скрипт. Полная версия создаёт клиент, разбирает аргументы, открывает файл и закрывает соединение. Запускайте её командами выше.Чтение страницы ответов выполняет
iter_messages(..., reply_to=...). JSON-кодирование сохраняет кириллицу и записывает перевод строки внутри текста как\n; он не создаёт вторую запись файла. Пример не добавляет ID автора, username, реакции или путь к медиа.Разберите поля и проверьте JSONL#
Учебный JSONL ниже соответствует схеме из первого раздела. Сохраните его как
sample-comments.jsonlв UTF-8. Это вымышленные сообщения, не результат работы с Telegram:Здесь три сообщения и один пустой текст. Ответ
502 → 501вложен в обсуждение. Корень500отсутствует в файле, поскольку показаны комментарии; это само по себе не ошибка. Число авторов по этим четырём полям установить нельзя.Воспроизведите проверку без Telegram#
Сохраните код как
check_jsonl.py. Он использует только стандартную библиотеку Python, читает локальный файл и проверяет четыре обязательных поля. Дополнительные поля допустимы. Пустой файл, пустая строка, неверный JSON, неверный тип ID или время без часового пояса вызываютValueError.Ожидаемый результат для учебного файла:
Повторный ID не удаляется: счётчик показывает записи сверх первого вхождения. Он осмыслен для файла одного обсуждения. Два одинаковых текста с разными ID остаются разными сообщениями. Проверка не обращается к Telegram, не считает людей и не подтверждает полноту архива.
Для приёмки своей выгрузки отдельно запишите канал, ID поста, дату и время сбора, лимит и результат завершения. Сверьте несколько известных сообщений в клиенте, крайние даты и вложенный ответ. Эти сведения о запуске ведутся рядом с файлом: описанный экспорт не добавляет их в каждую строку автоматически.
Почему записей меньше ожидаемого#
Удалённые и недоступные сообщения не восстанавливаются. Сообщение об окончании чтения означает завершение выбранного запуска, но не подтверждает полноту исторического архива.
Наблюдаемый комментарий подтверждает сообщение в конкретное время и месте. Из него не следуют частота чтения канала, точный статус посещения, интерес к покупке или согласие на личную рассылку. Отправитель в Telegram может быть представлен каналом; имя подписи не раскрывает конкретного человека за ним. Эти сведения этот JSONL не экспортирует.
Источники и проверка примера#
Редакционная проверка: . Проверены документация, опубликованный архив, синтаксис фрагментов и локальные вымышленные записи. Реальная авторизация и онлайн-выгрузка для подготовки материала не выполнялись.
Выберите соседний сценарий по результату#