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