aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Gemfile4
-rw-r--r--rss.rb61
2 files changed, 65 insertions, 0 deletions
diff --git a/Gemfile b/Gemfile
new file mode 100644
index 0000000..0286745
--- /dev/null
+++ b/Gemfile
@@ -0,0 +1,4 @@
+# A sample Gemfile
+source "https://rubygems.org"
+
+gem 'pry'
diff --git a/rss.rb b/rss.rb
new file mode 100644
index 0000000..2c75648
--- /dev/null
+++ b/rss.rb
@@ -0,0 +1,61 @@
+require 'rss'
+require 'open-uri'
+require 'yaml'
+
+
+class Item
+ attr_reader :title, :author, :date, :summary, :url
+
+ def initialize(item)
+ @title = item.title.content
+ @author = item.author.name.content
+ @date = item.updated.content
+ @summary = item.summary.content.strip
+ @url = item.link.href
+ end
+end
+
+
+class Feed
+ attr_reader :title, :url, :items
+
+ def initialize(title, args)
+ @title, @url = title, args['url']
+ @items = []
+ slurp
+ end
+
+ private
+
+ def slurp
+ open(url) do |rss|
+ feed = RSS::Parser.parse(rss)
+
+ feed.entries.each do |item|
+ add Item.new(item)
+ end
+ end
+ end
+
+ def add(item)
+ @items << item
+ end
+end
+
+feeds = YAML.load(IO.read('feeds.yml'))
+items = []
+
+feeds.each do |t, f|
+ feed = Feed.new(t, f)
+ feed.items.each do |item|
+ puts %{<article>}
+ puts %{ <header>}
+ puts %{ <h1>#{item.title}</h1>}
+ puts %{ <section class="meta">Posted by #{item.author} at #{item.date}</section>}
+ puts %{ </header>}
+ puts %{ <section class="summary">#{item.summary}</summary>}
+ puts %{ <footer><a href="#{item.url}">Read more...</a></footer>}
+ puts %{</article>}
+ puts
+ end
+end