annotate sitemap.php @ 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
children f37be50a70cf
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
30
647b72603b7d Script to autogenerate a sitemap.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff changeset
1 <?
647b72603b7d Script to autogenerate a sitemap.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff changeset
2 header('Content-type: application/xml');
647b72603b7d Script to autogenerate a sitemap.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff changeset
3 print '<?xml version="1.0" encoding="UTF-8"?>';
647b72603b7d Script to autogenerate a sitemap.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff changeset
4 print "\n";
647b72603b7d Script to autogenerate a sitemap.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff changeset
5 ?>
647b72603b7d Script to autogenerate a sitemap.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff changeset
6 <urlset
647b72603b7d Script to autogenerate a sitemap.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff changeset
7 xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
647b72603b7d Script to autogenerate a sitemap.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff changeset
8 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
647b72603b7d Script to autogenerate a sitemap.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff changeset
9 xsi:schemaLocation="http://www.sitemaps.org/schemas/sitemap/0.9
647b72603b7d Script to autogenerate a sitemap.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff changeset
10 http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd">
647b72603b7d Script to autogenerate a sitemap.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff changeset
11 <?
647b72603b7d Script to autogenerate a sitemap.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff changeset
12 include_once('php/Options.inc');
647b72603b7d Script to autogenerate a sitemap.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff changeset
13
647b72603b7d Script to autogenerate a sitemap.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff changeset
14 function startswith($haystack, $needle) {
647b72603b7d Script to autogenerate a sitemap.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff changeset
15 return strpos($haystack, $needle) === 0;
647b72603b7d Script to autogenerate a sitemap.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff changeset
16 }
647b72603b7d Script to autogenerate a sitemap.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff changeset
17
647b72603b7d Script to autogenerate a sitemap.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff changeset
18 function endsWith($haystack, $needle) {
647b72603b7d Script to autogenerate a sitemap.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff changeset
19 $l = strlen($haystack) - strlen($needle);
647b72603b7d Script to autogenerate a sitemap.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff changeset
20 return strrpos($haystack, $needle) === $l;
647b72603b7d Script to autogenerate a sitemap.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff changeset
21 }
647b72603b7d Script to autogenerate a sitemap.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff changeset
22
647b72603b7d Script to autogenerate a sitemap.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff changeset
23 function getHeaders($url)
647b72603b7d Script to autogenerate a sitemap.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff changeset
24 {
647b72603b7d Script to autogenerate a sitemap.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff changeset
25 $response = http_head($url, array("timeout"=>1), $info);
647b72603b7d Script to autogenerate a sitemap.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff changeset
26 $headers = array();
647b72603b7d Script to autogenerate a sitemap.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff changeset
27 $str = explode("\n", $response);
647b72603b7d Script to autogenerate a sitemap.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff changeset
28 foreach($str as $kv) {
647b72603b7d Script to autogenerate a sitemap.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff changeset
29 $p = strpos($kv, ":");
647b72603b7d Script to autogenerate a sitemap.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff changeset
30 if ($p) {
647b72603b7d Script to autogenerate a sitemap.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff changeset
31 $key = substr($kv, 0, $p);
647b72603b7d Script to autogenerate a sitemap.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff changeset
32 $value = trim(substr($kv, $p + 1));
647b72603b7d Script to autogenerate a sitemap.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff changeset
33 $headers[$key] = $value;
647b72603b7d Script to autogenerate a sitemap.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff changeset
34 }
647b72603b7d Script to autogenerate a sitemap.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff changeset
35 }
647b72603b7d Script to autogenerate a sitemap.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff changeset
36 return $headers;
647b72603b7d Script to autogenerate a sitemap.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff changeset
37 }
647b72603b7d Script to autogenerate a sitemap.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff changeset
38
647b72603b7d Script to autogenerate a sitemap.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff changeset
39 function opttostring($opts)
647b72603b7d Script to autogenerate a sitemap.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff changeset
40 {
647b72603b7d Script to autogenerate a sitemap.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff changeset
41 $str = '';
647b72603b7d Script to autogenerate a sitemap.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff changeset
42 foreach (array_keys($opts) as $key) {
647b72603b7d Script to autogenerate a sitemap.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff changeset
43 $value = $opts[$key];
647b72603b7d Script to autogenerate a sitemap.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff changeset
44 if ($str) {
647b72603b7d Script to autogenerate a sitemap.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff changeset
45 $str .= "&${key}=${value}";
647b72603b7d Script to autogenerate a sitemap.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff changeset
46 }
647b72603b7d Script to autogenerate a sitemap.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff changeset
47 else {
647b72603b7d Script to autogenerate a sitemap.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff changeset
48 $str = "?${key}=${value}";
647b72603b7d Script to autogenerate a sitemap.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff changeset
49 }
647b72603b7d Script to autogenerate a sitemap.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff changeset
50 }
647b72603b7d Script to autogenerate a sitemap.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff changeset
51 return $str;
647b72603b7d Script to autogenerate a sitemap.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff changeset
52 }
647b72603b7d Script to autogenerate a sitemap.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff changeset
53
647b72603b7d Script to autogenerate a sitemap.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff changeset
54
647b72603b7d Script to autogenerate a sitemap.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff changeset
55 $master = new DOMDocument();
647b72603b7d Script to autogenerate a sitemap.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff changeset
56 $master->load("master.xml");
647b72603b7d Script to autogenerate a sitemap.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff changeset
57
647b72603b7d Script to autogenerate a sitemap.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff changeset
58 $options = new Options($master);
647b72603b7d Script to autogenerate a sitemap.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff changeset
59
647b72603b7d Script to autogenerate a sitemap.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff changeset
60 $base = 'http://' . $_SERVER["SERVER_NAME"] . $_SERVER["REQUEST_URI"];
647b72603b7d Script to autogenerate a sitemap.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff changeset
61 $base = substr($base, 0, strrpos($base, '/'));
647b72603b7d Script to autogenerate a sitemap.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff changeset
62
647b72603b7d Script to autogenerate a sitemap.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff changeset
63 $acceptedLanguages = $options->getAcceptedLanguages();
647b72603b7d Script to autogenerate a sitemap.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff changeset
64
647b72603b7d Script to autogenerate a sitemap.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff changeset
65 foreach($options->getAcceptedLanguages() as $lang) {
647b72603b7d Script to autogenerate a sitemap.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff changeset
66 if ($handle = opendir("${lang}")) {
647b72603b7d Script to autogenerate a sitemap.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff changeset
67 while (false !== ($entry = readdir($handle))) {
647b72603b7d Script to autogenerate a sitemap.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff changeset
68 if (endsWith($entry, '.xml')) {
647b72603b7d Script to autogenerate a sitemap.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff changeset
69 $fentry = "${lang}/${entry}";
647b72603b7d Script to autogenerate a sitemap.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff changeset
70 $doc = new DOMDocument();
647b72603b7d Script to autogenerate a sitemap.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff changeset
71
647b72603b7d Script to autogenerate a sitemap.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff changeset
72 if (file_exists($fentry)) {
647b72603b7d Script to autogenerate a sitemap.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff changeset
73 $doc->load($fentry);
647b72603b7d Script to autogenerate a sitemap.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff changeset
74
647b72603b7d Script to autogenerate a sitemap.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff changeset
75 $opts = array();
647b72603b7d Script to autogenerate a sitemap.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff changeset
76 if ($acceptedLanguages->length > 1) {
647b72603b7d Script to autogenerate a sitemap.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff changeset
77 $opts['lang'] = $lang;
647b72603b7d Script to autogenerate a sitemap.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff changeset
78 }
647b72603b7d Script to autogenerate a sitemap.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff changeset
79
647b72603b7d Script to autogenerate a sitemap.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff changeset
80 $toplevel = $doc->getElementsByTagName("toplevel");
647b72603b7d Script to autogenerate a sitemap.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff changeset
81
647b72603b7d Script to autogenerate a sitemap.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff changeset
82 if($toplevel->length) {
647b72603b7d Script to autogenerate a sitemap.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff changeset
83 $name = substr($entry, 0, -4);
647b72603b7d Script to autogenerate a sitemap.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff changeset
84
647b72603b7d Script to autogenerate a sitemap.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff changeset
85 if ($name != $options->getInputDefault('name')) {
647b72603b7d Script to autogenerate a sitemap.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff changeset
86 $opts['name'] = $name;
647b72603b7d Script to autogenerate a sitemap.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff changeset
87 }
647b72603b7d Script to autogenerate a sitemap.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff changeset
88
647b72603b7d Script to autogenerate a sitemap.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff changeset
89 $optstring = opttostring($opts);
647b72603b7d Script to autogenerate a sitemap.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff changeset
90
647b72603b7d Script to autogenerate a sitemap.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff changeset
91 $location = "${base}/${optstring}";
647b72603b7d Script to autogenerate a sitemap.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff changeset
92 $headers = getHeaders($location);
647b72603b7d Script to autogenerate a sitemap.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff changeset
93
647b72603b7d Script to autogenerate a sitemap.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff changeset
94 $location = htmlentities($location);
647b72603b7d Script to autogenerate a sitemap.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff changeset
95
647b72603b7d Script to autogenerate a sitemap.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff changeset
96 $lastmod = $headers["Last-Modified"];
647b72603b7d Script to autogenerate a sitemap.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff changeset
97 $lastmod = strtotime($lastmod);
647b72603b7d Script to autogenerate a sitemap.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff changeset
98 $lastmod = date(DateTime::W3C, $lastmod);
647b72603b7d Script to autogenerate a sitemap.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff changeset
99
647b72603b7d Script to autogenerate a sitemap.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff changeset
100 print "<url>\n";
647b72603b7d Script to autogenerate a sitemap.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff changeset
101 print "<loc>${location}</loc>\n";
647b72603b7d Script to autogenerate a sitemap.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff changeset
102 print "<lastmod>${lastmod}</lastmod>\n";
647b72603b7d Script to autogenerate a sitemap.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff changeset
103 print "</url>\n";
647b72603b7d Script to autogenerate a sitemap.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff changeset
104 }
647b72603b7d Script to autogenerate a sitemap.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff changeset
105 }
647b72603b7d Script to autogenerate a sitemap.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff changeset
106 }
647b72603b7d Script to autogenerate a sitemap.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff changeset
107 }
647b72603b7d Script to autogenerate a sitemap.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff changeset
108 closedir($handle);
647b72603b7d Script to autogenerate a sitemap.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff changeset
109 }
647b72603b7d Script to autogenerate a sitemap.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff changeset
110 }
647b72603b7d Script to autogenerate a sitemap.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff changeset
111
647b72603b7d Script to autogenerate a sitemap.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff changeset
112 ?>
647b72603b7d Script to autogenerate a sitemap.
Tom Fredrik "BFG" Klaussen <bfg@blenning.no>
parents:
diff changeset
113 </urlset>