改了下rss-reader,支持atom了
發現gigix新的blog是支持atom的,也讓這個小工具支持下atom,去rubyforge找了圈,有個叫atom的lib簡單易用,就選他了。首先,gem install atom,安裝一下
其次,稍微修改下代碼:
def blog_info(url)
str=open(url).read
feed = RSS::Parser.parse(str, false)
unless feed
feed=Atom::Feed.new(str)
blog=Blog.new(feed.title,url,feed.entries)
else
blog=Blog.new(feed.channel.title,url,feed.items)
end
end
先嚐試用RSS模塊去讀,失敗的話就用Atom模塊,運行下,問題出來了,這個atom lib的entries數組中是一個一個的Atom:Entry對象,而這個Entry類並沒有我在模板文件中定義的link,取而代之的是一個links數組,links數組中的Link對象href屬性才是我想要的,那麼,修改模板文件?或者修改atom lib的源碼?No,No,都不用,ruby天然的open class特性讓你隨心所欲,我們打開Atom:Entry類,給它添加個link方法就OK:str=open(url).read
feed = RSS::Parser.parse(str, false)
unless feed
feed=Atom::Feed.new(str)
blog=Blog.new(feed.title,url,feed.entries)
else
blog=Blog.new(feed.channel.title,url,feed.items)
end
end
class Atom::Entry
def link
links[0].href
end
end
這樣一來,模板文件也不用改了,更不用去修改atom lib的源碼,實在是夠爽,現在完整的rss-reader是這樣:def link
links[0].href
end
end
require 'rss/2.0'
require 'open-uri'
require 'erb'
require 'atom'
# author dennis
# email killme2008@gmail.com
class Atom::Entry
def link
links[0].href
end
end
class Blog
attr_accessor:title,:url,:items
def initialize(title,url,items=[])
@title=title
@url=url
@items=items
end
end
def blog_info(url)
str=open(url).read
feed = RSS::Parser.parse(str, false)
unless feed
feed=Atom::Feed.new(str)
blog=Blog.new(feed.title,url,feed.entries)
else
blog=Blog.new(feed.channel.title,url,feed.items)
end
end
def rss_read
urls=['https://www.blogjava.net/canonical/rss','https://dreamhead.blogbus.com/index.rdf',
'https://michael.nona.name/rss','https://blog.csdn.net/mozilla/Rss.aspx','https://blog.csdn.net/g9yuayon/Rss.aspx']
urls.collect do |blog_url|
blog_info(blog_url)
end
end
if $0==__FILE__
blogs=rss_read()
#讀取模板文件
template=IO.read(File.dirname(__FILE__)+"/blogs.html")
message=ERB.new(template)
#輸出結果文件
File.open("today.html","w+"){|file| file.puts message.result}
end
require 'open-uri'
require 'erb'
require 'atom'
# author dennis
# email killme2008@gmail.com
class Atom::Entry
def link
links[0].href
end
end
class Blog
attr_accessor:title,:url,:items
def initialize(title,url,items=[])
@title=title
@url=url
@items=items
end
end
def blog_info(url)
str=open(url).read
feed = RSS::Parser.parse(str, false)
unless feed
feed=Atom::Feed.new(str)
blog=Blog.new(feed.title,url,feed.entries)
else
blog=Blog.new(feed.channel.title,url,feed.items)
end
end
def rss_read
urls=['https://www.blogjava.net/canonical/rss','https://dreamhead.blogbus.com/index.rdf',
'https://michael.nona.name/rss','https://blog.csdn.net/mozilla/Rss.aspx','https://blog.csdn.net/g9yuayon/Rss.aspx']
urls.collect do |blog_url|
blog_info(blog_url)
end
end
if $0==__FILE__
blogs=rss_read()
#讀取模板文件
template=IO.read(File.dirname(__FILE__)+"/blogs.html")
message=ERB.new(template)
#輸出結果文件
File.open("today.html","w+"){|file| file.puts message.result}
end
文章轉自莊周夢蝶 ,原文發布時間2007-07-11
最後更新:2017-05-17 15:31:23