PHP - RSS oluşturucu

6 Cevap php

Ben yeni bir yazı oluşturulur kendi RSS her şey üretmek eski bir web sitesi var. Ben ne zaman her şey PHP 4 ile bir sunucu üzerinde çalıştı ama şimdi PHP 5 için ev sahibi değişiklik, ben her zaman bir "kötü şekillendirilmiş XML" var. Ben her şeyi kaydetmek için (..) xml_parser_create () ve xml_parse (...) ve fwrite edildi.

(Ben tabii eski RSS satır eklemek için kaydetmeden önce okuyun) kaydederken İşte örnek.

    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

Benim soru: nasıl oluşturmak ve PHP içinde RSS doldurmak mı?

6 Cevap

Swcombine.com anda kullanmak Feedcreator. O birini kullanın ve sorunun gitmiş olacak. :)

İşte bir kez yüklü kullanmak için PHP kodu:

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

Oldukça KISS. :)

I simpleXML gerekli yapıyı oluşturmak ve XML ihracat için kullanırsınız. Sonra) (file_put_contents ile diske önbelleğe ediyorum.

Ben geçmişte this LGPL-licensed feedcreator class kullandım ve ben bunun için vardı çok basit bir kullanım için oldukça iyi çalıştı.

PHP5 şimdi SimpleXML uzantısı ile birlikte, bu ihtiyaçları karmaşık değilse, geçerli XML oluşturmak için oldukça hızlı bir yoldur.

Ancak, düşündüren konum sorun uygulamasının bir sorun sözdizimi daha bir sorun görünmüyor. Belki bir örnek kod ile sorunuzu güncellemek veya, üretilen XML bir kopyası olabilir.

Andrew

Tam bir cevap, ama don't have to parse kendi XML. Bu performans ve güvenilirlik zarar edecek.

Ama kesinlikle emin well-formed yapmak. Eğer elle oluşturmak veya genel amaçlı araçları kullanarak eğer çok zor olmamalı. Ya da belki dahil HTML onu mahveder?

XML biçimlendirilmiş yapabilirsiniz şeyler bir sürü vardır. Bu karakter kuruluşlar ile bir sorun olabilir (a '<', '>' veya '&' XML etiketleri arasında veri) olabilir. Eğer bir dizeyi bağlamak Htmlentities aracılığıyla bir veritabanına bir şey çıktı () çalıştırmayı deneyin. Eğer sorun nereye kadar biz görebilirsiniz bize bakmak için oluşturulan XML bir örnek var mı?