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