EPUB Parser

EPUB Parser gem parses EPUB 3 book loosely.

Installation

gem install epub-parser

Usage

As command-line tools

epubinfo

epubinfo tool extracts and shows the metadata of specified EPUB book.

See Epubinfo.

epub-open

epub-open tool provides interactive shell(IRB) which helps you research about EPUB book.

See EpubOpen.

As a library

Use EPUB::Parser.parse at first:

require 'epub/parser'

book = EPUB::Parser.parse('/path/to/book.epub')

This book object can yield page by spine's order(spine defines the order to read that the author determines):

book.each_page_on_spine do |page|
  # do something...
end

page above is an EPUB::Publication::Package::Manifest::Item object and you can call #href to see where is the page file:

book.each_page_on_spine do |page|
  file = page.href # => path/to/page/in/zip/archive
  html = Zip::Archive.open('/path/to/book.epub') {|zip|
    zip.fopen(file.to_s) {|file| file.read}
  }
end

And Item provides syntax suger #read for above:

html = page.read
doc = Nokogiri.HTML(html)
# do something with Nokogiri as always

For several utilities of Item, see Item page.

By the way, although book above is a EPUB::Book object, all features are provided by EPUB module. Therefore YourBook class can include the features of EPUB:

require 'epub'

class YourBook < ActiveRecord::Base
    include EPUB::Book::Features
end

book = EPUB::Parser.parse(
  'uploaded-book.epub',
  :class => YourBook # *************** pass YourBook class
)
book.instance_of? YourBook # => true
book.required = 'value for required field'
book.save!
book.each_page_on_spine do |epage|
  page = YouBookPage.create(
    :some_attr    => 'some attr',
    :content      => epage.read,
    :another_attr => 'another attr'
  )
  book.pages << page
end

You are also able to find YourBook object for the first:

book = YourBook.find params[:id]
ret = EPUB::Parser.parse(
  'uploaded-book.epub',
  :book => book # ******************* pass your book instance
) # => book
ret == book # => true; this API is not good I feel... Welcome suggestion!
# do something with your book

More documentations are avaiable in:

Requirements

  • Ruby 1.9.3 or later
  • C compiler to compile Zip/Ruby and Nokogiri

Note

This library is still in work. Only a few features are implemented and APIs might be changed in the future. Note that.

Currently implemented:

License

This library is distributed under the term of the MIT Licence. See MIT-LICENSE file for more info.