Perlにもだいぶ慣れてきたので、テキストファイルを読み込んで日記ページを作成するスクリプトを作ってみた。スクリプトの概要は以下のとおり。
コンセプト:
主な機能:
例えば、ここまでの日記は次のように簡単なものになっている。
日記システム Perlにもだいぶ慣れてきたので、テキストファイルを読み込んで 日記ページを作成するスクリプトを作ってみた。 スクリプトの概要は以下のとおり。 コンセプト: ・Simpleな設計、データ形式にする ・データファイル自体が普通に日記として読めること 主な機能: ・セクションごとにアンカーを出力 ・最新、月毎、日毎のページを出力する ・URL自動リンク機能 ・・で始まっている行は、自動的に<ul><li>…</ul>に変換 ・<pre>〜</pre>はそのまま出力 ・&, <, >などはエスケープ文字に置き換える etc…
本当は、diary/20020813.htmlのようなHTMLファイルのURLでアクセスしてもCGIでそのファイルを出力する仕組みにしたかったんだけど、それにはdiary/○○.htmlへのアクセスをCGIへ渡す必要があり、その設定が面倒そうなので断念。
HTMLファイルへのURLをCGIの引数として受け取る方法にはもう一つあって、上の例だと、diaryという名前のスクリプトを用意すればいい。こうすると、diary/20020813.htmlというアクセスがあった場合、そのファイルが存在しないので、diary(というCGI)が実行されることになる。CGI側でURLを受け取るには環境変数PATH_INFOを参照すればいい。
他に考えたのは、URLの?のあとに日付けを付けて読みたい日を指定する方法。URLは例えば/diary/?20020813のようになる。この方法は簡単に実装できるけど、検索エンジンによっては?の付いたURLだと拾ってくれないものがある。ということで今回は予めHTMLに変換しておく方法を採用。URLに?をつけるバージョンも作ってあるので、もう少しまとまったら公開しようかな。
2ちゃんねるやポータルサイトのウェブメールサービスなどで、リンク元のURLであるRefererを渡さずにリダイレクトするCGIが使われているけど、それにはLocation:でなくRefresh:を使っているみたい。実はRefreshの場合もRefererを渡すか渡さないかはブラウザ次第なのだけど、ちょうどExplorerとNetscapeで渡さないようになっているので、大半の利用者に対応できるらしい。スクリプトの例は以下。アクセスは、redirect.cgi?URLのようにすればOK。
my $url = $ARGV[0]; print "Refresh: 0; URL=$url\n\n";