Created
September 17, 2018 00:17
-
-
Save artlung/c16c4fde69fe090d0ee936ce3de20794 to your computer and use it in GitHub Desktop.
RSSWriter
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
// PHP 7 changes made 2018/09/16 artlung | |
// Joe Crawford <mailto:joe@artlung.com> | |
// | |
// $Id: rss10.inc,v 1.2 2006/05/08 03:13:40 arensb Exp $ | |
// | |
// A convenience class to make it easy to write RSS classes | |
// Edd Dumbill <mailto:edd+rsswriter@usefulinc.com> | |
// | |
// $Log: rss10.inc,v $ | |
// Revision 1.2 2006/05/08 03:13:40 arensb | |
// Cleaned up indentation, K&R style. | |
// | |
// Revision 1.1.1.1 2006/04/26 12:23:02 arensb | |
// Mirror of Subversion source, so I can keep track of my changes. | |
// | |
// Revision 1.3 2001/05/20 17:58:02 edmundd | |
// Final distribution tweaks. | |
// | |
// Revision 1.2 2001/05/20 17:41:30 edmundd | |
// Ready for distribution. | |
// | |
// Revision 1.1 2001/05/20 17:01:43 edmundd | |
// First functional draft of code working. | |
// | |
// Revision 1.1 2001/05/17 18:17:46 edmundd | |
// Start of a convenience library to help RSS1.0 creation | |
// | |
class RSSWriter { | |
var $chaninfo = []; | |
var $website; | |
var $items; | |
var $modules; | |
var $channelURI; | |
var $image; | |
/** | |
* RSSWriter constructor. | |
* @param $uri | |
* @param $title | |
* @param $description | |
* @param array $meta | |
*/ | |
function __construct($uri, $title, $description, $meta=array()) { | |
$this->chaninfo=array(); | |
$this->website=$uri; | |
$this->chaninfo["link"]=$uri; | |
$this->chaninfo["description"]=$description; | |
$this->chaninfo["title"]=$title; | |
$this->items=array(); | |
$this->modules=array("dc" => "http://purl.org/dc/elements/1.1/"); | |
// thanks James Mills for bugfix to this line | |
$this->channelURI=str_replace("&", "&", "http://" . $_SERVER["SERVER_NAME"] . $_SERVER["REQUEST_URI"]); | |
foreach ($meta as $key => $value) { | |
$this->chaninfo[$key]=$value; | |
} | |
} | |
/** | |
* @param $prefix | |
* @param $uri | |
*/ | |
function useModule($prefix, $uri) { | |
$this->modules[$prefix]=$uri; | |
} | |
/** | |
* @param $imgURI | |
* @param $imgAlt | |
* @param int $imgWidth | |
* @param int $imgHeight | |
*/ | |
function setImage($imgURI, $imgAlt, $imgWidth=88, $imgHeight=31) { | |
$this->image=array( | |
"uri" => $imgURI, "title" => $imgAlt, "width" => $imgWidth, | |
"height" => $imgHeight | |
); | |
} | |
/** | |
* @param $uri | |
* @param $title | |
* @param array $meta | |
*/ | |
function addItem($uri, $title, $meta=array()) { | |
$item=array("uri" => $uri, "link" => $uri, | |
"title" => $this->deTag($title)); | |
foreach ($meta as $key => $value) | |
{ | |
if ($key == "description" || $key == "dc:description") | |
{ | |
$value=$this->deTag($value); | |
} | |
$item[$key]=$value; | |
} | |
$this->items[]=$item; | |
} | |
/** | |
* | |
*/ | |
function serialize() { | |
$this->preamble(); | |
$this->channelinfo(); | |
$this->image(); | |
$this->items(); | |
$this->postamble(); | |
} | |
/** | |
* @param $in | |
* @return null|string|string[] | |
*/ | |
function deTag($in) { | |
while(preg_match('/<[^>]+>/', $in)) { | |
$in = preg_replace('/<[^>]+>/', '', $in); | |
} | |
return $in; | |
} | |
/** | |
* | |
*/ | |
function preamble() { | |
header("Content-type: text/xml"); | |
print '<?xml version="1.0" encoding="utf-8"?>'; | |
print '<rdf:RDF '; | |
print ' xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"'; | |
print ' xmlns="http://purl.org/rss/1.0/"'; | |
print "\n"; | |
foreach ($this->modules as $prefix => $uri) { | |
print " xmlns:${prefix}=\"${uri}\"\n"; | |
} | |
print ">\n\n"; | |
} | |
/** | |
* | |
*/ | |
function channelinfo() { | |
print ' <channel rdf:about="' . $this->channelURI . '">'; | |
print "\n"; | |
$i=$this->chaninfo; | |
foreach (array("title", "link", "dc:source", "description", | |
"dc:language", "dc:publisher", | |
"dc:creator", "dc:rights") as $f) { | |
if (isset($i[$f])) { | |
print " <${f}>" . htmlspecialchars($i[$f]) . "</${f}>\n"; | |
} | |
} | |
if (isset($this->image)) { | |
print " <image rdf:resource=\"" . htmlspecialchars($this->image["uri"]) . "\" />\n"; | |
} | |
print " <items>\n"; | |
print " <rdf:Seq>\n"; | |
foreach ($this->items as $i) { | |
print " <rdf:li rdf:resource=\"" . htmlspecialchars($i["uri"]) . "\" />\n"; | |
} | |
print " </rdf:Seq>\n"; | |
print " </items>\n"; | |
print " </channel>\n\n"; | |
} | |
/** | |
* | |
*/ | |
function image() { | |
if (isset($this->image)) { | |
print " <image rdf:about=\"" . htmlspecialchars($this->image["uri"]) . "\">\n"; | |
print " <title>" . htmlspecialchars($this->image["title"]) . "</title>\n"; | |
print " <url>" . htmlspecialchars($this->image["uri"]) . "</url>\n"; | |
print " <link>" . htmlspecialchars($this->website) . "</link>\n"; | |
if ($this->chaninfo["description"]) | |
print " <dc:description>" . | |
htmlspecialchars($this->chaninfo["description"]) . | |
"</dc:description>\n"; | |
print " </image>\n\n"; | |
} | |
} | |
/** | |
* | |
*/ | |
function postamble() { | |
print '</rdf:RDF>'; | |
} | |
/** | |
* | |
*/ | |
function items() { | |
foreach ($this->items as $item) { | |
print " <item rdf:about=\"" . htmlspecialchars($item["uri"]) . "\">\n"; | |
foreach ($item as $key => $value) { | |
if ($key!="uri") { | |
if (is_array($value)) { | |
foreach ($value as $v1) { | |
print " <${key}>" . htmlspecialchars($v1) . "</${key}>\n"; | |
} | |
} else { | |
print " <${key}>" . htmlspecialchars($value) . "</${key}>\n"; | |
} | |
} | |
} | |
print " </item>\n\n"; | |
} | |
} | |
} | |
?> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment