Как получить данные каналов и групп из моей учетной записи Telegram? (Python) - PullRequest
0 голосов
/ 12 марта 2020

Как я могу получать последние сообщения и сообщения со всех каналов и групп в моей учетной записи Telegram, используя "telethon".

1 Ответ

0 голосов
/ 12 марта 2020

Сначала вы должны получить свои "api_id" и "api_ha sh" из Telegram API . затем вы должны использовать следующий код для подключения к вашей учетной записи Telegram.

from telethon.sync import TelegramClient
from telethon.errors import SessionPasswordNeededError
# Create the client and connect
client = TelegramClient(you_username, api_id, api_hash)
client.start()
print("Client Created")
# Ensure you're authorized
if not client.is_user_authorized():
    client.send_code_request(your_phone)
    try:
        client.sign_in(phone, input('Enter the code: '))
    except SessionPasswordNeededError:
        client.sign_in(password=input('Password: '))

На следующем шаге мы определяем def для получения последнего сообщения объекта (например, канала или группы):

from telethon.tl.functions.messages import GetHistoryRequest
def get_entity_data(entity_id, limit):
    entity = client.get_entity(entity_id)
    today = datetime.datetime.today()
    # y = today - datetime.timedelta(days=1)
    posts = client(GetHistoryRequest(
                   peer=entity,
                   limit=limit,
                   offset_date=None,
                   offset_id=0,
                   max_id=0,
                   min_id=0,
                   add_offset=0,
                   hash=0))

     messages = []
     for message in posts.messages:
          messages.append(message.message)
     return messages

Этот def получает идентификатор канала или группы и ограничивает количество сообщений, которые мы хотим получить от любых каналов и групп, и возвращает сообщения.

Затем вы должны получить все группы и каналы, использующие этот код:

from telethon.tl.functions.messages import GetDialogsRequest
result = client(GetDialogsRequest(
             offset_date=None,
             offset_id=0,
             offset_peer=InputPeerEmpty(),
             limit=100,
             hash=0)) 
 entities = result.chats

И на последнем шаге вы должны выполнить итерации по сущностям и получить последние сообщения (например, 10 в следующем коде)

for entity in entities:
    title = entity.title
    messages = get_entity_data(entity.id, 10)
    print(title + ' :')
    print(messages)
    print('#######')
...