如何在 Rails 3 中制作 RSS/Atom 提要?

Posted

技术标签:

【中文标题】如何在 Rails 3 中制作 RSS/Atom 提要?【英文标题】:How do I make an RSS/Atom feed in Rails 3? 【发布时间】:2011-04-26 11:01:46 【问题描述】:

我是 Rails 3 的新手,我正在尝试制作一个 RSS/Atom 提要。我知道auto_discovery_link_tag,但相关的控制器/动作应该是什么样子?

谢谢!

【问题讨论】:

【参考方案1】:

Auto_discovery_link_tag 是一个好的开始。快速谷歌搜索,我在How to Create an RSS feed in Rails 上找到了博客文章。让我告诉你你的关联控制器/动作应该是什么样子:

控制器/posts_controller.rb

def feed
    @posts = Post.all(:select => "title, author, id, content, posted_at", :order => "posted_at DESC", :limit => 20) 

    respond_to do |format|
      format.html
      format.rss  render :layout => false  #index.rss.builder
    end
end

此文件的名称应与控制器匹配。见下文:

views/posts/feed.rss.builder

xml.instruct! :xml, :version => "1.0" 
xml.rss :version => "2.0" do
  xml.channel do
    xml.title "Your Blog Title"
    xml.description "A blog about software and chocolate"
    xml.link posts_url

    for post in @posts
      xml.item do
        xml.title post.title
        xml.description post.content
        xml.pubDate post.posted_at.to_s(:rfc822)
        xml.link post_url(post)
        xml.guid post_url(post)
      end
    end
  end
end

这就是所有 Railsy 魔法发生的地方。在这里,RSS 提要 XML 被生成并返回给 HTTP。

【讨论】:

谢谢马特,这是有道理的,我以前从未听说过 .builder 文件。对于那些想知道 Atom 的人,我只是搜索了“rails atom.builder”,并得到了一个看起来非常相似的代码片段,但对于 atom。 (papodenerd.net/creating-atom-feeds-with-ruby-on-rails) 尽管我希望您选择 Atom 而不是 RSS,但我建议您只使用其中一种。它们代表相同的信息,并且大多数现代提要解析库都支持这两者,所以它们很好:) 检查这个最佳实践:blog.superfeedr.com/Feeds/RSS/Atom/Best%20Practice/… 朱利安,我同意人们应该选择一个并使用它。我只是想为 Atom 提供相同的信息,以便人们在阅读此页面后可以轻松选择其中一个。 只是想补充一点,您应该将 .rss.builder 文件命名为与您为操作(函数)命名的任何名称相同。所以在这种情况下,它应该是 feed.rss.builder 而不是 index.rss.builder。 注意到构建器在 JRuby 上运行不佳。我正在研究其他选项。【参考方案2】:

使用 auto_discovery_link_tag:

在控制器中:

respond_to do |format|
  format.html
  format.atom render action: 'index', layout: false
end

【讨论】:

以上是关于如何在 Rails 3 中制作 RSS/Atom 提要?的主要内容,如果未能解决你的问题,请参考以下文章

用于读取 RSS 和 ATOM 提要的 java 库 [重复]

如果用户代理是 IE,在基于 WCF 的 RSS/ATOM 上实现 HTML 响应?

HTML RSS / Atom HTML

Django - 聚合内容 RSS/Atom

django 聚合内容 RSS/Atom

如何正确关联rails中的对象而不为相关性制作单独的表