Files
chronicle.nixg.ru/telegram-archiver/README.md
T

230 lines
5.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Telegram Archiver
Микросервис для архивирования Telegram-каналов в локальную файловую систему с генерацией Markdown для Hugo.
## Возможности
- ✅ Скачивание всех постов канала (без ограничений)
- ✅ Сохранение текста в Markdown с front-matter для Hugo
- ✅ Скачивание медиа: фото, видео, документы, аудио
- ✅ Ограничение на размер файла (настраивается, по умолчанию 200 MB)
- ✅ Отчёт о слишком больших файлах в `2big2get.md`
- ✅ Дедупликация по ID сообщения
- ✅ Обработка репостов и ответов (reply-to)
- ✅ REST API + CLI интерфейс
- ✅ Логирование в файл и консоль
## Структура выходных данных
```
<channel_name>/
├── 12345/
│ ├── index.md # Контент поста + front-matter
│ ├── photo.jpg # Медиафайлы
│ └── document.pdf
├── 12346/
│ └── index.md # Только текст
└── 2big2get.md # Отчёт о больших файлах
```
## Установка
### 1. Клонирование и зависимости
```bash
cd telegram-archiver
pip install -r requirements.txt
```
### 2. Получение Telegram API ключей
1. Перейди на https://my.telegram.org/apps
2. Войди по номеру телефона
3. Создай новое приложение (любое название)
4. Скопируй `API_ID` и `API_HASH`
### 3. Настройка .env
```bash
cp .env.example .env
```
Отредактируй `.env`:
```env
API_ID=12345678
API_HASH=abcdef1234567890
PHONE=+79991234567
MAX_FILE_SIZE=209715200
OUTPUT_DIR=./archives
LOG_LEVEL=INFO
```
## Использование
### CLI (Command Line Interface)
#### Скачать весь канал:
```bash
python -m app.main --channel dedinit
```
#### С опциями:
```bash
python -m app.main \
--channel dedinit \
--output ./my-archives \
--limit 100 \
--from-message-id 5000 \
--force
```
#### Опции CLI:
| Опция | Кратко | Описание |
|-------|--------|----------|
| `--channel` | `-c` | Username канала (с @ или без) |
| `--output-dir` | `-o` | Папка для архива |
| `--limit` | `-l` | Лимит постов (для теста) |
| `--from-message-id` | `-f` | Начать с этого ID |
| `--force` | | Перескачать существующие |
| `--env-file` | | Путь к .env файлу |
### REST API
#### Запуск сервера:
```bash
uvicorn app.main:app --host 0.0.0.0 --port 8000
```
#### Endpoints:
**GET /health** - Проверка здоровья
```bash
curl http://localhost:8000/health
```
**POST /archive** - Запуск архивации
```bash
curl -X POST http://localhost:8000/archive \
-H "Content-Type: application/json" \
-d '{
"channel": "dedinit",
"limit": 100
}'
```
**GET /docs** - Swagger UI документация
Открой в браузере: http://localhost:8000/docs
## Front-matter формат
Каждый `index.md` содержит YAML front-matter:
```yaml
---
message_id: 12345
date: 2024-02-19T14:30:00
author: "Channel Name"
reply_to: "../12340/index.md"
repost_from: 12300
repost_channel: "Other Channel"
media_files:
- filename: photo.jpg
type: photo
caption: "Описание"
size: 102400
is_too_large: false
---
Текст сообщения в Markdown
```
## Обработка больших файлов
Файлы > `MAX_FILE_SIZE` (по умолчанию 200 MB) не скачиваются. Вместо этого:
1. В `index.md` добавляется `is_too_large: true`
2. В корне канала создаётся `2big2get.md` со списком всех больших файлов:
```markdown
# Files Too Large to Download
| Message ID | Filename | Size (bytes) |
|------------|----------|-------------|
| 12345 | video.mp4 | 524288000 |
```
## Логирование
Логи пишутся:
- В консоль (stdout)
- В файл: `YYYYMMDD-channel.log`
Пример: `20260219-dedinit.log`
## Docker (опционально)
Создай `Dockerfile`:
```dockerfile
FROM python:3.11-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "8000"]
```
Запуск:
```bash
docker build -t telegram-archiver .
docker run -v $(pwd)/.env:/app/.env -v $(pwd)/archives:/app/archives telegram-archiver
```
## Интеграция с Hugo
После архивации:
1. Скопируй содержимое канала в `content/posts/` Hugo
2. Front-matter совместим с Hugo (date, author, tags)
3. Медиафайлы будут доступны по относительным ссылкам
## Разработчикам
### Структура проекта:
```
telegram-archiver/
├── app/
│ ├── __init__.py
│ ├── main.py # FastAPI + CLI entry point
│ ├── telethon_client.py # Telethon wrapper
│ ├── archiver.py # Core logic
│ ├── models.py # Pydantic models
│ └── logger.py # Logging setup
├── config.py # Settings management
├── requirements.txt
├── .env.example
└── README.md
```
### Запуск тестов:
```bash
pytest
```
## Лицензия
MIT