萬盛學電腦網

 萬盛學電腦網 >> 網絡編程 >> php編程 >> php生成RSS訂閱的方法

php生成RSS訂閱的方法

 本文實例講述了php生成RSS訂閱的方法。分享給大家供大家參考。具體分析如下:

RSS(簡易信息聚合,也叫聚合內容)是一種描述和同步網站內容的格式。RSS可以是以下三個解釋的其中一個: Really Simple Syndication;RDF (Resource Description Framework) Site Summary; Rich Site Summary。但其實這三個解釋都是指同一種Syndication的技術。RSS目前廣泛用於網上新聞頻道,blog和wiki。使用RSS訂閱能更快地獲取信息,網站提供RSS輸出,有利於讓用戶獲取網站內容的最新更新。網絡用戶可以在客戶端借助於支持RSS的聚合工具軟件,在不打開網站內容頁面的情況下閱讀支持RSS輸出的網站內容。
從技術上來說一個RSS文件就是一段規范的XML數據,該文件一般以rss,xml或者rdf作為後綴,下面是一段 rss 文件的內容示例:

代碼如下: <?xml version="1.0" encoding="utf-8"?>
<rss version="2.0">
<channel>
<title>腳本之家</title>
<link>http://www.jb51.net/</link>
<description>腳本之家</description>
<item>
<title>RSS Tutorial</title>
<link>網站地址/rss</link>
<description>New RSS tutorial on W3School</description>
</item>
<item>
<title>XML Tutorial</title>
<link>網站地址/xml</link>
<description>New XML tutorial on W3School</description>
</item>
</channel>
</rss>

 

下面分享一段使用 php 動態生成 RSS 的代碼示例:

代碼如下: <?php
/**
** php 動態生成 RSS 類
**/
define("TIME_ZONE","");
define("FEEDCREATOR_VERSION","www.jb51.net");//您的網址
class FeedItem extends HtmlDescribable{
var $title,$description,$link;
var $author,$authorEmail,$image,$category,$comments,$guid,$source,$creator;
var $date;
var $additionalElements=Array();
}

class FeedImage extends HtmlDescribable{
var $title,$url,$link;
var $width,$height,$description;
}

class HtmlDescribable{
var $descriptionHtmlSyndicated;
var $descriptionTruncSize;

function getDescription(){
$descriptionField=new FeedHtmlField($this->description);
$descriptionField->syndicateHtml=$this->descriptionHtmlSyndicated;
$descriptionField->truncSize=$this->descriptionTruncSize;
return $descriptionField->output();
}
}

class FeedHtmlField{
var $rawFieldContent;
var $truncSize,$syndicateHtml;
function FeedHtmlField($parFieldContent){
if($parFieldContent){
$this->rawFieldContent=$parFieldContent;
}
}
function output(){
if(!$this->rawFieldContent){
$result="";
} elseif($this->syndicateHtml){
$result="<![CDATA[".$this->rawFieldContent."]]>";
}else{
if($this->truncSize and is_int($this->truncSize)){
$result=FeedCreator::iTrunc(htmlspecialchars($this->rawFieldContent),$this->truncSize);
}else{
$result=htmlspecialchars($this->rawFieldContent);
}
}
return $result;
}
}

class UniversalFeedCreator extends FeedCreator{
var $_feed;
function _setFormat($format){
switch (strtoupper($format)){
case "2.0":
// fall through
case "RSS2.0":
$this->_feed=new RSSCreator20();
break;
case "0.91":
// fall through
case "RSS0.91":
$this->_feed=new RSSCreator091();
break;
default:
$this->_feed=new RSSCreator091();
break;
}
$vars=get_object_vars($this);
foreach ($vars as $key => $value){
// prevent overwriting of properties "contentType","encoding"; do not copy "_feed" itself
if(!in_array($key, array("_feed","contentType","encoding"))){
$this->_feed->{$key}=$this->{$key};
}
}
}

function createFeed($format="RSS0.91"){
$this->_setFormat($format);
return $this->_feed->createFeed();
}

function saveFeed($format="RSS0.91",$filename="",$displayContents=true){
$this->_setFormat($format);
$this->_feed->saveFeed($filename,$displayContents);
}

function useCached($format="RSS0.91",$filename="",$timeout=3600){
$this->_setFormat($format);
$this->_feed->useCached($filename,$timeout);
}
}

class FeedCreator extends HtmlDescribable{
var $title,$description,$link;
var $syndicationURL,$image,$language,$copyright,$pubDate,$lastBuildDate,$editor,$editorEmail, $webmaster,$category,$docs,$ttl,$rating,$skipHours,$skipDays;
var $xslStyleSheet="";
var $items=Array();
var $contentType="application/xml";
var $encoding="utf-8";
var $additionalElements=Array();

function addItem($item){
$this->items[]=$item;
}

function clearItem2Null(){
$this->items=array();
}

function iTrunc($string,$length){
if(strlen($string)<=$length){
return $string;
}

$pos=strrpos($string,".");
if($pos>=$length-4){
$string=substr($string,0,$length-4);
$pos=strrpos($string,".");
}
if($pos>=$length*0.4){
return substr($string,0,$pos+1)." ...";
}

$pos=strrpos($string," ");
if($pos>=$length-4){
$string=substr($string,0,$length-4);
$pos=strrpos($string," ");
}
if($pos>=$length*0.4){
return substr($string,0,$pos)." ...";
}

return substr($string,0,$length-4)." ...";
}

function _createGeneratorComment(){
return "<!-- generator="".FEEDCREATOR_VERSION."" -->n";
}

function _createAdditionalElements($elements,$indentString=""){
$ae="";
if(is_array($elements)){
foreach($elements AS $key => $value){
$ae.= $indentString."<$key>$value</$key>n";
}
}
return $ae;
}

function _createStylesheetReferences(){
$xml="";
if($this->cssStyleSheet) $xml .= "<?xml-stylesheet href="".$this->cssStyleSheet."" type="text/css"?>n";
if($this->xslStyleSheet) $xml .= "<?xml-stylesheet href="".$this->xslStyleSheet."" type="text/xsl"?>n";
return $xml;
}

function createFeed(){}

function _generateFilename(){
$fileInfo=pathinfo($_SERVER["PHP_SELF"]);
return substr($fileInfo["basename"],0,-(strlen($fileInfo["extension"])+1)).".xml";
}

function _redirect($filename){
Header("Content-Type: ".$this->contentType."; charset=".$this->encoding."; filename=".basename($filename));
Header("Content-Disposition: inline; filename=".basename($filename));
readfile($filename,"r");
die();
}

function useCached($filename=
copyright © 萬盛學電腦網 all rights reserved