Vamos a ver dos librerías que nos ayudarán a leer el rss, estás son SimpleXML y DOM. El usar una o la otra va a depender de su simplicidad y/o control. SimpleXML tiene más restricciones que el DOM, pero SimpleXML es más fácil y va "directo al grano" (en ingles se dice "straitforward", no encontré una buena traducción para ese término) de lo que yo deseo ver.
Empezaremos usando la librería SimpleXML. Para obtener la información del RSS vamos a usar la función file_get_contents (para más información de como obtener los datos de una dirección externa puedes ver este aporte). De esta forma es como podemos obtener la información del RSS (para poder visualizar bien la estructura sugerimos, en este caso, que vea el código fuente):
Código PHP:
De esa forma podemos ver la estructura y los valores que tiene cada elemento. Una de las formas, que podemos manejar la información de cada uno de los elementos, es usando el método children.Ver original
<?php $rss_forosdelweb = file_get_contents("http://www.forosdelweb.com/external.php?type=RSS2&forumids=18"); $xml = new SimpleXMLElement($rss_forosdelweb);
Código PHP:
Ver original
<?php $rss_forosdelweb = file_get_contents("http://www.forosdelweb.com/external.php?type=RSS2&forumids=18"); $xml = new SimpleXMLElement($rss_forosdelweb); foreach($xml->children() as $segunda_gen){ //Para separar cada array y se pueda visualizar foreach($segunda_gen->children() as $tercera_gen){ //Para separar cada array y se pueda visualizar foreach($tercera_gen->children() as $cuarta_gen){ //Para separar cada array y se pueda visualizar } } } /** * Adquirir la información con una función recursiva * Info de función recursiva -> http://campusvirtual.unex.es/cala/epistemowikia/index.php?title=Funci%C3%B3n_recursiva * Hace lo mismo que el ejemplo anterior */ $rss_forosdelweb = file_get_contents("http://www.forosdelweb.com/external.php?type=RSS2&forumids=18"); $xml = new SimpleXMLElement($rss_forosdelweb); function recursiveFunc($rss){ foreach($rss->children() as $gen){ recursiveFunc($gen); //Para separar cada array y se pueda visualizar } } } recursiveFunc($xml);
Otra forma de poder ver los datos de un elemento es indicando la ruta directamente. La forma como podemos indicar la ruta es usando (->) en vez de indicarlo como un array ($foo["bar"]). El motivo es que te estás moviendo entre objetos. Ejemplo, si yo quisiera ver solamente los datos del elemento item
Código PHP:
Ver original
<?php $rss_forosdelweb = file_get_contents("http://www.forosdelweb.com/external.php?type=RSS2&forumids=18"); $xml = new SimpleXMLElement($rss_forosdelweb); foreach($xml->channel->item as $item){ }
Una vez ya sabemos lo que deseamos obtener, solo es necesario indicar las rutas de cada uno de los elementos que queremos. Por ejemplo, deseo mostrar el foro donde me encuentro y los datos a tomar son: el enlace del mensaje a leer, el título y la descripción.
Código PHP:
Ver original
<?php $rss_forosdelweb = file_get_contents("http://www.forosdelweb.com/external.php?type=RSS2&forumids=18"); $xml = new SimpleXMLElement($rss_forosdelweb); echo "<span style='font-weight: bold; font-size: 26px;'>" . $xml->channel->title . "</span><br /><br />"; foreach($xml->channel->item as $item){ echo "<a href='".$item->link."'>".$item->title."</a> -> " . nl2br(htmlentities($item->description, ENT_QUOTES, "UTF-8")) . "<br /><br />"; }
Para poder obtener los datos de quién fue el que creo el mensaje y el avatar, tenemos que añadir unas líneas para poder mostrar la información de el Espacio de nombres (en ingles "namespaces"). Primero necesitamos obtener todas las direcciones de los "namespaces" y el método que nos ayudará es getNamespaces. Este método lo que hará es ingresar en alguna variable los atributos y las direcciones que requerimos para poder leer los "namespaces". Los prefijos de los "namespaces" en este rss son dc, content, media. Luego ingresamos la dirección en el método de children. Vamos a tomar el mismo código anterior y le queremos añadir de quién fue el mensaje y el avatar.
Código PHP:
Ver original
<?php $rss_forosdelweb = file_get_contents("http://www.forosdelweb.com/external.php?type=RSS2&forumids=18"); $xml = new SimpleXMLElement($rss_forosdelweb); $getNS = $xml->getNamespaces(true); echo "<span style='font-weight: bold; font-size: 26px;'>" . $xml->channel->title . "</span><br /><br />"; foreach($xml->channel->item as $item){ echo "<span style='color: #f00; font-weight: bold;'>" . $item->children($getNS["dc"])->creator . "</span> "; //Verificamos que exista el nodo $avatar = $item->children($getNS["media"])->content; echo "<img src='". $avatar->attributes()->url ."' alt='". $avatar->children($getNS["media"])->title ."' title='". $avatar->children($getNS["media"])->title ."' />"; } echo " -><a href='".$item->link."'>".$item->title."</a> -> " . nl2br(htmlentities($item->description, ENT_QUOTES, "UTF-8")) . "<br /><br />"; }