lj + Akismet

After putting Akismet in last night, I woke up this morning to find that 40 comments had been blocked. Yay, Akismet! Still, a few got through, and I wanted to submit those back to Akismet. A few lines of code and all is done. Who said other people’s Perl was hard to read?

  --- cvs/livejournal/cgi-bin/talklib.pl	2007-07-05 15:44:25.186758848 -0400  +++ cgi-bin/talklib.pl	2007-07-16 11:08:52.073345947 -0400  @@ -1764,6 +1764,25 @@           return 1 unless $ip;       }     +    if($LJ::DO_AKISMET) {  +      my $akismet = Net::Akismet->new(KEY => $LJ::AKISMET_KEY,  +                                      URL => 'http://www.openweblog.com/',  +                                     ) or die('Key verification failure!');  +  +      my $verdict = $akismet->spam(USER_IP                 => $ip,  +                                   COMMENT_CONTENT         => $body,  +#                                   REFERRER                => $referer,  +                                  ) or die('Is the server here?');  +  +      if ($verdict) {  +        warn "Akismet accepted spam report: $ip, $subject\n";  +        return LJ::server_down_html();  +      }  +      else {  +        warn "Akismet failed on spam   report: $ip, $subject\n";  +      }  +    }  +       # step 3: insert into spamreports       $dbh->do('INSERT INTO spamreports (reporttime, posttime, ip, journalid, posterid, subject, body) ' .                'VALUES (UNIX_TIMESTAMP(), UNIX_TIMESTAMP(?), ?, ?, ?, ?, ?)',    --- cvs/livejournal/htdocs/talkpost_do.bml	2007-02-10 13:49:08.543614258 -0500  +++ htdocs/talkpost_do.bml	2007-07-16 11:04:11.060038865 -0400  @@ -31,6 +31,31 @@          return LJ::server_down_html() if $LJ::SERVER_DOWN;     +    if($LJ::DO_AKISMET && $POST{'usertype'} eq 'anonymous') { # akismet check  +      my $ip = $ENV{'REMOTE_ADDR'};  +      my $body = $POST{'body'};  +      my $referer = $ENV{'HTTP_REFERER'};  +      my $subject = $POST{subject};  +  +      my $akismet = Net::Akismet->new(KEY => $LJ::AKISMET_KEY,  +                                      URL => 'http://www.openweblog.com/',  +                                     ) or die('Key verification failure!');  +  +      my $verdict = $akismet->check(  +                        USER_IP                 => $ip,  +                        COMMENT_CONTENT         => $body,  +                        REFERRER                => $referer,  +                ) or die('Is the server here?');  +  +      if ('true' eq $verdict) {  +        warn "Akismet reports spam: $ip, $referer, $subject\n";  +        return LJ::server_down_html();  +      }  +      else {  +        warn "Akismet reports no spam: $ip, $referer, $subject\n";  +      }  +    }  +       LJ::need_res('stc/display_none.css');          # Set the title to be for an error, it will be changed later