update
This commit is contained in:
8
.env_orig
Normal file
8
.env_orig
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
API_ID=1******1
|
||||||
|
API_HASH=d******************************a
|
||||||
|
PHONE_NUMBER=+7999*******
|
||||||
|
CONFIG_CHANNEL_IDENTIFIER=-**********
|
||||||
|
CSV_FILENAME=telegram_data.csv
|
||||||
|
# Дополнительные настройки
|
||||||
|
LIMIT_MESSAGES=
|
||||||
|
DAYS_LIMIT=
|
||||||
72
README.md
72
README.md
@@ -0,0 +1,72 @@
|
|||||||
|
# Документация к Telegram парсеру
|
||||||
|
|
||||||
|
## 📋 Описание
|
||||||
|
Парсер для сбора данных из Telegram чатов/каналов с сохранением в CSV. Основной функционал:
|
||||||
|
- Авторизация через Telegram API
|
||||||
|
- Парсинг сообщений с различными форматами данных
|
||||||
|
- Фильтрация по дате
|
||||||
|
- Интерактивный выбор чата
|
||||||
|
- Логирование операций
|
||||||
|
|
||||||
|
## 🛠 Установка
|
||||||
|
```bash
|
||||||
|
# Клонировать репозиторий
|
||||||
|
cd e:\parcer_telegram_meessges
|
||||||
|
|
||||||
|
# Установить зависимости
|
||||||
|
pip install -r req.pip
|
||||||
|
```
|
||||||
|
|
||||||
|
## ⚙ Конфигурация
|
||||||
|
Отредактируйте настройки в `main.py`:
|
||||||
|
```python
|
||||||
|
API_ID = 'ваш_api_id' # Получить на my.telegram.org
|
||||||
|
API_HASH = 'ваш_api_hash'
|
||||||
|
PHONE_NUMBER = '+номер_телефона'
|
||||||
|
CSV_FILENAME = 'data/output.csv' # Путь для сохранения
|
||||||
|
```
|
||||||
|
|
||||||
|
## 🚀 Использование
|
||||||
|
```bash
|
||||||
|
python main.py
|
||||||
|
```
|
||||||
|
|
||||||
|
## 🗃 Структура данных
|
||||||
|
Парсер извлекает следующие поля:
|
||||||
|
| Поле | Описание |
|
||||||
|
|------|-----------|
|
||||||
|
| Name | ФИО пользователя |
|
||||||
|
| Phone | Номер телефона |
|
||||||
|
| Email | Электронная почта |
|
||||||
|
| Date | Дата события/рождения |
|
||||||
|
| Transaction ID | ID транзакции |
|
||||||
|
| URL | Ссылка на форму |
|
||||||
|
|
||||||
|
## 🔍 Пример сообщения
|
||||||
|
```
|
||||||
|
Request details:
|
||||||
|
Name: Иванов Иван
|
||||||
|
Phone: +79991234567
|
||||||
|
...
|
||||||
|
```
|
||||||
|
|
||||||
|
## 📊 Логирование
|
||||||
|
Логи сохраняются в `telegram_parser.log` с детализацией:
|
||||||
|
- Время выполнения
|
||||||
|
- Статус операций
|
||||||
|
- Ошибки
|
||||||
|
|
||||||
|
## ⚠ Типовые проблемы
|
||||||
|
```bash
|
||||||
|
# Если требуется двухфакторная аутентификация
|
||||||
|
Введите пароль из Telegram при запросе
|
||||||
|
|
||||||
|
# Ошибка доступа к каналу
|
||||||
|
Убедитесь что:
|
||||||
|
1. Бот добавлен в группу
|
||||||
|
2. Используется корректный ID чата
|
||||||
|
```
|
||||||
|
|
||||||
|
## 📄 Лицензия
|
||||||
|
MIT License | Для внутреннего использования
|
||||||
|
|
||||||
32
main.py
32
main.py
@@ -16,7 +16,10 @@ from telethon.tl.types import Channel, ChatForbidden, PeerChannel
|
|||||||
from telethon.errors import ChannelPrivateError # Добавлен импорт
|
from telethon.errors import ChannelPrivateError # Добавлен импорт
|
||||||
import logging
|
import logging
|
||||||
from tqdm import tqdm
|
from tqdm import tqdm
|
||||||
import getpass # Для безопасного ввода пароля
|
import getpass
|
||||||
|
from dotenv import load_dotenv
|
||||||
|
|
||||||
|
load_dotenv()
|
||||||
|
|
||||||
# Настройка логирования
|
# Настройка логирования
|
||||||
logging.basicConfig(
|
logging.basicConfig(
|
||||||
@@ -29,27 +32,26 @@ logging.basicConfig(
|
|||||||
)
|
)
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
# Конфигурация
|
# Конфигурация из .env файла
|
||||||
API_ID = '1******1'
|
API_ID = os.getenv('API_ID')
|
||||||
API_HASH = 'd******************************a'
|
API_HASH = os.getenv('API_HASH')
|
||||||
PHONE_NUMBER = '+7999*******'
|
PHONE_NUMBER = os.getenv('PHONE_NUMBER')
|
||||||
# CHANNEL_IDENTIFIER теперь используется как значение по умолчанию при выборе диалога
|
# CHANNEL_IDENTIFIER теперь используется как значение по умолчанию при выборе диалога
|
||||||
CONFIG_CHANNEL_IDENTIFIER = '-**********'
|
CONFIG_CHANNEL_IDENTIFIER = os.getenv('CONFIG_CHANNEL_IDENTIFIER')
|
||||||
CSV_FILENAME = 'telegram_data.csv'
|
CSV_FILENAME = os.getenv('CSV_FILENAME', 'telegram_data.csv')
|
||||||
# Дополнительные настройки
|
# Дополнительные настройки
|
||||||
LIMIT_MESSAGES = None # None для всех сообщений, или число для ограничения
|
LIMIT_MESSAGES_STR = os.getenv('LIMIT_MESSAGES')
|
||||||
DAYS_LIMIT = None # None для всех сообщений, или число дней назад для ограничения
|
LIMIT_MESSAGES = int(LIMIT_MESSAGES_STR) if LIMIT_MESSAGES_STR and LIMIT_MESSAGES_STR.strip() else None
|
||||||
|
DAYS_LIMIT_STR = os.getenv('DAYS_LIMIT') # None для всех сообщений, или число для ограничения
|
||||||
|
DAYS_LIMIT = int(DAYS_LIMIT_STR) if DAYS_LIMIT_STR and DAYS_LIMIT_STR.strip() else None # None для всех сообщений, или число дней назад для ограничения
|
||||||
|
|
||||||
|
|
||||||
async def parse_message(text: str) -> dict | None:
|
async def parse_message(text: str) -> dict | None:
|
||||||
"""
|
""" Парсит текстовое сообщение с использованием регулярных выражений.
|
||||||
Парсит текстовое сообщение с использованием регулярных выражений.
|
|
||||||
|
|
||||||
Args:
|
Args:
|
||||||
text: Текст сообщения.
|
text: Текст сообщения.
|
||||||
|
|
||||||
Returns:
|
Returns:
|
||||||
Словарь с извлеченными данными, или None, если не удалось найти необходимые поля.
|
Словарь с извлеченными данными, или None, если не удалось найти необходимые поля. """
|
||||||
"""
|
|
||||||
|
|
||||||
raw_text_preview = text[:250] + ('...' if len(text) > 250 else '') # Немного увеличил превью
|
raw_text_preview = text[:250] + ('...' if len(text) > 250 else '') # Немного увеличил превью
|
||||||
result = {'Raw Message': raw_text_preview}
|
result = {'Raw Message': raw_text_preview}
|
||||||
|
|||||||
Reference in New Issue
Block a user