-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathrssGenerator.php
83 lines (70 loc) · 2.16 KB
/
rssGenerator.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
<?php
class RssGenerator {
private $_channel = array();
private $_items = array();
public function __construct($title=NULL,$link=NULL,$description=NULL,$pubDate=NULL,$lastBuildDate=NULL,$otherElements=array()) {
date_default_timezone_set("Asia/Hong_Kong");
// necessary elements
$this->_channel["title"] = $title ? $this->escape($title) : "";
$this->_channel["link"] = $link ? $this->escape($link) : "";
$this->_channel["description"] = $description ? $this->escape($description) : "";
// special treatment for date
$this->_channel["pubDate"] = $pubDate ? date(DATE_RSS,$pubDate) : date(DATE_RSS);
$this->_channel["lastBuildDate"] = $lastBuildDate ? date(DATE_RSS,$lastBuildDate) : date(DATE_RSS);
// other elements
foreach ($otherElements as $tag => $value) {
$this->_chennel[$tag] = $value;
}
}
public function set($tag,$value) {
if (!in_array($tag, array("pubDate","lastBuildDate"))) {
$this->_chennel[$tag] = $value;
}
else {
// special treatment for date
$this->_channel[$tag] = $value ? date(DATE_RSS,$value ) : date(DATE_RSS);
}
}
public function addItem($elements=array("title"=>"no title")) { // specification demands at least a title/desc is present
$this->_items[] = $elements;
}
public function generate() {
$rss = <<<EOT
<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0">
<channel>
EOT;
foreach ($this->_channel as $tag => $val) {
$rss .= " <".$tag.">";
$rss .= $val;
$rss .= "</".$tag.">";
$rss .= PHP_EOL;
}
foreach ($this->_items as $item) {
$rss .= " <item>".PHP_EOL;
foreach ($item as $tag => $val) {
$rss .= " <".$tag.">";
$rss .= $val;
$rss .= "</".$tag.">".PHP_EOL;
}
$rss .= " </item>".PHP_EOL;
}
$rss .= <<<EOT
</channel>
</rss>
EOT;
return $rss;
}
public function publish() {
ob_clean();
header("Content-Type: text/xml; charset=utf-8");
echo $this->generate();
}
private function escape($str) {
return str_replace(
array("\"","'","<",">","&"),
array(""","'","<",">","&"),
$str
);
}
};