RubyでRSSを自作してみよう
「これからの情報コミュニケーションは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」アップロードして、ブラウザーでアクセスすると、
ブラウザの持っているスタイルシートが適用されてしまいました。