Contenido

Twitter TimeLine 1.1 y las transformaciones XSLT en PHP

9 Mar

+ 8

Llamamos XSLT al procedimiento de transformación de ficheros XML al que se le aplica un fichero XSL con el fin de conseguir un resultado concreto, ya sea un HTML, otro XML o cualquier otro formato en el que deseemos mostrar la salida. 

figure1.gif

Este sistema es bastánte rápido ya que se ejecuta en el servidor y se realiza completamente en memoria, en PHP 5 el sistema para transformar XML está bastante extendido y yo he usado las propiedades DOMDocument para recorrer el fichero y aplicarle el XSL.


<?php
// Load the XML source
$xml = new DOMDocument;
$xml->load('midocumento.xml');

$xsl = new DOMDocument;
$xsl->load('miplantilla.xsl');

// Configure the transformer
$proc = new XSLTProcessor;
$proc->importStyleSheet($xsl); // attach the xsl rules

echo $proc->transformToXML($xml);
?>

En este ejemplo vemos como cargamos el fichero midocument.xml como un fichero XML y por otro lado la plantilla miplantilla.xsl como el fichero XSL, para luego pasarlos por el XSLProcessor al que le importamos nuestra XSL y aplicamos el cambio, mostrando la transformación mediante echo.

De esta forma no nos es muy complicado convertir cualquier XML a cualquier otro formato (HTML, XML, SVG,…)

Aprovechando estas pruebas, he mejorado Twitter TimeLine usando este sistema para parsear el XML, consiguiendo una mejora de velocidad superior a la mitad con respecto al anterior.

Fichero XSL


<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" media-type="application/xml" encoding="UTF-8"/>
<xsl:template match="/">
<data>
<xsl:for-each select="/statuses/status">
<event 	start="{created_at}"
		title="{user/name}"
		image="{user/profile_image_url}"><xsl:value-of select="text" /></event>
</xsl:for-each>
</data>
</xsl:template>

</xsl:stylesheet>

Para esto no necesitaba un XSL gigante ya que los datos que devuelve Twitter no son excesivos y están bastánte bien estructurados. De esta forma estoy convirtiendo el XML que me responde Twitter a un XML que necesita Simile TimeLine.

Podeis verlo funcionando aqui y descargarlo de aqui

Configuración

 define ("_USER","TWITTER USERNAME"); // Nombre de usuario o mail de Twitter
 define ("_PASS","TWITTER PASSWORD"); // Password de twitter
 define ("_FILE","twitter.xml");  // Fichero donde se almacenarán los datos
 define ("_CACHE_TIME","300");  // Tiempo (en segundos) de vida del fichero de datos antes de volver a cargarlos.

Interesante POST, pero solo comentar, que una transformación XSLT también se puede realizar en el lado de cliente/navegador, con javascript como por ejemplo en la respuesta ajax de un servidor en formato XML, para actualizar un DOMElement dandolo estilo con XSL.

Sin más un saludo.

Estoy desarrollando una “extensión” basada en la API de Twitter, pero he tenido problemas al obtener la información, teniendo que esperar alrededor de 5 seg. o en algunos casos más.

¿Haz tenido problemas de velocidad con las peticiones hacia Twitter?

#2 La verdad es que últimamente si que las he tenido, parece que la carga del servidor es muy grande y el servidor de twitter está tardando bastante en servir los datos.

La comunidad ha aumentado mucho en poco tiempo, quizas no hayan tenido tiempo a reaccionar.

Estoy deseando probar esa extensión, sea lo que sea :D

Esperemos que lo solucionen pronto.

¿no importa lo que sea?
jajaja, eso es adicción. Igual no esperes mucho porque la API es muy limitada. :(

Espero que lo resuelvan pronto.

¿Sea lo que sea?
jajaja, eso es adicción. Igual no esperes mucho, la extensión de Twitter es muy limitada. :(

Solo por si te interesa, ya tengo la lista la “extensión” de Twitter, es una versión para PDAs, por el momento funciona aunque en algunas ocasiones se bloquea al cargar, creo que es por el servidor pero no estoy seguro.

Enlace: http://webdebolsillo.com/twitter
Nota en el blog: http://webdebolsillo.com/index.php?blog/show/Twitter_deBolsillo

Comentar

#

Me reservo el derecho de eliminar y/o modificar los comentarios que contengan lenguaje inapropiado, spam u otras conductas no apropiadas en una comunidad civilizada. Si tu comentario no aparece, puede ser que akismet lo haya capturado, cada día lo reviso y lo coloco en su lugar. Siento las molestias.


Cerrar
Enviar por Correo