Аннотация
В статье приведён и разобран (полный и рабочий) скрипт, позволяющий автоматизированно собирать простую статистику о тг-канале: список id комментаторов с соответствующими количествами комментариев от каждого.
Введение
Всегда хочется взаимодействовать с потенциальными клиентами адресно и поименно, а не бить из пушки по воробьям. В этом плане подписчики потенциальных конкурентов - это очень ценный ресурс. Однако, список подписчиков тг-канала часто представляет собою священную тайну и просто так никто не станет делиться паствой трафиком. Поэтому получить конкретный список людей сложно, но вот комментаторов под постами  никто не скрывает (возможно ли это?). 
Конечно, можно вручную перебрать каждый пост и выписывать на листочек всех и каждого, но Telegram API позволяет автоматизировать этот процесс, что очень выручает, если анализируемых тг-каналов много, а постов сотни и тысячи.
Код
Актуальную версию кода можно получить в моём публичном репозитории. Сразу оговорюсь, что работа выполнялось в качестве учебной задачи по освоению python'а, поэтому слабонервных прошу отойти от экрана.
Скрипт целиком:
#====================================================================================================
import asyncio
from collections import Counter
import configparser
# класс для работы с сообщениями
from telethon import types
from telethon.sync import TelegramClient
#====================================================================================================
#====================================================
# Считываем учетные данные
config = configparser.ConfigParser()
config.read("config.ini")
# Присваиваем значения внутренним переменным
api_id   = config['Telegram']['api_id']
api_hash = config['Telegram']['api_hash']
username = config['Telegram']['username']
client = TelegramClient(username, api_id, api_hash)
#====================================================
#========================================================================================================
async def get_post_comments(channel_username, post_id, commentators, commentators_id):
    current_comment = {}
    try:
        async for message in client.iter_messages(channel_username, reply_to = post_id, reverse = True):
            print(str(post_id))
            sender = message.sender
            sender_id = message.from_id.user_id if message.from_id else None
            print(message.date, ':', message.text)
            if isinstance(sender, types.User):
                sender_name = sender.first_name if sender.first_name else "Unknown User"
                print(message.date, sender_name, ':', message.text)
                current_comment = {"date": message.date, "sender_name": sender_name, "message.text": message.text}
            elif sender is not None:
                sender_title = getattr(sender, 'title', 'Unknown Channel/Group')
                print(message.date, sender_title, ':', message.text)
                current_comment = {"date": message.date, "sender_name": sender_title, "message.text": message.text}
            else:
                print(message.date, 'Unknown Sender:', message.text)
                current_comment = {"date": message.date, "sender_name": 'Unknown Sender', "message.text": message.text}
            commentators.append(str(current_comment['sender_name']))
            commentators_id.append(str(sender_id))
            # Открытие файла в режиме добавления (append mode)
            with open('comments.txt', 'a') as file:
                file.write(
                        str(current_comment['date'])
                        + "  "
                        + str(current_comment['sender_name'])
                        + "  "
                        + str(current_comment['message.text'])
                        + '\n'
                        )
                
    except Exception as e:
        print(f'Error: {e}')
    finally:
        pass
#========================================================================================================
async def main():
    url = 'https://t.me/bogda2na_beads'
    await client.start()
    commentators = []
    commentators_id = []
    tasks = []
    for id in range(0, 481):
        tasks.append(get_post_comments(url, id, commentators, commentators_id))
    await asyncio.gather(*tasks)
    print("Запросы отправлены и ответы получены")
    counter = Counter(commentators)
    print(counter)
    counter_ids = Counter(commentators_id)
    print(counter_ids)
    # Открываем файл для добавления
    with open('commentators.txt', 'a', encoding='utf8') as file:
        for key, value in counter.items():
            file.write(f'{key} – {value}\n')
    # Открываем файл для добавления
    with open('commentators.txt', 'a', encoding='utf8') as file:
        for key, value in counter_ids.items():
            file.write(f'{key} – {value}\n')
with client:
    client.loop.run_until_complete(main())
Здесь можно выделить 4 блока:
импорты;
извлечение api_id, api_hash и username из файла config.ini; объявление client;
функция записи комментария в текстовый файл, включая дату, имя и сам текст; функция также формирует список id комментаторов и список имен комментаторов;
описание функции main, где происходит запись в файл искомого списка комментаторов.
Запросы в Telegram передаются асинхронно с помощью библиотеки asyncio. Без этого тоже можно, но о-о-очень медленно.
Использование config.ini оправдано соображениями безопасности и удобства: config.ini можно сразу добавить в gitignore и не переживать, что случайно закоммитишь что-то не то.
Блок с client.iter_messages нужно обязательно поместить в try-exception, потому что часто всплывает ошибка «Error: The message ID used in the peer was invalid (caused by GetRepliesRequest)». Она в озникает из-за того, что не все посты можно комментировать. При итоговом выводе информации, эта ошибка будет просто проигнорирована. Адрес тг-канала следует передавать в переменную url. Результат дополняет, а не перезаписывает выходные текстовые файлы.
В результате работы будут сформированы два файла в каталоге проекта:
comments.txt — содержит комментарии, которые стоят не в хронологическом порядке, потому что запросы в тг отправляются асинхронно, а результаты обрабатываются по готовности
commentators.txt — содержит список имён и id пользователей с указанием, сколько раз они оставляли комментарии (в общей сложности, а не под одним или под разными постами).
Результат выглядит так:
commentators.txt
Светлана – 5
 Unknown Sender – 44
 Юля – 4
 Elena – 11
 Алена Кравец – 4
 Bashmakov – 28
 Заира – 1
 тата – 10
 Мария – 2
 Anastasia – 1
 Татьяна – 4
 . – 1
 Irina – 1
 Елена – 4
 Наташенька – 1
 Куницына Маргарита – 3
 Кирилл – 1
 Юлианна Константиновна – 1
878607089 – 5
 None – 44
 894850931 – 4
 423056916 – 11
 714102368 – 4
 797464942 – 28
 563811537 – 1
 2035908009 – 10
 5223286129 – 2
 690890125 – 1
 412976784 – 4
 852712534 – 1
 1031395701 – 1
 1009525902 – 4
 884002074 – 1
 6045087523 – 3
 1237066481 – 1
 5135131407 – 1
comments.txt
2024-03-07 18:07:59+00:00  Светлана  Очень красиво!!!!!комплект отлично сочетается с джинсами! ?
 2024-03-07 19:53:34+00:00  Unknown Sender  Спасибо!) да, в голове при создании как раз держала, что этот браслет будет отличным компаньоном к классическому базовому образу белая футболка/белая рубашка + джинсы. Думаю, вообще ко всему дениму подойдет)
 2024-02-26 06:20:36+00:00  Юля  Интересно пишешь ?
 2024-02-26 06:33:26+00:00  Unknown Sender  Спасибо☺️♥️
 2024-02-26 10:36:47+00:00  Elena  Ммм класс! Жду продолжения))
 2024-02-26 11:19:10+00:00  Unknown Sender  Обязательно ?
 2024-03-13 10:22:02+00:00  Светлана  Богдана, выздоравливай ❤️?
 2024-03-13 10:23:10+00:00  Unknown Sender  Спасибо! Самый худший день прожит - остались только косметические ньюансы)
 2024-03-13 10:46:44+00:00  Алена Кравец  Афигеть...как так то ?
 2024-03-13 10:55:43+00:00  Unknown Sender  ?
 2024-03-14 07:47:57+00:00  Светлана  Класс!!! Богато смотрится ???
 2024-03-14 07:49:05+00:00  Unknown Sender  Спасибо! Надо будет обзор сделать, в примерке выглядят акцентно, но не броско)))
 2024-03-05 19:20:01+00:00  Elena  Класс!!
 2024-03-06 06:35:31+00:00  Unknown Sender  ♥️
 2024-02-27 06:12:00+00:00  Светлана  Супер!!!!!!стильно!!!
 2024-02-27 06:37:04+00:00  Алена Кравец  Второй день собираю комплименты☺ все диву даются тонкости работы и восхищаются твоим мастерством?
 Спасибо большое за эту красоту❤
 2024-02-27 08:06:27+00:00  Unknown Sender  Срасибо))) В жизни он очень круто выглядит?
 2024-02-27 08:06:54+00:00  Unknown Sender  Носи с удовольствием? ооочень рада, что нравится ☺️
 2024-02-27 20:49:31+00:00  Elena  Какой красавец!!!
 2024-03-17 09:27:02+00:00  Elena  А я люблю золотой? он мне идет?
 2024-03-17 11:39:24+00:00  Светлана  А я, наоборот, люблю серебро и белое золото?мне кажется, в золоте я похожа на буфетчицу из советских времён?
 2024-03-17 17:03:32+00:00  Unknown Sender  У меня вот такая же ассоциация как у Светланы долгое время  была ? пока золотой бисер в руки не попал ?
 2024-04-11 15:47:13+00:00  Bashmakov
 2024-04-11 19:29:20+00:00  Unknown Sender
 2024-04-04 16:35:22+00:00  Elena  Класс!!!
 2024-04-04 17:33:14+00:00  Bashmakov
 2024-04-04 19:13:21+00:00  Юля  ❤️?
 2024-04-04 20:01:43+00:00  Unknown Sender  Спасибо)) надо фурнитуру подобрать ещё, но мне уже нравится)))
 2024-04-22 13:24:31+00:00  Алена Кравец  Супер стильный комплект вышел, очень красивый! ❤️?
 2024-04-22 13:25:59+00:00  Unknown Sender  Спасибо! Я влюбилась в леопард, прям очень красиво в жизни выглядит
 2024-03-25 08:10:45+00:00  Elena  Класс!!
 2024-03-25 08:32:03+00:00  Алена Кравец  ???Надо больше огня, ибо очень красивые❤️?
 2024-03-25 08:55:41+00:00  Unknown Sender  Спасибо!) дары богам принесла ?
 2024-03-25 08:55:56+00:00  Unknown Sender  Спасибо ??
 2024-05-20 09:47:32+00:00  Bashmakov
 2024-06-03 09:04:21+00:00  Заира  Добрый день
 Хочу заказать у вас браслет, написала вам в директ инстаграм☺️
 2024-06-03 10:27:21+00:00  Unknown Sender  Доброго!)
 2024-05-01 06:21:45+00:00  тата  Как интересно свет преломляется)
 2024-05-01 06:47:43+00:00  Unknown Sender  Да, этот бисер хрупкий, потому что он как бы порезан вдоль грани. Из-за этого свет очень интересно ведет себя при попадании, блестит как искорки ✨ а в тени - мягкий и деликатный, полупрозрачный
 2024-05-01 06:57:25+00:00  Bashmakov
 2024-05-02 16:43:39+00:00  Мария  Какая красотища ?
 2024-05-02 17:25:42+00:00  Unknown Sender  Спасибо ☺️ ?
 Пока делала не знала, что такими получатся, а блеск просто гипнотический ✨
 2024-05-13 06:50:19+00:00  тата  Фото чудесное. Богданна, а чего видюшку с распаковкой зажала?)
 2024-05-13 07:00:20+00:00  Unknown Sender  ?
 я её ещё не сняла, скоро будет точно! Эта посылка была неожиданным и приятным событием для меня ☺️
 2024-05-13 07:46:40+00:00  Bashmakov
 2024-05-15 11:20:52+00:00  Anastasia  Подскажите а где будет маркет? 1-2 июня, будет какой-то анонс?
 2024-05-15 21:24:20+00:00  Unknown Sender  1-2 июня будет Маркет в городе Ставрополь, в парке Победы. У себя буду показывать рабочие моменты, что готовлю. У организаторов, family market, будут очень скоро анонсы. Посмотреть более подробно можно в инсте, ник одинаковый (как мой так и у организаторов)
 2024-04-12 12:46:29+00:00  Bashmakov
 2024-04-13 16:10:30+00:00  Elena  Круто!!
 2024-04-13 16:33:38+00:00  Unknown Sender  Спасибо)) теперь думаю какой браслет сделать ?
 2024-05-18 06:48:55+00:00  Татьяна  ???
 2024-05-18 08:07:52+00:00  Bashmakov
 2024-05-18 08:47:40+00:00  тата  Богданна, как маленький на тебя похож)
 2024-05-18 09:32:40+00:00  Unknown Sender  Ахах ? может, в его голубых глазах и светлых кудрях себя не узнаю))
 2024-05-18 10:28:39+00:00  тата  Богданна в сумраке цвет кудрей не особенно разглядишь.
 Еще раз посмотрела), контрольный, так сказать - все равно похож на тебя)
 2024-06-24 08:44:38+00:00  Юля  ❤️❤️❤️❤️
 2024-04-26 09:26:17+00:00  Bashmakov
 2024-04-26 09:51:52+00:00  Unknown Sender
 2024-06-10 17:23:02+00:00  Bashmakov
 2024-06-11 16:48:05+00:00  .  Я хочу?
 2024-06-12 05:06:11+00:00  Unknown Sender  Доброго! Написала Вам в личные сообщения ?
 2024-04-21 08:17:45+00:00  Bashmakov
 2024-04-21 08:50:07+00:00  Unknown Sender
 2024-04-22 09:36:07+00:00  тата  Красиво. Спокойно.  Без придурочного креатива❤️
 2024-04-22 13:24:44+00:00  Unknown Sender  Спасибо!)) она сама по себе очень активная и самодостаточная)))
 2024-04-28 08:20:25+00:00  Мария  Красотища ?
 2024-04-28 22:54:22+00:00  Unknown Sender  Спасибо☺️
 2024-04-23 14:59:12+00:00  тата  Рискну предположить Богданна) - бисер?
 2024-04-23 17:15:26+00:00  Unknown Sender  Бисер там тоже есть ?
 Но кое-что особенное для меня)) скоро обязательно расскажу)
 2024-04-23 17:16:30+00:00  тата  Ждем?
 2024-04-25 12:35:09+00:00  Bashmakov
 2024-06-13 15:55:59+00:00  Bashmakov
 2024-05-08 09:19:47+00:00  Bashmakov
 2024-05-09 06:39:35+00:00  Elena  Класс!!
 2024-06-07 17:13:18+00:00  Bashmakov
 2024-06-08 14:00:44+00:00  Elena  Богданна, как прошёл маркет?
 2024-06-08 14:17:30+00:00  Unknown Sender  В целом, осталась довольна. Много общалась, много рассказывала о своих украшениях. Площадку не до конца поняла, маркет был в парке. Очень хочется попробовать другую площадку)
 2024-06-08 14:20:58+00:00  Elena  Интересно)
 2024-04-15 15:50:52+00:00  Bashmakov
 2024-06-14 12:55:21+00:00  Bashmakov
 2024-06-14 12:58:08+00:00  Unknown Sender  ?
 2024-06-15 22:50:28+00:00  Irina  Какие прекрасные лаконичные звёзды ❤️? научите нас?
 2024-06-16 07:15:23+00:00  Unknown Sender  ?
 2024-04-07 10:21:17+00:00  Elena  Оооооо!!!! Обожаю сочетание чёрного и золотого!
 2024-04-07 10:59:56+00:00  Bashmakov
 2024-06-15 20:44:03+00:00  Bashmakov
 2024-06-24 11:30:18+00:00  Елена  Красота то какая
 2024-06-24 11:51:47+00:00  Unknown Sender  Спасибо! Считаю этих крабов очень симпатичными милашками ?
 2024-06-24 12:35:59+00:00  Bashmakov
 2024-06-24 13:45:43+00:00  Наташенька  Какие красивые!?
 2024-07-03 05:15:35+00:00  тата  Богданна, какой аккуратный переход цвета на сережках❤️
 2024-07-03 05:23:57+00:00  Unknown Sender  Я очень старалась с подбором, и моя посылка с материалом как раз во время подоспела-всё сошлось?
 2024-07-03 05:56:05+00:00  Bashmakov
 2024-07-03 07:18:05+00:00  Татьяна  ???
 2024-07-09 11:01:43+00:00  Bashmakov
 2024-07-05 06:33:48+00:00  Елена  Это что-то потрясающее. Как монпасье из детства ?
 2024-07-05 07:37:11+00:00  Unknown Sender  Спасибо! Я до сих пор под впечатлением от того как получилось. Не хотелось повторять один в один, поэтому долго думала на что заменить розовый кварц. И когда увидела этот камень в живую - сошлось! На волне вдохновения сделала ещё более спокойный вариант в серебре и с тонированым голубым кварцем. В задумках сделать с лабрадором, сапфиром, правда там цены отпугивающие большие ?
 2024-07-05 07:37:46+00:00  Unknown Sender  Ещё очень классно цитрин, прям как лимонные конфетки
 2024-07-05 07:41:41+00:00  Елена  Да, тоже пока в мечтах все эти камешки. Ну ничего со временем, потихоньку и до них дойдём.
 2024-07-05 07:42:35+00:00  Unknown Sender  Да! Тоже думаю, что всему свое время и будет и лабрадор и натуральный сапфир
 2024-07-05 16:52:27+00:00  Татьяна  Богдана , нужно прям настоящий бизнес сделать ???
 2024-07-05 18:04:19+00:00  Unknown Sender  Шаг за шагом, думаю выйду и на него)))
 2024-07-09 08:45:13+00:00  тата  Богданна, не знаю, что с концепцией, но это очень-очень красиво)
 2024-07-09 09:05:32+00:00  Unknown Sender  Спасибо, это самое главное ??
 2024-07-14 16:07:55+00:00  тата  Не была). С удовольствием послушаю рассказ)
 2024-07-15 04:26:15+00:00  Unknown Sender  Чуть отойду и расскажу)))
 2024-07-17 08:50:11+00:00  Куницына Маргарита  А я была в Ставрополе и вы мне визиточку  дали
 2024-07-17 09:53:59+00:00  Unknown Sender  Рада вас видеть у себя в канале ?
 2024-07-17 09:54:20+00:00  Куницына Маргарита  А вы меня помните?
 2024-07-17 12:11:42+00:00  Unknown Sender  Если не ошибаюсь, вы плетите))
 2024-07-17 12:34:44+00:00  Куницына Маргарита  Да, я плету
 2024-07-11 08:07:19+00:00  Bashmakov
 2024-07-11 08:08:15+00:00  Unknown Sender  А вас, молодой человек, я особенно буду ждать ?
 2024-07-11 08:09:08+00:00  Bashmakov  Мы с Вашим другим молодым человеком обязательно залетим на огонëк?
 2024-07-11 11:25:10+00:00  Кирилл  Семейный подряд
 2024-07-11 18:15:02+00:00  Bashmakov  Главное - не рожать при тебе
 2024-06-19 14:38:42+00:00  Bashmakov
 2024-06-19 14:43:17+00:00  Елена  С ума сойти, какое богатство
 2024-06-19 19:18:02+00:00  Unknown Sender  Ой дааа, на грани разорения ?
 2024-07-04 08:55:15+00:00  Татьяна  Шикарный ❤️
 2024-07-04 10:07:27+00:00  Unknown Sender  ☺️
 2024-06-25 08:32:15+00:00  Bashmakov
 2024-06-07 05:31:11+00:00  Bashmakov
 2024-06-07 07:33:40+00:00  Юлианна Константиновна
 2024-06-22 10:33:00+00:00  Bashmakov
 2024-06-24 11:28:48+00:00  Юля  ?
Вывод
Да, конечно, знать только комментаторов — это далеко не то же самое, что знать всех подписчиков, НО, во‑первых, комментаторы — это именно активная и вовлеченная публика, а во‑вторых, это бесплатно.
          
 
dron88
А как вы потом эти списки применяет, каким образом и методом?