博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
改了下rss-reader,支持atom了
阅读量:7246 次
发布时间:2019-06-29

本文共 1852 字,大约阅读时间需要 6 分钟。

   发现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
你可能感兴趣的文章
HTML表单滚动文本框,table表格,form表单,select下拉列表,textarea文本域
查看>>
【原创】mysql 错误缓冲堆栈
查看>>
SystemCenter2012SP1实践(25)VMM下HyperV的高可用(上)
查看>>
oracle vm的虚拟机windows启动不了的处理方式
查看>>
Hyper-V 2012实时迁移
查看>>
Microsoft Azure Site Recovery (2) 配置虚拟机保护
查看>>
Microsoft Azure Site Recovery (1) 安装VMM服务器代理
查看>>
【转】动态模型及其求解介绍—上
查看>>
学习 ExtJS 4 面板与布局
查看>>
SQL ALTER TABLE 语句
查看>>
使用jquery提交form表单并自定义action
查看>>
Unity3D引用dll打包发布的问题及解决
查看>>
Android开发之Google Map
查看>>
基于内容的图片检索CBIR(Content Based Image Retrieval)简介
查看>>
VS2012编译LibZip库
查看>>
[置顶] 程序员的奋斗史(二十五)——情绪与生活
查看>>
Linux kernel中网络设备的管理
查看>>
反转字符串
查看>>
FusionCharts或其它flash的div图层总是浮在最上层? (转)
查看>>
[Android] Service和IntentService中显示Toast的区别
查看>>