class FeedUtils::Parser

Public Class Methods

new( xml ) click to toggle source

Note: lets keep/use same API as RSS::Parser for now

# File lib/feedutils/parser.rb, line 15
def initialize( xml )
  @xml = xml
  @atomv03helper = AtomV03Helper.new
end
parse( xml, opts={} ) click to toggle source

convenience class/factory method

# File lib/feedutils/parser.rb, line 10
def self.parse( xml, opts={} )
  self.new( xml ).parse
end

Public Instance Methods

parse() click to toggle source
# File lib/feedutils/parser.rb, line 21
def parse
  logger.debug "using stdlib rss/#{RSS::VERSION}"

  ## old (obsolete) Atom Version 0.3 - try to patch/upgrade to 1.0(-ish)
  if @atomv03helper.match?( @xml )
    logger.warn "*** atom v0.3 feed; try to patch/upgrade to 1.0(-ish); please use/find atom v1.0 feed"
    parser = RSS::Parser.new( @atomv03helper.convert( @xml ))
  else
    parser = RSS::Parser.new( @xml )
  end

  parser.do_validate            = false
  parser.ignore_unknown_element = true

  puts "Parsing feed..."
  feed_wild = parser.parse  # not yet normalized

  logger.debug "  feed.class=#{feed_wild.class.name}"

  if feed_wild.is_a?( RSS::Atom::Feed )
    feed = AtomFeedBuilder.build( feed_wild )
  else  # -- assume RSS::Rss::Feed
    feed = RssFeedBuilder.build( feed_wild )
  end

  puts "== #{feed.format} / #{feed.title} =="
  feed # return new (normalized) feed
end