トップ «前の日記(2008/07/01 (火) ) 最新 次の日記(2008/07/03 (木) )» 編集 RSS feed

HsbtDiary


2008/07/02 (水) [長年日記]

[tDiary][typepad][antispam][ruby] typepad antispam と Akismet の挙動の違い

7月になったので Test_SelectFilter ブランチを trunk にぶっこもうと最終チェックをしていたときに理解したメモ。

まず typepad antispam は verify-key メソッドが動いていないようで、でたらめな API キーを設定しても通ってしまうし、でたらめな API キーを設定して comment-check メソッドを呼び出しても spam 判定をしてくれる。

という API キーの状態を踏まえて、irb で 実際に挙動を確認してみた。動作チェックに使ったのはえろぺおさん作の TypePad AntiSpamライブラリRuby版をベースに初期値を突っ込んだもの。変更したものは coderepos に置いた。

で実際に動作チェックを irb でしてみる。まずは Akismet から

>> require 'as-antispam.rb'
=> true
>> as = AkismetAntiSpam.new( '66f515ebdae4' )
=> #<struct AkismetAntiSpam blog="http://blog.example.com/", user_ip="192.168.0.1", user_agent=nil, article_date="2008-05-31 01:24:00", permalink="http://blog.example.com/entry-1.html", comment_type="comment", comment_author="foo", comment_author_email="foo@bar.com", comment_author_url="http://blog.bar.com/", comment_content="Hello!">
>> as.check
=> true
>> as.comment_content = 'viagra'
=> "viagra"
>> r = as.check
=> true

ふむ、「viagra」というフレーズだとspam とはみなされないらしい。 次に typepad antispam で試す、APIキーは Akismetと同じものにする(でたらめ)

>> require 'tp-antispam'
=> true
>> tp = TypePadAntiSpam.new( '66f515ebdae4' )
=> #<struct TypePadAntiSpam blog="http://blog.example.com/", user_ip="192.168.0.1", user_agent=nil, article_date="2008-05-31 01:24:00", permalink="http://blog.example.com/entry-1.html", comment_type="comment", comment_author="foo", comment_author_email="foo@bar.com", comment_author_url="http://blog.bar.com/", comment_content="Hello!">
>> r = tp.check
=> true
>> tp.comment_content = 'viagra'
=> "viagra"
>> r = tp.check
=> false

ほう、typepad だと viagra は拒否するらしい。次に色々条件を変えてみる。まずは comment_author_url を nil にする。

>> as.comment_author_url = nil
=> nil
>> r = as.check
=> true

Akismet は結果に変化なし。

>> tp.comment_author_url = nil
=> nil
>> r = tp.check
=> true

えー、typepad は comment_author_url を空にするだけで同じ viagra でもスルーしてしまうのか。

この後、二時間くらい色々と条件を変えて試してみたんだけど、antispam サービスにリクエストするパラメータの組み合わせによって、同じコメント内容でも判定結果が異なるっぽい。とりあえず、typepad antispam の方も spam フィルタとしての機能は実現してるから問題は無いね。

追記

えろぺおさんのツッコミに従って nil ではなく、空文字で試してみた。

>> tp.comment_author_url = ""
=> ""
>> r = tp.check
=> true
>> tp.comment_author_url = "http://blog.bar.com/"
=> "http://blog.bar.com/"
>> r = tp.check
=> false

うーむ、やっぱり何らかの文字列がないとダメっぽいなー。

[Book]最近の買い物

WEB+DB PRESS Vol.45 と 初めてのRuby の2冊を購入。Web+DBの方は

  • OpenID 特集
  • Ruby-1.8.7 での変更点
  • iknow 開発の話

が面白かった。初めての Ruby は通勤途中にぱらぱらと眺めている途中なのでまだ2章。感想はあとで書く。


WEB+DB PRESS Vol.45
荒木 稔
技術評論社
¥1,078
初めてのRuby
Yugui
オライリージャパン
¥2,420

本日のツッコミ(全1件) [ツッコミを入れる]
# えろぺお (2008/07/02 (水) 12:38)

comment_author_urlに nilを代入すると、comment_author_urlが送られなくなってしまいます。typepadは(空文字列でもいいので)comment_author_urlを必ず送らなければいけないようです。<br>なので、<br>as.comment_author_url = ''<br>とすればOKと思います。少なくともライブラリ開発時点ではそうでした。