Как узнать данные пользователя Телеграмм

На 2021 год боты в Telegram так и не имеют метода, позволяющего получать информацию о подписчиках канала. Тем не менее, существует достаточно сложное в освоении Telegram API и построенная на нём библиотека Telethon. Сегодня мы посмотрим, как при помощи библиотеки выгрузить информацию о подписчиках своего канала.

Создание приложения

Для начала необходимо создать приложение, через которое будут отправляться запросы к API. Перейдите на https://my.telegram.org и авторизуйтесь в Telegram-аккаунте:

После успешной авторизации перейдите на страницу API development tools:

Заполните все поля и жмите на создание приложения:

Из полученной конфигурации нам необходим app api_id и app api_hash:

Запрос к API

Импортируем telethon — он поможет сформировать запрос, и pandas — полученный ответ мы запишем в DataFrame.

как узнать фио владельца номера телефона-1


from telethon import TelegramClient import pandas as pd

Вводим api_id, api_hash, наш номер телефона и ссылку на канал, информацию о подписчиках которого хотим получить. Доступ к информации о подписчиках есть только у администраторов канала.

api_id = 1234567 api_hash = ‘1b42hj25kd8jw42b234kwj242c’ phone = ‘+71234567890’ channel_href = ‘https://t.me/leftjoin’

Создаём новую сессию — вместо session_name можно подставить любое другое название. Методы в библиотеке работают асинхронно, поэтому ответа от них требуется ожидать:

client = TelegramClient(‘session_name’, api_id, api_hash) client = await client.start() dialogs = await client.get_dialogs()

Собираем все каналы текущего пользователя. Из ссылки забираем часть с именем канала и вытаскиваем из словаря нужный:

channels = my_channel = channel_href.split(‘/’)[-1] channel = channels[my_channel]

Подписчиков, доступ к которым не ограничен приватностью, можно получить методом get_participants. С 20 июля 2018 года Telegram установил ограничение в 200 подписчиков для вызова метода, и установка параметра aggressive на True поможет получить всех подписчиков за раз.

members_telethon_list = await client.get_participants(channel, aggressive=True)

Из полученных библиотечных структур извлекаем информацию о пользователях — их имена и телефоны:

username_list = [member.username for member in members_telethon_list] first_name_list = [member.first_name for member in members_telethon_list] last_name_list = [member.last_name for member in members_telethon_list] phone_list = [member.phone for member in members_telethon_list]

Из четырёх списков собираем DataFrame и пишем его в csv-таблицу:

df = pd.DataFrame() df[‘username’] = username_list df[‘first_name’] = first_name_list df[‘last_name’] = last_name_list df[‘phone’] = phone_list df.to_csv(‘subscribers.csv’, index=False)

Результат работы — такая таблица:

Для запуска в Jupyter Notebook описанный ниже код можно просто вставить в ячейку, но при запуске из Python-файла будет такая ошибка:

SyntaxError: ‘await’ outside function

Устранить проблему можно, записав весь код в асинхронную функцию. Целиком выглядеть код будет так:

from telethon import TelegramClient import pandas as pd import asyncio async def main(): api_id = 1234567 api_hash = ‘1b42hj25kd8jw42b234kwj242c’ phone = ‘+71234567890’ channel_href = ‘https://t.me/leftjoin’ client = TelegramClient(‘session_name’, api_id, api_hash) client = await client.start() dialogs = await client.get_dialogs() channels = my_channel = channel_href.split(‘/’)[-1] channel = channels[my_channel] members_telethon_list = await client.get_participants(channel, aggressive=True) username_list = [member.username for member in members_telethon_list] first_name_list = [member.first_name for member in members_telethon_list] last_name_list = [member.last_name for member in members_telethon_list] phone_list = [member.phone for member in members_telethon_list] df = pd.DataFrame() df[‘username’] = username_list df[‘first_name’] = first_name_list df[‘last_name’] = last_name_list df[‘phone’] = phone_list df.to_csv(‘subscribers.csv’, index=False) if __name__ == ‘__main__’: loop = asyncio.get_event_loop() loop.run_until_complete(main())
Поделиться
Поделиться
28 комментариев

Что-то не работает. Ругается: SyntaxError: ’await’ outside function

Николай Валиотти 2021

Добрый день! Проверили способ прямо сейчас — у нас всё работает. Пришлите, пожалуйста, свой код (можно через gist.github.com) и версию Python.

Да я вообще не очень разбираюсь в Python’е. Только начал учить буквально на днях. Парсер чатов-то сделал, но там попроще было (на другом сайте), а сейчас понадобился для дела свой канал собрать, а там такие камни подводные 🙂

Николай Валиотти 2021

В Python вовсе необязательно разделять отдельные участки кода на функции, как, например, в C 🙂 Попробуйте написать без них, просто записывая последовательно все команды из материала в файл — должно получиться вот так: https://gist.github.com/Elisejj/aec7867e5da55e295d148882ae41488c

Если так делать, то он снова на await ругается: SyntaxError: ’await’ outside function

Я ж с такой «атаки в лоб» и начинал 🙂 В общем, вот такое решение у меня работает (всё парсит и файл сохраняет): https://gist.github.com/Mnsrff/9cba7a3231034fac900dd00b692d7c0f

Но хотелось бы разобраться, почему так 🙂 Почему у вас без функций всё работает, а я вынужден был всё в них заворачивать и вызывать 🙂 Python 3.7 у меня. Библиотеки установлены.

Marsel Kh 2021

Добрый день. Спасибо за код.
А с чем может быть связано несовпадение количества участников группы и количество выгруженных? Подписчики могут где-то ограничить приватность и не светиться в группах?
А то у меня из 574 юзеров выгружается только 470, хотя последний элемент в members_telethon_list total равняется 574.

Николай Валиотти 2021

Да, я подозреваю, что дело в настройках приватности у ряда пользователей, которые не дают свои данные выгрузить. У меня была аналогичная ситуация с экспортом собственных подписчиков.

Максим Игоревич 2021

Добрый день.
Подскажите пожалуйста, как вытащить ID юзеров.

Максим Игоревич 2021

Михаил Артемьев 2021

Подскажите, есть ли способ получить список подписчиков канала, которые были удалены?

Николай Валиотти 2021

насколько мне известно, нет, увы, их уже не получить

Ольга Телюкова 2021

Обзор лучших способов как взломать Telegram

Обзор лучших способов как взломать Telegram

Полный обзор различных способов как взломать Телеграмм. Что и куда нужно установить, чтоб осуществить Телеграмм взлом. Реально ли это сделать, и если «да», то как? Пошаговая инструкция «vzlom Telegram», а также способы, которые реально работают.

Быть или не быть…

В интернете можно найти очень много статей, которые утверждают, что взлом Телеграмма невозможен и что это один из самых защищенных мессенджеров. Однако, также достаточно статей, которые дают рекомендации, как защитить свой аккаунт в Телеграмме от взлома… получается нестыковка…

Еще по теме:  Как узнать что человек в сети в Телеграмме

Если взлом Telegram невозможен, то почему так много статей о том, как защищать аккаунт и восстанавливать взломанную страничку? Если слоны не водятся в Арктике, зачем расставлять на них ловушки и защищать от их вторжения своё жилье в Арктике? Странно, не правда ли… Давайте разбираться вместе!

Телеграмм взлом – это реальность или выдумка?

Изначально, чтобы ответить на этот вопрос, нужно выяснить раз и навсегда – что такое взлом Телеграмма и чем он отличается от перехвата? И уже следуя из этих знаний утверждать, возможен и он или это придумали только для вытягивания денег.

Есть «Telegram взлом» – это возможность без ведома хозяина, не зная логина и пароля, проникнуть на аккаунт и оттуда вести деятельность: читать переписку, отвечать на сообщений, просматривать и отсылать фото и делать всё тоже самое, что может делать хозяин данного аккаунта.

А есть «Telegram перехват» – это возможность, не заходя в аккаунт, дистанционно, на расстоянии читать переписку, видеть полученные и отосланные фото, прослушивать голосовые сообщения и звонки. Другими словами, шпионить за человеком издалека.

Почувствовали разницу? Взлом – это возможность зайти на страничку, а перехват – это возможность удаленно перехватывать в онлайн все, что там делается. Теперь, зная эти нюансы, Вы сможете более четко понять, возможно ли взломать Телеграмм самостоятельно.

Сможете ли Вы взломать Телегу самостоятельно – спорный вопрос и это напрямую зависит от Ваших знаний и выбранного способа взлома. Однако прочитать чужую переписку, увидеть фотографии и прослушать голосовые – да, сможете, так как это действительно возможно даже простым людям, как мы с Вами!

Теперь по теме…

Всем понятно, что чтобы зайти в чужой аккаунт, нужно знать от него логин и пароль. Но как узнать эти данные? Можно, конечно, просто спросить у человека или стоять за спиной и быстренько записать на листочке, когда он их будет вводить… но… не смешите моих кур. Мы такие способы даже не рассматриваем. Если бы Вы смогли это сделать, то Вы бы не стали искать в интернете статьи про различные способы взлома Телеграмма. Не правда ли?

Поэтому, мы Вам предоставим реальные нормальные способы, которые бы нам указали, как взломать чужой Телеграмм без ведома хозяина незаметно, тайно, скрытно. Ведь нам так необходима его переписка, голосовые и фото.

Зачем? Это Вы уже решите каждый для себя. Может Вы родитель, и беспокоитесь об окружении своих детей. А может Вы руководитель, и хотите вести контроль над перепиской своих подчиненных с клиентами. А может Вы ревнивый супруг, и желаете узнать, о чем переписывается жена в Телеграмме. Поверьте, нам совсем не интересно знать, почему Вы хотите читать чужой Телеграмм . Просто хотим сразу Вас предупредить – любой взлом, перехват, шпионаж и вообще любое тайное внедрение в частную жизнь – это нарушение закона. Задумайтесь!

Что говорит Дуров…

Павел Дуров (всем известный создатель Telegram и не только) всем и всегда говорил, что его сервис самый безопасный среди всех мессенджеров и социальных сетей, где миллионы людей каждый день общаются друг с другом. Что его команда никогда не спит, отслеживая возможные уязвимости и усиливая алгоритм шифрования.

Все переписки и фото хранятся в отдельных, удаленных серверах. Попасть в них практически невозможно. Если и найдется рабочая программа для взлома Телеграмма, то она сможет взломать только один датацентр. Но это никак не даст возможность получить переписку пользователя. Так как сама переписка хранится в зашифрованном виде, имеет уникальный криптографический ключ, который в свою очередь хранится совершенно в другом месте (даже может быть в другом сервере) и тоже зашифрован своим уникальным криптографическим ключом.

Итак, представляем Вашему вниманию лучшие способы по перехвату, шпионажу и взлому аккаунта в мессенджере Telegram на 2023 год.

Способ 1. Хакерский взлом Telegram канала

В 2015 году был проведен грандиозный конкурс, где приглашались хакеры по взлому аккаунтов, которые смогли бы показать, как взломать Телеграмм канал, а потом еще и конкретный аккаунт. Приз за удачный взлом – 300 тыс.долларов США.

Хакерам были выставлены всего 3 условия:

  1. Осуществить не просто взлом чужого аккаунта, а конкретного, где велся диалог между ботами Павлом и Николаем (нужно было из их сообщений найти адрес эл.почты).
  2. Можно было просматривать трафик и взять на себя роль сервера.
  3. Разрешено было проводить абсолютно любые атаки.

Конкурс по взлому Телеграмм проходил открыто. Все действия хакеров (одиночек и целых групп) широко освещались. Таким образом, Дуров показывал всем, что его сервис взломать невозможно.

Забрать приз в 300 тыс.долларов должен был тот, кто смог бы из взломанной переписки Телеграм отправить электронное письмо на почту (которая была в переписке двух ботов): с сообщением одного из ботов (в котором упоминается адрес этой почты), логами данной сессии, описанием самой атаки и банковских счетом (куда нужно перевести приз).

Но, никто в 2015 году провести полноценную хакерскую атаку на Telegram канал так и не смог. А те уязвимости, которые повстречались во время конкурса, были успешно ликвидированы. Зато хакеры, которые их обнаружили, получили 100 тыс.долларов США.

Способ 2. Взлом логина и пароля от конкретного аккаунта

Чтобы взломать аккаунт Телеграмм, нужны определенные знания в программировании, которые позволят создать фишинговую страницу входа. Огромный минус – это работает, только если человек введет свои логин и пароль на входной фишинговой страничке на компьютере. А это согласитесь, сделать чрезвычайно сложно. Фишинг прекрасно подходит для того, чтобы взломать чужую страницу Вконтакте . А вот для взлома Телеги фишинг может вообще не сработать.

Способ 3. Подбор пароля через радужные таблицы

Теперь о том, как взломать страницу в Телеграмме, если удастся узнать логин нужного аккаунта. Если говорить простым понятным языком, то пароли, логины и другие личные данные пользователей хранятся на сервисе мессенджера. Но они хранятся нет так как Вы думаете. Логины, имена и даты рождения – хранятся в привычном для нас виде, как внесли их пользователи при регистрации. А вот пароли проходят обязательное хеширование, и получается хеш пароля, который и хранится в базе данных (куча цифр и букв вперемежку). Эта информация абсолютно бесполезна хакерам и взломщикам, которые захотят просто взломать Телеграмм канал, чтобы вытащить оттуда логины и пароли.

Еще по теме:  Как создать стикеры в Телеграмме самому на телефоне iOs

Хеширование – это своего рода шифрование, только без обратной расшифровки. Т.е. пароль «захешировать» можно, а «расхешировать» нельзя. Подробно читать в статье « Код для взлома или как что-нибудь взломать «.

Это так же, как сначала сложить все цифры, а потом по сумме попытаться обратно их восстановить. Например, сложить цифры мы сможем легко (1+2+3+4+5+6=21), но по сумме 21 мы не сможем восстановить первоначальные цифры, которые сложили. Кроме того, мы даже не сможет определить, сколько было этих цифр. Информации ноль. И поэтому, даже если кому-то и удастся взломать канал Telegram, то из вытащенной базы данных Вы узнаете только логин, инициалы и дату рождения человека.

Вот для таких хешированных паролей и существуют огромные радужные таблицы. В них находятся миллиарды возможных (самых распространенных) паролей и хеши на них. Т.е. если Ваш человек при регистрации не придумал нормальный пароль, а обошелся стандартным – то высока вероятность того, что можно отыскать в таблице хеш этого пароля и восстановить его в нормальный вид. И поэтому взломать страницу в Телеграмме этим методом тоже весьма сомнительная затея.

Сложность данного метода взлома Телеграмма сводится к следующему:

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

Так как взломать Telegram при помощи подбора пароля через радужные таблицы, сможет далеко не каждый, да это вообще не работает, если пароль сложный, то переходим к следующему способу взлома.

Способ 4. Через подбор токена

Еще одно непонятное для просто человека слово «токен». Давайте, мы сейчас объясним Вам, о чем идет речь. Смотрите…

Существуют боты. Они есть в каналах. Бот – это специальная программа, которая предназначена для того, чтобы автоматически выполнять какие-то строго заложенные в нее действия. Когда создаются боты, то получаются идентификаторы «токены». Токен – это достаточно длинная последовательность цифр, знаков и английских букв, где могут встречаться абсолютно разные символы.
А что такое взлом? Это умение создать алгоритм, который заставит работать сервис по вашему сценарию. Вот если подобрать токен, то можно сказать, что мы осуществили взлом бота Телеграмм.

Например, токен слова «Hello» в одной из переписок, будет выглядеть так: https://api.telegram.org/ bot507226896:AAGT_fsEfg1milOkqbNp-VolQDJ0tGjaPvD7/sendMessage?chat_id=391911270

  • прослушать голосовые;
  • отследить местоположение, когда человек заходит в мессенджер;
  • просмотреть скриншоты экрана чатов (диалоги, групповые);
  • увидеть какие фото человек получил от собеседника;
  • какие фото сохранил на своем телефоне;
  • какие фото после просмотра удалил;
  • и многое другое.
  • Для этого Вам нужно будет взять в руки телефон (на 10 минут) человека, на котором он ведет интересующую Вас переписку и:

    Шаг 2. Зарегистрироваться на сайте (придумать логин, пароль и указать почту, можете завести любую новую).

    Шаг 3. Установить и настроить программу на подконтрольном телефоне (можно скачать руководство по установке ).

    Всё, больше ничего делать не понадобится. Программа для взлома Телеграм 2023 начнет сама собирать (перехватывать) все что делает человек на своем аппарате и автоматически пересылать это Вам. А Вы в любое удобное для Вас время, сможете заходить и просматривать пересланные данные (переписку, фото, координаты, скрины, перехват клавиатуры, уведомления, записи разговоров и многое другое).

    Vzlom Telegram при помощи программы Reptilicus – это действительно работающий способ. Не верите? Установите сами! Это легко и у Вас уйдет на это всего 10 минут! Есть бесплатный тестовый период – не понравится, просто удалите. Выбор всегда остается за Вами.

    Телеграмм взлом – это не так сложно как кажется, нужно только правильно выбрать способ! Мы рассказали о самом лучшем и реально работающем! Удачи!

    Если возникнут вопросы – пишите нашим консультантам!

    Источник: reptilicus.net

    Как узнать данные пользователя телеграмм

    Регистрируем в Telegram новое приложение

    Для подключения к Telegram API необходимы api_id и api_hash . Эти параметры выдаются при регистрации приложения в инструментах разработчика (при отсутствии доступа используйте VPN). Для авторизации указываем номер телефона, к которому привязан аккаунт Telegram.

    Пишем простой граббер для Telegram чатов на Python

    Вводим пришедший в Telegram численно-буквенный код и попадаем на страницу регистрации нового приложения. Заполняем форму, достаточно первых двух граф:

    Пишем простой граббер для Telegram чатов на Python

    В результате попадаем на страницу конфигурации приложения. Находим оба параметра, а также доступные MTProto-сервера и открытые (публичные) ключи.

    Избегая проблем с безопасностью, сохраняем учетные данные в отдельном файле config.ini следующей структуры:

    [Telegram] api_id = Telegram-API-ID api_hash = Telegram-API-Hash username = Your-Telegram-Username

    Поле username далее будет использоваться лишь для автоматического сохранения сессии под именем username.session . Одному клиенту соответствует одна сессия, учтите это в случае запуска нескольких клиентов.

    Создаем клиент Telegram

    Начнем с импорта библиотек.

    import configparser import json from telethon.sync import TelegramClient from telethon import connection # для корректного переноса времени сообщений в json from datetime import date, datetime # классы для работы с каналами from telethon.tl.functions.channels import GetParticipantsRequest from telethon.tl.types import ChannelParticipantsSearch # класс для работы с сообщениями from telethon.tl.functions.messages import GetHistoryRequest

    Встроенные модули configparser и json применяем соответственно для чтения параметров и вывода данных. Из библиотеки Telethon импортируем класс клиента Telegram и класс исключений. Внутренний модуль connection необходим при использовании прокси-сервера. Остальные элементы модуля telethon.tl используются для запросов необходимых нам списков (участников канала/чата и их сообщений).

    Теперь считаем учетные данные из config.ini :

    Еще по теме:  Как выйти из архива в Телеграмме у собеседника

    # Считываем учетные данные config = configparser.ConfigParser() config.read(«config.ini») # Присваиваем значения внутренним переменным api_id = config[‘Telegram’][‘api_id’] api_hash = config[‘Telegram’][‘api_hash’] username = config[‘Telegram’][‘username’]

    Создадим объект клиента Telegram API:

    client = TelegramClient(username, api_id, api_hash)

    При необходимости прописываем прокси. При использовании протокола MTProxy прокси задается в виде кортежа (сервер, порт, ключ) .

    proxy = (proxy_server, proxy_port, proxy_key) client = TelegramClient(username, api_id, api_hash, connection=connection.ConnectionTcpMTProxyRandomizedIntermediate, proxy=proxy)
    client.start()

    При первом запуске платформа запросит номер телефона, и вслед – код подтверждения. Так же, как если бы вы входили в учетную запись в приложении или браузере.

    Для сбора, обработки и сохранения информации мы создадим две функции:

    1. dump_all_participants(сhannel) заберет данные о пользователях администрируемого нами сообщества channel ;
    2. dump_all_messages(сhannel) соберет все сообщения. Для этой функции достаточно, чтобы у вас был доступ к сообществу (необязательно быть администратором).

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

    url = input(«Введите ссылку на канал или чат: «) channel = await client.get_entity(url)

    Касательно написания вызова функций стоит оговориться, что Telethon является асинхронной библиотекой. Поэтому в коде используются операторы async и await. В связи с этим функция main полностью будет выглядеть так:

    async def main(): url = input(«Введите ссылку на канал или чат: «) channel = await client.get_entity(url) await dump_all_participants(channel) await dump_all_messages(channel)

    Заметим, что из-за асинхронности Telethon может некорректно работать в средах, использующих те же подходы (Anaconda, Spyder, Jupyter).

    Рекомендуемым способом управления клиентом является менеджер контекстов with . Его мы запустим в конце скрипта после описания вложенных в main функций.

    with client: client.loop.run_until_complete(main())

    Собираем данные об участниках

    Telegram не выводит все запрашиваемые данные за один раз, а выдает их в пакетном режиме, по 100 записей за каждый запрос.

    async def dump_all_participants(channel): «»»Записывает json-файл с информацией о всех участниках канала/чата»»» offset_user = 0 # номер участника, с которого начинается считывание limit_user = 100 # максимальное число записей, передаваемых за один раз all_participants = [] # список всех участников канала filter_user = ChannelParticipantsSearch(») while True: participants = await client(GetParticipantsRequest(channel, filter_user, offset_user, limit_user, hash=0)) if not participants.users: break all_participants.extend(participants.users) offset_user += len(participants.users)

    Устанавливаем ограничение в 100, начинаем со смещения 0, создаем список всех участников канала all_participants . Внутри бесконечного цикла передаем запрос GetParticipantsRequest .

    Проверяем, есть ли у объекта participants свойство users . Если нет, выходим из цикла. В обратном случае добавляем новых членов в список all_participants , а длину полученного списка добавляем к смещению offset_user . Следующий запрос забирает пользователей, начиная с этого смещения. Цикл продолжается до тех пор, пока не соберет всех фолловеров канала.

    Самый простой способ сохранить собранные данные в структурированном виде – воспользоваться форматом JSON. Базы данных, такие как MySQL, MongoDB и т. д., стоит рассматривать лишь для очень популярных каналов и большого количества сохраняемой информации. Либо если вы планируете такое расширение в будущем.

    В JSON-файле можно хранить и всю информацию о каждом пользователе, но обычно достаточно лишь нескольких параметров. Покажем на примере, как ограничиться набором определенных данных:

    all_users_details = [] # список словарей с интересующими параметрами участников канала for participant in all_participants: all_users_details.append() with open(‘channel_users.json’, ‘w’, encoding=’utf8′) as outfile: json.dump(all_users_details, outfile, ensure_ascii=False)

    Итак, для каждого пользователя создается свой словарь данных и добавляется в общий список all_user_details , который записывается в JSON-файл.

    Собираем сообщения

    Ситуация со сбором сообщений идентична сбору сведений о пользователях. Отличия сводятся к трем пунктам:

    1. Вместо клиентского запроса GetParticipantsRequest необходимо отправить GetHistoryRequest со своим набором параметров. Так же, как и в случае со списком участников запрос ограничен сотней записей за один раз.
    2. Для списка сообщений важна их последовательность. Чтобы получать последние сообщения, нужно правильно задать смещение в GetHistoryRequest (с конца).
    3. Чтобы корректно сохранить данные о времени публикации сообщений в JSON-файле, нужно преобразовать формат времени.

    import configparser import json from telethon.sync import TelegramClient from telethon import connection # для корректного переноса времени сообщений в json from datetime import date, datetime # классы для работы с каналами from telethon.tl.functions.channels import GetParticipantsRequest from telethon.tl.types import ChannelParticipantsSearch # класс для работы с сообщениями from telethon.tl.functions.messages import GetHistoryRequest # Считываем учетные данные config = configparser.ConfigParser() config.read(«config.ini») # Присваиваем значения внутренним переменным api_id = config[‘Telegram’][‘api_id’] api_hash = config[‘Telegram’][‘api_hash’] username = config[‘Telegram’][‘username’] proxy = (proxy_server, proxy_port, proxy_key) client = TelegramClient(username, api_id, api_hash, connection=connection.ConnectionTcpMTProxyRandomizedIntermediate, proxy=proxy) client.start() async def dump_all_participants(channel): «»»Записывает json-файл с информацией о всех участниках канала/чата»»» offset_user = 0 # номер участника, с которого начинается считывание limit_user = 100 # максимальное число записей, передаваемых за один раз all_participants = [] # список всех участников канала filter_user = ChannelParticipantsSearch(») while True: participants = await client(GetParticipantsRequest(channel, filter_user, offset_user, limit_user, hash=0)) if not participants.users: break all_participants.extend(participants.users) offset_user += len(participants.users) all_users_details = [] # список словарей с интересующими параметрами участников канала for participant in all_participants: all_users_details.append() with open(‘channel_users.json’, ‘w’, encoding=’utf8′) as outfile: json.dump(all_users_details, outfile, ensure_ascii=False) async def dump_all_messages(channel): «»»Записывает json-файл с информацией о всех сообщениях канала/чата»»» offset_msg = 0 # номер записи, с которой начинается считывание limit_msg = 100 # максимальное число записей, передаваемых за один раз all_messages = [] # список всех сообщений total_messages = 0 total_count_limit = 0 # поменяйте это значение, если вам нужны не все сообщения class DateTimeEncoder(json.JSONEncoder): »’Класс для сериализации записи дат в JSON»’ def default(self, o): if isinstance(o, datetime): return o.isoformat() if isinstance(o, bytes): return list(o) return json.JSONEncoder.default(self, o) while True: history = await client(GetHistoryRequest( peer=channel, offset_id=offset_msg, offset_date=None, add_offset=0, limit=limit_msg, max_id=0, min_id=0, hash=0)) if not history.messages: break messages = history.messages for message in messages: all_messages.append(message.to_dict()) offset_msg = messages[len(messages) — 1].id total_messages = len(all_messages) if total_count_limit != 0 and total_messages >= total_count_limit: break with open(‘channel_messages.json’, ‘w’, encoding=’utf8′) as outfile: json.dump(all_messages, outfile, ensure_ascii=False, cls=DateTimeEncoder) async def main(): url = input(«Введите ссылку на канал или чат: «) channel = await client.get_entity(url) await dump_all_participants(channel) await dump_all_messages(channel) with client: client.loop.run_until_complete(main())

    Если для анализа сообщений потребуются не все записи, задайте их число в переменной total_count_limit . Если нужна только сборка сообщений канала, достаточно закомментировать вызов await dump_all_participants(channel) .

    Таким образом, с помощью Python и Telethon мы написали скрипт, собирающий и сохраняющий данные и реплики участников сообществ Telegram.

    Источник: proglib.io

    Рейтинг
    ( Пока оценок нет )
    Загрузка ...