Mit PHP Aktuelle Wetterdaten beziehen und verarbeiten


Für eines meiner privaten WindowsPhone-Projekte brauchte ich die Wetterdaten für die aktuelle Position des Users. Da Google seine (ohnehin nie wirklich offen kommunizierte) Wetter-API eingestellt hat, musste ich mich nach  kostenlosen und vor allem verlässlichen Alternative umsehen.  Ich wurde fündig :)

Wetterdaten per Geo-Position beziehen

Mein Vorhaben: Die WindowsPhone-App sendet Längen- und Breitengrad an meinen Server, und dieser zieht die Wetterdaten von der API.
Doch:

Wo kann ich kostenlos Wetterdaten per API bekommen?

Welche Wetter-API ist (für meinen Anwendungsfall) die beste? Und welche darf ich kostenlos nutzen?

Ich habe mich für die API von OpenWeatherMap.org [API] entschieden. Diese ist schnell, einfach und gibt sehr schön strukturierte Daten aus.

Für den Abruf der Wetterdaten benötigt man auch bei OpenWeatherMap einen API Key, der kostenlos verfügbar ist. Dazu muss man sich nur bei OpenWeatherMap registrieren.

Mit PHP die OpenWeatherMap.org-API – Wetterdaten abrufen

Ich habe dazu entschieden, den Abruf der Wetterdaten mit PHP zu realisieren. Die App sendet die Positionsdaten der User bereits an mich, deswegen kann ich auch gleich die aktuellen Wetter-Informationen zurück geben. Man könnte natürlich auch direkt aus der App heraus die Wetter-API ansprechen.

Wir starten unseren API-Aufruf mit den uns übergebenen Längen- und Breitengraden, in diesem Fall für meine Heimatstadt Lemgo

$lat = "52.0277"; $lng = "8.9043";

Wir starten mit curl die API-Abfrage

Ausgaben auf Deutsch

Für meine Zwecke benötige ich die Ausgaben auf Englisch. Wer jedoch die deutsche Ausgabe der API-Informationen bevorzugt, kann durch den URL-Parameter  &lang=de die Sprache festlegen.

Aktuelle Wetterdaten in PHP weiterverarbeiten


Wir bekommen von OpenWeatherMap.org eine JSON-Ausgabe mit dem aktuellen Wetter. Soll heißen: Wenn denn der übergebene Ort gefunden wurde. Doch das checken wir gleich.

Als erstes nehme ich die erhaltenen Informationen und hetze sie durch json_decode, um ein Objekt mit allen Daten zu erhalten. Ich arbeite lieber mit JSON als mit XML, aber das ist eine persönliche Vorliebe.
Jedem so, wie er es mag :) XML-Output ist natürlich auch möglich, indem man als Aufruf-Parameter  mode=xml  übergibt.

Wir haben nun also die Daten im JSON-Format vorliegen und müssen prüfen, welchen Status-Code uns die API liefert. Denn wenn ein Ort nicht gefunden wurde, gibt es einen 404-Code, wenn alles OK ist einen 200. Dieser Wert steht in  $data->cod

Umrechnung der API-Daten aus Grad Kelvin in gängigere Formate

Und dort haben wir nun auch gleich noch die für mich wichtigen einzelnen Felder aufgeschlüsselt bzw. die Temperaturen in Grad Celsius sowie Grad Fahrenheit berechnet. Ich muss die Temperaturen berechnen, da uns die API die Temperatur als Grad Kelvin übergibt.

Die gesamte Ausgabe mit print_r($wxData)  inklusive der berechneten Werte sieht folgendermaßen aus:

Reverse Geocoding ohne Google

Außerdem noch sehr erwähnenswert: OpenWeatherMap.org gibt für die übergebenen lat/lng-Werte den Namen des Ortes zurück! In diesem Fall haben wir [name] => Lemgo – also ein Reverse Geocoding ohne Google :D

Fazit

Ziemlich simpel. Aber das Schwierige war ja, eine passende API zu finden.

Ich hoffe, dass ich hiermit zumindest ein paar Leuten helfen konnte, die auch auf der Suche nach einer schönen, schnellen Wetter-API sind.

 

 

Veröffentlicht von

Christian Hänsel

Web-Entwickler, SEO-Experte. Ich liebe technisches SEO, die Entwicklung von neuen Ideen und alles rund um das Internet... ja, ich habe mein Hobby zum Beruf gemacht und gehe auch Montags gerne zur Arbeit.

2 Gedanken zu „Mit PHP Aktuelle Wetterdaten beziehen und verarbeiten“

  1. Hallo Christian,

    Keine Ahnung wie aktuell das bei dir noch ist. Aber hier kannst du dich ebenfalls in Sachen Wetterdaten etc. bestens austoben:

    https://api.meteomatics.com

    Die Meteomatics API bietet neben aktuellen, historischen und VorhersageDaten auch den Zugang zu Vorhersagen basierend auf verschiedenen Wettermodellen, Radar-, Blitz- und Satellitendaten an und entsprechende Connectoren für verschiedene Programmiersprachen (inkl. PHP, Python, R, Matlab etc.)

    Viel Spaß und viele Grüße
    Martin

Kommentar verfassen