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 # Добавлен импорт
|
||||
import logging
|
||||
from tqdm import tqdm
|
||||
import getpass # Для безопасного ввода пароля
|
||||
import getpass
|
||||
from dotenv import load_dotenv
|
||||
|
||||
load_dotenv()
|
||||
|
||||
# Настройка логирования
|
||||
logging.basicConfig(
|
||||
@@ -29,27 +32,26 @@ logging.basicConfig(
|
||||
)
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
# Конфигурация
|
||||
API_ID = '1******1'
|
||||
API_HASH = 'd******************************a'
|
||||
PHONE_NUMBER = '+7999*******'
|
||||
# Конфигурация из .env файла
|
||||
API_ID = os.getenv('API_ID')
|
||||
API_HASH = os.getenv('API_HASH')
|
||||
PHONE_NUMBER = os.getenv('PHONE_NUMBER')
|
||||
# CHANNEL_IDENTIFIER теперь используется как значение по умолчанию при выборе диалога
|
||||
CONFIG_CHANNEL_IDENTIFIER = '-**********'
|
||||
CSV_FILENAME = 'telegram_data.csv'
|
||||
CONFIG_CHANNEL_IDENTIFIER = os.getenv('CONFIG_CHANNEL_IDENTIFIER')
|
||||
CSV_FILENAME = os.getenv('CSV_FILENAME', 'telegram_data.csv')
|
||||
# Дополнительные настройки
|
||||
LIMIT_MESSAGES = None # None для всех сообщений, или число для ограничения
|
||||
DAYS_LIMIT = None # None для всех сообщений, или число дней назад для ограничения
|
||||
LIMIT_MESSAGES_STR = os.getenv('LIMIT_MESSAGES')
|
||||
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:
|
||||
"""
|
||||
Парсит текстовое сообщение с использованием регулярных выражений.
|
||||
|
||||
""" Парсит текстовое сообщение с использованием регулярных выражений.
|
||||
Args:
|
||||
text: Текст сообщения.
|
||||
|
||||
Returns:
|
||||
Словарь с извлеченными данными, или None, если не удалось найти необходимые поля.
|
||||
"""
|
||||
Словарь с извлеченными данными, или None, если не удалось найти необходимые поля. """
|
||||
|
||||
raw_text_preview = text[:250] + ('...' if len(text) > 250 else '') # Немного увеличил превью
|
||||
result = {'Raw Message': raw_text_preview}
|
||||
|
||||
Reference in New Issue
Block a user