以下为引用的内容: <?php /** * rss操作类 * * FeedCreator class v1.7.2 * originally (c) Kai Blankenhorn * www.bitfolge.de * kaibbitfolge.de * */ // your local timezone, set to "" to disable or for GMT define("TIME_ZONE",""); /** * Version string. **/ define("FEEDCREATOR_VERSION", "www.273.cn"); /** * A FeedItem is a part of a FeedCreator feed. * * author Kai Blankenhorn <kaibbitfolge.de> * since 1.3 */ class FeedItem extends HtmlDescribable { /** * Mandatory attributes of an item. */ var $title, $description, $link; /** * Optional attributes of an item. */ var $author, $authorEmail, $image, $category, $comments, $guid, $source, $creator; /** * Publishing date of an item. May be in one of the following formats: * * RFC 822: * "Mon, 20 Jan 03 18:05:41 +0400" * "20 Jan 03 18:05:41 +0000" * * ISO 8601: * "2003-01-20T18:05:41+04:00" * * Unix: * 1043082341 */ var $date; /** * Any additional elements to include as an assiciated array. All $key => $value pairs * will be included unencoded in the feed item in the form * <$key>$value</$key> * Again: No encoding will be used! This means you can invalidate or enhance the feed * if $value contains markup. This may be abused to embed tags not implemented by * the FeedCreator class used. */ var $additionalElements = Array(); // on hold // var $source; } /** * An FeedImage may be added to a FeedCreator feed. * author Kai Blankenhorn <kaibbitfolge.de> * since 1.3 */ class FeedImage extends HtmlDescribable { /** * Mandatory attributes of an image. */ var $title, $url, $link; /** * Optional attributes of an image. */ var $width, $height, $description; } /** * An HtmlDescribable is an item within a feed that can have a description that may * include HTML markup. */ class HtmlDescribable { /** * Indicates whether the description field should be rendered in HTML. */ var $descriptionHtmlSyndicated; /** * Indicates whether and to how many characters a description should be truncated. */ var $descriptionTruncSize; /** * Returns a formatted description field, depending on descriptionHtmlSyndicated and * $descriptionTruncSize properties * return string the formatted description */ function getDescription() { $descriptionField = new FeedHtmlField($this->description); $descriptionField->syndicateHtml = $this->descriptionHtmlSyndicated; $descriptionField->truncSize = $this->descriptionTruncSize; return $descriptionField->output(); } } /** * An FeedHtmlField describes and generates * a feed, item or image html field (probably a description). Output is * generated based on $truncSize, $syndicateHtml properties. * author Pascal Van Hecke <feedcreator.class.phpvanhecke.info> * version 1.6 */ class FeedHtmlField { /** * Mandatory attributes of a FeedHtmlField. */ var $rawFieldContent; /** * Optional attributes of a FeedHtmlField. * */ var $truncSize, $syndicateHtml; /** * Creates a new instance of FeedHtmlField. * param $string: if given, sets the rawFieldContent property */ function FeedHtmlField($parFieldContent) { if ($parFieldContent) { $this->rawFieldContent = $parFieldContent; } } /** * Creates the right output, depending on $truncSize, $syndicateHtml properties. * return string the formatted field */ function output() { // when field available and syndicated in html we assume // - valid html in $rawFieldContent and we enclose in CDATA tags // - no truncation (truncating risks producing invalid html) 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; } } /** * UniversalFeedCreator lets you choose during runtime which * format to build. * For general usage of a feed class, see the FeedCreator class * below or the example above. * * since 1.3 * author Kai Blankenhorn <kaibbitfolge.de> */ 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}; } } } /** * Creates a syndication feed based on the items previously added. * * see FeedCreator::addItem() * param string format format the feed should comply to. Valid values are: * "PIE0.1", "mbox", "RSS0.91", "RSS1.0", "RSS2.0", "OPML", "ATOM0.3", "HTML", "JS" * return string the contents of the feed. */ function createFeed($format = "RSS0.91") { $this->_setFormat($format); return $this->_feed->createFeed(); } /** * Saves this feed as a file on the local disk. After the file is saved, an HTTP redirect * header may be sent to redirect the use to the newly created file. * since 1.4 * * param string format format the feed should comply to. Valid values are: * "PIE0.1" (deprecated), "mbox", "RSS0.91", "RSS1.0", "RSS2.0", "OPML", "ATOM", "ATOM0.3", "HTML", "JS" * param string filename optional the filename where a recent version of the feed is saved. If not specified, the filename is $_SERVER["PHP_SELF"] with the extension changed to .xml (see _generateFilename()). * param boolean displayContents optional send the content of the file or not. If true, the file will be sent in the body of the response. */ function saveFeed($format="RSS0.91", $filename="", $displayContents=true) { $this->_setFormat($format); $this->_feed->saveFeed($filename, $displayContents); } /** * Turns on caching and checks if there is a recent version of this feed in the cache. * If there is, an HTTP redirect header is sent. * To effectively use caching, you should create the FeedCreator object and call this method * before anything else, especially before you do the time consuming task to build the feed * (web fetching, for example). * * param string format format the feed should comply to. Valid values are: * "PIE0.1" (deprecated), "mbox", "RSS0.91", "RSS1.0", "RSS2.0", "OPML", "ATOM0.3". * param filename string optional the filename where a recent version of the feed is saved. If not specified, the filename is $_SERVER["PHP_SELF"] with the extension changed to .xml (see _generateFilename()). * param timeout int optional the timeout in seconds before a cached version is refreshed (defaults to 3600 = 1 hour) */ function useCached($format="RSS0.91", $filename="", $timeout=3600) { $this->_setFormat($format); $this->_feed->useCached($filename, $timeout); } } /** * FeedCreator is the abstract base implementation for concrete * implementations that implement a specific format of syndication. * * abstract * author Kai Blankenhorn <kaibbitfolge.de> * since 1.4 */ class FeedCreator extends HtmlDescribable { /** * Mandatory attributes of a feed. */ var $title, $description, $link; /** * Optional attributes of a feed. */ var $syndicationURL, $image, $language, $copyright, $pubDate, $lastBuildDate, $editor, $editorEmail, $webmaster, $category, $docs, $ttl, $rating, $skipHours, $skipDays; /** * The url of the external xsl stylesheet used to format the naked rss feed. * Ignored in the output when empty. */ var $xslStyleSheet = ""; /** * access private */ var $items = Array(); /** * This feed's MIME content type. * since 1.4 * access private */ var $contentType = "application/xml"; /** * This feed's character encoding. * since 1.6.1 **/ var $encoding = "utf-8"; /** * Any additional elements to include as an assiciated array. All $key => $value pairs * will be included unencoded in the feed in the form * <$key>$value</$key> * Again: No encoding will be used! This means you can invalidate or enhance the feed * if $value contains markup. This may be abused to embed tags not implemented by * the FeedCreator class used. */ var $additionalElements = Array(); /** * Adds an FeedItem to the feed. * * param object FeedItem $item The FeedItem to add to the feed. * access public */ function addItem($item) { $this->items[] = $item; } /** * 清空当前数组值 * * param object FeedItem $item The FeedItem to add to the feed. * access public */ function clearItem2Null() { $this->items = array(); } /** * Truncates a string to a certain length at the most sensible point. * First, if there's a '.' character near the end of the string, the string is truncated after this character. * If there is no '.', the string is truncated after the last ' ' character. * If the string is truncated, " ..." is appended. * If the string is already shorter than $length, it is returned unchanged. * * static * param string string A string to be truncated. * param int length the maximum length the string should be truncated to * return string the truncated string */ 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)." ..."; } /** * Creates a comment indicating the generator of this feed. * The format of this comment seems to be recognized by * Syndic8.com. */ function _createGeneratorComment() { return "<!-- generator=\"".FEEDCREATOR_VERSION."\" -->\n"; } /** * Creates a string containing all additional elements specified in * $additionalElements. * param elements array an associative array containing key => value pairs * param indentString string a string that will be inserted before every generated line * return string the XML tags corresponding to $additionalElements */ 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."\" _fcksavedurl="\"".$this->cssStyleSheet."\"" type=\"text/css\"?>\n"; if ($this->xslStyleSheet) $xml .= "<?xml-stylesheet href=\"".$this->xslStyleSheet."\" type=\"text/xsl\"?>\n"; return $xml; } /** * Builds the feed's text. * abstract * return string the feed's complete text */ function createFeed() { } /** * Generate a filename for the feed cache file. The result will be $_SERVER["PHP_SELF"] with the extension changed to .xml. * For example: * * echo $_SERVER["PHP_SELF"]."\n"; * echo FeedCreator::_generateFilename(); * * would produce: * * /rss/latestnews.php * latestnews.xml * * return string the feed cache filename * since 1.4 * access private */ function _generateFilename() { $fileInfo = pathinfo($_SERVER["PHP_SELF"]); return substr($fileInfo["basename"],0,-(strlen($fileInfo["extension"])+1)).".xml"; } |