3 function date_cmp($a, $b)
10 function agg_single($url, $num, $skiptr)
12 $feed = new SimplePie($url);
13 $feed->enable_cache(true);
14 $feed->set_cache_duration(3600);
15 $feed->set_cache_location('./cache');
17 $chtitle = $feed->get_title();
18 $chdesc = $feed->get_description();
19 $chlink = $feed->get_permalink();
21 $f = array('url' => $url);
23 $items = read_feed($feed, $f, $num, $skiptr);
24 return write_xml($items, $chtitle, $chlink, $chdesc);
29 function agg($feeds, $chtitle, $chlink, $chdesc, $numperfeed,
32 require_once('simplepie.inc');
36 foreach ($feeds as $f) {
37 $feed = new SimplePie($f['url']);
38 $feed->enable_cache(true);
39 $feed->set_cache_duration(3600);
40 $feed->set_cache_location('./cache');
43 $a = read_feed($feed, $f, $numperfeed, $skiptwitterreplies);
44 $items = array_merge($items, $a);
48 // sort all the items by date
49 usort(&$items, 'date_cmp');
51 return write_xml($items, $chtitle, $chlink, $chdesc);
54 function read_feed($feed, $f, $n, $skiptwitterreplies)
59 foreach ($feed->get_items() as $r) {
60 if ($n >= 0 && $c >= $n) break;
63 if (!empty($f['name']))
64 $i['name'] = $f['name'];
66 $ra = $r->get_author();
67 if ($ra && $ra->get_name())
68 $i['name'] = $ra->get_name();
69 if ($ra && $ra->get_email())
70 $i['name'] = $ra->get_email();
75 $i['nick'] = $f['nick'];
77 $i['image'] = $r->get_link(0, 'image');
78 if (empty($i['image'])) {
79 if (!empty($f['image']))
80 $i['image'] = 'rss/heads/'.$f['image'];
82 $i['image'] = 'rss/heads/noimage.png';
84 $i['link'] = $r->get_permalink();
85 $i['text'] = $r->get_content();
86 $i['title'] = $r->get_title();
87 $i['feedurl'] = $feed->get_permalink();
88 $i['feedtitle'] = $feed->get_title();
89 $i['id'] = md5($i['link'].$i['feedurl'].$i['date']);
90 $i['date'] = (int)$r->get_date('U')-(int)$r->get_date('Z');
92 // strip off an enclosing div (wordpress)
93 $i['text'] = preg_replace("/^\s*<div.*?>(.*)<\/div.*?>\s*$/s",
95 // strip off leading br's
96 $i['text'] = preg_replace('/^\s*(<br[^>]*>)*/s', '', $i['text']);
97 // strip off trailing br's
98 $i['text'] = preg_replace('/(<br[^>]*>)*\s*$/s', '', $i['text']);
99 // strip out script tags
100 $i['text'] = preg_replace('/<script(>| .*?>).*?<\/script(>| .*?>)/s', '', $i['text']);
102 if ($skiptwitterreplies) {
103 if (preg_match('/^[a-zA-Z0-9_]+: @[a-zA-Z0-9_\/]+/', $i['title']))
104 continue; // skip this
113 function write_xml($items, $chtitle, $chlink, $chdesc) {
114 $w = new XMLWriter();
116 $w->startDocument('1.0');
118 $w->startElement('feed');
119 $w->writeElement('title', $chtitle);
120 $w->writeElement('link', $chlink);
121 $w->writeElement('description', $chdesc);
122 foreach ($items as &$i) {
123 $w->startElement('item');
124 foreach ($i as $k => $v)
125 $w->writeElement($k, htmlspecialchars_decode($v));
126 $w->endElement(); // item
128 $w->endElement(); // feed
130 return $w->outputMemory();