Zend_Service_Akismet proporciona un cliente para la API de Akismet.
El servicio Akismet se usa para determinar si los datos entrantes son
potencialmente spam. También expone métodos para enviar datos como
spam conocido o como falsos positivos (ham). Originalmente se pensó para ayudar a
categorizar e identificar spam para Wordpress, pero puede usarse para cualquier
tipo de dato.
Akismet requiere una clave de API para su uso. Puede obtener una registrándose para una cuenta de WordPress.com. No necesita activar un blog. Simplemente al obtener la cuenta se le proporcionará la clave de API.
Akismet requiere que todas las solicitudes contengan una URL al
recurso para el que se están filtrando los datos. Debido a los
orígenes de Akismet en WordPress, este recurso se denomina la URL
del blog. Este valor debe pasarse como segundo argumento al
constructor, pero puede restablecerse en cualquier momento usando el método
setBlogUrl(), o sobrescribirse especificando una
clave 'blog' en las distintas llamadas a métodos.
Zend_Service_Akismet::verifyKey($key) se usa para
verificar que una clave de API de Akismet es válida. En la mayoría de los casos, no
necesitará comprobarlo, pero si necesita una verificación de cordura, o
determinar si una clave recién adquirida está activa, puede hacerlo
con este método.
// Instantiate with the API key and a URL to the application or
// resource being used
$akismet = new Zend_Service_Akismet($apiKey,
'http://framework.zend.com/wiki/');
if ($akismet->verifyKey($apiKey) {
echo "Key is valid.\n";
} else {
echo "Key is not valid\n";
}
Si se llama sin argumentos, verifyKey() usa
la clave de API proporcionada al constructor.
verifyKey() implementa el método REST
verify-key de Akismet.
Zend_Service_Akismet::isSpam($data) se usa para
determinar si los datos proporcionados son considerados spam por
Akismet. Acepta un array asociativo como único
argumento. Ese array requiere que se establezcan las siguientes claves:
user_ip, la dirección IP del usuario que envía los datos (no su dirección IP, sino la de un usuario en su sitio).user_agent, la cadena de UserAgent reportada (navegador y versión) del usuario que envía los datos.
Las siguientes claves también son reconocidas específicamente por la API:
blog, la URL completa al recurso o aplicación. Si no se especifica, se usará la URL proporcionada al constructor.referrer, el contenido de la cabecera HTTP_REFERER en el momento del envío. (Tenga en cuenta la ortografía; no sigue el nombre de la cabecera).permalink, la ubicación del enlace permanente, si la hay, de la entrada a la que se enviaron los datos.comment_type, el tipo de dato proporcionado. Los valores especificados en la API incluyen 'comment', 'trackback', 'pingback', y una cadena vacía (''), pero puede ser cualquier valor.comment_author, el nombre de la persona que envía los datos.comment_author_email, el correo electrónico de la persona que envía los datos.comment_author_url, la URL o página de inicio de la persona que envía los datos.comment_content, el contenido de datos real enviado.
También puede enviar cualquier otra variable de entorno que considere que podría ser un factor para determinar si los datos son spam. Akismet sugiere el contenido de todo el array $_SERVER.
El método isSpam() devolverá
TRUE o FALSE, o lanzará una excepción si la
clave de API no es válida.
Ejemplo 64.1. Uso de isSpam()
$data = array(
'user_ip' => '111.222.111.222',
'user_agent' => 'Mozilla/5.0 ' . (Windows; U; Windows NT ' .
'5.2; en-GB; rv:1.8.1) Gecko/20061010 ' .
'Firefox/2.0',
'comment_type' => 'contact',
'comment_author' => 'John Doe',
'comment_author_email' => 'nospam@myhaus.net',
'comment_content' => "I'm not a spammer, honest!"
);
if ($akismet->isSpam($data)) {
echo "Sorry, but we think you're a spammer.";
} else {
echo "Welcome to our site!";
}
isSpam() implementa el método comment-check
de la API de Akismet.
Ocasionalmente, datos de spam pasarán por el filtro. Si descubre spam que considera que debería haberse detectado, puede enviarlo a Akismet para ayudar a mejorar su filtro.
Zend_Service_Akismet::submitSpam() recibe el mismo array
de datos que se pasa a isSpam(), pero no devuelve un
valor. Se lanzará una excepción si la clave de API usada no es válida.
Ejemplo 64.2. Uso de submitSpam()
$data = array(
'user_ip' => '111.222.111.222',
'user_agent' => 'Mozilla/5.0 (Windows; U; Windows NT 5.2;' .
'en-GB; rv:1.8.1) Gecko/20061010 Firefox/2.0',
'comment_type' => 'contact',
'comment_author' => 'John Doe',
'comment_author_email' => 'nospam@myhaus.net',
'comment_content' => "I'm not a spammer, honest!"
);
$akismet->submitSpam($data));
submitSpam() implementa el método submit-spam
de la API de Akismet.
Ocasionalmente, Akismet detectará datos erróneamente como spam. Por esta razón, probablemente debería mantener un registro de todos los datos detectados como spam por Akismet y revisarlo periódicamente. Si encuentra tales casos, puede enviar los datos a Akismet como "ham", o falso positivo (ham es bueno, spam no lo es).
Zend_Service_Akismet::submitHam() recibe el mismo array
de datos que se pasa a isSpam() o
submitSpam(), y, al igual que submitSpam(),
no devuelve un valor. Se lanzará una excepción si la clave de API
usada no es válida.
Ejemplo 64.3. Uso de submitHam()
$data = array(
'user_ip' => '111.222.111.222',
'user_agent' => 'Mozilla/5.0 (Windows; U; Windows NT 5.2;' .
'en-GB; rv:1.8.1) Gecko/20061010 Firefox/2.0',
'comment_type' => 'contact',
'comment_author' => 'John Doe',
'comment_author_email' => 'nospam@myhaus.net',
'comment_content' => "I'm not a spammer, honest!"
);
$akismet->submitHam($data));
submitHam() implementa el método submit-ham
de la API de Akismet.
Si bien la API de Akismet solo especifica cuatro métodos,
Zend_Service_Akismet tiene varios métodos adicionales
que pueden usarse para obtener y modificar propiedades internas.
getBlogUrl()ysetBlogUrl()le permiten obtener y modificar la URL del blog usada en las solicitudes.getApiKey()ysetApiKey()le permiten obtener y modificar la clave de API usada en las solicitudes.getCharset()ysetCharset()le permiten obtener y modificar el conjunto de caracteres usado para realizar la solicitud.getPort()ysetPort()le permiten obtener y modificar el puerto TCP usado para realizar la solicitud.-
getUserAgent()ysetUserAgent()le permiten obtener y modificar el user agent HTTP usado para realizar la solicitud. Nota: este no es el user_agent usado en los datos enviados al servicio, sino más bien el valor proporcionado en la cabecera HTTP User-Agent al realizar una solicitud al servicio.El valor usado para establecer el user agent debe tener la forma
some user agent/version | Akismet/version. El valor predeterminado esZend Framework/ZF-VERSION | Akismet/1.11, dondeZF-VERSIONes la versión actual de Zend Framework tal como se almacena en la constanteZend_Framework::VERSION.