- 更新日: 2014年11月14日
- Rails
RailsでRSSフィードを生成
昨日のエントリー、RailsでAtomフィードを生成 | EasyRamble のRSSフィード版(RSS2.0)です。Atomフィードと同様、簡単にRSSフィードを生成できます。”user has_many posts” という関連を持つモデルの場合で、特定ユーザーの投稿一覧のRSSフィードを生成します。
— 環境 —
Rails 4.1
UsersController の posts メソッドで rss フォーマットを追加
コントローラーのメソッドで、atom フォーマットの下に、さらに rss フォーマットを追加しました。
app/controllers/users_controller.rb
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
class UsersController < ApplicationController # ... def posts @user = User.find(params[:id]) @posts = @user.posts respond_to do |format| format.html format.atom format.rss end end # ... end |
ルーティングは昨日の例と同様に以下。
config/routes.rb
1 |
get '/users/:id/posts', to: 'users#posts' |
RSSフィード用のビューを作成
ビューファイルの拡張子を .rss.builder にします。
views/users/posts.rss.builder
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
xml.instruct! :xml, :version => "1.0" xml.rss("version" => "2.0", "xmlns:dc" => "http://purl.org/dc/elements/1.1/") do xml.channel do xml.title "User's posts" @posts.each do |post| xml.item do xml.title post.title xml.description post.content xml.pubDate post.created_at.in_time_zone(@user.time_zone).to_s(:rfc822) xml.guid "http://example.com/posts/#{post.id}" xml.link "http://example.com/posts/#{post.id}" end end end end |
pubDate は、post.created_at をユーザーのタイムゾーンに変換し、さらに rfc822 のフォーマットにして出力するようにしています。タイムゾーンについては以下あたりの関連。
Rails でのタイムゾーン管理の方針 | EasyRamble
以上で /users/:id/posts.rss のパスで、特定ユーザーの投稿一覧のRSSフィードを表示できました。
Atom と RSS2.0 のどちらを使うべきか
AtomフィードもRSSフィードも、Rails の builder を使うと簡単に生成できることが分かりましたが、さてどっちを使うべきか…。XMLフォーマットの仕様が違うだけで、どちらを使ってフィードを提供しても良さそうなのですよね。
ということで RailsGuides を読みましたところ、Action View Overview — Ruby on Rails Guides に “Below is a full-length RSS example actually used on Basecamp” としてRSS2.0フィードを生成する例が書いてありました。
また、Yahoo!ニュース – RSS や購読している Signal vs. Noise by Basecamp — Business, Design, Programming and the Web もRSS2.0でフィードを提供しているので、とりあえずRSS2.0版のフィードを生成して使おうと思います。
- Rails の関連記事
- RailsでMySQLパーティショニングのマイグレーション
- Rails ActiveRecordでdatetime型カラムのGROUP BY集計にタイムゾーンを考慮する
- RailsプラグインGemの作成方法、RSpecテストまで含めたrails pluginの作り方
- RailsでAMPに対応するgemをリリースしました
- Railsでrequest.urlとrequest.original_urlの違い
- Railsでwheneverによるcronバッチ処理
- Google AnalyticsのRails Turbolinks対応
- Railsアプリにソーシャル・シェアボタンを簡単設置
- Rails監視ツール用にErrbitをHerokuで運用
- Facebook APIバージョンのアップグレード手順(Rails OmniAuth)
Leave Your Message!