Wetter auf eigener Website mit Google Weather API
Einige 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):

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.
» 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
- HTML Formulare effektiv gestalten
- RSS Feed auslesen mit PHP
- CSS Tagcloud (Schlagwortwolke)
- PHP und MySQL Tagcloud (Schlagwortwolke)
- CSS Pagination (Seitennummerierung)
- CSS Newsteaser
- CSS Navigation mit Liste
- CSS Bildwechsel
Die neuesten Artikel
-
3 SEO-Tipps + 32 Seiten PDF-Anleitung von Google – Website optimieren Für alle Webmaster hat Google einen SEO-Spickzettel erstellt. Mit diesen einfachen SEO-Tipps soll Google Website-Inhalte besser...
-
YouTube Video optimieren – Top 47 Rankingfaktoren für SEO Die Suchmaschinenoptimierung spielt beim Online Marketing eine wichtige Rolle. Aber nicht nur Websites lassen sich optimieren,...
-
Paywall – 7 Tipps für Bezahlschranken & Mitgliederseiten Paywalls bieten ein alternatives Geschäftsmodell im Internet zum typischen Anzeigenverkauf. Vor allem Zeitungsverlage setzen neuerdings auf...
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
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.
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.
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:
Bei mir kommt trotzdem:
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.
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!
Hallo!
Funktioniert das auch mit Österreichischen Orten?
lg
Hallo Martin,
ja, das funktioniert mit allen internationalen Orten.
Gruß
Sebastian
Hallo.
Funktioniet an und für sich super. Nur zeigt es mir die Umlaute nicht richtig an.
Bewölkt anstatt Bewölkt.
Gruß
Sascha
Hat sich erledigt, habe noch das hier eingebaut:
header(‘content-type: text/html; charset=utf-8′);
Sascha
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
Hallo
So funzt alles einwandfrei!!
Meine Frage : Kann man das auch alles Horizontal anordnen ?
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']."°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']."°C</font><br>n"; echo "<font color='#0000FF'>".$wetter[1]['tiefsttemperatur']."°C</font></font></td>n"; echo "<td align='center'><font face='Verdana' size='2'><font color='#FF0000'>".$wetter[2]['hoechsttemperatur']."°C</font><br>n"; echo "<font color='#0000FF'>".$wetter[2]['tiefsttemperatur']."°C</font></font></td>n"; echo "<td align='center'><font face='Verdana' size='2'><font color='#FF0000'>".$wetter[3]['hoechsttemperatur']."°C</font><br>n"; echo "<font color='#0000FF'>".$wetter[3]['tiefsttemperatur']."°C</font></font></td>n"; echo "<td align='center'><font face='Verdana' size='2'><font color='#FF0000'>".$wetter[4]['hoechsttemperatur']."°C</font><br>n"; echo "<font color='#0000FF'>".$wetter[4]['tiefsttemperatur']."°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>";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 !
Fehler zusehen auf der Seite
Parse error: syntax error, unexpected ‘<’ in /is/htdocs/wp1154660_QRKFVV4YIX/www/web/klein/wetter2.php on line 63
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; }
Jungs ihr seit einfach Klasse !!!!!
Jetzt funzt es einwandfrei !!!!
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.
@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
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!
Der letzte Eintrag ist zwar schon ein bissl her, aber als rechtlich sichere Alternative gibt es noch das openWeather Api von Wetter.com
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?
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));
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
Hallo!
Tolles Skript. Inspirierte mich zu www.regnets.in/. Einfach beispielsweise www.regnets.in/berlin eingeben und fertig.
Grüße
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
Was gib ich denn zum Beipsiel an für WIEN / Österreich?
PLZ 2201
$wetter = website_wetter("2201", "Österreich"); Funktioniert nicht !
$wetter = website_wetter("", "Austria", "/wetter-icons/", "de", "Gerasdorf+bei+Wien");Nö
so geht es nicht ???
$wetter = website_wetter("", "Austria", "/wetter-icons/", "de", "Gerasdorf+bei+Wien");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?
Super kleines Script! Danke!
Hat einer von euch schon versucht, die Google-Gifs gegen PNGs auszutauschen ?
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
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";
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 )
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?
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
Funktioniert einwandfrei;)
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?
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
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 :/
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
Ausführliche Information über die Wetter Api, danke! Besonders die Liste der Bilder hat mir gerade bei einem Projekt gefehlt!
Hallo
Städte aus 2 Wörtern funktionieren bei mir nicht !
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!
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.
Vielen Dank für die Hilfe!
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
———-
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
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
Endlich mal ne Wetterfunktion die man selbst umbauen bzw. verbessern kann. Gefällt mir, werde ich gleich mal ausprobieren.Vielen Dank
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
Das Problem wurde im 5. Kommentar bereits erläutert. Bitte überprüfe deine allow_url_fopen Einstellungen.
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?
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?
klasse geht super,
Wichtig: Auf jeden Fall Cache benutzen und nicht ständig abfragen – sonst droht die umgehende Aussperrung.
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.
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!
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
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
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.
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?
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?
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).
das script unktioniert gut. aber vllt kann mal wer die optimierte version hier hochladen? die anzahl der verbesserungen ist ja schon ziemlich groß. danke
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.
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";
Text soll natürlich heißen:
und ändere weiter unten bei der Ausgabe den vorhandenen Link ab zur eigenen Bilddatei
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
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.
Hey, vielen Dank für den ausführlichen Beitrag und das Script. Werde es umgemodelt auf Zend auf unserer Seite einbinden,
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?
@Lena: Du könntest es z.B. mit einem
if (is_object($api))
{
… DEINE WETTERSACHEN…
}
abfangen.
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?
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
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
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.
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?
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.
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
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!
@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.
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
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?
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!
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 ^^
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
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!
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!
@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,
… Hat da jemand Tipps?
ich suche die Google Wettericons in einer Nacht-Version, da bei Google die Sonne nie untergeht… Bin leider kein Grafiker
Viele Grüße
Jens
Die Sprachangabe für englisch und metrisch heisst natürlich:
$sprache=“en-GB“
Also "minus" und kein "underscore"….
Danke! Danke für diesen Beitrag, hat mir sehr, SEHR geholfen und viel Zeit erspart!
Vielen Dank für den Beitrag und die gute Erläuterung.
VG aus Bayern vom Kochelsee!
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
$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
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
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;
}
}
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/
In der HTML-Ausgabe beim Image-Pfad http://google.com/ durch http://www.google.com/ ersetzen, dann funktioniert es wieder.
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
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
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"
.
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
So, habe herum gebastelt.
Hier das Ergebnis
http://www.hochseilgarten-kletterwald.de/klettergarten-wetter.html
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?
Ich bekomme keine Antwort von der API…. hat google wieder etwas verändert?
Wie es aussieht ja
Ich hoffe es kommt auch hier ein neues Update.
Man findet auch nix auf google.de -.-
Habe etwas gefunden. Sind aber nur Gerüchte bis jetzt: http://stackoverflow.com/questions/12139565/google-weather-api-returning-strange-new-error
Ja, sieht ganz danach aus, als hätte Google den Stecker gezogen. Schade.
Na toll, brauch nun ne alternative…
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.
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ß!
Hab gelesen, das es nur noch über wunderground.com geht.
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).
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
http://where.yahooapis.com/geocode?q=Oelde
damit kommt man an die WOEID…
…ist zwar etwas umständlich, aber es geht…
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
@ Jens: Top, vielen Dank!
Hat man bei der Yahoo-Api denn Gestaltungsmöglichkeiten?
So klappt es auch mit metrischen Angaben (km/h und °C). API-Nutzung per YQL:
http://query.yahooapis.com/v1/public/yql?q=use%20%27http%3A%2F%2Fgithub.com%2Fyql%2Fyql-tables%2Fraw%2Fmaster%2Fweather%2Fweather.bylocation.xml%27%20as%20we%3Bselect%20*%20from%20we%20where%20location%3D%22berlin%2Cgermany%22%20and%20unit%3D%27c%27&format=xml&env=store%3A%2F%2Fdatatables.org%2Falltableswithkeys
Hier der Beitrag bei Yahoo Developer: http://developer.yahoo.com/blogs/ydn/posts/2009/12/extending_the_weather_api_with_yql/
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
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
Ich habe eine Alternative gefunden: http://www.worldweatheronline.com/free-weather-feed.aspx
Viel Spass beim wettern
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
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…
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!
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ß…
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!
…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…
… 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
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
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.
@Micha
fang schon mal an, mal sehen, was dabei rauskommt…
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
The API was shut down by Google. The demo will not work anymore
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