# 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*