Wetterdaten - Wunderground API

eigentlich nicht - es sind nur Kleinigkeiten.

hier mal der gesäuberte Code:

<?php

$api = "234123412341234"; // key erhält man nach Registrierung bei http://www.wunderground.com/weather/api/

$zmw="00000.23.10818";
/* ZMW kann man ermitteln mit dem Längengrad und Breitengrad, nachdem man sich einen API-Key besorgt hat*
http://api.wunderground.com/api/.... API-KEY..../geolookup/q/48.03688878166352,8.930683135986328.json
*/

// ----------------------------
$tag[0] = "Sonntag";
$tag[1] = "Montag";
$tag[2] = "Dienstag";
$tag[3] = "Mittwoch";
$tag[4] = "Donnerstag";
$tag[5] = "Freitag";
$tag[6] = "Samstag";

//aktuelles Wetter
    $xmlWetter = file_get_contents("http://api.wunderground.com/api/$api/forecast/q/zmw:$zmw.xml");
    $xmlWetterNow = file_get_contents("http://api.wunderground.com/api/$api/conditions/q/zmw:$zmw.xml");
    
    $xml = simplexml_load_string($xmlWetter);
    $xmlNow = simplexml_load_string($xmlWetterNow);
    $x = 0;
    $html = "<table >
                <tr>";
    // Aktuell
    $temp_now = $xmlNow->current_observation->temp_c;
    $hum_now = $xmlNow->current_observation->relative_humidity;
    $wind_now = $xmlNow->current_observation->wind_kph."km/h";
    $rain_now = ($xmlNow->current_observation->precip_1hr_metric * 10 ).' mm';
    $html.= '<td align="center" valign="top"  style="width:110px;padding-left:20px;">
                    Aktuell<br>
                    <img src="'.$xmlNow->current_observation->icon_url.'" style="float:left;">
                    <div style="float:right">
                    '.$temp_now.'°C<br>
                    '.$hum_now.'<br>
                    </div>
                    <div style="clear:both; font-size: 10px;">Ø Wind: '.$wind_now.'<br>
                    Regen 1h: '.$rain_now.'
                    </div>
                </td>';
    // Vorhersage
    foreach($xml->forecast->simpleforecast->forecastdays->forecastday as $name=> $day){
        if( isToday($day->date->epoch)){
            $Wochentag = "Heute";
        } else {
            $Wochentag =$tag[date("w",intval($day->date->epoch))];
        }
        $html.= '<td align="center" valign="top"  style="width:110px;padding-left:20px;">
                        '.$Wochentag.'<br>
                        <img src="'.$day->icon_url.'" style="float:left;">
                        <div style="float:right">
                        '.$day->low->celsius.'°C<br>
                        '.$day->high->celsius.'°C
                        </div>
                        <div style="clear:both; font-size: 10px;">Ø Wind: '.$day->avewind->kph.' km/h<br>
                        Niederschlag: '.($day->qpf_allday->mm).' mm
                        </div>
                    </td>';
    }
    $html .= "</tr>
                </table>";
   
   echo $html;

function isToday($time)
{
  $begin = mktime(0, 0, 0);
  $end = mktime(23, 59, 59);
  // check if given time is between begin and end
  if($time >= $begin && $time <= $end)
  {
    return true;
  } else {
    return false;
  }
}
?>

war 30 sekunden Arbeit.

Hallo,

Danke! Danke!
Nimm Dir eine raus… Die hast du Dir echt verdient! :wink:

Danke für die klasse API.
Christof

veltins_kasten_01.jpg

Hallo zusammen,

ich war gestern auf der Suche nach einer Erweiterung für meine Wetterseite.
Ich arbeite schon länger mit Wunderground allerdings etwas umständlicher als hier dieser Code.
Warum ist leicht erklärt:

  1. hatte ich immer Probleme mit JSON auslesen.
  2. habe ich vor 3 Jahren damit angefangen damals noch mit xml und ohne PHP5

Nun baut man ja auch nicht jeden Tag die Seite um (jedenfalls bis gestern nicht) :smiley:

Kurz und gut hab ich mir gestern mal den API Code gezogen den Stele99 hier angeboten hat.
Funktioniert super und dafür erstmal meinen Dank.

Dann packte mich mein Entdeckergeist und ich bin durch die Doku von Wunderground geschlichen.

Hier für alle die es Interessiert auch noch eine 10-Tage Vorschau:

http://api.wunderground.com/api/$api/forecast10day/q/zmw:$zmw.xml

Funktioniert ebenfallsmit dem Code vom Stele99, einfach den Link austauschen.

Dann hab ich was zu den Alerts (Alarmeldungen) gelesen:

Ich hab das mal eben als separaten Code getestet und seit gestern Abend verfolgt.
Hier der Code:


<?php

//Alarmmeldngen von Wunderground
$Meldung = simplexml_load_file('http://api.wunderground.com/api/$api/alerts/q/zmw:$zmw');
 
//Wieviel Alarmmeldngen gibt es im File
$Alarm = $Meldung->{'alerts'}->alert;
// zählen bis letzte Alarmmeldngen erreicht ist
for($i=0,$size=count($Alarm);$i<$size;$i++)
{ 
echo "Warnung vor: " .$Meldung->{'alerts'}->alert[0]->wtype_meteoalarm_name, "<br />
";
echo "Warnstufe: " .$Meldung->{'alerts'}->alert[0]->level_meteoalarm, " 
"; 
echo $Meldung->{'alerts'}->alert[0]->level_meteoalarm_name, "<br />
"; 

 $Text = $Meldung->{'alerts'}->alert[0]->description;
 
		// Anpassung falscher Zeichen (muss evtl. noch erweitert werden)
		$suchen = array( 'Snow', 'Ice',  'ü', 'ä', 'ö', 'ß' );
		$ersetzen = array( 'Schnee', 'Eis',  'ü', 'ä', 'ö', 'ß' );
		$Text = str_replace ($suchen, $ersetzen, $Text);
echo "Warnmeldung:<br />" . $Text. "<br />";
}
?>

Auch das funktioniert gut. Man bekommt Meldungen wie z.Bsp: Sturmböhen, Blitzeis usw usw

So dann hoffe ich das ich mit meinen kleinen Hinweisen ein kleines Dankeschön für die von Stele99 geleistete Arbeit zurück geben konnte.
Wünsche euch Hobbywetterfröschen viel Spaß beim basteln :rolleyes:

Grüße
Frechdachs

Kleiner Nachtrag zu den Warnmeldungen

Unwetterwarnungen bei folgenden Ereignissen:

Wind
Snow/Ice
Thunderstorms
Fog
Extreme high temperature
Extreme low temperature
Coastal Event
Forest fire
Avalanches
Rain

Warnstufen:

Grün: keine erhöhte Aufmerksamkeit aufgrund des Wetters notwendig.

Gelb: Das Wetter ist potenziell gefährlich. Die Wetterphänomene, die prognostiziert wurden sind nicht ungewöhnlich, aber aufmerksam sein, wenn Sie bei Tätigkeiten meteorologischen Risiken ausgesetzt sind. Bleiben Sie informiert über die zu erwartenden meteorologischen Bedingungen und vermeiden sie Risiken.

Orange: Das Wetter ist gefährlich. Ungewöhnliche meteorologische Phänomene wurden vorhergesagt. Schäden und Unfälle sind wahrscheinlich. Seien Sie sehr wachsam und regelmäßig über die zu erwartenden meteorologischen Bedingungen informiert. Seien Sie sich der Risiken bewusst, die unvermeidlich sein könnte. Folgen Sie dem Rat Ihrer Behörden.

Rot: Das Wetter ist sehr gefährlich. Ungewöhnlich intensive meteorologische Phänomene wurden vorhergesagt. Größere Schäden und Unfälle sind wahrscheinlich in vielen Fällen mit Gefahr für Leib und Leben, über einen weiten Bereich. Es wird häufig über zu erwartende meteorologische Bedingungen und Risiken informiert werden. Folgen Sie Anweisungen und dem Rat Ihrer Behörden unter allen Umständen, außerordentliche Maßnahmen werden vorbereitet.

Hallo zusammen,
hier meine Version mit Ausgabe in HTML Textbox und XML basiert.

Die Anzeige finde ich sehr schön, danke!

Bei „Aktuell“ zeigt er bei mir jedoch immer beim Wind: -999.0km/h
Da ich keine eigene Wetterstation für den Wind habe, hatte ich den $cur_wind = 0; gesetzt.
Erkennt da jemand den Fehler?

Was Anderes noch, hat jemand schon wie oben eine Wetterübersicht gebastelt, bei der 3 Anzeigen pro Tag (früh/mittags/abends) angezeigt werden?

Vielen Dank!

Hallo,
habe das grad mal geprüft, bei mir funktioniert das.

bitte guck mal was bei dir im xml steht,
also direkt nach:

$xmlWetterNow = file_get_contents("http://api.wunderground.com/api/$api/conditions/q/zmw:$zmw.xml");

folgendes einfügen:

echo $xmlWetterNow;

Jetzt script starten und mal in der ausgabe HTML Filtern deaktivieren.

in der ausgabe müsstest du finden:
<current_observation>

<wind_kph>irgendwas</wind_kph>

Danke für die Hilfe, aber da steht wirklich der Wert…

<response>
    <version>0.1</version>
    <termsofService>http://www.wunderground.com/weather/api/d/terms.html</termsofService>
    <features>
        <feature>conditions</feature>
    </features>
        <current_observation>
        <image>
        <url>http://icons-ak.wxug.com/graphics/wu2/logo_130x80.png</url>
        <title>Weather Underground</title>
        <link>http://www.wunderground.com</link>
        </image>
        <display_location>
        <full>Niederfullbach, Germany</full>
        <city>Niederfullbach</city>
        <state></state>
        <state_name>Germany</state_name>
        <country>DL</country>
        <country_iso3166>DE</country_iso3166>
        <zip>00000</zip>
        <latitude>50.21666718</latitude>
        <longitude>10.98333359</longitude>
        <elevation>281.00000000</elevation>
        </display_location>
        <observation_location>
        <full>Pechhuette, Grub Am Forst, BAYERN</full>
        <city>Pechhuette, Grub Am Forst</city>
        <state>BAYERN</state>
        <country>GERMANY</country>
        <country_iso3166>DE</country_iso3166>
        <latitude>50.230194</latitude>
        <longitude>11.014972</longitude>
        <elevation>1140 ft</elevation>
        </observation_location>
        <estimated>
        </estimated>
        <station_id>IBAYERNG11</station_id>
        <observation_time>Last Updated on April 18, 1:00 PM CEST</observation_time>
        <observation_time_rfc822>Thu, 18 Apr 2013 13:00:06 +0200</observation_time_rfc822>
        <observation_epoch>1366282806</observation_epoch>
        <local_time_rfc822>Thu, 18 Apr 2013 13:18:01 +0200</local_time_rfc822>
        <local_epoch>1366283881</local_epoch>
        <local_tz_short>CEST</local_tz_short>
        <local_tz_long>Europe/Berlin</local_tz_long>
        <local_tz_offset>+0200</local_tz_offset>
        <weather>Clear</weather>
        <temperature_string>73.4 F (23.0 C)</temperature_string>
        <temp_f>73.4</temp_f>
        <temp_c>23.0</temp_c>
        <relative_humidity>-999%</relative_humidity>
        <wind_string>Calm</wind_string>
        <wind_dir>North</wind_dir>
        <wind_degrees>-999</wind_degrees>
        <wind_mph>-999.0</wind_mph>
        <wind_gust_mph>0</wind_gust_mph>
    [b]    <wind_kph>-999.0</wind_kph>[/b]
        <wind_gust_kph>0</wind_gust_kph>
        <pressure_mb>1016</pressure_mb>
        <pressure_in>30.01</pressure_in>
        <pressure_trend>-</pressure_trend>
        
        <dewpoint_string>-999 F (0 C)</dewpoint_string>
        <dewpoint_f>-999</dewpoint_f>
        <dewpoint_c>0</dewpoint_c>
        
        
        <heat_index_string>NA</heat_index_string>
        <heat_index_f>NA</heat_index_f>
        <heat_index_c>NA</heat_index_c>
        
        
        <windchill_string>NA</windchill_string>
        <windchill_f>NA</windchill_f>
        <windchill_c>NA</windchill_c>
        
        <feelslike_string>73.4 F (23.0 C)</feelslike_string>
        <feelslike_f>73.4</feelslike_f>
        <feelslike_c>23.0</feelslike_c>
        <visibility_mi>N/A</visibility_mi>
        <visibility_km>N/A</visibility_km>
        <solarradiation></solarradiation>
        <UV>-1</UV>
        <precip_1hr_string>-999.00 in ( 0 mm)</precip_1hr_string>
        <precip_1hr_in>-999.00</precip_1hr_in>
        <precip_1hr_metric> 0</precip_1hr_metric>
        <precip_today_string>-999.00 in (-25375 mm)</precip_today_string>
        <precip_today_in>-999.00</precip_today_in>
        <precip_today_metric>-25375</precip_today_metric>
        
        
        
        <icon>clear</icon>
        <icon_url>http://icons-ak.wxug.com/i/c/k/clear.gif</icon_url>
        <forecast_url>http://www.wunderground.com/global/stations/10671.html</forecast_url>
        
        <history_url>http://www.wunderground.com/weatherstation/WXDailyHistory.asp?ID=IBAYERNG11</history_url>
        
        <ob_url>http://www.wunderground.com/cgi-bin/findweather/getForecast?query=50.230194,11.014972</ob_url>
    </current_observation>
    
</response>

jup, dann gibt’s vermutlich keine korrekten Daten für diesen Standort…

Ah ok, danke.
Und kann ich den aktuellen Wind irgendwie komplett ausblenden?

Du kannst bei Zeile 91 folgendes abändern:
Folgendes rauslöschen.

Ø Wind: '.$day->avewind->kph.' km/h<br>

Ah danke für den Tipp.
Es war dann

"Ø Wind: '.$wind_now.'<br>"

, aber ich bin so weiter gekommen, danke.:wink:

Erstaunlicherweise bringt mir Wunderground am Sonntag 10 Grad mehr als Wetteronline. Ich dachte schon meine Wetterstation ist falsch ausgewählt, aber die passt. Mal schauen wer recht hat…:rolleyes:

Hat jemand schon den Wetterzustand unter:
http://www.wunderground.com/cgi-bin/findweather/getForecast?query=zmw:00000.1.10671&hourly=1&yday=108&weekday=Freitag
eingebunden?

Da kann man über den Tag genau sehen wann es regnen soll…

Lieben Dank.

Noch was anderes.

Ich hatte bisher bei Wetteronline folgende Daten noch per parsen ausgelesen:

  • Sonnenstunden heute
  • UV Index heute

Kann ich die auch aus dem Wunderground Skript auch mit erhalten?

Vielen Dank!

Also ich probier jetzt schon ewig den UV Index in eine Variable zubekommen, bin aber nicht so PHP Experte…

In der Variable $xmlWetterNow steht zwischen <UV> und </UV> der Wert, kann mir jemand einen Tipp geben wie ich den in eine Variable schreiben kann?

Den Text Parser von IPS kann ich nicht verwenden, da der scheinbar eine übergeordnete Instanz braucht:o

Vielen Dank!

Ich hab grade festgestellt, daß es sich dabei nur um dem aktuellen UV Index handelt, der Vorhersagewert ist wohl nur in der erweitererten Vorhersage zu sehen, also falls jemand die mal einbindet wäre ich über das Skript sehr dankbar:).

Habe Fehler im Output

Bei der Windgeschwindigkeit passt die Kommastelle nicht.

Das Profil ist so eingestellt

Bildschirmfoto 2013-05-31 um 12.50.09.png

im Skript

setvalue (49270 /*[Trent\Wetter\Heute Windgeschwindikeit]*/ , "${wind_speed}");

$wind_speed = $parsed_json->{'current_observation'}->{'wind_kph'};

alles schon versucht.

bekomme es nicht hin

Hier eine Anleitung um die stundenweise Vorhersage auszulesen.
Erzeugt wird eine Stringvariable die für die nächsten 36h den Tag, die Stunde, die Temp, den Zustand, und die Regenwarhscheinlichkeit enthält.

Wollte mal was zurückgeben, auch wenns nur was Kleines ist. Wird dann einfach unten angefügt.

$json_hy_string = file_get_contents("http://api.wunderground.com/api/$api/hourly/lang:DL/q/Germany/$ort.json");
$parsed_hy_json = json_decode($json_hy_string);

 $hour = $parsed_hy_json->{'hourly_forecast'};
 $message = array();

		for($i=0;$i<36;$i++)
		 {
		 $temp = utf8_decode($hour[$i]->temp->metric);
		 $stunde = utf8_decode($hour[$i]->FCTTIME->hour);
		 $day = utf8_decode($hour[$i]->FCTTIME->weekday_name_abbrev);
		 $rainchance = utf8_decode($hour[$i]->pop);
		 $beschreibung = utf8_decode($hour[$i]->condition);
		 $message[] = "$day $stunde Uhr, $temp °C, $beschreibung, $rainchance %";
		 }

SetValue(CreateVariableByName($IPS_SELF, "Vorhersage", 3, "~TextBox"), implode("
",$message));

 function CreateVariableByName($id, $name, $type, $profile = "")
    {
        $vid = @IPS_GetVariableIDByName($name, $id);
        if($vid === false)
        {
            $vid = IPS_CreateVariable($type);
            IPS_SetParent($vid, $id);
            IPS_SetName($vid, $name);
            IPS_SetInfo($vid, "this variable was created by script #".$_IPS['SELF']);
            if($profile !== "") { IPS_SetVariableCustomProfile($vid, $profile); }
        }
        return $vid;
    }
    

Hey kann mir einer Sagen wo ich den Key finden kann.

$api = "234123412341234"; // key erhält man nach Registrierung bei http://www.wunderground.com/weather/api/

Du musst Dich bei denen registrieren lassen. Dann bekommst Du Deinen eigenen Key.

Sent from my iPhone using Tapatalk

Sorry aber das muss sein.

key erhält man nach Registrierung bei http://www.wunderground.com/weather/api/

steht sogar direkt hinter dem Dummy-Key :smiley:

Blöde Frage zu dem „älteren“ Beitrag…

In unserem Ort gibt es eine Wetterstation die über Weather Underground erreichbar wäre…

Weiss jemand wie man speziell die Daten von so einer User Wetterstation abfragen kann?
Die Bezeichnung bei Weather UG dort lautet: „Burgrieden IBADENWR55“.?

Kann man anstatt der GEolokalen Koordinaten auch die Station mit NAMEN hinterlegen?

Mein erster Versuch war der Text Parser zu der Seite dieser Wetterstation (Wetterübersicht - Wetterstation Burgrieden)… aber die Seite ist zu komplex :slight_smile: