Integrar en tu web marcadores de del.icio.us con cURL y PHP5
25/07/2008
Antes que nada explicaré brevemente que es del.icio.us. Es un servicio de gestión de marcadores al estilo red social que permite agregar los marcadores que usualmente se guardan en los navegadores, categorizarlos con el sistema de Tags, compartirlos con otros usuarios, acceder a ellos desde cualquier ordenador conectado a internet, etc. Y además dispone una potente pero sencilla API que utlizaremos para el propósito de éste artículo, integrar los marcadores almacenados en del.icio.us en nuestra web utilizando PHP y cURL. De ésta forma conseguiremos mantener la lista de enlaces de nuestra web al mismo tiempo que mantenemos nuestra lista de enlaces particular.
¿Qué es cURL? PHP soporta libcurl, librería que permite conectar y establecer comunicación con diferentes tipos de servidores con diferentes protocolos como http, https, ftp, gopher, telnet, dict, file, ldap. Soporta certificados https, autenticación de usuarios, etc. En php dispone de una colección de funciones con el prefijo curl_* , así que vamos a utilizar ésta fantástica librería para comunicarnos con del.icio.us.
La API de del.icio.us es sencilla, consiste en peticiones HTTPS con autenticación HTTP-Auth. Utilizaremos el método POSTS (así denomina del.icio.us a los marcadores, así los denominaré a partir de ahora) que permite hacer diferentes acciones sobre éstos. La que nos interesa es la que obtiene el listado de posts, además con la opción de filtrarlos por un tag.
Está disponible en
http://del.icio.us/help/api/.
Ésta sería la petición:
https://api.del.icio.us/v1/posts/get?tag=public
Nos devolvería en formato XML los posts etiquetados con public, que serán los que queremos que se muestren en la web. Pues vamos a ver como realizar está petición con cURL.
$peticion = https://api.del.icio.us/v1/posts/get?tag=public;
if (function_exists('curl_init')) {
$o_curl = curl_init($peticion);
curl_setopt_array($o_curl, array(
CURLOPT_RETURNTRANSFER => true,
CURLOPT_USERAGENT => 'http://www.miweb.com',
CURLOPT_CONNECTTIMEOUT => 5, //segundos
CURLOPT_TIMEOUT =>10 //segundos,
CURLOPT_USERPWD => 'username:password'
));
if ($result = curl_exec($o_curl)) {
switch (curl_getinfo($o_curl, CURLINFO_HTTP_CODE)) {
case 200:
$posts = $result;
break;
case 503:
//lanzar error. Bloqueo de la petición temporalmente.
default:
//lanzar error de conexión a del.icio.us
}
curl_close($o_curl);
}
La función
curl_setopt_array() setea las opciones de la petición.
- CURLOPT_RETURNTRANSFER. Lo seteamos a TRUE para devolver el resultado como una cadena de texto que contiene el valor devuelto por la función curl_exec(), en vez de mostrar la salida directamente en la ventana del navegador.
- CURLOPT_USERAGENT.El contenido de la cabecera "User-Agent: " enviada en las peticiones HTTP. Es un requisito de la API de del.icio.us. Por ejemplo podemos poner la url de nuestra web.
- CURLOPT_CONNECTTIMEOUT. El número de segundos que se pueden esperar como máximo intentando establecer la conexión.
- CURLOPT_TIMEOUT. El número máximo de segundos que cURL espera a que se ejecuten las funciones.
- CURLOPT_USERPWD. La API requiere autenticación. Aquí seteamos el nombre de usuario y contraseña con el formato "username:password".
Con
curl_getinfo obtenemos el codigo http para comprobar si ha habido algún error. Cabe destacar el error 503, devuelto cuando del.icio.us bloquea la petición por un tiempo si se realizan muchas en un corto intervalo de tiempo. Por lo que sería conveniente añadir un sistema de
cache en un archivo de texto para limitar el número de peticiones. El resultado de la petición lo devuelve en formato XML, por lo que tendríamos que parsearlo para mostrarlo en nuestra web. Pero ésto ya es otro tema.