Leer RSS en PHP
El otro día me llamó un cliente diciendo que necesitaba poder mostrar en su web las últimas noticias económicas de un periódico digital. La verdad que yo había trabajado poco con RSS pero en esto hay que ser valiente y sabiendo que es algo relativamente común me puse a buscar como conseguir leer RSS en PHP. En solo unos clicks ya tenía información suficiente como para hacerme una idea, encontré algunos scripts… pero decidí hacer uno propio para poder modificarlo de forma sencilla llegado el caso, e incluso hice un script para WordPress, pero eso es otra historia que os contare próximamente.
La cuestión está, en mucho más que el saber como tomar la página de RSS de la web, cosa que puede dar para otra entrada, en cómo tomar la información y mostrarla por pantalla, de modo que vamos a ver el código para hacerlo en muy pocas líneas…
<?php $articulos = simplexml_load_string(file_get_contents('http://cincodias.com/tag/rss/tributos/a')); $num_noticia=1; $max_noticias=10; echo "<h2>{$articulos->channel->title}</h2>"; foreach($articulos->channel->item as $noticia){ $fecha = date("d/m/Y - H:i", strtotime($noticia->pubDate));?> <article> <h5><a href="<?php echo $noticia->link; ?>"><?php echo $noticia->title; ?></a></h5> <?php echo $fecha; ?> <?php echo $noticia->description; ?> </article> <?php $num_noticia++; if($num_noticia > $max_noticias){ break; } }?>
Sencillo ¿verdad?, aun a así vamos a analizar un poco este código para poder entenderlo…
- Lo primero que hacemos es guardar en un objeto el xml que nos envía el RSS poniendo la URL del sitio del que vamos a tomar la información
- Creamos dos variables;
- $num_noticia que inicializa la variable en 1
- $max_noticias donde indicamos el número de noticias que queremos mostrar
- Mostramos el nombre que tiene el canal RSS según su creador por medio de las propiedades del objeto. Esto no es necesario, podemos poner el nombre que queramos directamente, pero es interesante verlo para poder ir viendo las propiedades.
- Creamos un bucle donde tomamos cada propiedad del objeto y la guardamos en $noticia para poder trabajar con ella
- Durante el bucle vamos recorriendo algunas propiedades y mostrandolas por pantalla dentro de una etiqueta article.
- Le damos formato a la fecha para publicarla luego en el artículo, por medio del campo pubDate
- Creamos el enlace a través de link y envolvemos el título que es capturado por title, haciendo de esta manera que al hacer click en el título de la noticia nos lleve a la noticia.
- En la línea 10 hacemos que se vea la fecha y la hora de publicación, que ya teníamos guardada de antes.
- En la línea 11 y para terminar el artículo tomamos la descripción por medio de description.
- Finalmente sumamos uno al número de noticia y se compara con una condicional que mira si nos hemos salido del número de noticias máximas, en cuyo caso rompe el bucle y se sigue ejecutando el código.
Se puede observar el código fuente en XML del RSS en cuestión que estamos capturando y de ese modo obtener algunos campos adicionales como el autor, comentarios… dependiendo de aquello que queramos mostrar.
Como conclusión, creo que obtener buenos resultados al leer RSS en PHP es muy sencillo, enriqueciendo el contenido de páginas, creandoles dinamismo y vistosidad si se le añade un poquito de CSS (cosa que aquí no hemos hecho, pero si le hice al cliente).
Gracias por el post me ha servido mucho. Esta tecnologia permite actualizar noticias de cualquier periodico.
Hola Miguel, perdona para mostrar las imagenes como puedo hacer?
Un saludo!
Deben de proporcionar en el rss el enlace a la imagen, si no viene no puedes obtenerla por este procedimiento.
Hola: gracias por tu aporte! Te pregunto algo, si quisiera mostrar solo las ultimas 20 noticias, pero que la mas nueva este arriba, que debo agregar?
hola. perdona por la tardanza ando mudandome de ciudad y no doy a basto. Para eso solo tienes que cambiar el contador $max_noticias y para ponerlos al revés se me ocurre ir guardándolo todo en un array y dándole la vuelta
Hola amigo, muchas gracias por el Post, me ayudó bastante!!
Gracias a ti por comentar! me alegro que te haya servido!!!
Amigo, mil gracias esta es la mejor solución que haya encontrado.
Me alegro que te haya servido!