MovableType で、言及リンクのないトラックバックを弾く
言及リンクのないトラックバックは是か否か問題に関して、naoya さんが Movable Type で言及リンクのない TrackBack ping を弾くプラグインをさくっと作成して回答しているのがスマートだなぁと思ったのでしたが、うちとこはいまだに MT の 2.661 なんて古いバージョン(かつ、「Movable Type 日本語化手順」の EUC-JP 対応パッチをあてたもの)を使っていて、せっかくのプラグインを利用することができません……。しかたないので、まったくもってスマートさに欠けますが、MT/App/Trackback.pm を改造して対応してみました。つっても、単に naoya さんのコードをくっつけて、ちょろっといじっただけですが……。
$ diff -u Trackback.pm.orig Trackback.pm > Trackback.pm.patch $ cat Trackback.pm.patch --- Trackback.pm.orig 2004-07-03 14:18:19.000000000 +0900 +++ Trackback.pm 2005-07-04 22:17:57.237499638 +0900 @@ -140,6 +140,24 @@ $app->translate("Invalid URL '[_1]'", $url)); } + # Deny TrackBack ping which doesn't have any links to your blog. + # originally hacked by naoya (http://naoya.dyndns.org/~naoya/lib/mtplugins/mt-ban-norefertb.pl) + require LWP::UserAgent; + my $ua = LWP::UserAgent->new; + $ua->agent(__PACKAGE__); + $ua->timeout(10); + my $res = $ua->request(HTTP::Request->new(GET => $url)); + + return $app->_response(Error => $app->translate("Your server returned '[_1]'", $res->status)) + unless $res->is_success; + + require MT::Entry; + my $permalink = MT::Entry->load($tb_id)->permalink; + + return $app->_response(Error -> $app->translate("Need a link to my entry.")) + unless ($res->content =~ m/\Q$permalink\E/i); + ### + require MT::TBPing; require MT::Trackback;