
MovbleType には標準でコメントのスパムフィルタが付いていますが、何もしないとそれをすり抜けてくるコメントが多数来ます。たまりたまった英文コメントが 10 万件 を超えてしまったので何とかすることにしました。
mt-keystrokes プラグイン
何とかするには、人間が 投稿 ボタンを押したときのみ、コメントを受け付けるようにすればいいわけです。これをシンプルに実現してくれるのが mt-keystrokes プラグイン 。
Keystrokes for Movable Type – cosmos blog
http://www.krcube.net/blog/archives/2009/06/keystrokes_for_movable_type.html
技術的には以下のようにして実現しています。
- クライアントサイド
 - 
以下の場合に 
$FILED_NAME(初期値 :strokes)パラメータの値を 1 にする。<textarea>内でkeypressイベントが起こったとき。- 投稿 ボタンで 
clickイベントが起こったとき。 
 - サーバーサイド
 - 
$FIELD_NAMEパラメータが真値ならばコメントを受理する。 
これだけです。シンプルですね。
尤も、シンプルであるが故に $FIELD_NAME パラメータに真値を与えればスパムコメントし放題です。初期値の strokes というのは余りに単純なので、別の値にした方がいいかもしれませんね。
インストール
ダウンロード
ダウンロードは公式サイトで行えばいいのですが、最新版の v0.1.5 と書いてあるリンクは 0.1.4 のものです。 何ですかね。この罠仕様。
というわけで、v0.1.5 へのリンクもまとめて貼っておきます。
MT-Keystrokes
http://overstated.net/projects/mt-keystrokes/
v0.1.5
http://overstated.net/projects/mt-keystrokes/keystrokes-0.1.5.tar.gz
http://overstated.net/projects/mt-keystrokes/keystrokes-0.1.5.zip
スクリプトの修正とインストール
解凍すると出てくる keystrokes.pl がプラグイン本体なのですが、これは MovableType v3 時代(古い!)のものなので、少々修正する必要があります。
--- keystrokes.pl.orig  2005-04-04 23:15:01.000000000 +0900
+++ keystrokes.pl       2012-09-23 09:15:24.000000000 +0900
@@ -63,7 +63,7 @@
 use MT::Plugin;
 use MT::Template::Context;
-return 1 unless $MT::VERSION =~ m(^3\.);
+#return 1 unless $MT::VERSION =~ m(^3\.);
 my $plugin = MT::Plugin->new({
     name => "MT-Keystrokes v$VERSION",
@@ -89,7 +89,7 @@
                my $keystrokes = 0;
                $keystrokes = $q->param($FIELD_NAME) if $q->param($FIELD_NAME);
                $eh->error("keystroke failed: " . $obj->email) if $LOG && $keystrokes < 1;
-               $eh->error("keystroke id: " . $obj->blog_id);
+        #$eh->error("keystroke id: " . $obj->blog_id);
                return $keystrokes > 0
        }
        else { return 1 }
後は必須ではありませんが、37 行目の $FILED_NAME は複雑なものに変えておくといいかもしれません。
our $FIELD_NAME = 'strokes';
修正が終わったら mt/plugins にコピーして、MovableType を再起動しましょう。
$ cp keystrokes.pl /path/to/mt/plugins # MovableType の再起動(Plack/PSGI で稼働している場合) $ cd /path/to/mt $ sudo kill `cat pids/mt.pid` # 従来通り Apache で稼働している場合 $ sudo /usr/sbin/apachectl graceful
設定
ここでは MovableType v5.2 の Smart Blog テーマ を使っているものとします。
コメント入力フォーム テンプレートを編集します。変更点は以下の 3 点です。
<form>タグ直下に<$MTKeystrokes$>タグを置く。
<form method="post" action="<$mt:CGIPath$><$mt:CommentScript$>" name="comments-form" id="comments-form" onsubmit="return mtCommentOnSubmit(this)"> <$MTKeystrokes$>
<textarea>タグに 記述を追加。
<textarea id="comment-text" name="text" required="required" onfocus="mtCommentFormOnFocus()" onkeypress="keystrokes(this.form)" > <mt:If name="comment_preview"><mt:CommentBody autolink="0" sanitize="0" convert_breaks="0" encode_html="1"></mt:If></textarea>
- 投稿 ボタンに記述を追加。二箇所あるのでどちらも修正してください。
 
<input type="submit" accesskey="s" name="post" id="comment-submit" class="primary button" value="投稿" onkeypress="keystrokes(this.form)" />
以上です。後はブログ記事を再構築しましょう。
まとめ
簡単な修正でスパムコメントがすっぱりなくなってしまいました。効果覿面です。
上にも書きましたように $FILED_NAME パラメータが簡単に類推されてしまうのは欠点ですので、再構築のたびに値が変わるようにするといいかもしれませんね。
