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 オブジェクトには、次の重要なメンバーがあります。
- 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を参照してください。
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には非常に多くのメンバーがありますが、ここではこの記事に役立ついくつかのメンバー変数と関数を選んで紹介します。
まだ書きかけです。