feedcreator.class.php
来自「php 开发的内容管理系统」· PHP 代码 · 共 1,572 行 · 第 1/4 页
PHP
1,572 行
/**
* Gets the date stored in this FeedDate as an RFC 822 date.
*
* @return a date in RFC 822 format
*/
function rfc822() {
//return gmdate("r",$this->unix);
$date = gmdate("D, d M Y H:i:s", $this->unix);
if (TIME_ZONE!="") $date .= " ".str_replace(":","",TIME_ZONE);
return $date;
}
/**
* Gets the date stored in this FeedDate as an ISO 8601 date.
*
* @return a date in ISO 8601 format
*/
function iso8601() {
$date = gmdate("Y-m-d\TH:i:sO",$this->unix);
$date = substr($date,0,22) . ':' . substr($date,-2);
if (TIME_ZONE!="") $date = str_replace("+00:00",TIME_ZONE,$date);
return $date;
}
/**
* Gets the date stored in this FeedDate as unix time stamp.
*
* @return a date as a unix time stamp
*/
function unix() {
return $this->unix;
}
}
/**
* RSSCreator10 is a FeedCreator that implements RDF Site Summary (RSS) 1.0.
*
* @see http://www.purl.org/rss/1.0/
* @since 1.3
* @author Kai Blankenhorn <kaib@bitfolge.de>
*/
class RSSCreator10 extends FeedCreator {
/**
* Builds the RSS feed's text. The feed will be compliant to RDF Site Summary (RSS) 1.0.
* The feed will contain all items previously added in the same order.
* @return string the feed's complete text
*/
function createFeed() {
$feed = "<?xml version=\"1.0\" encoding=\"".$this->encoding."\"?>\n";
$feed.= $this->_createGeneratorComment();
if ($this->cssStyleSheet=="") {
$cssStyleSheet = "http://www.w3.org/2000/08/w3c-synd/style.css";
}
$feed.= $this->_createStylesheetReferences();
$feed.= "<rdf:RDF\n";
$feed.= " xmlns=\"http://purl.org/rss/1.0/\"\n";
$feed.= " xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\"\n";
$feed.= " xmlns:slash=\"http://purl.org/rss/1.0/modules/slash/\"\n";
$feed.= " xmlns:dc=\"http://purl.org/dc/elements/1.1/\">\n";
$feed.= " <channel rdf:about=\"".$this->syndicationURL."\">\n";
$feed.= " <title>".htmlspecialchars($this->title)."</title>\n";
$feed.= " <description>".htmlspecialchars($this->description)."</description>\n";
$feed.= " <link>".$this->link."</link>\n";
if ($this->image!=null) {
$feed.= " <image rdf:resource=\"".$this->image->url."\" />\n";
}
$now = new FeedDate();
$feed.= " <dc:date>".htmlspecialchars($now->iso8601())."</dc:date>\n";
$feed.= " <items>\n";
$feed.= " <rdf:Seq>\n";
for ($i=0;$i<count($this->items);$i++) {
$feed.= " <rdf:li rdf:resource=\"".htmlspecialchars($this->items[$i]->link)."\"/>\n";
}
$feed.= " </rdf:Seq>\n";
$feed.= " </items>\n";
$feed.= " </channel>\n";
if ($this->image!=null) {
$feed.= " <image rdf:about=\"".$this->image->url."\">\n";
$feed.= " <title>".$this->image->title."</title>\n";
$feed.= " <link>".$this->image->link."</link>\n";
$feed.= " <url>".$this->image->url."</url>\n";
$feed.= " </image>\n";
}
$feed.= $this->_createAdditionalElements($this->additionalElements, " ");
for ($i=0;$i<count($this->items);$i++) {
$feed.= " <item rdf:about=\"".htmlspecialchars($this->items[$i]->link)."\">\n";
//$feed.= " <dc:type>Posting</dc:type>\n";
$feed.= " <dc:format>text/html</dc:format>\n";
if ($this->items[$i]->date!=null) {
$itemDate = new FeedDate($this->items[$i]->date);
$feed.= " <dc:date>".htmlspecialchars($itemDate->iso8601())."</dc:date>\n";
}
if ($this->items[$i]->source!="") {
$feed.= " <dc:source>".htmlspecialchars($this->items[$i]->source)."</dc:source>\n";
}
if ($this->items[$i]->author!="") {
$feed.= " <dc:creator>".htmlspecialchars($this->items[$i]->author)."</dc:creator>\n";
}
$feed.= " <title>".htmlspecialchars(strip_tags(strtr($this->items[$i]->title,"\n\r"," ")))."</title>\n";
$feed.= " <link>".htmlspecialchars($this->items[$i]->link)."</link>\n";
$feed.= " <description>".htmlspecialchars($this->items[$i]->description)."</description>\n";
$feed.= $this->_createAdditionalElements($this->items[$i]->additionalElements, " ");
$feed.= " </item>\n";
}
$feed.= "</rdf:RDF>\n";
return $feed;
}
}
/**
* RSSCreator091 is a FeedCreator that implements RSS 0.91 Spec, revision 3.
*
* @see http://my.netscape.com/publish/formats/rss-spec-0.91.html
* @since 1.3
* @author Kai Blankenhorn <kaib@bitfolge.de>
*/
class RSSCreator091 extends FeedCreator {
/**
* Stores this RSS feed's version number.
* @access private
*/
var $RSSVersion;
function RSSCreator091() {
$this->_setRSSVersion("0.91");
$this->contentType = "application/rss+xml";
}
/**
* Sets this RSS feed's version number.
* @access private
*/
function _setRSSVersion($version) {
$this->RSSVersion = $version;
}
/**
* Builds the RSS feed's text. The feed will be compliant to RDF Site Summary (RSS) 1.0.
* The feed will contain all items previously added in the same order.
* @return string the feed's complete text
*/
function createFeed() {
$feed = "<?xml version=\"1.0\" encoding=\"".$this->encoding."\"?>\n";
$feed.= $this->_createGeneratorComment();
$feed.= $this->_createStylesheetReferences();
$feed.= "<rss version=\"".$this->RSSVersion."\">\n";
$feed.= " <channel>\n";
$feed.= " <title>".FeedCreator::iTrunc(htmlspecialchars($this->title),100)."</title>\n";
$this->descriptionTruncSize = 500;
$feed.= " <description>".$this->getDescription()."</description>\n";
$feed.= " <link>".$this->link."</link>\n";
$now = new FeedDate();
$feed.= " <lastBuildDate>".htmlspecialchars($now->rfc822())."</lastBuildDate>\n";
$feed.= " <generator>".FEEDCREATOR_VERSION."</generator>\n";
if ($this->image!=null) {
$feed.= " <image>\n";
$feed.= " <url>".$this->image->url."</url>\n";
$feed.= " <title>".FeedCreator::iTrunc(htmlspecialchars($this->image->title),100)."</title>\n";
$feed.= " <link>".$this->image->link."</link>\n";
if ($this->image->width!="") {
$feed.= " <width>".$this->image->width."</width>\n";
}
if ($this->image->height!="") {
$feed.= " <height>".$this->image->height."</height>\n";
}
if ($this->image->description!="") {
$feed.= " <description>".$this->image->getDescription()."</description>\n";
}
$feed.= " </image>\n";
}
if ($this->language!="") {
$feed.= " <language>".$this->language."</language>\n";
}
if ($this->copyright!="") {
$feed.= " <copyright>".FeedCreator::iTrunc(htmlspecialchars($this->copyright),100)."</copyright>\n";
}
if ($this->editor!="") {
$feed.= " <managingEditor>".FeedCreator::iTrunc(htmlspecialchars($this->editor),100)."</managingEditor>\n";
}
if ($this->webmaster!="") {
$feed.= " <webMaster>".FeedCreator::iTrunc(htmlspecialchars($this->webmaster),100)."</webMaster>\n";
}
if ($this->pubDate!="") {
$pubDate = new FeedDate($this->pubDate);
$feed.= " <pubDate>".htmlspecialchars($pubDate->rfc822())."</pubDate>\n";
}
if ($this->category!="") {
$feed.= " <category>".htmlspecialchars($this->category)."</category>\n";
}
if ($this->docs!="") {
$feed.= " <docs>".FeedCreator::iTrunc(htmlspecialchars($this->docs),500)."</docs>\n";
}
if ($this->ttl!="") {
$feed.= " <ttl>".htmlspecialchars($this->ttl)."</ttl>\n";
}
if ($this->rating!="") {
$feed.= " <rating>".FeedCreator::iTrunc(htmlspecialchars($this->rating),500)."</rating>\n";
}
if ($this->skipHours!="") {
$feed.= " <skipHours>".htmlspecialchars($this->skipHours)."</skipHours>\n";
}
if ($this->skipDays!="") {
$feed.= " <skipDays>".htmlspecialchars($this->skipDays)."</skipDays>\n";
}
$feed.= $this->_createAdditionalElements($this->additionalElements, " ");
for ($i=0;$i<count($this->items);$i++) {
$feed.= " <item>\n";
$feed.= " <title>".FeedCreator::iTrunc(htmlspecialchars(strip_tags($this->items[$i]->title)),100)."</title>\n";
$feed.= " <link>".htmlspecialchars($this->items[$i]->link)."</link>\n";
$feed.= " <description>".$this->items[$i]->getDescription()."</description>\n";
if ($this->items[$i]->author!="") {
$feed.= " <author>".htmlspecialchars($this->items[$i]->author)."</author>\n";
}
/*
// on hold
if ($this->items[$i]->source!="") {
$feed.= " <source>".htmlspecialchars($this->items[$i]->source)."</source>\n";
}
*/
if ($this->items[$i]->category!="") {
$feed.= " <category>".htmlspecialchars($this->items[$i]->category)."</category>\n";
}
if ($this->items[$i]->comments!="") {
$feed.= " <comments>".htmlspecialchars($this->items[$i]->comments)."</comments>\n";
}
if ($this->items[$i]->date!="") {
$itemDate = new FeedDate($this->items[$i]->date);
$feed.= " <pubDate>".htmlspecialchars($itemDate->rfc822())."</pubDate>\n";
}
if ($this->items[$i]->guid!="") {
$feed.= " <guid>".htmlspecialchars($this->items[$i]->guid)."</guid>\n";
}
$feed.= $this->_createAdditionalElements($this->items[$i]->additionalElements, " ");
$feed.= " </item>\n";
}
$feed.= " </channel>\n";
$feed.= "</rss>\n";
return $feed;
}
}
/**
* RSSCreator20 is a FeedCreator that implements RDF Site Summary (RSS) 2.0.
*
* @see http://backend.userland.com/rss
* @since 1.3
* @author Kai Blankenhorn <kaib@bitfolge.de>
*/
class RSSCreator20 extends RSSCreator091 {
function RSSCreator20() {
parent::_setRSSVersion("2.0");
}
}
/**
* PIECreator01 is a FeedCreator that implements the emerging PIE specification,
* as in http://intertwingly.net/wiki/pie/Syntax.
*
* @deprecated
* @since 1.3
* @author Scott Reynen <scott@randomchaos.com> and Kai Blankenhorn <kaib@bitfolge.de>
*/
class PIECreator01 extends FeedCreator {
function PIECreator01() {
$this->encoding = "utf-8";
}
function createFeed() {
$feed = "<?xml version=\"1.0\" encoding=\"".$this->encoding."\"?>\n";
$feed.= $this->_createStylesheetReferences();
$feed.= "<feed version=\"0.1\" xmlns=\"http://example.com/newformat#\">\n";
$feed.= " <title>".FeedCreator::iTrunc(htmlspecialchars($this->title),100)."</title>\n";
$this->truncSize = 500;
$feed.= " <subtitle>".$this->getDescription()."</subtitle>\n";
$feed.= " <link>".$this->link."</link>\n";
for ($i=0;$i<count($this->items);$i++) {
$feed.= " <entry>\n";
$feed.= " <title>".FeedCreator::iTrunc(htmlspecialchars(strip_tags($this->items[$i]->title)),100)."</title>\n";
$feed.= " <link>".htmlspecialchars($this->items[$i]->link)."</link>\n";
$itemDate = new FeedDate($this->items[$i]->date);
$feed.= " <created>".htmlspecialchars($itemDate->iso8601())."</created>\n";
$feed.= " <issued>".htmlspecialchars($itemDate->iso8601())."</issued>\n";
$feed.= " <modified>".htmlspecialchars($itemDate->iso8601())."</modified>\n";
$feed.= " <id>".htmlspecialchars($this->items[$i]->guid)."</id>\n";
if ($this->items[$i]->author!="") {
$feed.= " <author>\n";
$feed.= " <name>".htmlspecialchars($this->items[$i]->author)."</name>\n";
if ($this->items[$i]->authorEmail!="") {
$feed.= " <email>".$this->items[$i]->authorEmail."</email>\n";
}
$feed.=" </author>\n";
}
$feed.= " <content type=\"text/html\" xml:lang=\"en-us\">\n";
$feed.= " <div xmlns=\"http://www.w3.org/1999/xhtml\">".$this->items[$i]->getDescription()."</div>\n";
$feed.= " </content>\n";
$feed.= " </entry>\n";
}
$feed.= "</feed>\n";
return $feed;
}
}
/**
* AtomCreator03 is a FeedCreator that implements the atom specification,
* as in http://www.intertwingly.net/wiki/pie/FrontPage.
* Please note that just by using AtomCreator03 you won't automatically
* produce valid atom files. For example, you have to specify either an editor
* for the feed or an author for every single feed item.
*
* Some elements have not been implemented yet. These are (incomplete list):
* author URL, item author's email and URL, item contents, alternate links,
* other link content types than text/html. Some of them may be created with
* AtomCreator03::additionalElements.
*
* @see FeedCreator#additionalElements
* @since 1.6
* @author Kai Blankenhorn <kaib@bitfolge.de>, Scott Reynen <scott@randomchaos.com>
*/
class AtomCreator03 extends FeedCreator {
function AtomCreator03() {
$this->contentType = "application/atom+xml";
$this->encoding = "utf-8";
}
function createFeed() {
$feed = "<?xml version=\"1.0\" encoding=\"".$this->encoding."\"?>\n";
$feed.= $this->_createGeneratorComment();
$feed.= $this->_createStylesheetReferences();
$feed.= "<feed version=\"0.3\" xmlns=\"http://purl.org/atom/ns#\"";
if ($this->language!="") {
$feed.= " xml:lang=\"".$this->language."\"";
}
$feed.= ">\n";
$feed.= " <title>".htmlspecialchars($this->title)."</title>\n";
$feed.= " <tagline>".htmlspecialchars($this->description)."</tagline>\n";
$feed.= " <link rel=\"alternate\" type=\"text/html\" href=\"".htmlspecialchars($this->link)."\"/>\n";
$feed.= " <id>".htmlspecialchars($this->link)."</id>\n";
$now = new FeedDate();
$feed.= " <modified>".htmlspecialchars($now->iso8601())."</modified>\n";
if ($this->editor!="") {
$feed.= " <author>\n";
$feed.= " <name>".$this->editor."</name>\n";
if ($this->editorEmail!="") {
$feed.= " <email>".$this->editorEmail."</email>\n";
}
$feed.= " </author>\n";
}
$feed.= " <generator>".FEEDCREATOR_VERSION."</generator>\n";
$feed.= $this->_createAdditionalElements($this->additionalElements, " ");
for ($i=0;$i<count($this->items);$i++) {
$feed.= " <entry>\n";
$feed.= " <title>".htmlspecialchars(strip_tags($this->items[$i]->title))."</title>\n";
$feed.= " <link rel=\"alternate\" type=\"text/html\" href=\"".htmlspecialchars($this->items[$i]->link)."\"/>\n";
if ($this->items[$i]->date=="") {
$this->items[$i]->date = time();
}
$itemDate = new FeedDate($this->items[$i]->date);
$feed.= " <created>".htmlspecialchars($itemDate->iso8601())."</created>\n";
$feed.= " <issued>".htmlspecialchars($itemDate->iso8601())."</issued>\n";
$feed.= " <modified>".htmlspecialchars($itemDate->iso8601())."</modified>\n";
$feed.= " <id>".htmlspecialchars($this->items[$i]->link)."</id>\n";
$feed.= $this->_createAdditionalElements($this->items[$i]->additionalElements, " ");
if ($this->items[$i]->author!="") {
$feed.= " <author>\n";
$feed.= " <name>".htmlspecialchars($this->items[$i]->author)."</name>\n";
$feed.= " </author>\n";
}
if ($this->items[$i]->description!="") {
$feed.= " <summary>".htmlspecialchars($this->items[$i]->description)."</summary>\n";
}
$feed.= " </entry>\n";
}
$feed.= "</feed>\n";
return $feed;
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?