Verificación de comentarios

Esta es la llamada que realizarás con mayor frecuencia. Recibe una serie de argumentos y datos sobre el contenido enviado y devuelve una respuesta positiva o negativa. El rendimiento puede disminuir drásticamente si decides excluir datos. Cuantos más datos envíes a Akismet sobre cada comentario, mayor será la precisión. Es preferible enviar demasiados datos a quedarse corto.

Este método se invoca con la siguiente URL:

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

Importante: todos los parámetros deben enviarse mediante el método POST.

Parámetros

api_key (necesario)
Tu clave de API de Akismet. Puedes encontrarla en el escritorio de tu cuenta en https://akismet.com/es/cuenta/

blog (necesario)
La página de inicio o la URL principal de la instancia que realiza la solicitud. En el caso de un blog o wiki, sería la página de inicio. Nota: Debe ser un URI completo, incluido http://.

user_ip (necesario)
Dirección IP de quien envió el comentario.

user_agent
Cadena del agente de usuario del navegador que envió el comentario; normalmente corresponde a la variable CGI HTTP_USER_AGENT. No debe confundirse con el agente de usuario de tu biblioteca de Akismet.

referrer (atención a la ortografía)
Aquí debe enviarse el contenido de la cabecera HTTP_REFERER.

permalink
La URL permanente completa de la entrada en la que se envió el comentario.

comment_type
Una cadena que describe el tipo de contenido enviado.

Ejemplos:

  • comment: un comentario de blog.
  • forum-post: una publicación principal en un foro.
  • reply: una respuesta a una publicación principal en un foro.
  • blog-post: una entrada de blog.
  • contact-form: un envío de formulario de contacto o de opiniones.
  • signup: una cuenta de usuario nueva.
  • message: un mensaje enviado entre unos pocos usuarios.

Puedes enviar un valor que no esté en la lista anterior si ninguno de ellos describe con precisión tu contenido. Esto se explica con más detalle aquí.

comment_author
Nombre enviado con el comentario.

comment_author_email
Dirección de correo electrónico enviada con el comentario.

comment_author_url
URL enviada con el comentario. Envía únicamente una URL que el usuario haya introducido manualmente, no una URL generada automáticamente como la URL del perfil en tu sitio.

comment_content
El contenido que se envió.

comment_date_gmt
La marca de tiempo UTC de la creación del comentario, en formato ISO 8601. Puede omitirse en las solicitudes de comment-check si el comentario se envía a la API en el momento en que se crea.

comment_post_modified_gmt
La marca de tiempo UTC de la fecha de publicación de la entrada, página o hilo en el que se publicó el comentario.

blog_lang
Indica los idiomas en uso en el blog o sitio, en formato ISO 639-1, separados por comas. Un sitio con artículos en inglés y francés podría usar «en, fr_ca».

blog_charset
La codificación de caracteres de los valores del formulario incluidos en los parámetros comment_*, como «UTF-8» o «ISO-8859-1».

user_role
El perfil de quien envió el comentario. Este parámetro es opcional. Si lo estableces como «administrator», Akismet siempre devolverá false.

is_test
Este parámetro es opcional. Puedes usarlo al enviar consultas de prueba a Akismet.

recheck_reason
Si envías contenido a Akismet para que se vuelva a comprobar, como una entrada que se ha editado o comentarios pendientes antiguos que deseas revisar de nuevo, incluye el parámetro recheck_reason con una cadena que describa el motivo de la nueva comprobación. Por ejemplo, recheck_reason=edit.

honeypot_field_name
Si utilizas un campo honeypot en tu implementación, incluye en la solicitud el nombre del campo junto con su valor. Por ejemplo, si tienes un campo honeypot como <input type=»text» name=»hidden_honeypot_field» style=»display: none;» />, deberías incluir dos parámetros adicionales en tu solicitud: honeypot_field_name=hidden_honeypot_field y hidden_honeypot_field=[el valor del input].

comment_context
El parámetro comment_context proporciona contexto sobre el entorno en el que se publicó el comentario: una lista de etiquetas o categorías aplicadas a la entrada de blog principal o al sitio en el que se publicó el comentario.

Especifica comment_context usando la notación de parámetros de array al estilo PHP: comment_context[]=cooking&comment_context[]=recipes&comment_context[]=bbq Ten en cuenta que las etiquetas o categorías deben tomarse de la entrada o el entorno principal; no deben ser proporcionadas por quienes comentan.

Otras variables de entorno del servidor
En PHP existe un array de variables de entorno llamado $_SERVER que contiene información sobre el propio servidor web, así como un par clave/valor por cada cabecera HTTP enviada con la solicitud. Estos datos son muy útiles para Akismet. La forma en que el contenido enviado interactúa con el servidor puede ser muy reveladora, así que incluye tantos datos como sea posible.

Ejemplo en 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;
    }
}

Esta llamada devuelve «true» (si es spam) o «false» si no lo es.

Ejemplo de respuesta de spam

La llamada devuelve «true» si el comentario es spam. Si tienes problemas para provocar una respuesta de spam, puedes enviar «akismet-guaranteed-spam» como autor o «akismet-guaranteed-spam@example.com» como correo electrónico del autor. Cualquiera de los dos valores siempre generará una respuesta «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 respuesta de spam también puede incluir la cabecera X-akismet-pro-tip, de esta forma:

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
)

Si la cabecera X-akismet-pro-tip tiene el valor discard, significa que Akismet ha determinado que el comentario es spam evidente y puedes descartarlo de forma segura sin guardarlo en ninguna cola de spam. Obtén más información sobre esta función en esta entrada del blog de Akismet.

Ejemplo de respuesta de no spam

La llamada devuelve «false» si el comentario no es spam. Si te cuesta obtener una respuesta de no spam, puedes establecer «user_role» como «administrator» y el parámetro «is_test» como «true»; esto siempre generará una respuesta «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 respuesta que no sea spam también puede incluir la cabecera X-akismet-recheck-after, de esta forma:

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
)

Si la cabecera X-akismet-recheck-after está presente, Akismet solicita que vuelvas a comprobar el comentario mediante el extremo comment-check transcurridos esos segundos. En este ejemplo, lo ideal sería que el cliente enviara de nuevo la misma solicitud comment-check en 900 segundos (15 minutos), con el parámetro adicional recheck_reason=recheck.

Ejemplo de respuesta de error

Si la llamada no devuelve ni true ni false, la cabecera X-akismet-debug-help proporcionará contexto sobre el error que se haya producido. Ten en cuenta que la cabecera X-akismet-debug-help no siempre se envía cuando la respuesta no devuelve false o 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
)

Pruebas con tus datos

Es importante probar Akismet con una cantidad significativa de datos reales, en tiempo real para poder sacar conclusiones sobre su precisión. Akismet funciona comparando el contenido con la actividad real de spam que se está produciendo en este momento (y esto se basa en mucho más que el contenido en sí), por lo que generar comentarios de spam de forma artificial no es un enfoque viable.

Estamos aquí para ayudarte

Si en algún momento te quedas atascado o necesitas ayuda con la solución de problemas, no dudes en contacta con nosotros.