发现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
相关资源:FeedReader:C#RSS和ATOM Feed阅读器库。 支持RSS 0.91、0.92、1.0、2.0和ATOM。 经过多种语言和提要测试-源码