Есть ли способ обхода лимита запросов к серверу в 10000 Telegram при попытке получить данные всех участников чата с помощью Pyrogram/Python?
Мне нужно получить данные от всех участников списка чатов Telegram - групп и супергрупп, но, как предупреждает документация Pyrogram , всего за один запрос можно получить только 10 000 результатов. Пирограммы
iter_chat_members
метод ограничен этим и не обеспечивает
offset
параметр или некоторая обработка разбивки на страницы. Итак, я попытался получить куски данных размером 200 с его
get_chat_members
метод, но после 50-го чанка, что соответствует 10-тысячному
ChatMember
объект, он начинает давать мне пустые результаты. Черновик кода, который я использовал для тестирования, выглядит следующим образом:
from pyrogram import Client
def get_chat_members(app, target, offset=0, step=200):
total = app.get_chat_members_count(target)
itrs = (total//step) + 1
members_list = []
itr = 1
while itr <= itrs:
members = app.get_chat_members(target, offset)
members_list.append(members)
offset += step
itr += 1
return members_list
app = Client("my_account")
with app:
results = get_chat_members(app, "example_chat_entity")
print(results)
Я подумал, что, несмотря на то, что любой из этих методов дает мне полные данные участников чата, должен быть обходной путь, учитывая, что документация Pyrogram говорит об этом ограничении, соответствует одному запросу . Тогда мне интересно, есть ли способ выполнить более одного запроса без переполнения API и без потери состояния смещения. Я что-то упускаю или это невозможно сделать из-за ограничения API?
1 ответ
Это ограничение сервера, а не самого Pyrogram. Сервер просто не предоставляет больше информации после ~10 тыс. Участников. В любом случае пользователю не потребуется знать подробную информацию об этом большом количестве участников.