- PVSM.RU - https://www.pvsm.ru -
Аудиокниги я открыл для себя пять лет назад и с тех пор слушаю их практически ежедневно. Конечно, ничто не сравнится с печатной книгой, но в ежедневной круговерти на них просто не остается времени. Под аудиокниги я езжу в общественном транспорте, выполняю рутинную работу по дому, делаю ремонт — в общем практически всё, что не требует общения с кем-либо или концентрации внимания.
Основным источником книг для меня стал rutracker.org (тогда еще torrents.ru).
Там достаточно строгая модерация, стандартизированное оформление, большое количество отзывов под каждой книгой. Но однажды я заметил что поиск интересных книг начинает отнимать всё больше и больше времени — раздачи сортируются не в порядке добавления, а в порядке обновления, из-за чего всё постоянно перемешивается и нужно пролистывать много страниц в поисках непрочитанных книг.
Отделять прочитанное от непрочитанного первое время позволял браузер (менял цвет ссылок, по которым я уже переходил), но после смены домена на rutracker цветовая дифференциация штанов раздач слетела, что точно не упростило процесс поиска.
Разделение книг по форумам тоже довольно неудобно — фантастику, например, разделили на русскую и зарубежную, но не по жанрам. В результате приходится на глаз выискивать любимую НФ среди фентези, S.T.A.L.K.E.Rа и др.
Знакомая проблема?
Однажды я подумал, что написание утилиты для каталогизации аудиокниг займёт меньше времени, чем его теряется при постоянном поиске вручную. Приложение было написано и я пользовался им последние 4 года, понемногу дорабатывая.
После довольно неожиданной поддержки моего комментария [1] к статье Спасем крупнейшую медиатеку в рунете. Вся база rutracker у Вас на компьютере [2] стало понятно, что любителей аудиокниг не так уж и мало. Я решил привести в какое-то подобие порядка бессистемно писанный код, продумать архитектуру и расширяемость, выбросить всю проприетарщину, после чего выложить релиз с исходниками.
Эту яхту я решил назвать ABCat. Тут и AudioBooks Catalog, и ABC простота, и, конечно же, всеми любимые котики.
По совету Nashev [3] статья не столько о разработке, сколько обзор функционала.
Приложение написано на .Net Framework, C#. Изначально интерфейс был построен на триальной версии DevExpress. Кушать она просила, но не очень настойчиво — за триальный месяц я успел устаканить GUI, а большего и не требовалось. DevExpress подкупал мощнейшей системой фильтрации списка, что очень сильно упрощало поиск.
Понятно, что для вывода в опенсорсный свет весь GUI пришлось полностью выбросить и написать новый, с WPF и MVVM, заодно поближе познакомиться и с тем, и с другим.
Что можно сказать о том, что получилось? Ну разве что «Графический интерфейс пользователя, 1 шт.». Штука эта сугубо утилитарная, написана с использованием открытых бесплатных компонентов, но свои задачи выполняет.
На момент снятия скриншотов не заметил, что забыл подписать Title у окна. На скринах его нет, в релизе есть.
Если очень кратко — парсер забирает с сайта страницы с информацией о книгах. Из содержимого страниц вычисляются имя автора, жанр, длительность, чтец, описание, издатель, битрейт. Всё это добро складывается в локальную базу данных. При помощи группировок, фильтрации и сортировок пользователь находит нужную книгу и скачивает.
Обычный грид, с колонками атрибутов.
Сейчас доступны 3 логики группировки:
После выбора группы список автоматически фильтруется по её содержимому.
В фильтре можно задать необходимые параметры поиска. Некоторые поля имеют вид выпадающего списка — там уже содержатся все возможные значения и это комбобокс с быстрым поиском. Все поля фильтра объединяются по «И», т.е. в список после фильтрации попадает только то, что соответствует сразу всем полям поиска. Ищется любое вхождение строки.
Поле «Длительность» довольно хитрое. Если ввести туда "> 10 часов", то в список попадут только те книги, в которых автор раздачи указал длительность воспроизведения более 10 часов.
Есть некоторые оговорки. Во-первых длительность задана не для всех раздач, во-вторых указывается она в совершенно свободной форме (например «11 часов 5 минут» или «11:05:00» или как-то еще), поэтому есть логика парсинга времени, понимающая большинство (около 99%) вариантов написания, принятых на сайте. Возможно не всё понимает правильно (пока не нашел такого), но в целом получается очень удобный инструмент.
И как раз благодаря этому парсеру в фильтр можно забивать время в любом удобном виде.
Чекбоксы:
18 сравнительно правильных способов указать, что книгу написали братья Стругацкие
При импорте данные проходят нормализацию. Для этого значения полей сверяются со списками автозамены и заменяются на правильный вариант.
Для пополнения списка автозамены нужно выделить те записи, которые содержат различные варианты написания одного и того же параметра. Затем, через контекстное меню списка, отправляем записи в редактор автозамены.
Выбираем нужный атрибут (в данном случае «Автор»), делаем двойной щелчок на том варианте, который нравится больше всего (если такого нет — просто вводим вручную), и нажимаем «Сохранить изменения».
Дерево автозамены.
Сами списки хранятся в отдельном файле БД и можно взять уже чей-то готовый вариант или настроить свой. Имеется пока еще не реализованная идея импорта списка с объединением, а не заменой всех списков целиком.
Обновление базы происходит в два этапа:
Процесс обновления запускают два пункта в главном меню приложения (под пунктом «Каталог»).
Крайне рекомендуется скачать уже наполненную актуальную версию каталога (по ссылкам внизу), а после периодически запускать обновление.
Скорость скачивания полных страниц специально ограничена (не более 20 страниц в минуту). Просто для того, чтобы ребята с рутрекера не сильно обижались. Защита очень проста и при наличии исходников легко снимается, но тому, кто сможет её найти и отключить, для DDoS рутрекера и не нужен такой извращённый способ — достаточно пяти строк кода.
На рутрекере более-менее устоявшиеся стандарты оформления, поэтому становится возможным достать необходимую информацию из большинства раздач. Конечно, не обходится без альтернативно одарённых личностей.
Но парсер надрессирован работать и с такими экземплярами. Хуже, когда раздача содержит неполную информацию, или она вообще не соответствует стандартам — некоторые записи разобрать не удается. Чтобы понять что же это за книга достаточно выполнить двойной щелчок по нужной строке, который открывает в браузере страницу раздачи.
Закачка выбранной книги запускается из контекстного меню списка.
Для скачивания потребуется логин и пароль пользователя рутрекера. Логины и пароли нигде не хранятся и никуда не отправляются (кроме, понятное дело, самого рутрекера). ABCat запускает uTorrent с параметрами командной строки и закачка начинается автоматически. Скачанная раздача попадает в папку библиотеки, путь к библиотеке задается при первом запуске программы. В библиотеке книги раскладываются по папкам в соответствии с автором.
На закачку можно запустить одновременно сразу несколько книг, но здесь тоже есть ограничения — torrent-файлы скачиваются не чаще 6 раз в минуту.
Практически вся логика в ABCat реализована через плагины. Они делятся на три основные группы:
В плагинах можно реализовать поддержку других сайтов, другую логику нормализатора, группировки, фильтрации и т.д. Более подробно о плагинах читайте на главной странице проекта [4].
Страница релиза [5] на Codeplex.
Прямая ссылка на релиз [6] и базу данных каталога [7] от 20.10.201
База данных кешированных страниц [8] на Google Drive (осторожно, 200MB)
Ссылка на исходники [9].
Внимание! ABCat написан на .Net Framework 4.5, который не поддерживается операционными системами ниже Windows Vista (т.е. на XP запустить не получится). В гугле попадаются ссылки на загадочные репаки .Net Framework 4.5 под XP, но не пробовал — не знаю.
Кроме того следует понимать, что программа написана только что, в свободное время, и никто кроме меня им не пользовался. Проект не является коммерческим. Спутников Mail.ru, тулбаров Yandex установить не предлагает, рекламу не показывает, донейтов не просит. Поэтому просьба отнестись с пониманием к возможным (и, нужно сказать, весьма вероятным) ошибкам в её работе. Обо всех ошибках просьба сообщать любым удобным способом (лучше всего вот сюда [10]).
Перед скачиванием книги убедитесь в том, что автор релиза позаботился о соблюдении авторских прав на неё.
И не уходите с раздачи.
Автор: ICELedyanoj
Источник [11]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/net/46186
Ссылки в тексте:
[1] комментария: http://habrahabr.ru/post/195454/#comment_6781948
[2] Спасем крупнейшую медиатеку в рунете. Вся база rutracker у Вас на компьютере: http://habrahabr.ru/post/195454/
[3] Nashev: http://habrahabr.ru/users/nashev/
[4] главной странице проекта: https://abcat.codeplex.com/
[5] Страница релиза: https://abcat.codeplex.com/releases/view/113710
[6] релиз: https://abcat.codeplex.com/downloads/get/746592
[7] базу данных каталога: https://abcat.codeplex.com/downloads/get/746593
[8] База данных кешированных страниц: https://docs.google.com/file/d/0B3JC6pdojAnKV2VBMDV1WlktS2s/edit?usp=sharing
[9] исходники: https://abcat.codeplex.com/SourceControl/latest
[10] сюда: https://abcat.codeplex.com/workitem/list/basic
[11] Источник: http://habrahabr.ru/post/197528/
Нажмите здесь для печати.