aki2rss.cgi
version 0.92 プレビューリリース2
2004-04-11
2004-04-11 主な修正点
バグを修正したバージョンを公開しました。従来版ではオプショナル日記に含まれる改行に強く依存した処理を行っていましたが、データ形式を変更して、改行を含む文章にも柔軟に対応できるようになりました。無改造、標準状態のAkiaryはもとより、改行の処理に改造を加えたバージョンにも対応できるはずです(ただし未検証)。
- オプショナル日記の形式を変更した。
- xmlエスケープ処理を多少、向上させた。
- 日付アンカーの抽出処理を変更した。
もう少し整理したい部分もありますが、暫定的にβ版相当として公開しています。できるならばいくつかのサイトでも利用していただいて、実際の運用に耐えうるか、また改善点などを探っていければと考えています。
開発版ではもう少し調整をしていて、設定ファイルを外部化する予定です。
機能
Akiaryオプショナル日記からRSSを生成する。
特徴
- 文字コードは、EUC-JP、Shift_JISまたはUTF-8も利用できます。
- 要約は、単に頭から何文字という形で切り出します。2バイト文字もちゃんと1文字として認識します。EUC版では、行の切れ目で文字数を検査するので、ワリと自然な切れ具合です。
ダウンロード(プレビューリリース)
- version 0.92 2004-04-11
Shift_JIS版(通常はこちらをご利用ください)
※殆どのAkiaryを利用した日記では文字コードをShift_JISで運用されていることと思います。
EUC版
※EUC版が開発のメインで、要約切り出し機能に差があります。
過去のバージョン
- version 0.90 2003-11-03(公開)
動作条件
- Akiaryのバージョンは0.51をターゲットにしていますが、0.42以上ならたぶん大丈夫そうです。
- Perlのバージョンは5以上(たぶん5.003以上)を要求します。
- 5.6.1で動作確認しています。5.8以降では試していません。
- Perl4の環境では動かないと思います。
RSS仕様
- RSS1.0準拠
- dc:date要素(日時情報)を設定します。
- image要素を設定すれば、ロゴや写真などの画像のURLを埋め込むことができます。
- dc:subjectのようなカテゴリは設定しません。
- textinput要素には対応しません。
しくみの概要
AkiaryはそのままではRSSは生成できない…ので、まずAkiary本体が持っている「オプショナル日記」機能を利用して、最新の記事をテキスト形式で出力します。これがRSSのタネになります。それに対してaki2rss.cgiがフィルター処理し、RSSを静的なファイルで出力します。
一連の作業は、Akiaryの管理画面からスムーズに実行できるように工夫しています。(Akiaryの編集画面から呼び出して利用できるような設定が可能です。)この仕組みにより、既存のテンプレートを大きく変更する必要がありません。日記HTMLから抽出するよりも確実で簡単に実現できます。
文字コードの扱いについて
aki2rssでは、内部的に文字コードを変換するような処理を行ないません。これはAkiary本体も同様です。標準状態のAkiaryで日記を書くと、通常Shift_JISのhtmlが生成されますが、その場合aki2rssでもShift_JISのRSSを生成します。
日記で使う文字コードに関わらず、RSSはUTF-8にしたいという要望もあるかもしれません。これについては検討はしましたが、当分対応しないと思います。理由は、文字コード変換処理の機能をつけることによって、追加のモジュールが必要になり、対応していないWebサーバーもあるからです。
基本的には、「Akiaryが動くなら、aki2rssも動く。(ただしPerlのバージンが4の場合には非対応)」という方針を考えています。
対応できないこと、うまくいかない例
- 日記を再編集した場合、各記事ごとの時刻(<dc:date>)は更新されません。
- 日記を別の日に移動させた場合には、日付は追従しますが、時刻は更新されません。
- 日記のタイトルがない→日付で代用します
- 日記のタイトルに他サイトへのリンクを含む→リンク抽出を誤る原因になります。
- 極端に改造されたAkiaryを使っている→ほとんどのケースで対応可能?と思われます。
- Akiaryの設定を変更したくない→既存の日記には殆ど影響を与えないよう配慮しています。
- 日記と違う文字コードでRSSを出力させたい
参考にした情報
以下のサイトからPerlのコードを参考・利用させていただきました。
- http://www.din.or.jp/~ohzaki/perl.htm
- http://nais.to/~yto/tools/jbuncut/
- http://niaou.alib.jp/diary/diary-10-2003C.html#diary-10-21-2003-A
- http://hasunuma.pobox.ne.jp/support/cyclamen.cgi?log=perl&tree=r20
ライセンス・原著作者
「Artistic License」(参考日本語訳)という、Perlが採用しているライセンスに準じます。
いしだなおと it@isnot.jp
This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
構成ファイルの説明
aki2rss.cgi 【必須】
CGIスクリプトです。akiary.cgiとおなじディレクトリに設置します。また、「パーミッション」もakiary.cgiとおなじにします。
tmpnew.txt 【必須】
RSSの「タネ」となる、new.txtを生成するためのテンプレートです。通常はこれもakiary.cgiとおなじディレクトリに設置します。
rss10general.xsl 【オプション】
XSLTという仕組みを利用するためのスタイルシートです。RSSをブラウザで開いたときに、見やすく表示する役割があります。RSSを「tDiaryテーマ」互換のHTMLに変換します。カスタマイズ可能です。
default.css 【オプション】
上のrss10general.xslと組み合わせてつかいます。他の「tDiaryテーマ」と差し替えることができます。
akiary.css 【オプション】
akiary特有のCSSを設定しています。ほかにも、default.cssを差し替えた場合に補助的な役割を果たす意味もあります。
readme.txt
この文書です。
設定のポイント
akiary.cfg
# 日記ディレクトリ diary_dir="./"
ここ(上は見本です。実際とは違います。)に設定されている内容をそのまま、aki2rss.cgiのほうの「日記ディレクトリ」の設定に写します。
# オプショナル日記3のテンプレートファイル opt_diary_tmp_file_3="./tmpnew.txt" # オプショナル日記3の出力ファイル opt_diary_file_3="./new.txt"
【必須】
ここを忘れずに設定してください。オプショナル日記3をすでに使っている場合は、4でも5でも構わないです。
※オプショナル日記6以上を使いたいときはakiary.cgiのほうも書き換える必要があります。
# 日記のURL diary_url="./aki2rss.cgi"
【お勧め】
これは必須ではないですが、こうしておくとAkiaryの日記編集画面左上にある「日記」というリンクからすばやくRSS生成を行えます。
# 最新n回分 latest_times="7"
ここでの設定とは関係なく、RSSに表示するitemの件数を設定できます。(→参照:tmpnew.txt)
# 日付表示フォーマット date_format="<a href=%Y0%M1.html#%Y0%M1%D1>■</a>%Y0年%M0月%D0日(%W0)"
【お勧め】
直接は関係ないですが、この設定を工夫することによって過去ログへのリンクを見つけやすくすることができます。
tmpnew.txt
特にいじる必要はありません。はじめのほうにある「latest_times="10"」の部分の数字で、RSSのitemの数を指定します。値の範囲は1〜15を推奨します。
aki2rss.cgi
設定の各行は以下のような構文になっています。
'<設定項目名>' => '<設定する値>',
行末の「,(カンマ)」は消さないようにご注意ください。また、「'(シングル・クォーテーション)」は区切りの記号になっていますので、<設定する値>自身に含めることはできません。
「#」で始まる行、および行の途中の「#」から改行までは注釈です。
以下で【オプション】とあるところは、必要なければそのままでもよいです。
#! /usr/local/bin/perl -w
1行目の、Perlのパスを必要に応じて書き換えます。
動作に関する設定
# 日記を置くディレクトリをあらわすURL。「/」でおわること。 'uri_base' => 'http://www.example.com/user/diary/',
【必須】
たとえば最新の日記が「http://www.example.com/user/diary/new.html」なら上のようにします。
# 日記ディレクトリ。サーバーでの(ファイルシステムの)パス。「/」でおわること。 'diary_dir' => './',
【必須】
(→参照:akiary.cfg)
# xml encoding 右のいずれか。[ shift_jis | euc-jp | utf-8 ] 'encoding' => 'shift_jis',
文字コードの指定です。多くの場合はshift_jisのままでよいでしょう。EUC-JPでAkiaryを運用している場合はここをかえます。そのとき、aki2rss.cgi自体も文字コードを変えておく必要があります。
# XSLT(不要なら指定しなくてもよい) 'xslt' => 'rss10general.xsl',
【オプション】
XSLTは特に設定しなくても機能します。不要な場合は行の先頭に「#」をつけてコメントにするか、=>の右のシングルクオーテーションの中を空('')にするとこの機能をOFFにできます。
RSSの設定
以下の項目は必ず自分のものに書き換えてください。
# サイトのURL(もしくは最新の日記のURL) 'link' => 'http://www.example.com/user/diary/index.html', # サイトのタイトル 'title' => 'Weblog Like Style With Akiary', # サイトの説明 'description' => 'AkiaryからはじめるWeblog。テスト中。 by naoto', # 作者 'creator' => 'ISHIDA Naoto', # 著作権表示 'rights' => 'Copyright (C) ISHIDA Naoto. All rights reserved.',
【必須】
# サイトの画像(ロゴ、アイコン) # <image>要素は省略することができます。そのときはurlを空文字列にします。 # 'url' => '', 'url' => 'http://www.example.com/user/diary/images/logo.png',
【オプション】
使い方
基本的には、設置したCGIのURLにアクセスするだけです。
日記のURL(diary_url)を【お勧め】の設定にしている場合は、Akiaryの日記編集画面左上にある「日記」というリンクからすばやくRSS生成を行えます。
利用例
私が実際に書いている日記の、RSSです。http://isnot.jp/n3/index.rdf
将来の計画
- Shift_JISとUTF-8における要約切り出しは手抜きです。文の途中でも構わずぶった切るのがイマイチ。
- 日記本文から{<H3>タグ,■〜,★〜}の内容を抜き出して、要約とする?
- オンラインコンフィグ?
- XMLはUTF-8で出すようにする→Akiaryの美学?に則り、文字コード変換はしない。
- 設定を別ファイルから読み込むようにする。それによって文字コード絡みの問題はかなり解決できるはずだ。
※この変更により設定のしかたが大きく変わります。1.0リリース前に行いたいかも。
検討課題
- 標準状態のAkiaryで利用する場合の検証をもう少しする
- 「文字コード」絡みで罠に陥りやすい。RSS生成までならおそらく問題は起こらないが、出したRSSをどう使うかまで考えた場合、エンコーディングがShift_JISだとうまく扱えないアプリケーションも多々ある。(事例)
- XSLT(クライアントサイド)も鬼門か。標準ではOFFにする。
TrackBack
[TrackBack]nJOY BLOG::RSS を出力する掲示板やスクリプト等へのリンク集 【from nJOY BLOG】
ブログのおかげで RSS の配信に注目が集まっています。RSS リーダーを使えば数多くのブログ等の更新状況が素早く把握出来てとても便利ですからね。そして最近はポータルサイト・大手企業・新聞各社・テレビ局などでも RSS 配信し始めるなど、RSS の需要はさらに高まっています。(続き…)
いしだなおと it@isnot.jp
posted at: 2005-04-20 14:09:34