検索エンジンを無料スペースのInfoseekにのせてみた
エキサイトブログはいろいろと制約が多いブログである。いじれる部分があまりない。
テスト的にではあるが、このブログのエントリーを検索できるサイトを外部に置いてみることにした。
cgiが利用可能な無料スペースでの利用を前提に、cgiベースの検索エンジンを探した。
無料スペースで使うわけだから、エンジンも設置や操作が手軽なものであること、これが最低条件。
無料スペースはInfseekのiswebライト、検索エンジンはmsearchを利用することに決定。
iswebの他にも山ほど無料スペースは存在するが、提供される容量が1GBみたいな大容量(?)のため何だかもったいない。だからcgi利用可で50MBのiswebにした。
それにあわせ、RDBMSがいらない、形態素解析を必要としないがインデックスは作れるmesarchを選んだ。
インデックス作成はローカルで実行させたいので、当ブログのエントリーをローカルサーバーにダウンロードする必要がある。
wgetならトップページから全階層のファイルを再帰的に落とせる。その際注意しなければならないのは、utf-8でエンコードされたurlへの対応。
エキサイトブログではタグに日本語を使うと、そのタグ名がutf-8でエンコードされてそのままディレクトリーとして保持される。
たとえば、「検索エンジン」をタグにしたらそのページは次のようになる。
http://nohelpdesk.exblog.jp/tags/%E6%A4%9C%E7%B4%A2%E3%82%A8%E3%83%B3%E3%82%B8%E3
%83%B3/index.html
「%E6%A4%9C%E7%B4%A2%E3%82%A8%E3%83%B3%E3%82%B8%E3%83%B3」が「検索エンジン」に相当し、エキサイトブログのサーバー上にこれがディレクトリーとして作られて、その中にindex.htmlが置かれる。
これを正しくダウンロードする必要がある。
# wget -r http://nohelpdesk.exblog.jp/
本来ならこれ十分なはずである。しかし、ローカルサーバーにダウンロードしたファイルをlsコマンドで見るとディレクトリー名が壊れいるのがわかる。ちなみに、X Windowの環境は、Lang=ja_JP.eucJP。
# ls
EUCの環境だから、UTF-8の文字が見えないのは当たりじゃないかといわれそうだが、否。
# ls | nkf -W
こではダメ。
調べてみると、このような状況に対応するオプションがあった。以下はwgetのマニュアルから。
以上から、正しくダウンロードするには次のようにすればよい。
# wget --restrict-file-name=nocontrol -r http://nohelpdesk.exblog.jp/
# ls
# ls | nkf -W
UTF-8でエンコードされたディレクトリー名を含むページが正しくダウンロードされたことが確認できた。
UTF-8のファイルならUTF-8としてそのまま利用したいところだが、msearchはEUCコードを前提としているため、インデックスファイルを作成する前にダウンロードした全てのファイルの文字コードをEUCに変換しなければならない。
再帰的に一括変換する。
# find . -type f -print0 | xargs -0 nkf -e --overwrite
最近知った便利な用法だ。文字コードを変換しつつ、別のファイルにコピーするのではなく、そのまま当該ファイルをEUCコードで上書きする。
さて、インデックス作成の準備はおおよそできたが、UTF-8でエンコードされているディレクトリー名もEUCに変換する必要がある。
要はgoogleで検索したときと同じように、EUC環境のmesarchでも日本語としてちゃんと表示したいだけ。
そこでconvmvを使う。標準でないことが多いので、場合によってはインストールが必要かもしれない。
以下は、コード変換したいディレクトリーのトップで行なうこと。また、--notestをつけなければ、コード変換せずに結果だけ確認することができる。
# convmv -r --notest -f utf8 -t euc-jp *
convmvを実行すると次のようになる。
# ls
msearchを導入するまでまったく気付かなかったが、やっかいな問題がある。エキサイトブログでは、http://nohelpdesk.exblog.jp/index.htmlではブログのトップページにはアクセスできないのである。
o http://nohelpdesk.exblog.jp/
x http://nohelpdesk.exblog.jp/index.html
index.htmlが存在しないわけではない。エキサイトブログではひとつのディレクトリーにひとつのindex.htmlファイルがセットとなっている。
エキサイトの事情で、index.htmlを含むurlでアクセスできないようにしているようだ。
一方、msearchでは、ファイルがある通りにインデックスを作成する。したがって、index.htmlがあれば、検索結果にもindex.htmlが含まれてしまう。
まぁ、これは当たり前のことで、エキサイト側に問題があると思うのだが、このままでは検索結果をクリックしても当該ページにアクセスできないので、msearchの一部を修正しなければならない。
修正ファイルは、indexing.pl。その中のmakedataに、処理を一行追加した。
###
### インデックス用データ作成
###
sub makedata {
my $file = $_[0];# ファイル名(引数)
my $target_dir = $_[1];# 対象ディレクトリ(引数)
my $target_url = $_[2];# 対象ディレクトリのURL(引数)
my $exclude_keys = $_[3];# 非対象キーワード群(引数)
my $mtime;# 最終更新時刻(戻り値)
my $url;# URL(戻り値)
my $title;# タイトル(戻り値)
my $contents;# インデックス用のHTMLの中身(戻り値)
## 最終更新時刻の取得
$mtime = getmodifytime($file);
## URLの作成
$url = $file;
$url =~ s/^$target_dir/$target_url/;
## ここから
$url =~ s/index\.html//gs;
## ここまで管理人追加
## ファイルの読み込み
OPEN(FILE,"<$file"); ### エキサイトの仕様でopenは全角で示す
$contents = "";
while() {
chomp;# 改行の削除
$contents .= $_;# バッファに行を追加
}
close(FILE);
...中略...
return($url,$mtime,$title,$contents);
}
urlの最後が/(スラッシュ)で終るようにした。また、日本語のディレクトリー名も表示されるようになった。
不出来なサイトはこちらの「ヘルプデスクじゃないっちゅうのまとめサイト(仮)」。
いずれ手を入れたいと思う。
こともが起きてしまった。これで今日の私の自由時間は終了した。
mesarchのインストールとインデックス作成については割愛する。広く利用されている検索エンジンなので、msearchに関する優良サイトはいつくも見つかると思う。
テスト的にではあるが、このブログのエントリーを検索できるサイトを外部に置いてみることにした。
cgiが利用可能な無料スペースでの利用を前提に、cgiベースの検索エンジンを探した。
無料スペースで使うわけだから、エンジンも設置や操作が手軽なものであること、これが最低条件。
無料スペースはInfseekのiswebライト、検索エンジンはmsearchを利用することに決定。
選定理由
iswebの他にも山ほど無料スペースは存在するが、提供される容量が1GBみたいな大容量(?)のため何だかもったいない。だからcgi利用可で50MBのiswebにした。
それにあわせ、RDBMSがいらない、形態素解析を必要としないがインデックスは作れるmesarchを選んだ。
エキサイトブログのエントリー記事をダウンロードする
インデックス作成はローカルで実行させたいので、当ブログのエントリーをローカルサーバーにダウンロードする必要がある。
wgetならトップページから全階層のファイルを再帰的に落とせる。その際注意しなければならないのは、utf-8でエンコードされたurlへの対応。
エキサイトブログではタグに日本語を使うと、そのタグ名がutf-8でエンコードされてそのままディレクトリーとして保持される。
たとえば、「検索エンジン」をタグにしたらそのページは次のようになる。
http://nohelpdesk.exblog.jp/tags/%E6%A4%9C%E7%B4%A2%E3%82%A8%E3%83%B3%E3%82%B8%E3
%83%B3/index.html
「%E6%A4%9C%E7%B4%A2%E3%82%A8%E3%83%B3%E3%82%B8%E3%83%B3」が「検索エンジン」に相当し、エキサイトブログのサーバー上にこれがディレクトリーとして作られて、その中にindex.htmlが置かれる。
これを正しくダウンロードする必要がある。
# wget -r http://nohelpdesk.exblog.jp/
本来ならこれ十分なはずである。しかし、ローカルサーバーにダウンロードしたファイルをlsコマンドで見るとディレクトリー名が壊れいるのがわかる。ちなみに、X Windowの環境は、Lang=ja_JP.eucJP。
# ls
EUCの環境だから、UTF-8の文字が見えないのは当たりじゃないかといわれそうだが、否。
# ls | nkf -W
こではダメ。
調べてみると、このような状況に対応するオプションがあった。以下はwgetのマニュアルから。
If you append ,nocontrol to the mode, as in unix,nocontrol, escap-
ing of the control characters is also switched off. You can use
--restrict-file-name=nocontrol to turn off escaping of control
characters without affecting the choice of the OS to use as file
name restriction mode.
以上から、正しくダウンロードするには次のようにすればよい。
# wget --restrict-file-name=nocontrol -r http://nohelpdesk.exblog.jp/
# ls
# ls | nkf -W
UTF-8でエンコードされたディレクトリー名を含むページが正しくダウンロードされたことが確認できた。
ダウンロードしたファイル群をEUCにコード変換する
UTF-8のファイルならUTF-8としてそのまま利用したいところだが、msearchはEUCコードを前提としているため、インデックスファイルを作成する前にダウンロードした全てのファイルの文字コードをEUCに変換しなければならない。
再帰的に一括変換する。
# find . -type f -print0 | xargs -0 nkf -e --overwrite
最近知った便利な用法だ。文字コードを変換しつつ、別のファイルにコピーするのではなく、そのまま当該ファイルをEUCコードで上書きする。
さて、インデックス作成の準備はおおよそできたが、UTF-8でエンコードされているディレクトリー名もEUCに変換する必要がある。
要はgoogleで検索したときと同じように、EUC環境のmesarchでも日本語としてちゃんと表示したいだけ。
そこでconvmvを使う。標準でないことが多いので、場合によってはインストールが必要かもしれない。
以下は、コード変換したいディレクトリーのトップで行なうこと。また、--notestをつけなければ、コード変換せずに結果だけ確認することができる。
# convmv -r --notest -f utf8 -t euc-jp *
convmvを実行すると次のようになる。
# ls
エキサイトブログの仕様
msearchを導入するまでまったく気付かなかったが、やっかいな問題がある。エキサイトブログでは、http://nohelpdesk.exblog.jp/index.htmlではブログのトップページにはアクセスできないのである。
o http://nohelpdesk.exblog.jp/
x http://nohelpdesk.exblog.jp/index.html
index.htmlが存在しないわけではない。エキサイトブログではひとつのディレクトリーにひとつのindex.htmlファイルがセットとなっている。
エキサイトの事情で、index.htmlを含むurlでアクセスできないようにしているようだ。
一方、msearchでは、ファイルがある通りにインデックスを作成する。したがって、index.htmlがあれば、検索結果にもindex.htmlが含まれてしまう。
まぁ、これは当たり前のことで、エキサイト側に問題があると思うのだが、このままでは検索結果をクリックしても当該ページにアクセスできないので、msearchの一部を修正しなければならない。
修正ファイルは、indexing.pl。その中のmakedataに、処理を一行追加した。
###
### インデックス用データ作成
###
sub makedata {
my $file = $_[0];# ファイル名(引数)
my $target_dir = $_[1];# 対象ディレクトリ(引数)
my $target_url = $_[2];# 対象ディレクトリのURL(引数)
my $exclude_keys = $_[3];# 非対象キーワード群(引数)
my $mtime;# 最終更新時刻(戻り値)
my $url;# URL(戻り値)
my $title;# タイトル(戻り値)
my $contents;# インデックス用のHTMLの中身(戻り値)
## 最終更新時刻の取得
$mtime = getmodifytime($file);
## URLの作成
$url = $file;
$url =~ s/^$target_dir/$target_url/;
## ここから
$url =~ s/index\.html//gs;
## ここまで管理人追加
## ファイルの読み込み
OPEN(FILE,"<$file"); ### エキサイトの仕様でopenは全角で示す
$contents = "";
while(
chomp;# 改行の削除
$contents .= $_;# バッファに行を追加
}
close(FILE);
...中略...
return($url,$mtime,$title,$contents);
}
urlの最後が/(スラッシュ)で終るようにした。また、日本語のディレクトリー名も表示されるようになった。
不出来なサイトはこちらの「ヘルプデスクじゃないっちゅうのまとめサイト(仮)」。
いずれ手を入れたいと思う。
こともが起きてしまった。これで今日の私の自由時間は終了した。
mesarchのインストールとインデックス作成については割愛する。広く利用されている検索エンジンなので、msearchに関する優良サイトはいつくも見つかると思う。
by suiteama | 2008-06-29 07:45 | 検索エンジン