WP plugin: マルチバイトコメント捕獲を表示 - akismet-multibyteview +α
前回までのあらすじ
西暦2006年――。日本では、スパム対策プラグイン Akismet によるコメント・トラックバック誤捕獲事件が多発。膨大な量のスパムの中から正規のコメントを探し出して救出することは、一般市民には極めて難しい作業であった。
そこに、一人の錬金術師が現れた。
日本語等マルチバイト文字を含むスパムのみを表示させる道具を作り、市井に無償で提供したのだ。それはあっという間に(うちには日本語のコメントしか来ないし、という)人々に広まり、改良を加えられながら、今日も日本中で愛用され続けているのであった。
power source* » WP: (続)Akismet de-spam view Hack
そうして平穏な日々を過ごしていた我々の元に、ニュースが飛び込んできた。
「何っ!?あの偉大な錬金術師がまた現れただと!?」
情報部に緊張が走る――。
あまりねらってなかったのですが、Akismet にマルチバイト文字を含むコメントだけを表示させる修正は結構人気で皆さん使われているようなので、これを Akismet のコアファイル修正なしで動くようにプラグイン化してみました。 よければつかってください。。
hiromasa.another :o) » akismet-multibyteview をリリースしました![]()
配役 (50音順・敬称略):
- 錬金術師: ひろまさ
それはともかく
2.3 にアップグレードして何が困ったかというと、Akismet 誤捕獲の有無を確認できないことです。失って分かるその大切さ。
ということで、コアの機能を確認するためにプラグインを控える中、ひろまささん作「akismet-multibyteview」を投入しました。
WordPress 標準添付スパム対策プラグイン Akismet の管理画面に日本語(マルチバイト文字)を含むコメントだけを表示するモードを追加するプラグインです。
WordPress Plugins/JSeries » akismet-multibyteview
アップして有効化して、管理パネルの
- Comments > Akismet Spam
- Dashboard > Latest Activity - Spam の件数のリンク
から Akismet 捕獲画面に行くと、「Normal View / Mutibyte Only View」切り替えボタンが出ました。
動作良好です。 (・∀・)d TB!
スクリプトの修正なしで動くのは、やっぱり簡単でいいなあ。
そうきたら、こう
ただ、マルチバイトスパムの有無は、捕獲画面に行って表示を切り替えるまで分かりません。今までは、ダッシュボードでチェックして、あれば見に行く、という行動パターンだったのです。失って分かるその大切さ、その2。
ということで、ぼのハックもプラグイン化してみました。
akismet-multibyte-count
ダッシュボードの Akismet の下に、次の表示を付加するプラグインです。
- 現在スパムとして捕獲中のコメント数
- そのうち、マルチバイト文字を含むコメント数
Akismet、akismet-multibyteview のお供として、よかったら試してみてください。
スクリーンショット
- 捕獲中スパムがないとき

- マルチバイトスパムがないとき

- マルチバイトスパムがあるとき

使い方
ファイル配布とかしたことないのでベタ打ちで。。
- 下記コードをテキストエディタにコピペして、
akismet-multibyte-count.phpとかで保存(文字コード UTF-8)。 plugins/ディレクトリ下へアップロード。- 管理パネルから有効化。
ご使用上の注意
- プラグインというかただの関数です。。よしなに整えて使ってやってください。orz
- 動作要件: WP 2.3 (に同梱の Akismet)以上
表示判定・捕獲中コメント数の算出に、Akismet 本体の関数akismet_spam_count()を拝借しています。古い Akismet では、同じ関数名で別のことをしているため、正しく表示できないかもしれません。 → ver.0.2 で改良 - ダッシュボードへの表示時に、他のプラグインのページの URL 取得方法が分からなかったので、Akismet 総捕獲数表示部分のリンクに頼ることにして割愛。
コード
2007-10-16: akismet-multibyteview に組み込んでいただけました。下記コードは不要です。リンク先から multibyteview 最新版をお使いください。
ver. 0.2 (2007-10-08) 古い Akismet でも動くようになったかもです。ME 2.0.4 に同梱されていた Akismet 1.15 でテスト。
<?php
/*
Plugin Name: akismet-multibyte-count
Plugin URI: http://bono.s201.xrea.com/2007/10/536-wp_akismet-multibyte-count/
Description: Akismet が現在スパムとして捕獲中のコメント数と、そのうちのマルチバイト文字を含むコメント数を、ダッシュボードに表示します。<a href="http://akismet.com/">Akismet</a>、<a href="http://wppluginsj.sourceforge.jp/akismet-multibyteview/">akismet-multibyteview</a> のお供にどうぞ。
Author: bono
Version: 0.2
Author URI: http://bono.s201.xrea.com/
*/
/* Copyright 2007 bono(じゃないような。。)
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
/******************************************************************************
* AkismetMultibyteCount
*****************************************************************************/
// ダッシュボードに件数表示
function akismet_stats_mbinfo() {
if ( function_exists(’ksd_spam_count’) ) {
$spam_count = ksd_spam_count(); // 古い Akismet で、現在捕獲中のスパム数を取得
} else {
$spam_count = akismet_spam_count();
}
if ( !$spam_count )
return;
$mbs_count = spam_mb_count();
echo ‘<ul><li>’.sprintf(__(’There are currently %1$s comments identified as spam.’), number_format($spam_count) ).’</li>’;
if ( $mbs_count ) {
echo ‘<li><strong>要チェック</strong>: スパムじゃないかもしれないコメントを ‘.$mbs_count.’ 件捕獲中です。</li>’;
} else {
echo ‘<li>この中に日本語を含むものはありません。</li>’;
}
echo ‘</ul>’;
}
// マルチバイトスパムの件数
function spam_mb_count() {
global $wpdb/* , $comments*/;
$count = $wpdb->get_var("SELECT COUNT(comment_ID) FROM $wpdb->comments WHERE comment_approved = ’spam’ AND LENGTH(comment_content) <> CHAR_LENGTH(comment_content)");
return $count;
}
add_action(’activity_box_end’, ‘akismet_stats_mbinfo’,11); // ダッシュボード Latest Activity 下部に表示
?>



よしとも :
October 8th, 2007 at 18:59
こんばんわ。よしとも@雑念ベースです。
早速プラグインを導入させていただきました。
便利なのでお気に入りのハックだったのですが、バージョンが上がるたびにコードを直すのが面倒でいつの間にかやめてしまっていたのです。おかげで幸せになれます。
古いバージョンへの対応OKです。1.2.1 で確認しました。自分でハックして対応させたのですが、報告しようとリロードしたらまったく同じ修正が・・・(^^;
なお、add_action の最後の引数は11だと Akismet より前になってしまって駄目でした。私のところでは15にしてうまくいっていますが、プラグインの多いところではこれでも駄目かもしれません。
以上、報告でした。
よしとも :
October 8th, 2007 at 19:18
アドホックですけど、次のコードでマルチバイトスパム表示の URL になります。こちらの環境ではこれでうまくいきました。
get_bloginfo(’wpurl’).’/wp-admin/admin.php?page=akismet-admin&multibyte=true’
ぼの :
October 16th, 2007 at 2:48
よしともさん、こんにちは。お返事遅くなってごめんなさいー。(>_< )
このページの変な文章に耐え、akismet-multibyte-count までたどり着いて使ってくださって、どうもありがとうございます。幸せと言ってもらえてうれしいですー。
今回 WP 2.3 に上げるまでよしともさんの切り替えハックを愛用していて、私もずっと幸せでしたー。
また、旧バージョンの対応方法がよしともさんの方法と同じとのことで、心強いです。(^-^)
そしてそして、ひろまささんからご連絡をいただいて、multibyte-count を akismet-multibyteview に組み込んでもらえることになりました。
昨日リリースされたので、よかったら使ってみてください。
hiromasa.another :o) » akismet-multibyteview 1.20 リリースしました。
マルチバイトスパム表示のリンクは、よしともさんのコードで使い始めたところだったのですけれど(ありがとうございます(^-^))、multibyteview に組み込むに当たってリバイズしてみました。
add_action のプライオリティは、できれば Akismet の近くに。。と思って 11 のままなのですけれども、自前の見出しを追加することで、表示位置がずれたときに表示が変になることだけ回避してあります。
私が持っている Akismet 最新版と旧バージョンでは、
add_action('activity_box_end', 'akismet_stats');というようにデフォルト(10)なので、multibyte-count のを 10 にすると Akismet の前になって、11 にすると Akismet の後ろに出ちゃって、よしともさんの現象が再現できなくて。。極端に大きい数字にすることも考えたのですが、間に他のプラグインが入ることもありうるし。。ううーん、難しい。。上手いこと対応できなくてごめんなさいです。。
よかったら、よしともさんの Akismet の数字が何になっているか教えてもらってもいいですか?
神はいった「Wordpressのスパム対策は、Akismetだけじゃ心もとないので、akismet-multibyteviewとwp-kumonosu入れとけ!」 | ねねとまつの小部屋 :
October 19th, 2007 at 20:03
[...] に、ぼのさんがつくってくださった、akismet-multibyte-count のソースコードをマージさせて頂いて version 1.20 [...]
よしとも :
October 20th, 2007 at 15:05
こんにちわ。よしともです。
ごめんなさい。11に戻したら普通に動きました・・・。
原因究明のためにプラグインフックのコードを追っかけてみたのですが、プライオリティは関係ないんじゃないかという結論に至ったのです。細かいことはブログのほうで書こうと思っていますが、プラグインファイルの include はファイル名順、フックの実行は登録とプライオリティの順に登録された関数を実行するだけでした。
11に戻してから数日経っていますが、問題なさそうです。エラーになった原因は謎のままということで(^^;
ぼの :
October 24th, 2007 at 0:13
よしともさん、こんにちは。動いて何よりですー。
もしまたおかしな挙動が見られるようでしたら、いつでも遠慮なくおっしゃってくださいね。
記事を楽しみにしております。。(^-^)