del.icio.us PHP API

del.icio.us PHP API
 
Los enlaces de del.icio.us en tu sitio web

Este proyecto permite obtener los datos de tu cuenta de del.icio.us e incorporarlos a tu sitio web. Cuando actualices o agregues enlaces a del.icio.us, en tus páginas también se reflejarán estos cambios.

Licencia: Este proyecto es gratuito y se ofrece con el código fuente. Puedes usarlo directamente, modificarlo o ampliarlo, y usarlo para fines personales y comerciales. Pero no se ofrece ninguna garantía respecto al mal funcionamiento o posibles daños que pueda causar, ni se oferta ningún tipo de servicio técnico.

 
Para qué diantres puede servir esto

Si dispones de una cuenta de del.icio.us y de tu propio servidor web, puedes implementar este código para presentar de una forma alternativa los datos procedentes de estos enlaces.

En mi caso lo utilizo en las secciones de citas y conversaciones, donde aprovecho el campo extended para introducir información adicional. Puedes ver una forma más clásica de presentar estos datos en la sección de enlaces.

 
Origen del código fuente

Se ha partido del proyecto original delicious PHP Class, cuyo autor es un tal Dietrich Ayala, muy conocido en su casa a la hora de comer.

No he encontrado en sus páginas información alguna sobre la licencia, así que se me han puesto los dientes largos y le he metido mano al código todo lo que he podido. Y más.

La versión que propongo es una modificación del código original, incorporando mejoras en el rendimiento, implementación de un sistema de caché y la creación de una clase de configuración que puede ayudar a personalizar la aplicación para diferentes formas de uso.

 
Requisitos

Necesitarás un servidor web donde corra PHP con el módulo intérprete de XML activado, el cual suele estar activo por defecto en las instalaciones de PHP.

También deberías tener acceso a la creación de directorios y poder establecer permisos de escritura. Esto se aplica a los directorios de caché, pero también puede funcionar sin tener el caché activado.

No se requiere mySQL ni ningún otro sistema de base de datos.

 
Archivos suministrados

El proyecto se suministra en un único archivo llamado delicious-php-api.zip. Si lo descomprimimos encontramos estos cuatro archivos:

delicious-classes.php: Aquí se encuentra el núcleo del proyecto, con la clase delicious original, la lista de constantes y la clase adicional de configuración. En principio este archivo no debería sufrir modificaciones.

delicious.php: En este archivo encontramos el código encargado de la creación del objeto principal y como podemos modificarlo y adaptarlo a determinadas necesidades.

remove-tmp-files.php: Es un archivo destinado a la carpeta de caché donde se crearán los archivos temporales, y su misión es eliminar todos los archivos con extensión .tmp.

leeme.html: Es un archivo de ayuda con las mismas instrucciones que encontrarás en esta página.

 
Instalación y precauciones

1. Descomprime el archivo delicious-php-api.zip

2. Pasa los archivos delicious.php y delicious-classes.php a la carpeta donde habitualmente dejas las bibliotecas de clases o archivos de funciones

3. Crea una carpeta donde se ubicarán los archivos de caché con el nombre cache_deliciousphp o cualquier otro nombre que te parezca más oportuno, o bien utiliza una carpeta existente destinada a tal efecto. Establece los permisos totales de escritura 777. Si no tienes acceso por consola, la mayoría de las aplicaciones de FTP te dejarán hacerlo. Es recomendable que este directorio se encuentre en el sistema de archivos del servidor web.

4. Copia el archivo remove-tmp-files.php en la carpeta de caché creada en el punto anterior. Este script no tiene parámetros ni órdenes de confirmación, y al ejecutarse elimina los archivos con la extensión .tmp existentes en el directorio de ejecución del script. Lo ideal es que fuera ejecutado periódicamente desde el CRON. Usa este script con precaución, porque NO ME RESPONSABILIZO DE POSIBLES DAÑOS O DE LA ELIMINACIÓN ACCIDENTAL DE ARCHIVOS AJENOS.

5. El archivo leeme.html es un archivo de documentación que no es necesario subirlo al servidor web.

 
Modificando el script delicious.php

Vamos a comprobar posibles modificaciones en el archivo delicious.php:

1. Referencia al archivo de clases del proyecto:

require_once('delicious-classes.php');

Si ambos archivos están en carpetas diferentes, deberías ajustar la ruta del archivo requerido. Yo aconsejo dejarlos en la misma carpeta.

2. Crea el objeto principal pasando como argumentos el nombre de usuario y password de tu cuenta de del.icio.us.

$del = new delicious('mi-uzuario','mi-pausguor');

3. Ajustar la propiedad-objeto de configuración

3.1. Establecer la carpeta de archivos temporales para el cacheo

La dirección de la carpeta de cache puede ser relativa a la carpeta de ejecución del script o absoluta, siendo el slash final opcional.

Por defecto, la dirección de la carpeta es "cache_deliciousphp", relativa a la carpeta donde está ejecutándose el script. Si no hay cambios, esta carpeta debe existir. En este caso es necesario que existan tantas carpetas como ubicaciones donde se ejecuta el script.

Para cambiar el valor de la carpeta por defecto:


// Ubicacion relativa
$del->config->cachingFolder = 'mycachingfolder';

// O bien establecer una ubicacion absoluta
$del->config->cachingFolder = '/home/public_html/data/temp/';
					

3.2. Establece el intervalo de expiracion de los archivos de cache

Es el tiempo que tarda en expirar el archivo de cache, medido en segundos. Por defecto dura un dia. Para cambiar este valor:


// Diez segundos.
$del->config->cachingTimer = 10;

Para los valores de tiempo he creado constantes predefinidas:


Un minuto:	DEL_DEFAULT_CACHING_TIMER_MINUTE
Una hora:	DEL_DEFAULT_CACHING_TIMER_HOUR
Un dia: 	DEL_DEFAULT_CACHING_TIMER_DAY
Una semana:	DEL_DEFAULT_CACHING_TIMER_WEEK
Un mes:		DEL_DEFAULT_CACHING_TIMER_MONTH
					

Así por ejemplo, para enlaces que no requieran actualizarse constantemente, pueden recargarse cada mes:


$del->config->cachingTimer = DEL_DEFAULT_CACHING_TIMER_MONTH;
					

3.3. Desactivar el caching

Por defecto el caching está activo. Para desactivarlo:


// Desactiva la cache y siempre hace peticiones
$del->config->caching = false;
					

3.4. Establecer el flag de depuración

Si observas anomalías en los resultados es recomendable activar este flag. Por defecto, con valor 0 la depuración está desactivada.


// Activa el estado de depuracion
$del->config->debug_flag = 1;
					

3.5. Activar el retardo entre peticiones

Si van a hacerse muchas llamadas consecutivas, activa el retardo entre peticiones de un segundo para no saturar el servidor de delicious. Por defecto se encuentra desactivado.

Este retardo no se produce cuando los datos estan en cache. Se recomienda activar este retardo cuando se van a realizar multiples peticiones a la API de delicious.


// Activa el retardo entre peticiones
$del->config->sleepingOnNetRequest = true;
					

3.6. Activar o desactivar el bug de del.icio.us

Existe una anomalía en la codificación de caracteres cuando los posts resultantes tienen texto con acentos o caracteres extendidos en los campos extended. Esto produce que el campo description sufra una codificación extraña y no se parseen los caracteres de 2 y 3 bits.

He avisado a los chicos de del.icio.us, pero creo que tienen mucho trabajo y quizás este problemilla tarden en solucionarlo. De momento, para solventarlo, se parsea el xml y se tratan los caracteres especiales más comunes en el metodo parseDeliciousXMLBug. Esto solo ocurre una vez, cuando se realiza la petición al servidor, por lo que cuando tira de caché no hay ningún problema.

No estaría mal desactivar el reparseo del xml resultante de una peticion si la gente de del.icio.us resuelve el bug. Por defecto este flag está a false, indicando que no está solucionado. En caso contrario:


// Bug solucionado, viva la madre que os pario
$this->config->deliciousDescriptionBugFixed = true;
					
 
Usar este sistema para ver enlaces en una página

Después de tanto rollo, llegamos al momento de la verdad. Vamos a incorporar a cualquier de las páginas de nuestro sitio web los enlaces de del.icio.us.

Para ello lo primero que haremos, en las primeras líneas de la página, hacer una referencia al archivo delicious.php. Sí, justo ese que tanto nos ha costado modificar.


require_once('mylibraries/delicious.php');
					

El siguiente ejemplo se centrará en la llamada al método get_recent_posts. Esta función muestra las últimas entradas para un determinado tag (o ningún tag), hasta un total de 100 entradas recientes:


if(!$result = $del->get_recent_posts('mytag', 25))
{
   // Se puede usar el array errors_es, en castellano,
   // o bien errors_en para ver el error en ingles
   echo $del->config->errors_es[$del->getError()];
}
else
{
   if( count($result) > 0)
   {
	  // loop thru result set, inserting into db
	  foreach($result as $properties)
	  {				
		 // Prepara fecha y hora
		 $thedatetime = date('d/m/Y H:m:s', 
strtotime(ereg_replace('T|Z',' ',$properties['time']))); // Muestra propiedades: echo 'Enlace: '.$properties['href'].'<br />'; echo 'Descripción: '.$properties['description'].'<br />'; echo 'Extendido: '.$properties['extended'].'<br />'; echo 'Fecha y hora: '.$thedatetime.'<br />'; echo 'Hash: '.$properties['hash'].'<br />'; echo '<br /><br /><br />'; } } }

El método get_all_posts Es similar al utilizado en get_recent_posts, solo que no tiene parámetros y recupera todos las entradas de la cuenta de del.icio.us. Este método hay que usarlo con precaución porque puede afectar al rendimiento de los servidores de del.icio.us.

Resto de métodos: próximamente. O mejor aún, accedan al archivo delicious-classes.php y revisen la lista de métodos con su correspondiente documentación.