Esta es una breve guía que le puede ser útil a todos los Socios que tengan PHP5. Está especialmente orientada a quienes son principiantes en PHP.
Como el soporte oficial de PHP4 va a terminar a fines del 2007, es casi seguro que la mayoría ya tenga PHP5. (Algunos hostings tienen varios entornos con diferentes versiones de PHP.)
Procesar XML en PHP5 es tan simple, que la extensión se llama SimpleXML. El código generado es en formato de objeto, por lo que los amantes de OOP van a estar felices. Igualmente, hay una forma de convertirlo a array asociativa multidimensional (con índices númericos y no numéricos,) y lo mostraré más abajo.
<?php
$url = "<dirección al xML de mercadolibre>";
$rawxml = file_get_contents($url); // guardamos el XML como string
$xml = simplexml_load_string($rawxml); // cargamos el objeto
echo "<pre>".nl2br(print_r($xml, true))."</pre>"; // mostramos la estructura
?>
(Nota: según la versión de PHP5, será lo que obtengas. Los atributos no son devueltos en PHP 5.0.x, pero sí en versiones superiores. Ver: http://www.php.net/manual/en/ref.simplexml.php#76201)
Esto significa que si tienes PHP 5.0.x necesitás un poco de regexp (expresiones regulares) para obtener el ID del item:
<?php
// los items están en $xml->listing->items
foreach($xml->listing->items->item as $item)
{
preg_match("/id=([0-9]+)$/i", $item->link, $match);
$item->id = $match[1];
// mostrar items
}
?>
Ese método no va a depender de la versión de PHP5, por lo que no vas a tener que cambiar el código si tu servidor local no coincide con tu servidor web (en mi caso, tengo 5.2 y mi hosting 5.0.)
Update: También podés obtener el ID usando $item->attributes()
<?php
// los items están en $xml->listing->items
foreach($xml->listing->items->item as $item)
{
$tmpid = $item->attributes();
$item->id = $tmpid['id'];
// tu código para mostrar items
}
?>
Si, por alguna razón, no quieres usar objetos, puedes hacer esto:
<?php
foreach($xml->listing->items->item as $item)
{
$tmp = get_object_vars($item);
$tmpid = $item->attributes();
$tmp['id'] = $tmpid['id'];
$items2[] = $tmp;
}
?>
Este método funciona en todas las versiones de PHP5. Fin de update.
De esta forma, podrás usar $items2[0]['title'] (por ejemplo.) Pero, más que nada, es útil si utilizas funciones que no aceptan objetos (como array_pop.)
Para un mejor rendimiento, te conviene guardar el XML en un archivo local o en una base de datos (si usas una base de datos, directamente arma una tabla con estructura acorde a los datos del xML.)
De todos modos, SimpleXML es muy rápido. Lo que tarda, a veces, es la petición del archivo remoto (el xML.)
Espero que les sea de utilidad. |