snippets/php/osmrss.php
2012-08-15 00:08:21 +02:00

77 lines
2.5 KiB
PHP

<?php
header ('Content-Type: application/rss+xml; charset=UTF-8');
// urls
$apiUrl = 'http://api.openstreetmap.org/api/0.6';
$historyUrl = 'http://openstreetmap.org/history';
$browseUrl = 'http://openstreetmap.org/browse/changeset/';
$options = $_SERVER['QUERY_STRING'];
$bots = array('bot', 'xylome', 'thomas1904');
$filters = explode(',', @$_GET['filter']);
// set tz
date_default_timezone_set('UTC');
// load changesets from osm api
$ch = curl_init($apiUrl . '/changesets?' . $options);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$content = curl_exec($ch);
curl_close($ch);
// parse changesets
$xml = new DOMDocument();
$xml->loadXML($content);
// initialize rss feed
$rss = new DOMDocument('1.0', 'UTF-8');
$rss->formatOutput = true;
$docEl = $rss->createElement('rss');
$docEl->setAttribute('version', '2.0');
$rss->appendChild($docEl);
$channel = $rss->createElement('channel');
$docEl->appendChild($channel);
$channel->appendChild($rss->createElement('title', 'OSM Changeset Newsfeed'));
$channel->appendChild($rss->createElement('description', 'Keep up to date in your area!'));
$channel->appendChild($rss->createElement('link', $historyUrl . '?' . htmlspecialchars($options)));
// generate rss feed
$changesets = $xml->getElementsByTagName('changeset');
foreach ($changesets as $changeset) {
$add = true;
if (in_array('bots', $filters)) {
foreach ($bots as $bot) {
if (strpos($changeset->getAttribute('user'), $bot) !== false) {
$add = false;
}
}
}
if ($add) {
$item = $rss->createElement('item');
unset($tag);
foreach ($changeset->childNodes as $child) {
if (get_class($child) == 'DOMElement') {
$tag[$child->getAttribute('k')] = htmlspecialchars($child->getAttribute('v'));
}
}
$ts = strtotime(($changeset->getAttribute('closed_at')) ? $changeset->getAttribute('closed_at') : $changeset->getAttribute('created_at'));
$date = date('D, d M Y H:i:s', $ts);
$item->appendChild($rss->createElement('title', (($changeset->getAttribute('open') == 'true') ? '[Editing] ' : '') . $changeset->getAttribute('user') . ((@$tag['comment']) ? ': ' . @$tag['comment'] : '') . (($tag['created_by']) ? ': ' . $tag['created_by'] : '')));
$item->appendChild($rss->createElement('link', $browseUrl . $changeset->getAttribute('id')));
$item->appendChild($rss->createElement('guid', $apiUrl . '/changeset/' . $changeset->getAttribute('id')));
$item->appendChild($rss->createElement('pubDate', $date));
$channel->appendChild($item);
}
}
echo $rss->saveXML();
?>