Как залогинить свое приложение в Телеграм? Как получить данные от серверов Телеграм? Как организовать свое приложение для дальнейшего масштабирования? Все это и многое другое вы узнаете в нашей статье

В первой части мы поговорили о будущей структуре проекта и получим необходимые ключи для авторизации в Telegram.

Весь код будет доступен на гитхаб, где-то внизу

Дальше мы обсудим, как получить данные от серверов Телеграм и как организовать свое приложение для дальнейшей работы.

Поехали!

1. Вспомогательные файлы проекта

Использовать можете как Pro так и Community версию. Сложностей не будет
Итак структура:


1. .env файл с полями

API_ID =ID полученное от Телеграм
API_HASH =Хэш, полученный от Телеграм
USERNAME =Название программы

2. requirements.txt (приведу мои библиотеки)

asyncpg==0.28.0
colorama==0.4.4
greenlet==2.0.2
psycopg2-binary
pyaes==1.6.1
pyasn1==0.4.8
PyMySQL==1.1.0
python-dotenv==1.0.0
rsa==4.8
SQLAlchemy==2.0.15
Telethon==1.24.0
tqdm==4.62.3
typing_extensions==4.6.3

psycopg2-binary нужна для базы postgres, в статье мы ее рассматривать не будем, но в requirements она у меня есть.

3. .gitignore (для VCS )

/venv
.idea
*.session
.env
*.db
__pycache__/

4. Dockerfile (опционально для желающих)

FROM python:3.9-alpine

COPY requirements.txt /app/
WORKDIR /app
RUN pip install --no-cache-dir --upgrade pip
RUN pip install --no-cache-dir -r requirements.txt

COPY . /app/

WORKDIR /app
CMD ["python", "main.py"]
LABEL authors="Happy Python"

5. README.md, CONTRIBUTING.md, CHANGELOG по желанию.

2. Основные файлы проекта.

  1. config.py
  2. database.by
  3. main.py
  4. push_data_in_database.py
  5. raw_telegram_data_sort.py
  6. telegram_factory.py

Итак, подробнее.

config.py – это опциональный файл, в котором мы будем получать данные из.env, а также, возможно, хранить в будущем другие необходимые переменные и параметры.

Почему я получаю данные из.env в какой-то конфиг, а не использую их напрямую? Отвечаю. Ссылка на подключение к базе данных postgres не очень хорошо интерпретируется напрямую из.env, поэтому я добавил небольшой промежуточный слой. Config на ваше усмотрение.

Внешний вид и содержание файла.

С базой данных мы пока повременим. Дальше посмотрим наш главный файл Telegram в котором мы будем производить все основные запросы. Несмотря на то, что Python язык процедурный считаю удобным использовать класс.

Файл telegram_factory.py

  • auth производит авторизацию в Телеграм
  • get_messages получает массив сообщений из чата
  • _get_id_of_last_message внутриклассовый метод, который получает id последнего сообщения в чате для того, что бы не грузить постоянно все сообщения в базу
  • get_channel_data_from_link сведения о самом чате, такие как его id, количество подписчиков и много другой полезной информации
  • get_users получает список пользователей чата
  • stop производит закрытие подключения

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

Файл raw_telegram_data_sort

Модуль получает сырые ответы от «Telegram» и выполняет проверки на наличие или отсутствие различных полей. Он содержит набор методов, которые возвращают определенные данные о пользователе, сообщении или чате. Поэтому сам файл будет содержать три класса.

  • MessageProcessor отвечает за обработку данных о сообщениях дополнительно определяет количество просмотров сообщения, репостов и фиксирует id отправителя.
  • UserProcessor обрабатывает данные о каждом участнике чата кроме того, определяет статус (Онлайн/Офлайн) и получает id фото профиля (при наличии)
  • ChannelProcessor выбирает название чата, идентификатор и дату создания.

Методов и данных гораздо больше, но их смысл и назначение однозначно понятны.
примечание Автора

После того, как мы отобрали необходимые нам данные, нам необходимо забросить их в нашу базу данных. Поэтому разработаем модуль для базы данных

Файл database.py

Здесь мы определим методы, которые нам нужны для работы с базой данных

  • connect для подключения к базе
  • create_tables создает при отсутствии таблицы в базу
  • execute_query технический метод, создает курсор, отправляет запрос, делает коммит.
  • insert_user закидывает данные в таблицу с пользователями
  • insert_channel аналогично по чату
  • insert_message записывает данные сообщений
  • close закрывает подключение

Остался модуль, который будет отправлять в методы database.py данные, которые отобраны и проверены в файле raw_telegram_data_sort.py

Файл push_data_in_database.py

Файл, который можно переделывать хоть каждый день. Собирает отобранные данные и через цикл отправляет запросы в БД. Путей улучшения процесса дофига. Буду ждать pull request с оригинальными идеями. Цикл и запросы к БД зло, но в целях демонстрации работать будет.

Видали а? Улучшать есть куда.

Ну и остается центральный main.py

Файл main.py

Центральный файл, в котором можно определить порядок действий, добавить или исключить новые модули ну и здесь можно указать целевую ссылку на чат.

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

Что здесь происходит на примере.

  • Создание экземпляра Tелеграм
  • Создание БД
  • Создание таблиц
  • Авторизация в Телеграм
  • Ссылка на чат
  • Получение данных о чате
  • Одновременный запуск сбора юзеров и сообщений
  • Обработка всех полученных данных
  • Закрытие базы
  • Отключение от Telegram

Некоторые вещи максимально упрощены, некоторые намерено закостылены в угоду читаемости и понимания. Автор не несет ответственности за моральные страдания, при чтении кода. Автор несет радость и знания.

Код проекта был есть и будет доступен на гитхаб.
Поставить звездочки очень приветствуется

Место, где мы и такие же как мы всегда на связи

Наш паблик ВК для олдов

Подпишитесь на рассылку

Если это было вам полезно — вы можете сказать нам спасибо!