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.

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.