別に新しいコントローラでなくてもいいですが、URLの組み立てやすさとかルーティング設定無しのシンプルなRSS配信を実装したいので今回はXMLコントローラを生成します。
# rails g controller xml
create app/controllers/xml_controller.rb
invoke erb
create app/views/xml
invoke test_unit
create test/functional/xml_controller_test.rb
invoke helper
create app/helpers/xml_helper.rb
invoke test_unit
create test/unit/helpers/xml_helper_test.rb
アクション(メソッド)名は何でもいいですが、RSS配信URLということが分かるようにしましょう。ここでは、rssという名前でアクションを定義します。
rssアクションでは、RSSで配信したいコンテンツの取得、RSS仕様に基づいた情報をテンプレート変数(@hoge)として定義します。
RSS仕様はググればでてきます
シンプルに書いています。blogテーブルの全レコードを取得してますが、必要に応じて:limit => '5'とか、適宜調整してください。
class XmlController < ApplicationController
def rss
@feed_title = "maepachi blog"
@blogs = Blog.find(:all, :order => "created_at desc")
render :layout => false
end
end
rssアクション内でrenderメソッドを使用しない限り、拡張子前はアクション名と同じです。拡張子はhtml.erbではなく、rxmlであることに注意しましょう。
記述の説明については私も理解半ばので割愛します。
xml.instruct! :xml, :version => "1.0", :encoding => "UTF-8"
xml.rss("version" => '2.0',
"xmlns:dc" => "http://purl.org/dc/elements/1.1/",
"xmlns:atom" => "http://www.w3.org/2005/Atom") do
xml.channel do
xml.title @feed_title
xml.link(request.protocol + request.host_with_port + url_for(:rss => nil))
xml.language "ja-ja"
xml.ttl "40"
xml.pubDate(Time.now.strftime("%a, %d %b %Y %H:%M:%S %Z"))
@blogs.each do |blog|
xml.item do
xml.title(blog.title)
xml.link(request.protocol + request.host_with_port +
url_for(:controller => 'blog', :action => 'entry', :id => blog.id ))
xml.description(blog.body)
xml.guid(request.protocol + request.host_with_port +
url_for(:controller => 'blog', :action => 'entry', :id => blog.id ))
xml.pubDate(blog.created_at)
xml.author "RssAuthor"
end
end
end
end
RSSフィードのオレンジマークの画像はネット上にたくさんありますのでそれを活用しましょう。
あとは、表示させたい場所(たいていヘッダーかフッターとかでしょうか)にlink_toにimage_tagの組み合わせで表示させます。
以下記述はxmlコントローラのrssアクションへのリンクをapp_root/public/images/rss.jpegとして表示させる記述です。
<%= link_to image_tag('/images/rss.jpeg', { :border => '0',
:alt => 'RSSフェード登録',
:size => '80x50'}),
{ :controller => 'xml', :action => 'rss' } %>
『RSS Auto Discovery』とは、RSSリーダやブラウザがサイトを訪れた時に、そのサイトでRSS配信をしていることを自動認識させる仕組みです。
railsアプリでRSS Auto Discoveryを実装する場合、railsメソッドで記述する方法とHTMLタグで記述する方法があります。どちらの記述方法でも、記述する場所はheadタグの中です。
<head>
<%= auto_discovery_link_tag( :rss, "/xml/rss" ) %>
</head>
<head>
<link rel="alternate" type="application/rss+xml" title="RSS"
href="<%= request.protocol + request.host_with_port + url_for(:controller => 'xml', :action => 'rss') %>")
<head>
さぁ、ブラウザでサイトにアクセスしてみてください。URLバーの右側にRSSフィードのマークが表示され、ワンクリックでお使いのRSSフィーダーへの登録が済んだのではないでしょうか。
Perl |
3
|
Linux |
16
|
Jenkins |
1
|
CI |
1
|
Bashシェル |
1
|
シェルスクリプト |
1
|
Munin |
7
|
Ruby on Rails |
7
|
plenv |
1
|
sudo |
2
|
Cobbler |
6
|
ruby |
1
|
rbenv |
1
|
WeeChat |
1
|
tmux |
2
|
Webistrano |
1
|
capistrano |
1
|
puppet |
8
|
growthforecast |
1
|
Supervisor |
1
|
perlbrew |
1
|
git |
2
|
Python |
1
|
pip |
1
|
PHP |
1
|
Nginx |
1
|
MySQL |
2
|
LXC |
2
|
RPM |
3
|
ImageMagick |
1
|
Subversion |
1
|
qmail |
3
|
yum |
1
|
ucspi-tcp |
1
|
daemontools |
1
|
Puppet |
1
|
IPVS |
1
|
Kickstart |
1
|
aaa |
0
|