Читайте сообщения публичных каналов от Telegram

Мне нужно читать сообщения некоторых публичных каналов в приложении, как например бывает https://tlgrm.ru/channels/tech Как я понял, бот для этого дела не подойдет. Нужно использовать клиентское апи, но везде что с каналом связаны методы везде нужен channel_id но где его взять я не знаю, у меня только названия каналов, а как мне его получить из него id я не нашел такой метод.

Как я могу получить идентификатор канала по его названию?


person wpbloger    schedule 02.10.2017    source источник
comment
Текущие ответы здесь устарели, stackoverflow.com/q/58665178/4759433 дублируются с более новыми ответами   -  person Lonami    schedule 01.11.2019


Ответы (3)


Предполагая, что вы используете Python, я предлагаю библиотеку Telethon. Вы можете использовать этот фрагмент кода, чтобы получить channel_id и access_hash из @username:

from telethon.tl.functions.contacts import ResolveUsernameRequest

client = TelegramClient(session_file, api_id=X, api_hash='X')
client.connect()
response = client.invoke(ResolveUsernameRequest("username"))
print(response.channel_id)
print(response.access_hash)

Убедитесь, что у вас уже есть api_id и api_hash. А также убедитесь, что вы аутентифицировали свое приложение, т. е. у вас есть рабочий файл session_file. Просто прочитайте README Telethon на странице Github, если вы не знаете, как выполнить описанные выше шаги.

person Ali Hashemi    schedule 02.10.2017
comment
AttributeError: объект «TelegramClient» не имеет атрибута «вызвать» - person keramat; 11.01.2021

В последней версии вы бы сделали это, используя имя пользователя канала

from telethon.tl.functions.contacts import ResolveUsernameRequest
response = client.invoke(ResolveUsernameRequest(<username>))
messages = client.get_message_history(response.peer,limit=1000)
person Dark Light    schedule 11.01.2018

Отличный независимый от языка способ получить всю историю чата — https://www.t-a-a-s.ru/. Вы можете сделать запрос истории чата только через HTTP-запрос.

После входа в систему и получения ключа API вы можете делать запросы на любом языке, например так (пример javascript):

// First, receive chat id from channel username with searchPublicChat
let response = await fetch("https://api.t-a-a-s.ru/client", {
  "headers": {
    "content-type": "application/json",
  },
  "method": "POST",
  "body": JSON.stringify({
           api_key: "xxxxxxxxxx:xxxxxxxxxx-xxxxxxxxxx-xxxxx", // key that you will receive from TaaS after creating client
           "@type": "searchPublicChat",
           username: "username"
  })
});

// Take channel id from response
response = await response.json();
let chatId = response.id;

// Finally get chat history
let messages = await fetch("https://api.t-a-a-s.ru/client", {
  "headers": {
    "content-type": "application/json",
  },
  "method": "POST",
  "body": JSON.stringify({
           api_key: "xxxxxxxxxx:xxxxxxxxxx-xxxxxxxxxx-xxxxx",
            "@type": "getChatHistory",
            chat_id: chatId,
            from_message_id: "0",
            limit: "100",
            offset: "0"
  }),
});
person urmurmur    schedule 29.12.2020