Как получить список (более 200) участников канала Telegram - PullRequest
0 голосов
/ 08 января 2019

Хорошо, давайте начнем с того, что я являюсь полным нубом из Python. Итак, я работаю с Telethon, чтобы получить полный (более 200) список участников канала Telegram.

Пытаясь, пытаясь и пытаясь снова, я обнаружил, что этот кусок кода идеально подходит для достижения моей цели, если бы не он печатал только первые 200 членов.

from telethon import TelegramClient, sync

# Use your own values here
api_id = xxx
api_hash = 'xxx'
name = 'xxx'
channel = 'xxx'

client = TelegramClient('Lista_Membri2', api_id, api_hash)
try:
client.start()  
# get all the channels that I can access
channels = {d.entity.username: d.entity
        for d in client.get_dialogs()
        if d.is_channel}

# choose the one that I want list users from
channel = channels[channel]

# get all the users and print them
for u in client.get_participants(channel):
 print(u.id, u.first_name, u.last_name, u.username)

#fino a qui il codice

finally:
client.disconnect()

У кого-то есть решение? Спасибо !!

1 Ответ

0 голосов
/ 08 января 2019

Вы смотрели документацию по телетону? Это объясняет, что Telegram имеет ограничение на стороне сервера, позволяющее собирать только первые 200 участников группы. Из того, что я вижу, вы можете использовать функцию iter_participants с aggressive = True для устранения этой проблемы:

https://telethon.readthedocs.io/en/latest/telethon.client.html?highlight=200#telethon.client.chats.ChatMethods.iter_participants

Я не использовал этот пакет раньше, но похоже, что вы можете просто сделать это:

from telethon import TelegramClient

# Use your own values here
api_id = 'xxx'
api_hash = 'xxx'
name = 'xxx'
channel = 'xxx'

client = TelegramClient('Lista_Membri2', api_id, api_hash)

client.start()  
# get all the channels that I can access
channels = {d.entity.username: d.entity
            for d in client.get_dialogs()
            if d.is_channel}

# choose the one that I want list users from
channel = channels[channel]

# get all the users and print them
for u in client.iter_participants(channel, aggressive=True):
  print(u.id, u.first_name, u.last_name, u.username)

#fino a qui il codice
client.disconnect()
...