Pagina 1 di 13 1 2 3 11 ... ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 126
  1. #1

    [PILLOLA] creare e mostrare un feed Rss con PHP

    Che emozione, la mia prima pillola in PHP!
    La scrivo perchè molti chiedono lumi su come creare e/o inserire nelle proprie pagine un feed rss.

    Anzitutto, apro una piccola parentesi: che cos'è un Feed RSS?
    Un Feed non è altro che un file in formato XML che raccoglie i contenuti di un sito in forma organizzata ad albero.

    A cosa servono? Un feed RSS può essere letto da software chiamati Feed Reader, oppure da un sito internet che ha la stessa funzione (il più famoso è probabilmente Google Reader). In un Feed Reader, per ogni FEED sottoscritto avremo tanti ITEM quante sono le notizie pubblicate. Il vantaggio sta nell'essere sempre aggiornati sugli argomenti che ci interessano senza dover necessariamente fare il giro dei siti col browser per controllare se ci sono novità.

    Chiaramente un feed può essere anche inserito così com'è in una pagina web, per mantenerla sempre aggiornata. Molti sono ad esempio i siti che riportano le notizie di Ansa o Punto Informatico.

    In questa pillola vi mostrerò due classi: la prima serve per crearli e la seconda fa il parsing (vi mostrerò come usarle, ma non le ho scritte io )
    E ora vediamo l'esempio della struttura di un feed rss:

    codice:
    <?xml version="1.0" encoding="ISO-8859-1"?>
    <rss version="2.0">
        <channel>
            <title>GuardaQua.it</title>
            <description>Feed del blog di Maurizio</description>
            <link>http://www.guardaqua.it</link>
            <lastBuildDate>Tue, 22 Nov 2005 19:52:44 +0100</lastBuildDate>
            <generator>FeedCreator 1.7.2</generator>
    
            <item>
                <title>Prova</title>
                <link>http://www.guardaqua.it/index.php?a=74</link>
                <description><![CDATA[
    
    Qui possiamo inserire
                 testo e tag html del nostro articolo</p>]]></description>
                <author>info@guardaqua.it (Maurizio)</author>
                <category>Test</category>
                <pubDate>Wed, 16 Nov 2005 01:13:16 +0100</pubDate>
            </item>
    
        </channel>
    </rss>
    La prima parte è di intestazione, gli ultimi due tag chiudono il feed, mentre il ramo <ITEM> sarà ripetuto tante volte quanti sono gli articoli presenti.

    Dopo questa (doverosa) introduzione, passiamo senza indugio alla creazione del nostro primo feed.

  2. #2

    Seconda parte: Creare un feed RSS

    Ora vedremo come creare il nostro primo feed.
    Per prima cosa, scaricate la classe FeedCreator.

    La classe è in grado di creare feed in una varietà di formati (Atom, RSS, ecc) e di prendere le informazioni da una varietà di fonti: file di testo, database, eccetera.

    Noi qui vedremo l'esempio più tipico: una pagina PHP sempre aggiornata che presenta come output un feed in formato RSS 2.0 creato a partire dalle notizie prese in un database MySQL.
    Per cui, presuppongo innanzitutto che voi sappiate come ci si collega ad un database, e come si fa a estrarre le informazioni tramite un ciclo While.

    Per estrarre informazioni da altre fonti o presentarle in altre forme, dovremmo cambiare davvero poco del codice che andrò a presentare.

    Codice PHP:
    header("Content-type: application/xml");
    //Con questa riga mandiamo al browser un header compatibile col formato XML

    //Il blocco seguente fa la connessione al database...
    $dbhost "localhost";
    $dbname "mysql";
    $dbuser "root";
    $dbpass "";
    $query=mysql_connect($dbhost$dbuser$dbpass);
    if (
    $query==FALSE
    die(
    "Errore durante la connessione a MYSQL ".mysql_error());
    mysql_select_db($dbname ,$query);
    //E quest'altro seleziona le ultime 7 notizie
    $query2 "SELECT * FROM tabella ORDER BY data DESC LIMIT 7"
    $risultato=mysql_query($query2,$query); 

    //Ora iniziamo a occuparci del feed vero e proprio
    require_once("feedcreator.class.php"); 
    //includiamo la classe col nome che le abbiamo assegnato
        
    //e inizializziamo l'oggetto con parametri personalizzati (descrizione, titolo e link)
    $rss = new UniversalFeedCreator(); 
    $rss->useCached(); 
    $rss->title "GuardaQua.it"
    $rss->description "Feed del blog di Maurizio"
    $rss->link "http://www.guardaqua.it";  //Questo non viene reso nel feed, sarà un bug
    $rss->feedURL "http://www.guardaqua.it/rss/rss.php"

    //Questa funzione rimpiazza alcuni caratteri speciali con le relative entità XML
    //serve per evitare errori nell'output
    function xmlentities $string ) {
        
    $ar1 = array ( '&amp;' '&quot;''&apos;' '&lt;' '&gt;' );
        
    $ar2 = array ( '&''"'"’"'<''>' ) ;
        return 
    str_replace $ar1 $ar2$string );
    }
        
    //Questo ciclo che estrae le notizie dal DB e le inserisce come nuovo ITEM nel feed
    //I campi da cui estraggo le notizie si chiamano 'subject', 'content', 'cat', e 'pubdate'
    //ma nel vostro caso i nomi potrebbero essere differenti, e alcuni campi assenti
    //(come Author nel mio caso)
    while ($data=mysql_fetch_array($risultato)) { 
        
    //Eseguo xhtmlentities() sui primi due campi, che potrebbero contenere entità non valide
        
    $data['subject'] = xmlentities($data['subject']);
        
    $data['content'] = xmlentities($data['content']);

        
    //E ora comincio a inserire le informazioni di ogni item.
        
    $item = new FeedItem(); 
        
    //notate come a volte prendo i dati così come sono dal db, altre li costruisco al volo
        
    $item->title $data['subject'];
        
    $item->link "http://www.guardaqua.it/index.php?a=".$data['id'] ;
        
    $item->description $data['content'];
        
    $item->category $data['cat'];
        
    //La mia PUBDATE è in formato UNIX TIMESTAMP, ma la classe la converte in formato leggibile
        
    $item->date $data['date'];
        
    //Questa riga per me è invariabile
        
    $item->author "info@guardaqua.it (Maurizio)";

        
    //Definiamo le opzioni dell'item: questo contiene tag HTML...
        
    $item->descriptionHtmlSyndicated true;
        
    //avremmo impostato FALSE per togliere i tag HTML
        
        //...e contiene anche l'elemento <category>
        
    $item->categoryHtmlSyndicated true;

        
    //decommentando la riga seguente, troncheremmo Description (anche con tag) dopo 500 caratteri
        //item->descriptionTruncSize = 500;

        
    $rss->addItem($item); //Questo lasciatelo, inserisce il nuovo item coi dati appena processati


    //E infine l'output a video.
    echo $rss->createFeed("RSS2.0"""); 
    //Ovviamente abbiamo anche la possibilità di salvare il file su disco, o di scegliere altri formati
    //Vi rimando ai commenti presenti nella classe per gli esempi del caso. 
    Il risultato è qualcosa di molto simile all'esempio del post precedente, infatti questi due codici non sono altro che il feed del mio sito e lo script che lo crea, rispettivamente

    Per la personalizzazione della fonte di contenuti del feed, del formato (atom o RSS), e altre personalizzazioni, vi rimando alla lettura dei commenti presenti nella classe, che sono davvero molto completi e forniscono diversi esempi.

  3. #3

    Terza parte: inclusione di un feed remoto in una pagina HTML

    E ora vediamo come possiamo inserire un feed online in una nostra pagina php. Per farlo, useremo la classe MagpieRSS.

    Questa è una classe molto potente, ed è di una semplicità disarmante.
    Ecco un esempio di utilizzo:

    Codice PHP:
    <?
    require_once('magpierss/rss_fetch.inc');

    //Questo è l'URL del feed che andremo a parsare. Nell'esempio c'è il mio :-)
    $url "http://www.guardaqua.it/rss/rss.php";

    //apre il feed
    $rss fetch_rss ($url);

    //Metto il titolo del feed in una variabile
    $feedchanneltitle $rss->channel['title'];

    //Comincio a scrivere l'output
    echo '<h1>Sto stampando il contenuto di '.$feedchanneltitle.'</h1>';

    //Incominciamo un ciclo per ogni item
    foreach ($rss->items as $item) {


    //Qui potrei mettere dei controlli: se le variabili non sono vuote, ecc
    //    if(!empty($item['description'])) {

            //Variabilizzo tutto
            
    $itemlink $item['link'];
            
    $itemtitle $item['title'];
            
    $pubdate $item['pubdate'];
            
    $description $item['description'];
            
    $author $item['author'];
            
    $feedurl $dato['feedurl'] ;
        
            
    //Formatto la data con un intero UNIX TIMESTAMP (del tipo 1129218794) per poterla maneggiare
            
    $pubdate strtotime ($pubdate); 
            
    //Formatto la stringa della data secondo i miei gusti
            
    $pubdate date("D, d F Y, G.i"$pubdate);
            

        
    //    } //chiudo eventuali controlli con IF


    //Ora potrei cominciare a stampare il feed a video
    echo '<hr/>';
    echo 
    '<h2>Titolo: '.$itemtitle.', Data: '.$pubdate.'</h2>';
    //Strip_tags è aggiunto per evitare di mostrare l'HTML eventualmente contenuto nell'articolo
    echo '

    '
    .strip_tags($description).'</p>';
    echo 
    '<h3>Da: '.$feedchanneltitle.', Autore: '.$author.'</h3>';
    echo 
    '[url="'.$itemlink.'"]'.$itemlink.'[/url]';

    // chiudo il ciclo FOREACH ITEM
    I contenuti sono formattati con un HTML molto elementare, ma nulla vieta di rendere la visualizzazione più fine (per esempio con i CSS).

    E con questo è tutto. Le due classi qui presentate vi permettono di creare e leggere un feed rss in modo semplice, a voi trovare, con l'aiuto della vostra fantasia, un utilizzo creativo dei feed!

    Spero di aver fatto cosa gradita se non utile con questa pillola, e rimango a vostra disposizione per approfondimenti, domande, o altro.

  4. #4
    Non l'ho letta attentamente, ma la inserisco sulla fiducia nel thread in rilievo
    Addio Aldo, amico mio... [03/12/70 - 16/08/03]

  5. #5
    complimenti! veramente interessante!

  6. #6
    ciao, complimenti per la pillola, stavo provando ma al seconda passaggio salvo la pagina rss.php ( quella che crea l'rss) poi la eseguo e mi dice :

    Errore XML: contenuto illegale dopo l'elemento
    Percorso: http://site.it/site/rss/rss.php
    Linea numero 2, colonna 1:
    Notice: Undefined property: cssStyleSheet in /var/www/vhosts/site.it/httpdocs/site/rss/feedcreator.class.php on line 591

    ^

    cosa è?

    grazie ancora

  7. #7
    Originariamente inviato da pischedda
    Errore XML: contenuto illegale dopo l'elemento
    Percorso: http://site.it/site/rss/rss.php
    Linea numero 2, colonna 1:
    Notice: Undefined property: cssStyleSheet in
    Credo sia un piccolo bug della classe... ma non so ancora programmare a oggetti quindi non ho nemmeno tentato il debug.
    Però prova a mettere, dopo aver iniziato la classe e prima del ciclo di item, questo:
    codice:
    $rss->cssStyleSheet = "";
    Anche io ho avuto lo stesso problema... questo me l'ha risolto.

  8. #8
    ciao grazie della risposta, allora ho fatto come hai detto ora mi presenta questo errore :

    Parse error: parse error, unexpected ',' in /var/www/vhosts/site.it/httpdocs/site/rss/rss.php on line 35

    e la riga 35 è quella della funzione xmlentities :

    Codice PHP:
        return str_replace $ar1 , , $string ); 
    come risolvo?

    grazie ancora

  9. #9
    Per il primo problema, prova a sostituire

    codice:
    if ($this->cssStyleSheet)
    con

    codice:
    if (isset($this->cssStyleSheet) && $this->cssStyleSheet)
    nella riga 591 del file feedcreator.class.php

    La funzione funzione xmlentities in effetti presenta un errore di sintassi, probabilmente dovrebbe essere così

    codice:
     return str_replace ( $ar1 , $ar2, $string );
    ma aspettiamo Petro_suse91 per conferme
    Addio Aldo, amico mio... [03/12/70 - 16/08/03]

  10. #10
    ciao gm grazie per la risposta, allora ho provato entrambi ma ora mi dice :

    Errore XML: contenuto illegale dopo l'elemento
    Percorso: http://ilblog.it/site/rss/rss.php
    Linea numero 2, colonna 1:Notice: Use of undefined constant content - assumed 'content' in /var/www/vhosts/site.it/httpdocs/site/rss/rss.php on line 52

    ^

    il problema sembra essere $data[content] ma nel db è tutto ok e esiste sia il campo content sia il contenuto....

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2019 vBulletin Solutions, Inc. All rights reserved.