RubyでXML出力しましょう

iyamaです。

今日はまたもやRuby! RubyOnRailsでXMLを出力してみましょう。

RubyOnRailsでwebサービスを立ちあげた後、 SEO対策のためsitemap.xmlを用意したりすると思います。 ただ、フレームワークで作成したサイトの場合、 staticでsitemap.xmlを用意する気はありません。 そこで、sitemap.xml自体もフレームワークで出力しちゃおうと思います。

Controller

controller/site_controller.rb
1
2
3
4
5
6
7
8
class SiteController > ApplicationContoller
  require "builder/xmlmarkup"

  def sitemap
  @xml = Builder::XmlMarkup.new
  render(:type => :rxml)
  end
end

ポイントはHTMLではなくXMLと認識させることです。 requireでライブラリを読み込むのは前回書いた通り。 今回はxmlを出力するためのライブラリを読み込みます。 xmlのフォーマットを利用できるように、XmlMarkup.new renderもちゃんと指定してください。

View

そしてViewはrenderでも指定した通り、 通常はViewのファイル拡張子は.rhtmlのところを.rxmlにしましょう。 view/sitemap.rxml

view/sitemap.rxml
1
2
3
4
5
6
7
8
9
10
@xml.instruct! :xml, :version => "1.0"
@xml.urlset(:xmlns => "http://www.sitemaps.org/schemas/sitemap/0.9") do

    @xml.url do
        @xml.loc("http://code-life.net");
        @xml.lastmod("2011-12-17")
        @xml.changefreq("daily")
        @xml.priorty("0.8")
    end
end

出力結果

1
2
3
4
5
6
7
8
9
<?xml version=”1.0″ encoding=”UTF-8″?>
<urlset xmlns=”http://www.sitemaps.org/schemas/sitemap/0.9″>
<url>
    <loc>http://code-life.net/</loc>
    <lastmod>2011-12-17</lastmod>
    <changefreq>daily</changefreq>
    <priority>0.8</priority>
</url>
</urlset>

これでいけちゃいます!笑。 viewのコードと出力結果を見比べてもらうとわかると思いますが、 例えば@xml.testとするとタグが出力されます。 タグの終了がいらない場合の場合「!」をつけましょう。

そして、タグの中に子のタグを入れたい場合はdo〜endで囲みましょう。 簡単ですね。 時限公開なんかをしているサイトだったら特に簡単にsitemap.xmlが作れちゃいます。

以上です。

Comments