Personal tools

Akismet.pm

written by ultraviolet on

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…

Tags: , , ,


One Response to “Akismet.pm”

  1. pingback from Rauru Blog » Blog Archive » Net::Akismet

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

Leave Your Reply

XHTML: You can use these tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

« Back to text comment