July 28, 2006

rss_date プラグイン

以前しばらくは blosxom ネタ強化期間としてエントリを書いていくような発言をしたのに、相も変わらず有言実行。あまりのオオカミ少年ぶりに、そろそろ blosxomer としての信用を失うなと感じつつも、どうせ誰も期待してねーよ! とも思ったり。まあそれはともかく、このウェブログで使用している blosxom プラグインの見直しに伴い、新たに自作した rss_date を今さらながら公開しました。

rss_date

このプラグインを使用すると、RSS 1.0 の channel 要素の dc:date や、RSS 2.0 のlastBuildDate 要素などで使用可能な、ページの最終更新日を W3CDTF および RFC 822 形式で出力できます。これらはフレーバーだけでは生成できないので、このような代物を自作したというわけです。

さらに、標準のフレーバー コンポーネントではエントリ日時を分単位までしか出力できませんが、それってフィードとしてどうなのよ? という点も以前から気になっていたので、エントリが投稿されたを提供するストーリー コンポーネントも出力するようにしました。

…と、能書きを連ねてみましたが、やはり具体的な使用例を見ないとわかりにくいと思うので、以下は実際の使い方を記述します。

最初に rss_date 本体ですが、これは特に設定を書き換える必要はないと思います。ご自分の blosxom のプラグイン ディレクトリにそのまま放り込めば OK です。

次にフレーバーへの記述ですが、blosxom starter kit 付属の RSS 1.0 フレーバーを例にすると、以下のようになります。

まず head.rss の記述。

<?xml version="1.0" encoding="UTF-8"?>
<rdf:RDF
  xmlns="http://purl.org/rss/1.0/"
  xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
  xmlns:dc="http://purl.org/dc/elements/1.1/"
  xmlns:admin="http://webns.net/mvcb/"
  xmlns:content="http://purl.org/rss/1.0/modules/content/"
  xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/"
  xml:lang="$blog_language">
  <channel rdf:about="$url/index.rss">
    <title>$blog_title</title>
    <link>$url</link>
    <description>$blog_description</description>
    <dc:creator>$rss10::creator (mailto:$rss10::email)</dc:creator>
    <dc:date>{{{date_w3c}}}$rss10::tz_offset</dc:date>
    <admin:generatorAgent rdf:resource="$rss10::generatorAgent"/>
    <admin:errorReportsTo rdf:resource="mailto:$rss10::email"/>
{{{items}}}
  </channel>

このように {{{date_w3c}}} と書くと、その場所にページの最終更新日となる W3CDTF を挿入します。RSS 1.0 の場合は channel 要素の下に、UTC からのオフセット値とともに dc:date 要素として追記します。同様に {{{date_rfc}}} と書くと、最終更新日を RFC 822 形式で挿入します。RSS 2.0 の lastBuildDate (または pubDate) 要素には、こちらを利用し <lastBuildDate>{{{date_rfc}}} +0900</lastBuildDate> のように記述します。

次に story.rss。

  <item rdf:about="$url$path/$fn.htm">
    <title>$rss10::title</title>
    <link>$url$path/$fn.htm</link>
    <description>$rss10::description</description>
    <dc:subject>$categories::alias</dc:subject>
    <dc:creator>$rss10::creator (mailto:$rss10::email)</dc:creator>
    <dc:date>$yr-$mo_num-$da$rss10::T$ti$rss10::colon$rss_date::sec$rss10::tz_offset</dc:date>
    <content:encoded><![CDATA[$body]]></content:encoded>
    <trackback:ping rdf:resource="$url$path/$fn.trackback"/>
  </item>

上記のように $rss_date::sec と記述すると、その場所にエントリが投稿されたを出力します。ちなみに $ti は hh:mm 形式でエントリの時間を返す変数。つまり例では $ti$rss10::colon$rss_date::sec ($rss10::colon は「: (コロン)」を出力する rss10 プラグインの変数) と記述していますから、21:15:33 といった hh:mm:ss 形式で時刻が出力されます。

このように rss_date はフィードの日時出力を拡張するためのプラグインですが、たとえば foot.flavour に Last Updated in {{{date_w3c}}}. と記述すれば、よくあるフッターのページ最終更新日表示に使えたりと、RSS 以外にも利用できます。

技術的には別にどうってことはない…というかむしろ至ってシンプルなスクリプトですが、工夫次第で使い方は広がると思うので、活用してください。やはり blosxom は、こうやって手軽にプラグインを作れるのがいいですね。

TrackBacks

  • トラックバック内容 (excerpt) には必ずひらがなを含めてください。入っていない場合は拒否します。
  • このエントリの URI を含まない (リンクしていない) トラックバック元からは受信しません。

Comments

投稿フォーム

  • コメント以外の入力は任意です。
  • コメント文中には必ずひらがなを含めてください。入っていない場合は拒否します。
  • メール アドレスは公開されませんが、URI を入力した場合は名前がリンクとなります。なお、いずれもコメント欄への入力についてはリンクされます。
  • このページの URI をリファラとして送信しない UA からの投稿は受け付けません。