Inicio Apuntes FPApuntes DAW Lector de canales RSS, crea el tuyo propio con PHP

Lector de canales RSS, crea el tuyo propio con PHP

Publicado por entreunosyceros
Publicado el: Última actualización:

AVISO: Esta entrada tiene más de dos años desde su publicación. Es posible que el contenido esté desactualizado.

Una vez más aquí. En esta ocasión voy a dejar un artículo relacionado con otro que publiqué hace ya bastante tiempo sobre cómo crear un lector rss mediante Ajax y PHP. En esta ocasión vamos a simplificarlo utilizando solo PHP. Esto en su día fue de los primeros códigos un poco complejos que codifiqué, y por lo que tengo entendido a algunos «usuarios» que están empezando, les puede resultar de utilidad.

En el caso que nos ocupa vamos a ver cómo podremos utilizar PHP para leer los canales RSS de los sitios web y mostrar las listas de publicaciones recientes que lo utilizan. Por defecto he indicado que solo se muestren 5 resultados, pero esto es muy sencillo de cambiar.

Por si alguien todavía no lo sabe, RSS (Rich Site Summary) es un formato que se utiliza en muchos sitios web y que permite al editor web sindicar sus últimas publicaciones o datos automáticamente. También beneficia a las personas que desean recibir las últimas actualizaciones de publicaciones de sus sitios web favoritos.

Hay otro método que permite al usuario mantenerse actualizado es el marcador. Pero necesitan ir manualmente a los sitios web de manera oportuna y verificar qué novedades se han al sitio en cuestión.

El código PHP del lector de canales RSS

lectos RSS creado con PHP

Bueno, aclarado todo, aquí queda el código del lector de canales RSS. He ido comentando el código, por lo que espero que no queden muchas dudas sobre cómo funciona. Yo creo que el código es sencillo, pero quizás las partes más complicadas son las funcionessimplexml_load_file(), implode() y array_slice(). Pero todas ellas tienen un buen montón de referencias en internet para entender como funcionan.

Decir que el código consta de un formulario en html desde dónde vamos a poder escribir las URL de los FEED y que a continuación se van a presentar. Por defecto la URL que se va a mostrar es el FEED de esta página.

<!doctype html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>Lector de rss usando PHP</title>
        <link href="style.css" type="text/css" rel="stylesheet">
    </head>
    <body>
        <!--formulario para añadir la URL a leer-->
        <div class="content">

            <form method="post" action="">
                <input type="text" name="feedurl" placeholder="Escribe una URL del FEED">&nbsp;<input type="submit" value="Enviar" name="submit">
            </form>
    <?php
        //URL a leer por defecto
        $url = "https://entreunosyceros.net/feed";

        if(isset($_POST['submit'])){
            if($_POST['feedurl'] != ''){
                $url = $_POST['feedurl'];
            }
        }

        $invalidurl = false;

        //Comprobamos si la URL es correcta. 
        if(@simplexml_load_file($url)){
            $feeds = simplexml_load_file($url);
        }else{
            $invalidurl = true;
            echo "<h2>URL de feed RSS incorrecto.</h2>";
            echo "<h3>No te olvides de incluir el protocolo http(s)</h3>";
        }


        $i=0;

        //Comprobamos si la URL está vacía. Continúa si no está vacía. De lo contrario pasa al else.
        if(!empty($feeds)){


            $site = $feeds->channel->title;
            $sitelink = $feeds->channel->link;

            //Título de la página
            echo "<h1>".$site."</h1>";
            foreach ($feeds->channel->item as $item) {
                //Datos obtenidos de la noticia
                $title = $item->title;
                $link = $item->link;
                $description = $item->description;
                $postDate = $item->pubDate;
                $pubDate = date('D, d M Y',strtotime($postDate));

                // 5 es el número de noticias a mostrar
                if($i>=5) break;
        ?>
                <!--contruimos cada una de las noticias-->
                <div class="post">
                    <div class="post-head">
                        <!--Título de la noticia-->
                        <h2><a class="feed_title" href="<?php echo $link; ?>"><?php echo $title; ?></a></h2>
                        <span><?php echo $pubDate; ?></span> <!--Fecha de la publicación-->
                    </div>
                    <!-- Cuerpo de la noticia-->
                    <div class="post-content">
                        <?php echo implode(' ', array_slice(explode(' ', $description), 0, 20)) . "..."; ?> <a href="<?php echo $link; ?>">Leer más</a> <!-- botón leer más. Con enlace a la noticia-->
                    </div>
                </div>

                <?php
                $i++;
            }
        }else{
            //Error que se muestra si no hay nada que mostrar
            if(!$invalidurl){
                echo "<h2>No se encontró nada que mostrar</h2>";
            }
        }
    ?>
        </div>
    </body>
</html>

CSS para dejarlo bonito

Como este código que estamos viendo quedaría un poco feo así sin más, siempre es aconsejable aplicar un poco de estilos CSS para darle un mejor aspecto. En este caso yo utilice el siguiente código:

.content{
    width: 60%;
    margin: 0 auto;
}

input[type=text]{
    padding: 5px 10px;
    width: 60%;
    letter-spacing: 1px;
}

input[type=submit]{
    padding: 5px 15px;
    letter-spacing: 1px;
    border: 0;
    background: gold;
    color: white;
    font-weight: bold;
    font-size: 17px;
}

h1{
    border-bottom: 1px solid gray;
}

h2{
    color: black;
}
h2 a{
    color: black;
    text-decoration: none;
}

.post{
    border: 1px solid gray;
    padding: 5px;
    border-radius: 3px;
    margin-top: 15px;
}

.post-head span{
    font-size: 14px;
    color: gray;
    letter-spacing: 1px;
}

.post-content{
    font-size: 18px;
    color: black;
}

/* media query */
@media (max-width: 880px){
    .content{
        width: 99%;
    }
}

Bueno, y para terminar solo queda mostrar este código en funcionamientos en el siguiente enlace. Además he publicado el código en GitHub.

También te puede interesar ...

Deja un comentario

* Al utilizar este formulario, aceptas que este sitio web almacene y maneje tus datos.

Resumen de privacidad
cookies entreunosyceros

Esta web utiliza cookies para que podamos ofrecerte la mejor experiencia de usuario posible.

La información de las cookies se almacena en tu navegador y realiza funciones tales como reconocerte cuando vuelves a nuestra web o ayudarnos a comprender qué secciones de la web encuentras más interesantes y útiles.

Nunca almacenamos información personal de ningún tipo.

Tienes toda la información sobre privacidad, derechos legales y cookies en nuestra página sobre la política de privacidad o en la página sobre nuestra política de cookies.

Cookies necesarias

Las cookies estrictamente necesarias tiene que activarse siempre para que podamos guardar tus preferencias de ajustes de cookies.

Si desactivas esta cookie no podremos guardar tus preferencias. Esto significa que cada vez que visites esta web tendrás que activar o desactivar las cookies de nuevo.

Cookies de terceros

Esta web utiliza las siguientes cookies adicionales:

- Mailchimp: Recordar si ya estás suscrito al boletín de noticias y sino ofrecértelo al salir.

- Accesibilidad: Para saber tus ajustes de accesibilidad en cada visita.

- Comentarios: Saber si has leído y aceptado nuestra política de privacidad a la hora de dejar un comentario en la web.

- Google Analytics: Localización para recopilar información anónima tal como el número de visitantes del sitio, o las páginas más populares.

- Goggle Adsense: Anuncios personalizados según tu geolocalización y preferencias.

Dejar estas cookies activadas nos permite mejorar nuestra web.

Adblock Detectado!!

Ayúdanos deshabilitando la extensión AdBlocker de tu navegador para visitar esta web.
Si no sabes hacerlo en Chrome, consulta el siguiente enlace. Si utilizas Firefox, puedes consultar este otro enlace.
Esto mejorará tu experiencia en este sitio web.