La cuestión normalmente suele ser la contraria: “Quiero que en mi blog salgan feeds de RSS externos”, pero aquí lo que trataremos es el caso contrario:
¿Cómo parseo un feed de un site creado en WordPress en mi página PHP?
Lo primero que cualquier programador piensa es “menuda chorrada, usas SimpleXmlElement o DOMDocument y arreando”. Sí, pero no.
Veamos, lo normal cuando usas estas 2 clases es algo así:
<?php
$xml = file_get_contents("http://www.lawebquemeinteresa.com/?feed=rss2");
$domd = new DOMDocument('1.0', 'utf-8');
$domd->loadXML($xml);
print_r($domd);
?>
o
<?php
$file = file_get_contents("http://www.lawebquemeinteresa.com/?feed=rss2");
$xml=SimpleXmlElement($file);
print_r($xml);
?>
Bueno, pues si hacemos esto la mayoría de urls de feeds generados por WordPress nos devolverán algo tan feo como esto:
PHP Warning: DOMDocument::load() [<a href='domdocument.load'>domdocument.load</a>]: I/O warning : failed to load external entity "http://www.lawebquemeinteresa.com/?feed=rss2" in **************/feedtrss.php on line **
o
PHP Warning: simplexml_load_file() [<a href='function.simplexml-load-file'>function.simplexml-load-file</a>]: I/O warning : failed to load external entity
La razón es que generalmente la URL del feed no es apunta a un archivo real sino una redirección “seo-friendly”, y entonces el file_get_contents no recibe las cabeceras, se lía y el script pega un petardazo.
Entonces ¿como podemos solucionarlo? La solución es el famoso cURL de PHP
Si el método del file_get_contents no os funciona tendreis que emplear esta librería, que es mucho más flexible con los encabezados, redirecciones dinámicas y demás jaranas.
Por ejemplo utilizar el SimpleXMLElement mediante cURL vendría a ser algo como esto:
<?
$curl= curl_init("http://www.lawebquemeinteresa.com/?feed=rss2") or die("Este servidor no soporta cURL!!!!");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HEADER, 0);
$feed = curl_exec($curl);
curl_close($curl);
$xml= new SimpleXmlElement($feed, LIBXML_NOCDATA);
print_r($xml);
?>
Y así debería parsearos e imprimiros en pantalla el objeto $xml sin mayor problema. Ah! Ojo que no todos los hostings tienen la librería cURL instalada
Y como este es un post muy útil pero muy aburrido:

Posted by Cesar - 30/03/12 - 0 comments





