COREBlog2 でのトラックバックスパム対策(その1)
以前から COREBlog2 簡易 trackback spam 対策 によって、このブログにトラックバックスパムがこないようにしていたんですが、気づいたらコードがなんか変わっていたようで、エラーを出すようになっていました。(汗)
# なので、いくつか正しいトラックバックも落としちゃっていたような感じがします。
というわけで、もう一回トラックバックスパム対策をきちんとやってみようと思います。
基本的には以前と同じように、トラックバックスパムに含まれている単語をチェックする形式にしようと思うので、現在のスパムの中身を解析して見ます。
まずは、カスタマイズしていた tbping スクリプトを削除(または違う名前に)します。
すると、トラックバックスパムが来まくると思われるので、トラックバックのワークフローを切り替えます。私の場合は portal_workflow で初期状態が private で published に変更できるワークフローを作成して、 COREBlogTrackback に対してそのワークフローを設定しました。
それから少しサイトをほうっておいてトラックバックスパムを貯めてから、下記のスクリプトを実行して出現する単語の数を数えます。
ちなみに、初期状態では Python Script では使えない re モジュールとか使ってますので、 PythonScript で標準以外のモジュールを使う に記述したような形で使えるようにします。
from re import compile
NON_WORD_REGEX = compile(r"[\W\-]+")
# private 状態のトラックバックを検索
catalog = context.portal_catalog
results = catalog.searchResults(meta_type='COREBlogTrackback', review_state='private')
words = {}
for result in results:
tb = result.getObject()
# タイトルやブログの名前を単語に分割
s = " ".join((tb.title, tb.blog_name, tb.url, tb.excerpt))
s = NON_WORD_REGEX.sub(" ", s).lower().split()
# 出現した単語の数を数える
for word in s:
words[word] = words.get(word, 0) + 1
# 単語を出現数順に並べ替える
words_tuple=words.items()
words_tuple.sort(lambda x,y:y[1]-x[1])
for word, count in words_tuple:
print count, word
return printed
そして、このスクリプトを実行した結果が添付の画像です。
buy, http, com みたいな一般的な単語は抜いて、次に作成するトラックバックスパム対策用のスクリプトで単語リストとして使用します。
(つづく)
-
- ¦
- 固定リンク
- ¦
- コメント (0)
- ¦
- トラックバック (0)
- トラックバック用URL:
- http://takanory.net/takalog/965/tbping