Разработка парсера SEED-фраз в Telegram на Python

D2

Администратор
Регистрация
19 Фев 2025
Сообщения
4,380
Реакции
0
В данной статье мы рассмотрим код, который реализует функциональность для поиска SEED-фраз в текстовых сообщениях и изображениях в Telegram-чатах. Напоминаю, что это моя первая статья на этом форуме и направлена она для изучения материала новичками. Приму адекватную критику от коллег, а так же готов выслушать ваше мнение. Спасибо.

Введение:

1. Необходимые библиотеки и программы:

Мы будем использовать следующие Python-библиотеки:
  • Telethon — для взаимодействия с Telegram API.
  • Pytesseract — интерфейс для Tesseract OCR.
  • Pillow — для работы с изображениями (понадобится для обработки данных перед отправкой в OCR).
Установка необходимых библиотек:
Код: Скопировать в буфер обмена
pip install telethon pytesseract pillow

2. Установка Tesseract OCR
Для распознавания текста на изображениях необходимо установить Tesseract OCR:

1. Скачайте установщик с официальной страницы.
2. Установите программу и добавьте путь к tesseract.exe в переменную окружения PATH.

3. Настройка Telegram API
Для работы с Telegram API вам нужно зарегистрировать приложение на my.telegram.org. После регистрации вы получите:

• API ID
• API Hash

Эти значения понадобятся для авторизации через Telethon.

Начало:

1.
Для самого начала написания скрипта нам необходимо импортировать все необходимые нам библиотеки:
Python: Скопировать в буфер обмена
Код:
import os
import re
from telethon import TelegramClient, events
from telethon.tl.types import InputMessagesFilterPhotos, InputMessagesFilterDocument
from PIL import Image
import pytesseract
from io import BytesIO
  • os: Библиотека для работы с операционной системой.
  • re: Модуль для работы с регулярными выражениями, который позволяет искать шаблоны в строках.
  • telethon: Библиотека для работы с Telegram API, позволяющая взаимодействовать с Telegram через Python.
  • PIL (Pillow): Библиотека для работы с изображениями, позволяющая открывать, изменять и сохранять изображения.
  • pytesseract: Python-обертка для Tesseract OCR, которая позволяет распознавать текст на изображениях.
  • BytesIO: Класс для работы с байтовыми потоками, который позволяет работать с изображениями, загруженными в память
2. Настройки Telegram API
Далее, нам необходимо добавить функцию для аутентификации в Телеграмм:

Python: Скопировать в буфер обмена
Код:
API_ID = 'ВАШ_API_ID'
API_HASH = 'ВАШ_API_HASH'
SESSION_NAME = 'telegram_parser_session'
  • API_ID и API_HASH: Эти параметры необходимы для аутентификации в Telegram API.
  • SESSION_NAME: Имя сессии, которое используется для хранения данных аутентификации. Это позволяет избежать повторного ввода данных при последующих запусках скрипта.
3. Регулярное выражение для поиска SEED-фраз:
Python: Скопировать в буфер обмена
SEED_REGEX = r'\b(?:\w+\s){11,23}\w+\b'
  • SEED_REGEX: Регулярное выражение, которое ищет SEED-фразы, состоящие из 12 или 24 слов. Шаблон ищет последовательности слов, разделённых пробелами, что соответствует формату SEED-фраз, используемых в криптографии.
4. Инициализация клиента Telethon:
Python: Скопировать в буфер обмена
client = TelegramClient(SESSION_NAME, API_ID, API_HASH)
  • TelegramClient: Создание экземпляра клиента для работы с Telegram API. Он будет использовать указанные параметры для аутентификации и управления сессией.
5. Добавление функции для поиска SEED-фраз в тексте:
Python: Скопировать в буфер обмена
Код:
def find_seed_phrases(text):
    matches = re.findall(SEED_REGEX, text)
    return matches if matches else []
  • find_seed_phrases: Функция, которая принимает текст и ищет в нём SEED-фразы с использованием регулярного выражения. Если находки есть, они возвращаются в виде списка.
6. Добавление функции для поиска SEED-фраз на изображениях:
Python: Скопировать в буфер обмена
Код:
[CODE=python]def extract_text_from_image(image_bytes):
    image = Image.open(BytesIO(image_bytes))
    return pytesseract.image_to_string(image)
extract_text_from_image: Функция, которая принимает байты изображения, открывает его с помощью Pillow и использует pytesseract для извлечения текста. Это позволяет обрабатывать изображения, которые могут содержать SEED-фразы.

7. Добавление функции для поиска SEED-фраз в чатах:
Python: Скопировать в буфер обмена
Код:
async def process_chat(chat):
    async for message in client.iter_messages(chat):
        # Поиск SEED-фраз в тексте сообщения
        if message.text:
            seeds = find_seed_phrases(message.text)
            if seeds:
                print(f"[TEXT] Найдены SEED-фразы в чате {chat.title}: {seeds}")
       
        # Проверка на наличие фото и документов (картинок)
        if message.photo or message.document:
            media = message.photo or message.document
            if media:
                # Скачиваем изображение
                image_bytes = await client.download_media(media, bytes)
                if image_bytes:
                    # Извлечение текста с помощью OCR
                    extracted_text = extract_text_from_image(image_bytes)
                    seeds = find_seed_phrases(extracted_text)
                    if seeds:
                        print(f"[IMAGE] Найдены SEED-фразы в чате {chat.title}: {seeds}")
[/CODE]
  • process_chat: Асинхронная функция для обработки сообщений в заданном чате. Она использует iter_messages для итерации по всем сообщениям в чате.
  • Внутри функции:
    • Сначала проверяется наличие текста в сообщении. Если текст найден, вызывается функция find_seed_phrases для поиска SEED-фраз.
    • Затем проверяется наличие фотографий или документов. Если таковые имеются, они загружаются с помощью download_media, и текст извлекается с помощью extract_text_from_image.
8. Реализация основной функции скрипта:
Python: Скопировать в буфер обмена
Код:
async def main():
    # Подключение к Telegram
    await client.start()


    # Получение всех чатов, включая Избранное (Saved Messages)
    dialogs = await client.get_dialogs()


    # Обход всех чатов
    for dialog in dialogs:
        print(f"Проверка чата: {dialog.title}")
        await process_chat(dialog)


    # Завершение работы клиента
    await client.disconnect()
  • main: Асинхронная функция, которая управляет основным потоком выполнения.
  • Внутри функции:
    • Сначала происходит подключение к Telegram с помощью client.start().
    • Затем с помощью get_dialogs() получаем все чаты, включая Избранное.
    • Для каждого чата вызывается функция process_chat, которая обрабатывает сообщения.
    • В конце работы клиента вызывается client.disconnect() для корректного завершения сессии.
9. Запуск скрипта:
Python: Скопировать в буфер обмена
Код:
with client:
    client.loop.run_until_complete(main())
  • Используется контекстный менеджер with, который гарантирует, что клиент будет корректно закрыт после завершения работы.
  • client.loop.run_until_complete(main()) запускает асинхронную функцию main, что инициирует весь процесс.
Заключение:

В данной статье мы подробно рассмотрели код, который позволяет автоматически искать SEED-фразы в текстовых сообщениях и изображениях Telegram-чатов. Используя библиотеки Telethon и pytesseract, мы создали эффективный инструмент для анализа сообщений, который может быть полезен в различных ситуациях, где в ручную заниматься поиском SEED-фраз совсем несуразно. Благодарю за прочтение моей первой статьи, если она понравилась вам - всегда можно поддержать автора лайком.

Автор: AGN
Специально для xss.is

Спойлер: Готовый код
Python: Скопировать в буфер обмена
Код:
import os
import re
from telethon import TelegramClient, events
from telethon.tl.types import InputMessagesFilterPhotos, InputMessagesFilterDocument
from PIL import Image
import pytesseract
from io import BytesIO


API_ID = 'ВАШ_API_ID'
API_HASH = 'ВАШ_API_HASH'
SESSION_NAME = 'telegram_parser_session'


SEED_REGEX = r'\b(?:\w+\s){11,23}\w+\b'


client = TelegramClient(SESSION_NAME, API_ID, API_HASH)


def find_seed_phrases(text):
    matches = re.findall(SEED_REGEX, text)
    return matches if matches else []


def extract_text_from_image(image_bytes):
    image = Image.open(BytesIO(image_bytes))
    return pytesseract.image_to_string(image)


async def process_chat(chat):
    async for message in client.iter_messages(chat):
        if message.text:
            seeds = find_seed_phrases(message.text)
            if seeds:
                print(f"[TEXT] Найдены SEED-фразы в чате {chat.title}: {seeds}")
       
        if message.photo or message.document:
            media = message.photo or message.document
            if media:
                image_bytes = await client.download_media(media, bytes)
                if image_bytes:
                    extracted_text = extract_text_from_image(image_bytes)
                    seeds = find_seed_phrases(extracted_text)
                    if seeds:
                        print(f"[IMAGE] Найдены SEED-фразы в чате {chat.title}: {seeds}")


async def main():
    await client.start()


    dialogs = await client.get_dialogs()

    for dialog in dialogs:
        print(f"Проверка чата: {dialog.title}")
        await process_chat(dialog)


    await client.disconnect()


with client:
    client.loop.run_until_complete(main())
 
Сверху Снизу