master
AudioBook Catalyst
AudioBook Catalyst — утилита для автоматической обработки аудиокниг: поиск метаданных на RuTracker, формирование глав, скачивание обложек, сохранение metadata.json и организация папок библиотеки.
Возможности
- Сканирование директории с аудиокнигами (MP3).
- Поиск и парсинг метаданных со страниц RuTracker.
- Извлечение полей: Title, Subtitle, Authors, Narrators, Series, Genres, Year, Publisher, Description, Chapters, Tags.
- Корректный парсинг заголовка из
<span style="font-size: 24px">и подзаголовка из<title>без хвостовRuTracker.org. - Скачивание обложки и сохранение
cover.jpg/png. - Автоматическое создание глав по MP3-файлам с примерной длительностью, стартами/финишами.
- Переименование папки книги по подзаголовку и перенос в организованную библиотеку:
organized/<Буква>/<Автор>/<Книга>. - TUI-интерфейс на базе tview.
- Логи в TUI и файл.
Структура проекта
internal/
application/
usecases/ # Процессы: обработка аудиокниг
domain/
entities/ # Сущности: AudioBook, AudioBookMetadata, Torrent, ...
repositories/ # Интерфейсы репозиториев (FS, RuTracker, Logger)
services/ # Бизнес-логика: AudioBookService, MetadataService
infrastructure/
config/ # Репозиторий конфигурации (YAML)
filesystem/ # Репозиторий файловой системы
logging/ # Логирование
rutracker/ # Клиент RuTracker, парсинг страниц
presentation/
tui/ # TUI интерфейс
cmd/ # Точка входа приложения
README.md # Это описание
Makefile # Команды сборки/тестов
config.yaml(.example) # Конфигурация
Установка
Требуется Go 1.21+.
# Клонируйте репозиторий и перейдите в папку проекта
# Установите зависимости
make deps
# Сборка
make build
# Запуск
make run
Если не используете Makefile, можно собрать так:
$env:GOOS='windows'; $env:GOARCH='amd64'; $env:CGO_ENABLED='1'; go build -o audio-catalyst.exe ./cmd
./audio-catalyst.exe
Конфигурация
Файл config.yaml:
scanner:
source_directory: "./audiobooks"
target_directory: "./organized"
rutracker:
base_url: "https://rutracker.org/forum/tracker.php"
user_agent: "Mozilla/5.0 ..."
request_delay: 2000
username: "<login>"
password: "<password>"
processing:
parallel_workers: 3
timeout_seconds: 30
retry_attempts: 3
output:
log_level: "debug"
progress_bar: true
log_to_file: true
log_file_name: "audio-catalyst.log"
log_max_size_mb: 2
scanner.source_directory— директория с исходными аудиокнигами.scanner.target_directory— корень организованной библиотеки.
Запуск
- Запустите приложение
audio-catalyst.exe. - В TUI выберите «Начать обработку аудиокниг».
Процесс:
- Сканирование
source_directory— поиск папок, где есть MP3. - Поиск на RuTracker по имени папки, очистка названия.
- Загрузка страницы темы, парсинг метаданных.
- Формирование
metadata.jsonи загрузкаcover.*. - Переименование папки по Subtitle (без хвостов
RuTracker.org). - Перенос в
target_directory/Буква/Автор/.
Если книга не найдена на RuTracker — папка пропускается.
Правила парсинга
- Title: из
<span style="font-size: 24px">, затем нормализация (снятие префиксов автора, хвостов в скобках). - Subtitle: полный
<title>, отрезаются окончания типа:: RuTracker.org. - Series: ищется в post-b «Серия», а также по шаблонам «Цикл «…»».
- Tags: текст первого подходящего
viewforum.php(снятие префикса[Аудио]). - Description: текст после «Описание» до
post-brили следующего «post-b»; декодирование HTML-сущностей. - Cover:
<a:has(img)>,<var.postImg title=...>,img data-*|src,og:image.
Организация библиотеки
После сохранения метаданных и обложки:
- Папка переименовывается в Subtitle.
- Переносится в
target_directory/<Первая буква автора>/<Фамилия Имя>/<Subtitle>. - Имена очищаются от недопустимых для Windows символов и хвостов
RuTracker.org.
Тестирование
make test
Покрыты тестами:
- domain/services: главы, очистка титулов, парсинг заголовков/серии/тегов.
- infrastructure/rutracker: нормализация URL.
- infrastructure/filesystem: поиск MP3, переименование и организация папок.
- application/usecases: сквозные сценарии (пропуск, успешный путь).
Покрытие:
make coverage
start ./coverage.html
Разработка
Основные команды:
make deps— зависимостиmake build— сборкаmake run— запускmake test— тестыmake coverage— покрытиеmake fmt/make vet/make lint
Архитектура
- Clean Architecture: слои domain/application/infrastructure/presentation.
- Взаимодействие через интерфейсы репозиториев.
- Use case
ProcessAudioBooksUseCaseоркестрирует процесс:- ScanDirectory → RuTracker.Login → Search → GetTopicMetadata → CreateChapters → DownloadCover → SaveMetadata → Rename → Organize.
Известные ограничения
- Оценка длительности глав приблизительная (по размеру файла).
- Возможны изменения разметки RuTracker — парсер может потребовать корректировок.
Лицензия
MIT
Description
AudioBook Catalyst — утилита для автоматической обработки аудиокниг: поиск метаданных на RuTracker, формирование глав, скачивание обложек, сохранение metadata.json и организация папок библиотеки.
Languages
Go
96.1%
Makefile
3.9%