Kentaro Kuribayashi's blog

Software Engineering, Management, Books, and Daily Journal.

MovableType で、言及リンクのないトラックバックを弾く

言及リンクのないトラックバックは是か否か問題に関して、naoya さんが Movable Type で言及リンクのない TrackBack ping を弾くプラグインをさくっと作成して回答しているのがスマートだなぁと思ったのでしたが、うちとこはいまだに MT の 2.661 なんて古いバージョン(かつ、「Movable Type 日本語化手順」の EUC-JP 対応パッチをあてたもの)を使っていて、せっかくのプラグインを利用することができません……。しかたないので、まったくもってスマートさに欠けますが、MT/App/Trackback.pm を改造して対応してみました。つっても、単に naoya さんのコードをくっつけて、ちょろっといじっただけですが……。

Trackback.pm.patch

$ 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;

まぁ、こんなことしといてなんですが、言及リンクのないトラックバックの全てが悪いとは思っていなかったりするのですがw