Как залогинить свое приложение в Телеграм? Как получить данные от серверов Телеграм? Как организовать свое приложение для дальнейшего масштабирования? Все это и многое другое вы узнаете в нашей статье
В первой части мы поговорили о будущей структуре проекта и получим необходимые ключи для авторизации в 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. Основные файлы проекта.
- config.py
- database.by
- main.py
- push_data_in_database.py
- raw_telegram_data_sort.py
- 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
Некоторые вещи максимально упрощены, некоторые намерено закостылены в угоду читаемости и понимания. Автор не несет ответственности за моральные страдания, при чтении кода. Автор несет радость и знания.
Код проекта был есть и будет доступен на гитхаб.
Поставить звездочки очень приветствуется
Место, где мы и такие же как мы всегда на связи
Подпишитесь на рассылку