Visualizzazione dei risultati da 1 a 10 su 10
  1. #1

    Creare RSS com PHP e MySql

    Ciao sono alle prese con la creazione di RSS attraverso PHP.
    Vi posto lo script che da questo errore:

    Lo stesso errore :

    Su Firefox:

    Errore interpretazione XML: la dichiarazione XML o testuale non è all'inizio di un'entità
    Indirizzo: http://www.dalsalento.it/dalsalento_rss.php
    Linea numero 2, colonna 1:<?xml version="1.0" encoding="utf-8"?>
    ^

    Su explorer

    Dichiarazione XML non valida.
    Riga: 2 Carattere: 3

    <?xml version="1.0" encoding="utf-8"?>

    La pagina in questione è questa www.dalsalento.it/dalsalento_rss.php

    il codice della pagina preso da questo tutorial è riadattato alle mie esigenze è questo :

    Codice PHP:
    <?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...



    //E quest'altro seleziona le ultime 7 notizie
    $risultato=mysql_query("SELECT * FROM articoli WHERE (visible = '1' AND archivio ='0') ORDER BY data_annuncio DESC LIMIT 10"$db);

    //Ora iniziamo a occuparci del feed vero e proprio
    require_once("include/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 "Dal Salento.it"
    $rss->description "Feed del portale Dal Salento.it"
    $rss->link "http://www.dalsalento.it"//Questo non viene reso nel feed, sarà un bug
    $rss->feedURL "http://www.dalsalento.it"

    //Questa funzione rimpiazza alcuni caratteri speciali con le relative entità XML
    //serve per evitare errori nell'output
    function xmlentities $string ) {
    $ar1 = array ( '&' '"''&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['titolo'] = xmlentities($data['titolo']);
    $data['paragrafetto'] = xmlentities($data['paragrafetto']);

    //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->category $data['categoria'];
    $item->title $data['titolo'];
    $item->link "http://www.dalsalento.it/dettaglio.php?id_articolo=".$data['id_articolo'] ;
    $item->description $data['paragrafetto'];
    //La mia PUBDATE è in formato UNIX TIMESTAMP, ma la classe la converte in formato leggibile
    $item->date $data['data_annuncio'];
    //Questa riga per me è invariabile
    $item->author "news@dalsalento.it";

    //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.
    ?>
    GRAZIE PER L'AIUTO!

  2. #2
    Prova a togliere il ritorno a capo all'inizio del file. Così da avere come primissimo carattere del file <.
    La verita' è che... tu sei il debole, e io sono la tirannia degli uomini malvagi, ma ci sto provando ringo, ci sto provando con grandissima fatica a diventare il pastore..

  3. #3
    Niente, ho sempre lo stesso errore!
    Forse è meglio evitare di usare classi già fatte.
    Qualcuno sa indicarmi un tutorial da seguire per creare RSS da PHP.
    grazie

  4. #4

  5. #5
    Io continuo a vedere la prima riga del file vuota.

    Non sto parlando del php, ma del risultato xml.
    La verita' è che... tu sei il debole, e io sono la tirannia degli uomini malvagi, ma ci sto provando ringo, ci sto provando con grandissima fatica a diventare il pastore..

  6. #6
    come ti suggeriva 8matt5, c'è un ritorno a capo di troppo:

    1.
    2. <?xml version="1.0" encoding="utf-8"?>

    devi togliere quello


    EDIT: ho visto dopo la risposta di 8matt5

  7. #7
    Scusate ma non riesco a trovare lo spazio di troppo.
    devo cercare nella classe feed.class.php?
    Quel file lo ho lasciato così come lo ho scaricato.

  8. #8
    così a occhio andrei a vedere in UniversalFeedCreator..

    EDIT: o in createFeed()

  9. #9
    Ciao Maje.
    Ho provato ad eseguire il link che mi hai mandato:
    http://www.webreference.com/authori...s/custom_feeds/

    Mi da questo errore che mi sembra molto simile all'errore di spazio che avevo nel mio post precedente.

    Errore interpretazione XML: contenuto illegale dopo l'elemento
    Indirizzo: http://www.dalsalento.it/dalsalento_rss.php
    Linea numero 7, colonna 20: </item><item>
    -------------------^

    Questo è il mio codice diviso in due file tralasciando quello ci connessione al db :

    FILE RSS.PHP

    Codice PHP:
     <?   
    header
    ("Content-Type: application/xml; charset=ISO-8859-1");   
    include(
    "include/rss.class.php");   
    $rss = new RSS();   
    echo 
    $rss->GetFeed();
    ?>
    FILE rss.class.php

    Codice PHP:
    <?      
       
    class RSS   
       
    {   
        public function 
    RSS()   
        {     
             require 
    "file db";
    $db mysql_connect(MYSQL_HOSTMYSQL_USERMYSQL_PASSWORD) or
        die(
    'unable to connect. Check your connection parameters.');
    mysql_select_db(MYSQL_DB$db) or die(mysql_error($db));
         }   
      
       public function 
    GetFeed()   
        {   
            return 
    $this->getDetails() . $this->getItems();   
        }   
      
         private function 
    dbConnect()   
         {   
             
    DEFINE ('LINK'mysql_connect (MYSQL_HOSTMYSQL_USERMYSQL_PASSWORD));   
         }   
       
         private function 
    getDetails()   
         {   
            
    $detailsTable "rss";   
             
    $this->dbConnect($detailsTable);   
            
    $query "SELECT * FROM "$detailsTable;   
             
    $result mysql_db_query (MYSQL_DB$queryLINK);   
      
            while(
    $row mysql_fetch_array($result))   
            {   
                 
    $details '<?xml version="1.0" encoding="ISO-8859-1" ?>   
                    <rss version="2.0">   
                         <channel>   
                             <title>'
    $row['title'] .'</title>   
                             <link>'
    $row['link'] .'</link>   
                             <description>'
    $row['description'] .'</description>   
                           <language>'
    $row['language'] .'</language>   
                            <image>   
                                 <title>'
    $row['image_title'] .'</title>   
                                 <url>'
    $row['image_url'] .'</url>   
                                 <link>'
    $row['image_link'] .'</link>   
                                 <width>'
    $row['image_width'] .'</width>   
                                 <height>'
    $row['image_height'] .'</height>   
                             </image>'
    ;   
             }   
            return 
    $details;   
         }   
       
         private function 
    getItems()   
         {   
             
    $itemsTable "articoli";   
             
    $this->dbConnect($itemsTable);   
             
    $query "SELECT * FROM "$itemsTable;   
             
    $result mysql_db_query (MYSQL_DB$queryLINK);   
            
    $items '';   
            while(
    $row mysql_fetch_array($result))   
             {   
                 
    $items .= '<item>   
                     <title>'
    $row["titolo"] .'</title>   
                    <link>'
    $row["id_articolo"] .'</link>   
                     <description><![CDATA['
    $row["paragrafetto"] .']]></description>   
                </item>'
    ;   
            }   
            
    $items .= '</channel>   
     </rss>'
    ;   
    return 
    $items;   
    }   
    }   
    ?>
    Dove sto sbagliando???
    Grazie in anticipo

  10. #10
    Probabilmente la tabella rss è vuota, quindi la funzione getDetails() non stampa l'inizio del file.

    Inoltre nel caso tu abbia più righe in questa tabella, la funzione ritorna l'ultima del recordset che non è sicuro quale possa essere.

    C'è una cosa che non ho ancora capito, però... il sorgente del tuo file comincia con 4 spazi e 2 ritorni a capo. Da dove nascono? Sei sicuro che tutti i file php che usi comincino con il tag <? o <?php senza null'altro prima?
    La verita' è che... tu sei il debole, e io sono la tirannia degli uomini malvagi, ma ci sto provando ringo, ci sto provando con grandissima fatica a diventare il pastore..

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 © 2024 vBulletin Solutions, Inc. All rights reserved.