Verifica dei commenti

Questa è la chiamata che utilizzerai più spesso. Accetta una serie di argomenti e parametri relativi al contenuto inviato e restituisce un sì o un no. Le prestazioni possono peggiorare drasticamente se ometti alcuni dati. Più dati invii ad Akismet per ogni commento, maggiore sarà la precisione. Ti consigliamo di includere più dati del necessario piuttosto che troppo pochi.

Questo metodo viene chiamato con il seguente URL:

https://rest.akismet.com/1.1/comment-check

Importante: tutti i parametri devono essere inviati tramite il metodo POST.

Parametri

api_key (richiesto)
La tua chiave API Akismet. Puoi trovarla nella bacheca del tuo account su https://akismet.com/it/account/

blog (richiesto)
L’URL della Pagina Iniziale del sito che effettua la richiesta. Per un blog o un wiki corrisponde alla Pagina Iniziale. Nota: deve essere un URI completo, incluso http://.

user_ip (richiesto)
Indirizzo IP di chi ha inviato il commento.

user_agent
Stringa user agent del browser utilizzato per inviare il commento, in genere la variabile CGI HTTP_USER_AGENT. Da non confondere con lo user agent della tua libreria Akismet.

referrer (nota l’ortografia)
Qui devi inviare il valore dell’header HTTP_REFERER.

permalink
L’URL completo del contenuto a cui è stato inviato il commento.

comment_type
Una stringa che descrive il tipo di contenuto inviato.

Esempi:

  • comment: un commento del blog.
  • forum-post: un topic del forum.
  • reply: una risposta a un topic del forum.
  • blog-post: un articolo del blog.
  • contact-form: un invio da un modulo di contatto o da un modulo di feedback.
  • signup: un nuovo account utente.
  • message: un messaggio scambiato tra pochi utenti.

Puoi inviare un valore non presente nell’elenco qui sopra se nessuno di quelli indicati descrive accuratamente il tuo contenuto. Maggiori dettagli sono disponibili qui.

comment_author
Nome inviato insieme al commento.

comment_author_email
Indirizzo e-mail inviato insieme al commento.

comment_author_url
URL inviato insieme al commento. Invia solo un URL inserito manualmente dall’utente, non un URL generato automaticamente come l’URL del profilo dell’utente sul tuo sito.

comment_content
Il contenuto inviato.

comment_date_gmt
Il timestamp UTC di creazione del commento, in formato ISO 8601. Può essere omesso nelle richieste comment-check se il commento viene inviato all’API nel momento in cui viene creato.

comment_post_modified_gmt
Il timestamp UTC della pubblicazione dell’articolo, della pagina o della discussione a cui appartiene il commento.

blog_lang
Indica le lingue utilizzate nel blog o nel sito, in formato ISO 639-1, separate da virgola. Un sito con articoli in inglese e francese potrebbe usare “en, fr_ca”.

blog_charset
La codifica dei caratteri dei valori dei campi inclusi nei parametri comment_*, ad esempio “UTF-8” o “ISO-8859-1”.

user_role
Il ruolo dell’utente che ha inviato il commento. Questo parametro è facoltativo. Se lo imposti su “administrator”, Akismet restituirà sempre false.

is_test
Questo parametro è facoltativo. Puoi utilizzarlo quando invii query di test ad Akismet.

recheck_reason
Se stai inviando contenuti ad Akismet per una nuova verifica (ad esempio un articolo modificato o vecchi commenti in attesa che desideri ricontrollare), includi il parametro recheck_reason con una stringa che descriva il motivo della nuova verifica. Ad esempio, recheck_reason=edit.

honeypot_field_name
Se utilizzi un campo honeypot nella tua implementazione, includi nella richiesta sia il nome del campo sia il suo valore. Ad esempio, se hai un campo honeypot come <input type=”text” name=”hidden_honeypot_field” style=”display: none;” />, devi includere due parametri aggiuntivi nella richiesta: honeypot_field_name=hidden_honeypot_field e hidden_honeypot_field=[il valore dell’input].

comment_context
Il parametro comment_context fornisce informazioni di contesto sull’ambiente in cui è stato pubblicato il commento: un elenco di tag o categorie assegnati all’articolo del blog a cui appartiene il commento o al sito in cui è stato pubblicato il commento.

Specifica comment_context usando la notazione dei parametri di matrice in stile PHP: comment_context[]=cooking&comment_context[]=recipes&comment_context[]=bbq Tieni presente che i tag o le categorie devono provenire dall’articolo o dall’ambiente principale e non devono essere forniti da chi commenta.

Altre variabili d’ambiente del server
In PHP esiste un array di variabili d’ambiente chiamato $_SERVER che contiene informazioni sul server web stesso e una coppia chiave/valore per ogni header HTTP inviato con la richiesta. Questi dati sono estremamente utili per Akismet. Anche il modo in cui il contenuto inviato interagisce con il server può fornire indicazioni preziose, quindi includi il maggior numero possibile di queste informazioni.

Esempio in PHP

$data = array(
    'blog' => 'http://yourgroovydomain.com',
    'user_ip' => '127.0.0.1',
    'user_agent' => 'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2) Gecko/20100115 Firefox/3.6',
    'referrer' => 'http://www.google.com',
    'permalink' => 'http://yourgroovydomain.com/blog/post=1',
    'comment_type' => 'comment',
    'comment_author' => 'admin',
    'comment_author_email' => 'test@example.com',
    'comment_author_url' => 'http://www.example.com',
    'comment_content' => 'It means a lot that you would take the time to review our software.  Thanks again.'
);

akismet_comment_check( '123YourAPIKey', $data );

// Passes back true (it's spam) or false (it's ham).
function akismet_comment_check( $api_key, $data ) {
    $request = 'api_key=' . urlencode( $api_key ) .
        '&blog=' . urlencode( $data['blog'] ) .
        '&user_ip=' . urlencode( $data['user_ip'] ) .
        '&user_agent=' . urlencode( $data['user_agent'] ) .
        '&referrer=' . urlencode( $data['referrer'] ) .
        '&permalink=' . urlencode( $data['permalink'] ) .
        '&comment_type=' . urlencode( $data['comment_type'] ) .
        '&comment_author=' . urlencode( $data['comment_author'] ) .
        '&comment_author_email=' . urlencode( $data['comment_author_email'] ) .
        '&comment_author_url=' . urlencode( $data['comment_author_url'] ) .
        '&comment_content=' . urlencode( $data['comment_content'] );
 
    $host = $http_host = 'rest.akismet.com';
    $path = '/1.1/comment-check';
    $port = 443;
    $akismet_ua = "WordPress/4.4.1 | Akismet/3.1.7";
    $content_length = strlen( $request );
    $http_request  = "POST $path HTTP/1.0rn";
    $http_request .= "Host: $hostrn";
    $http_request .= "Content-Type: application/x-www-form-urlencodedrn";
    $http_request .= "Content-Length: {$content_length}rn";
    $http_request .= "User-Agent: {$akismet_ua}rn";
    $http_request .= "rn";
    $http_request .= $request;
 
    $response = '';
    
    if( false != ( $fs = @fsockopen( 'ssl://' . $http_host, $port, $errno, $errstr, 10 ) ) ) {

    	fwrite( $fs, $http_request );

    	while ( !feof( $fs ) ) {
    		$response .= fgets( $fs, 1160 ); // One TCP-IP packet
        }

    	fclose( $fs );

    	$response = explode( "rnrn", $response, 2 );
    }

    if ( 'true' == $response[1] ) {
        return true;
    } else {
    	return false;
    }
}

Questa chiamata restituisce “true” (se si tratta di spam) oppure “false” in caso contrario.

Esempio di risposta spam

La chiamata restituisce “true” se il commento è spam. Se non riesci a ottenere una risposta che venga classificata come spam, puoi inviare “akismet-guaranteed-spam” come autore oppure “akismet-guaranteed-spam@example.com” come e-mail dell’autore. Con entrambi i valori la risposta sarà sempre “true“.

Array (
    [0] => HTTP/1.1 200 OK
           Server: nginx
           Date: Mon, 24 Feb 2014 20:17:08 GMT
           Content-Type: text/plain; charset=utf-8
           Connection: close
           Content-length: 4
    [1] => true
)

Una risposta spam può includere anche l’header X-akismet-pro-tip, come in questo esempio:

Array (
    [0] => HTTP/1.1 200 OK
           Server: nginx
           Date: Mon, 24 Feb 2014 20:17:08 GMT
           Content-Type: text/plain; charset=utf-8
           Connection: close
           X-akismet-pro-tip: discard
           Content-length: 4
    [1] => true
)

Se l’header X-akismet-pro-tip è impostato su discard, Akismet ha stabilito che il commento è spam palese e puoi eliminarlo senza salvarlo in alcuna coda di spam. Per maggiori informazioni su questa funzionalità, consulta questo articolo del blog di Akismet.

Esempio di risposta non spam

La chiamata restituisce “false” se il commento non è spam. Se non riesci a ottenere una risposta che venga classificata come non spam, puoi impostare “user_role” su “administrator” e il parametro “is_test” su “true“: in questo modo otterrai sempre una risposta “false“.

Array (
    [0] => HTTP/1.1 200 OK
           Server: nginx
           Date: Mon, 24 Feb 2014 20:17:08 GMT
           Content-Type: text/plain; charset=utf-8
           Connection: close
           Content-length: 5
    [1] => false
)

Una risposta non spam può includere anche l’header X-akismet-recheck-after, come in questo esempio:

Array (
    [0] => HTTP/1.1 200 OK
           Server: nginx
           Date: Mon, 24 Feb 2014 20:17:08 GMT
           Content-Type: text/plain; charset=utf-8
           Connection: close
           X-akismet-recheck-after: 900
           Content-length: 5
    [1] => false
)

Se l’header X-akismet-recheck-after è presente, Akismet ti chiede di ricontrollare il commento tramite l’endpoint comment-check dopo il numero di secondi indicato. In questo esempio, il client dovrebbe idealmente inviare di nuovo la stessa richiesta comment-check dopo 900 secondi (15 minuti), aggiungendo il parametro recheck_reason=recheck.

Esempio di risposta di errore

Se la chiamata non restituisce né true né false, l’header X-akismet-debug-help fornirà informazioni di contesto sull’errore verificatosi. Tieni presente che l’header X-akismet-debug-help non viene sempre inviato quando la risposta non è né false né true.

Array (
    [0] => HTTP/1.1 200 OK
           Server: nginx
           Date: Mon, 24 Feb 2014 16:34:54 GMT
           Content-Type: text/plain; charset=utf-8
           Connection: close
           X-akismet-debug-help: We were unable to parse your blog URI
           Content-length: 7
    [1] => invalid
)

Test dei dati

È importante testare Akismet con una quantità significativa di dati reali e attivi per poter trarre conclusioni sull’accuratezza. Akismet funziona confrontando i contenuti con l’attività di spam effettiva in corso in questo momento (e si basa su molto più del solo contenuto), quindi generare artificialmente commenti spam non è un approccio praticabile.

Siamo qui per aiutarti

Se hai difficoltà o hai bisogno di aiuto per la risoluzione dei problemi, non esitare a contattarci.