Here is Net::Akismet.pm, an object-oriented version of perl library to call Akismet.
package Net::Akismet;
use strict;
use LWP::UserAgent;
use URI::Escape;
use vars qw($VERSION @ISA);
$VERSION = '0.10';
sub new () {
my $param = shift;
my $class = ref($param) || $param;
my $self = {};
bless($self, $class);
$self->_initialize(@_);
return $self;
}
sub _initialize {
my ($self) = shift;
my %args = @_;
my $ua = new LWP::UserAgent;
$self->{UA} = $ua;
$self->{APIKEY} = $args{APIKEY};
$self->{BLOG} = $args{BLOG};
$ua->agent($args{AGENT} || 'Perl ' . $] .'| Net::Akismet/0.1');
$ua->proxy($args{PROXY}) if $args{PROXY};
return;
}
sub verify_key {
my ($self,$apikey,$blog) = @_;
my $request = HTTP::Request->new('POST',
'http://rest.akismet.com/1.1/verify-key');
my %query = (key=>$self->{APIKEY});
$query{blog}=$self->{BLOG} if($self->{BLOG});
return $self->post($request,\%query);
}
sub comment_check {
my ($self,$query) = @_;
return $self->submit($query,'comment-check');
}
sub submit_spam {
my ($self,$query) = @_;
return $self->submit($query,'submit-spam');
}
sub submit_ham {
my ($self,$query) = @_;
return $self->submit($query,'submit-ham');
}
sub submit {
my ($self,$query,$command) = @_;
my $request = HTTP::Request->new('POST',
'http://' . $self->{APIKEY} . '.rest.akismet.com/1.1/' . $command);
return $self->post($request,$query);
}
sub post {
my ($self,$request,$query) = @_;
my $ua = $self->{UA};
my $query_string = '';
my $key;
foreach $key (keys(%$query)){
$query_string .= $key . '=' . uri_escape($query->{$key}) . '&';
}
unless($query->{blog}){
$query_string .= 'blog=' . $self->{BLOG};
}
$request->content_type('application/x-www-form-urlencoded; charset=UTF-8');
$request->content($query_string);
my $response = $self->{UA}->request($request);
return $response->as_string();
}
1;
You can use it as follow.
use Net::Akismet;
my $q = {blog=>'あなたのblogのトップページのURI',
user_ip=>'投稿者のIPアドレス',
user_agent=>'投稿者の user agent',
referrer=>'投稿者の referrer',
permalink=>'投稿先の permalink',
comment_type=>'comment, trackback, pingback のいずれか',
comment_author=>'投稿者の名前',
comment_author_email=>'投稿者の mail address',
comment_author_url=>'投稿者のURL',
comment_content=>'コメント本文',
};
my $apikey = 'ここにあなたの API Key を書いてね';
my $akismet = Net::Akismet->new(APIKEY=>$apikey,BLOG=>$q->{blog});
if($akismet->comment_check($q) eq 'true'){
# ham ですな
}else{
# spam ですな
};
Pod? Uh, I’ll write when I have time…


January 26th, 2006 at 12:34
[...] おお、いつの間にか CPAN に Net::Akismet が登録されちょる。.bg てことはブルガリアの人か? 例の comment/trackback spam を撃ち落とすサービス Akismet の API を perl から使うためのライブラリで、私が前に作ったやつ と機能的には同じですが、たぶんブルガリアの人の方がちゃんとメンテしてくれると思う。 UTW tags : akismet, cpan, library, perl, spam, wordpress [...]