Files

255 lines
8.1 KiB
Markdown
Raw Permalink 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 — Ответы на вопросы
## 📊 Итоги полного тестирования (март 2026)
**Канал:** dedinit
**Постов заархивировано:** 992
**Время выполнения:** 7335 секунд (≈ 2 часа 2 минуты)
**Медиафайлов скачано:** 454
**Таймаутов:** ~50 файлов (пропущены, процесс не застрял)
---
## ❓ Вопросы и ответы
### 1. Размер файлов: когда считается?
**Ответ:** Размер должен браться **из Telegram ДО скачивания** через атрибут `doc.size`.
**Проблема:** В текущей версии `size: 0` во front-matter — это баг.
**Решение (задача 0.15):**
```python
# Брать из атрибутов Telegram
size = doc.size
# ИЛИ проверять после записи
size = Path(filepath).stat().st_size
```
---
### 2. Можно ли получить прямые ссылки на файлы для дозагрузки?
**Ответ:** **Да, но с ограничениями.**
Telethon может получить прямую ссылку через `message.media.document.id`, но:
- Ссылка **временная** (действует несколько часов)
- Требует активной сессии Telegram
- Нельзя просто сохранить URL и скачать позже
**Решение (задача 0.14, 0.19):**
1. Сохранять `message_id` и `media_id` во front-matter
2. Для дозагрузки:
- Переподключаться к Telegram
- Запрашивать файл по ID через API
- Скачивать заново
**Пример front-matter:**
```yaml
media_files:
- filename: photo.jpg
type: photo
message_id: 12345
media_id: "AgADAgAD..."
download_url: "https://t.me/dedinit/12345/file" # временная!
```
---
### 3. Hugo и формат тегов
**Вопрос:** Поймёт ли Hugo такой формат?
```yaml
tags:
- 1с
- debian
- postgres
```
**Ответ:** **Да, Hugo понимает оба формата:**
```yaml
# YAML list (сейчас)
tags:
- linux
- debian
# Inline JSON-style (компактнее)
tags: ["linux", "debian", "postgres"]
```
**Рекомендация:** Оба работают одинаково. Задача **0.22** — опционально изменить на inline для компактности.
---
### 4. Многопоточное скачивание (задача 0.17)
**Вопрос:** Можно ли скачивать в несколько потоков?
**Ответ:** **Да, это возможно и ускорит процесс в 2-3 раза.**
**Техническая реализация:**
```python
import asyncio
# Параллельная загрузка 3 файлов
await asyncio.gather(
download_file_1(),
download_file_2(),
download_file_3(),
)
```
**Ограничения:**
- Telegram блокирует при >5 одновременных загрузок
- Рекомендовано: **3 параллельных потока**
- Нужно соблюдать rate limits (паузы между запросами)
**План (задача 0.19):**
1. Первый проход: собрать все URL файлов в очередь
2. Второй проход: загружать параллельно (3 потока)
3. Resume: продолжать с места обрыва
**Ожидаемое ускорение:**
- Сейчас: ~1000 постов за 2 часа (500 постов/час)
- С многопоточностью: ~1000-1500 постов/час
---
### 5. Resume прерванной архивации (задача 0.21)
**Вопрос:** Есть ли средство возобновить прерванный процесс?
**Ответ:** **Частично работает уже сейчас.**
**Текущее состояние:**
- ✅ Дедупликация по ID существует
- ✅ Повторный запуск пропускает скачанные посты
- ❌ Нет сохранения последнего обработанного ID
- ❌ Нет команды `--resume`
**План (задача 0.21):**
1. Сохранять `last_message_id` в лог или файл состояния
2. Добавить флаг `--resume` для продолжения
3. При старте проверять последний ID и начинать с него
**Пример:**
```bash
# Первый запуск
python run_archiver.py -c dedinit
# Прерван на посте 624
# Возобновление
python run_archiver.py -c dedinit --resume
# Продолжит с поста 624
```
---
### 6. Голосовые сообщения и аудио (задача 0.20, 0.24)
**Вопрос:** Как обрабатывать голосовые сообщения?
**Текущее состояние:**
- Голосовухи скачиваются как `.bin` или `.ogg`
- Нет метаданных (длительность, формат)
- Нет красивого отображения в Hugo
**План:**
1. Определять формат по MIME:
- `audio/ogg` → `.ogg`
- `audio/mp3` → `.mp3`
2. Извлекать длительность: `doc.attributes.duration`
3. Сохранять во front-matter:
```yaml
media_files:
- filename: voice.ogg
type: audio
duration: 45 # секунд
size: 127359
```
4. Для Hugo: использовать shortcode с wavesurfer.js
```markdown
{{< audio-player src="voice.ogg" waveform="true" >}}
```
---
### 7. Видео-кружки (задача 0.11)
**Вопрос:** Как обрабатывать video_note (кружочки)?
**Проблема:** Сохраняются как `.bin` без расширения.
**Решение:**
1. Определять по MIME: `video/mp4` → `.mp4`
2. Переименовывать после скачивания
3. Опционально: конвертировать в нормальное видео (убрать круг)
---
### 8. Временная зона (задача 0.13)
**Проблема:** `date: '2026-01-18T08:11:24+00:00'` — UTC вместо Москвы.
**Пост был в 11:11 по Москве, указано 08:11 UTC.**
**Решение:**
```python
from zoneinfo import ZoneInfo
# Конвертировать в московское время
moscow_tz = ZoneInfo('Europe/Moscow')
date_moscow = date.astimezone(moscow_tz)
# Результат: 2026-01-18T11:11:24+03:00
```
---
### 9. Прямые ссылки на посты (задача 0.9, 0.16)
**Вопрос:** Где ссылки на оригинальные посты?
**Текущее состояние:**
- Сохраняется `repost_from` (ID) и `repost_channel` (название)
- Нет прямой ссылки `https://t.me/...`
**План:**
```yaml
# Для всех постов
channel_url: "https://t.me/dedinit"
post_url: "https://t.me/dedinit/1234"
# Для репостов
original_post_url: "https://t.me/otherchannel/987"
```
---
## 📈 Метрики производительности
| Параметр | Значение |
|----------|----------|
| Скорость архивации | ~500 постов/час |
| Время на 1 пост | ~7.4 секунды |
| Время на 1 медиафайл | ~15-30 секунд (с таймаутами) |
| Процент таймаутов | ~5% (50 из 992) |
| Успешных загрузок | 95% |
---
## 🎯 Следующие шаги
1. **Исправить критичные баги** (0.10, 0.15)
2. **Добавить resume** (0.21)
3. **Добавить отчёт о таймаутах** (0.12)
4. **Исправить временную зону** (0.13)
5. **Многопоточность** (0.17, 0.19)
---
*Документ создан: 6 марта 2026 г.*
*Версия: 1.0*