web-dev-qa-db-ja.com

Telegramはチャットメッセージ/投稿を取得します-python Telethon

TelethonとPython 3.6xxを使用しています。

グループからのメッセージを取得できたが問題ないが、チャンネルに関しては行き詰まっている。

dialogs = client(get_dialogs)
for chat in dialogs.chats:
   getmessage = client.get_messages(chat.id, limit=400)
   for message in getmessage:
        print(message.message)

私はテレソンのドキュメントを検索しましたが、ほとんどの回答は古いget_message_history

私が次のことを試しているときchat.id = 1097988869(news.bitcoin.com)以下のエラーが発生します(グループの場合はchat.id 正常に動作します):

PeerIdInvalidError:無効なピアが使用されました。正しいピアタイプを渡すようにしてください

5
AbeeCrombie

メッセージを取得するためにこのコードを使用できます:

client = TelegramClient('session_name',
                    api_id,
                    api_hash,
                    update_workers=1,
                    spawn_read_thread=False)
assert client.connect()
if not client.is_user_authorized():
    client.send_code_request(phone_number)
    me = client.sign_in(phone_number, input('Enter code: '))

channel_username='tehrandb' # your channel
channel_entity=client.get_entity(channel_username)
posts = client(GetHistoryRequest(
    peer=channel_entity,
    limit=100,
    offset_date=None,
    offset_id=0,
    max_id=0,
    min_id=0,
    add_offset=0,
    hash=0))
# messages stored in `posts.messages`
8

受け入れられた答えは良いですが、Telethonの最近のバージョンでは、同じことをより簡単に実現できます。これは、chatの-​​allメッセージを反復します。

from telethon.sync import TelegramClient

with TelegramClient(name, api_id, api_hash) as client:
    for message in client.iter_messages(chat):
        print(message.sender_id, ':', message.text)

たとえば、変数が明確である必要がある場合(これらのAPI値は機能しないことに注意してください。独自の値が必要です):

name = 'anon'
api_id = 123
api_hash = 'abcdefgh'
chat = 'me'
6
Lonami