地名しりとりにフィードをつけた (2) (FeedTools)
2007-02-28
地名しりとりにフィードをつける話の続き。 先日の日記で書いたとおり、キャッシュが有効だとヘッダの Content/Type が書き換わらないという問題があった。
フィルタを使ってあれこれ試した結果、 prepend_before_filter を使えばいいという結論になった。 それ以外のフィルタ before_filter, after_filter, prepend_before_filter だと、キャッシュが有効の時にはなぜか実行されない。
という訳で、既存のコントローラを prepend_before_filter を使うように修正した。
Index: app/controllers/histories_controller.rb
===================================================================
--- app/controllers/histories_controller.rb (リビジョン 12)
+++ app/controllers/histories_controller.rb (作業コピー)
@@ -7,6 +7,7 @@
:add_flash => { :notice => '地名を選択してください'},
:only => [:create]
caches_action :json, :feed
+ prepend_before_filter :feed_charset, :only => :feed
# メイン画面を返す。何も処理はしない。
def index
@@ -71,7 +72,12 @@
end
def feed
- headers['Content-Type'] = 'text/xml;charset=utf-8'
render(:text => History.feed)
end
+
+protected
+
+ def feed_charset
+ headers['Content-Type'] = 'text/xml;charset=utf-8'
+ end
ついでに route.rb を修正した。 http://capping.machu.jp/feed.xml でフィードを取得できるようにしている。
Index: config/routes.rb
===================================================================
--- config/routes.rb (リビジョン 8)
+++ config/routes.rb (作業コピー)
@@ -12,6 +12,7 @@
# You can have the root of your site routed by hooking up ''
# -- just remember to delete public/index.html.
map.connect '', :controller => "histories"
+ map.connect 'feed.xml', :controller => "histories", :action => 'feed'
# Allow downloading Web Service WSDL as a file with an extension
# instead of a file named 'wsdl'
Index: app/views/histories/index.rhtml
===================================================================
--- app/views/histories/index.rhtml (リビジョン 12)
+++ app/views/histories/index.rhtml (作業コピー)
@@ -6,7 +6,7 @@
<title>地名しりとり</title>
<link href="http://www.google.com/uds/css/gsearch.css" rel="stylesheet" type="text/css"/>
<link href="/stylesheets/capping.css" rel="stylesheet" type="text/css"/>
-<link rel="alternate" type="application/rss+xml" title="RSS" href="/histories/feed">
+<link rel="alternate" type="application/rss+xml" title="RSS" href="feed.xml">
<script type="text/javascript" src="/javascripts/prototype.js"></script>
<script src="http://maps.google.co.jp/maps?file=api&v=2&key=<%=h GOOGLE_MAPS_API_KEY %>" type="text/javascript"></script>
<script src="http://www.google.com/uds/api?file=uds.js&v=1.0&key=<%=h GOOGLE_AJAX_SEARCH_API_KEY %>" type="text/javascript"></script>
これで livedoor Reader でフィードを拾ってくれるようになるといいな。
追記
なんか拾ってくれているっぽい。