改了下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:
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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值