banner
Alexeisie

AlexEisie

啊? Email: alexeisie@brs.red
github

0から始めるTelethonによるTelegramアルバムと返信のクローラー

1. Telethon とは何ですか#

Telethon は、ユーザーまたはボットアカウント(ボット API の代替)として Telegram の API と対話するための非同期 Python 3 MTProto ライブラリです。

2. Telethon の欠点#

ダウンロードが非常に遅く、公式の API の制限があります。

3. Telethon の公式ドキュメント#

注:この記事で説明されている内容は、公式の開発ドキュメントで確認できます。疑問がある場合は、まずこのドキュメントを参照してください。
https://docs.telethon.dev/en/stable/
pip パッケージ名:telethon

4. Telethon クライアントの学習#

公式のコードブロック

api_id = 123456789
api_hash = 'a1b2c3d4'
phone = '+11145141919'
# Telegramクライアントの接続
client = TelegramClient(phone, api_id, api_hash)
client.connect()
if not client.is_user_authorized():
    client.send_code_request(phone)
    client.sign_in(phone, input('Enter the code: '))

5. Telethon チャンネルの学習#

Telethon では、各チャンネルはチャットエンティティであり、チャンネルは「ブロードキャスト」と「メガグループ」の 2 つのタイプに分けられます。
すべてのチャットエンティティのコレクションをclient(GetDialogsRequest(offset_date=last_date,offset_id=0,offset_peer=InputPeerEmpty(),limit=chunk_size,hash=0)).chatsで取得できます。
各 Chat オブジェクトには、次の重要なメンバーがあります。
image

  • id:一意の識別子を取得するために使用されます。
  • title:チャンネル名を取得するために使用されます。
  • broadcast が True の場合、そのチャットは「ブロードキャスト」であることを意味します。
  • megagroup が True の場合、そのチャットは「メガグループ」であることを意味します。
  • 以下の例のコードは、すべての「ブロードキャスト」をフィルタリングし、ユーザーが目的のチャットを選択するために使用されます。
chats = []
last_date = None
chunk_size = 200
channels = []
result = client(GetDialogsRequest(
    offset_date=last_date,
    offset_id=0,
    offset_peer=InputPeerEmpty(),
    limit=chunk_size,
    hash=0
))
chats.extend(result.chats)
for chat in chats:
    try:
        if chat.broadcast == True:
            channels.append(chat)
    except:
        continue
print('Choose a group to scrape members from:')
i = 0
for c in channels:
    print(str(i) + '- ' + c.title)
    i += 1
c_index = input("Enter a Number: ")
target_channel = channels[int(c_index)]

Chat オブジェクトを取得した後、client.iter_messages(target_channel, ***)を使用してチャット内のメッセージリストを取得できます。以下に、この記事で役立ついくつかのパラメータを示します。

  • entity:指定されたチャットエンティティ
  • limit (int | None, optional):取得する履歴メッセージの最大数。値が None の場合、すべてのコンテンツを取得します。
  • offset_id (int):取得するメッセージ ID の初期オフセット。この ID よりも小さいメッセージのリストのみを取得します(メッセージ ID が大きいほど新しいメッセージ)。
  • max_id (int)
  • min_id (int)
  • search (str):検索文字列
  • filter (MessagesFilter | type):メッセージのタイプをフィルタリングします。使用可能な値については、https://tl.telethon.dev/types/messages_filter.htmlを参照してください。
    image
  • reverse (bool, optional):デフォルトの取得順序は ID が大きい順(古い順)ですが、値が True の場合は ID が小さい順に取得します。
  • reply_to (int, optional):この値が設定されている場合、指定されたメッセージ ID の返信(コメント)メッセージのコレクションを取得します。この値が設定されている場合、フィルタと検索は無効になります。
    注:一般的なチャットやプライベートチャンネルには適用されず、チャンネルとそのメガグループのメッセージの取得にのみ使用できます。

ここでは、ID を使用してメッセージを取得するための非推奨の方法も紹介します。client.get_messages(entity,***ids)を使用すると、ID に対応するメッセージオブジェクトのコレクションではなく、直接 ID に対応するメッセージオブジェクトが返されます。

6. Telethon の Message の学習#

メッセージタイプは非常に重要です。なぜなら、メッセージングプラットフォームのためのライブラリを使用しているため、メッセージはイベント、履歴の取得、返信などで広く使用されるからです。
ChatGetter と SenderGetter に基づいています。

Telethon では、各メッセージは Message オブジェクトです。
Messageには非常に多くのメンバーがありますが、ここではこの記事に役立ついくつかのメンバー変数と関数を選んで紹介します。

まだ書きかけです。

読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。