Telegram チャットのリスト (グループとスーパーグループ) のすべてのメンバーからデータを取得する必要がありますが、Pyrogram ドキュメント アラートChatMember
のように、1 つのクエリで合計 10,000 の結果しか取得できません。Pyrogram のメソッドはそれに限定されており、パラメーターや何らかのページネーション処理をiter_chat_members
提供していません。offset
そのため、そのメソッドで 200 サイズのデータのチャンクを取得しようとしましたget_chat_members
が、10,000 番目のオブジェクトに対応する 50 番目のチャンクの後、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 の制限により不可能ですか?