Domanda

Ho un vecchio sito che genera la sua propria RSS ogni volta che un nuovo post è stato creato.Tutto ha funzionato quando ero su un server con PHP 4, ma ora che l'host modifica al PHP 5, ho sempre un "cattivo formato XML".Stavo usando xml_parser_create() e xml_parse(...) e fwrite(..) per salvare il tutto.

Ecco un esempio durante il salvataggio (che ho letto prima di salvare per aggiungere vecchio RSS linea, naturalmente).

function SaveXml()
{
    if (!is_file($this->getFileName()))
    {
        //Création du fichier
        $file_handler = fopen($this->getFileName(),"w");

        fwrite($file_handler,"");

        fclose($file_handler);
    }//Fin du if

    //Header xml version="1.0" encoding="utf-8"
    $strFileData = '<?xml version="1.0" encoding="iso-8859-1" ?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/"><channel><title>'.$this->getProjectName().'</title><link>http://www.mywebsite.com</link><description>My description</description><lastBuildDate>' . date("r"). '</lastBuildDate>';

    //Data
    reset($this->arrData);
    foreach($this->arrData as $i => $value)
    {
        $strFileData .= '<item>';
            $strFileData .= '<title>'. $this->GetNews($i,0) . '</title>';
            $strFileData .= '<pubDate>'. $this->GetNews($i,1) . '</pubDate>';
            $strFileData .= '<dc:creator>'. $this->GetNews($i,2) . '</dc:creator>';
            $strFileData .= '<description><![CDATA['. $this->GetNews($i,3) . ']]> </description>';
            $strFileData .= '<link><![CDATA['. $this->GetNews($i,4) . ']]></link>';
            $strFileData .= '<guid>'. $this->GetNews($i,4) . '</guid>';
            //$strFileData .= '<category>'. $this->GetNews($i,5) . '</category>';
            $strFileData .= '<category>Mycategory</category>';
        $strFileData .= '</item>';

    }//Fin du for i


    $strFileData .= '</channel></rss>';



    if (file_exists($this->getFileName()))//Détruit le fichier
        unlink($this->getFileName());


    $file_handler = fopen($this->getFileName(),"w");



    fwrite($file_handler,$strFileData);

    fclose($file_handler);
}//Fin de SaveXml

La mia domanda è :come si fa a creare e riempire il vostro RSS in PHP?

È stato utile?

Soluzione

A swcombine.com usiamo Feedcreator.L'uso che uno e il vostro problema sarà andato.:)

Ecco il codice PHP da utilizzare, una volta installato:

function feed_simnews() {
    $objRSS = new UniversalFeedCreator();
    $objRSS->title = 'My News';
    $objRSS->link = 'http://link.to/news.php';
    $objRSS->description = 'daily news from me';
    $objRSS->xsl = 'http://link.to/feeds/feedxsl.xsl';
    $objRSS->language = 'en';
    $objRSS->copyright = 'Copyright: Mine!';
    $objRSS->webmaster = 'webmaster@somewhere.com';
    $objRSS->syndicationURL = 'http://link.to/news/simnews.php';
    $objRSS->ttl = 180;

    $objImage = new FeedImage();
    $objImage->title = 'my logo';
    $objImage->url = 'http://link.to/feeds/logo.jpg';
    $objImage->link = 'http://link.to';
    $objImage->description = 'Feed provided by link.to. Click to visit.';
    $objImage->width = 120;
    $objImage->height = 60;
    $objRSS->image = $objImage;

    //Function retrieving an array of your news from date start to last week
    $colNews = getYourNews(array('start_date' => 'Last week'));

    foreach($colNews as $p) {
        $objItem = new FeedItem();
        $objItem->title = $p->title;
        $objItem->description = $p->body;
        $objItem->link = $p->link;
        $objItem->date = $p->date;
        $objItem->author = $p->author;
        $objItem->guid = $p->guid;

        $objRSS->addItem($objItem);
    }

    $objRSS->saveFeed('RSS2.0', 'http://link.to/feeds/news.xml', false);
};

Abbastanza BACIO.:)

Altri suggerimenti

Vorrei utilizzare simpleXML per creare la struttura necessaria e di esportazione XML.Quindi ho deciso di cache su disco con file_put_contents().

Ho usato questo LGPL-licenza feedcreator classe in passato e ha funzionato abbastanza bene per l'uso molto semplice che ho avuto per farlo.

Non è una risposta completa, ma si non devono analizzare proprio XML.Si farà male di prestazioni e affidabilità.

Ma sicuramente accertarsi che sia ben formato.Non dovrebbe essere molto difficile, se si generano a mano o con strumenti di utilizzo generale.O forse il tuo HTML rovina?

Ci sono un sacco di cose che possono fare XML non valido.Potrebbe essere un problema con le entità carattere (un '<', '>', o '&' nei dati tra i tag XML).Provare a eseguire qualsiasi cosa uscita da un database tramite htmlentities() quando si concatenare la stringa.Avete un esempio di codice XML generato per noi a guardare in modo che possiamo vedere dove è il problema?

PHP5 ora con le SimpleXML estensione, è un bel modo veloce per creare un XML valido se le tue esigenze non sono complicati.

Tuttavia, il problema che si sta suggerendo non sembra un problema di implementazione più un problema di sintassi.Forse si potrebbe aggiornare la tua domanda con un esempio di codice, o una copia del file XML che viene prodotto.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top