Akismet: Bloqueando spam nos comentários do seu blog

Pra todo mundo que tem um blog, uma das coisas mais chatas é gerenciar os comentários. Mesmo que seu blog não seja tão popular assim, sem uma ferramenta anti-spam o espaço reservado aos comentários será invadido e tomado de assalto por mensagens com links para comprar Viagra, loteria, ninfetas russas etc. Neste post você aprende a utilizar o Automattic Kismet, ou Akismet para os íntimos.

Trata-se de um esforço conjunto entre desenvolvedores do mundo inteiro para impedir o avanço dos spammers nos blogs e é diretamente apoiado pela ferramenta de publicação Wordpress.

Plugin do Wordpress

Se o seu blog roda em Wordpress, provavelmente já tem instalado o plugin do Akismet. Caso não tenha, basta visitar o site oficial do projeto e fazer o download da última versão. Uma vez instalado e ativado o plugin, os comentários com “cara” de spam são filtrados e ficam dependendo aprovação para publicação.

Screenshot

Direto no PHP

Você não usa Wordpress e sim uma solução própria em PHP. No problemo, amigo! O desenvolvedor Alex disponibilizou uma classe simples para PHP5+ facilitando a implementação do anti-spam nos comentários do seu blog.

E se o seu servidor ainda só dá suporte a PHP4 (!), Bret Kuhns tem uma classe pra você. Vou focar aqui na versão 5 do PHP e na primeira classe citada.

Exemplo

Antes de mais nada você vai precisar de uma chave da API do Wordpress. É de graça, basta adquirir uma em http://en.wordpress.com/api-keys/. Na hora de instanciar a classe, precisamos também passar a URL do blog.

Para analisar o comentário, o Akismet vai precisar 5 parâmetros: nome, email e site do autor do comentário; conteúdo do comentário; e o link para o post.

Confira um exemplo simples:

$wp_api_key   = '123mudar'; // coloque aqui sua chave
$blog_url     = 'http://meublog.com'; // a URL do seu blog

$antispam = new Akismet( $blog_url, $wp_api_key );

$antispam->setCommentAuthor( $name );
$antispam->setCommentAuthorEmail( $email );
$antispam->setCommentAuthorURL( $site );
$antispam->setCommentContent( $comentario );
$antispam->setPermalink( 'http://meublog.com/post' ); // link para o post do comentário

if( $antispam->isCommentSpam() )
{
  $spam = true;
}
else
{
  $spam = false;
}

O método isCommentSpam retorna, após analisar os dados do comentário, se o mesmo é spam ou não. No exemplo acima estou apenas armazenando na variável spam true ou false. Ali naquele if você implementa sua função para marcar o comentário como spam ou simplesmente não o cadastra no banco de dados.

Tenha em mente que o Akismet não é 100% garantido e alguns comentários que são spam podem ainda ser publicados automaticamente, do mesmo modo que comentários reais podem ser marcados como spam.

Outra coisa importante é que o Akismet não precisa necessariamente ser utilizado em um formulário de comentários: vale também para forms de contato, cadastro entre outros.

A página de downloads do Akismet oferece ainda plugins e classes para outras linguagens, frameworks e sistemas, como .Net, Ruby on Rails e o framework PHP CodeIgniter.