banner
Alexeisie

AlexEisie

啊? Email: alexeisie@brs.red
github

Telethonを使用したTelegramアルバム/ファイルクローラーの作成について(Telegram Album and Replies Crawler On Telethon)

1. Telethon とは#

Telethon は、ユーザーまたはボットアカウント(ボット API の代替)を介して Telegram の API と対話するための asyncio 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('コードを入力してください: '))

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

Telethon では、各チャンネルはチャットエンティティであり、チャンネルは主に broadcast と megagroup の 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('メンバーをスクレイピングするグループを選択してください:')
i = 0
for c in channels:
    print(str(i) + '- ' + c.title)
    i += 1
c_index = input("番号を入力してください: ")
target_channel = channels[int(c_index)]

チャットオブジェクトを取得した後、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 の場合は小から大の順で取得されます。
  • reply_to (int, optional)この値を設定すると、メッセージ ID に対応するメッセージの返信(コメント)メッセージの集合を取得します。この値を設定すると、filter と search は無効になります。
    注:これはチャンネルおよびそのディスカッショングループのメッセージを取得するためにのみ使用でき、一般のチャットやプライベートチャンネルには無効です。

ここでは、ID を介してメッセージを取得する際により優れた利点を持つ廃止されたメッセージ取得方法も紹介します。client.get_messages(entity,***ids)で、ids が設定されている場合、ids に対応するメッセージオブジェクトを直接返します。

6. Telethon におけるメッセージの学習#

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

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

えへへ、まだ書き終わっていません。

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