Start Blog Tutorial Wetter auf eigener Website mit Google Weather API

Wetter auf eigener Website mit Google Weather API

Wetter-WidgetEinige Wetter-Websites bieten Webmastern ein Wetter-Widget an, das diese auf ihrer Homepage integrieren können. Allerdings hat man darüber keine Gestaltungsfreiheit und muss gegebenenfalls unschöne Werbung z. B. in Form eines Links auf dem Widget hinnehmen. Google jedoch liefert eine Schnittstelle, die Wetterdaten im „Rohformat” in XML zur Verfügung stellt. Mit Hilfe von PHP5 lassen sich die Wetterdaten problemlos auslesen.

Offensichtlich hat Google die Wetter-API abgeschaltet, sodass diese nicht mehr genutzt werden kann! (Stand: 27.08.2012) Alternative: Yahoo Weather-API

» Demo (Wettervorhersage)
» Das PHP-Script als Download (Nutzungsrechte siehe Datei)

Google Weather API

Unter folgendem URL kann man das Google Wetter mit allen Wetterdaten abrufen:

http://www.google.com/ig/api?weather=[LOCATION]&hl=[LANGUAGE]

[LOCATION] und [LANGUAGE] müssen entsprechend ersetzt werden. Bei der Wetterstation ([LOCATION]) kann man entweder die Postleitzahl in Kombination mit dem Land angeben (z. B. 46562-Germany) oder direkt den Ort (z. B. Voerde). Die erste Variante ist eindeutiger, denn gleichnamige Städte können in unterschiedlichen Ländern oder mehrmals in einem Land vorkommen (vgl. Frankfurt). Die Sprache ([LANGUAGE]) wird als Kürzel angegeben (z. B. de oder en).

Wetterdaten auslesen

Folgende Funktion ließt in PHP 5 die Wetterdaten vom Google Wetter aus (PHP 4 wird nicht unterstützt):

function website_wetter($plz, $land, $icons_src="/", $sprache="de", $ort="")
{
	$icons_google = "/ig/images/weather/";

	if($ort != "")
	{
		$station = $ort;
	}
	else
	{
		$station = $plz."-".$land;
	}

	$api = simplexml_load_string(utf8_encode(file_get_contents("http://www.google.com/ig/api?weather=".$station."&hl=".$sprache)));

	$wetter = array();

	// Allgemeine Informationen
	$wetter['stadt'] = $api->weather->forecast_information->city->attributes()->data;
	$wetter['datum'] = $api->weather->forecast_information->forecast_date->attributes()->data;
	$wetter['zeit'] = $api->weather->forecast_information->current_date_time->attributes()->data;

	// Aktuelles Wetter
	$wetter[0]['zustand'] = $api->weather->current_conditions->condition->attributes()->data;
	$wetter[0]['temperatur'] = $api->weather->current_conditions->temp_c->attributes()->data;
	$wetter[0]['luftfeuchtigkeit'] = $api->weather->current_conditions->humidity->attributes()->data;
	$wetter[0]['wind'] = $api->weather->current_conditions->wind_condition->attributes()->data;
	$wetter[0]['icon'] = str_replace($icons_google, $icons_src, $api->weather->current_conditions->icon->attributes()->data);

	// Wettervorhersage für heute, morgen, übermorgen und in drei Tagen ($wetter[1] bis $wetter[4])
	$i = 1;
	foreach($api->weather->forecast_conditions as $weather)
	{
		$wetter[$i]['wochentag'] = $weather->day_of_week->attributes()->data;
		$wetter[$i]['zustand'] = $weather->condition->attributes()->data;
		$wetter[$i]['tiefsttemperatur'] = $weather->low->attributes()->data;
		$wetter[$i]['hoechsttemperatur'] = $weather->high->attributes()->data;
		$wetter[$i]['icon'] = str_replace($icons_google, $icons_src, $weather->icon->attributes()->data);

		$i++;
	}

	return $wetter;
}

Erläuterung der Parameter:
$plz enthält die Postleitzahl des jeweiligen Ortes
$land enthält das Land, in dem der Ort liegt
$icons_src enthält den Pfad zum Ordner, in dem die Wetter-Icons liegen
$sprache enthält die Sprache, in der die Wetterdaten bereitgestellt werden sollen
$ort enthält den Namen der Stadt (wird dieser angegeben, werden $plz und $land in der Funktion nicht beachtet)

Wetterdaten ausgeben

Da die Funktion ein Array zurückgibt, müssen wir diese also in einem Array speichern:

$wetter = website_wetter("46562", "Germany", "/wetter-icons/");

Die Wettervorhersage für heute könnte man wie folgt ausgeben:

echo "Wetter in ".$wetter['stadt'].":<br/>n";
echo $wetter[1]['wochentag']."<br/>n";
echo $wetter[1]['zustand']."<br/>n";
echo "min. ".$wetter[1]['tiefsttemperatur']."° C | max. ".$wetter[1]['hoechsttemperatur']."° C<br/>n";
echo "<img src="".$wetter[1]['icon']."" alt="".$wetter[1]['zustand']."" />n";

Das Ergebnis in HTML schaut dann z. B. so aus:

Wetter in Voerde (Niederrhein), NRW:<br/>
Fr.<br/>
Meist sonnig<br/>
min. 11° C | max. 18° C<br/>
<img src="/wetter-icons/mostly_sunny.gif" alt="Meist sonnig" />

Die verschiedenen Wetter-Icons

Google sieht für die Wetterdaten 22 verschiedene Zustände des Wetters vor. Demnach gibt es auch 22 verschiedene Icons, die das entsprechende Wetter verdeutlichen. Wichtig ist, dass man sich nach den vorgegebenen Dateinamen richtet, wenn man eigene Icons verwenden möchte. Hier die Liste der 22 Wetter-Icons:

chance_of_rain.gif
sunny.gif
mostly_sunny.gif
partly_cloudy.gif
mostly_cloudy.gif
chance_of_storm.gif
showers.gif
rain.gif
chance_of_snow.gif
cloudy.gif
mist.gif
storm.gif
thunderstorm.gif
chance_of_tstorm.gif
sleet.gif
snow.gif
icy.gif
dust.gif
fog.gif
smoke.gif
haze.gif
flurries.gif

Um die Wetter-Icons von Google zu vergleichen, sind diese auf der Demo-Seite aufgelistet.
Hier ein Anwendungsbeispiel (gefunden auf DuisburgFans.de):
Wetterbox auf DuisburgFans.de

Rechtliches

Google liefert für seine Weather API keine offizielle Dokumentation. Die Google Wetter API ist vielmehr ein Produkt des Google Kalenders, in dem Google das Wetter einbindet. Die Nutzung der Weather API erfolgt somit zurzeit noch auf eigene Gefahr. Eine Alternative liefert der Yahoo! Weather RSS Feed, der allerdings nicht mit deutschen Postleitzahlen umgehen kann, sondern eine Location ID benötigt. Zur Ermittlung beim Yahoo! Wetter einfach die Stadt suchen und auf der Unterseite dann auf den RSS-Button klicken.

» Demo (Wettervorhersage)

» Das PHP-Script als Download (Nutzungsrechte siehe Datei)

Wie immer kann man mich bei Fragen gerne über das Kontaktformular anschreiben oder einen Kommentar hinterlassen.

Weitere Tutorial-Artikel

Sebastian Gollus

Ich bin seit 2007 selbständiger und freiberuflicher Web-Developer. Auch bin ich studierter Medien­wissen­schaftler mit Abschluss an der Uni Duisburg-Essen in „Angew. Kognitions- und Medien­wissen­schaften”. Neben Deutsch spreche ich auch Englisch und Niederländisch.
Kontakt zu mir gerne auch über Google+ und twitter.

Die neuesten Artikel

138 Kommentare zu “Wetter auf eigener Website mit Google Weather API

  1. Kreil sagt:

    Hallo,
    leider bekomme ich das tolle PHP-Script nicht zum laufen, nach dem Ausfüllen der oberen "function website_wetter" habe ich immer einen Fehler in Zeile 14 ?! Liegt das irgendwie am "Array" ?

    Vielen Dank im Voraus.

    MfG
    Kreil

  2. Sebastian sagt:

    Die Parameter der website_wetter Funktion bitte nicht ändern. Die entsprechenden Werte der Parameter erst im Funktionsaufruf

    $wetter = website_wetter("46562", "Germany", "/wetter-icons/");

    angeben.

  3. Sebastian sagt:
    Parse error: parse error, unexpected T_OBJECT_OPERATOR

    Diese Fehlermeldung ist ein untrügliches Anzeichen dafür, dass lediglich PHP 4 auf eurem Server bzw. Webspace läuft. Simplexml benötigt jedoch PHP 5.

  4. Joerg sagt:

    Wer bei 1und1 ist, kann per .hatacces PHP 5 einstellen, sofern das in seinem Paket ist. Dazu einfach in die .htacces folgende Zeile am Anfang einfügen:

    AddType x-mapp-php5 .php AddHandler x-mapp-php5 .php

    Bei mir kommt trotzdem:

    Warning: file_get_contents() [function.file-get-contents]: URL file-access is disabled in the server configuration in /homepages/22/XXXXXXXXXXXX/htdocs/XXXXXXXXX/weather.php on line 26
    Warning: file_get_contents(http://www.google.com/ig/api?weather=37083-Deutschland&hl=de) [function.file-get-contents]: failed to open stream: no suitable wrapper could be found in /homepages/22/XXXXXXXXXXXX/htdocs/XXXXXXXXX/weather.php on line 26
    Fatal error: Call to a member function attributes() on a non-object in /homepages/22/XXXXXXXXXXXX/htdocs/XXXXXXXXX//weather.php on line 31
  5. Sebastian sagt:

    Hallo Joerg,

    überprüfe doch bitte mal die php.ini Einstellungen.
    allow_url_fopen = 1 ist wichtig.

    Du kannst auch eine phpinfo.php erstellen mit dem Inhalt:
    <?php phpinfo(); ?>

    Und dort schauen, ob allow_url_fopen aktiviert ist. Wenn nicht, solltest du mit deinem Webspace Anbieter sprechen.

  6. Alexander sagt:

    Erste Snippet ist super, aber er zeigt keine russische (oder änliche ) sprache.
    Fix:

    if ($sprache=='ru') {
    	$api = simplexml_load_string(iconv('cp1251', 'utf-8', (file_get_contents("http://www.google.com/ig/api?weather=".$station."&hl=".$sprache))));
    } else {
    	$api = simplexml_load_string(utf8_encode(file_get_contents("http://www.google.com/ig/api?weather=".$station."&hl=".$sprache)));
    }

    sonst alles gut!

  7. Martin sagt:

    Hallo!

    Funktioniert das auch mit Österreichischen Orten?

    lg

  8. Sebastian sagt:

    Hallo Martin,

    ja, das funktioniert mit allen internationalen Orten.

    Gruß
    Sebastian

  9. Sascha sagt:

    Hallo.
    Funktioniet an und für sich super. Nur zeigt es mir die Umlaute nicht richtig an.
    Bewölkt anstatt Bewölkt.

    Gruß
    Sascha

  10. Sascha sagt:

    Hat sich erledigt, habe noch das hier eingebaut:
    header(‘content-type: text/html; charset=utf-8′);

    Sascha

  11. Rainer sagt:

    Habe ein weiteres Wetter-Icon gefunden (Aktuell gerade zu sehen unter "Paris")
    Und zwar "rain_snow.gif" (Text: Regen und Schnee?) Das Bild ist identisch mit "storm.gif".

    Vermutlich werden noch mehr als die 22 Wetterzustände von Google verwendet.

    Das Script ist übrigens super!

    Gruß Rainer

  12. Jurgen sagt:

    Hallo
    So funzt alles einwandfrei!!
    Meine Frage : Kann man das auch alles Horizontal anordnen ?

  13. Rainer sagt:

    Hallo Jurgen,

    versuch es mal mit folgender Änderung im Script (ab // Beispielhafte Ausgabe):

    echo "<table width='500' border='0' bgcolor='#FFFFFF' cellpadding='1' cellspacing='0'>";
    
     echo "<tr>n";
        echo "<td colspan='6'><font face='Verdana'  size='2' color='#000000'><b>Das Wetter in ".$wetter['stadt']."</b></font></td>n";
     echo "</tr>n";
     
      echo "<tr>n";
        echo "<td align='center' width='53' bgcolor='#FFFFFF'><font face='Verdana' size='1'>Aktuell</font></td>n";
        echo "<td></td>n";
        echo "<td align='center' width='80' bgcolor='#FFFFFF'><font face='Verdana' size='2'>Heute</font></td>n";
        echo "<td align='center' width='80'><font face='Verdana' size='2'>".$wetter[2]['wochentag']."</font></td>n";
        echo "<td align='center' width='80'><font face='Verdana' size='2'>".$wetter[3]['wochentag']."</font></td>n";
        echo "<td align='center' width='80'><font face='Verdana' size='2'>".$wetter[4]['wochentag']."</font></td>n";
      echo "</tr>n";
      
      echo "<tr>n";
        echo "<td align='center' width='53' bgcolor='#FFFFFF'><img border='1' src="http://www.google.com/ig/images/weather".$wetter[0]['icon']."" alt="".$wetter[0]['zustand']."" /></td>n";
        echo "<td bgcolor='#FFFFFF'><font face='Verdana' size='1'>".$wetter[0]['wind']."<br>".$wetter[0]['luftfeuchtigkeit']."</font></td>n";
        echo "<td align='center' width='80' bgcolor='#FFFFFF'><img border='1' src="http://www.google.com/ig/images/weather".$wetter[1]['icon']."" alt="".$wetter[1]['zustand']."" /></td>n";
        echo "<td align='center' width='80'><img border='1' src="http://www.google.com/ig/images/weather".$wetter[2]['icon']."" alt="".$wetter[2]['zustand']."" /></td>n";
        echo "<td align='center' width='80'><img border='1' src="http://www.google.com/ig/images/weather".$wetter[3]['icon']."" alt="".$wetter[3]['zustand']."" /></td>n";
        echo "<td align='center' width='80'><img border='1' src="http://www.google.com/ig/images/weather".$wetter[4]['icon']."" alt="".$wetter[4]['zustand']."" /></td>n";
      echo "</tr>n";
      
      echo "<tr>n";
        echo "<td align='center' bgcolor='#FFFFFF'><font face='Verdana' size='3'><b>".$wetter[0]['temperatur']."&deg;C</b></font></td>n";
        echo "<td bgcolor='#FFFFFF'><font face='Verdana' size='2'><b>".$wetter[0]['zustand']."</b></font></td>n";
        echo "<td align='center' bgcolor='#FFFFFF'><font face='Verdana' size='2'><font color='#FF0000'>".$wetter[1]['hoechsttemperatur']."&deg;C</font><br>n";
         echo "<font color='#0000FF'>".$wetter[1]['tiefsttemperatur']."&deg;C</font></font></td>n";
        echo "<td align='center'><font face='Verdana' size='2'><font color='#FF0000'>".$wetter[2]['hoechsttemperatur']."&deg;C</font><br>n";
          echo "<font color='#0000FF'>".$wetter[2]['tiefsttemperatur']."&deg;C</font></font></td>n";
        echo "<td align='center'><font face='Verdana' size='2'><font color='#FF0000'>".$wetter[3]['hoechsttemperatur']."&deg;C</font><br>n";
          echo "<font color='#0000FF'>".$wetter[3]['tiefsttemperatur']."&deg;C</font></font></td>n";
        echo "<td align='center'><font face='Verdana' size='2'><font color='#FF0000'>".$wetter[4]['hoechsttemperatur']."&deg;C</font><br>n";
          echo "<font color='#0000FF'>".$wetter[4]['tiefsttemperatur']."&deg;C</font></font></td>n";
      echo "</tr>n";
      
       echo "<tr>n";
        echo "<td colspan='2'><font face='Verdana' size='1'>Script:<a href="http://www.web-spirit.de/webdesign-tutorial/9/Wetter-auf-eigener-Website-mit-Google-Weahter-API" target="_blank">Wettervorhersage</a></font></td>n";
        echo "<td align='center' width='80' bgcolor='#FFFFFF'><font face='Verdana' size='1'>".$wetter[1]['zustand']."</font></td>n";
        echo "<td align='center' width='80'><font face='Verdana' size='1'>".$wetter[2]['zustand']."</font></td>n";
        echo "<td align='center' width='80'><font face='Verdana' size='1'>".$wetter[3]['zustand']."</font></td>n";
        echo "<td align='center' width='80'><font face='Verdana' size='1'>".$wetter[4]['zustand']."</font></td>n";
    
     echo "</tr>n";
    
    echo "</table>";
    
  14. Jurgen sagt:

    Hallo
    Wenn ich das so nach //Beispiel Ausgabe
    Einfüge funzt es nicht !
    Heißt ich kopiere Deinen Code lösche alles unterhalb von // Beispiel Ausgabe
    und füge Deinen Code ein. Wenn ich das richtig verstanden habe ?
    Wenn ich das so mache funktioniert das leider nicht.
    Sorry bin in PHP nicht wirklich soo Fit.
    Aber Danke erstmal für die so schnelle Reaktion (Antwort)
    hätte ich nicht erwartet !

  15. Jurgen sagt:

    Fehler zusehen auf der Seite
    Parse error: syntax error, unexpected ‘<’ in /is/htdocs/wp1154660_QRKFVV4YIX/www/web/klein/wetter2.php on line 63

  16. Sebastian sagt:

    Es ist doch alles viel einfacher.
    Einfach den Paragraphen <p> eine Klasse geben z. B. <p class="wetter"> und dann in CSS nebeneinander floaten lassen.
    p.wetter { float:left; }

  17. Jurgen sagt:

    Jungs ihr seit einfach Klasse !!!!!
    Jetzt funzt es einwandfrei !!!!

  18. Jurgen sagt:

    Jetzt muss ich nur noch die Umlaute hinbekommen.
    Da ich mit Wysiwyg Web Builder Arbeite muss auch das per Hand geändert werden.
    Aber das bekomme ich auch noch raus wie und wo das geht.

  19. Rainer sagt:

    @Jürgen:
    Habe gesehen, dass es doch geklappt hat.
    Vermutlich hat das Ende Zeichen für php gefeht? ( ?> )
    Problem Umlaute: Zeichensatz utf-8 verwenden. Kommentar 9 von Sascha.

    Gruß nach Thüringen

    @Sebastian:
    Ich verwende halt noch Tabellen beim Erstellen meiner Seiten. Mit Stylesheets geht das natürlich besser und mit weniger Aufwand

  20. 1. Danke für die Funktion, die dient mir als Beispiel (muss noch einiges dran gemacht werden).

    2. Die Übergabe von PLZ, Ort und Land geht viel einfacher mit + anstatt -, dann kann man auch grundsätzlich alles und in beliebiger Reihenfolge einsetzen und der Ort wird auch erkannt wenn mehrere Orte die gleiche PLZ haben. Beispiel: http://www.google.com/ig/api?weather=37627+Stadtoldendorf+Deutschland&hl=de.

    3. Tabellen für die Gestaltung sind mega-out, denn Tabellen gibt es nur zur tabellarischen Darstellung von Daten. Dies sollte im Hinblick auf die Barrierefreiheit eingehalten werden, da Screen-Reader eine Tabelle nur als solches erkennen können.

    4. In eine PHP-Datei kann reines HTML stehen, nicht nur in echo-Anweisungen. Dafür vorher den PHP-Abschnitt beenden mit ?> und nach dem HTML-Abschnitt mit <?php wieder starten. Der Nutzen: Der HTML-Code ist in ein HTML-Editor erstell- und verwaltbar. Ausgaben aus PHP lassen sich an beliebiger Stelle mit <?php echo $x; ?> oder <?=$x?> einbinden (letztere Möglichkeit nicht unter Windows).

    5. Für das freie CMS Contenido (www.contenido.org) gibt es das Wetter bald als Modul, vielen Dank nochmal für den Beispielcode!

  21. Webtwist - Webdesign, Werbeagentur sagt:

    Der letzte Eintrag ist zwar schon ein bissl her, aber als rechtlich sichere Alternative gibt es noch das openWeather Api von Wetter.com

  22. Thomas Wolf sagt:

    Habe das script auf meinem webspace laufen gehabt, und in einem iframe von woanders aufgerufen. Hat ca. 10 Tage funktioniert, jetzt geht es nicht mehr. Nachdem mir mein Provider versichert hat, keinerlei Umstellungen am Server vorgenommen zu haben, kann ich nur den Schluss ziehen, dass google selbst die Bremse gezogen hat. Andererseits funktioniert ja hier auch noch alles – und diese Seiten werden wohl intensiver genutzt werden, als die meinigen, wobei letztere gerade einer wirklich intensiven Testingphase unterzogen werden. Irgendwelche Neuigkeiten zu den rechtlichen Aspekten?

  23. Thomas Wolf sagt:

    Absurderweise geht es jetzt, da ich das script auf einen anderen Server übersiedelt habe, auch wieder vom ursprünglichen Ort aus. Was weiß ich, was da los war. Vielleicht war meine Paranoia google gegenüber ja gänzlich unberechtigt. Wie dem auch sei, ich habe das script um einen kleinen Datencache ergänzt – es reicht ja wohl meist, die Wettervorschau nur dann und wann zu aktualisieren. Hier der ergänzente Teil, der die Zeile mit $api=… ersetzt.

    $file=$station.$sprache.".xml";
    $interval=60*60*6; // sec * min * h = Updateintervall [hier alle 6h], so rechnet es sich besser ;)
    if (file_exists($file) && (filectime($file)+$interval>time()))
    {
    $content=file_get_contents($file);
    }
    else
    {
    $request = file_get_contents("http://www.google.com/ig/api?weather=".$station."&hl=".$sprache);
    if (!$request) $content=file_get_contents($file); // lebt davon, dass es erstmal klappt
    else {$content=$request; $writeres=file_put_contents($file,$content);} // achtung auf schreibrechte!
    }
    $api = simplexml_load_string(utf8_encode($content));

  24. Andreas sagt:

    Tolles script,

    habe allerdings auch Probleme mit den Umlauten.
    Den Header kann ich leider nicht auf UTF-8 setzen [ header(\'content-type: text/html; charset=utf-8\') ]
    da die gesamten Seiten auf ISO-8859-1 aufsetzen.

    Gibt es hier eine Lösung?

    Probiere schon rum mit z.B.:
    // Aktuelles Wetter
    $wetter[0][\'zustand\'] = utf8_encode($api->weather->current_conditions->condition->attributes()->data);

    aber es will nicht klappen.

    LG
    Andreas

  25. Philipp sagt:

    Hallo!

    Tolles Skript. Inspirierte mich zu www.regnets.in/. Einfach beispielsweise www.regnets.in/berlin eingeben und fertig.

    Grüße

  26. Andreas sagt:

    Hab das Problem mit den Umlauten nun gelöst:
    Hier der Beipsiel-Code:

    // Funktionsaufruf in Array
    $wetter = website_wetter("30159", "Germany");

    // replace special characters in wetter
    // Ö->Oe, Ä->Ae, Ü->Ue
    // ö->oe, ä->ae, ü->ue
    $search = array("/Â/", "/ö/", "/ü/");
    $replace = array(" ", "ö", "ü");
    $wetter[0]['zustand'] = trim(preg_replace($search, $replace, $wetter[0]['zustand']));
    $wetter[0]['luftfeuchtigkeit'] = trim(preg_replace($search, $replace, $wetter[0]['luftfeuchtigkeit']));
    $wetter[1]['zustand'] = trim(preg_replace($search, $replace, $wetter[1]['zustand']));
    $wetter[2]['zustand'] = trim(preg_replace($search, $replace, $wetter[2]['zustand']));
    $wetter[3]['zustand'] = trim(preg_replace($search, $replace, $wetter[3]['zustand']));
    $wetter[4]['zustand'] = trim(preg_replace($search, $replace, $wetter[4]['zustand']));

    // Beispielhafte Ausgabe

  27. Andreas sagt:

    Was gib ich denn zum Beipsiel an für WIEN / Österreich?
    PLZ 2201

    $wetter = website_wetter("2201", "Österreich"); Funktioniert nicht !

  28. Sebastian sagt:
    $wetter = website_wetter("", "Austria", "/wetter-icons/", "de", "Gerasdorf+bei+Wien");
  29. Sebastian sagt:
    $wetter = website_wetter("", "Austria", "/wetter-icons/", "de", "Gerasdorf+bei+Wien");
  30. Andeas sagt:

    So gehts:
    $wetter = website_wetter("Graz", "Austria");

    Nun werden aber die z.T. engl. Namen ausgegeben, also z.B. "Das Wetter für Graz, Styria:" anstatt ….Graz, Steiermark…
    Kan man das eindeutschen?

  31. Ramon sagt:

    Super kleines Script! Danke!

    Hat einer von euch schon versucht, die Google-Gifs gegen PNGs auszutauschen ?

  32. Vielen Dank für dieses hervorragende Script!

    Was mich daran allerdings enorm stört, ist die Tatsache (wie auch von Andreas aus Österreich erwähnt), dass die Bundesländer bzw. das jeweilige Bundesland nicht in Deutsch sondern in Englisch angezeigt werden.

    Das liegt aber bestimmt an der Google-API und nicht an dem Script (vermute ich zumindest).

    Sollte sich trotzdem eine Lösung für dieses „Problem“ finden lassen, dann wäre ich sehr erfreut.

    Besten Gruß

    Markus Essler

  33. Andreas sagt:

    Zu Markus: englische Namen

    Das Problem kann man zumindest händisch lösen – bei Deiner einzigen Site kannst Du schreiben:
    anstatt:
    // Beispielhafte Ausgabe
    echo "<h3><a id="Wetter">Das Wetter für ".$wetter['stadt'].":</a></h3>n";

    Nun
    // Beispielhafte Ausgabe
    echo "<h3><a id="Wetter">Das Wetter für Heilbronn, Bayern</a></h3>n";

  34. Ramon sagt:

    Um die Alpha-Transparent der PNG-Grafiken nutzen zu können, müssen die PNG-Grafiken natürlich geladen werden. Ich habe es mal mit einer zusätzlichen Zeile im Script gelöst. Gleich nach der Zeile:

    $wetter[$i]['icon'] = str_replace($icons_google, $icons_src, $weather->icon->attributes()->data);

    Habe ich folgende Zeile eingefügt:

    $wetter[$i]['icon'] = str_replace(‘.gif’, ‘.png’, $wetter[$i]['icon']);

    Ich habe es mal auf meinem kleinen privaten Portal eingebaut, auf dem ich verschiedene Dinge teste, bevor ich sie an anderer Stelle einsetze ( www.easyQ.de )

  35. Super tolles Script, Aber wie kann ich eine Abfrage einbauen, dass der Nutzer in meinem Forum den Ort selbst eingibt? und das nicht vorgegeben ist?

  36. Alexey sagt:

    Super tipp mit PNG, hat irgendjemand eine idee wie ich statt text fuer wind auch PNG bilder namen generieren kann und text fuer windgeschwindigkeit.
    Das waehre einfach HAMMER…

    DANKE

  37. Kevin sagt:

    Funktioniert einwandfrei;)

  38. Ramon sagt:

    Manchmal scheint die Abfrage einiger Orte unterbrochen zu sein. Ein Fehler-Handler wäre angebracht, da sich Fatal-Errors auf der Website nicht so gut präsentieren lassen. Hat sich schon jemand darüber Gedanken gemacht?

  39. mark sagt:

    ich hab mir n fehler code eingebaut:

    if (isset($api->weather->problem_cause)) {
    $x = (string)$api->weather->problem_cause->attributes()->data;
    return $x;
    }
    //ansonsten weiter

  40. tom sagt:

    Hallo,

    ich bin leider zu taub um das Script zu laufen zu kriegen. "Ich sehe garnichts". Reicht nicht ein include um das Script auf der Seite einzufügen ?

    Wär sehr dankbar wenn mir jemand kurz sagen kann was man genau machen muss :/

  41. Morrers sagt:

    Entweder habt ihr alle unsichere Server das es funktioniert, bei mir kommt bei fopen usw sowie file_get_contents immer eine Fehlermeldung
    failed to open stream: no suitable wrapper could be found

  42. c0de sagt:

    Ausführliche Information über die Wetter Api, danke! Besonders die Liste der Bilder hat mir gerade bei einem Projekt gefehlt!

  43. Morrers sagt:

    Hallo
    Städte aus 2 Wörtern funktionieren bei mir nicht !

  44. Sascha sagt:

    Hi,

    vorab danke für die Mühe und das Skript – läuft bei mir, nachdem allow_url_fopen vom Provider freigeschaltet wurde.

    Eine Frage habe ich dennoch: Ich würde die Sache gerne mit den lat, lon-Werten verwenden (und nicht mit PLZ oder Ort). Ich habe dazu in diesem Beitrag: http://www.hackthenet.de/weblog/225/google-wetter-api Kommentar 35 einen Lösungsansatz gefunden, der bei mir aber nicht läuft. Eventuell habe ich das auch falsch integriert. Könnte mir jemand einen funktionierenden Lösungsweg aufzeigen? Ich wäre sehr dankbar!

    Beste Grüße und nochmals danke!

  45. Sebastian sagt:

    Um mit den Geo-Daten zu arbeiten, musst du den folgenden Funktionsaufruf verweden:

    $wetter = website_wetter("", "", "/", "de", ",,,50334722,6944444");

    $plz und $land bleiben leer, dadurch wird $ort mit den Longitude und Latitude Angaben verwendet.

  46. Sascha sagt:

    Vielen Dank für die Hilfe!

  47. Thomas sagt:

    Hallo mark,

    an welcher Stelle hast du deinen Fehlercode eingebaut?

    ———-
    if (isset($api->weather->problem_cause)) {
    $x = (string)$api->weather->problem_cause->attributes()->data;
    return $x;
    }
    //ansonsten weiter
    ———-

  48. Florian sagt:

    Kann mir jemand sagen wie es mit der kommerziellen Nutzung dieser Daten aussieht?
    Offensichtlich ist der Webservice ja frei zugaenglich… Aber da es weder eine Dokumentation
    noch "Terms of use" dazu gibt (Oder ich sie bisher noch nicht gefunden habe) tue ich mir schwer
    zu bewerten ob dieser Service fuer mich verwendbar ist.

    Kann mir dazu jemand was sagen?

    mfg

  49. Reinhard sagt:

    Hi, sehr schönes Skript – Kompliment !!!

    Nur eine Kleinigkeit zur Info: wenn die Sprache nicht DE sondern EN ist, dann wird die Temperatur-Einheit nicht korrekt angezeigt … 24° C -> sondern es müsste 24° F -> Fahrenheit sein.

    Gruss und schönes Fest!

    Reinhard

  50. Checker24 sagt:

    Endlich mal ne Wetterfunktion die man selbst umbauen bzw. verbessern kann. Gefällt mir, werde ich gleich mal ausprobieren.Vielen Dank

  51. Didlido sagt:

    Hi,
    habe noch ein Problem mit dem PHP File
    ich bekomme wegen diesen Zeilen:
    $wetter['datum'] = $api->weather->forecast_information->forecast_date->attributes()->data;
    immer folgende Fehlermeldung:
    Fatal error: Call to a member function attributes()
    muss ich noch irgendwas einbinden?
    Habe auch PHP 5 im Einsatz

  52. Sebastian sagt:

    Das Problem wurde im 5. Kommentar bereits erläutert. Bitte überprüfe deine allow_url_fopen Einstellungen.

  53. Didlido sagt:

    Hi du,
    danke für die Antwort. Das kann es aber nicht sein da es bei mir auf On gesetzt ist. Habe extra nochmal nachgesehen. Kann es noch eine zweite Ursache geben?

  54. Tom sagt:

    Ich finde das Skript und die Möglichkeit der Einbindung auch super, aber allow_url_fopen = 1 – ist das nicht ein Sicherheitsrisiko? Gibt es dafür eine andere Lösung?

  55. Berlin sagt:

    klasse geht super,

    Wichtig: Auf jeden Fall Cache benutzen und nicht ständig abfragen – sonst droht die umgehende Aussperrung.

  56. Maik sagt:

    Vielen Dank für das super Skript.

    Ich habe jedoch ein Zeitproblem. Wenn man die Google-API öffnet wie beschrieben, erhält man die Werte von vor 90 Minuten etwa. Entsprechend ist der aktuelle Tag jetzt um 0:30 Uhr noch der 14. März (<current_date_time data="2011-03-14 23:00:00 +0000"/>) …

    Lässt sich das irgendwie umgehen, sodass 0 Uhr = 0 Uhr ist?

    Danke,
    Maik.

  57. Marcel sagt:

    Die Klasse ist echt eine gute Arbeit. Allerdings solltest du bei der Einbindung die Fehler abfangen die auftreten können. Derzeit ist der Wetter-Service z.B. down und bei dir wird ein dicker Error geschmissen. Also, Error-Handling fehlt noch. Sonst ein klasse Job!

  58. Robert sagt:

    Schöne Beschreibung für den Google-Service, ich habe noch eine Beschreibung für den weather.com-Service gefunden: http://www.keepaneye.de/wetterdaten-aus-xml-api-verwenden-aus-feed-einbinden/
    Viele Grüße,
    Robert

  59. Patrick sagt:

    Hallo Leute,

    erstmal Danke für dieses tolle API, Sebastian! Ich hab es vor zwei Tagen auf meiner noch entstehenden Seite integriert und es hat gut funktioniert. Jetzt bekomme ich

    Warning: file_get_contents(http://www.google.com/ig/api?weather=Hamburg-Germany&hl=de) [function.file-get-contents]: failed to open stream: HTTP request failed! HTTP/1.0 503 Service Unavailable in /mnt/webc/52/68/52747868/htdocs/wp/wp-content/themes/quaeng/header.php on line 50

    Fatal error: Call to a member function attributes() on a non-object in /mnt/webc/52/68/52747868/htdocs/wp/wp-content/themes/quaeng/header.php on line 59

    Jetzt habe ich schon diesen Fehlercode entdeckt und weiß leider nicht genau, wo er platziert werden muss, das es funktioniert.

    Könnt ihr mir weiterhelfen?

    Beste Grüße

    Patrick

  60. Chris sagt:

    Ich habe ein ähnliches Problem mit der Weather API, die bis heute eigentlich immer fehlerfrei funktioniert hat.
    Seit heute schmeißt die API mir manchmal nurnoch "Call to a member function attributes() on a non-object" raus und legt die ganze Webseite lahm.
    Auf http://blog.rockettheme.com/forum/index.php?f=266&t=109548&p=581592&rb_v=viewtopic wird das gleiche Problem (allerdings vor einiger Zeit schon) geschildert, da scheint es etwas mit der Wind-Information zu tun zu haben. Seltsam ist halt, dass das erst seit heute (und bei meinem Vorredner seit gestern) der Fall ist.

  61. Tino sagt:

    Vielen Dank für das tolle Script!

    Bei funzt alles wunderbar, nur irgendwie werden die Bilder nicht mehr angezeigt. Wenn ich den Bilderlink aufrufe, sagt mir eine Errorseite von Google, dass der Link nicht gefunden werden konnte.

    Kann es sein, dass Google da was geändert hat?

  62. Claus sagt:

    Bei mir werden ab heute auch nicht mehr die Bilder angezeigt. Der Pfad zum Bild sieht nun auch etwas komisch aus:

    http://www.meinehomepageadresse.de/wetter/iconhttp://g0.gstatic.com/images/icons/onebox/weather_scatteredthunderstorms-40.gif

    Also meine homepageadresse wird der eigentlichen Adresse zum Bild vorangestellt.
    Wie kann ich das verhindern?

  63. Sebastian sagt:

    Google hat neue Wetter-Icons erstellt, die auf einem neuen Server liegen und anders benannt wurden.
    Ihr könnt nun die neue Version des Scripts herunterladen.
    Auf der Demo-Seite findet ihr die neuen Wetter-Icons (fehlende werden nachgereicht, sobald bekannt).

  64. conan sagt:

    das script unktioniert gut. aber vllt kann mal wer die optimierte version hier hochladen? die anzahl der verbesserungen ist ja schon ziemlich groß. danke

  65. Marlon sagt:

    Trotz neuer Version kann die die URL zu den Bildern nicht anpassen.
    "http://g0.gstatic.com/images/icons/onebox" steht immer mit drin.
    Ich möchte meine eigenen Bilder verwenden.

    $icons_google = "meine_url"
    funktioniert nicht.

  66. Rainer sagt:

    Belasse einfach unter Wetterdaten auslesen den Link
    $icons_google = "http://g0.gstatic.com/images/icons/onebox/"

    und ändere weiter unten bei der Ausgabe den eigenem Link eigenen Bilddatei
    echo "<img src="meine_url".$wetter[0-3]['icon']."" alt="".$wetter[0]['zustand']."" />n";

  67. Rainer sagt:

    Text soll natürlich heißen:

    und ändere weiter unten bei der Ausgabe den vorhandenen Link ab zur eigenen Bilddatei

  68. Marlon sagt:

    Hallo Rainer,

    das habe ich auch probiert.
    Dann sieht das ganze so aus:
    http://www.meine_url/wetter/iconhttp://g0.gstatic.com/images/icons/onebox

  69. Sebastian sagt:

    Google hat wieder die alten Bilder drin. Daher bitte die neue Versionsadresse auskommentieren und die alte wieder rein.

    Icons aus euren eigenen Ordnern verwendet ihr, wenn ihr den entsprechenden Ordner im Funktionsaufruf mit angebt:

    $wetter = website_wetter("46562", "Germany", "http://meineURL/images/wetter/icons/", "de");

    Dann ist die Bildadresse direkt mit im Array drin.
    Die finale Ausgabe im Script ist natürlich nur beispielhaft. Arbeitet am besten nur mit den Arrayfelder.

  70. Profi Angler sagt:

    Hey, vielen Dank für den ausführlichen Beitrag und das Script. Werde es umgemodelt auf Zend auf unserer Seite einbinden,

  71. Lena sagt:

    Noch mal zum Fehler
    PHP Fatal error: Call to a member function attributes() on a non-object
    bei mir in Zeile
    $wetter['stadt'] = $api->weather->forecast_information->city->attributes()->data;

    Es funktioniert bei mir alles wunderbar, aber nach ca. 1-4 Stunden kommt dieser Fehler und die Seite bleibt stehen. (Derzeit aktualisiere ich zu testzwecken alle 10 Minuten, klar, viel zu oft und unnötig, aber ich teste ja noch …)

    Ich möchte diesen Fehler gerne abfangen, aber wie?
    Kennt jemand eine Lösung?

  72. Marcel sagt:

    @Lena: Du könntest es z.B. mit einem

    if (is_object($api))
    {
    … DEINE WETTERSACHEN…
    }

    abfangen.

  73. Lena sagt:

    Hallo Marcel, Danke für den Tipp.

    Leider funktioniert es nicht.

    Ich benutze eine function um eine Textzeile für ein Laufband zu generieren.
    Nach dem Aufruf erfolgt als erstes eine Online-Abfrage:

    function get_wetter($Standort, $Sprache="de") {
    if (!fsockopen("www.google.com", 80, $errno, $errstr, 30)) {
    $WetterZeile="Wetterdaten-Server derzeit nicht erreichbar";
    return $WetterZeile; }
    ….
    }

    Das funktioniert.

    Nach der $api-Zeile folgt das Abfangen des Fehlers: PHP Fatal error: Call to a member function attributes() on a non-object:

    $api = simplexml_load_string(utf8_encode(file_get_contents("http://www.google.com/ig/api?weather=".$Standort."&hl=".$Sprache)));

    if (!is_object($api)) {
    $WetterZeile="Fehler in function Wetterdaten";
    return $WetterZeile; }

    $wetter = array(); $i=0;
    $wetter['stadt'] = $api->weather->forecast_information->city->attributes()->data;
    ….

    Das funktioniert im Ernstfall nicht.
    Die function wird sehr oft (so 100 mal +/- 50) erfolgreich ausgeführt. Dann kommt der Fehler in Zeile "$wetter['stadt']…" der mit is_object wohl nicht abgefangen werden kann.

    Mir ist noch nicht ganz klar, ist die Ursache in meinem Script oder kommt sie durch den API-Aufruf in mein Script?

    Hat noch jemand eine Idee wie ich den Fehler abfangen kann?

  74. Florian sagt:

    Tolle Funktion, ich arbeite an einer TYPO3 Extension bei der sie zum Einsatz kommt. Sobal sie fertig ist poste ich hier einen Link. Noch zwei Verbesserungsvorschläge:

    - Wenn $station Leer, oder Sonderzeichen enthält gibt das Script einen Fehler aus. Nachdem der Ort bei mir dynamisch gefüllt wird kann das durchaus vorkommen. Ich würde vorschlagen urlencode($station) zu verwenden, das hilft bei mir.

    - Gleiches gilt wenn man eine ungültige Station eingibt, damit habe ich den Fehler abgefangen: if(!isset($api->weather->problem_cause->attributes()->data))

    Ich hoffe das hilft dir das Skript noch zu verbessern,

    Viele Grüße

    Florian

  75. Uli sagt:

    schöne Funktion.
    Aber ich suche noch nach der besten Methode den Ort anhand der IP zu ermitteln.
    Wie macht ihr das? Sowas nutzt doch sicher schon jemand!?

    Gruß Uli

  76. Lena sagt:

    Noch mal zum Fehler:
    PHP Fatal error: Call to a member function attributes() on a non-object

    ==> gelöst

    @Marcel: if (!is_object($api)) {return;} wird nie ausgeführt. Trotzdem danke für den Tipp.

    @Florian: Das war der entscheidende Hinweis: Vielen Dank.
    Beim API-Aufruf ist der Variableninhalt definitiv richtig (also nicht leer, keine Steuerzeichen, gültige Station)
    if(isset($api->weather->problem_cause->attributes()->data)) {return;} schlägt aber trotzdem so 2-5 mal pro Tag für weniger als eine Minute an. Da dann die folgenden Datenabfragen nicht ausgeführt werden gibt es auch keinen "Fatal Error" mehr.

  77. Chris sagt:

    Hallo,
    Wäre es auch möglich, eine Städte-Wetter-Funktion wie bei wetter.com zu programmieren. Also, dass es ein Suchfeld gibt, wo man die Stadt eingibt und dann das Wetter für diese Stadt erhält?

  78. Christian sagt:

    Hallo,
    ich würde gerne die Sprache auf Englisch umstellen,
    wenn ich statt "de" – "en" eingebe – ist alles auf englisch, jedoch wird die Temperatur in Fahrenheit angezeigt.

    Kann man das irgendwie noch anpassen?

    ps, es werden nur die Temperaturen der Tages-Vorschau auf Englisch angezeigt, der aktuelle Wert ist in Zelsius.

  79. Sebastian sagt:

    Leider denkt Google, dass bei englischer Sprache auch Fahrenheit notwenig sei.
    Einfach in PHP Fahrenheit in Celsius umrechnen: Temp[Celsius] = ( Temp[Fahrenheit] – 32 ) × 5 / 9

  80. Christian sagt:

    Hallo Sebastian,

    Danke für deine Antwort,
    leider kann ich fast kein PHP, könntest du mir sagen wo ich das genau einbauen müsste?
    wäre sehr nett von dir, danke!

  81. toni sagt:

    @Uli.
    Du musst zunächst die IP Adresse einem Ort zuordnen. Dazu gibt es geo-ip Tabellen und Dienste im Internet.
    Anschließend übergibst du der Api den Ort.

  82. absNoobalo sagt:

    Hallo zusammen,
    Erst mal danke für das script.
    Hätte da aber einen Verbesserungvorschlag, uns zwar:

    Für alle bei denen der Hoste "fopen" verbietet, bietet sich "curl" an.
    Einfach an der Stelle von $api = … ersetzen:

    $ch = curl_init("http://www.google.com/ig/api?weather=".$station."&hl=".$sprache);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
    $example = curl_exec($ch);
    curl_close($ch);
    
    $api = simplexml_load_string(utf8_encode($example));
    

    Gruss absNoobalo

  83. Lena sagt:

    Hallo,
    bei mir geht seit einigen Wochen das Datum nicht mehr. Es ist immer der 01.01.1970 (Startdatum von Unix). Alle sonstigen Daten werden richtig ausgelesen.
    Datum ging aber wochelang fehlerfrei.

    Hat sich mal wieder was bei google geändert?

  84. Lollo sagt:

    also ich muss sage, das Script an sich arbeitet recht zuverlässig, hut ab.
    aber es hat auch 2 gravierende Fehler.

    1. es fragt dauerhaft bei google ab, was man aber unter allen umständen vermeiden sollte
    2. obwohl der autor den utf8-encode einsetzt, wird die deutsche schreibweise dennoch ignoriert

    ich hab das Script mal so angepasst, sodass beide fehler behoben sind.
    1. um die dauerhafte abfrage bei google zu verhindern, löst man das mit einem eingabefeld, das zusätzlich
    noch eine if abfrage macht. erst wenn das eingabefeld gefüllt ist, und der button geklickt wird, wird bei google
    die abfrage gestartet.
    2. gleich zu anfang des scripts den utf8 setzen, nicht mittendrin!

    Weiterer Inhalt wurde an dieser Stelle entfernt.
  85. Lollo sagt:

    PS.: Nachtrag

    die gesuchte PLZ muss nun auch nicht mehr im script verankert werden. mit diesem script kann man nach allen PLZ suchen. wenn ihr genau hinseht, hab ich an mehreren stellen den string, wo die PLZ eingetragen wurde, mit dem eingabefeld verknüpft. das eingabe heisst $plz . genauso kann man das auch länderspezifisch machen. mit anderen worten: das script ist so ausgelegt, das weltweit abgefragt werden kann.

    viel spass beim basteln ^^

  86. Sebastian sagt:

    Hallo Lollo,

    vielen Dank für deine Anregung. Es geht in diesem Artikel um die Verwendung der Google Wetter API. Das angegebene Script ist lediglich eine Funktion, die in bereits vorhandene Programme integriert werden kann.

    Viel eleganter als ein Formular ist das Caching der Wetterdaten, die die Google Weather API liefert. Wetterdaten also in eine Datenbank oder Datei schreiben und mit einem Zeitstempel versehen und diesen vor der nächsten Abfrage abgleichen.

    PS: <font> sollte man schon lange nicht mehr benutzen ;-)

  87. Daniel sagt:

    Hallo Gemeinde/Genossen/Gleichgesinnte.

    Wollte das Script auch benutzen. bekomme leider folgenden Fehler

    Fatal error: Call to a member function attributes() on a non-object in /var/www/kunden/webs/XX-XXX/wetter.php on line 117

    117 = $wetter['stadt'] = $api->weather->forecast_information->city->attributes()->data;

    Nutze ein Teil des Scriptes von "absNoobalo" da es mit "file_get_contents" nicht funzt auf unseren Server.
    PHP Version is 5.2.6-1.

    $ch = curl_init("http://www.google.com/ig/api?weather=".$station."&hl=".$sprache);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
    $example = curl_exec($ch);
    curl_close($ch);

    $api = simplexml_load_string(utf8_encode($example));

    // Funktionsaufruf in Array
    $wetter = website_wetter("10115", "Germany");

    Danke im Voraus für eure Hilfe!

  88. Mayo sagt:

    Hallo,

    danke für das Skript. Und besonderen Dank für Post #6 für den Workaround mit den kyrillischen Buchstaben.

    Um das Ding unter php4 zum Laufen zu kriegen, hab ich diese simplexml class verwendet:

    http://www.phpkode.com/scripts/item/simplexml-for-php-/

    Zusätzlich muss beim Schreiben der Cache Datei (unbedingt machen!) noch file_put_contents($file,$content) durch fwrite ersetzt werden:

    if(strlen($content)>0) {
    unlink($file);
    $fcffd = fopen($file,’w’);
    fwrite($fcffd,$content);
    fclose($fcffd);
    }

    Um die englischsprachige Ausgabe in Celsius zu bekommen einfach bei Sprache
    $sprache=’en_GB’
    angeben! Wird nur "en" angegeben, geht Google von US aus, notiert man explizit noch GB dahinter ist es für den Rest der Welt und alles wird metrisch.

    Viele Grüsse!

  89. Jens sagt:

    @Lollo,
    Zitat:
    2. obwohl der autor den utf8-encode einsetzt, wird die deutsche schreibweise dennoch ignoriert…
    2. gleich zu anfang des scripts den utf8 setzen, nicht mittendrin!
    ————————————————–
    Leider wurden Teile Deines Posts entfernt, wo genau setzt Du utf8 an?

    @Alle,
    ich suche die Google Wettericons in einer Nacht-Version, da bei Google die Sonne nie untergeht… Bin leider kein Grafiker :-( … Hat da jemand Tipps?

    Viele Grüße
    Jens

  90. Mayo sagt:

    Die Sprachangabe für englisch und metrisch heisst natürlich:
    $sprache=“en-GB“
    Also "minus" und kein "underscore"….

  91. Ophidia sagt:

    Danke! Danke für diesen Beitrag, hat mir sehr, SEHR geholfen und viel Zeit erspart!

  92. Kochelsee sagt:

    Vielen Dank für den Beitrag und die gute Erläuterung.
    VG aus Bayern vom Kochelsee!

  93. Ralph sagt:

    Hallo Sebastian,

    sehr empfehlenswertes Skript!
    Frage zu der Geokodierung (siehe Frage 46 oben):

    Habe zwei Variablen $rn_latitude und $rn_longitude

    Wie baue ich diese beiden Variablen in den Funktionsaufruf mit ein, sodass rein aufgrund der Geocodes das Wetter ermittelt wird?

    Der CODE
    $wetter = website_wetter("", "", "/", "de", ",,,$rn_longitude,$rn_latitude");
    funktioniert nicht, ich scheitere da an den ganzen Kommas und Anführungszeichen, bin allerdings eben auch nicht sehr PHP-erfahren.

    Über eine Hilfestellung würde ich mich sehr freuen!

    Herzliche Grüße
    Ralph

  94. Sebastian sagt:
    $wetter = website_wetter("", "", "/", "de", ",,,".$latitude.",".$longitude);

    Die Koordinaten dürfen keinen Punkt enthalten. Also einfach mit 1.000.000 multiplizieren.
    Aus 50.334722,6.944444 wird somit 50334722,6944444

  95. Ralph sagt:

    Hallo Sebastian,

    super Tipp – hab ich hingekriegt, funktioniert auch (bzw. fast):

    Ich multipliziere mit 1.000.000 – folgender Code: $rn_latitude = $rn_latitude * 1000000;
    Problem: als Resultat erhalte bspw. 47000000
    Das heisst: die Nachkommastellen gehen beim Multiplizieren verloren………. was mache ich falsch?

    Viele Grüße
    Ralph

  96. Ralph sagt:

    Habe die Lösung zu meiner Frage oben gefunden: Das Problem lag darin, dass die von mir ausgelesene Variable zunächst als String formatiert war. Die folgende Funktion wandelt den String in eine Zahl um, dann klappts.
    Der Tipp stammt von:
    http://de.php.net/number_format

    Viel Spaß
    Ralph

    function strtonumber( $str, $dec_point=null, $thousands_sep=null )
    {
    if( is_null($dec_point) || is_null($thousands_sep) ) {
    $locale = localeconv();
    if( is_null($dec_point) ) {
    $dec_point = $locale[\'decimal_point\'];
    }
    if( is_null($thousands_sep) ) {
    $thousands_sep = $locale[\'thousands_sep\'];
    }
    }
    $number = (float) str_replace($dec_point, \’.\’, str_replace($thousands_sep, \’\’, $str));
    if( $number == (int) $number ) {
    return (int) $number;
    } else {
    return $number;
    }
    }

  97. Andreas sagt:

    Die Bilder werden nicht mehr angezeigt :-( Hm — hat sich der Pfad wieder geändert? Habt ihr bitte Lösungen?

    LG
    Andreas
    http://www.hochseilgarten-kletterwald.de/

  98. Sebastian sagt:

    In der HTML-Ausgabe beim Image-Pfad http://google.com/ durch http://www.google.com/ ersetzen, dann funktioniert es wieder.

  99. Maik sagt:

    Hallo @ all,

    ich versuche gerade das Scribt ans laufen zu bekommen.
    Leider bekomme ich im IE immer einen Fehler 500.
    Schau ich mir das Log auf den Webserver an sehe ich fogende Meldung:
    PHP Warning: file_get_contents(http://www.google.com/ig/api?weather=46562-Germany&hl=de): failed to open stream: Network is unreachable in /var/www/weather2012.php on line 27
    Leider bin ich nicht der PHP Experte, könnte mir da vielleicht jemand helfen???
    Schon mal danke im Voraus.
    PHP/5.3.3-1ubuntu9.6

  100. Dart Myhre sagt:

    Ich hab das API verwendet für eine Wetteranzeige in http://secondlife.com.
    Funktioniert perfekt, war zwar viel arbeit die gif in eine Textur zusammenzuführen, aber nun schaut es sehr schön aus.

    Meinen Dank an Web-Spirt.de.

    ps. Mir fehlt noch etwas für die aktuelle Uhrzeit sowas wie
    http://www.google.at/search?q=time+Kaprun

  101. Sascha sagt:

    Die ganze Geschichte hat sich hier top entwickelt! Durch die Kommentare ist mittlerweile so ziemlich jedes Problem, das auftreten könnte, abgedeckt. Ich verwende das hier immer wieder und bedanke mich natürlich in erster Linie beim Ersteller des Codes und dann auch bei jedem "Kommentator" :-).

  102. Andreas sagt:

    Hallo,
    das Script läuft super.
    Jetzt würde ich gerne an einer Stelle meiner website ein Eingabeformular haben, in welchem der User eine beliebige PLZ einträgt und dieser Wert dann an das Script übergeben wird und das entsprechende Wetter ausgibt.
    Für ambitionierte Webmaster sollte das doch ein leichtes sein …. hoffe ich.
    Need help und hoffe auf Eure Unterstützung

    LG Andreas

  103. Andreas sagt:

    So, habe herum gebastelt.
    Hier das Ergebnis :-)
    http://www.hochseilgarten-kletterwald.de/klettergarten-wetter.html

  104. Tectum sagt:

    Hy also ich habe das ganze jetzt auch auf einer meiner Homepages verwendet, allerdings hin und wieder gibt mir die function keine antwort und alles was danach kommt wird vom laden abgehalten. passiert ungefähr bei jedem 5/6 mal. wie kann ich prüfen ob er verbindung aufgenommen hat und bei error ein entsprechende meldung ausgeben?

  105. tino sagt:

    Ich bekomme keine Antwort von der API…. hat google wieder etwas verändert?

  106. Nico sagt:

    Wie es aussieht ja :(

    Ich hoffe es kommt auch hier ein neues Update.

    Man findet auch nix auf google.de -.-

  107. tino sagt:

    Habe etwas gefunden. Sind aber nur Gerüchte bis jetzt: http://stackoverflow.com/questions/12139565/google-weather-api-returning-strange-new-error

  108. Sebastian sagt:

    Ja, sieht ganz danach aus, als hätte Google den Stecker gezogen. Schade.

  109. asdsad sagt:

    Na toll, brauch nun ne alternative…

  110. Sebastian sagt:

    Eine Alternative ist die Yahoo Weather-API. Beispielhaft das Wetter für Voerde: http://weather.yahooapis.com/forecastrss?w=702473&u=c

    Die Doku gibt es hier: http://developer.yahoo.com/weather/
    Die API von Yahoo ist leider nicht so intuitiv nutzbar wie die Google API, da nicht direkt mit Postleitzahlen oder Städtenamen gearbeitet werden kann. Die Yahoo Wetter-API verlangt eine WOEID.

  111. Sascha sagt:

    Vielen Dank für die Alternative, beim groben Suchen hatte ich nichts gefunden.

    Hast Du denn vor, wieder so eine wunderbare Doku mit Beispielcode zu veröffentlichen?

    Vielen Dank und Gruß!

  112. Mika sagt:

    Hab gelesen, das es nur noch über wunderground.com geht.

  113. Die Google Wetter-API scheint nicht abgeschaltet, aber in den Zugriffen sehr stark limitiert worden zu sein (jedenfalls sind das meine Beobachtungen seit ein paar Wochen).

  114. Jens sagt:

    gefunden bei phpgangsta.de:

    http://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20weather.forecast%20where%20location%20in%20%28%0A%20%20select%20id%20from%20weather.search%20where%20query%3D%22Oelde%2C%20germany%22%0A%29&format=xml&env=store%3A%2F%2Fdatatables.org%2Falltableswithkeys

    ergibt:

    http://www.phpgangsta.de/wp-content/uploads/yahoo_weather_search.png

    Da wird das Wetter in Oelde direkt abgefragt

  115. Jens sagt:

    http://where.yahooapis.com/geocode?q=Oelde

    damit kommt man an die WOEID…

    …ist zwar etwas umständlich, aber es geht…

  116. Jens sagt:

    Hab die ~12000 deutschen Städte und Gemeinden mal durchlaufen lassen, Ergebnis steht hier zum Download:

    https://rapidshare.com/files/1121674684/woeid.csv

    Aufbau:
    einfache csv Datei -> übergebener Ort ; dazu gefundener Ort ; gefundene PLZ ; gefundene WOEID
    (keine Gewähr, da sich auch ab und zu "Ausreisser" und "Näherungen" eingeschlichen haben)

    Wenn Download Down, einfach Nachricht

  117. Sascha sagt:

    @ Jens: Top, vielen Dank!

    Hat man bei der Yahoo-Api denn Gestaltungsmöglichkeiten?

  118. Alphons Wedemair sagt:

    Dear Sebastian,

    thanks for the detailed API description and your great work. It helped me a lot. As of last Monday (Aug. 27, 2012) it seems that Google has discontinued this "undocumented" service. So everybody interested in a free weather sevrice should look for another option. It might be worthwhile to consider http://www.wunderground.com/weather/api/.

    Cheers
    AW

  119. Jens sagt:

    Hab nochmal nachgelegt, deutsche Städte und Gemeinden mit PLZ und Längen- und Breitenangaben
    (~8100 Stück)

    https://rapidshare.com/files/2440545322/dl_koordinaten.csv

    und nochmals die WOEID

    https://rapidshare.com/files/1121674684/woeid.csv

    wie immer bei meinen Angeboten keine Gewähr

  120. Tino sagt:

    Ich habe eine Alternative gefunden: http://www.worldweatheronline.com/free-weather-feed.aspx

    Viel Spass beim wettern ;-)

  121. Jens sagt:

    hab die Idee mit : http://www.worldweatheronline.com/free-weather-feed.aspx mal aufgegriffen. Dabei ist folgender Quelltext herausgekommen:
    __________________________________________________________

    <?php
    /*
    Beschreibung: Wettervorhersage auf der eigenen Website mit Zugriff auf www.worldweatheronline.com
    Autor: Jens Lange
    Mail: lange-jens@freenet.de
    Version: 1.0.201209
    */

    //aufruf über laenge und breite, anzahl der auszugebenden tage,
    //persoenlicher kostenloser key
    function webwetter($lat,$lon,$days,$key)
    { $url = "http://free.worldweatheronline.com/feed/weather.ashx?q=".$lat.",".$lon."&format=xml&num_of_days=".$days."&key=".$key;
    $xml = simplexml_load_string(utf8_encode(file_get_contents($url)));

    global $wetter;
    $wetter = array();

    //allgemeine informationen zum ort
    $wetter['typ'] = $xml->request->type;
    $wetter['query'] = $xml->request->query;
    $wetter['observation_time'] = $xml->current_condition->observation_time;
    // aktuelle wetterdaten zum ort
    $wetter['temp_C'] = $xml->current_condition->temp_C;
    $wetter['temp_F'] = $xml->current_condition->temp_F;
    $wetter['weatherCode'] = $xml->current_condition->weatherCode;
    $wetter['weatherIconUrl'] = $xml->current_condition->weatherIconUrl;
    $wetter['weatherDesc'] = $xml->current_condition->weatherDesc;
    $wetter['windspeedMiles'] = $xml->current_condition->windspeedMiles;
    $wetter['windspeedKmph'] = $xml->current_condition->windspeedKmph;
    $wetter['winddirDegree'] = $xml->current_condition->winddirDegree;
    $wetter['winddir16Point'] = $xml->current_condition->winddir16Point;
    $wetter['precipMM'] = $xml->current_condition->precipMM;
    $wetter['humidity'] = $xml->current_condition->humidity;
    $wetter['visibility'] = $xml->current_condition->visibility;
    $wetter['pressure'] = $xml->current_condition->pressure;
    $wetter['cloudcover'] = $xml->current_condition->cloudcover;

    // wettervorhersage für heute und die naechsten vier tage ($wetter[0] bis $wetter[4])
    $i = 0;
    foreach($xml->weather as $weather)
    { $wetter[$i]['date'] = $weather->date;
    $wetter[$i]['tempMaxC'] = $weather->tempMaxC;
    $wetter[$i]['tempMaxF'] = $weather->tempMaxF;
    $wetter[$i]['tempMinC'] = $weather->tempMinC;
    $wetter[$i]['tempMinF'] = $weather->tempMinF;
    $wetter[$i]['windspeedMiles'] = $weather->windspeedMiles;
    $wetter[$i]['windspeedKmph'] = $weather->windspeedKmph;
    $wetter[$i]['winddirection'] = $weather->winddirection;
    $wetter[$i]['winddir16Point'] = $weather->winddir16Point;
    $wetter[$i]['winddirDegree'] = $weather->winddirDegree;
    $wetter[$i]['weatherCode'] = $weather->weatherCode;
    $wetter[$i]['weatherIconUrl'] = $weather->weatherIconUrl;
    $wetter[$i]['weatherDesc'] = $weather->weatherDesc;
    $wetter[$i]['precipMM'] = $weather->precipMM;
    $i++;
    }
    return;
    }
    //aufruf über laenge und breite, anzahl der auszugebenden tage,
    //persoenlicher kostenloser key
    $lat="50.75";
    $lon = "12.65";
    $days = "5";

    //den key gibts kostenlos bei www.worldweatheronline.com
    $key = ‘!!schön selber einen holen!!’;

    webwetter($lat,$lon,$days,$key);

    // ausgabebeispiel
    echo "<h1><tt>Wetter in Lichtenstein / Sa.:</h1>";

    echo "<p>";
    echo "<strong>Aktuell:</strong><br/>\n";
    echo "Zeit: ".$wetter['observation_time']." UTC<br/>\n";
    echo $wetter['weatherDesc']."<br/>\n";
    echo "Temperatur: ".$wetter['temp_C']." °C<br/>\n";
    echo "Luftfeuchte: ".$wetter['humidity'] ." %<br/>\n";
    echo "Wind: ".$wetter['windspeedKmph'] ." km/h aus ".$wetter['winddir16Point']."<br/>\n";
    echo "<img border=’0′ src=’".$wetter['weatherIconUrl']."’></p>";

    echo "<p>";
    echo "<strong>Heute</strong><br/>\n";
    echo $wetter[0]['weatherDesc']."<br/>\n";
    echo "min. ".$wetter[0]['tempMinC']."°C | max. ".$wetter[0]['tempMaxC']."°C<br/>\n";
    echo "<img border=’0′ src=’".$wetter[0]['weatherIconUrl']."’></p>";

    echo "<p>";
    echo "<strong>Morgen</strong><br/>\n";
    echo $wetter[1]['weatherDesc']."<br/>\n";
    echo "min. ".$wetter[1]['tempMinC']."°C | max. ".$wetter[1]['tempMaxC']."°C<br/>\n";
    echo "<img border=’0′ src=’".$wetter[1]['weatherIconUrl']."’></p>";

    echo "<p>";
    echo "<strong>Übermorgen</strong><br/>\n";
    echo $wetter[2]['weatherDesc']."<br/>\n";
    echo "min. ".$wetter[2]['tempMinC']."°C | max. ".$wetter[2]['tempMaxC']."°C<br/>\n";
    echo "<img border=’0′ src=’".$wetter[2]['weatherIconUrl']."’></p></tt>";
    ?>
    __________________________________________________________

    Ist natürlich nur ein Grundgerüst, was man anpassen kann, unter:
    http://lange-jens.home.alles-free.de/wetter/
    kann man sich das Ergebnis mal ansehen.

    Was mich noch brennend interessieren würde, sind die 3stelligen Codes ['weatherCode'] , da sind bestimmt noch ein paar Infos versteckt..

    Viel Spaß beim basteln, würde mich über Eure Ergebnisse freuen…

    Jens

  122. Jens sagt:

    Irgendwie hat der Kollege beim Hochladen den Code verändert
    ‘ -> ‘
    " -> "

    Wenns Probleme gibt, Mail (sh Post darüber) an mich, dann kommt Quelltext per Mail…

  123. Sascha sagt:

    Absolut super! Dieses www.worldweatheronline.com ist definitiv der legitime Nachfolger der Google-API. Vielen Dank dafür!
    Gibt’s irgendwo ne Auflistung der Wetterzustände, damit man eigene Grafiken einfügen kann? Ich habe auf der Seite nichts gefunden.

    Vielen Dank!

  124. Jens sagt:

    Hailo Sascha,

    Du kannst in meinem Beispiel (Post 123) <weatherDesc>Zustand</weatherDesc>
    bzw alternativ <weatherCode>Zahl</weatherCode> verwenden.
    Somit kannst Du "Zustand" bzw "Zahl" für eigene Bilder auswerten, jäßt sich zB mit switch gut machen.

    Eine Liste der weathercodes findest Du hier:
    http://lange-jens.home.alles-free.de/wetter/weathercodes.txt bzw
    http://lange-jens.home.alles-free.de/wetter/weathercodes.xml
    Weiß leider nicht, ob die schon komplett ist, stammt jedoch von der HP (übers Forum gefunden)

    Die Ori- Bilder liegen in <weatherIconUrl>http://www…..</weatherIconUrl>

    Eine Datei mit Längen-und Breitenangaben deutscher Städte und Gemeinden findest Du hier:
    http://lange-jens.home.alles-free.de/wetter/dl_koordinaten.csv bzw
    http://lange-jens.home.alles-free.de/wetter/dl_koordinaten.xml

    Viel Spaß…

  125. Sascha sagt:

    Hi,
    danke für die Liste, die Idee mit den Zahlen habe ich aufgegriffen. Da ich vorher schon die Google-Api mit den Lat-Lon-Daten versorgt hatte, habe ich das jetzt auch wieder getan.
    Ich habe dann noch mit

    $wochentage = array("So.", "Mo.", "Di.", "Mi.", "Do.", "Fr.", "Sa.");
    $zeit1 = strtotime($wetter[1]['date']);
    $zeit2 = strtotime($wetter[2]['date']);
    $zeit3 = strtotime($wetter[3]['date']);

    und entsprechend

    echo ‘<strong>’.$wochentage[date("w", $zeit1)].’</strong>’;
    etc.

    das Wochentagkürzel hinzugefügt, sodass die Ansicht wieder der von Duisburgfans (siehe oben) gleich kommt.
    Diese API ist wirklich top und kommt der Google-Geschichte sehr nahe. Jetzt bin ich wieder happy, sieht aus wie zu Google-Wetter-Api-Zeiten ;-).

    Danke noch mal für den Tipp!

  126. Jens sagt:

    …für alle, denen die Wettericons nicht gefallen:

    unter
    http://c358489.r89.cf1.rackcdn.com/images/weather/small/XXX_day_sm.png

    und
    http://c358489.r89.cf1.rackcdn.com/images/weather/small/XXX_night_sm.png

    liegen die aus der Homepage, wobei XXX die Weathercodes sind…

  127. Sascha sagt:

    … oder alternativ dazu:

    echo "<img src="http://euerserver/wettericons/".$wetter[0]['weatherCode'].".png" alt="" . $wetter[0]['weatherDesc'] . "">";

    Eure Icons auf Euren Server, eingebunden mittels "Wetter-Code".

    Dazu hat Jens ‘ne Liste gefunden, die es hier gibt: http://lange-jens.home.alles-free.de/wetter/weathercodes.txt

  128. Jens sagt:

    Wer sucht, der findet…

    Wer immer noch der Google-API nachweint, dem kann geholfen werden, hier mal der O-Text aus einer an mich gerichteten Mail:

    —————————————-
    To use our weather API, you can follow the Google Weather API howto ( http://papermashup.com/using-googles-weather-api/ )and replace

    http://www.google.com
    with
    http://api.previmeteo.com/<pers.key>

    You will have an url like :
    http://api.previmeteo.com/<pers.key>/ig/api?weather=marmande,FR&hl=en

    Our API is still in beta version and is free for personnal and non commercial use with a "fairuse"of 200 daily access.
    If you want a commercial license and/or more daily access, please describe us your project and we will send you an offer. Free version is limited to cities with more than 15,000 inhabitants.
    —————————————-

    Den Key bekommt Ihr nach Anfrage an: contact@previmeteo.com . Schreibt einfach (en,fr), Ihr wollt die Wetter API nutzen… Dauerte heute zum So nur wenige Stunden.

    Viel Spaß beim basteln

  129. Micha sagt:

    Hallo Zusammen,

    hat sich schon mal jemand mit http://openweathermap.org/ beschäftigt? Da gibt es ne JSON-Schnittstelle. Alles ist unbeschränkt und kostenlos nutzbar.

  130. Jens sagt:

    @Micha

    fang schon mal an, mal sehen, was dabei rauskommt…

  131. Nara Laurence sagt:

    Working on a small project to use this API with Kohana and your codes look great. Was hoping to see the demo before this error was thrown. Please can you fix it so that I can see the demo?
    Warning: file_get_contents(http://www.google.com/ig/api?weather=46562-Germany&hl=de) [function.file-get-contents]: failed to open stream: HTTP request failed! HTTP/1.0 403 Forbidden in /www/htdocs/w00e3c51/wordpress/wetter.php on line 35

    Fatal error: Call to a member function attributes() on a non-object in /www/htdocs/w00e3c51/wordpress/wetter.php on line 40

    • Sebastian Gollus sagt:

      The API was shut down by Google. The demo will not work anymore :(

      • Jens sagt:

        Ich hab dawas fertig gemacht. Schnittstellen von:
        - World-Weather-Online
        - msn
        - openweathermap.org
        - wetter.com
        Sind alles ausbaufähige Beispiele.

        Schaut mal hier:
        http://eigenes-hpwetter.de.vu/

        Bei Bedarf Mail an mich, steht auf der og. HP.

        Würde mich freuen, wenn andere hier auch noch ein paar Schnittstellen einstellen würden.

        MfG Jens

  132. Peter Gstir sagt:

    Hallo Sebastian, ich bin Amateurfunker, und möchte Wetterdaten zb. von meiner eigenen Wetterstation auf einem Webcambild einblenden. Die Wetterdaten sende ich per APRS Digi an http://aprs.fi dort findet man mich unter dem Rufzeichen OE9PGV-10.
    APRS.FI bietet API´s an mit der die Wetterdaten wieder ausgelesen werden können. Ein Menüepunkt rechts in den blauen Texten. Leider Verstehe ich von der PHP Programmiererei so überhaupt nichts. Wäre es dir möglich mir hier zu Helfen??

    http://aprs.fi/#!mt=roadmap&z=11&call=a%2FOE9PGV&timerange=3600&tail=3600

    grüsse Peter

  133. Sascha sagt:

    Hallo,
    hat einer ne Ahnung, was mit World Weather Online passiert ist? Bei mir funktioniert die Anzeige nicht mehr.

  134. Sascha sagt:

    Die Antwort auf das Problem bei World Weather Online findet sich hier: https://www.facebook.com/notes/world-weather-online/introducing-faster-more-efficient-and-even-more-reliable-services/451128854963809.

    Konkret: Die Zeile muss durch diese hier im oben stehenden Code:
    http://free.worldweaatheronline.com/feed/

    muss durch diese hier:
    http://api.worldweatheronline.com/free/v1/

    ersetzt werden, dann läuft der Hase wieder.

Hinterlasse eine Antwort

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *

Du kannst folgende HTML-Tags benutzen: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre class="">