Wettervorschau mit der OpenWeather API

Erstmal ein frohes neues Jahr Euch allen da draußen. Ich hoffe ihr seid gut rein gerutscht und seid gesund ins neue Jahr gekommen. Ich für meinen Teil habe mich heute wieder an die Arbeit gemacht und ein mittelschweres Problem bei einem Kunden behoben. Anja von der Agentur kommunikativ meldete heute, dass eine Unterseite eines Kunden nicht mehr funktionieren würde. So nahm ich mich dem Problem an und musste feststellen, dass die Google Weather API nicht mehr vorhanden ist. Google hat diesen Service bereits letztes Jahr eingestellt und tatsächlich nicht bescheid gesagt. Oder wusstet ihr etwa davon? Es musste also schnell eine Alternative her.

Die Alternative war schnell gefunden. Die Seite wetter.com bietet die OpenWeather API an, welche ähnlich einfach funktioniert, wie die nicht mehr vorhandene Google Weather API. Ich möchte Euch an dieser Stelle kurz beschreiben, was zu tun ist.

Voraussetzungen

Die Voraussetzungen sind schnell erledigt. Die Open Weather API ist eine einfache REST Schnittstelle. Man muss sich lediglich auf wetter.com registrieren. Sofern man sich registriert hat, kann man im Bereich „Wetter Tools“ ein neues Projekt in der Projektverwaltung anlegen. Den Bereich „Wetter Tools“ findet ihr im Footer der wetter.com Website. Sofern ein neues Projekt angelegt wurde, erhaltet ihr einen API Key, den ihr unbedingt zur Nutzung der Open Weather API benötigt.

Technische Umsetzung

Die URL, mit der man die REST Schnittstelle aufruft, muss nun aus den Projektdaten und dem API Key zusammengesetzt werden. Für die Wetter Vorschau sieht die URL wie folgt aus:
http://api.wetter.com/forecast/weather/city/[CityCode]/project/[Projektname]/cs/[Checksumme]
In der URL sind drei Platzhalter enthalten. Der City Code kann über die wetter.com Suche ermittelt werden. Für meinen Wohnort Beckum lautet der Code DE0000876. Der Projektname ist aus dem angelegten Projekt in der Projektverwaltung zu entnehmen. Die Checksumme ist ein MD5 Hash aus dem City Code, dem Projektnamen und dem API Key. Auf der Wetter.com Seite wird folgender Code zur Ermittlung der API URL bereitgestellt:

1
2
3
4
5
6
7
8
9
10
11
$sForecastUrl   = 'http://api.wetter.com/forecast/weather';
$sProjectName   = 'beispielprojekt';
$sApiKey        = 'geheim';
$sCityCode      = 'DE0001020';
 
// Generieren der Checksumme, muss für jeden City Code neu berechnet werden
$sChecksum = md5($sProjectName . $sApiKey . $sCityCode);
 
$sForecastUrl .= '/city/' . $sCityCode;
$sForecastUrl .= '/project/' . $sProjectName;
$sForecastUrl .= '/cs/' . $sChecksum;

Folgende URL sollte durch dieses Script erstellt werden:
http://api.wetter.com/forecast/weather/city/DE0001020/project/beispielprojekt/cs/3c551bc20819c19ee88c9ec94280a61d
Sofern ihr valide Daten angegeben habt, erscheint bei Aufruf der URL ein XML Datenschema mit allen benötigten Daten. Alternativ kann natürlich auch ein JSON String geliefert werden.

Auswertung des XML Schemas

Im Folgenden findet ihr nun die Auswertung des XML Schemas mittels PHP. Zur Ausgabe werden hier der Wochentag, der Wetterzustand, die Minimaltemperatur und die Maximaltemperatur als auch der Code für eine Wettergrafik ermittelt.

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
// Die aus dem obigen Beispiel ermittelte URL
$url = '';
 
$doc = new DomDocument();
$doc->load($url);
 
$xpath = new DOMXPath($doc);
 
$dates = $doc->getElementsByTagName('date');
$values = array();
 
for ($i = 0; $count = $dates->length, $i < $count; $i++) {
    $expression = $dates->item($i)->getNodePath();
 
    // Datum ermitteln
    $timestamp = $xpath->query($expression . '/time[2]/d')->item(0)->nodeValue;
    $date = new DateTime('@' . $timestamp);
 
    $values[] = array(
        'wochentag' => $date->format('l'),
        'zustand' => $xpath->query($expression . '/time[2]/w_txt')->item(0)->nodeValue,
        'tiefsttemperatur' => $xpath->query($expression . '/time[2]/tn')->item(0)->nodeValue,
        'hoechsttemperatur' => $xpath->query($expression . '/time[2]/tx')->item(0)->nodeValue,
        'icon' => substr($xpath->query($expression . '/time[2]/w')->item(0)->nodeValue, 0, 1)
    );
}

In diesem Beispiel greifen wir auf das DOMDocument Objekt von PHP zu und suchen uns alle „date“ Tags des gelieferten XML Schemas. Die Open Weather API liefert bis zu drei Tage als Vorschau, die in den „date“ Tags dargestellt werden. Mittels XPATH greifen wir nun auf die Wetter-Angaben der einzelnen Tage zu. In diesem Beispiel habe ich mal die Angaben zu 11:00 Uhr des jeweiligen Tages gewählt. Optional sind auch 6:00 Uhr, 17:00 Uhr und 23:00 Uhr im XML Schema enthalten, so dass man theoretisch auch einen Tagesverlauf darstellen kann. Anhand der 11:00 Uhr Angaben ermitteln wir nun den Wochentag anhand des im XML Schemas enthaltenen Unix Timestamps, den Wetterzustand, die Tiefsttemperatur, die Höchsttemperatur und die Kennzahl für die Wettergrafik. Die Wettergrafik setzt sich aus der ersten Zahl des Wertes des „w“ Tags zusammen. Die entsprechenden Wetter Grafiken findet ihr ebenfalls auf wetter.com.
Ein praktisches Beispiel ist unter der von Anja gestalteten und mir programmierten Seite unseres örtlichen Softeis Dealers zu sehen: Eiscafé San Marco.

Fazit

Wetter.com hat mit der Open Weather API eine sehr einfach zu bedienende, sehr schnelle Schnittstelle geschaffen. Vom Prinzip her funktioniert diese genau, wie die alte Google Weather API. Google kann man an dieser Stelle nur die schlechte Kommunikation nachhalten, die mit der Einstellung der Weather API stattgefunden bzw. nicht stattgefunden hat. Danke wetter.com für diese ausgefeilte Schnittstelle.
Habt ihr Fragen? Immer her damit. Schreibt einfach einen Kommentar …

About Author: Marcel
Ich bin Senior PHP Developer bei MM Newmedia. Seit 2005 bin ich begeisterter Webentwickler und arbeite als Freelancer für namenhafte Firmen und entwickle jede Menge abgefahrenes Zeug und berichte darüber in meinem Blog.

One thought on “Wettervorschau mit der OpenWeather API

Kommentar verfassen