20

我正在使用 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)

我搜索了 telethon 文档,但大多数答案都是针对旧的get_message_history.

当我尝试使用以下chat.id = 1097988869(news.bitcoin.com)时,我在下面收到一个错误(对于组chat.id工作正常):

PeerIdInvalidError:使用了无效的 Peer。确保传递正确的对等类型

4

3 回答 3

32

公认的答案很好,但最近版本的 Telethon 让您更轻松地实现同样的目标。这将遍历所有消息chat(对于这个例子,我们telethon.sync用来避免输入async):

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'

文档async中提供了更多使用示例。client.iter_messages

于 2019-01-20T16:23:34.110 回答
23

更新 :

在新版本的 Telethon 中,@Lonami 答案是最好的并使用它。

################################################# ##########

您可以使用此代码获取消息:

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`
于 2018-06-22T14:04:59.580 回答
1

那对我有用!

来自https://my.telegram.org的api_hash ,位于 API Development 下。

from telethon import TelegramClient, events, sync

api_id = 'your api_id'
api_hash = 'your api_hash'

client = TelegramClient('session_name', api_id, api_hash)
client.start()
channel_username = 'username'# your channel
for message in client.get_messages(channel_username, limit=10):
    print(message.message)
于 2020-10-05T07:50:51.740 回答