Personal tools
You are here: Home Plone COREBlog2用簡易フィルタ
Document Actions

COREBlog2用簡易フィルタ

by seko last modified 2006-09-10 22:51

清水川さんによるCOREBlog2用簡易フィルター+ASCII判定 怪しい単語を含むコメントやトラックバックをはねる

buzzwordフィルタについては清水川さんが紹介されているものを採用させていただいた。
http://www.freia.jp/taka/blog/coreblog27c216613spam-filter/

2006年9月10日
要約がなかったり、短くてbuzzwordではじけないトラックバックが多発した。
そこで、要約の文字数字が短かったり、ASCII文字だけの時ははじくようにコードを追加した。

設定方法
buzz word(怪しい単語)判定スクリプトの作成:

「サイト設定」ー「Zope管理インターフェース(ZMI)」にいき、/blog/portal_skins/custom/の場所で、Script(Python)を追加する。
IDは、validateBuzzWords とし、 Parameter Listは、text といれる。
そして、次のコードを記入する。buzz_wordsのリスト部分に自分のところにくるspamに特有の単語を追加していく。

buzz_words = (
'casino',
'poker',
'url=',
'loan',
)

moderated=True
try:
if not moderated:
return moderated

s = str(text).lower()
for w in buzz_words:
if s.find(w) >= 0:
moderated = False
break
else:
moderated = True

except:
pass

return moderated

コメントを弾く:

「サイト設定」ー「Zope管理インターフェース(ZMI)」にいき、
「portal_skins (Controls skin behaviour (search order etc)) 」ー「COREBlog2」ー「 validateComment」をクリック。
上の方にあるCUSTOMIZEボタンをクリックすると、その内容が次のアドレスにコピーされてアドレスも変わる。
/portal_skins/custom/validateComment
このfor key の部分を次のように書き換える。古い部分は消してもよいが少し不安なので、コメント("""      """)にしておいた。

"""

for key in reqs:

if REQUEST.has_key(key) and not REQUEST[key]:

state.setError(key, 'Please enter a value', new_status='failure')

errors.append(key)

"""

for key in ['title', 'body', 'author', 'email', 'url']:
if REQUEST.has_key(key):
m = context.validateBuzzWords(REQUEST[key])
if not m:
state.setError(key, 'Pleae remove NG words.', new_status='failure')

if state.getErrors():

トラックバックを弾く:

外部pythonプログラムの作成
要約がASCII文字かどうかの判定はpykfモジュールを使うので予めインストールしておくこと。
zopeのExtensionsディレクトリに次の内容の判定プログラムを作っておく。

import pykf
def check_ascii(txt):
   is_ascii=False
   if pykf.guess(txt)==1:
     is_ascii=True
   return is_ascii


「サイト設定」ー「Zope管理インターフェース(ZMI)」にいき、
「portal_skins (Controls skin behaviour (search order etc)) 」ー「COREBlog2」ー「 tbping (Receive trackback)」をクリック。
上の方にあるCUSTOMIZEボタンをクリックすると、その内容が次のアドレスにコピーされてアドレスも変わる。
/portal_skins/custom/tbping
次のように修正を加える。

一つ目のif文は要約が10文字以下ならエラーを起こす
二つ目のif文は要約がascii文字ならエラーを起こす
三つ目はbuzzwordを含んでいたらエラーを起こす
#Try to add trackback
try:
#Send notify mail if need
#start by seko

if len(excerpt) < 10:
raise RuntimeError, 'short excerpt error'

if context.check_ascii(excerpt):
raise RuntimeError, 'ascii excerpt error'

url=form['url']
for text in [title, blog_name, excerpt,url]:
m = context.validateBuzzWords(text)
if not m:
raise RuntimeError, 'buzzword error'

# end modification

if context.getSend_trackback_notification():
同じディレクトリにASCII判定プログラムをcheck_asciiという名の外部pythonプログラムとして定義しておくこと。

こんな簡単な判定にわざわざ外部pytyonスクリプトを使うのが面倒な方は、pykfモジュールをzopeのpythonから使えるようにして判定すればよい。
やりかたは、こちら
« November 2017 »
Su Mo Tu We Th Fr Sa
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30
 

Powered by Plone, the Open Source Content Management System

This site conforms to the following standards: