Aktuelle Wetterdaten mit der Google XML API auf der eigenen Webseite

Wetter mit XML

Wetter-Daten aus XML-API, RSS-Feed

Auf der Suche nach kostenlosen XML-Wetterdaten und einer Wetter API, Wetter XML? Wetterdaten und Wettervorhersage auf einer Webseite anzeigen? Aktuelle Wetterinformationen als XML-Feed können bei

google.de
weather.com
yahoo.com

abgerufen werden.

Mit den per XML-Schnittstelle abgerufenen Daten können Widgets und Grafiken auf der eigenen Webseite erstellt/gerendert werden.

Die Google Wetterdaten Google-API ist offiziell nicht dokumentiert, weather.com benötigt einen kostenfreien Account. Eine Beschreibung des XML-Schemas gibt’s hier.

*Update Dezember 2012*
weather.com hat seinen kostenfreien Service eingestellt. Für 25$ pro Jahr kann der XOAP-Service weiterhin genutzt werden, weitere Informationen hierzu: http://www.weather.com/services/weathergold.html

Hinweis: Die Nutzung der google-API geschieht in eigener Verantwortung, offizielle “terms of use” der nicht dokumentierten Schnittstelle gibt es nicht. Alternativ kann die Yahoo-API eingesetzt werden, die zumindest den Einsatz für Privatpersonen klar regelt.

Die Wetterdaten können in php sehr einfach aus der XML-API der Request-Antwort in PHP-arrays ausgelesen und auf der eigenen Webseite weiterverwendet werden.

Die Basis-URL lautet: http://www.google.com/ig/api?weather=

Die oben dargestellte Grafik mit einer Wettervorhersage aus Wetterdaten der XML-Schnittstelle der Wetter-APIs von google.com und weather.com kann mit folgendem php-code erzeugt werden (Fehlerhandling, Objektorientierung noch ausstehend):

//Quell-URL der XML-API, hier google.com
$url2="http://www.google.com/ig/api?weather=muenchen&hl=de";
//Anstelle einer Stadt bzw. einer PLZ kann auch kommagetrennt
//Längen- und Breitengrad eines Ortes angegeben werden,
//z.B. http://www.google.de/ig/api?weather=,,,48187575,11513672&hl=de
//für München

//Seichern der XML-Daten
	$site2 = file_get_contents($url2);

//Erstellung array aus XML-Daten
	$xml3 = new SimpleXMLElement($site2);

//Auslesen der einzelnen XML-Felder
//für die nächsten drei Tage
	$stadt_1 = $xml3->weather->forecast_information->city[data];
	$himmel_1 = $xml3->weather->current_conditions->condition[data];
	$temperatur_1 = $xml3->weather->current_conditions->temp_c[data];
	$icon_1 = $xml3->weather->current_conditions->icon[data];
	$wind_1 = $xml3->weather->current_conditions->wind_condition[data];
	$feucht_1 = $xml3->weather->current_conditions->humidity[data];

	$icon_12 = $xml3->weather->forecast_conditions[1]->icon[data];
	$day_12 = $xml3->weather->forecast_conditions[1]->day_of_week[data];
	$l_12 = $xml3->weather->forecast_conditions[1]->low[data];
	$h_12 = $xml3->weather->forecast_conditions[1]->high[data];

	$icon_13 = $xml3->weather->forecast_conditions[2]->icon[data];
	$day_13 = $xml3->weather->forecast_conditions[2]->day_of_week[data];
	$l_13 = $xml3->weather->forecast_conditions[2]->low[data];
	$h_13 = $xml3->weather->forecast_conditions[2]->high[data];

	$icon_14 = $xml3->weather->forecast_conditions[3]->icon[data];
	$day_14 = $xml3->weather->forecast_conditions[3]->day_of_week[data];
	$l_14 = $xml3->weather->forecast_conditions[3]->low[data];
	$h_14 = $xml3->weather->forecast_conditions[3]->high[data];

//Erstellung der Wetter-Icons aus den Original-Bildern
	$icon_pic_1 = ImageCreateFromGIF("http://www.google.de".$icon_1);
	$icon_pic_12 = ImageCreateFromGIF("http://www.google.de".$icon_12);
	$icon_pic_13 = ImageCreateFromGIF("http://www.google.de".$icon_13);
	$icon_pic_14 = ImageCreateFromGIF("http://www.google.de".$icon_14);

//Auslesen der XML-Wetterdaten von weather.com
//Bitte beachten: Eine kostenfreie Anmeldung ist für die Nutzung
//der XML-Schnittstelle von weather.com notwendig

	$url3="http://xoap.weather.com/weather/local/GMXX0087?cc=*&dayf=5&link=xoap∏=xoap&par=#########&key=######&unit=m";
	$site3 = file_get_contents($url3);
	$xml3 = new SimpleXMLElement($site3);
	$sunrise = $xml3->loc->sunr;
	$sunset = $xml3->loc->suns;
	$temperatur_2= $xml3->cc->tmp;
	$temp_gef_2 = $xml3->cc->flik;
	$uv_2 = $xml3->cc->uv->i." (".$xml3->cc->uv->t.")";
	$bar_2 = $xml3->cc->bar->r;
	$bar_state_2 = $xml3->cc->bar->d;
	$sicht_2 = $xml3->cc->vis;
	$icon_2 = $xml3->cc->icon;
	$wind_2 = $xml3->cc->wind->s;
	$windtext_2 = $xml3->cc->wind->t;
	$windgrad_2 = $xml3->cc->wind->d;
	$feucht_2 = $xml3->cc->hmid;

	$icon_22 = $xml3->dayf->day[1]->part->icon;
	$icon_23 = $xml3->dayf->day[2]->part->icon;
	$icon_24 = $xml3->dayf->day[3]->part->icon;

	$icon_pic_2 = ImageCreateFromJPEG("http://image.weather.com/web/common/intlwxicons/52/".$icon_2.".jpg");
	$icon_pic_22 = ImageCreateFromJPEG("http://image.weather.com/web/common/intlwxicons/52/".$icon_22.".jpg");
	$icon_pic_23 = ImageCreateFromJPEG("http://image.weather.com/web/common/intlwxicons/52/".$icon_23.".jpg");
	$icon_pic_24 = ImageCreateFromJPEG("http://image.weather.com/web/common/intlwxicons/52/".$icon_24.".jpg");

	$l_22 = $xml3->dayf->day[1]->low;
	$h_22 = $xml3->dayf->day[1]->hi;
	$l_23 = $xml3->dayf->day[2]->low;
	$h_23 = $xml3->dayf->day[2]->hi;
	$l_24 = $xml3->dayf->day[3]->low;
	$h_24 = $xml3->dayf->day[3]->hi;

//Erzeugung neue Grafik, in die die ausgelesenen Wetter-Daten der
//XML-API gerendert werden
	$new_cam = imagecreatetruecolor(140,201);

	$background_color = ImageColorAllocate ($new_cam, 255, 255, 255);

	imagefilledrectangle($new_cam,0,0,140,201,$background_color);
	imagecopyresized($new_cam,$icon_pic_1,5,115,0,0,30,30,40,40);
imagecopyresized($new_cam,$icon_pic_12,38,115,0,0,30,30,40,40);	imagecopyresized($new_cam,$icon_pic_13,71,115,0,0,30,30,40,40);	imagecopyresized($new_cam,$icon_pic_14,104,115,0,0,30,30,40,40);

//weather.com
	imagecopyresized($new_cam,$icon_pic_2,5,160,0,0,30,30,52,52);
	imagecopyresized($new_cam,$icon_pic_22,38,160,0,0,30,30,52,52);
	imagecopyresized($new_cam,$icon_pic_23,71,160,0,0,30,30,52,52);
	imagecopyresized($new_cam,$icon_pic_24,104,160,0,0,30,30,52,52);

	$textcolor = imagecolorallocate($new_cam, 0, 0, 0);
	imagestring($new_cam, 2, 5, 2,  date("d.m.Y H:i"), $textcolor);
	imagestring($new_cam, 2, 5, 12,  $stadt_1, $textcolor);
	imagestring($new_cam, 2, 5, 22,  $datum_1, $textcolor);
	imagestring($new_cam, 2, 5, 32,  $temperatur_2." C, gef.: ".$temp_gef_2." C", $textcolor);
	imagestring($new_cam, 2, 5, 42,  $wind_2." km/h ".$windtext_2."(".$windgrad_2.")", $textcolor);
	imagestring($new_cam, 2, 5, 52,  "Sicht: ".$sicht_2." km", $textcolor);
	imagestring($new_cam, 2, 5, 62,  "Himmel: ".$himmel_1, $textcolor);
	imagestring($new_cam, 2, 5, 72,  "Luftfeuchte: ".$feucht_2."%", $textcolor);
	imagestring($new_cam, 2, 5, 82,  $bar_2." hPa (".$bar_state_2.")", $textcolor);
	imagestring($new_cam, 2, 5, 92,  "UV: ".$uv_2, $textcolor);

//Daten von heute rendern
	imagestring($new_cam, 1, 8, 105,  "Heute", $textcolor);
	imagestring($new_cam, 1, 8, 147,  $temperatur_1, $textcolor);
	imagestring($new_cam, 1, 8, 192,  $temperatur_2, $textcolor);

//Daten von heute + 1 rendern
	imagestring($new_cam, 1, 49, 105,  $day_12, $textcolor);
	imagestring($new_cam, 1, 41, 147,  $l_12."/".$h_12, $textcolor);
	imagestring($new_cam, 1, 41, 192,  $l_22."/".$h_22, $textcolor);

//Daten von heute + 2 rendern
	imagestring($new_cam, 1, 80, 105,  $day_13, $textcolor);
	imagestring($new_cam, 1, 75, 147,  $l_13."/".$h_13, $textcolor);
	imagestring($new_cam, 1, 75, 192,  $l_23."/".$h_23, $textcolor);

//Daten von heute + 3 rendern
	imagestring($new_cam, 1, 113, 105,  $day_14, $textcolor);
	imagestring($new_cam, 1, 108, 147,  $l_14."/".$h_14, $textcolor);
	imagestring($new_cam, 1, 108, 192,  $l_24."/".$h_24, $textcolor);

//Beschriftung setzen
	imagestring($new_cam, 2, 535, 1010,  "google-Info", $textcolor);
	imagestring($new_cam, 2, 535, 1068,  "weather.com", $textcolor);
	imagestring($new_cam, 2, 535, 1090,  $debug, $textcolor);

//Dateiname setzen
$filename = "weather.jpg";

//Datei erstellen und Speicher löschen
imagejpeg($new_cam,$filename,90);
imagedestroy($new_cam);

UPDATE Mai 2011: Offensichtlich gibt es eine neue Version der Wetter-Icons, sucht man nach dem Wetter werden diese bereits im Suchergebnis ausgespielt:

Neue Google Wetter icons

Neue Google Wetter icons

Alle derzeit vorhandenen Wetter-Icons:

chance of rain

sunny

mostly sunny

partly cloudy

mostly cloudy

chance of storm

rain

chance of snow

cloudy

mist

storm

thunderstorm

chance of tstorm

sleet

snow

icy

dust

fog

smoke

haze

flurries

27 Kommentare zu “Aktuelle Wetterdaten mit der Google XML API auf der eigenen Webseite”

  1. Miriam sagt:

    Tolle, kleine und einfache Zusammenfassung der notwendigen Infos! Der Quelltext ist zwar wenig kommentiert ;-), aber da steckt wirklich alles drin, um gleich loslegen zu können. Schön, dass php so easy mit XML und den Wetterdaten bzw. APIs umgehen kann.
    Miriam

  2. Andreas sagt:

    Funktioniert bei mir auch super, wenn das XML-Wetter jetzt noch mit dem richtigen Wetter immer stimmen würde! :-)
    CU
    Andres

  3. Thomas sagt:

    Danke für die Anleitung der XML-Schnittstelle der Wetterdaten, genau das habe ich für meine Wettervorhersage gesucht!
    Grüße
    Thomas

  4. Miriam sagt:

    Tolle Wetter-Icons gibt’s auch hier: http://www.sxc.hu/browse.phtml?f=search&txt=weather+icon&w=1&x=0&y=0
    cu, Miri

  5. detommy sagt:

    Find das auch ganz toll.

    Nun meine Frage: Darf ich die Daten auf meiner Homepage darstellen?

  6. flo sagt:

    Die Google-API ist offiziell nicht dokumentiert und es gibt keine seriöse Aussage über Nutzungsbedingungen. Die Nutzung der Schnittstelle steht in der Verantwortung eines jeden einzelnen. Ich empfehle alternativ die Schnittstelle von yahoo:
    http://developer.yahoo.com/weather/#terms
    “The feeds are provided free of charge for use by individuals and non-profit organizations for personal, non-commercial uses.”

  7. detommy sagt:

    Das Problem an der Yahoo-API, ist das, dass die Wetterdaten sich wohl nur auf den US-Amerikanischen Raum beziehen…

    Schade.

  8. Eddie sagt:

    Moinsen,

    die Yahoo-API bezieht sich nicht nur auf den US-Amerikanischen Raum.

    Unter http://weather.yahoo.com/ kann man auch einstellen für welchen Bereich man die Wetterabfrage haben möchte.

    Für Deutschland z.B. http://weather.yahoo.com/Germany/GMXX/regional.html

    Dort kann man dann seinen Wohnort raussuchen und aus der URL die ID rausziehen (z.B. GMXX3149 für Uplengen). Diese ID kann man dann im RSS-Feed http://weather.yahooapis.com/forecastrss?p=GMXX3149&u=c einsetzen (p= ID, u=c für Celsius), et voilá.

    Viele Grüße,
    Eddie

  9. Jan sagt:

    Hallo,
    vielen Dank für diese wertvollen Tipps. Weiß jemand, wie/ob man Wetterdaten nach Geokoordinaten (Länge/Breite) erhalten kann?
    Gruss
    Jan

  10. Cialis sagt:

    I6JUGi Excellent article, I will take note. Many thanks for the story!

  11. protec sagt:

    Klasse Code, vielen Dank.

  12. Marc sagt:

    Tolle und einfache Beschreibung, so verstehen das auch Anfänger!

  13. Miriam sagt:

    Mittlerweile ist ja auch im code ergänzt, dass das Wetter auch nach Längengrad und Breitengrad bestimmt werden kann, z.B.
    http://www.google.de/ig/api?weather=,,,48187575,11513672&hl=de
    Wichtig sind die drei ‘,,,’ zu Beginn des Parameters, sowie keinerlei Trennzeichen beim eigentlichen Grad-Wert. Viel Spaß damit!

  14. Rüdiger sagt:

    Danke für die einfache PHP-Beschreibung der Google Wetterdaten – damit ist es uns nun auch gelungen für unseren Vereins das Wetter auf der eigenen Seite darzustellen!

  15. Alex sagt:

    Sehr interessant, aber es steht immer noch die Frage im Raum, ob man es verwenden darf oder nicht. Meiner Meinung nach nicht, da bleiben nur die Alternativenn Wetter.com oder the weather.com die mich aber beide nicht gerade umahuen von den nutzungsbedingungen.

  16. toni sagt:

    Bei wetter.com gibt es einen kostenpflichtigen Account wo man auf die Daten zugreifen kann. weather.com bietet nicht für alle Länder eine XML Schnittstelle.
    Eine offene Frage bleibt weiterhin bestehen. Darf man die Google API nun für seine Webseite benutzen?
    Schon der Einsatz von Google Adsense macht doch eine Webseite kommerziell…

  17. Ludwig sagt:

    Schöne API, hilfreiche Seite, drei Hinweise:
    1. die Daten entsprechen nicht der Symbolisierung im Google-Maps-Wetter-Layer (vermutlich weden dort bereichweise aggregierte Werte dargestellt oder die Tile-Generierung hinkt den Wetterdaten hinterher)
    2. Geo-Abfrage geht mit umgerechneten lat/lon-Werten (“latitude_e6″ “longitude_e6″), Umrechnung der WGS84-Dezimalgrad in integer-Mikrograd, z. B.
    $latitude_e6 = (int) ($latitude_wgs84 * 1e6);
    3. die API liefert bei mir derzeit nur Werte für Deutschland/Belgien/Niederlande (nicht alle Länder getestet…), aber z. B. nicht für Frankreich, Lizenzgründe?

  18. Bernd sagt:

    Bei mir kommt immer…
    Warning: file_get_contents() [function.file-get-contents]: Filename cannot be empty in /homepages/21/d167179773/htdocs/wet.php on line 7

    Fatal error: Uncaught exception ‘Exception’ with message ‘String could not be parsed as XML’ in /homepages/21/d167179773/htdocs/wet.php:9 Stack trace: #0 /homepages/21/d167179773/htdocs/wet.php(9): SimpleXMLElement->__construct(”) #1 {main} thrown in /homepages/21/d167179773/htdocs/wet.php on line 9

  19. Igma sagt:

    Ich habe beim Google-Wetter mittlerweile das Problem, dass die Anfragen von meiner Webseite per “503 Service Unavailable” blockiert werden, da diese “zu oft” stattgefunden hätten.

    “Our systems have detected unusual traffic from your computer network. This page checks to see if it’s really you sending the requests, and not a robot.

    This page appears when Google automatically detects requests coming from your computer network which appear to be in violation of the Terms of Service. The block will expire shortly after those requests stop. In the meantime, solving the above CAPTCHA will let you continue to use our services.”

  20. Dennis sagt:

    Wurde mit meinem Testsystem bereits nach ein paar Aufrufen der Google API gesperrt und bekomme:

    file_get_contents(http://www.google.de/ig/api?weather=Osnabrück) [function.file-get-contents]: failed to open stream: HTTP request failed! HTTP/1.0 503 Service Unavailable in …

    Yahoo kommt nicht in Frage, weil mein Projekt kommerziell ist. Gibt es sonst keinerlei Möglichkeiten? Gerne auch gegen Backlink, aber solche “Fertig-Widgets” wie das von wetter.com sind schrott, da keinerlei Anpassung möglich ist…

  21. Tobias R. sagt:

    Die Weather API von Google ist nicht mehr erreichbar … der Dienst wurde wohl jetzt mit iGoogle abgeschalten.

  22. keepaneye.de sagt:

    Leider quittiert der Dienst aktuell jede Anfrage mit

    “We’re sorry…

    … but your computer or network may be sending automated queries. To protect our users, we can’t process your request right now.”

    Vielleicht ändert sich dies ja noch, iGoogle soll auch erst im kommenden Jahr abgeschaltet werden!

  23. Sebastian sagt:

    Seit 16.August bekomme ich auch nur noch eine Fehlermeldung. Dass der der Service abgestellt wurde, habe ich vermutet, da ich diese Fehlermeldung überall (von unterschiedlichen Rechnern / IP Adressen) bekomme.

  24. Ich hatte in der Vergangenheit in einem Blog-Post auch über die Möglichkeiten zur Erstellung von Wetterkarten und API´s berichtet.
    Ein User hat mir von einer weiteren Alternative berichtet, die ich an dieser Stelle gerne teilen möchte:
    http://http://om.yr.no/verdata/xml/
    Es scheint auch in diesem Fall so, dass die Anzahl der requests beschränkt sind. Allerdings gibt es auf deren Seite ,soweit ich das überblicken kann, auch ein Skript, das in bestimmten Abständen die Vorhersagen auf den lokalen Webspace speicher und somit cached.

  25. franc sagt:

    Google Wetter-API geht nicht mehr.
    Man erhält ein:

    Unsupported API

    Vermutlich hängt das mit der baldigen Einstellung von iGoogle (google.com/ig) zusammen.

    franc

  26. Johnd370 sagt:

    Tormoxin 500mg Cod Next Day Delivery in Hartford feefkekddkdf

Hinterlasse eine Antwort