Statistik-Banner für Geolog/OCProp – Nutzer (Update)

Hinweis:
die hier beschriebene Lösung ist teilweise überholt und mein fertiges Skript GSFG[1] bietet einige weitere Funktionen und kann als fertiges Paket heruntergeladen werden

Kürzlich gab es im Wunschliste-Thread zu Geolog/OCProp den Wunsch[2] ein Statistik-Banner mit der Summe beider Plattformen, Geocaching.com und Opencaching.de, zu generieren.

Da ich soetwas schon für mich selbst gebastelt hatte, habe ich mein Script im Forum vorgestellt und möchte das hier auch noch tun.

Wer Geolog und OCProp nutzt und auf eigenem Webspace PHP inkl. GDlib zur Verfügung hat, kann dies recht einfach realisieren. Zur Erklärung der Funktionsweise:
Da geolog für jeden gefundenen Cache jeweils einen Ordner anlegt, kann man die Anzahl dieser Ordner zählen und ausgeben. Hat man diese Zahlen ermittelt, können diese mit den PHP-Image-Befehlen auch in eine Grafik geschrieben werden.

Hier mein PHP-Skript
(Update: jetzt mit Caching/Zwischenspeicher-Funktion):

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
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
<?PHP
//Pfad zu Fonts (TTF)
$fpath = realpath('fonts/verdana.ttf');
$fpath_bold = realpath('fonts/verdana_bold.ttf');
 
//Pfad zur Hintergrundgrafik
$image = "sig.png"; 
 
//Neues Bild auf Basis der Hintergrundgrafik erstellen
$im = imagecreatefrompng($image);
 
//Textfarben definieren
$caches  = ImageColorAllocate ($im, 251, 173, 0); //Textfarbe orange
$text = ImageColorAllocate ($im, 255, 239, 39); //Textfarbe yellow
 
 
//Verzeichnis der dynamischen Signatur ermitteln
$dynsigdir = getcwd();
 
//Dateiname für dynamisch generierte Signatur
$dest_file ="dynsig.png";
 
//Zeitdifferenz fuer das Zwischenspeichern
$maxcache = "10800"; //3h
 
//Zeitdifferenz berechnen sofern Datei vorhanden
if (file_exists($dest_file)) $timediff= time() - filemtime($dest_file);
 
//Pruefen ob Bild vorhanden und Zeitdifferenz ueberschritten, dann neues Bild generieren
if (!file_exists($dest_file) OR $timediff > $maxcache) {
 
	  function count_file($dir)
		{
 
		// pruefen ob Verzeichnis $dir existiert
		if(is_dir($dir))
		  {
		  $afile[directory]=0;
		  $afile[file]=0;
 
		  chdir($dir);
		  $handle=opendir(".");
		  while($file=readdir($handle))
			{
 
			// zaehle Unterverzeichnisse
			if(is_dir($file) && $file!="." && $file!="..")
			  {
			  $afile[directory]++;
			  $afile[directory]+=$y[directory];
			  }
			}
 
		  // gehe eine Ebene zurueck im Verzeichnisbaum
		  chdir("../");
 
 
		  closedir($handle);
		  }
 
		return $afile;
		}
 
	  // Funktionsaufruf fuer Funde
	  $dir="../gcdir/found";
	  $atest=count_file($dir); if ($atest[directory]=="") $atest[directory]="0";
	  $finds=$atest[directory];
 
	  // Funktionsaufruf fuer Versteckte
	  $dir="hidden";
	  $atest=count_file($dir); if ($atest[directory]=="") $atest[directory]="0";
	  $hidden=$atest[directory];
 
 
	//Text der angezeigt werden soll
	ImageTTFText ($im, 8, 0, 29, 10, $text, $fpath_bold, "Geocaching Statistik"); 
	ImageTTFText ($im, 8, 0, 29, 22, $text, $fpath_bold, "von MaxED9");
	ImageTTFText ($im, 8, 0, 29, 36, $caches, $fpath_bold, "gefunden: $finds");
	ImageTTFText ($im, 8, 0, 29, 48, $caches, $fpath_bold, "versteckt: $hidden");
	ImageTTFText ($im, 6, 0, 120, 57, $text, $fpath_bold, "www.max-fun.de");
 
 
 
 
	chdir($dynsigdir);
	//Neues Bild speichern und ausgeben
	Imagepng($im, $dest_file); 
	header("Content-Type: image/png"); 
	Imagepng($im); 
	ImageDestroy ($im); 
	}
 
//altes Bild ausgeben	
else {
	$im = imagecreatefrompng($dest_file);
	header("Content-Type: image/png"); 
	Imagepng($im); 
	ImageDestroy ($im); 
 
	}
 
?>

Damit die Datei dynsig.png geschrieben werden kann, müssen natürlich die entsprechenden Rechte im Ordner dafür vergeben werden.

So in etwa sieht das bei mir aus:
meine Geocaching-Seite
Die Hintergrundgrafik sig.png kann mit jedem Grafikprogramm selbst gestaltet werden, genauso können auch die Textfarben selbst gewählt werden.

Die dazu passende Verzeichnisstruktur sieht dann so aus:
/
|-[gcdir]
| |-[found]
| |-[hidden]
| |- ...
|
|-[signatur]
| |-[fonts]
| | |-verdana.ttf
| | |-verdana_bold.ttf
| |-sig.php
| |-sig.png

Und wer das Ganze nicht als sig.php aufrufen möchte, sondern als jpg oder png kann, sofern vorhanden, das mod_rewrite-Modul des Webservers nutzen.

Dazu muss in den Ordner signatur noch eine Datei namens .htaccess mit folgendem Inhalt:

<IfModule mod_rewrite.c>
RewriteRule ^sig.jpg$ sig.php
</IfModule>

nun kann mit Aufruf von www.adresse.de/signatur/sig.jpg das neue Statistik-Banner angezeigt werden.

Noch ein Hinweis:
Sollte sich bei einem Cache der Name ändern, so benennt Geolog/OCprop lokal auch den Ordner um, beim Upload hingegen wird der umbenannte Ordner hochgeladen und der alte Ordner bleibt ebenfalls auf dem Webserver. Dies hat zur Folge, dass natürlich mehr Ordner mit obigen Script gezählt werden. Sollten also Differenzen auftauchen, einfach mal schauen welche Ordner neue Namen bekommen haben und die alten auf dem Server löschen 😉

Bei Fragen oder Anregungen nur keine Scheu und ab damit in die Kommentare 😉

  1. [1] GSFG – Geocaching Statbar für Geolog/Ocprop
  2. [2] Geolog/OCProp – User-Wunschliste

11 Kommentare

  • Nette Sache eigentlich, aber ich glaube ich müsste mich da erstmal durch alle Verzeichnisse auf dem Webserver klicken um die herauszufinden die dort überflüssig sind, und das sind nicht wenige. Also lasse ich es lieger und warte bis fogg da was direkt in geolog einbaut. Oder alternativ verzichte ich darauf, tue ich ja bisher auch. :mrgreen:

    AntwortenAntworten
  • Max

    @Schrottie: es würde auch reichen wenn fogg, eine Textdatei Datei mit geolog erstellen läßt, in der die 2 Zahlen für Funde und Versteckte drinstehen. Das könnte man dann auch mit PHP auslesen und ist nicht mehr abhängig vom Verzeichnisse zählen 😉

    AntwortenAntworten
  • Das wäre auch eine Möglichkeit. Aber eleganter wäre es schon, wenn geolog/ocprop das gleich selbst machen. Viele tun sich ja schon schwer gnug damit diese beiden Scripte zum laufen zu kriegen, dann noch ein weiteres wäre wohl der Overkill.

    AntwortenAntworten
  • Max

    @Schrottie: Ich kenne mich zuwenig mit Perl aus, kann man damit lokal auch Bilder generieren? Dann wäre es natürlich am Einfachsten.

    AntwortenAntworten
  • eilinger

    Im HTML Code der Statistikseite stehen diese Zahlen doch drin, oder? Kann man die nicht dort “rauspuhlen”?

    AntwortenAntworten
  • Max

    @eilinger: für die Funde trifft das zu, bei den gelegten ist die Zahl nicht im Standard-Template von Geolog drin.
    Aber sicherlich könnte man mit nem Regex auch dort die Zahlen rausholen.

    AntwortenAntworten
  • Oh Mann sind die Cacher aber fleißig, da könnte man richtig neidísch werden – aber weiter so, nur so kommt man zu Erfolgen
    Vy 73 de Wolf

    AntwortenAntworten
  • Kann das Ding nicht irgendwie cachen? Also die Zahlen speichern und nicht jedesmal neu alles zählen. Das mach ja irre Serverlast wenn ich mir sowas in die Sig packe. Sonst aber schönes Tool, würd ich gern auf meinen NWCT-Server tun.

    AntwortenAntworten
  • Max

    @mo-cacher: Klar, Caching kann man auch implementieren. Vielleicht mache ich das auch noch bei Gelegenheit, aber im Moment reicht es mir so und es steht ja auch jedem frei das Script an eigene Bedürfnisse anzupassen.

    AntwortenAntworten
  • Max

    @mo-cacher: so, nun hab ichs nochmal überarbeitet und auch die gewünschte Caching-Funktion spendiert. 😉
    Ich hoffe es funktioniert so auch problemlos

    AntwortenAntworten
  • Pingback: Zahlenspielereien « Altmetall

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.