プログラマとプロマネのあいだ

プログラマもやるし、プロマネもやるし、たまに似非アーキとか営業っぽいこともやる

RSSフィードを追加してみる。

http://d.hatena.ne.jp/taka_2/20080521#p1
で、RSSサポートやるかも。とか書いたのでやってみる。


RSSを扱うためのライブラリはRubyに添付されているので、それを使う。
http://doc.loveruby.net/refm/api/view/library/rss
ちなみに、RSSの仕様は単純っぽいが、バージョンとか経緯とかは色々複雑みたい。
http://ja.wikipedia.org/wiki/RSS
RSS2.0がRSS1.0の上位互換じゃないってありえん。


とりあえず、library rssのサンプル通りに作ってみる。
app/controllers/products_controller.rb

  def index_rss
    rss = RSS::Maker.make("1.0") do |maker|
      maker.channel.about = "http://example.com/index.rdf"
      maker.channel.title = "Example"
      maker.channel.description = "Example Site"
      maker.channel.link = "http://example.com/"
    end

    render(:text => rss.to_s)
  end

これで、
http://localhost:3000/products/index_rss/1
にアクセス。

出ました。
firefoxだとこんな感じで表示されるのですね。


せっかくなので、product一覧をRSSフィードで配信してみましょう。
app/controllers/products_controller.rb

  def index_rss
    @products = Product.find(:all)

    rss = RSS::Maker.make("1.0") do |maker| 
      maker.channel.about = "http://example.com/index.rdf"
      maker.channel.title = "Example"
      maker.channel.description = "Example Site"
      maker.channel.link = "http://example.com/"

      for product in @products
        item = maker.items.new_item
        item.link = url_for(:action => :show, :id => product.id)
        item.title = product.title
        item.date = Time.parse(product.updated_at.to_s)
      end     
    end

    render(:text => rss.to_s)
  end

このフィードを購読すると、新しい商品が追加される度に通知されますよ。