トップ 一覧 検索 ヘルプ RSS ログイン

日記/2005-9-19の変更点

  • 追加された行はこのように表示されます。
  • 削除された行はこのように表示されます。
!!はてなキーワードへのリンクを張る「Hatenize」プラグイン完成
とりあえず完成して、ここへ仕込んでいる。リンク張りまくりだ(笑)
!入手
まず、http://aaa-www.net/~typer/hatenize.tar.gzと共に、http://www.dan.co.jp/~dankogai/cgi/hatenize/ から、hatena2list.plとmk_trie_regexp.plを入手します。hatenize.tar.gzを伸長すると、2つのパッチと3つのプラグインが入ったディレクトリがあります。
!プラグイン設置
3つのプラグインの内、anotherlinkはキーワードパーサ乗っ取りと拡張を行ない、hatenizeがその拡張機能によりはてなキーワードへのリンクを張るプラグインとなっています。
まずはこの2つを設置して有効にしてください。この時点では今までと変わらないはずです。エラーがなくなにも変わらなければ成功です。
testlinkはテスト用のプラグインで、これを有効にすると、「testlink」にhttp://example.com/へのリンクが張られるはずです。確認用にどうぞ。
!キーワード正規表現ファイルの作成
次にキーワード正規表現ファイルの作成を行ないます。
この方法には2つあり、一つはcgiに行なわせる方法、もう一つは手元で作成してサーバに送る方法です。

cgiに作成させる場合は、fswikiのログファイルがあるディレクトリ(標準では「./log」)に「hatena.rx」というファイルサイズが1以上で3日以上前の更新日のファイルを作り、cgiにアクセスすれば作り始めます。
ただし、この処理は非常に重く、私の環境(pen4 1.4GHz)で1分近くかかり、メモリもかなり消費しますので、環境によっては途中で強制終了をくらい、作る事が出来ないでしょう。
強制終了をくらった場合、サーバにゴミファイルが出来ている可能性があります。先ほどのhatena.rxと同じ場所に数字のみのファイルが出来ていたら消しておいてください。また、hatena.rxの更新日時が更新されていると思いますが、中身は変わっていないと思います。再度挑戦する場合は、更新日時を3日以上前にすれば良いです。
ただし、やりすぎるとサーバ管理者に文句をいわれますからほどほどに。

さて、手元で作る場合、さっき取得したhatena2list.plにhatena2list.pl.patchというパッチをあてます。
もともとのhatena2list.plはutf8で出力するため、このパッチによりeucjpを出力するようにします。
パッチをあてたら、
 perl hatena2list.pl > hatena
としてキーワードを取得します。その後、
 perl mk_trie_regexp.pl hatena
とすると、先ほどのキーワードを読み込み「hatena.rx」に正規表現を出力してくれます。大体1.6Mbyte程度になると思います。
これをfswikiのログディレクトリ(標準では「./log」)に置いてください。

キーワード正規表現ファイルの設置に成功すると、hatenizeプラグインが働きだし、そこかしこにリンクが作られると思います。
このhatena.rxは、cgiからの書き込み権があると3日毎にはてなからキーワードを取得して自動更新します。ただ、先ほどのように、この処理は非常に重いため、自動更新をしても大丈夫か、検討する必要があるでしょう。書き込み権がなければ自動更新はしません。

!はてなキーワードリンクにスタイルを設定する
さて、このパッチによりあちこちにリンクが作られたと思います。しかし、このままだとあまりに目立ち、不自然すぎ(笑)
そこで、これまで触れていなかったparser_add_style.patchの出番です。
これは「lib/Wiki/Parser.pm」と「lib/Wiki/HTMLParser.pm」を変更し、はてなキーワードリンクにクラス属性を付与するパッチです。
このパッチをあてて、ユーザ定義スタイルに、
 a.hatena {
   text-decoration: none;
   color: #000000;
   border-bottom: dotted 1px #d0d0d0;
 }
等を加えれば目立たなくなります。

それでは「どうぞご利用ください。」:-)

[追記]
そういえば書いていなかった事が。
当初Wiki::InterWikiを乗っ取る予定でしたが、これって実は有効順位が高く、他ページへのリンクより優先されてしまう(笑)
そんなわけで、Wiki::Keywordを乗っ取りました。