Home / Programmazione / PHP / Creare un RSS reader in PHP
Mattepuffo

Creare un RSS reader in PHP

Creare un RSS reader in PHP

Articolo aggiornato il 24/06/2016

Oggi vediamo come creare un RSS reader in PHP senza usare librerie esterne.

Una implementazione la vedete direttamente sul blog in basso a sinistra.

Gli RSS hanno una struttura, basata su XML, ben definita; qui trovate una buona guida.

In sostanza quello che dobbiamo fare è interpretare questa struttura e buttarla nella pagina.

Per fare tutto questo ci basta DOMDocument, senza andare ad usare chissà quale libreria.

Bene, vediamo questa classe:

<?php

/**
 * Lettore Feed RSS
 *
 * @author Matteo Ferrone
 * @since 2016-05-30
 * @version 1.2
 */
class RssReader {

    private $xmlUrl;
    private $xmlDoc;
    private $channel;
    private $channelTitle;
    private $channelLink;
    private $channelDescription;
    private $items;

    /**
     * Init
     *
     * @param string $xmlUrl Url del feed
     */
    public function __construct($xmlUrl) {
        $this->xmlUrl = $xmlUrl;
        $this->xmlDoc = new DOMDocument();
        $this->xmlDoc->load($this->xmlUrl);
        $this->channel = $this->xmlDoc->getElementsByTagName('channel')->item(0);
        $this->channelTitle = $this->channel->getElementsByTagName('title')->item(0)->childNodes->item(0)->nodeValue;
        $this->channelLink = $this->channel->getElementsByTagName('link')->item(0)->childNodes->item(0)->nodeValue;
        $this->channelDescription = $this->channel->getElementsByTagName('description')->item(0)->childNodes->item(0)->nodeValue;
        $this->items = $this->xmlDoc->getElementsByTagName('item');
    }

    public function getChannelTitle() {
        return $this->channelTitle;
    }

    public function getChannelLink() {
        return $this->channelLink;
    }

    public function getChannelDescription() {
        return $this->channelDescription;
    }

    public function getItems($c) {
        $arrayItems = array();
        for ($i = 0; $i <= $c; $i++) {
            $arrayItems[] = array(
                'i_titolo' => $this->items->item($i)->getElementsByTagName('title')->item(0)->childNodes->item(0)->nodeValue,
                'i_link' => $this->items->item($i)->getElementsByTagName('link')->item(0)->childNodes->item(0)->nodeValue,
                'i_description' => $this->items->item($i)->getElementsByTagName('description')->item(0)->childNodes->item(0)->nodeValue,
                'i_last_up' => $this->items->item($i)->getElementsByTagName('pubDate')->item(0)->childNodes->item(0)->nodeValue,
            );
        }
        return $arrayItems;
    }

}

Abbiamo diversi parametri, ognuno dei quali si occupa di prendere una parte specifica del feed.

Così facendo siamo già pronti per mettere sulla nostra pagina qualsiasi parte del feed vogliamo.

La funzione getItems prende come parametro il numero massimo di record da visualizzare.

Per visualizzare il tutto:

                                <?php
                                $rssItems = $rssReader->getItems(5);
                                foreach ($rssItems as $rss):
                                    ?>
                                    <a href="<?php echo $rss['i_titolo']; ?>" target="_blank" class="truncate hotline_item">
                                        <strong><?php echo date_format(date_create($rss['i_last_up']), 'd/m/Y'); ?></strong>
                                        <?php echo $rss['i_titolo']; ?>
                                    </a>
                                <?php endforeach; ?>

I dati che faccio visualizzare sono:

  • il titolo
  • la data (formattata)
  • il link

La descrizione in questo non c'è, quanto sono solo link.

Enjoy!