Crear un feed RSS usando CodeIgniter

Crear un feed RSS usando CodeIgniter

Existe una gran cantidad de frameworks PHP que nos facilitan el trabajo a la hora de realizar una aplicación web. Uno de ellos es CodeIgniter considerado uno de los mejores frameworks PHP por el alto rendimiento que posee. Si quieres aprender a utilizarlo te recomiendo seguir el curso de CodeIgniter que te ofrece TodoProgramaci贸n. Luego de esta breve explicación procedemos a crear el feed RSS.

Debido a que CodeIgniter implementa MVC (Modelo - Vista - Controlador), debemos crear un modelo que se comunicará con la base de datos, una vista que le mostrará al usuario los datos procesados y finalmente un controlador el que atenderá las solicitudes del usuario. Este último además será el intermediario entre el modelo y la vista.

Para el ejemplo estoy usando la versión 2.1.3 el cual puedes descargar desde su web oficial.

MODELO

Comenzaremos creando el modelo que obtendrá de la base de datos las últimas 10 publicaciones y las ordenará desde la más reciente hasta la más antigua, dichos datos serán enviados al controlador. El número de artículos puede variar, pero les recomiendo que trabajen solo con 10 ya que es más que suficiente.

<?php

/**
 * Class Articles_model
 * 
 * Interact with the articles table
 * 
 * @author  Eborio Linarez
 * @link    http://todoprogramacion.com.ve/articulos/codeigniter/crear-un-feed-rss-usando-codeigniter
 */
class Articles_model extends CI_Model
{
    /**
     * Get the last then articles
     * 
     * @return object
     */
    public function lastArticles()
    {
        $this->db->order_by('id', 'desc');
        $query = $this->db->get('articles', 10);
        $articles = $query->result();
        return $articles;
    }
}

CONTROLADOR

El controlador se encargará de recibir los datos provenientes del modelo y los enviará a la vista que generará el Feed RSS.

<?php

/**
 * Class Feed
 * 
 * Manage the user requests
 * 
 * @author  Eborio Linarez
 * @link    http://todoprogramacion.com.ve/articulos/codeigniter/crear-un-feed-rss-usando-codeigniter
 */
class Feed extends CI_Controller 
{
    /**
     * Constructor
     */
    public function __construct() {
        //Cargamos los helpers necesarios
        $this->load->helper('url');
        $this->load->helper('text');
        $this->load->helper('xml');
        //Cargamos el modelo
        $this->load->model('Articles_model');
    }

    /**
     * Show the RSS feed
     * 
     * @return view
     */
    public function index()
    {
        $data['encoding'] = 'utf-8';
        $data['name'] = 'Feed de Prueba';
        $data['url'] = 'http://prueba.com/feed';
        $data['description'] = 'Descripción para el Feed';
        $data['language'] = 'es-VE';
        $data['author'] = '[email protected]';
        $data['articles'] = $this->Articles_model->lastArticles();
        header("Content-Type: application/rss+xml");
        $this->load->view('feed', $data);
    }
}

En el constructor del controlador se debe llamar al helper XML para que sea posible generar la vista para el feed, de igual manera se carga el modelo.

Luego en el m茅todo index se configura el feed. Para ello se coloca la codificaci贸n en utf-8, se le da un un nombre seguido de la URL mediante la cual podrá ser accedido.

Continuando con la configuración, se debe especificar una descripci贸n y el lenguaje de los contenidos. Opcionalmente se configura correo y finalmente se obtienen las 煤ltimas 10 publicaciones del sitio web o blog.

Luego se debe pasar una cabecera que indicará al navegador que el tipo de archivo que debe interpretar es un RSS/XML.

El último paso es llamar a la vista y pasarle los datos a mostrar.

VISTA

<?php echo '<?xml version="1.0" encoding="utf-8"?>' . "\n"; ?>
<rss version="2.0"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
xmlns:admin="http://webns.net/mvcb/"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:content="http://purl.org/rss/1.0/modules/content/">

<channel>
    <title><?php echo $name; ?></title>
    <link><?php echo $url; ?></link>
    <description><?php echo $description; ?></description>
    <dc:language><?php echo $language; ?></dc:language>
    <dc:creator><?php echo $author; ?></dc:creator>
    <dc:rights>Copyright <?php echo gmdate("Y", time()); ?></dc:rights>
    <admin:generatorAgent rdf:resource="http://www.codeigniter.com/" />
    <?php
    foreach ($articles as $article) {
        ?>
        <item>
            <title><?php echo xml_convert($article->name); ?></title>
            <link>
            <?php 
            $url = array(
                'articulo',
                $article->id,
                url_title(convert_accented_characters($article->name), '-', TRUE)
                );
                echo site_url($url); ?>
            </link>
            <guid>
                <?php echo site_url($url); ?>
            </guid>
            <description>
                <![CDATA[
                <?php echo word_limiter($article->description, 100, ' [...]');?>
                ]]>
            </description>
            <pubDate><?php echo date('r', $article->created_at); ?></pubDate>
        </item>
        <?php
    }
    ?>
</channel>
</rss>

Ya que un feed RSS utiliza una estructura estándar no deben cambiarse los nombres de las etiquetas utilizadas. A continuaci贸n se explican cada una de las etiquetas.

  • <title>: Contiene el nombre del feed.
  • <link>: Es la URL del feed.
  • <description>: Una peque帽a descripci贸n para el feed.
  • <dc:language>: Especifica el lenguaje del feed.
  • <dc:creator>: Indica el correo electr贸nico del autor del feed.

Las etiquetas descritas anteriormente siempre son iguales por lo cual si desean pueden escribir en ellas directamente los datos y no pasarlos desde el controlador. Ahora, las siguientes etiquetas muestran los datos más importantes, el contenido de los artículos.

NOTA: Estas etiquetas se ubican dentro de la etiqueta <item>.

  • <title>: Muestra el título de cada artículo. Debe utilizarse el m茅todo xml_convert() perteneciente al helper XML para convertirlo a formato XML.
  • <link>: Contiene la URL del art矛culo.
  • <guid>: Solo identifica al ítem. Se utilizan los mismos datos que para la etiqueta <link>.
  • <description>: Contiene el texto a mostrar. Se utiliza el m茅todo word_limiter() del helper Text para limitar la cantidad de palabras a mostrar. Recibe tres parámetros: el primero, es la cadena de texto a mostrar; la segunda, la cantidad de palabras que se mostrar谩n; la tercera es solo un pequeño elemento a mostrar después de cortar el texto, por ejemplo, tres puntos.
  • <pubDate>: La fecha de publicaci贸n del feed. No todos los navegadores muestran los Feeds RSS de la misma manera, así que hay etiquetas que se mostrarán en unos navegadores y en otros no.

En este punto solo resta hacer accesible el feed RSS Lo primero es colocar el siguiente link en un sitio visible de nuestra aplicaci贸n:

<a type="application/rss+xml" href="<?php echo base_url('feed');?>">
    <img src="rss_icon.png">
</a>

Luego hay que especificar la siguiente etiqueta:

<link rel="alternate" type="application/rss+xml" href="<?php echo base_url('feed');?>">

Esta última línea de código es para que ciertos navegadores muestren el ícono RSS al final de la barra de direcciones.

Eso es todo, si seguiste todos los pasos correctamente tendrás un feed RSS creado con CodeIgniter. No olvides comentar y compartir este artículo.

Comentarios

Deja tu comentario

http://