wrsその5

あいかわらずwrs。 英語版、韓国語版、中国語版へのリンク追加。 サマリーを少し賢くした。 カテゴリー表示。 全データ検索する前に必ずキャッシュ検索をするようにした。 体感的にはずっと速くなった。 キャッシュ検索とは、以前にも書いたが、今回は、 編集回数200回以上、登録ユーザ20名以上の記事だけを別テーブルにした。 これがキャッシュ。 全部でおよそ16000ページしかなく、ここだけ検索かければかなり速い。 全データはおよそ100万件弱ある。 ていうかここ以外のページを普通にリンクたどってたどりつくのはかなり難しい。 まあ実用上特に問題なかろうと。 ロングテールをぶちきってるわけだな(笑)。

代わりにランダム表示などはやや遅くなったので、まあいらんわなと削除。

関連する人気記事が異様に重くなってしまった。うーんと。 とりあえず無効化した。

大学は冒頭の一行がかならずテンプレートで自動生成されるようになっているので、 それに対応した。

        if /\{\{大学([^}]*?)\}\}/ =~ t
                daigaku = $1
                /大学名=(.*)\s*\|/ =~ daigaku
                name = $1
                /ふりがな=(.*)\s*\|/ =~ daigaku
                kana = $1
                /学校種別=(.*)\s*\|/ =~ daigaku
                type = $1
                /本部所在地=(.*)\s*\|/ =~ daigaku
                place = $1
                /国=(.*)\s*\|/ =~ daigaku
                nation = $1
                text = "'''#{name}'''(#{kana})は、#{place}に本部を置く#{nation}の#{type}大学である。"
        end

こんな感じ。 Rubyですね。 また、index.phpでは内部リンクをアンカータグに書き換えているのだが、正規表現が自力ではわからず、 仕方なくmediawikiのソースをのぞいてみる。

$summary = preg_replace('/\'\'\'(.+?)\'\'\'/u', '<b>$1</b>', $summary);
$summary = preg_replace('/\[\[([^\]\|]+)\|([^]]+?)\]\]/u', "<a href=\"$jawiki$1\">$2</a>", $summary);
$summary = preg_replace('/\[\[([^\]]+?)\]\]/u', "<a href=\"$jawiki$1\">$1</a>", $summary);

preg_replace使ってさくっとこんな感じでよさそう。

テンプレートも抽出することにした。