发现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:
class Atom :: Entry def link links[ 0 ] . href end end 这样一来,模板文件也不用改了,更不用去修改atom lib的源码,实在是够爽,现在完整的rss-reader是这样:
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 = [ ' http://www.blogjava.net/canonical/rss ' , ' http://dreamhead.blogbus.com/index.rdf ' , ' http://michael.nona.name/rss ' , ' http://blog.csdn.net/mozilla/Rss.aspx ' , ' http://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