Парсим историю сообщений в чатах Telegram

CoderP

Активный участник

Скрипт для парсинга сообщений Telegram​

Этот Python скрипт, использующий библиотеку Pyrogram, предназначен для асинхронного парсинга и сохранения истории сообщений из Telegram канала. Скрипт подключается к API Telegram, используя предоставленные пользователем api_id и api_hash. Он позволяет извлекать сообщения определенного пользователя из указанного канала, обрабатывая до 100000 сообщений с возможностью задать лимит сообщений за один запрос (200 сообщений). Полученные данные (ID пользователя, дата и текст сообщения) записываются в файл. Скрипт включает механизм паузы для предотвращения превышения лимитов запросов к API Telegram."

Чтобы получить API ID и API Hash для Telegram, следуйте этим шагам:

1. Перейдите на официальный сайт Telegram https://my.telegram.org
2. Войдите в свой аккаунт Telegram, используя свой номер телефона.
3. После входа в систему выберите "API development tools".
4. В форме, заполните необходимые поля, включая название приложения и короткое описание. После заполнения формы нажмите "Create application".
5. После создания приложения, система предоставит вам `api_id` и `api_hash`.

Эти учетные данные нужны для работы с Telegram API. Сохраняйте их в безопасности и не делитесь ими с другими лицами.

Python:
import asyncio

from pyrogram import Client

# Ваши API id и hash, полученные от Telegram
api_id = '111111'
api_hash = 'aaaaaa'
app = Client("my_bot", api_id=api_id, api_hash=api_hash)



async def parser_massage(client, channel_id):
    async with client:
        offset_id = 0
        total_messages = 0
        limit_per_request = 200 #количество сообщений за раз
        max_messages = 100000 #сколько всего сообщений в канале перебрать

        while total_messages < max_messages:
            async for message in client.get_chat_history(channel_id, limit=limit_per_request, offset_id=offset_id):
                total_messages += 1
                if total_messages >= max_messages:
                    break

                if message.from_user and message.from_user.id == сюда вставляем ID юзера от которого хотим получить историю:
                    print(f'{message.from_user.id}: {message.text}')
                    with open("name.txt", 'a+') as f:
                        f.write(f'{message.from_user.id}: {message.date} - {message.text}\n')

                offset_id = message.id + 1

            if total_messages % limit_per_request != 0:
                # Если количество обработанных сообщений меньше, чем limit_per_request,
                # то, вероятно, мы достигли конца истории сообщений
                break

            t_sleep = await asyncio.sleep(1)  # Пауза для избежания превышения лимитов запросов
            print(t_sleep)

        print(f"Total messages processed: {total_messages}")


asyncio.run(parser_massage(app, сюда вставляем ID канала например "-11111111" без ковычек))
 
Назад
Сверху