Files
GenAudioBookInfo/README.md
2026-02-23 23:51:18 +03:00

5.4 KiB
Raw Blame History

GenAudioBookInfo

Go-утилита для обработки аудиокниг: сканирует папки, извлекает/нормализует теги, ищет данные через TorrAPI, (опционально) валидирует через OpenRouter, генерирует metadata.json (AudioBookShelf) и раскладывает по структуре.

Что делает программа:

  1. Сканирует каталог и находит папки с аудиофайлами (MP3, M4B, FLAC и др.)
  2. Извлекает метаданные из тегов первого аудиофайла (автор, название, жанр, год)
  3. Исправляет кодировку — автоматически устраняет mojibake в тегах (UTF-8 → Latin-1)
  4. Валидирует метаданные через LLM (OpenRouter) — нормализует формат автора, убирает мусор из названия
  5. Ищет аудиокнигу на торрент-трекерах через TorrAPI (RuTracker, Kinozal, NoNameClub, RuTor) — получает описание, постер, жанр
  6. Скачивает обложку (cover.jpg) из найденной раздачи
  7. Формирует metadata.json в формате AudioBookShelf с главами, нарраторами, серией
  8. Организует файлы в структурированную иерархию: result/<Буква>/<Автор>/<Автор - Название [Год]>/

Обработка ведётся параллельно (настраиваемый пул воркеров) с отображением прогресс-бара и поддержкой graceful shutdown.

Архитектура

Проект построен по принципам Clean Architecture:

cmd/
  genaudiobookinfo/
    main.go                  ← Composition Root (точка входа, DI)

internal/
  domain/
    audiobook.go             ← Сущности (entities)
    ports.go                 ← Интерфейсы-порты (FolderLister, MetadataExtractor, Presenter)

  usecase/
    scan_audiobooks.go       ← Бизнес-логика (Fan-Out / Fan-In, Worker Pool)

  infrastructure/
    folder_lister.go         ← Реализация FolderLister (файловая система)
    metadata_extractor.go    ← Реализация MetadataExtractor (dhowden/tag)
    audio_utils.go           ← Утилиты (определение аудиоформатов)

  presentation/
    console_presenter.go     ← Реализация Presenter (форматированный вывод)

Паттерны

Паттерн Где применяется
Clean Architecture Разделение на domain / usecase / infrastructure / presentation
Dependency Injection Конструкторы принимают интерфейсы, Composition Root в main.go
Ports & Adapters domain/ports.go — порты; infrastructure и presentation — адаптеры
Fan-Out / Fan-In usecase/scan_audiobooks.go — параллельное сканирование через каналы
Worker Pool Настраиваемое количество горутин-воркеров
Graceful Shutdown Обработка SIGINT/SIGTERM через context.Context

Сборка

go build -o genaudiobookinfo.exe ./cmd/genaudiobookinfo/

Использование

# Сканировать каталог с аудиокнигами
genaudiobookinfo.exe D:\Audiobooks

# Указать количество воркеров
genaudiobookinfo.exe -workers 8 D:\Audiobooks

# Установить таймаут
genaudiobookinfo.exe -timeout 60s D:\Audiobooks

Поддерживаемые форматы

MP3, M4A, M4B, OGG, OPUS, FLAC, WMA, AAC, WAV

Зависимости

  • dhowden/tag — чтение метаданных аудиофайлов