MySQL: Datum vergleichen (Differenz)

Sehr häufig, ich behaupte teilweise fast immer, ist es notwendig ein Datum oder sogar mehrere verschiedene Daten (Plural von Datum) in einem Datensatz in der Datenbank zu speichern – entweder als ein bestimmtes Datum, zum Beispiel als eine Art von Frist oder einfach ein banales Datum wie den Zeitstempel (engl. timestamp), der festhält, zu welchem Zeitpunkt der Datensatz eigentlich angelegt wurde.

In der Praxis hat man ab und an Fälle, bei denen man die Daten vergleichen muss, um die richtigen Datensätze selektieren zu können. Solche Vergleiche werden häufig in automatisierten Prozessen eingesetzt, die durch einen Cronjob ausgelöst werden können. Sehr oft vergleicht man die Felder der Tabelle mit dem gerade aktuellen Zeitpunkt. Dazu gibt es wie so oft sehr unterschiedliche Herangehensweisen und je nach Anforderung werden für die Umsetzung in der Anfrage (Query) dann unterschiedliche MySQL-Funktionen benutzt.

Wird eine Differenz zwischen zwei Zeitpunkten benötigt, bei die Anzahl der Tage ausreicht, dann kann man dafür die MySQL-Funktion DATEDIFF() nehmen. Diese gibt die Anzahl der Tage zwischen zwei Daten zurück – also das Intervall. Für den Vergleich können die Parameter entweder vom Typ DATE oder DATETIME sein. Für die Berechnung werden nur die Datumsanteile verwendet. Stunden, Minuten sowie Sekunden bleiben unberührt.

Beispielsweise liefert uns der MySQL-Query:

als Ergebnis: 2

Statt zwei festen Daten kann man für den Vergleich auch das aktuelle Datum heranziehen. Dafür eignet sich die Funktion NOW(). Das obere Beispiel sieht dann folgendermaßen aus:

Am heutigen Datum (17.12.2012) liefert der Query als Ergebnis: 14

Es kann aber auch sein, dass für die Selektion der Datensätze nicht nur die Anzahl der Tage, sondern vielleicht genauere Zeitgrenzen benötigt werden. In diesen Fällen würde ich den Unix-Timestamp nutzen. Die Vorgehensweise ist dann die, dass das DATETIME-Feld mit der Funktion UNIX_TIMESTAMP() zunächt in einen Timestamp umgewandelt wird. Anschließend kann man die Timestamps miteinander vergleichen. UNIX_TIMESTAMP() liefert ohne Angabe eines Parameters den aktuellen Zeitstempel.

Möchte man nach Ablauf von genau 2 Tagen, also 48 Stunden einen Datensatz verarbeiten, dann kann man diesen wie oben zu sehen suchen. Die Differenz der beiden Werte muss 60 * 60 * 48 = 172800 oder mehr betragen.

Suchmaschinenoptimierung

In diesem Beitrag geht es nicht wie gewohnt um Programmierbeispiele oder Tutorials. Kurz möchte ich nach langer Auszeit abschweifen und etwas zum Thema SEO Hamburg berichten. Jeder Webmaster wird früher oder später, ob privat oder beruflich, mit dem Thema Suchmaschienenoptimierung konfrontiert werden. Sobald die Webseite steht, muss sie logischerweise auch in den Suchmaschinen-Rankings nach oben, um überhaupt Besucher zu bekommen. Hier führen wie so oft viele Wege nach Rom, auch beim Thema SEO ist das der Fall. Jeder hat nach vielen Jahren sicherlich auch seine eigene bevorzugte Strategie zur Optimierung der Webseite entwickelt. Bis dahin ist es aber meist ein zeitaufwendiger und mitunter steiniger Weg, mit vielen Lernphasen und teils auch Rücksetzern.

Suchmaschinen haben heutzutage eine enorme Machtstellung entwickelt. Sie sind heute der wichtigste Einstiegspunkt zum Internet auf fast jedem Device und kaum noch mehr wegzudenken. Die Mehrheit der User kennt sie und kann sie auch bedienen. Deshalb führt kein Weg daran vorbei eine Menge Zeit und / oder Geld in die Suchmaschinenoptimierung zu investieren. Wenn man nicht die Zeit hat, so kann man die Arbeit an externe Dienstleister übergeben, die sich um die Analyse und Optimierung kümmern. Hierbei handelt es sich meist um auf Suchmaschinenoptimierung spezialisierte Agenturen, sogenannte SEO Agenturen. Eine solche Agentur ist beispielsweise die RiverOnline GmbH mit Sitz in Hamburg.

Die Agentur RiverOnline beschäftigt über 20 Mitarbeiter und hat sich als Full Service Agentur auf die wichtigsten Teilbereiche des Online Marketings spezialisiert. Neben klassischem SEO und SEM, bietet die Agentur beispielsweise auch Social Media Marketing sowie Conversion Rate Optimization (kurz CRO) an. Zu erreichende Ziele werden in detaillierter Absprache mit dem Kunden klar definiert und abgearbeitet. Die später erreichten Ziele und Ergebnisse werden in klassischen Reportings beschrieben. Die Ergebnisse solcher Bereichte werden für den Kunden in Form von Diagrammen aufbereitet, um einen besseren und schnelleren Einblick in die Arbeit und den Erfolg zu bekommen.

Mich interessiert natürlich auch, habt ihr bereits selbst solche Agenturen beauftragt? Wenn ja, wart ihr mit der Arbeit zufrieden? Schreibt es in die Kommentare!

WordPress: Das Beitragsbild im Theme anzeigen

In diesem kleinen Artikel möchte ich kurz erklären wie man in der WordPress-Blog ein Vorschaubild im Contentbereich anzeigen lassen kann. Das Vorschaubild, oder auch Thumbnail genannt, kann sowohl auf den Übersichtsseiten, als auch auf der eigentlichen Artikelseite erscheinen. Das ist jedem selbst überlassen.

In den neuen Themes von WordPress wird die Funktion the_post_thumbnail() bereits lange berücksichtigt. In älteren Themes jedoch nicht.

Beim Erstellen eines neuen Beitrags erscheint seit der WordPress-Version 2.9.0 im Adminbereich in rechten Sidebar standardmäßig die Box mit der Überschrift Beitragsbild sowie ein Link Beitragsbild festlegen. Sollte dies nicht der Fall sein, so muss die Unterstützung von Bildern im Theme aktiviert werden. Das kann mit folgendem Befehl in der functions.php des Themes erledigt werden:

Anschließend kann man im Template single.php (je nach Aufbau des Themes andere Datei möglich) an die gewünschte Stelle das Thumbnail ausgeben lassen. Zum Beispiel vor dem Content:

Die Funktion hat natürlich ein paar mögliche Parameter, die man zur individuellen Gestaltung nutzen kann. Mit dem ersten Parameter kann die Größe des Bildes festgelegt werden. Hier gibt es verschiedene Möglichkeiten:

Mit dem zweiten Parameter können HTML-Attribute wie alt, class, usw. ausgegeben werden. Beispielsweise in dieser Form:

Um das Bild wird im oberen Beispiel ein Rahmen gezeichnet.

Bei Fragen kann gerne die Kommentarfunktion genutzt werden. 😉

Missing argument 2 for wpdb::prepare()

Die neue WordPress Version 3.5 ist erschienen und in einigen Themes und Plugins wird nach einem Update sicherlich die Warnung Missing argument 2 for wpdb::prepare() erscheinen. Dies ist unter anderem eine neue Meldung, die in der neuen Version vorhanden ist. Man muss noch erwähnen, dass man beruhigt sein. Das jeweilige WordPress Theme bzw. Plugin muss nicht unbedingt fehlerhaft sein. Die Warnung soll helfen die Sicherheitslücken in Themes und Plugins zu finden.

Wenn die Warnung an einer Stelle auftritt, dann sollte man jedoch trotzdem ein Auge darauf werfen und die Fehlerstelle beheben, weil es durchaus sein kann, dass die betroffene Stelle eine Lücke für eine SQL-Injection (dt. SQL-Einschleusung) birgt.

Die Funktion $wpdb->prepare() funktioniert nämlich folgendermaßen:

Man arbeitet mit Platzhaltern und sichert so den Query ab. Im oberen Beispiel ist der Platzhalter %d für den zweiten Parameter id bestimmt, welcher eine Zahl (Integer) ist. Der dritte Parameter name – ein String – wird mit Hilfe des Platzhalter %s in den Query platziert.

Wenn kein Parameter an das Query übergeben wird, dann kann der Query ohne Vorschalten der prepare-Funktion aufgerufen werden. Da wo keine Variablen an die Abfrage dynamisch übergeben werden, tut die prepare-Funktion im Grunde gesehen nichts. Man kann in diesen Fällen auf sie verzichten, wie zum Beispiel in folgenden Fällen:

Im ersten Fall werden alle Einträge abgefragt, im zweiten Fall ein bestimmter. Die id in der zweiten Abfrage ist jedoch fest eingebaut und wechselt nicht. Bei diesen Abfragen ist die Vorschaltung von prepare nicht notwendig und die Funktion wird auch nichts machen, liefert aber trotzdem eine Warnung.

Die eigentliche Lücke liegt dann in solchen Abfragen:

Die obere Abfrage ist nicht sicher. Es sieht so aus, als würde prepare den Query absichern, doch weit gefehlt. Die Variable id wird direkt in das Query unaufbereitet platziert. Für solche Fälle ist die Warnung dann interessant. Korrekt und absichert sieht die Abfrage dann folgendermaßen aus:

Textumbruch bei langen Wörtern erzwingen

Bei der Validierung von Eingaben aus einem Formular muss man schon so einige Sachen beachten. Darf der Nutzer in das Feld zum Beispiel nur Buchstaben oder Zahlen eingeben, oder gar beides und wie lang darf die Zeichenkette sein? In der Regel wird der Nutzer auch URLs in das Feld eintragen – verhindern kann man das nur durch Filterung. Und hier kann es sehr schnell passieren, dass die URL etwas länger wird. Das Ergebnis ist also eine lange Zeichenkette, die nicht selten mal schnell über 50 Zeichen lang sein kann. Die Eingabe durch den User war zwar valide, kann aber im Template das Layout durcheinander bringen.

Besonders dann, wenn die Daten ausgelesen und zeilenweise in einer Tabelle angezeigt werden, kann durch den langen String der URL eine Spalte ausgedehnt werden, sodass die äußeren Spalten aus dem Layout herausragen und andere Elemente überlappen. Dieses unschöne Ergebnis kann man mit einem automatischen Textumbruch ab einer bestimmten Zeichenanzahl erzwingen. Wörter, die beispielsweise über 30 Zeichen lang sind, gibt es dann doch recht selten im deutschen Wortschatz – und wenn doch, dann sind es meist zusammengesetzte Fachbegriffe aus mehreren Nomen oder lateinische Namen von Stoffen aus der Chemie oder der Pflanzen- und Tierwelt, aber das nur am Rande.

Die Wahrscheinlichkeit, dass es sich hierbei um eine Eingabe einer URL oder eines eher ausdruckstarken Wortes wie „Ahhhhhhhhhhhhhhhhhhhhhhhhhh“, „Ooooooooooooooooooooooooooh“ und dergleichen handelt, ist dann sehr hoch. Ob nun im Feld Titel, in der Beschreibung oder Kommentar, man sollte mit langen Wortketten überall rechnen. Um die Darstellung optimal zu halten, sollte also an den entsprechenden Stellen automatisch ein Umbruch erfolgen. In PHP gibt es dafür die Funktion wordwrap, die uns diese Arbeit abnimmt.

Überall dort, wo wir mit langen Wörtern und URL-Eingaben rechnen können, kann die PHP-Funktion folgendermaßen eingesetzt werden:

Wie man sieht, wird im zweiten Parameter die Anzahl der Zeichen eingegeben, ab wann ein Umbruch erfolgen soll. Im dritten optionalen Parameter kann man eine Zeichenkette eingeben, die als Trenner agiert. Dies kann ein br-Tag, ein unsichtbares Newline-Zeichen \n oder wie in diesem Beispiel auch ein Leerzeichen sein. Damit der Umbruch erfolgt, muss der letzte Parameter cut auf TRUE gesetzt werden. Der zweite Parameter – hier 20 – gilt als Maximallänge und das ein langer String wird spätestens nach der angegebenen Länge umgebrochen.

Popup Fenster in Firefox erlauben

Vielen Internetnutzern gehen sie auf die Nerven. Wir kennen sie alle – Popups. Ganz genau. Diese sind nicht selten sehr störend beim Surfen. Auf manchen Seiten muss man diese jedoch zulassen, damit man alle Funktion der Webseite nutzen kann. Früher gab es diese Möglichkeit in Browsern nicht oder eher selten – jetzt gibt es diese fast in jedem guten Browser, auch im Mozilla Firefox, nämlich das Blockieren von Pop-Up-Fenstern.

Standardmäßig ist in den Einstellungen festgelegt, dass Popups blockiert werden sollen. Ich war gerade auf einer Internetseite, wo in einem Popup eine Art Bestätigungscode eingeben musste. Ich war etwas verwundert warum kein Fenster erscheint, aber dann hab ich schnell gemerkt, dass auch bei mir die sich selbst öffnenden Fenster blockiert werden. Ich musste allerdings nicht lange suchen. Das Blockieren der Popups kann im Firefox in den Einstellungen unter dem Punkt Inhalt deaktiviert werden.

Unter Windows befindet sich die Einstellungen im oberen Menü unter Extras > Einstellungen. Unter Linux, zum Beispiel Ubuntu, findet man die Einstellungen unter Bearbeiten > Einstellungen. Das sich öffnende Einstellungen-Fenster sieht soweit gleich aus. Zur besseren Anschauung habe ich mal einen Screenshot vom Einstellungsfenster angefertigt. Wie im oberen Bild zu sehen ist, muss der Haken bei „Pop-up-Fenster blockieren“ entfernt werden. Anschließend sollten sich die Popupfenster wie erwartet auf jeder Webseite öffnen.

Sollen lästige Fenster dann wieder blockiert werden, einfach den Haken setzen und schon hat man Ruhe und wenn man die Fenster wieder öffnen lassen will, einfach die Blockierung abschalten. Der Artikel hatte jetzt zwar weniger mit Programmierung zu tun, aber dem ein oder anderen Nutzer hat es hoffentlich helfen können. 🙂

URL mit Dateiendungen wie *.html bei Codeigniter

Beim durchaus beliebten open-source PHP-Framework Codeigniter von EllisLab, welches mittlerweile in der Version 2.1.3 erhältlich ist, werden die URLs nach Controller, Funktion und Parameter aufgebaut. Standardmäßig gibt es am Ende der URL keine Dateiendung wie .php, .html oder .htm. Noch nicht einmal ein Slash am Ende der URL (der sogenannte trailing slash) wird generiert, wenn man die Funktion anchor() des URL-Helpers zum Generieren von HTML-Links verwendet.

Der Aufruf mit einem „trailing slash“ ist möglich, man wird auch nicht auf die gleiche Seite ohne Schrägstrich weitergeleitet. Ob nun mit oder ohne Slash am Ende, per htaccess-Regel kann man eine der beiden Varianten erzwingen und die anchor()-Funktion im Helper notfalls anpassen.

Einige Webmaster bevorzugen jedoch typische Endungen wie .html in der Adresse. Der ein oder andere Suchmaschinenoptimierer (SEO) wird auch sagen, dass „Endungen am Ende besser für das Ranking wären“. So genau weiß das aber niemand meiner Meinung nach.

Codeigniter bietet in der Konfiguration die Möglichkeit einen Suffix für die URL anzugeben. In der offiziellen Dokumentation findet sich dazu auch ein kleiner Abschnitt Adding a URL Suffix, wo dieses kurz erläutert wird.

In der Datei application/config/config.php existiert standardmäßig bereits ein Eintrag $config[‚url_suffix‘], welcher leer ist. In dieser Variable trägt man die gewünschte Endung wie zum Beispiel .html ein.

Aus einer Adresse wie:

http://www.beispiel.de/bereich/forum

kann dann folgende URL mit Dateiendung gemacht werden:

http://www.beispiel.de/bereich/forum.html

Die eingetragene Endung wird dann global in allen Helper-Funktionen angehängt. Der Suffix wird genau so auch beim URI Routing berücksichtigt. Eigene festgelegte Routen benötigen in diesem Fall ebenfalls die neue Endung.

Für mich stellt sich nun die Frage, wie sinnvoll Dateiendungen wie html sind. Beeinflussen diese so enorm das Ranking in den Suchmaschinen oder ist es grundsätzlich egal? Momentan sieht es für mich nach Geschmackssache aus und jeder sollte für sich selbst entscheiden welche Form seine URLs haben sollen.

Formular per AJAX-Request (jQuery) abschicken

Das Abschicken von Formulardaten erfolgt in der Regel durch Drücken des Submitbuttons. Der Nutzer wird dann auf die jeweilige Seite weitergeleitet, die im HTML-Tag form als Attribut action angegeben ist. Bei dynamischen Webseiten kommt es oft vor, dass eine Berechnung von bestimmten Formulardaten und eine anschließende Aufbereitung und Anzeige der Ergebnisse benötigt wird.

Ein Beispiel dafür ist die Berechnung des Gesamtpreises einer Bestellung, der sich unter anderem aus Produktpreis und Artikelanzahl, Versandkosten, eventuell vorhanderen Staffelungen, Rabatten, Gutscheinen und vielen weiteren Dingen zusammensetzen kann.

Wenn die relevanten Parameter zum größten Teil in der Datenbank liegen, macht es aus diesem Grund durchaus Sinn die Kalkulation serverseitig durchzuführen, statt es durch ein Javascript erledigen zu lassen.

In diesen Fällen eignet sich ein AJAX-Request per POST. Die Daten aus dem Formular werden an ein PHP-Script geschickt. Dieses Script verarbeitet und berechnet den Gesamtpreis. Als Ergebnis kann dann ein fertiger HTML-Code zurückgegeben und an die passende Stelle platziert werden. Eine andere Möglichkeit ist, dass man das Ergebnis zum Beispiel im Format JSON liefert und dieses clientseitig für die Darstellung im Browser durch ein Javascript entsprechend aufbereiten lässt.

Ich selbst bevorzuge die serverseitige Methode, da man hier eher schneller an die relevanten Parameter aus der Datenbank herankommen wird, die zur Berechnung erforderlich sind. Wenn zum Beispiel ein Gutscheincode eingegeben wurde, muss dieser vorab auf Gültigkeit überprüft werden. Zudem ist es von Vorteil in der Preisübersicht den Gutschein mit Preis aufzulisten. Diesen Preis wird der Nutzer sicherlich nicht selbst eingeben wollen, sondern erwartet, dass das System den korrekten Preis für seinen eingegebenen Code findet. Nun aber zurück zum eigentlich Thema.

Bei recht simplen Berechnungen kann man auf AJAX-Requests wiederum ganz verzichten – wozu auch, wenn fast nur eine Aufbereitung bzw. Anzeige und keine komplexen mathematischen Formeln erforderlich sind.

Ein AJAX-Request stellen wir folgendermaßen mit jQuery zusammen:

Wie oberhalb zu sehen, haben wir also eine function calculate(), welche wir bei den benötigten Events (keypress, change, click, …) aufrufen können.

Die Funktion serialize() erstellt für uns einen Textstring im URL-kodierten Format. Das Ergenis der Berechnung wird in der Variable r gespeichert, dessen Content wir mit append() an in das Element mit der ID calculation einfügen.

Selbstverständlich kann so eine Anfrage statt POST-Request auch mittels HTTP GET-Request erfolgen. Wie immer kann bei Fragen, Verbesserungen und sonstigen Anregungen gerne die Funktion zum Kommentieren genutzt werden.

Aus HTML eine PDF-Datei generieren

Mittels des PDF Konverters DOMPDF kann man auf recht einfache und schnelle Weise fertige PDF-Dateien aus HTML-Quelltext generieren. DOMPDF wandelt den HTML-„Stream“ in eine PDF-Datei um. Die manuelle Zusammenstellung und Anordnung der Elemente mittels Koordinaten entfällt dadurch. In diesem Artikel werde ich kurz erklären, wie man in PHP5 mit DOMPDF eine HTML-Datei in eine PDF Datei konvertieren kann.

Zunächst muss dompdf (HTML to PDF converter) heruntergeladen werden. Auf GitHub kann man sich das fertige Paket als Archiv downloaden (Klick auf „ZIP“).

Im Ordner dompdf-master befindet sich Die Konfigurationsdatei mit dem Namen dompdf_config.inc.php. Diese müssen wir in unser Script inkludieren, um die Klasse DOMPDF nutzen zu können (im Beispielquelltext habe ich den Hauptordner in dompdf umbenannt). Anschließend legen wir eine neue Instanz dieser Klasse an und können die benötigten Funktionen des Objekts nutzen. Der Beispielcode für das PHP-Script sieht dann wie folgt aus:

Mit der Funktion file_get_contents() laden wir zunächst den Quellcode zum Konvertieren in die Variable $html. Im weiteren Schritt laden wir diesen in das DOMPDF-Objekt. Mit der Funktion render() wird der Quelltext in das PDF Format konvertiert. Mit stream() wird die PDF-Datei aufgerufen.

In der HTML-Datei datei.html könnte zum Beispiel folgender Quelltext stehen:

Vorteile einer Konvertierung von HTML zu PDF

Statt der manuellen Zusammenstellung der PDF, also der Anordnung der Elemente wie Überschrift, Text, Bilder etc., wird die PDF aus einem HTML File generiert.

Eine Einarbeitung in die Objekt-Funktionen zur Positionierung der einzelnen Texte in der PDF entfällt dadurch – eine deutliche Zeitersparnis wie ich finde, denn jeder Webentwickler beherrscht in der Regel HTML bzw. CSS.

Statt die PDF mit stream() auszugeben, kann die Funktion output() genutzt werden, um den PDF-Stream zurückzugeben. Abgelegt in einer Variable kann dieser dann in einer Datei abgespeichert werden.

Bei Fragen, Fehlern oder Verbesserungsvorschlägen könnt Ihr gerne die Kommentarfunktion nutzen. 🙂

Open Weather Map API: Ein Beispiel in PHP

In einem früheren Post habe ich nach Alternativen für eine Wetter-API gesucht und eine kleine Liste der Anbieter zusammengestellt. Der Grund war die Abschaltung der Google Weather API. Weil ein Leser von Programmieren & Optimieren nach einem Tutorial zu OpenWeatherMap gebeten hat, möchte ich nun für die kostenfreie API von OpenWeatherMap (openweathermap.org) ein kleines Beispiel posten. In diesem werde ich die aktuelle Temperaturen in PHP (curl) mittels JSON Schnittstelle abfragen und darstellen.

Kurz zum Dienst selbst: Open Weather Map stellt kostenlos den Wetter Web Service zur Verfügung. Die aktuellen Wetterdaten werden von über 40000 Wetterstationen weltweit empfangen. Für die Nutzung ist keine Registrierung notwendig. Die kommerzielle Nutzung des Dienstes ist ebenfalls erlaubt. Sollte man den Dienst nutzen, würde ich einen Link zu openweathermap.org setzen, darum bittet wie ich gesehen habe auch der Anbieter selbst – selbstverständlich eigentlich. Bei einer höheren Anzahl an Abfragen (Requests) kann ein Key angefordert werden. Es gibt verschiedene Möglichkeiten die Wetterdaten zu empfangen. Da wäre einmal das JSON Format, zu welchem in diesem Artikel ein Beispiel in PHP zu finden ist, die Möglichkeit einer Abfrage vom WMS server sowie die Java Script API.

Kommen wir nun zum Beispiel. In der Dokumentation zur Open Weather Map API sind die verschiedenen Möglichkeiten der Abfrage aufgelistet. Unter anderem kann man mittels Längen- und Breitenangabe entweder nach Wetterstationen oder nach Städten suchen. Die Liste kann per Parameter dann beliebig begrenzt oder sogar in Cluster unterteilt werden. Eine weitere Möglichkeit ist die Suche nach einer Stadt ID oder nach dem Stadtnamen.

Im Beispiel suche ich nach einem Stadtnamen. Zuerst übergebe ich den Namen als GET Parameter und intialisiere eine einfach cURL-Session. Folgende URL der 2.1 API nutze ich für die Suche nach Wetterdaten einer Stadt:

http://openweathermap.org/data/2.1/find/name?q=Berlin

Hier das gesamte Script der Abfrage:

Nachdem die Daten mit der Funktion curl_exec() abgefragt und in der Variable $json abgelegt wurden, werden die Daten mit json_decode() in ein Array umgewandelt und der Variable $data zugewiesen. Anschließend erfolgt die Darstellung der Daten.

Zu beachten ist, dass die Temperaturen in Kelvin angegeben sind. Um die Daten in Grad Celsius auszugeben, substrahiert man einfach 273,15 vom jeweiligen Wert, da 0 Kelvin dem absoluten physikalischen Nullpunkt entsprechen, der in der Einheit Grad Celsius bei -273,15 liegt.

Es wird nicht nur die Temperatur geliefert, sondern auch eine Reihe weiterer Daten wie zum Beispiel Angaben zur Windrichtung und -geschwindigkeit, Bewölkung, Druck oder Luftfeuchtigkeit. Wegen der Einfachheit habe ich diese zusätzlichen Angaben weggelassen, um hauptsächlich die Nutzung zu verdeutlichen.