Utilizzare il filtro antispam di Akismet con PHP

Akismet è un servizio di filtraggio dello spam offerto dalla Automattic, l'azienda maggiormente impegnata nello sviluppo di Wordpress. In questo articolo vedremo come invocare Akismet nei nostri script PHP per ricevere una valutazione sulla bontà dei commenti inviati dagli utenti attraverso un classico form HTML.

Il servizio di filtraggio di Akismet è gratuito per utilizzo personale, previa registrazione a questo indirizzo. Completata la registrazione si riceverà via mail un codice personale che, come vedremo negli esempi tra breve, servirà per avere accesso al servizio.

La comunicazione tra Akismet ed il nostro script PHP deve avvenire via rete, fortunatamente non dobbiamo preoccuparci dei dettagli di tale interazione poiché sono disponibili due classi PHP che ne nascondono la complessità.

Iniziamo con la classe PHP5 Akismet, scaricabile a questo indirizzo. Per vederla in azione prepariamo prima un form col quale un ipotetico utente può inviare un commento al nostro sito.

- form.htm

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="it-it" lang="it-it" dir="ltr">
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
        <title>Test Akismet</title>
    </head>
    <body>
        <form method="post" action="form.php" >
            <fieldset>
                <legend>Invia un commento</legend>
                <label>Nome:<br />
                    <input type="text" name="nome" />
                </label>
                <br />
                <label>Email:<br />
                    <input type="text" name="email" />
                </label>
                <br />
                <label>Sito web:<br />
                    <input type="text" name="url" />
                </label>
                <br />
                <label>Commento:<br />
                    <textarea cols="20" rows="4" name="commento"></textarea>
                </label>
                <br />
                <input type="submit" name="invia" value="Invia" />
            </fieldset>
        </form>        
    </body>
</html>

Nonostante il form sia molto semplice contiene i classici campi di un modulo di commenti: nome, email e URL dell’utente, testo del messaggio.

Passiamo quindi a vedere come utilizzare la classe PHP5 Akismet.

- form.php

<?php
include 'Akismet.class.php';

// mettere qui il proprio codice Akismet
$codice_akismet = '************';

// impostare l'URL del proprio sito
$url_sito = 'http://www.miosito.it';

$akismet = new Akismet($url_sito, $codice_akismet);

$akismet->setCommentAuthor($_POST['nome']);
$akismet->setCommentAuthorEmail($_POST['email']);
$akismet->setCommentAuthorURL($_POST['url']);
$akismet->setCommentContent($_POST['commento']);
$akismet->setPermalink('http://www.miosito.it/articolo-da-commentare');

if ($akismet->isCommentSpam()) {
    echo 'Il commento non è stato approvato!';
} else {
    echo 'Il commento è stato approvato';
}

Lo script PHP si apre con l’inclusione della classe Akismet.class.php, responsabile della comunicazione con il filtro antispam. Nella variabile $codice_akismet viene conservato il codice personale di Akismet di cui abbiamo parlato all’inizio. Oltre al codice, per creare un oggetto Akismet è necessario passare al costruttore anche l’URL del nostro sito.

Le successive istruzioni permettono di specificare i dati inseriti dall’utente nel form (nome, email e URL dell’utente e testo del commento) ed in più l’URL della pagina che riceve il commento (che quindi cambia da pagina a pagina!).

Infine richiamando il metodo isCommentSpam() è possibile richiedere la valutazione del filtro antispam di Akismet sui dati precedentemente impostati. Se tale metodo restituisce true allora allora si trattava di spam.

La classe PHP5 Akismet, oltre alla verifica dei commenti, permette anche di segnalare ad Akismet un messaggio di spam, semplicemente sostituendo nello script precedente la chiamata al metodo $akismet->isCommentSpam() con $akismet->submitSpam(). Se invece Akismet ha erroneamente valutato un commento come spam, possiamo segnalare il falso positivo utilizzando il metodo $akismet->submitHam().

Nella prossima pagina vedremo come invocare il filtro antispam di Akismet utilizzando lo Zend Framework.

Pagine: 12

2 commenti

1 Marco Grazia martedž 25 ottobre 2011, ore 10:49
Se lo stai usando per il forum sappi che è troppo incisivo.
2 Gianni Tomasicchio mercoledž 16 novembre 2011, ore 19:51
Effettivamente ho riscontrato diversi falsi positivi e quindi ho deciso di utilizzarlo solo per segnalare i contenuti sospetti all'attenzione dei moderatori, senza bloccarne la pubblicazione.
Effettua l'accesso o registrati per inserire un commento