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
うーむ、やっぱり何らかの文字列がないとダメっぽいなー。
WEB+DB PRESS Vol.45 と 初めてのRuby の2冊を購入。Web+DBの方は
が面白かった。初めての Ruby は通勤途中にぱらぱらと眺めている途中なのでまだ2章。感想はあとで書く。
comment_author_urlに nilを代入すると、comment_author_urlが送られなくなってしまいます。typepadは(空文字列でもいいので)comment_author_urlを必ず送らなければいけないようです。<br>なので、<br>as.comment_author_url = ''<br>とすればOKと思います。少なくともライブラリ開発時点ではそうでした。