changeset 30:647b72603b7d

Script to autogenerate a sitemap.
author Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
date Sun, 30 Sep 2012 03:39:32 +0200
parents 394b5df43d1a
children f37be50a70cf 7b19be62ea94
files sitemap.php
diffstat 1 files changed, 113 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sitemap.php	Sun Sep 30 03:39:32 2012 +0200
@@ -0,0 +1,113 @@
+<?
+header('Content-type: application/xml');
+print '<?xml version="1.0" encoding="UTF-8"?>';
+print "\n";
+?>
+<urlset
+      xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
+      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+      xsi:schemaLocation="http://www.sitemaps.org/schemas/sitemap/0.9
+            http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd">
+<?
+include_once('php/Options.inc');
+
+function startswith($haystack, $needle) {
+    return strpos($haystack, $needle) === 0;
+}
+
+function endsWith($haystack, $needle) {
+  $l = strlen($haystack) - strlen($needle);
+  return strrpos($haystack, $needle) === $l;
+}
+
+function getHeaders($url)
+{
+  $response = http_head($url, array("timeout"=>1), $info);
+  $headers = array();
+  $str = explode("\n", $response);
+  foreach($str as $kv) {
+    $p = strpos($kv, ":");
+    if ($p) {
+      $key = substr($kv, 0, $p);
+      $value = trim(substr($kv, $p + 1));
+      $headers[$key] = $value;
+    }
+  }
+  return $headers;
+}
+
+function opttostring($opts)
+{
+  $str = '';
+  foreach (array_keys($opts) as $key) {
+    $value = $opts[$key];
+    if ($str) {
+      $str .= "&${key}=${value}";
+    }
+    else {
+      $str = "?${key}=${value}";
+    }
+  }
+  return $str;
+}
+
+
+$master = new DOMDocument();
+$master->load("master.xml");
+
+$options = new Options($master);
+
+$base = 'http://' . $_SERVER["SERVER_NAME"] . $_SERVER["REQUEST_URI"];
+$base = substr($base, 0, strrpos($base, '/'));
+
+$acceptedLanguages = $options->getAcceptedLanguages();
+
+foreach($options->getAcceptedLanguages() as $lang) {
+  if ($handle = opendir("${lang}")) {
+    while (false !== ($entry = readdir($handle))) {
+      if (endsWith($entry, '.xml')) {
+	$fentry = "${lang}/${entry}";
+	$doc = new DOMDocument();
+
+	if (file_exists($fentry)) {
+	  $doc->load($fentry);
+
+	  $opts = array();
+	  if ($acceptedLanguages->length > 1) {
+	    $opts['lang'] = $lang;
+	  }
+
+	  $toplevel = $doc->getElementsByTagName("toplevel");
+
+	  if($toplevel->length) {
+	    $name = substr($entry, 0, -4);
+
+	    if ($name != $options->getInputDefault('name')) {
+	      $opts['name'] = $name;
+	    }
+
+	    $optstring = opttostring($opts);
+
+	    $location = "${base}/${optstring}";
+	    $headers = getHeaders($location);
+
+	    $location = htmlentities($location);
+
+	    $lastmod = $headers["Last-Modified"];
+	    $lastmod = strtotime($lastmod);
+	    $lastmod = date(DateTime::W3C, $lastmod);
+
+	    print "<url>\n";
+	    print "<loc>${location}</loc>\n";
+	    print "<lastmod>${lastmod}</lastmod>\n";
+	    print "</url>\n";
+	  }
+	}
+      }
+    }
+    closedir($handle);
+  }
+}
+
+?>
+</urlset>
\ No newline at end of file