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" без ковычек))