class FeedUtils::RssFeedBuilder

todo/fix:

rename to Rss20FeedBuilder?? or FeedBuilderRss20 ??

Public Class Methods

build( rss_feed ) click to toggle source
# File lib/feedutils/builder/rss.rb, line 19
def self.build( rss_feed )
  feed = self.new( rss_feed )
  feed.to_feed
end
new( rss_feed ) click to toggle source
# File lib/feedutils/builder/rss.rb, line 11
def initialize( rss_feed )
  @feed = build_feed( rss_feed )
end

Public Instance Methods

build_feed( rss_feed ) click to toggle source
# File lib/feedutils/builder/rss.rb, line 25
def build_feed( rss_feed )
  feed = Feed.new
  ## feed.object = rss_feed   # not use for now
  feed.format = "rss #{rss_feed.rss_version}"

  feed.title     = rss_feed.channel.title           # required
  feed.url       = rss_feed.channel.link            # required
  feed.summary   = rss_feed.channel.description     # required

  logger.debug "  rss | channel.description: >#{rss_feed.channel.description}< : #{rss_feed.channel.description.class.name}"

   # NOTE:
   # All date-times in RSS conform
   #   to the Date and Time Specification of RFC 822
   #  e.g. Sun, 19 May 2012 15:21:36 GMT  or
   #       Sat, 07 Sep 2013 00:00:01 GMT

  ## convert from time to to_datetime  (avoid errors on windows w/ builtin rss lib)

  feed.built     = rss_feed.channel.lastBuildDate.nil? ? nil : rss_feed.channel.lastBuildDate.to_datetime  # optional
  feed.published = rss_feed.channel.pubDate.nil?       ? nil : rss_feed.channel.pubDate.to_datetime     # optional

  logger.debug "  rss | channel.lastBuildDate: >#{rss_feed.channel.lastBuildDate}< : #{rss_feed.channel.lastBuildDate.class.name}"
  logger.debug "  rss | channel.pubDate: >#{rss_feed.channel.pubDate}< : #{rss_feed.channel.pubDate.class.name}"


  feed.generator = rss_feed.channel.generator       # optional

  logger.debug "  rss | channel.generator: >#{rss_feed.channel.generator}< : #{rss_feed.channel.generator.class.name}"


  items = []
  rss_feed.items.each do |rss_item|
    items << build_feed_item( rss_item )
  end
  feed.items = items

  feed # return new feed
end
build_feed_item( rss_item ) click to toggle source
# File lib/feedutils/builder/rss.rb, line 65
  def build_feed_item( rss_item )

    item = Item.new
    ## item.object = rss_item  # not use for now

    item.title     = rss_item.title
    item.url       = rss_item.link

    logger.debug "  rss | item.title: >#{rss_item.title}< : #{rss_item.title.class.name}"
    logger.debug "  rss | item.link: >#{rss_item.link}< : #{rss_item.link.class.name}"

## todo:
##  check if feedburner:origLink present - if yes, use it for url/link
##  example: use
##  - <feedburner:origLink>http://www.rubyflow.com/items/9803-gotta-ruby-s-syntax</feedburner:origLink></item>
##   instead of
##  - <link>http://feedproxy.google.com/~r/Rubyflow/~3/Ym9Sltg_2_c/9803-gotta-ruby-s-syntax</link>


    item.summary   = rss_item.description

    # check for <content:encoded>
    # -- using RSS 1.0 content module in RSS 2.0
    item.content = rss_item.content_encoded
    logger.debug "  rss | item.content_encoded[0..40]: >#{rss_item.content_encoded ? rss_item.content_encoded[0..40] : ''}< : #{rss_item.content_encoded.class.name}"

    # NOTE:
    # All date-times in RSS conform
    #   to the Date and Time Specification of RFC 822
    #  e.g. Sun, 19 May 2012 15:21:36 GMT  or
    #       Sat, 07 Sep 2013 00:00:01 GMT

    ## convert from time to to_datetime  (avoid errors on windows w/ builtin rss lib)

    item.published = rss_item.pubDate.nil? ? nil : rss_item.pubDate.to_datetime    # .utc.strftime( "%Y-%m-%d %H:%M" )

    logger.debug "  rss | item.pubDate: >#{rss_item.pubDate}< : #{rss_item.pubDate.class.name}"


    ## fix/todo: check if rss_item.guid present? !!!!
    ##
    ##  might be the case e.g. check lambda-the-ultimate.org, for example

    if rss_item.guid && rss_item.guid.content
      item.guid     = rss_item.guid.content
      logger.debug "  rss | item.guid.content: >#{rss_item.guid.content}< : #{rss_item.guid.content.class.name}"
    else
      item.guid     = rss_item.link
      logger.warn "  rss | item.guid.content missing !!!! - using link for guid"
    end

    ### todo: add support or authors (incl. dc:creator)
    ##  <dc:creator>Dhaivat Pandya</dc:creator>

    #  todo: categories
    # <category><![CDATA[Gems]]></category>
    # <category><![CDATA[Ruby]]></category>
    # <category><![CDATA[Ruby on Rails]]></category>


    item
  end
to_feed() click to toggle source
# File lib/feedutils/builder/rss.rb, line 15
def to_feed
  @feed
end