`
simohayha
  • 浏览: 1401302 次
  • 性别: Icon_minigender_1
  • 来自: 火星
社区版块
存档分类
最新评论

ruby way之处理RSS和Atom

    博客分类:
  • ruby
阅读更多
1 rss 标准库

RSS 是基于xml的,因此你能简单的将它作为一个xml来进行解析.可是,事实上他有一个更高级别的专有的解析器来解析他.此外RSS的标准也很混乱。

他有很多不便,就是标准的版本的不兼容,RSS有0.9, 1.0, 和2.0的版本.RSS的版本,就像制造热狗,就是一些除非你一定要知道,否则你不想要知道的细节.

ruby有一个标准RSS库,它包含0.9,1.0和2.0版本标准.不同的版本之间尽可能做到了无缝处理.如果你没有指定版本,这个库他会自己尽可能地检测版本.

看下面的例子,这里我们是从http://marsdrive.com 得到feed:

require 'rss'
require 'open-uri'

URL = "http://www.marstoday.com/rss/mars.xml"
open(URL) do |h|
  resp = h.read
  result = RSS::Parser.parse(resp,false)
  puts "Channel: #{result.channel.title}"
  result.items.each_with_index do |item,i|
    i += 1
    puts "#{i}  #{item.title}"
  end
end


这个程序很简单,一直要看一下mars.xml的结构就很清晰了.

下面我们来创建一个RSS Feed

require 'rss'

feed = RSS::Rss.new("2.0")

chan = RSS::Rss::Channel.new
chan.description = "Feed Your Head"
chan.link = "http://nosuchplace.org/home/"

img = RSS::Rss::Channel::Image.new
img.url = "http://nosuchplace.org/images/headshot.jpg"
img.title = "Y.T."
img.link = chan.link

chan.image = img
feed.channel = chan

i1 = RSS::Rss::Channel::Item.new
i1.title = "Once again, here we are"
i1.link = "http://nosuchplace.org/articles/once_again/"
i1.description = "Don't you feel more like you do now than usual?"

i2 = RSS::Rss::Channel::Item.new
i2.title = "So long, and thanks for all the fiche"
i2.link = "http://nosuchplace.org/articles/so_long_and_thanks/"
i2.description = "I really miss the days of microfilm..."

i3 = RSS::Rss::Channel::Item.new
i3.title = "One hand clapping"
i3.link = "http://nosuchplace.org/articles/one_hand_clapping/"
i3.description = "Yesterday I went to an amputee convention..."

feed.channel.items << i1 << i2 << i3

puts feed


这个代码也很简单,就是先创建了一个空的RSS 2.0 feed ,然后给他的一些节点开始赋值.

这里要注意我们想要把一些Item对象付给feed.channel.items时,我们不能使用
feed.channel.items = [i1,i2,i3]
这样的代码,我们只能使用items[0] = i1 这样的代码.或者用我们上面代码中的使用<<方法.

很多人可能更喜欢用Atom,比起RSS,可是rss库不支持Atom,但是非标准的feedtools 库支持Atom.我们下面就要介绍它.

2 feedtools Library

feedtools他以无缝的方式工作在Atom和RSS中,它存储所有的feeds作为一个共有的内部的格式.并且它有它自己的url处理代码,因此你不需要显示的使用net/http 或者open-uri.

下面这段代码是用feedtools来处理前面的那个例子:

require "feed_tools"

URL = "http://www.marstoday.com/rss/mars.xml"
feed = FeedTools::Feed.open(URL)
puts "Description: #{feed.title}\n"

feed.entries.each_with_index {|x,i| puts "#{i+1} #{x.title}" }
 


这段代码比起上面的那段代码更为简洁和清晰.可以看到这里并没有显式的channel 方法,可是你却可以直接在feed对象上调用title等方法,这是因为一个feed就是一个channel.

下面的是存取Atom的例子:

require "feed_tools"

URL = "http://www.atomenabled.org/atom.xml"
feed = FeedTools::Feed.open(URL)
puts "Description: #{feed.title}\n"

feed.entries.each_with_index {|x,i| puts "#{i+1}  #{x.title}" }


注意,对比一下这两个代码,不同点只有一个,那就是URL的不同,这就说明我们处理feeds时,不需要知道他被存储为哪种格式.

现在让我们加下面的代码到上面的例子中:

str = feed.build_xml("rss",2.0)
puts str


我们所做的就是将Atom feed 转换为RSS2.0的feed.你也可以转换成0.9或者1.0版本.因此我们能读一个RSS的feed然后制造出一个Atom的feed.这个就是这个库的强大之处.

这里要强调一下,我们上面的例子都只是一个小测试,如果你要真正做一个应用程序的话,你要注意处理你的缓存.





0
0
分享到:
评论

相关推荐

    The Ruby Way(处理文件和目录)

    本文详细介绍了Ruby中处理文件和目录的基本知识和技术,包括如何打开和关闭文件、进行基本的文件操作以及处理目录等。此外,还简要介绍了更高级的话题,如对象序列化和持久化存储库。掌握这些知识点可以帮助开发者更...

    The Ruby Way--3rd Edition--2015-英文版

    The Ruby Way 第三版(英文版),全书22章,书中包含600多个按主题分类的示例。每个示例都回答了“如何使用Ruby来完成”的问题。 ——Ruby on Rails之父David Heinemeier Hansson倾力推荐!

    The Ruby Way(第2版)

    The Ruby Way(第2版) &lt;br&gt;The Ruby Way assumes that the reader is already familiar with the subject matter. Using many code samples it focuses on "how-to use Ruby" for specific applications, either ...

    the ruby way 2ed

    6. **异常处理**:书中涵盖Ruby的错误和异常处理机制,包括如何抛出、捕获和处理异常,以及如何自定义异常类。 7. **测试驱动开发(TDD)**:Ruby社区强调TDD,书中会介绍如何使用RSpec和其他测试框架进行单元测试和...

    Addison Wesley The Ruby Way 2Nd Edition Oct 2006.pdf(英文版)

    12. **图像文件、PDF、YAML、XML、RSS和Atom的处理**:讨论了如何处理各种格式的数据文件。 13. **测试、调试、性能分析与打包**:提供了测试、调试和优化Ruby程序的方法,以及如何将其打包发布。 14. **网络编程...

    Atom-ide-ruby,atom包用于将https://github.com/kwerle/ruby_language_服务器与atom集成。发展发生在发展部门。生产是大师。.zip

    Atom-ide-ruby.zip,Atom package used to integrate https://github.com/kwerle/ruby_language_server with Atom. Development happens on the develop branch. Production is master.概述,atom是一个用web技术构建...

    Atom-urss,ultra-rss是另一个ruby提要rss解析器。通过在github上创建一个帐户来帮助zedtux/urss开发。.zip

    在实际应用中,Atom-urss或Ultra-RSS这样的RSS解析器可以与各种Ruby项目结合,比如构建一个自动抓取和更新博客文章的后台服务,或者创建一个实时监控新闻动态的应用程序。对于Ruby开发者来说,了解和掌握这样的库是...

    ruby学习资源(Programming Ruby, Learning Ruby, The Ruby Way)

    内含以下4个文档: 1、Addison.Wesley.The.Ruby.Way.2nd.Edition.Oct.2006.chm 2、O'Reilly.Learning.Ruby.May.2007.chm 3、Programming Ruby 2e.pdf 4、ruby中文文档.chm

    THE RUBY WAY(中文版)(第二版)pdf

    《The Ruby Way 第二版》...“《The Ruby Way (第2版)中文版》在阐述元编程(metaprogramming)等方面尤其出类拔萃,而元编程是Ruby最引人注目的方面之一。” ——Ruby on Rails之父David Heinemeier Hansson倾力推荐!

    the-ruby-way

    the ruby way the ruby way

    Atom-autocomplete-ruby,在atom编辑器中为ruby提供智能代码完成。需要rsense。.zip

    总的来说,Atom-autocomplete-ruby 提供了一个高效、智能的 Ruby 开发环境,结合 Atom 编辑器的灵活性和 rsense 的强大分析能力,使得 Ruby 开发者能够在编写代码时享受到更加流畅和便捷的体验。无论你是初学者还是...

    11.5 时间日期the ruby way.rar

    "11.5 时间日期the ruby way"这个主题深入探讨了Ruby中处理时间日期的最佳实践和常见用法。让我们逐一了解这些知识点。 首先,`Time.now`是Ruby中获取当前时间的标准方法。它返回一个`Time`对象,表示自1970年1月1...

    the ruby way

    6. **异常处理**:Ruby的异常处理机制通过`begin-rescue-end`结构实现,书中讲解了如何捕获和处理异常,以及自定义异常。 7. **文件和IO操作**:书中介绍了如何在Ruby中进行文件和输入/输出操作,包括读写文件、...

    Ruby-Way.rar_About Language

    此外,Ruby支持块、Proc和Lambda,这些都是函数式编程的重要元素,可以用于创建可复用的代码片段和处理迭代。 Ruby的控制流语句包括条件判断(如if/else,case)和循环(如for,while,until,each)。它还提供了...

    Ruby-Money一个Ruby库来处理货币和货币转换

    Ruby-Money库是一个专门为Ruby编程语言设计的强大工具,它专注于处理货币相关的运算和货币转换。这个库被广泛用于需要精确管理货币数据的应用程序,比如电子商务、财务系统或者任何涉及金融交易的项目。在Ruby社区中...

    使用Ruby来处理文本的教程

    接下来,我们将详细探讨Ruby中字符串的操作方法,以及如何利用Ruby处理不同格式的文本数据,例如CSV和XML。 首先,Ruby中的字符串处理功能非常丰富。字符串是Ruby中一个类(String class),它提供了一整套方法来...

Global site tag (gtag.js) - Google Analytics