最近、ちょこちょこいじってた内容を覚書しときます。既出ネタなのでエントリーあげするほどのネタでも無いのですが。(苦笑)

 

commentpre.jpg■リアルタイムでコメントプレビュー

→ TB to コメント・プレビュー by やむやむ

個別エントリーアーカイブのコメントテキストエリア直後に下記ソースを追加(ソースの内容は追記以降に転記)。表示設定をスタイルシートでやろうとしたのですが、ieで見た時に意図したように表示されなかったので、やむやむさんと同じように直接スタイルを設定(青字部分)して対処。

 

quasi.jpg■コメント・トラックバックスパム対策

→ TB to Quasi-Spam Filter Plugin by Ogawa::Memoranda
→ TB to トラックバックスパム対策(その1) by 小粋空間
→ TB to トラックバックスパム対策(その2) by 小粋空間

Ogawa::Memorandaさんのところより、Quasi-Spam Filter PluginをDL、解凍。トラックバックスパムに関しては、デフォルトでは概要のみの内容にて判定する仕様となっているので、小粋空間さんのエントリーを参照し、タイトルも判定するように修正。設定及び修正内容は追記に転記。


■リアルタイムでコメントプレビューのソース

<p>
<label for="comment_preview">Comment Preview :</label>
</p>
<div class="comment" style="background-color:#f6f6f6; padding:5px;">
<p><div class="entry_body" id="comment_preview">ご利用のブラウザ、設定ではご利用になれません。
</div>
<script type="text/javascript">
<!–
// コメントプレビュー機能のスクリプトです
function doCommentPreview(mode) {
// コメント入力テキストエリアのidを指定します
var textAreaId = ‘text’;
// プレビューを表示するタグのid属性
var previewAreaId = ‘comment_preview’;
// コメントプレビュー欄初期表示文字 または、画像タグ
// コメントが何も入力されていない時に表示される文字になります
var initString = ‘ここにコメントのプレビューが表示されます。’;
if (!isDoCommentPreview()) return;
if (!getElementCommentPreview(textAreaId) || !getElementCommentPreview(previewAreaId)) {
return;
} else if (null != mode && mode == ‘init’) {
getElementCommentPreview(previewAreaId).innerHTML = initString;
return;
}
var s = getStringCommentPreview(textAreaId);
if (null == s || ” == s || ‘<br />’ == s) {
s = initString;
}
if (getElementCommentPreview(previewAreaId)) {
getElementCommentPreview(previewAreaId).innerHTML = s;
}
}
function getStringCommentPreview(e) {
var s = ”;
s = getElementCommentPreview(e).value;
s = s.split(‘&’).join(‘&’);
s = s.split(‘<‘).join(‘<‘);
s = s.split(‘>’).join(‘>’);
s = s.split(‘\”).join(‘"’);
s = s.split(‘\n’).join(‘<br />’);
return s;
}
function getElementCommentPreview(e, f) {
var l = (document.layers) ? 1 : 0;
if(l) {
f=(f) ? f : self;
var a = f.document.layers;
if (a[e]) return a[e];
for (var w = 0; w < a.length;) {
return getElementCommentPreview(e, a[w++]);
}
}
if (document.all) return document.all[e];
return document.getElementById(e);
}
function isDoCommentPreview() {
var ua = navigator.userAgent;
var doNotAgentList = [
ua.indexOf(‘Opera/6’) != -1,
ua.indexOf(‘Mac’) != -1 && ua.indexOf(‘MSIE 5’) != -1
]
for (var i = 0; i < doNotAgentList.length; i++) {
if (doNotAgentList[i]) return false;
}
return true;
}
doCommentPreview(‘init’);
//–>
</script>
</p>

■コメント・トラックバックスパム対策

・プラグインの設定:フィルタ対象の変更場所

# Set your spam pattern
our $COMMENT_PATTERN = ‘<h1>|<a\s‘; # H1 or A elements
our $TBPING_PATTERN = ‘<h1>|<a\s‘; # H1 or A elements

上記青文字部分がフィルタ対象。適宜変更して使用。

・プラグインの設定:コメント受信時のリアクションの変更

# Choose a method for rejecting Spam Comments from:
# ‘CommentFilter’, ‘CommentThrottleFilter’, ‘CommentError’,
# ‘CommentLongError’, ‘CommentRedirect’, ‘CommentEvilRedirect’
our $COMMENT_METHOD = ‘CommentFilter‘;

上記青字部分を下記変更することにより動作を制御。

・CommentFilter (デフォルト)
コメントが成功した場合と区別しません。”CommentFilter”というApplication Level Callbackを利用しています。
・CommentThrottleFilter
コメントが連続投稿制限に引っかかったように見せます。”CommentThrottleFilter”というApplication Level Callbackを利用しています。
・CommentError
シンプルなエラーメッセージだけ表示します。最もLight-weightな方法です。
・CommentLongError
親切なエラーメッセージを表示します。コメント欄に名前などを入力しなかったときなどと同様にコメント・エラーの表示をします。
・CommentRedirect
特定のURLにリダイレクトします。スパマーにイヤな画像などを見せてあげましょう。どのURLにリダイレクトするかは$URLという変数で定義されています。
・CommentEvilRedirect
スパマーがURL欄に入力したURLにリダイレクトします。URLを入力されていない場合には$URLという変数で定義されたURLにリダイレクトします。

・プラグインの設定:トラックバック受信時のリアクションの変更

# Choose a method for rejecting Spam Pings from:
# ‘TBPingFilter’, ‘TBPingThrottleFilter’, ‘TBPingError’
our $TBPING_METHOD = ‘TBPingFilter‘;

上記青字部分を下記変更することにより動作を制御。

・TBPingFilter (デフォルト)
トラックバックが成功した場合と区別しません。”TBPingFilter”というApplication Level Callbackを利用しています。
・TBPingThrottleFilter
トラックバックが連続送信制限に引っかかったように見せます。”TBPingThrottleFilter”というApplication Level Callbackを利用しています。
・TBPingError
シンプルなエラーメッセージだけ表示します。最もLight-weightな方法です。

・プラグインの設定:トラックバック判定仕様の変更

sub tbping_filter {
my ($eh, $app, $ping) = @_;
return !is_tbping_spam($ping->excerpt);
return !(is_tbping_spam($ping->excerpt) | is_tbping_spam($ping->title));
}
 
sub tbping_throttle_filter {
my ($eh, $app, $tb) = @_;
my $q = $app->{query};
return !is_tbping_spam($q->param(‘excerpt’));
return !(is_tbping_spam($q->param(‘excerpt’)) | is_tbping_spam($q->param(‘title’)));
}
 
sub tbping_error {
my $app = shift;
my $q = $app->{query};
my $mode = $q->param(‘__mode’) || $app->{default_mode};
return if $mode ne ‘ping’;
if (is_tbping_spam($q->param(‘excerpt’))) {
if (is_tbping_spam($q->param(‘excerpt’)) || is_tbping_spam($q->param(‘title’))) {
$app->add_methods(‘ping’ => sub { });
$app->_response(Error => ‘Spam TBPing!’, Code => 403);
}