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).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:
- container.xml of EPUB Open Container Format (OCF) 3.0
- EPUB Publications 3.0
- EPUB Navigation Documents of EPUB Content Documents 3.0
- EPUB 3 Fixed-Layout Documents
License
This library is distributed under the term of the MIT Licence. See MIT-LICENSE file for more info.