На GT мы уже рассказывали об истории и принципах работы форматов электронных книг DjVu, FB2 и его «младшего брата» FB3. Сегодня мы решили поговорить о стандарте, который помогает эти книги распространять. Расскажем, зачем нужны электронные каталоги OPDS и как они «устроены».


/ Flickr / Gael Varoquaux / CC

Что такое OPDS?


OPDS (Open Publication Distribution System) — это формат синдикации для электронных публикаций. Его цель — предоставить пользователям приложений и устройств для чтения возможность просматривать и скачивать книги из электронных библиотек.

Проект начали разрабатывать в апреле 2009 года. В нем приняли участие несколько организаций и компаний, включая Internet Archive, Feedbooks, O'Reilly и Lexcycle, занимавшаяся разработкой ПО для чтения электронной литературы. В основу стандарта положили технологии HTTP (RFC2616) и Atom (RFC4287).

Atom — это другой формат синдикации, основанный на XML. Он позволяет описывать наборы веб-ресурсов: новостные ленты, анонсы статей в блоге и так далее. По своей сути он похож на RSS и решает те же задачи, однако не имеет ряда его недостатков, в частности, он лучше стандартизирован (взаимоотношения между разными версиями RSS довольно запутанны — они могут быть несовместимы друг с другом). На сегодняшний день Atom поддерживает компания Google во многих своих проектах, например в Feedburner.

Что «внутри» OPDS-каталога


OPDS-каталоги позаимствовали концепцию фидов (feeds) и записей (entries) у формата Atom. По сути, фиды представляют собой контейнеры для записей и делятся на две категории: навигационные (navigation feeds) и загрузочные (acquisition feeds). Первые задают иерархию для поиска контента, а вторые — содержат списки записей с информацией о доступных публикациях. В каждой записи имеются метаданные: формат электронной книги, заголовок, способ получения и др.

Записи в списке представляют собой ссылки, которые или направляют пользователя к другому фиду, или предоставляют ему возможность скачать публикацию. В Atom, на котором основывается OPDS, ссылка представляет собой тег с атрибутом rel (relationship). Это отношение обозначает способ приобретения и правила предоставления литературы. Поддерживаются следующие варианты:

  • открытый доступ без каких-либо ограничений;
  • книга приобретается за деньги (цена отражается в ссылке);
  • подписка на периодическое издание;
  • фрагмент публикации (например, первая глава книги) для ознакомления.

На официальном сайте проекта OPDS приводится следующий пример оформления такой ссылки:

<link rel="http://opds-spec.org/acquisition"
      type="video/mp4v-es"
      href="/content/free/4561.mp4"/>

Если одна публикация доступна в нескольких форматах, то они представляются группой ссылок в одной записи:

<link rel="http://opds-spec.org/acquisition/borrow"
      href="/content/borrow/4561.mobi"
      type="application/x-mobipocket-ebook"/>

<link rel="http://opds-spec.org/acquisition/borrow"
      href="/content/borrow/4561.epub"
      type="application/epub+zip"/>

Иногда ссылка не ведет к книге напрямую. Это происходит в том случае, если публикация запакована в zip-архив, где лежит несколько файлов (например, те же копии книги в разных форматах). Для описания «внутренностей» такого компонента используется элемент opds:indirectAcquisition, где типом является формат медиаэлемента:

<link type="application/zip" rel="http://opds-spec.org/acquisition/open-access" href="/item/1111/buy/">
  <opds:indirectAcquisition type="application/epub+zip" />
  <opds:indirectAcquisition type="application/pdf" />
  <opds:indirectAcquisition type="application/x-mobipocket-ebook" />
</link>

А вот пример оформления ссылки для ситуации, когда публикация является платной. Атрибут currencycode определяет валюту:

<link rel="http://opds-spec.org/acquisition/buy"
      href="/product/song1.mp3"
      type="audio/mpeg">
  <opds:price currencycode="USD">1.99</opds:price>
</link>

Где найти OPDS-каталоги и как с ними работать?


Одними из первых начали использовать OPDS издатели и библиотеки. Позже к сообществу присоединились разработчики приложений-читалок и продавцы электронной литературы. Чаще всего они и выступают создателями OPDS-каталогов. Список самых популярных каталогов можно найти на сайте со спецификацией OPDS.

Например, там есть Feedbooks, который распространяет более 3 млн электронных книг каждый месяц. В коллекции Internet Archive находится почти 2 млн публикаций, а O'Reilly Media предлагает тысячи экземпляров технической литературы. Также можно выделить каталоги The Pragmatic Programmers и Revues.org.

В целом же в сети можно найти множество каталогов OPDS на разных языках. При этом у пользователей есть возможность сформировать собственный каталог, чтобы организовать доступ к своей книжной библиотеке с любого устройства. Есть даже специальные программы, которые могут с этим помочь. Например, такую утилиту предлагает FBReader — она основана на коде books.fbreader.org.

Работу с OPDS поддерживают и другие ридеры, в частности, Cool Reader, Bluefire Reader, QuickReader, AlReader и OReader. Последний является адаптацией AlReader специально для ридеров ONYX-BOOX, которую доработал сам создатель оригинального приложения. Читалка получила единое интерфейсное меню и встроенный сканер метаданных, используемых системой. Еще в OReader была добавлена поддержка технологии SNOW Field, которая не работает в AlReader. SNOW Field улучшает «перерисовку» страницы на экране с электронными чернилами, снижая количество артефактов при перелистывании (и исключает частые «заливки» дисплея черным).

Отметим, что некоторые приложения, хотя и работают с OPDS, не поддерживают мультимедийный контент. Отличаются программы и по количеству поддерживаемых форматов электронной литературы.

В целом же для работы с OPDS нужно подключить интересующие сетевые библиотеки. О том, как это сделать на читалках ONYX, можно узнать в одном из материалов на нашем сайте. После можно начать просматривать публикации, ориентируясь по фидам и спискам записей.

Отметим, что пользователь может находить нужные книги не только с помощью фидов, но и с помощью функции поиска. Поиск OPDS основан на формате Open Search. В этом случае создается отдельный XML-файл с описанием параметров поиска — OpenSearch Description. Вот пример заполнения такого файла из репозитория Open Search на GitHub:

<?xml version="1.0" encoding="UTF-8"?>
<OpenSearchDescription xmlns="http://a9.com/-/spec/opensearch/1.1/">
  <ShortName>Web Search</ShortName>
  <Description>Use Example.com to search the Web.</Description>
  <Tags>example web</Tags>
  <Contact>admin@example.com</Contact>
  <Url type="application/rss+xml"
       template="http://example.com/?q={searchTerms}&pw={startPage?}&format=rss"/>
</OpenSearchDescription>

Обычно он называется OpenSearch.xml и лежит в корне каталога.


/ Flickr / Dave Collie / CC

Развитие экосистемы


На сегодняшний день выпущено несколько спецификаций OPDS: это версии OPDS Catalog 0.9 (2010 год), OPDS Catalog 1.0 (2010 год) и OPDS Catalog 1.1 (2011 год), которая является последней выпущенной на сегодняшний день. Однако существует «черновик» новой версии стандарта — 1.2. В нем должен появиться функционал, который позволит сдавать книги в аренду, то есть выдавать их на определенный промежуток времени. Дополнительно будут добавлены новые атрибуты для типов медиаконтента, элементы для обозначения рейтинга и числа скачиваний книги, а также профили OPDS для пользователей.

При этом сообщество, в лице продавцов электронной литературы, рабочей группы OPDS и других участников индустрии, работает над спецификацией ODL (Open Distribution Libraries) и механизмов аутентификации OPDS, чтобы сделать возможной «горизонтальную» интеграцию библиотек и коммерческих сервисов, продающих книги, друг с другом.

Формат ODL уже используется распространителями электронной литературы для пересылки информации о лицензиях библиотекам (например, в Feedbooks). Что же касается новой версии OPDS 1.2, то пока её спецификация существует только в формате черновика (draft), а дата полноценного выхода стандарта остается неизвестной.



P.S. Предлагаем вам тройку обзоров ридеров ONYX BOOX:?

Комментарии (26)


  1. avacha
    24.05.2018 12:28
    +1

    Вот оно что, Михалыч…
    В рунете в основном OPDS-каталоги более других библиотек используются. Но мы умеем читать между строк.


  1. wtigga
    24.05.2018 15:37
    +1

    Я думал, нам расскажут, как поднять свой…




  1. Gryphon88
    24.05.2018 16:08
    +1

    Электронные книги… в аренду… в стандарте… Что-то сильно пошло не так.


    1. KatbertW
      24.05.2018 18:03
      +1

      А что, могло бы быть удобно, чтобы понять хотите вы это читать или не очень. Как в книжный полистать литературу сходил. А может в будущем будут VR-библиотеки, тогда фраза "сдал электронную книгу в аренду" примет иной смысл


    1. iig
      24.05.2018 18:03

      Так OPDS != Даром.


      1. Gryphon88
        24.05.2018 18:23
        -1

        Я не против заплатить. меня формат сильно расстраивает. Во-первых, аренда нематериального объекта меня смущает с философской точки зрения, во-вторых, любые отображаемые на время (а не на количество страниц, например) данные легко украсть, связку AutoIt+Tesseract никто не отменял, в-третьих, я даю доступ на изменение или удаление файлов на моём устройстве третьему лицу, что совсем грустно, как если бы взносы по кредиту у меня молча вытаскивали из кармана, не дожидаясь, пока я переведу в банк.
        А для полистать обычно хватает оглавления, предисловия и первой главы, которые можно давать бесплатно.


        1. iig
          24.05.2018 20:50

          Drm key внутри ssl сертифіката, сертификат валидный неделю, время на устройстве синхронизируется автоматически. Взломать возможно все, да, но пока взломают — книга перестанет быть бестселлером.


          1. slonopotamus
            24.05.2018 21:27

            Сфотографировать/поскриншотить экран устройства? Чего тут взламывать-то?


            1. eoffsock
              24.05.2018 22:54
              +1

              А потом возиться с распознаванием. И сноски все руками проставлять. Неудобно все-таки.


              1. slonopotamus
                24.05.2018 23:32
                +1

                1. В свое время множество книг распространялось в формате djvu (сканы физических книг). Ничего, вполне было юзабельно.
                2. Думаю в распознавании текста со скриешотов проблем не будет

                Это я всё к тому что стоимость выковыривания текста из выданного юзеру файла крайне мала. Захочет чуть более заморочиться — и в цифровом виде выдернет.


                1. eoffsock
                  25.05.2018 07:42

                  Не спорю, если хочется — всегда есть пути обхода. Зависит во многом от того, насколько хочется почитать конкретную книгу.


                1. iig
                  25.05.2018 11:13

                  "стоимость выковыривания текста из выданного юзеру файла крайне мала"
                  Смотря во сколько юзер ценит свое время.


                  1. vikarti
                    26.05.2018 16:11

                    Достаточно одного юзера (ладно — двух — второй на вычитку). При этом юзеры могут считать свои действия — работой на благо общества / борьбой против копирастии и оценивать траты времени исходя из этого.
                    Имхо, вероятность данной ситуации — растет тем больше, чем больше проблем от DRM.

                    Пример:
                    — Kotlin in Action — англоязычное издание. Можно у Manning купить EPUB+PDF который будет читаться везде. за 35.99 USD (~2200 рублей). можно и скачать пиратку конечно.
                    — Kotlin в действии (перевод). Можно купить у Litres. За 719 рублей. Только вот читать — только в приложении литреса. А еще можно скачать более менее нормальную пиратскую PDF (похоже что скан с печатной).
                    (да, в обоих случаях можно и печатную купить конечно)
                    При условии что ЕЩЕ одна читалка не нужна а библиотека ведется в Calibre — выбор, в каком случае будет покупка а в каком — ее не будет — очевиден. Вот что стоило литресу в данном случае, раз уж хочется позащищать — дать нормальный pdf (раз уж epub не смогли отчего то) пусть с подписями на каждой странице 'продано user@domain.com' и exlibris'ом (+тоже самое скрытыми метками)). Или это не литреса идея а дмк-пресс была?


          1. Gryphon88
            25.05.2018 00:25
            +1

            Это ИБД в худших традициях копирастов. Не хочешь, чтоб фильм\книгу своровали — не выпускай электронную версию в течение пары недель после начала продаж бумаги или проката (как, собственно, и делают). Пусть пираты со сканером и экранками мучаются, результат потребует усилий и скорее всего будет хуже оригинала. А с электронным экземпляром всё очень просто, slonopotamus правильно говорит.
            Допустим, что книгу мы читаем в браузере, т.е. файла у нас вообще нет. Для простоты примем, что книга — обычная художественная (один шрифт, без рисунков, черным по белому), что читаем на компьютере, и что перелистывание идёт одной клавишей, например, курсорной вправо.
            Тогда пишем ahk-скрипт, который каждую секунду (если нет ограничения на скорость листания) отправляет «вправо», а затем «print screen», а потом из буфера пишет в файл. Контроль нажатия клавиш? Запускаем screen capture в том же vlc, только после этого открываем книгу и запускаем скрипт-листун, видео потом элементарно режется на уникальные кадры. На первой картинке распознаём шрифт, а дальше хоть тупой кросс-корреляцией. Сноски расставляются другим скриптом, секундное дело, если оформлены одинаково. На выходе — оффлайновый без-DRMный документ не худшего качества, чем исходный продукт. Если книга научная, техническая или детская, то придётся разгребать руками, но недолго, часа 4-6 размечать на фото рисунки, вставки кода и таблицы.


            1. iig
              25.05.2018 00:47

              Допустим, книга читается на специализированном устройстве для чтения типа Kindle. С закрытой ОС. Удачи со скриптами ;)


              1. Gryphon88
                25.05.2018 00:56
                +1

                И снова здравствуйте! :) Малинка, подпаиваемся к кнопке перелистывания или карандаш через кривошип для сенсорного экрана (да, такую фигню уже делали из Лего, и даже был перевод на ГТ), USB-камера, дальше по предыдущему пути. Если фигово поставили свет, то вместо кросс-корреляции используем Tesseract. Если совсем по хардкору, то можно сесть на шлейф экрана. И это я не говорю, что доля «специализированных устройств с закрытой ОС» очень мала, почти всегда есть как минимум SDK, а во внутреннее кольцо нам лезть и не надо.


    1. Mattteo
      25.05.2018 14:20

      В Германии в обычной городской библиотеке уже можно брать «в аренду» электронные книги. Даже очередь на них есть, потому как количество электронных копий ограничено. Так что вполне себе рабочий вариант.


      1. Gryphon88
        25.05.2018 15:59

        количество электронных копий ограничено

        Это как это?


        1. vikarti
          26.05.2018 16:21

          Adobe Content Server и это умеет.
          Кстати Amazon'овский DRM ТОЖЕ так может (некоторые книги можно арендовать, самое смешное что при этом стандартные средства снятия DRM с книг Kindle Store говорят что НЕ будут работать с арендованной книгой, купите сначала)


          1. Gryphon88
            26.05.2018 20:16

            Adobe Content Server и это умеет.
            Электронные документы — ещё один шаг к платоновскому миру чистых идей. Но давайте потратим деньги, сделаем неудобно пользователю, но притащим отлаженные за века бизнес-процессы и заодно продадим некоторые вещи по несколько раз. Именно это я и называю «что-то пошло не так».


  1. JediPhilosopher
    24.05.2018 22:53
    +2

    Пытались использовать OPDS как интерфейс для нашего книжного магазина. Но к сожалению столкнулись с паркой критических подводных камней.

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

    Поддержки покупок никакой тоже нет (ну в целом ничего необычного, это все-таки каталог а не магазин), у товара можно указать цену — но это чисто строчка которая будет рисоваться в списке товаров, и по клику на такой товар клиента будет просто редиректить на заданный урл по хттп, без какой-то дальнейшей связи с OPDS. Т.е. платные книги по сути — просто рекламный баннер ведущий куда-то там во внешнюю систему.

    Библиотек для интеграции OPDS каталога в свой код (именно для интеграции с существующим решением, standalone-каталогов то куча разных) я никаких найти не смог, но с другой стороны формат и спецификация у него довольно просты, так что свой велосипед накидать можно быстро.

    В общем как доступ к файлопомойке с книгами он норм, как вариант для коммерции не годится.


    1. leotsarev
      25.05.2018 08:32

      Хм, fbreader подключен к opds каталогу литреса. Как у них работает? Пропиеритарные расширения?


      1. JediPhilosopher
        25.05.2018 12:34

        А как именно он подключен? С логином-паролем и доступом к купленным книгам?

        Я его в свое время проверял, у меня авторизация не работала в нем. Правда было это больше года назад, может что и поменялось с тех пор.

        Ну и да, учитывая как литрес там воевал в свое время с читалками, спамя жалобами в маркеты пока авторы приложений не начинали с ним сотрудничать, я не удивлюсь что там и есть какие-то костыли специально для него.


  1. 3aBulon
    26.05.2018 11:54

    сейчас есть бот в телеграме. пишешь чего хочешь(автора, название) получаешь список ну и потом ссылку и файл. наверное то же самое, только бот