namazuでtDiary

日記も随分溜まってきたので検索できるようにしたいなぁと思う今日このごろ。検索と言えばnamazuでしょ。tDiaryのデータはPStore形式になっているのでnamazuに食べさせるにはプレーンテキストに変換する必要がある。tDiaryのsqueeze.rbというpluginでできるらしいので、まずはtDiaryの設定画面にてsqueeze.rbをインストール。以下の2行をtdiary.confに追加。

@options['squeeze.compat_path'] = true
  • .htmlのsuffixを付ける
@options['squeeze.suffix'] = '.html'

これによって、日記の登録によりhtmlファイルが生成される。既に登録済みの日記は次の手順でHTML化。

ruby /home/httpd/tdiary/misc/plugin/squeeze.rb \
-s -x .html -p /home/httpd/tdiary \
-c /home/httpd/tdiary /home/diary/cache/html

これで日記のデータはyyyymmdd.htmlという1日一つのファイルになるのが、このままだと過去の日記を編集とかつっこみとかした時に書き込めないので

$ chown nobody /home/diary/200?/*
$ chown nobody /home/diary/cache/html/*

としておく。できあがったHTMLファイルをnamazuに食べさせるにはこんな感じ。

$ cd /home/diary/namazu
$ mknmz -k /home/diary/cache/html

カレントディレクトリにindexができる。これは後でcronで動かすようにする。最後にCGIで検索できるように。

$ cp /usr/local/libexec/namazu.cgi /usr/local/apache2/cgi-bin/

/usr/local/apache2/cgi-bin/.namazurcで次のように設定して完成。

INDEX           /usr/local/share/namazu/index/tdiary/
REPLACE         /home/diary/cache/html/(\d\d\d\d\d\d\d\d).html       /tdiary/?date=\1
LOGGING OFF
LANG            ja
SCORING TFIDF

tDiary側は date=yyyymmdd の引数でその日付の日記を表示するので、REPLACEで検索結果として見つかったファイル名をURLの引数に変換している。まだ最後じゃなかった。検索文字列を入力しないと検索できない。tDiaryのsearch_form.rbプラグインをインストールし、ヘッダに

<%=namazu_form "/cgi-bin/namazu.cgi" %>

を加える。で、検索はできるようになったが検索結果が化ける。化けると言うか、自動判別が効いていないだけのようで、ブラウザで明示的にEUCを指定してやると正しく表示される。/home/diary/namazu/NMZ.head.jaで、LANG=euc-jpとかやっても変わらない。tDiaryは何故化けないかと言うとCGIの中で自分でHTTPヘッダを出力してcharset=ja_JP.eucJPしてる。CGIだから当たり前か。でもnamazu.cgiはバイナリなので、いじれない。自分でコンパイルしたからいじれないわけないけど、めんどっちい。仕方ないので、httpd.confを変更。

#AddDefaultCharset ISO-8859-1
AddDefaultCharset EUC-JP

今度こそ完成。