📄 xml_domit_rss.php
字号:
<?php/*** DOMIT! RSS is a DOM based RSS parser* @package domit-rss* @subpackage domit-rss-main* @version 0.51* @copyright (C) 2004 John Heinstein. All rights reserved* @license http://www.gnu.org/copyleft/lesser.html LGPL License* @author John Heinstein <johnkarl@nbnet.nb.ca>* @link http://www.engageinteractive.com/domitrss/ DOMIT! RSS Home Page* DOMIT! RSS is Free Software**/if (!defined('DOMIT_RSS_INCLUDE_PATH')) { define('DOMIT_RSS_INCLUDE_PATH', (dirname(__FILE__) . DIRECTORY_SEPARATOR));}/** current version of DOMIT! RSS */define ('DOMIT_RSS_VERSION', '0.51');/** language constant */define('DOMIT_RSS_ELEMENT_LANGUAGE', 'language');/** copyright constant */define('DOMIT_RSS_ELEMENT_COPYRIGHT', 'copyright');/** managing editor constant */define('DOMIT_RSS_ELEMENT_MANAGINGEDITOR', 'managingeditor');/** webmaster constant */define('DOMIT_RSS_ELEMENT_WEBMASTER', 'webmaster');/** pubdate constant */define('DOMIT_RSS_ELEMENT_PUBDATE', 'pubdate');/** last build date constant */define('DOMIT_RSS_ELEMENT_LASTBUILDDATE', 'lastbuilddate');/** category constant */define('DOMIT_RSS_ELEMENT_CATEGORY', 'category');/** generator constant */define('DOMIT_RSS_ELEMENT_GENERATOR', 'generator');/** docs constant */define('DOMIT_RSS_ELEMENT_DOCS', 'docs');/** cloud constant */define('DOMIT_RSS_ELEMENT_CLOUD', 'cloud');/** ttl constant */define('DOMIT_RSS_ELEMENT_TTL', 'ttl');/** image constant */define('DOMIT_RSS_ELEMENT_IMAGE', 'image');/** rating constant */define('DOMIT_RSS_ELEMENT_RATING', 'rating');/** textinput constant */define('DOMIT_RSS_ELEMENT_TEXTINPUT', 'textinput');/** skiphours constant */define('DOMIT_RSS_ELEMENT_SKIPHOURS', 'skiphours');/** skipdays constant */define('DOMIT_RSS_ELEMENT_SKIPDAYS', 'skipdays');/** url constant */define('DOMIT_RSS_ELEMENT_URL', 'url');/** width constant */define('DOMIT_RSS_ELEMENT_WIDTH', 'width');/** height constant */define('DOMIT_RSS_ELEMENT_HEIGHT', 'height');/** guid constant */define('DOMIT_RSS_ELEMENT_GUID', 'guid');/** enclosure constant */define('DOMIT_RSS_ELEMENT_ENCLOSURE', 'enclosure');/** comments constant */define('DOMIT_RSS_ELEMENT_COMMENTS', 'comments');/** source constant */define('DOMIT_RSS_ELEMENT_SOURCE', 'source');/** name constant */define('DOMIT_RSS_ELEMENT_NAME', 'name');/** author constant */define('DOMIT_RSS_ELEMENT_AUTHOR', 'author');/** domain constant */define('DOMIT_RSS_ATTR_DOMAIN', 'domain');/** port constant */define('DOMIT_RSS_ATTR_PORT', 'port');/** path constant */define('DOMIT_RSS_ATTR_PATH', 'path');/** registerProcedure constant */define('DOMIT_RSS_ATTR_REGISTERPROCEDURE', 'registerProcedure');/** protocol constant */define('DOMIT_RSS_ATTR_PROTOCOL', 'protocol');/** url constant */define('DOMIT_RSS_ATTR_URL', 'url');/** length constant */define('DOMIT_RSS_ATTR_LENGTH', 'length');/** type constant */define('DOMIT_RSS_ATTR_TYPE', 'type');/** isPermaLink constant */define('DOMIT_RSS_ATTR_ISPERMALINK', 'isPermaLink');require_once(DOMIT_RSS_INCLUDE_PATH . 'xml_domit_rss_shared.php');/*** The base DOMIT! RSS document class** @package domit-rss* @subpackage domit-rss-main* @author John Heinstein <johnkarl@nbnet.nb.ca>*/class xml_domit_rss_document extends xml_domit_rss_base_document { /** * Constructor * @param string Path to the rss file * @param string Directory in which cache files are to be stored * @param string Expiration time (in seconds) for the cache file * @return Object A new instance of xml_domit_rss_document */ function xml_domit_rss_document($url = '', $cacheDir = './', $cacheTime = '3600') { $this->parser = 'DOMIT_RSS'; $this->xml_domit_rss_base_document($url, $cacheDir, $cacheTime); } //xml_domit_rss_document /** * Performs initialization of the RSS document */ function _init() { $total = $this->node->documentElement->childCount; $itemCounter = 0; $channelCounter = 0; $categoryCounter = 0; for ($i = 0; $i < $total; $i++) { $currNode =& $this->node->documentElement->childNodes[$i]; $tagName = strtolower($currNode->nodeName); switch ($tagName) { case DOMIT_RSS_ELEMENT_ITEM: $this->domit_rss_items[$itemCounter] = new xml_domit_rss_item($currNode); $itemCounter++; break; case DOMIT_RSS_ELEMENT_CHANNEL: $this->domit_rss_channels[$channelCounter] = new xml_domit_rss_channel($currNode); $channelCounter++; break; case DOMIT_RSS_ELEMENT_CATEGORY: $this->domit_rss_categories[$categoryCounter] = new xml_domit_rss_category($currNode); $categoryCounter++; break; case DOMIT_RSS_ELEMENT_IMAGE: $this->DOMIT_RSS_indexer[$tagName] = new xml_domit_rss_image($currNode); break; case DOMIT_RSS_ELEMENT_CLOUD: $this->indexer[$tagName] = new xml_domit_rss_cloud($currNode); break; case DOMIT_RSS_ELEMENT_TEXTINPUT: $this->indexer[$tagName] = new xml_domit_rss_textinput($currNode); break; case DOMIT_RSS_ELEMENT_TITLE: case DOMIT_RSS_ELEMENT_LINK: case DOMIT_RSS_ELEMENT_DESCRIPTION: case DOMIT_RSS_ELEMENT_LANGUAGE: case DOMIT_RSS_ELEMENT_COPYRIGHT: case DOMIT_RSS_ELEMENT_MANAGINGEDITOR: case DOMIT_RSS_ELEMENT_WEBMASTER: case DOMIT_RSS_ELEMENT_PUBDATE: case DOMIT_RSS_ELEMENT_LASTBUILDDATE: case DOMIT_RSS_ELEMENT_GENERATOR: case DOMIT_RSS_ELEMENT_DOCS: case DOMIT_RSS_ELEMENT_TTL: case DOMIT_RSS_ELEMENT_RATING: case DOMIT_RSS_ELEMENT_SKIPHOURS: case DOMIT_RSS_ELEMENT_SKIPDAYS: $this->DOMIT_RSS_indexer[$tagName] = new xml_domit_rss_simpleelement($currNode); break; default: $this->addIndexedElement($currNode); //$this->indexer[$tagName] =& $currNode; } } if ($itemCounter != 0) { $this->DOMIT_RSS_indexer[DOMIT_RSS_ARRAY_ITEMS] =& $this->domit_rss_items; } if ($channelCounter != 0) { $this->DOMIT_RSS_indexer[DOMIT_RSS_ARRAY_CHANNELS] =& $this->domit_rss_channels; } if ($categoryCounter != 0) { $this->DOMIT_RSS_indexer[DOMIT_RSS_ARRAY_CATEGORIES] =& $this->domit_rss_categories; } $this->handleChannelElementsEmbedded(); } //_init /** * Returns the current version of DOMIT! RSS * @return int The current version of DOMIT! RSS */ function getVersion() { return DOMIT_RSS_VERSION; } //getVersion} //xml_domit_rss_document/*** Represents an RSS channel** @package domit-rss* @subpackage domit-rss-main* @author John Heinstein <johnkarl@nbnet.nb.ca>*/class xml_domit_rss_channel extends xml_domit_rss_elementindexer { /** @var array A list of references to channel items */ var $domit_rss_items = array(); /** @var array A list of references to category items */ var $domit_rss_categories = array(); /** * Constructor * @param Object A DOM node containing channel data * @param boolean True if channel elements are siblings of the channel rather than children */ function xml_domit_rss_channel(&$channel, $externalElements = false) { $this->node =& $channel; $this->rssDefinedElements = array('title','link','description','language','copyright', 'managingEditor','webmaster','pubDate','lastBuildDate', 'generator','docs','cloud','ttl','image', 'rating', 'textInput','skipHours','skipDays','domit_rss_channels', 'domit_rss_items','domit_rss_categories'); $this->_init(); } //xml_domit_rss_channel /** * Performs initialization of the RSS channel element */ function _init() { $total = $this->node->childCount; $itemCounter = 0; $categoryCounter = 0; for ($i = 0; $i < $total; $i++) { $currNode =& $this->node->childNodes[$i]; $tagName = strtolower($currNode->nodeName); switch($tagName) { case DOMIT_RSS_ELEMENT_ITEM: $this->domit_rss_items[$itemCounter] = new xml_domit_rss_item($currNode); $itemCounter++; break; case DOMIT_RSS_ELEMENT_CATEGORY: $this->domit_rss_categories[$categoryCounter] = new xml_domit_rss_category($currNode); $categoryCounter++; break; case DOMIT_RSS_ELEMENT_IMAGE: $this->DOMIT_RSS_indexer[$tagName] = new xml_domit_rss_image($currNode); break; case DOMIT_RSS_ELEMENT_CLOUD: $this->DOMIT_RSS_indexer[$tagName] = new xml_domit_rss_cloud($currNode); break; case DOMIT_RSS_ELEMENT_TEXTINPUT: $this->DOMIT_RSS_indexer[$tagName] = new xml_domit_rss_textinput($currNode); break; case DOMIT_RSS_ELEMENT_SKIPHOURS: $this->DOMIT_RSS_indexer[$tagName] = new xml_domit_rss_skiphours($currNode); break; case DOMIT_RSS_ELEMENT_SKIPDAYS: $this->DOMIT_RSS_indexer[$tagName] = new xml_domit_rss_skipdays($currNode); break; case DOMIT_RSS_ELEMENT_TITLE: case DOMIT_RSS_ELEMENT_LINK: case DOMIT_RSS_ELEMENT_DESCRIPTION: case DOMIT_RSS_ELEMENT_LANGUAGE: case DOMIT_RSS_ELEMENT_COPYRIGHT: case DOMIT_RSS_ELEMENT_MANAGINGEDITOR: case DOMIT_RSS_ELEMENT_WEBMASTER: case DOMIT_RSS_ELEMENT_PUBDATE: case DOMIT_RSS_ELEMENT_LASTBUILDDATE: case DOMIT_RSS_ELEMENT_GENERATOR: case DOMIT_RSS_ELEMENT_DOCS: case DOMIT_RSS_ELEMENT_TTL: case DOMIT_RSS_ELEMENT_RATING: $this->DOMIT_RSS_indexer[$tagName] = new xml_domit_rss_simpleelement($currNode); break; default: $this->addIndexedElement($currNode); //$this->DOMIT_RSS_indexer[$tagName] =& $currNode; } } if ($itemCounter != 0) { $this->DOMIT_RSS_indexer[DOMIT_RSS_ARRAY_ITEMS] =& $this->domit_rss_items; } if ($categoryCounter != 0) { $this->DOMIT_RSS_indexer[DOMIT_RSS_ARRAY_CATEGORIES] =& $this->domit_rss_categories; } } //_init /** * Returns the title of the channel * @return string The title of the channel, or an empty string */ function getTitle() { return $this->getElementText(DOMIT_RSS_ELEMENT_TITLE); } //getTitle /** * Returns the url of the channel * @return string The url of the channel, or an empty string */ function getLink() { return $this->getElementText(DOMIT_RSS_ELEMENT_LINK); } //getLink /** * Returns a description of the channel * @return string A description of the channel, or an empty string */ function getDescription() { return $this->getElementText(DOMIT_RSS_ELEMENT_DESCRIPTION); } //getDescription /** * Returns the language of the channel * @return string The language of the channel, or an empty string */ function getLanguage() { return $this->getElementText(DOMIT_RSS_ELEMENT_LANGUAGE); } //getLanguage /** * Returns the copyright of the channel * @return string The copyright of the channel, or an empty string */ function getCopyright() { return $this->getElementText(DOMIT_RSS_ELEMENT_COPYRIGHT); } //getCopyright /** * Returns the managing editor of the channel * @return string The managing editor of the channel, or an empty string */ function getManagingEditor() { return $this->getElementText(DOMIT_RSS_ELEMENT_MANAGINGEDITOR); } //getManagingEditor /** * Returns the webmaster of the channel * @return string The webmaster of the channel, or an empty string */ function getWebMaster() { return $this->getElementText(DOMIT_RSS_ELEMENT_WEBMASTER); } //getWebMaster /** * Returns the publication date of the channel * @return string The publication date of the channel, or an empty string */ function getPubDate() { return $this->getElementText(DOMIT_RSS_ELEMENT_PUBDATE); } //getPubDate /** * Returns the last build date of the channel * @return string The last build date of the channel, or an empty string */ function getLastBuildDate() { return $this->getElementText(DOMIT_RSS_ELEMENT_LASTBUILDDATE); } //getLastBuildDate /** * Returns the generator of the channel * @return string The generator of the channel, or an empty string */ function getGenerator() { return $this->getElementText(DOMIT_RSS_ELEMENT_GENERATOR); } //getGenerator /** * Returns the docs of the channel * @return string The docs of the channel, or an empty string */ function getDocs() { return $this->getElementText(DOMIT_RSS_ELEMENT_DOCS);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -