Pergunta

Eu tenho um site antigo que gera seu próprio RSS toda vez que uma nova postagem é criada. Tudo funcionou quando eu estava em um servidor com Php 4, mas agora que o host muda para o PHP 5, sempre tenho um "XML formado ruim". Eu estava usando xml_parser_create () e xml_parse (...) e fwrite (..) para salvar tudo.

Aqui está o exemplo ao salvar (eu li antes de salvar para anexar a linha RSS antiga, é claro).

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

Minha pergunta é: como você cria e preenche seu RSS no PHP?

Foi útil?

Solução

Em swcombine.com usamos Feedcreator. Use esse e seu problema desaparecerá. :)

Aqui está o código PHP para usá -lo uma vez instalado:

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);
};

Beije bastante beijo. :)

Outras dicas

eu usaria Simpxml Para criar a estrutura necessária e exportar o XML. Em seguida, eu cache no disco com file_put_contents ().

Eu usei Esta classe de criaturas de feeds licenciada por LGPL No passado e funcionou muito bem para o uso muito simples que eu tinha para isso.

Não é uma resposta completa, mas você Não tem que analisar Seu próprio XML. Isso prejudicará o desempenho e a confiabilidade.

Mas definitivamente verifique se é bem formado. Não deve ser muito difícil se você gerá-lo manualmente ou usar ferramentas de uso geral. Ou talvez o seu HTML incluído o arruine?

Há muitas coisas que podem tornar XML malformadas. Pode ser um problema com as entidades dos personagens (a '<', '>' ou '&' nos dados entre as tags XML). Tente executar qualquer coisa em que a saída de um banco de dados através do htmlEntities () quando você concatena a string. Você tem um exemplo do XML gerado para nós olharmos para que possamos ver onde está o problema?

Php5 agora vem com o SimpleXML Extensão, é uma maneira bastante rápida de criar XML válido se suas necessidades não forem complicadas.

No entanto, o problema que você está sugerindo não parece uma questão de implementação mais um problema de sintaxe. Talvez você possa atualizar sua pergunta com um exemplo de código ou uma cópia do XML produzido.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top