« 「PlotKit」でグラフを描こう | メイン | 「Timeline」 - スケジュール管理、年表作成だっておてのもの »

RubyでRSSを自作してみよう

  はてなブックマークに追加 このエントリを livedoor クリップへ追加

「これからの情報コミュニケーションはRSSだ」ということでRSSを作成してみました。


いまさらながらという声が聞こえてきそうですが・・・(笑)
これからさらに、いろいろな面で利用されるようになっていくと思います。


RSSの生成には「Ruby」を利用します。


今回の記事の内容は、以下のとおりです。

(A)「Ruby」でRSSを生成する
(B)生成したRSSにスタイルシートを適用して表示する


それでは、早速、取り掛かりましょう。


(A)「Ruby」でRSSを生成する

コード(「test.rb」)を示します。

-------------------------- ここから(test.rb)
# 「rss/maker」ライブラリを利用します
require 'rss/maker'

# RSSのバージョンを指定してRSSオブジェクトを生成します
rss = RSS::Maker.make("1.0") do |maker|


  #適用するスタイルシートを指定します
  xss = maker.xml_stylesheets.new_xml_stylesheet
  xss.href = "./rdf.xsl"


  # 記事を配信しているページに関する情報を設定します
  maker.channel.about = "http://kazuhiro.ty.land.to/blog/rdf.xml"
  maker.channel.title = "Kazuhiro's Weblog"
  maker.channel.description = "weblog page"
  maker.channel.link = "http://kazuhiro.ty.land.to/blog/"


  # RSSのitemを更新日が新しい順番にソートする機能を有効にする
  maker.items.do_sort = true


  # 以下では記事に関する情報を指定します

  # 「article1」という記事の情報を設定しています
  item = maker.items.new_item
  item.title = "article1"
  item.link = "http://kazuhiro.ty.land.to/blog/article1.html"
  item.dc_subject ="test"
  item.description ="test用の記事です。"
  item.date = Time.parse("2007/01/10 01:23")

  # 「article2」という記事の情報を設定しています
  item = maker.items.new_item
  item.link = "http://kazuhiro.ty.land.to/blog/article2.html"
  item.title = "article2"
  item.dc_subject ="test"
  item.description ="test用の記事です。"
  item.date = Time.parse("2007/01/11 01:23")

end

# RSSを出力します
puts rss.to_s
-------------------------- ここまで(test.rb)


コーディングがすんだら、以下のコマンドを実行してください。

  ruby test.rb > rdf.xml


以上で、RSSの生成は終了です。

「RSS/maker」の詳しい説明は、「RSS Parser::Tutorial」を参照してください。


(B)生成したRSSにスタイルシートを適用して表示する

生成したRSS(「rdf.xml」)はそのままでは、
見づらいのでスタイルシートを適用して見やすくしたいと思います。

スタイルシートのコードを示します。

-------------------------- ここから(rdf.xsl)
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
  xmlns:dc="http://purl.org/dc/elements/1.1/"
  xmlns:rss="http://purl.org/rss/1.0/"
  exclude-result-prefixes="rdf dc"
>

  <xsl:output method="html" />

  <xsl:template match="/">
    <xsl:apply-templates/>
  </xsl:template>

  <xsl:template match="rdf:RDF">

    <html xml:lang="ja" lang="ja">
    <head>

    <!-- titleを設定する -->
    <title>
      RSS from <xsl:value-of select="/rdf:RDF/rss:channel/rss:title"/>
    </title>

    <meta http-equiv="Content-Style-Type" conent="text/css"/>

    </head>

    <body>

      <h2><a>
        <xsl:attribute name="href">
          <xsl:value-of select="//rss:link"/>
        </xsl:attribute><xsl:value-of select="//rss:title"/>
      </a></h2>

      <p>この文書は、
        <a>
          <xsl:attribute name="href">
            <xsl:value-of select="//rss:link"/>
          </xsl:attribute>
          <xsl:value-of select="//rss:title"/>
        </a>
        の「RSS1.0」に「rfd.xsl」を適用して表示しています。<br/>

        最終更新日:<xsl:value-of select="//dc:date"/>
      </p>
      <hr color="orange"/>

      <xsl:apply-templates select="rss:item"/>

    </body>

    </html>

  </xsl:template>

  <xsl:template match="rss:item">
    <div bgcolor="red">
      <dl>
        <dt>
          <h2>
          <a>
            <xsl:attribute name="href">
              <xsl:value-of select="rss:link"/>
            </xsl:attribute>
            <xsl:value-of select="rss:title"/>
          </a>
          </h2>
        </dt>
        <dd>
          Category: <xsl:value-of select="dc:subject"/><br/>
          Update: <xsl:value-of select="dc:date"/><br/>
          Description: <xsl:value-of select="rss:description"/>
        </dd>
      </dl>
      <hr color="orange"/>
    </div>

  </xsl:template>

</xsl:stylesheet>
-------------------------- ここから(rdf.xsl)


「rdf.xml」と「rdf.xsl」を同じディレクトリにおいて、「rdf.xml」をブラウザで表示させてみてください。
みやすくなっていますでしょうか?

(注)
  ウェブサーバに「rdf.xml」アップロードして、ブラウザーでアクセスすると、
  ブラウザの持っているスタイルシートが適用されてしまいました。




Ads BOARD








最近のエントリーとその関連エントリー

トラックバック

このエントリーのトラックバックURL:
http://kazuhiro.ty.land.to/blog/mt-tb.cgi/121

  Map