リンク切れをチェックして表示する Movable Type 用のプラグインを書くことにした。まずは,コマンドラインで起動する Perl スクリプトを作って動作確認を行う。
ブログからのリンク先が消滅しているかどうかを,クリックする前に知りたい。HTML のタグで適当なものがないか探したが,見当たらない (nlog(n): リンク切れを示すタグが欲しい)。そこで,クラスでリンク切れ表示を実装することにした。
概要は次の通り。
ステータスコードが 400 番台であればクライアントエラーで,よくあるのが「404 Not Found」。500 番台は相手サーバのサーバエラーで,「500 Internal Server Error」などがある (HTTPステータスコード - Wikipedia)。どちらもアクセスして嬉しくないので,ここではバッドリンクと呼ぶ。
Movable Type には,リンク切れチェックプラグインがすでに公開されている (CheckLinks | Plugins for Movable Type | staggernation.com)。しかし,これは記事の最後にリストアップする形式なので,私がやりたいことは実現できない。
さて,Perl プログラミングに詳しくない人間がスクリプトを書くには,何か手本が必要。材料を集めてみる。
これで書いてみることにする。サンプルプログラム hrefsub のコマンドライン引数の処理は上手い。勉強になる。使わないんだが。
HTTP::SimpleLinkChecker で UTF-8 のページにアクセスすると次のような文句を言われる。
そこで,「$ua->parse_head(0);」でヘッダの解釈を行わないようにする (Parsing of undecoded UTF-8 will give garbage : Protocol.pm - mumumu の日記)。
あまり美しくないが,書いたのは次のコード。
クラスを追加するのに,「$attr->add('class' => 'badlink');」みたいに書けると格好いいんだけど。なんだかそのあたりが直接ガリガリ書くようになってしまっている。
このスクリプトでは,リンク切れの場合,問答無用に「class="badlink"」を追加するので,HTML には制約がある。つまり,a タグには class 属性がないことが前提である。もともと何かの class 属性がある場合でも,その後に class 属性を追加してしまうのだ。
動作確認は,コマンドラインから次のように指定すればよい。
後はこれにオマジナイを追加すればプラグインができる。
2007年6月7日追記:
プラグインを公開しました (nlog(n): リンク切れチェックプラグイン 0.3)。
Master Archive Index
Total Entry Count: 1957