ABCat: OpenSource каталогизатор и загрузчик аудиокниг

в 7:18, , рубрики: .net, audiobook, opensource, Peer-to-Peer, rutracker, torrents, аудиокнига, каталогизатор, Софт, метки: , , , , ,

Аудиокниги я открыл для себя пять лет назад и с тех пор слушаю их практически ежедневно. Конечно, ничто не сравнится с печатной книгой, но в ежедневной круговерти на них просто не остается времени. Под аудиокниги я езжу в общественном транспорте, выполняю рутинную работу по дому, делаю ремонт — в общем практически всё, что не требует общения с кем-либо или концентрации внимания.
ABCat: OpenSource каталогизатор и загрузчик аудиокниг
Основным источником книг для меня стал rutracker.org (тогда еще torrents.ru).
Там достаточно строгая модерация, стандартизированное оформление, большое количество отзывов под каждой книгой. Но однажды я заметил что поиск интересных книг начинает отнимать всё больше и больше времени — раздачи сортируются не в порядке добавления, а в порядке обновления, из-за чего всё постоянно перемешивается и нужно пролистывать много страниц в поисках непрочитанных книг.

Отделять прочитанное от непрочитанного первое время позволял браузер (менял цвет ссылок, по которым я уже переходил), но после смены домена на rutracker цветовая дифференциация штанов раздач слетела, что точно не упростило процесс поиска.
Разделение книг по форумам тоже довольно неудобно — фантастику, например, разделили на русскую и зарубежную, но не по жанрам. В результате приходится на глаз выискивать любимую НФ среди фентези, S.T.A.L.K.E.Rа и др.

Знакомая проблема?

Лирическое отступление

Однажды я подумал, что написание утилиты для каталогизации аудиокниг займёт меньше времени, чем его теряется при постоянном поиске вручную. Приложение было написано и я пользовался им последние 4 года, понемногу дорабатывая.
После довольно неожиданной поддержки моего комментария к статье Спасем крупнейшую медиатеку в рунете. Вся база rutracker у Вас на компьютере стало понятно, что любителей аудиокниг не так уж и мало. Я решил привести в какое-то подобие порядка бессистемно писанный код, продумать архитектуру и расширяемость, выбросить всю проприетарщину, после чего выложить релиз с исходниками.

ABCat: OpenSource каталогизатор и загрузчик аудиокнигЭту яхту я решил назвать ABCat. Тут и AudioBooks Catalog, и ABC простота, и, конечно же, всеми любимые котики.
По совету Nashev статья не столько о разработке, сколько обзор функционала.

Приложение написано на .Net Framework, C#. Изначально интерфейс был построен на триальной версии DevExpress. Кушать она просила, но не очень настойчиво — за триальный месяц я успел устаканить GUI, а большего и не требовалось. DevExpress подкупал мощнейшей системой фильтрации списка, что очень сильно упрощало поиск.
Понятно, что для вывода в опенсорсный свет весь GUI пришлось полностью выбросить и написать новый, с WPF и MVVM, заодно поближе познакомиться и с тем, и с другим.
Что можно сказать о том, что получилось? Ну разве что «Графический интерфейс пользователя, 1 шт.». Штука эта сугубо утилитарная, написана с использованием открытых бесплатных компонентов, но свои задачи выполняет.
На момент снятия скриншотов не заметил, что забыл подписать Title у окна. На скринах его нет, в релизе есть.

ABCat: OpenSource каталогизатор и загрузчик аудиокниг

Если очень кратко — парсер забирает с сайта страницы с информацией о книгах. Из содержимого страниц вычисляются имя автора, жанр, длительность, чтец, описание, издатель, битрейт. Всё это добро складывается в локальную базу данных. При помощи группировок, фильтрации и сортировок пользователь находит нужную книгу и скачивает.

Больше подробностей о работе с программой
Доступные инструменты

Список книг

Обычный грид, с колонками атрибутов.

Группировка

Сейчас доступны 3 логики группировки:

  • По автору (авторы сгруппированы по первой букве полного имени)
  • Форум ► Автор
  • Форум ► Жанр

После выбора группы список автоматически фильтруется по её содержимому.

Фильтр

ABCat: OpenSource каталогизатор и загрузчик аудиокнигВ фильтре можно задать необходимые параметры поиска. Некоторые поля имеют вид выпадающего списка — там уже содержатся все возможные значения и это комбобокс с быстрым поиском. Все поля фильтра объединяются по «И», т.е. в список после фильтрации попадает только то, что соответствует сразу всем полям поиска. Ищется любое вхождение строки.
Поле «Длительность» довольно хитрое. Если ввести туда "> 10 часов", то в список попадут только те книги, в которых автор раздачи указал длительность воспроизведения более 10 часов.
Есть некоторые оговорки. Во-первых длительность задана не для всех раздач, во-вторых указывается она в совершенно свободной форме (например «11 часов 5 минут» или «11:05:00» или как-то еще), поэтому есть логика парсинга времени, понимающая большинство (около 99%) вариантов написания, принятых на сайте. Возможно не всё понимает правильно (пока не нашел такого), но в целом получается очень удобный инструмент.
И как раз благодаря этому парсеру в фильтр можно забивать время в любом удобном виде.

Чекбоксы:

  • Загружено. Если он не отмечен, то в список не попадают уже загруженные книги.
  • Скрыто. Фильтрует записи по признаку «скрытая» (сам признак задается в списке через контекстное меню).
  • Применить. Можно включать/отключать фильтрацию записей без потери содержимого фильтра.

Редактор автозамены

18 сравнительно правильных способов указать, что книгу написали братья Стругацкие

ABCat: OpenSource каталогизатор и загрузчик аудиокниг

При импорте данные проходят нормализацию. Для этого значения полей сверяются со списками автозамены и заменяются на правильный вариант.

ABCat: OpenSource каталогизатор и загрузчик аудиокниг

Для пополнения списка автозамены нужно выделить те записи, которые содержат различные варианты написания одного и того же параметра. Затем, через контекстное меню списка, отправляем записи в редактор автозамены.

ABCat: OpenSource каталогизатор и загрузчик аудиокниг

Выбираем нужный атрибут (в данном случае «Автор»), делаем двойной щелчок на том варианте, который нравится больше всего (если такого нет — просто вводим вручную), и нажимаем «Сохранить изменения».

ABCat: OpenSource каталогизатор и загрузчик аудиокниг

Дерево автозамены.

Сами списки хранятся в отдельном файле БД и можно взять уже чей-то готовый вариант или настроить свой. Имеется пока еще не реализованная идея импорта списка с объединением, а не заменой всех списков целиком.

Обновление базы происходит в два этапа:

  • Загрузка списка записей. Для этого скачиваются все страницы со списками раздач, из них вытаскивается базовая информация о книге — ссылка на полную страницу раздачи и название. Для форумов rutracker первая операция занимает около 20 минут — необходимо скачать и обработать около 400 страниц.
  • Загрузка полной информации о записях. По ссылкам, полученным на первом этапе, скачиваются страницы с полной информацией. Их гораздо больше — около 18 тысяч.

ABCat: OpenSource каталогизатор и загрузчик аудиокниг

Процесс обновления запускают два пункта в главном меню приложения (под пунктом «Каталог»).
Крайне рекомендуется скачать уже наполненную актуальную версию каталога (по ссылкам внизу), а после периодически запускать обновление.
Скорость скачивания полных страниц специально ограничена (не более 20 страниц в минуту). Просто для того, чтобы ребята с рутрекера не сильно обижались. Защита очень проста и при наличии исходников легко снимается, но тому, кто сможет её найти и отключить, для DDoS рутрекера и не нужен такой извращённый способ — достаточно пяти строк кода.

На рутрекере более-менее устоявшиеся стандарты оформления, поэтому становится возможным достать необходимую информацию из большинства раздач. Конечно, не обходится без альтернативно одарённых личностей.

ABCat: OpenSource каталогизатор и загрузчик аудиокниг

Но парсер надрессирован работать и с такими экземплярами. Хуже, когда раздача содержит неполную информацию, или она вообще не соответствует стандартам — некоторые записи разобрать не удается. Чтобы понять что же это за книга достаточно выполнить двойной щелчок по нужной строке, который открывает в браузере страницу раздачи.

Скачивание

Закачка выбранной книги запускается из контекстного меню списка.

Для скачивания потребуется логин и пароль пользователя рутрекера. Логины и пароли нигде не хранятся и никуда не отправляются (кроме, понятное дело, самого рутрекера). ABCat запускает uTorrent с параметрами командной строки и закачка начинается автоматически. Скачанная раздача попадает в папку библиотеки, путь к библиотеке задается при первом запуске программы. В библиотеке книги раскладываются по папкам в соответствии с автором.

ABCat: OpenSource каталогизатор и загрузчик аудиокниг

На закачку можно запустить одновременно сразу несколько книг, но здесь тоже есть ограничения — torrent-файлы скачиваются не чаще 6 раз в минуту.

Немного технических подробностей

Практически вся логика в ABCat реализована через плагины. Они делятся на три основные группы:

  • UI — Плагины для пользовательского интерфейса
  • Site — Плагины для операций с источниками контента и наполнения БД
  • Catalog — Плагины для операций с каталогом контекта

В плагинах можно реализовать поддержку других сайтов, другую логику нормализатора, группировки, фильтрации и т.д. Более подробно о плагинах читайте на главной странице проекта.
Страница релиза на Codeplex.
Прямая ссылка на релиз и базу данных каталога от 20.10.201
База данных кешированных страниц на Google Drive (осторожно, 200MB)
Ссылка на исходники.

Начало работы:

  1. Скачать релиз и базу данных каталога.
  2. Распаковать релиз в любую папку на диске.
  3. Скачать и распаковать базы данных каталога и кеша страниц туда, где будет удобно хранить 250+ мегабайт баз данных. У пользователя должны быть права на запись по этому пути.
  4. Запустить ABCat.exe. При первом запуске программа предложит задать основные настройки. Обязательно нужно указать пути к файлам базы данных, каталогу и uTorrent.exe.
  5. Начать пользоваться.

Внимание! ABCat написан на .Net Framework 4.5, который не поддерживается операционными системами ниже Windows Vista (т.е. на XP запустить не получится). В гугле попадаются ссылки на загадочные репаки .Net Framework 4.5 под XP, но не пробовал — не знаю.
Кроме того следует понимать, что программа написана только что, в свободное время, и никто кроме меня им не пользовался. Проект не является коммерческим. Спутников Mail.ru, тулбаров Yandex установить не предлагает, рекламу не показывает, донейтов не просит. Поэтому просьба отнестись с пониманием к возможным (и, нужно сказать, весьма вероятным) ошибкам в её работе. Обо всех ошибках просьба сообщать любым удобным способом (лучше всего вот сюда).

Перед скачиванием книги убедитесь в том, что автор релиза позаботился о соблюдении авторских прав на неё.
И не уходите с раздачи.

Автор: ICELedyanoj

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js