Für viele eventuell noch unbekannt, aber es gibt sie: Die Google Wetter-API.
Komischerweise scheint diese XML-Schnittstelle keine öffentliche API von Google zu sein, sondern eher sowas wie ein Nebenprodukt für die Personalisierte Startseite von Google.
Wie kann man diese API nun Ansprechen und wie genau funktioniert das?
Eigentlich sehr simpel: Es braucht im Prinzip nichts ausser einer URL, z.B. wie folgt: http://www.google.com/ig/api?weather=Magdeburg
Wie man sieht kann man in der URL den Namen einer Stadt hinterlegen. Leerzeichen im Stadtnamen können durch ein + ersetzt werden, also z.B. New+York. Alternativ kann man auch die Postleitzahl angeben, das kann dann so aussehen: 39120+Germany. Und was erhält man da nun?
Ganz simpel: Eine XML-Datei mit vielen Infos zum Wetter. Unter anderem aktuelle Temperaturen, Windgeschwindigkeiten, Luftfeuchtigkeit, Regenwahrscheinlichkeit, Bewölkung, etc. pp.
Zudem gibt es eine Vorhersage für die nächsten 3 Tage. Da das ganze als XML daher kommt können wir es natürlich auch vielseitig einsetzen und ausgeben. Egal ob nun als HTML, Grafik oder Flash.
Mit PHP5 geht es zudem sehr einfach, da dieses auch direkt XML-Dateien verarbeiten kann. Dazu mal ein kleines Code-Beispiel, welches allerdings auch ein aktiviertes cURL-Modul voraussetzt:
<?php
header('content-type: text/html; charset=utf-8');
$city = "New+York";
$str = array('Accept-Language: '.$_SERVER["HTTP_ACCEPT_LANGUAGE"]);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'http://www.google.com/ig/api?weather='.$city);
curl_setopt($ch, CURLOPT_HTTPHEADER, $str);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 4);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
$weather = simplexml_load_string(utf8_encode(curl_exec($ch)));
$weather = $weather->weather;
?>
Da Google das XML als UTF-8 ausliefert, sollte unsere Seite das möglichst auch tuen, daher also header() setzen, sofern euer Webserver das nicht schon automatisch macht. Was ansonsten noch wichtig wäre ist
$str = array('Accept-Language: '.$_SERVER["HTTP_ACCEPT_LANGUAGE"]);
Da die Wetter-API von Google im Normalfall immer die Sprache im Output verwendet, die der Browser im Header mitschickt, müssen wir der cURL-Anweisung natürlich den richtigen Header auch wieder übergeben. Würden wir das nicht tuen, bekämen wir per Standard englischen Output. Hier wird jedoch die bevorzugte Sprache des Browsers “kopiert”, so das der Spanier spanischen Output bekommt, und der Klingone natürlich Klingonisch ;) Man kann den Wert für die eigene Seite natürlich auch selber festlegen.
Zuletzt holen wir uns den Inhalt des XML in die Variable $weather und können diese nun nach Belieben abrufen bzw. ausgeben.
So gibt uns z.B. echo $weather->current_conditions->humidity["data"]; die aktuelle Luftfeuchtigkeit aus.
Was man natürlich nicht vergessen sollte ist die zeitliche Verzögerung die wie immer entsteht wenn Dateien von einem anderen Server bezieht. Ein Caching der Datei auf dem lokalem Webserver macht wohl durchaus Sinn, denn die Wetterdaten werden werden eh nicht minütlich aktualisiert. Zu diesem Thema habe ich vor einiger Zeit schonmal etwas geschrieben.
Ich denke diese API lässt sich sehr flexibel und unkompliziert einsetzen. Für weitere Anregungen bin ich natürlich wie immer zu haben :)
Update #1:
Man muss zum festlegen der Sprache nicht zwingend den Header beeinflussen. Leichter geht es durch ein anhängen von z.B. &hl=de an die URL.
Kommentare zum Thema Google Wetter-API:
Tobi, das ist ne gute Frage. Ich hab gerade mal geguckt, also im HowTo der Google Toolbar wird unter anderem erklärt wie man die Wetterdaten abgreifen kann, allerdings im Zusammenhang mit der Verwendung in der Google Toolbar.
Ich denke wer die API wirklich in produktiven Gebieten einsetzen will sollte vorher bei Google nochmal kurz anfragen. Wer da vielleicht mehr Informationen hat möge sich doch bitte melden.
Super! Danke für den Tipp, könnt’ ich evtl. auch bald brauchen :-)
Das hört sich doch alles ganz gut an. Wir wollen das kundenseitig auch einbinden.Rechtlich gibt es da noch nichts Neues , oder? Christian, du meintest, wer mehr Infos braucht, solle sich gern melden. Hast du einen Kontakt zu Google? Ich würd mich da schon ganz gern absichern.
Gibts was neues zu der rechtlichen Situation?
MFG
Manu
Heute hab ich gemerkt das ich keine Daten mehr aus der Schnittstelle lesen kann.
Wie siehts bei euch aus?
Oder blockt google mich jetzt?
curl_setopt hatte ich schon vorher drinne.
Aber heute geht es wieder. Sehr komisch.
Naja wer weiß an was es lag… hauptsache es geht wieder.
Google hält es wieder mal mit der Rechtlichen Seite etwas unklar. Die Nutzung der GoogleMap und auch die anderen Services werden unterstützt aber Google gibt keine Sicherheiten. So kann zB die API jederzeit verändert werden, was dann beim Kunden schwer zu vermitteln ist.
Hi Mario,
ohne cURL sieht es leider schlecht aus. Man könnte mit curl natürlich schon einen Cache einbauen (und sollte das auch) damit die Daten nur in bestimmten Intervallen abgerufen werden, ohne cURL kannst du aber erst garnicht auf die API zugreifen…
Du könntest aber einen anderen Server der evtl. curl kann, damit beauftragen diesen Job zu übernehmen und das XML-File per FTP auf den anderen Server zu schieben, das ganze dann per CronJob, aber das ist natürlich etwas unfein.
Hey! Super Artikel. Hat mir wirklich sehr weiter geholfen. Ich bin noch nicht so gut in der Verarbeitung, deshalb wollte ich fragen, wie man die weiteren ‘forecast_conditions’ verarbeiten kann. Für mich ist es nicht möglich die Daten für heute und morgen zu unterscheiden.
Könnt ihr mir einen Tipp geben? Danke =)
und wieder die Frage:
Darf man diese API nutzen????
Ich frage eben auch wieder mal… darf man oder darf man nicht? :)
Doku gibts natürlich immer noch keine…
Mich würde auch die rechtliche Situation interessieren, da ich die API seit gestern auf meiner privaten Seite einsetze und auch keine Alternative zur Anzeige der aktuellen Wetterdaten kenne. (Entsprechende Services anderer Anbieter zum Einbinden der Wetterdaten in die eigene HP zeigen leider alle nur eine Prognose an, aber nicht die aktuellen Werte).
Die API ist wirklich gut, hier ist noch ein schönes Beispiel, bei dem auch die von Google gelieferten Grafiken verwendet werden:
http://www.keepaneye.de/wetterdaten-aus-xml-api-verwenden/
Super Sache, danke für die Anleitung!
Habe mir das ganze auch in Kombination mit dem Caching zu sammen gebastelt und es funktioniert ohne Probleme. Ich würde aber gerne eigene Icons benutzen, dazu müsste ich aber erstmal wissen wie die von Google alle heißen…
cloudy.gif; chance_of_rain.gif; mostly_sunny.gif; mostly_cloudy.gif … kennt jemand noch die restlichen? Oder muss ich auf besseres Wetter hoffen? ;-)
Mfg Martin
komische Sache:
ich habe die API auch über CURL eingebunden, hat auch super funktioniert. Leider nur ein paar Tage lang. Ich hab mir den Fehler genauer angeschaut. Die Funktion curl_exec hat den Fehler 302 “object moved” hervorgerufen und in dieser Fehlerausgabe war ein Links auf eine Google Fehlerseite (403). Anscheinend blockt Google meine Abfrage, warum auch immer.
Ich habe mir dann die XML per file_get_contents geholt. Lief aber auch nur ein paar Tage…
Jetzt hab ich eine Kombination aus beiden.
Woran kann es liegen, dass Google die Anfrage blockiert?
Hallo Thomas,
danke für den Link zu http://www.keepaneye.de/wetterdaten-aus-xml-api-verwenden/ (warum kann ich das eigentlich nicht verlinken?), hier ist ja sogar eine Beschreibung, wie man damit ein Bild rendert. Toll…
Grüße
Sabine
Danke für die Tipps. Funktioniert super.
An der Klärung der rechtlichen Seite hat sich auch weiterhin nix getan. Ich habe dazu aber auch das Gefühl, dass Google daran nichts liegt:
http://groups.google.com/group/google-de-google-forum/browse_thread/thread/fd402497517237b6
Auf jeden Fall habe ich im Netz nix gefunden, dass irgendjemand aufgrund der Datennutzung Probleme mit Google bekommen hat – das stimmt mich (ein wenig) zuversichtlich.
Grüße!
Super Beschreibung, was aber interessant wäre ist, ob das ganze auch per Latitude und Longitude ausgelesen werden kann.
Ich hab es direkt über die Get-Variable versucht, was aber nicht funktionierzte.
Bei mir erscheint eine Fehlermeldung:
“Fatal error: Call to undefined function curl_init() in wetter.php on line 5”
entspricht der Zeile: $ch = curl_init();
Kann mir jemand helfen?
Kommentar-Feed für diesen Artikel
Extrem kleine JavaScript-Galerie Drei neue Textpattern-Blogs

Wie sieht es denn hier mit der rechtlichen Seite aus? Darf man das einfach so verwenden?!