Sha256: 9c888ae011ff7966d4a0889bdb6d8adc52186df47367f0e77bc5dca272057c03

Contents?: true

Size: 1.27 KB

Versions: 1

Compression:

Stored size: 1.27 KB

Contents

require 'nokogiri'
module Douban
  class Parser
    #解析单本书籍信息
    def self.parse_book(book_xml)
      xml_doc = Nokogiri::XML(book_xml)
      book_node = xml_doc.css('entry').first
      return nil if book_node.blank?
      parse_single_book(book_node)
    end
    #解析多本书籍信息
    def self.parse_books(book_xml)
      xml_doc = Nokogiri::XML(book_xml)
      books = Array.new
      books_node = xml_doc.css('entry')
      books_node.each do |book_node|
        books.push parse_single_book(book_node)
      end
      books
    end

    private
    def self.parse_single_book(book_node)
      book = Book.new
      els = book_node.css("db|attribute")
      #给book赋值
      els.each do |el|
        if el['name'] == 'author-intro'
          book.author_intro = el.content
        else
          book.send("#{el['name']}=",el.content)
        end
      end
      title = book_node.css('title').first.content
      content_nodes = book_node.css('summary')
      content = content_nodes.first.content if !content_nodes.blank?
      imgs = book_node.css('link[rel=image]')
      img = imgs.first['href'] if !imgs.blank?
      book.title = title
      book.summary = content
      book.image = img
      book
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
douban-rails2.3-0.7.0 lib/parser.rb