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 ( '&' , '"', ''' , '<' , '>' );
$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!