32 lines
1.0 KiB
Ruby
32 lines
1.0 KiB
Ruby
require 'nokogiri'
|
|
require 'models/fb2_book'
|
|
require 'models/fb2_section'
|
|
|
|
class Fb2
|
|
def self.parse data
|
|
xml = Nokogiri::XML(data)
|
|
|
|
# building book
|
|
description = xml.css('description')
|
|
book = Fb2Book.new
|
|
book.title = description.css('title-info > book-title').text
|
|
book.author_first_name = description.css('title-info > author > first-name').text
|
|
book.author_last_name = description.css('title-info > author > last-name').text
|
|
book.annotation = description.css('title-info > annotation > p').text
|
|
book.genre = description.css('title-info > genre').text
|
|
book.lang = description.css('title-info > lang').text
|
|
book.keywords = description.css('title-info > keywords').text.split(', ')
|
|
book.sections = []
|
|
|
|
# building sections
|
|
xml.css('body > section').each do |s|
|
|
section = Fb2Section.new
|
|
section.title = s.css('title > p').text
|
|
section.contents = s.css('p').map{ |e| e.text }.drop(1)
|
|
book.sections << section
|
|
end
|
|
|
|
book
|
|
end
|
|
end
|