Hatena::Groupkdri

KazusaAPI開発日誌 このページをアンテナに追加 RSSフィード

2008-05-27

Atom フィードを追加する。

|  Atom フィードを追加する。 - KazusaAPI開発日誌 を含むブックマーク はてなブックマーク -  Atom フィードを追加する。 - KazusaAPI開発日誌  Atom フィードを追加する。 - KazusaAPI開発日誌 のブックマークコメント

かずさアノテーションAtom フィードを追加してみた。

かずさアノテーションにはウェブページブックマークユーザタグといったリソースとしてある。それぞれのリスト表示とエントリ表示に Atom フィードを追加した。すべてのリソースブックマークを経由して関連しているので、Atom フィードの entry はほとんどがブックマークとなっている。例えば、ユーザページの Atom フィードは、そのユーザの新着ブックマークというように、ブックマークフィルタしているだけとする。

フィードの設計

Atom フィードを追加するのは次のページ:

  1. /
  2. /annotation
  3. /annotation/show/:id
  4. /:user_login
  5. /bookmark
  6. /bookmark/show/:id
  7. /tags
  8. /tags/show/:id

新着アノテーションAtom フィードの作成

We’re sorry, but something went wrongAtom フィードhttp://a.kazusa.or.jp/annotation?style=atom である。

ブラウザフィードを表示するために、app/views/layout/annotation.rhtml の head タグの中に Auto-discovery を埋め込む。Action 毎にフィードURLを変更するのは、@atom_hash 経由でおこなう。

<%= auto_discovery_link_tag(:atom, @atom_hash) %>

app/controllers/annotation_controller.rb で style=atom 付きの URLAtom フィードとなるようにする。

  def index
    list
  end
  # 中略
  def list
    # 中略
    @atom_hash = {:controller => 'annotation', :q => params[:q], :style => 'atom'}
    case params[:style]
    # 中略
    when 'atom'
      render :template => 'annotation/list.rxml', :layout => false
    else
      render :action => 'list'
    end
  end

q={keyword} を考慮しているので、検索結果のフィードにもなっている。

Atom フィードテンプレート app/views/annotaton/list.rxml を作成する。

xml.instruct! :xml, :version => 1.0, :encoding => 'UTF-8'
xml.feed 'xmlns' => 'http://www.w3.org/2005/Atom' do
  xml.title 'KazusaAnnotation - Recent annotations'
  xml.link :rel => 'alternate', 
           :href => url_for(:action => '', :q => params[:q], :only_path => false)
  xml.link :rel => 'self', 
           :href => url_for(:action => '', :q => params[:q], :feed => 'atom', :only_path => false)
  xml.id url_for(:action => '', :q => params[:q], :only_path => false)
  xml.updated @bookmarks.first.created_at
  xml.author { xml.name 'Kazusa DNA Research Institute' }
  @bookmarks.each do |bookmark|
    xml.entry do
      xml.title bookmark.page.title
      xml.link :rel => 'alternate', 
               :href => url_for(:controller => 'bookmark', :action => 'show', :id => bookmark.id, :only_path => false)
      xml.id url_for(:controller => 'bookmark', :action => 'show', :id => bookmark.id, :only_path => false)
      xml.updated bookmark.created_at
      xml.author { xml.name bookmark.user.login }
      xml.summary bookmark.tags.map {|x| '[' + x.name + ']' }.to_s
      xml.content 'type' => 'text' do
        xml.text! bookmark.comment
      end
    end
  end
end

参照サイト


まとめ

  1. Rails アプリAtom フィードを追加した。
  2. Atom で何を表現するかは、提供者の自由なので、自由すぎてこまった。
  3. Atom 中の link関係に気を配る必要がある。
  4. RSS の方がフィードリーダーでの表現力がでるけど気にしない。
  5. 新着コンテンツがあるページはフィードをつけるべきである。
  6. 検索結果のフィードが便利すぎる。こんな、ユーザが選択できるコンテンツが変える世界がある。
  7. url_for の :only_path => false がわからなくて困った。
  8. app/views/layout/annotation.rhtml の中身をアクション毎に変更する方法がなかなか思いつかなかった。
トラックバック - http://kdri.g.hatena.ne.jp/nakao_mitsuteru/20080527