Собственная онлайн библиотека

Safoyeth 26 Ноя 2016

Давным-давно, когда ещё правообладатели не были такими, а основным форматов электронных книг был txt, любую книгу можно было найти столь же легко, как сегодня статью в википедии. Но времена (и нравы!) меняются, библиотеки рождаются и умирают, а хранить свои электронные книги (не так важно как именно они получены, правда?) нужно. О том, как сделать хранение книг максимально удобным (на мой взгляд) и будет эта статья.

Исторически я хранил книги просто в папках. некоторые были рассортированы по авторам, некоторые по сериям, некоторые не имели вообще никакой сортировки. Я книгоман, поэтому прочитанные книги никогда не удаляю, более того, иногда мне нравится их перечитывать. Как несложно догадаться, такой подход требует хоть какой-то классификации, особенно когда количество книг плавно переходит из десятков в сотни. Опять же, с развитием технологии, формат txt сменился на куда более удобные fb2, epub и Бог знает какие ещё (умолчу про банальности типа pdf и djvu). Хранить книги становилось всё сложнее и сложнее, и ещё сложнее было их классифицировать. Проблема переустановки системы тоже играла свою роль и за десятилетие (даже больше) активного чтения электронных книг, библиотека моя была много раз уничтожена и начиналась заново. Однако теперь всё изменилось!

Моё погружение в Linux (а позже ещё глубже в *nix) и вообще в opensource открыло массу удивительных программ, технологий, методов. Одним из таких бриллиантов и стала Calibre. Calibre - это кроссплатформенная система управления книгами, проще говоря — электронная библиотека. Она написана на python, чему я также несказанно рад, и умеет ой как много всего. Основные её возможности хорошо расписаны и на официальном сайте, и в википедии. Особенно приятны — конвертация файлов и возможность поднимать контент-сервер, то есть открывать доступ к книгам на компьютере через интернет. К сожалению, для того, чтобы иметь такой доступ, необходим белый статический ip(либо белый динамический ip, но с чем-то типа DynDNS), а компьютер должен быть всегда включен и Calibre тоже должна быть всегда включена. Это не очень удобно, кроме того, не сильно может защитить библиотеку от внезапного исчезновения в случае смерти системы.

С появлением облаков проблема переносимости и сохраняемости данных стоит уже не так остро. Благо, которое дают Яндекс.Диск или Dropbox сложно недооценить. Есть ещё много всяких облаков, но эти два мои самые любимые, поэтому их и привёл. Так вот, с появлением облаков и в особенности с появлением клиентов под Windows/Mac/Linux жить стало проще. Теперь библиотека Calibre просто лежала в облаке, смерть системы никак особо не могла на неё повлиять, нужно было просто поставить Calibre на новую систему и подцепить библиотеку из облака.

Читалки тоже не стояли на месте и становились всё удобнее. Если раньше приходилось подключать устройство к компьютеру и вручную перебрасывать книги, то со временем они научились (в частности это была просто киллер-фича iBooks) простым нажатием по ссылке типа «открыть название книги.epub» импортировать книгу в себя. А с появлением всяких облачных клиентов под iOS/Android/Windows Phone жизнь стала ещё проще. Теперь книгу можно было просто кинуть в облако и открыть в читалке. Во многом из-за этого, а также из-за собственной лени, Calibre отошла на задний план. Книги просто кидались как попало в облака (причём в разные), откуда скачивались на устройства и успешно читались.

Однако как и история, всё движется по кругу. В какой-то момент мне захотелось всё систематизировать, классифицировать и превратить во что-то стройное и красивое. Подтолкнула меня к этому абсолютно роскошная программа Bookviser. Не так давно я обзавёлся телефоном Nokia Lumia c операционной системой Windows 8 Mobile (ну или как там её) на борту, и на мой взгляд — это просто самое лучшее приложение из всех, что есть под эту систему. Смысл его в том, что есть читалка, весьма удобная надо сказать, и есть нечто похожее на облако, в котором хранятся книги. Есть также клиент под Windows, который позволяет добавлять книги с компьютера. Читающиеся книги синхронизируются с облаком и можно, к примеру, начать читать одну книгу дома на компьютере, а продолжить где-то с телефона, не пролистывая до того места, где закончил читать дома, и так даже на нескольких устройствах (так по крайней мере задумано). Это всё очень круто, но есть минусы:

  • В данный момент читалка только под Windows
  • Не очень понятно, какой объём облака, могу ли я там хранить 5-10 гб книг?
  • Если вдруг приложение умрёт, то что будет с моей библиотекой?

Да, сейчас вроде бы как пилится читалка под Android (к слову, разработчики наши люди, им можно писать вконтакт), да и умирать приложение пока не собирается, более того, повторюсь, как по мне, так это реально лучшее приложение под Windows, уж во всяком случае среди читалок (прости, fbreader, но под Windows ты не торт!). Основная же причина, по которой меня не устроил этот вариант - не моё. А хочется своего. Поэтому было решено своё и запилить.

Поскольку пользоваться айфонами становится всё невозможней, я решил вернуться к Android. С удивлением узнал, что старая-добрая fbreader для Android не просто жива, но и стала значительно удобней, чем раньше. Именно ковыряясь в настройках fbreader я и обнаружил искомое - opds-каталоги. Оказалось, что и Bookviser тоже умеет с ними работать! Поскольку я планирую в обозримом будущем пользоваться именно этими устройствами, каждое из которых поддерживает opds, сам формат успешно развивается, а читалки всё активнее начинают его поддерживать, решение нашлось само собой.

Благодаря несложным манипуляциям я имею следующую архитектуру (даже не побоюсь этого слова) библиотеки:

  • Книги в форматах fb2 и/или epub хранятся на Яндекс.Диске (в силу того, что на нём у меня много свободного места).
  • Яндекс.Диск синхронизируется с тройкой компьютеров, которыми я пользуюсь постоянно.
  • На каждом компьютере стоит Calibre, управляющая библиотекой, конвертирующая форматы etc.
  • На каждом компьютере стоит Calibre2opds, с помощью которой создаются opds-каталоги.
  • К каждому компьютеру подключена папка на сервере (safoyeth.com/library), в которую и сбрасывается opds.

Таким образом, я имею библиотеку на Яндекс.Диске, синхронизированную с несколькими (хоть с тысячей) компьютерами, Calibre, которая рулит всеми процессами по классификации и конвертации книг, Calibre2opds, которая преобразует библиотеку Calibre в каталог opds и серверную часть, которая представляет собой HTML и OPDS-каталоги. HTML-каталог доступен по адресу: http://safoyeth.com/library/catalog/index.html. OPDS — http://safoyeth.com/library/catalog/index.xml.

В данный момент библиотека работает в тестовом режиме, она пустая (не считая десятка книг), но она работает так, как я хочу и легко подключается и к fbreader и к bookviser. Определённые минусы, конечно присутствуют, в частности, добавление книг происходит в несколько этапов:

  1. Сначала добавляется книга в Calibre. На данном этапе книги доступны локально или с помощью клиентов Яндекс.Диска.
  2. Затем нужно заново сгенерировать каталоги в Calibre2opds.
  3. Вся база перезаливается на сервер.

Это достаточно долго, но я и не планирую делать много обновлений. Я хочу собрать и рассортировать несколько сотен, может быть тысяч книг, после чего они появятся в opds-каталоге не сервере, но я не планирую часто обновлять его, по крайней мере пока не планирую. Возможно, стоит написать скрипты, которые смогут ещё больше автоматизировать процесс, но сейчас я смотрю в сторону SOPDS. Я не использую выделенный сервер за ненадобностью, но мне нравится Django, я люблю python, поэтому если мне понравится SOPDS, то я обязательно на неё перейду. Пока что меня устраивает те три шага, которые я делаю для того, чтобы моя библиотека была во-первых, библиотекой, а во-вторых, доступной где угодно библиотекой! А написать скрипты — дело немногих минут.

Ниже я дам инструкции как создать аналогичную библиотеку самостоятельно. Нам понадобятся (все ссылки на скачивания будут внизу!):

  1. Облако (любое, имеющее клиент под вашу операционную систему), если вы хотите, чтобы книги «случайно» не потерялись.
  2. Calibre в качестве библиотеки.
  3. Calibre2opds для создания HTML и/или OPDS-каталогов.
  4. Папка на сервере хостера с достаточным количеством места.
  5. ftp-подключение к этой папке

Зная, что и как делать, библиотека поднимается в несколько простых шагов за несколько минут. Для упрощения, давайте представим, что у вас есть установленный клиент облака (пусть будет Dropbox) в директории C:\Users\VasyaPupkin\Dropbox или /usr/home/vasyapupkin/dropbox/ и есть папка books в корне облака, в которой лежат книги.

  1. Устанавливаем Calibre. Это делается элементарно. Программа имеет поддержку русского языка.
  2. Указываем путь к папке с книгами - C:\Users\VasyaPupkin\Dropbox\books или /usr/home/vasyapupkin/dropbox/books/.
  3. Сортируем, преобразовываем, в общем, делаем с книгами то, что хотим.
  4. Устанавливаем Calibre2opds. Это может быть не так банально, в том плане, что нужна Java. И даже с установленной жабой могут возникнуть затруднения, например у меня под Windows она никак не хотела устанавливаться в Program Files, орала, что у меня нет прав. Java она такая Java, поэтому тут могу только посоветовать писать разрабам Calibre2opds.
  5. Запускаем Calibre2opds. Поддержка русского языка, она как бы есть, но её в общем-то и нет. Впрочем, самое главное перевели.
  6. Указываем папку базы данных - ту же, что и для Calibre - C:\Users\VasyaPupkin\Dropbox\books или /usr/home/vasyapupkin/dropbox/books/.
  7. На первой вкладке ставим галку «Копировать каталог в папку базы данных», обзываем папку каталога как хотим — по умолчанию _catalog, у меня — catalog. Остальное по желанию.
  8. На второй вкладке («Опции генерации каталога») если мы НЕ хотим создавать HTML каталоги, то ставим галку «Не генерировать HTML каталоги». Остальное вполне понятно и каждым сможет выбрать для себя.
  9. Всё остальное — на любителя, выбирайте кто, что хочет.
  10. В конце нажимаем на кнопку «Сгенерировать каталоги»
  11. На сервере, там где считаете нужным, создаёте папку. У меня она прямо в корне и называется library
  12. Копируем всё содержимое папки с книгами C:\Users\VasyaPupkin\Dropbox\books или /usr/home/vasyapupkin/dropbox/books/ в папку на сервер.
  13. HTML-каталог (если создавали) будет лежать http://domain.ru/путь/к/папке/название_папки_каталога/index.html, у меня это http://safoyeth.com/library/catalog/index.html
  14. OPDS-каталог (если создавали) будет лежать http://domain.ru/путь/к/папке/название_папки_каталога/index.xml, у меня это http://safoyeth.com/library/catalog/index.xml
  15. Для того, чтобы подключить его к читалке (на примере fbreader): идём в настройки → сетевая библиотека → добавить каталог (в самом низу) → и дальше пишем путь к xml-файлу.
  16. Читаем!!!

Ссылки

Calibre
Calibre2opds
Java (на всякий случай)

Ну и милости прошу ко мне:
HTML-каталог
OPDS-каталог

Увы, но от calibre2opds пришлось отказаться. Подробности будут позже!

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.




Комментарии (5) на Собственная онлайн библиотека

  1. Андрей:

    Здравствуйте! Жду подробностей! Чем закончились ваши опыты? Очень интересно!

    • Добрый день!

      Если коротко, то от calibre2opds пришлось отказаться по двум причинам: 1) opds каталог, который создаётся, представляет собой фарш из статических html-файликов. Для библиотеки в 10-20 книг это приемлемо, но уже при 100 книгах получается ~300-400 файлов, которые каждый раз перезаливать на сервер мягко говоря не очень. Более того, поскольку всё идёт в статику сами html-файлы становятся с каждым разом всё больше и больше, что рано или поздно скажется на скорости работы библиотеки. 2) и главное на самом деле. По какой-то чудной причине разработчики calibre2opds сделали не самую адекватную вещь — чтобы перейти по ссылке «Начинающиеся с А» к примеру, система должна найти файл, название которого «А.html» (не помню, как точно называется файл, но это не так важно). Так вот, буква «А» в названии — кириллическая! А Apache, да и как я понимаю остальные сервера не очень дружат с юникодом. То есть каталог по факту просто не работоспособен на сервере, если в названиях книг/авторов/серий есть символы юникода.

      Поэтому пришлось выбрать альтернативу — COPS. К ней тоже есть пара замечаний (в частности поиск работает только если использовать латинские буквы в названиях), но пока она меня устраивает, да и времени совсем сейчас нет что-то пилить. Вы можете увидеть пример работы COPS у меня — https://safoyeth.com/library/. Скайп я перестал использовать некоторое время назад.

      • Андрей:

        Под установку COPS нужен VDS или можно на обычный хостинг установить?

        • На самый обычный с минимальными требованиями — PHP >= 5.3, поддержка sqlite, json, gd, intl и libxml. Вроде бы это всё. У меня она без проблем встала на самый обычный хостинг от nic.ru. Поддержка этих модулей либо включена по умолчанию на хостинге, либо включается из админки. Можете поэкспериментировать с COPS локально, например с помощью XAMPP.

  2. Андрей:

    По возможности свяжитесь со мной в скайпе: abbat24.

Добавить комментарий

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам: