class RSSFeed

Constants

DEFAULT_OPTIONS

Public Class Methods

feed(url) click to toggle source
# File lib/argh_ss/rss_feed.rb, line 35
def self.feed(url)
  {}.tap do |result|
    open(url) do |rss|
      feed = RSS::Parser.parse(rss)
      raise NoMethodError, "Invalid feed" if !feed
      case feed.feed_type
      when 'rss'
        feed.items.each { |item| result[item.title] = item.link }
      when 'atom'
        feed.items.each { |item| result[item.title.content] = item.link.content }
      end
    end
  end
end
options_feed(url, *args) click to toggle source
# File lib/argh_ss/rss_feed.rb, line 5
def self.options_feed(url, *args)
  raise ArgumentError, "Incorrect options" unless args & DEFAULT_OPTIONS == args
  args = DEFAULT_OPTIONS if args.empty?

  [].tap do |result|
    open(url) do |rss|
      feed = RSS::Parser.parse(rss, false)
      raise NoMethodError, "Invalid feed" if !feed
      case feed.feed_type
      when 'rss'
        feed.items.each_with_object({}) do |item, hash|
          args.each do |content|
            hash[content] = item.send(rss_hash[content])
          end
          result << hash
        end
      when 'atom'
        feed.entries.each_with_object({}) do |entry, hash|
          args.each do |content|
            args_array = atom_hash[content]
            hash[content] = entry.send(args_array[0]).send(args_array[1])
          end
          result << hash
        end
      end
    end
  end

end

Private Class Methods

atom_hash() click to toggle source
# File lib/argh_ss/rss_feed.rb, line 61
def self.atom_hash
  {
    :title     => ["title", "content"],
    :link      => ["link", "href"],
    :content   => ["content", "content"],
    :published => ["published", "content"]
  }
end
rss_hash() click to toggle source
# File lib/argh_ss/rss_feed.rb, line 52
def self.rss_hash
  {
    :title     => "title",
    :link      => "link",
    :content   => "description",
    :published => "pubDate"
  }
end