Atomフィードの出力方法
Sinatraでbuilderを使ってAtomフィードを出力する方法です。
何故かドキュメントに記述されてないので、メモ代わりに。
# ./app.rb require 'builder' get '/feed' do @entries = DB[:entries].reverse_order(:id).limit(10) content_type "application/atom+xml" builder :feed end helpers do def atom_time(date) date.getgm.strftime("%Y-%m-%dT%H:%M:%SZ") end end
# ./views/feed.builder port = request.port == 80 ? '' : ':' + request.port.to_s base_url = request.scheme + '://' + request.host + port xml.instruct! :xml, :version => "1.0" xml.feed(:xmlns => 'http://www.w3.org/2005/Atom') do xml.id base_url + '/' xml.title "title, change me" xml.updated atom_time(@entries.first[:updated_at]) xml.link(:rel => 'alternate', :href => base_url + "/") xml.link(:ref => 'self', :href => base_url + "/feed") xml.author do xml.name "author, change me" xml.uri "uri, change me" end @entries.each do |entry| xml.entry do xml.id "tag:" + base_url.gsub("http://", "") + "," + entry[:created_at] xml.title "title, change me", :type => 'html' xml.published atom_time(entry[:created_at]) xml.updated atom_time(entry[:updated_at]) xml.link(:rel => 'alternate', :href => "url, change me") xml.content "content, change me", :type => 'html' # xml.summary "summary, change me", :type => 'html' end end end