PHPGangsta - Der praktische PHP Blog

PHP Blog von PHPGangsta


Mit Wetterdaten arbeiten: Yahoo Weather API

with 19 comments

Yahoo bietet, ähnlich wie Google und wetter.com auch eine Wetter-API, allerdings ist diese etwas gewöhnungsbedürftig. Die API gibt einen RSS-Feed zurück, woraus man dann seine Informationen parsen kann. Früher konnte man einfach einen Suchbegriff (Ort oder Postleitzahl) nehmen und die folgende URL aufrufen:
http://weather.yahooapis.com/forecastrss?p=59302
Das geht mittlerweile nicht mehr, da Yahoo bei vielen seiner Dienste auf WOEID [WHERE-ON-EARTH-ID] umgestiegen ist. Die WOEID ist eine Zahl, die einen Ort beschreibt. Um diese WOEID zu bekommen schreibt Yahoo in seiner Weather-API-Beschreibung, dass man auf weather.yahoo.com gehen soll, dort das Land wählt und dann seine Stadt sucht. In der URL sieht man dann die WOEID, die man dann in die folgende URL einsetzt:

(u=c steht für deutsche Maßeinheiten: Grad Celsius und km/h, wenn man diesen Parameter wegläßt erhält man amerikanische Werte):

http://weather.yahooapis.com/forecastrss?w=12834995&u=c

Und erst dann erhält man die Vorhersage. Eine schöne Such-API bzw. eine Möglichkeit, nach einem Städtenamen per API zu suchen bietet Yahoo Weather nicht direkt, man kann aber den Umweg über Yahoo’s YQL gehen, wo man mit dem folgenden Query Geo Places, sprich Orte suchen kann:

http://query.yahooapis.com/v1/public/yql?q=select * from geo.places where text=“Deutschland 59302″&format=xml

Die Antwort enthält die gesuchte WOEID (und auch Latitude/Longitude Informationen).

Da sich die WOEID nicht ändert sollte man das Ergebnis unbedingt cachen, da YQL ein API-Call-Limit hat (das glaube ich irgendwo bei 100 Abfragen pro Stunde liegt).

Eine andere Möglichkeit ist die vollständige Nutzung von YQL und der forecast Tabelle. Die folgende URL enthält eine verschachtelte Abfrage, womit man direkt mit einer URL die Vorhersage bekommt:

http://query.yahooapis.com/v1/public/yql?q=select * from weather.forecast where location in (
select id from weather.search where query=“Oelde, germany“
)&format=xml&env=store://datatables.org/alltableswithkeys

Das Ergebnis präsentiert Wetterdaten, allerdings in mph und Fahrenheit:

Wer sich mit YQL und der Wetterabfrage beschäftigen will liest am besten diesen Artikel im Yahoo Developer Netzwerk.

Wie stellen wir das Ergebnis nun dar? Wir können natürlich, wie bei den beiden vorherigen Beispielen, die Daten abfragen, die interessanten Werte extrahieren und in einer Tabelle ausgeben, kein Problem. Doch hier möchte ich einen anderen Weg gehen und SimplePie verwenden, um folgende Ausgabe zu erzeugen:

Sieht toll aus, und ist schnell gemacht, hier der nötige Code:

<?
require("simplepie.inc");
require("simplepie_yahoo_weather.inc");

$code = "12834995";
$path = "http://weather.yahooapis.com/forecastrss?u=c&w=";

$feed = new SimplePie();
$feed->set_feed_url($path . $code);
$feed->set_item_class('SimplePie_Item_YWeather');
$feed->init();

function time2minuts($time)
{
    $minuts = 0;
    $atime = explode(" ", $time);
    if (strtolower($atime[1]) == "pm") {
        $minuts = 12 * 60;
    }
    $ttime = explode(":", $atime[0]);
    $minuts = $minuts + (int)$ttime[0] * 60 + (int)$ttime[1];
    return $minuts;
}

$weather = $feed->get_item(0);
$fore = $weather->get_forecasts();
$unit = $weather->get_units_temp();
$ampm = "n"; // night
$icon = $weather->get_condition_code();
// Calculamos la hora de Lima en minutos
$curday = 2 * 60 + time2minuts(date("g:i a"));
$iniday = time2minuts($weather->get_sunrise());
$endday = time2minuts($weather->get_sunset());

if ($curday > $iniday && $curday < $endday) {
    $ampm = "d"; // day
} ?>

<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>Yahoo Weather</title>
    <style type="text/css">
    <!--
    body {
        font-family: "Trebuchet MS", Tahoma, Verdana;
        font-size: 12px;
        font-weight: normal;
        color: #777777;
        text-decoration: none;
        background-color: #FFFFFF;
    }
    #weather {
        width: 240px;
        height: 120px;
    }
    #current {
        width: 240px;
        height: 120px;
        text-align: right;
        color: #FFFFFF;
        font-weight: bold;
    }
    #current #temp {
        font-size: 24px;
        font-style: normal;
        padding-top: 40px;
        padding-right: 16px;
    }
    #current #fore {
        padding-right: 16px;
        font-size: 11px;
    }
    #current #city {
        padding-right: 16px;
    }
    -->
    </style>
</head>
<body>
    <div id="weather" style="background:url('icon<?php echo $ampm; ?>.png') no-repeat 40px 40px;">
        <div id="current"
             style="background:url('http://l.yimg.com/us.yimg.com/i/us/nws/weather/gr/<?php echo $icon . $ampm . ".png"; ?>') no-repeat 0px -10px;">
            <div id="temp"><?php echo $weather->get_temperature(); ?>&deg;<?php echo $unit; ?></div>
            <div id="fore"><?php echo $fore[0]->get_low() . "&deg;" . $unit; ?>
                - <?php echo $fore[0]->get_high() . "&deg;" . $unit; ?></div>
            <div id="city"><?php echo $weather->get_city() . ", " . $weather->get_country(); ?></div>
        </div>
    </div>
</body>
</html>

Den Code habe ich insgesamt von 3 Stellen: simplepie.inc , simplepie_yahoo_weather.inc und das schöne Layout incl. Hintergrundbild von hier.

Den Code incl. Bildchen und der beiden SimplePie Dateien habe ich auch nochmal gezippt für diejenigen, die es sich nicht manuell zusammensuchen wollen.

Also auch Yahoo bietet eine Menge Möglichkeiten, welche der drei APIs nun die beste ist hängt vom jeweiligen Einsatzzweck ab: Wie viele verschiedene Abfragen pro Monat werden gebraucht, sollen nur deutsche oder auch weltweite Wetterdaten angezeigt werden, soll eine separate Ortssuche mit dabei sein? So oder so sollte man sich auf jeden Fall bei intensiverem Gebrauch mit den Nutzungsbedingungen im Detail vertraut machen, damit wir auch in Zukunft diese kostenlosen Dienste nutzen können.

Written by Michael Kliewe

Januar 24th, 2011 at 9:32 am

19 Responses to 'Mit Wetterdaten arbeiten: Yahoo Weather API'

Subscribe to comments with RSS or TrackBack to 'Mit Wetterdaten arbeiten: Yahoo Weather API'.

  1. hi,
    hast du was zu den Nutzungsbedingungen gefunden?
    Darf man die Daten auf einer kommerzielle Seite verwenden?
    thx!

    toni

    26 Okt 11 at 23:06

  2. Würde mich auch interessieren, werde ich morgen herausfinden ;P

    erforderlich

    29 Dez 11 at 18:01

  3. hier die Antwort: Kommerziell, eher Nein !
    Es gibt noch einen Zugriffshack auf googleapi aber da werden die rechte nicht anders sein )=

    erforderlich

    2 Jan 12 at 14:33

  4. Hallo und guten Tag,

    ich habe ein paar Kleinigkeiten anpassen bzw. berichtigen müssen. Hier der korrekte Code (Deutsche Version)

    function get_wind_direction()
    {
    $wind_direction = $this->get_wind_direction_degrees();

    if ($wind_direction >= 348.75 and $wind_direction < = 360.00) $wind_direction_converted = "N"; else if ($wind_direction >= 0.00 and $wind_direction < 11.25) $wind_direction_converted = "N"; else if ($wind_direction >= 11.25 and $wind_direction < 33.75) $wind_direction_converted = "NNO"; else if ($wind_direction >= 33.75 and $wind_direction < 56.25) $wind_direction_converted = "NO"; else if ($wind_direction >= 56.25 and $wind_direction < 78.75) $wind_direction_converted = "ONO"; else if ($wind_direction >= 78.75 and $wind_direction < 101.25) $wind_direction_converted = "O"; else if ($wind_direction >= 101.25 and $wind_direction < 123.75) $wind_direction_converted = "OSO"; else if ($wind_direction >= 123.75 and $wind_direction < 146.25) $wind_direction_converted = "SE"; else if ($wind_direction >= 146.25 and $wind_direction < 168.75) $wind_direction_converted = "SSO"; else if ($wind_direction >= 168.75 and $wind_direction < 191.25) $wind_direction_converted = "S"; else if ($wind_direction >= 191.25 and $wind_direction < 213.75) $wind_direction_converted = "SSW"; else if ($wind_direction >= 213.75 and $wind_direction < 236.25) $wind_direction_converted = "SW"; else if ($wind_direction >= 236.25 and $wind_direction < 258.75) $wind_direction_converted = "WSW"; else if ($wind_direction >= 258.75 and $wind_direction < 281.25) $wind_direction_converted = "W"; else if ($wind_direction >= 281.25 and $wind_direction < 303.75) $wind_direction_converted = "WNW"; else if ($wind_direction >= 303.75 and $wind_direction < 326.25) $wind_direction_converted = "NW"; else if ($wind_direction >= 326.25 and $wind_direction < 348.75) $wind_direction_converted = "NNW"; else $wind_direction_converted = null; return $wind_direction_converted; } function time2minuts($time) { $minuts = 0; $atime = explode(" ", $time); $ttime = explode(":", $atime[0]); $minuts = (int)$ttime[0] * 60 + (int)$ttime[1]; if ( (strtolower($atime[1]) == "pm") and ((int)$ttime[0]!=12) ) { $minuts = $minuts + 12 * 60; } return $minuts; }

    Josef Klein

    6 Feb 12 at 23:05

  5. zur Funktion „time2minutes“:

    function time2minuts($time)
    {
    $minuts = 0;
    $atime = explode(“ „, $time);
    $ttime = explode(„:“, $atime[0]);
    if ($atime[1] == „pm“) {
    if ((int)$ttime[0]!=12) $ttime[0] = $ttime[0] + 12;
    else $ttime[0] = 0;
    }
    $minuts = (int)$ttime[0] * 60 + (int)$ttime[1];
    return $minuts;
    }

    so läuft die Funktion richtig …

    @Josef Klein:
    deine Variante hat zwischen ’12:00 pm‘ und ’12:59 pm‘
    Tag statt Nacht angezeigt … ist mir durch einen glücklichen Umstand aufgefallen.

    kevin

    7 Aug 12 at 22:00

  6. fast vergessen …

    „(u=c steht für deutsche Maßeinheiten: Grad Celsius und km/h, wenn man diesen Parameter wegläßt erhält man amerikanische Werte)“

    mit metrischen Maßeinheiten habe ich falsche Daten für Luftdruck und Wind bekommen …
    mit amerikanischen Maßeinheiten und Umrechnung bekommt man dann die korrekten Werte

    URL-Aufruf: ‚ $path = „http://weather.yahooapis.com/forecastrss?u=f&u=“; ‚

    Änderungen in der ’simplepie_yahoo_weather.inc‘

    die Einheiten:
    —————————————-
    function get_units_temp()
    {
    //$data = $this->_get_units();
    $data[0][‚attribs‘][“][‚temperature‘] = „C“;
    return $data[0][‚attribs‘][“][‚temperature‘];
    }

    function get_units_distance()
    {
    //$data = $this->_get_units();
    $data[0][‚attribs‘][“][‚distance‘] = „km“;
    return $data[0][‚attribs‘][“][‚distance‘];
    }

    function get_units_pressure()
    {
    //$data = $this->_get_units();
    $data[0][‚attribs‘][“][‚pressure‘] = „mB“;
    return $data[0][‚attribs‘][“][‚pressure‘];
    }

    function get_units_speed()
    {
    //$data = $this->_get_units();
    $data[0][‚attribs‘][“][’speed‘] = „km/h“;
    return $data[0][‚attribs‘][“][’speed‘];
    }

    die Umrechnungen:
    —————————————-
    function get_wind_chill()
    {
    $data = $this->_get_wind();
    $data[0][‚attribs‘][“][‚chill‘] = round(($data[0][‚attribs‘][“][‚chill‘] – 32) * (5/9),0);
    return $data[0][‚attribs‘][“][‚chill‘];
    }

    function get_wind_speed()
    {
    $data = $this->_get_wind();
    $data[0][‚attribs‘][“][’speed‘] = round(1.60934 * $data[0][‚attribs‘][“][’speed‘], 2);
    return $data[0][‚attribs‘][“][’speed‘];
    }

    function get_visibility()
    {
    $data = $this->_get_atmosphere();
    $data[0][‚attribs‘][“][‚visibility‘] = round(1.60934 * $data[0][‚attribs‘][“][‚visibility‘], 2); //new
    return $data[0][‚attribs‘][“][‚visibility‘];
    }

    function get_pressure()
    {
    $data = $this->_get_atmosphere();
    $data[0][‚attribs‘][“][‚pressure‘] = round(33.86379 * $data[0][‚attribs‘][“][‚pressure‘], 2); //new
    return $data[0][‚attribs‘][“][‚pressure‘];
    }

    function get_temperature()
    {
    $data = $this->_get_condition();
    $data[0][‚attribs‘][“][‚temp‘] = round(($data[0][‚attribs‘][“][‚temp‘] – 32) * (5/9),0);
    return $data[0][‚attribs‘][“][‚temp‘];
    }

    function get_low()
    {
    $data = $this->low;
    $data = round(($data – 32) * (5/9),0);
    return $data;
    }

    function get_high()
    {
    $data = $this->high;
    $data = round(($data – 32) * (5/9),0);
    return $data;
    }

    die Condition Codes in deutsch:
    (Funktion einfach am Ende der Datei einfügen)
    —————————————-
    function get_de_conditions($input) {
    if($input == „Light Rain“) $data = „Leichter Regen“;
    elseif($input == „Haze“) $data = „Dunst“;
    elseif($input == „Unknown Precipitation“) $data = „Niederschlag“;
    elseif($input == „Partly Cloudy“) $data = „Teilweise bewölkt“;
    elseif($input == „Cloudy“) $data = „Bewölkt“;
    elseif($input == „Mostly Cloudy“) $data = „überwiegend bewölkt“;
    elseif($input == „Blowing Snow“) $data = „Schneetreiben“;
    elseif($input == „Drizzle“) $data = „Nieselregen“;
    elseif($input == „Light Rain Shower“) $data = „Leichter Regenschauer“;
    elseif($input == „Sunny“) $data = „Sonnig“;
    elseif($input == „Fair“) $data = „Heiter“;
    elseif($input == „Light Drizzle“) $data = „Leichter Nieselregen“;
    elseif($input == „Wintry Mix“) $data = „Winterlicher Mix“;
    elseif($input == „Clear“) $data = „Klar“;
    elseif($input == „Light Snow“) $data = „Leichter Schneefall“;
    elseif($input == „Fog“) $data = „Nebel“;
    elseif($input == „Mist“) $data = „Nebel“;
    elseif($input == „Showers in the Vicinity“) $data = „Regenfälle in der Nähe“;
    elseif($input == „Light Rain/Windy“) $data = „Leichter Regen/Windig“;
    elseif($input == „Rain and Snow“) $data = „Schneeregen“;
    elseif($input == „Light Snow“) $data = „Leichter Schneefall“;
    elseif($input == „Snow“) $data = „Schneefall“;
    elseif($input == „Rain“) $data = „Regen“;
    elseif($input == „Mostly Clear“) $data = „überwiegend Klar“;
    elseif($input == „Foggy“) $data = „neblig“;
    elseif($input == „Freezing Drizzle“) $data = „gefrierender Nieselregen“;
    elseif($input == „Freezing Rain“) $data = „gefrierender Regen“;
    elseif($input == „Mostly sunny“) $data = „überwiegend sonnig“;
    elseif($input == „Light Rain/Freezing Rain“) $data = „Leichter Regen/Gefrierender Regen“;
    elseif($input == „Light Snow Shower“) $data = „Leichter Schneeschauer“;
    elseif($input == „Ice Crystals“) $data = „Eiskristalle“;
    elseif($input == „Thunder“) $data = „Gewitter“;
    elseif($input == „Heavy Thunderstorm“) $data = „Schweres Gewitter“;
    elseif($input == „Thunderstorm“) $data = „Gewitter“;
    elseif($input == „Heavy Rain“) $data = „Starker Regen“;
    elseif($input == „Light Rain with Thunder“) $data = „Leichter Regen mit Gewitter“;
    elseif($input == „Thunder in the Vicinity“) $data = „Gewitter in der Umgebung“;
    elseif($input == „Partly Cloudy/Windy“) $data = „Teilweise bewölkt/windig“;
    elseif($input == „Light Rain Shower/Windy“) $data = „Leichter Regenschauer/windig“;
    elseif($input == „Patches of Fog“) $data = „Nebelfelder“;
    elseif($input == „Rain Shower“) $data = „Regenschauer“;
    elseif($input == „Light Freezing Rain“) $data = „Leichter gefrierender Regen“;
    elseif($input == „Rain Shower/Windy“) $data = „Regenschauer/Windig“;
    elseif($input == „Mostly Cloudy/Windy“) $data = „Meist wolkig/Windig“;
    elseif($input == „Snow Shower“) $data = „Schneeschauer“;
    elseif($input == „Patches of Fog/Windy“) $data = „Nebelfelder/Windig“;
    elseif($input == „Shallow Fog“) $data = „flacher Nebel“;
    elseif($input == „Cloudy/Windy“) $data = „Wolkig/Windig“;
    elseif($input == „Light Snow/Fog“) $data = „Leichter Schneefall/Nebel“;
    elseif($input == „Heavy Rain Shower“) $data = „Starker Regenschauer“;
    elseif($input == „Light Rain Shower/Fog“) $data = „Leichter Regenschauer/Nebel“;
    elseif($input == „Rain/Windy“) $data = „Regen/Windig“;
    elseif($input == „Drizzle/Windy“) $data = „Nieselregen/Windig“;
    elseif($input == „Heavy Drizzle“) $data = „starker Nieselregen“;
    elseif($input == „Squalls“) $data = „Böen“;
    elseif($input == „Heavy Thunderstorm/Windy“) $data = „Schweres Gewitter/Windig“;
    elseif($input == „Snow Grains“) $data = „Schneegriesel“;
    elseif($input == „Partial Fog“) $data = „teilweise Nebel“;
    elseif($input == „Snow/Windy“) $data = „Schnee/Windig“;
    elseif($input == „Fair/Windy“) $data = „Heiter/Windig“;
    elseif($input == „Heavy Snow/Windy“) $data = „Starker Schneefall/Windig“;
    elseif($input == „Heavy Snow“) $data = „Starker Schneefall“;
    elseif($input == „Light Snow Shower/Fog“) $data = „Leichter Schneeschauer/Nebel“;
    elseif($input == „Heavy Snow Shower“) $data = „Starker Schneeschauer“;
    elseif($input == „Light Snow/Windy“) $data = „Leichter Schneeschauer/Windig“;
    elseif($input == „Drifting Snow/Windy“) $data = „Schneetreiben/Windig“;
    elseif($input == „Light Snow/Windy/Fog“) $data = „Leichter Schneeschauer/Windig/Nebel“;
    elseif($input == „Freezing Drizzle/Windy“) $data = „Gefrierender Nieselregen/Windig“;
    elseif($input == „Light Snow/Freezing Rain“) $data = „Leichter Schneefall/Gefrierender Regen“;
    elseif($input == „Light Sleet“) $data = „Leichter Schneeregen“;
    elseif($input == „Light Freezing Drizzle“) $data = „Leichter gefrierender Nieselregen“;
    elseif($input == „Light Snow Grains“) $data = „Leichter Schneegriesel“;
    elseif($input == „Clear/Windy“) $data = „Klar/Windig“;
    elseif($input == „Heavy Rain/Windy“) $data = „Starker Regen/Windig“;
    elseif($input == „Fog/Windy“) $data = „Nebel/Windig“;
    elseif($input == „Unknown“) $data = „unbekannt“;
    elseif($input == „Sunny/Windy“) $data = „Sonnig/Windig“;
    elseif($input == „Sleet and Freezing Rain“) $data = „Schneeregen und gefrierender Regen“;
    elseif($input == „Clear/Windy“) $data = „Klar/Windig“;
    elseif($input == „Thunderstorm/Windy“) $data = „Gewitter/Windig“;
    elseif($input == „Light Snow with Thunder“) $data = „Leichter Schneefall mit Gewitter“;
    elseif($input == „Light Rain/Fog“) $data = „Leichter Regen/Nebel“;
    elseif($input == „Light Snow/Windy/Fog“) $data = „Leichter Schneefall/Windig/Nebel“;
    elseif($input == „Sleet/Windy“) $data = „Schneeregen/Windig“;
    elseif($input == „Rain and Snow/Windy „) $data = „Regen und Schnee/Windig“;
    elseif($input == „Fog/Windy“) $data = „Nebel/Windig“;
    elseif($input == „Rain and Snow/Windy“) $data = „Regen und Schnee/Windig“;
    elseif($input == „Light Freezing Rain/Fog“) $data = „Leichter gefrierender Regen/Nebel“;
    elseif($input == „Drifting Snow“) $data = „Schneetreiben“;
    else $data = $input;
    return $data;
    }

    und die Einbindung:
    —————————————-
    function get_condition()
    {
    $data = $this->_get_condition();
    return get_de_conditions($data[0][‚attribs‘][“][‚text‘]);
    }

    function get_label()
    {
    return get_de_conditions($this->label);
    }

    so das wars …

    mfg 😉

    kevin

    7 Aug 12 at 22:34

  7. ein wenig Code Golf 🙂

    function getWindDirection($degree = 0) {
    $direction = array(‚N‘, ‚NNO‘, ‚NO‘, ‚ONO‘, ‚O‘, ‚OSO‘, ‚SE‘, ‚SSO‘, ‚S‘, ‚SSW‘, ‚SW‘, ‚WSW‘, ‚W‘, ‚WNW‘, ‚NW‘, ‚NNW‘);

    $step = 360 / (count($direction));
    $b = floor(($degree + ($step/2)) / $step);

    return $direction[$b % count($direction)];
    }

    max

    8 Aug 12 at 11:13

  8. Danke Leute!

    Da offensichtlich Google am 27.08.2012 endgültig die Wetter-API abgeschaltet hat, habe ich dank euch nun mein Wetter Snippet auf meiner MODX Seite auf Yahoo via cURL umgestellt.

    🙂

    Jo

    1 Sep 12 at 01:04

  9. Nachtrag:
    Komplette deutsche Konditionen (hoffe ich 😉

    # Funktion deutsche Konditionen
    if (!function_exists(‚get_de_conditions‘)) {
    function get_de_conditions($input) {
    if($input == ‚AM Clouds/PM Sun‘) $data = ‚vormittags bewölkt/nachmittags sonnig‘;
    elseif($input == ‚AM Drizzle‘) $data = ‚vormittags Nieselregen‘;
    elseif($input == ‚AM Drizzle/Wind‘) $data = ‚vorm. Nieselregen/Wind‘;
    elseif($input == ‚AM Fog/PM Clouds‘) $data = ‚vormittags Nebel/nachmittags bewölkt‘;
    elseif($input == ‚AM Fog/PM Sun‘) $data = ‚vormittags Nebel, nachmittags sonnig‘;
    elseif($input == ‚AM Ice‘) $data = ‚vorm. Eis‘;
    elseif($input == ‚AM Light Rain‘) $data = ‚vormittags leichter Regen‘;
    elseif($input == ‚AM Light Rain/Wind‘) $data = ‚vorm. leichter Regen/Wind‘;
    elseif($input == ‚AM Light Snow‘) $data = ‚vormittags leichter Schneefall‘;
    elseif($input == ‚AM Rain‘) $data = ‚vormittags Regen‘;
    elseif($input == ‚AM Rain/Snow Showers‘) $data = ‚vorm. Regen-/Schneeschauer‘;
    elseif($input == ‚AM Rain/Snow‘) $data = ‚vormittags Regen/Schnee‘;
    elseif($input == ‚AM Rain/Snow/Wind‘) $data = ‚vorm. Regen/Schnee/Wind‘;
    elseif($input == ‚AM Rain/Wind‘) $data = ‚vorm. Regen/Wind‘;
    elseif($input == ‚AM Showers‘) $data = ‚vormittags Schauer‘;
    elseif($input == ‚AM Showers/Wind‘) $data = ‚vormittags Schauer/Wind‘;
    elseif($input == ‚AM Snow Showers‘) $data = ‚vormittags Schneeschauer‘;
    elseif($input == ‚AM Snow‘) $data = ‚vormittags Schnee‘;
    elseif($input == ‚AM Thundershowers‘) $data = ‚vorm. Gewitterschauer‘;
    elseif($input == ‚Blowing Snow‘) $data = ‚Schneetreiben‘;
    elseif($input == ‚Clear‘) $data = ‚Klar‘;
    elseif($input == ‚Clear/Windy‘) $data = ‚Klar/Windig‘;
    elseif($input == ‚Clouds Early/Clearing Late‘) $data = ‚früh Wolken/später klar‘;
    elseif($input == ‚Cloudy‘) $data = ‚Bewölkt‘;
    elseif($input == ‚Cloudy/Wind‘) $data = ‚Bewölkt/Wind‘;
    elseif($input == ‚Cloudy/Windy‘) $data = ‚Wolkig/Windig‘;
    elseif($input == ‚Drifting Snow‘) $data = ‚Schneetreiben‘;
    elseif($input == ‚Drifting Snow/Windy‘) $data = ‚Schneetreiben/Windig‘;
    elseif($input == ‚Drizzle Early‘) $data = ‚früh Nieselregen‘;
    elseif($input == ‚Drizzle Late‘) $data = ’später Nieselregen‘;
    elseif($input == ‚Drizzle‘) $data = ‚Nieselregen‘;
    elseif($input == ‚Drizzle/Fog‘) $data = ‚Nieselregen/Nebel‘;
    elseif($input == ‚Drizzle/Wind‘) $data = ‚Nieselregen/Wind‘;
    elseif($input == ‚Drizzle/Windy‘) $data = ‚Nieselregen/Windig‘;
    elseif($input == ‚Fair‘) $data = ‚Heiter‘;
    elseif($input == ‚Fair/Windy‘) $data = ‚Heiter/Windig‘;
    elseif($input == ‚Few Showers‘) $data = ‚vereinzelte Schauer‘;
    elseif($input == ‚Few Showers/Wind‘) $data = ‚vereinzelte Schauer/Wind‘;
    elseif($input == ‚Few Snow Showers‘) $data = ‚vereinzelt Schneeschauer‘;
    elseif($input == ‚Fog Early/Clouds Late‘) $data = ‚früh Nebel, später Wolken‘;
    elseif($input == ‚Fog Late‘) $data = ’später neblig‘;
    elseif($input == ‚Fog‘) $data = ‚Nebel‘;
    elseif($input == ‚Fog/Windy‘) $data = ‚Nebel/Windig‘;
    elseif($input == ‚Foggy‘) $data = ’neblig‘;
    elseif($input == ‚Freezing Drizzle‘) $data = ‚gefrierender Nieselregen‘;
    elseif($input == ‚Freezing Drizzle/Windy‘) $data = ‚gefrierender Nieselregen/Windig‘;
    elseif($input == ‚Freezing Rain‘) $data = ‚gefrierender Regen‘;
    elseif($input == ‚Haze‘) $data = ‚Dunst‘;
    elseif($input == ‚Heavy Drizzle‘) $data = ’starker Nieselregen‘;
    elseif($input == ‚Heavy Rain Shower‘) $data = ‚Starker Regenschauer‘;
    elseif($input == ‚Heavy Rain‘) $data = ‚Starker Regen‘;
    elseif($input == ‚Heavy Rain/Wind‘) $data = ’starker Regen/Wind‘;
    elseif($input == ‚Heavy Rain/Windy‘) $data = ‚Starker Regen/Windig‘;
    elseif($input == ‚Heavy Snow Shower‘) $data = ‚Starker Schneeschauer‘;
    elseif($input == ‚Heavy Snow‘) $data = ‚Starker Schneefall‘;
    elseif($input == ‚Heavy Snow/Wind‘) $data = ‚Starker Schneefall/Wind‘;
    elseif($input == ‚Heavy Thunderstorm‘) $data = ‚Schweres Gewitter‘;
    elseif($input == ‚Heavy Thunderstorm/Windy‘) $data = ‚Schweres Gewitter/Windig‘;
    elseif($input == ‚Ice Crystals‘) $data = ‚Eiskristalle‘;
    elseif($input == ‚Ice Late‘) $data = ’später Eis‘;
    elseif($input == ‚Isolated T-storms‘) $data = ‚Vereinzelte Gewitter‘;
    elseif($input == ‚Isolated Thunderstorms‘) $data = ‚Vereinzelte Gewitter‘;
    elseif($input == ‚Light Drizzle‘) $data = ‚Leichter Nieselregen‘;
    elseif($input == ‚Light Freezing Drizzle‘) $data = ‚Leichter gefrierender Nieselregen‘;
    elseif($input == ‚Light Freezing Rain‘) $data = ‚Leichter gefrierender Regen‘;
    elseif($input == ‚Light Freezing Rain/Fog‘) $data = ‚Leichter gefrierender Regen/Nebel‘;
    elseif($input == ‚Light Rain Early‘) $data = ‚anfangs leichter Regen‘;
    elseif($input == ‚Light Rain‘) $data = ‚Leichter Regen‘;
    elseif($input == ‚Light Rain Late‘) $data = ’später leichter Regen‘;
    elseif($input == ‚Light Rain Shower‘) $data = ‚Leichter Regenschauer‘;
    elseif($input == ‚Light Rain Shower/Fog‘) $data = ‚Leichter Regenschauer/Nebel‘;
    elseif($input == ‚Light Rain Shower/Windy‘) $data = ‚Leichter Regenschauer/windig‘;
    elseif($input == ‚Light Rain with Thunder‘) $data = ‚Leichter Regen mit Gewitter‘;
    elseif($input == ‚Light Rain/Fog‘) $data = ‚Leichter Regen/Nebel‘;
    elseif($input == ‚Light Rain/Freezing Rain‘) $data = ‚Leichter Regen/Gefrierender Regen‘;
    elseif($input == ‚Light Rain/Wind Early‘) $data = ‚früh leichter Regen/Wind‘;
    elseif($input == ‚Light Rain/Wind Late‘) $data = ’später leichter Regen/Wind‘;
    elseif($input == ‚Light Rain/Wind‘) $data = ‚leichter Regen/Wind‘;
    elseif($input == ‚Light Rain/Windy‘) $data = ‚Leichter Regen/Windig‘;
    elseif($input == ‚Light Sleet‘) $data = ‚Leichter Schneeregen‘;
    elseif($input == ‚Light Snow Early‘) $data = ‚früher leichter Schneefall‘;
    elseif($input == ‚Light Snow Grains‘) $data = ‚Leichter Schneegriesel‘;
    elseif($input == ‚Light Snow Late‘) $data = ’später leichter Schneefall‘;
    elseif($input == ‚Light Snow Shower‘) $data = ‚Leichter Schneeschauer‘;
    elseif($input == ‚Light Snow Shower/Fog‘) $data = ‚Leichter Schneeschauer/Nebel‘;
    elseif($input == ‚Light Snow with Thunder‘) $data = ‚Leichter Schneefall mit Gewitter‘;
    elseif($input == ‚Light Snow‘) $data = ‚Leichter Schneefall‘;
    elseif($input == ‚Light Snow/Fog‘) $data = ‚Leichter Schneefall/Nebel‘;
    elseif($input == ‚Light Snow/Freezing Rain‘) $data = ‚Leichter Schneefall/Gefrierender Regen‘;
    elseif($input == ‚Light Snow/Wind‘) $data = ‚Leichter Schneefall/Wind‘;
    elseif($input == ‚Light Snow/Windy‘) $data = ‚Leichter Schneeschauer/Windig‘;
    elseif($input == ‚Light Snow/Windy/Fog‘) $data = ‚Leichter Schneefall/Windig/Nebel‘;
    elseif($input == ‚Mist‘) $data = ‚Nebel‘;
    elseif($input == ‚Mostly Clear‘) $data = ‚überwiegend Klar‘;
    elseif($input == ‚Mostly Cloudy‘) $data = ‚Überwiegend bewölkt‘;
    elseif($input == ‚Mostly Cloudy/Wind‘) $data = ‚meist bewölkt/Wind‘;
    elseif($input == ‚Mostly sunny‘) $data = ‚Überwiegend sonnig‘;
    elseif($input == ‚Partial Fog‘) $data = ‚teilweise Nebel‘;
    elseif($input == ‚Partly Cloudy‘) $data = ‚Teilweise bewölkt‘;
    elseif($input == ‚Partly Cloudy/Wind‘) $data = ‚teilweise bewölkt/Wind‘;
    elseif($input == ‚Patches of Fog‘) $data = ‚Nebelfelder‘;
    elseif($input == ‚Patches of Fog/Windy‘) $data = ‚Nebelfelder/Windig‘;
    elseif($input == ‚PM Drizzle‘) $data = ’nachm. Nieselregen‘;
    elseif($input == ‚PM Fog‘) $data = ’nachmittags Nebel‘;
    elseif($input == ‚PM Light Snow‘) $data = ’nachmittags leichter Schneefall‘;
    elseif($input == ‚PM Light Rain‘) $data = ’nachmittags leichter Regen‘;
    elseif($input == ‚PM Light Rain/Wind‘) $data = ’nachm. leichter Regen/Wind‘;
    elseif($input == ‚PM Light Snow/Wind‘) $data = ’nachm. leichter Schneefall/Wind‘;
    elseif($input == ‚PM Rain‘) $data = ’nachmittags Regen‘;
    elseif($input == ‚PM Rain/Snow Showers‘) $data = ’nachmittags Regen/Schneeschauer‘;
    elseif($input == ‚PM Rain/Snow‘) $data = ’nachmittags Regen/Schnee‘;
    elseif($input == ‚PM Rain/Wind‘) $data = ’nachm. Regen/Wind‘;
    elseif($input == ‚PM Showers‘) $data = ’nachmittags Schauer‘;
    elseif($input == ‚PM Showers/Wind‘) $data = ’nachmittags Schauer/Wind‘;
    elseif($input == ‚PM Snow Showers‘) $data = ’nachmittags Schneeschauer‘;
    elseif($input == ‚PM Snow Showers/Wind‘) $data = ’nachm. Schneeschauer/Wind‘;
    elseif($input == ‚PM Snow‘) $data = ’nachm. Schnee‘;
    elseif($input == ‚PM T-storms‘) $data = ’nachmittags Gewitter‘;
    elseif($input == ‚PM Thundershowers‘) $data = ’nachmittags Gewitterschauer‘;
    elseif($input == ‚PM Thunderstorms‘) $data = ’nachm. Gewitter‘;
    elseif($input == ‚Rain and Snow‘) $data = ‚Schneeregen‘;
    elseif($input == ‚Rain and Snow/Windy‘) $data = ‚Regen und Schnee/Windig‘;
    elseif($input == ‚Rain/Snow Showers/Wind‘) $data = ‚Regen/Schneeschauer/Wind‘;
    elseif($input == ‚Rain Early‘) $data = ‚früh Regen‘;
    elseif($input == ‚Rain Late‘) $data = ’später Regen‘;
    elseif($input == ‚Rain Shower‘) $data = ‚Regenschauer‘;
    elseif($input == ‚Rain Shower/Windy‘) $data = ‚Regenschauer/Windig‘;
    elseif($input == ‚Rain to Snow‘) $data = ‚Regen, in Schnee übergehend‘;
    elseif($input == ‚Rain‘) $data = ‚Regen‘;
    elseif($input == ‚Rain/Snow Early‘) $data = ‚früh Regen/Schnee‘;
    elseif($input == ‚Rain/Snow Late‘) $data = ’später Regen/Schnee‘;
    elseif($input == ‚Rain/Snow Showers Early‘) $data = ‚früh Regen-/Schneeschauer‘;
    elseif($input == ‚Rain/Snow Showers Late‘) $data = ’später Regen-/Schneeschnauer‘;
    elseif($input == ‚Rain/Snow Showers‘) $data = ‚Regen/Schneeschauer‘;
    elseif($input == ‚Rain/Snow‘) $data = ‚Regen/Schnee‘;
    elseif($input == ‚Rain/Snow/Wind‘) $data = ‚Regen/Schnee/Wind‘;
    elseif($input == ‚Rain/Thunder‘) $data = ‚Regen/Gewitter‘;
    elseif($input == ‚Rain/Wind Early‘) $data = ‚früh Regen/Wind‘;
    elseif($input == ‚Rain/Wind Late‘) $data = ’später Regen/Wind‘;
    elseif($input == ‚Rain/Wind‘) $data = ‚Regen/Wind‘;
    elseif($input == ‚Rain/Windy‘) $data = ‚Regen/Windig‘;
    elseif($input == ‚Scattered Showers‘) $data = ‚vereinzelte Schauer‘;
    elseif($input == ‚Scattered Showers/Wind‘) $data = ‚vereinzelte Schauer/Wind‘;
    elseif($input == ‚Scattered Snow Showers‘) $data = ‚vereinzelte Schneeschauer‘;
    elseif($input == ‚Scattered Snow Showers/Wind‘) $data = ‚vereinzelte Schneeschauer/Wind‘;
    elseif($input == ‚Scattered T-storms‘) $data = ‚vereinzelte Gewitter‘;
    elseif($input == ‚Scattered Thunderstorms‘) $data = ‚vereinzelte Gewitter‘;
    elseif($input == ‚Shallow Fog‘) $data = ‚flacher Nebel‘;
    elseif($input == ‚Showers‘) $data = ‚Schauer‘;
    elseif($input == ‚Showers Early‘) $data = ‚früh Schauer‘;
    elseif($input == ‚Showers Late‘) $data = ’später Schauer‘;
    elseif($input == ‚Showers in the Vicinity‘) $data = ‚Regenfälle in der Nähe‘;
    elseif($input == ‚Showers/Wind‘) $data = ‚Schauer/Wind‘;
    elseif($input == ‚Sleet and Freezing Rain‘) $data = ‚Schneeregen und gefrierender Regen‘;
    elseif($input == ‚Sleet/Windy‘) $data = ‚Schneeregen/Windig‘;
    elseif($input == ‚Snow Grains‘) $data = ‚Schneegriesel‘;
    elseif($input == ‚Snow Late‘) $data = ’später Schnee‘;
    elseif($input == ‚Snow Shower‘) $data = ‚Schneeschauer‘;
    elseif($input == ‚Snow Showers Early‘) $data = ‚früh Schneeschauer‘;
    elseif($input == ‚Snow Showers Late‘) $data = ’später Schneeschauer‘;
    elseif($input == ‚Snow Showers‘) $data = ‚Schneeschauer‘;
    elseif($input == ‚Snow Showers/Wind‘) $data = ‚Schneeschauer/Wind‘;
    elseif($input == ‚Snow to Rain‘) $data = ‚Schneeregen‘;
    elseif($input == ‚Snow‘) $data = ‚Schneefall‘;
    elseif($input == ‚Snow/Wind‘) $data = ‚Schneefall/Wind‘;
    elseif($input == ‚Snow/Windy‘) $data = ‚Schnee/Windig‘;
    elseif($input == ‚Squalls‘) $data = ‚Böen‘;
    elseif($input == ‚Sunny‘) $data = ‚Sonnig‘;
    elseif($input == ‚Sunny/Wind‘) $data = ‚Sonnig/Wind‘;
    elseif($input == ‚Sunny/Windy‘) $data = ‚Sonnig/Windig‘;
    elseif($input == ‚T-showers‘) $data = ‚Gewitterschauer‘;
    elseif($input == ‚Thunder in the Vicinity‘) $data = ‚Gewitter in der Umgebung‘;
    elseif($input == ‚Thunder‘) $data = ‚Gewitter‘;
    elseif($input == ‚Thundershowers Early‘) $data = ‚früh Gewitterschauer‘;
    elseif($input == ‚Thundershowers‘) $data = ‚Gewitterschauer‘;
    elseif($input == ‚Thunderstorm‘) $data = ‚Gewitter‘;
    elseif($input == ‚Thunderstorm/Windy‘) $data = ‚Gewitter/Windig‘;
    elseif($input == ‚Thunderstorms Early‘) $data = ‚früh Gewitter‘;
    elseif($input == ‚Thunderstorms Late‘) $data = ’später Gewitter‘;
    elseif($input == ‚Thunderstorms‘) $data = ‚Gewitter‘;
    elseif($input == ‚Unknown Precipitation‘) $data = ‚Niederschlag‘;
    elseif($input == ‚Unknown‘) $data = ‚unbekannt‘;
    elseif($input == ‚Wintry Mix‘) $data = ‚Winterlicher Mix‘;
    else $data = $input;
    return $data;
    }
    }

    Jo

    2 Sep 12 at 11:34

  10. Für sowas benutzt man doch besser ein Array. DRY!

    Bei stackoverflow habe ich noch den guten Tipp für JSON gefunden:

    „Just replace forecastrss by forecastjson in the URL. I see one drawback: No weather-code is returned for the forecast.“

    nk

    5 Sep 12 at 17:49

  11. @nk: klar, habs in ein Array umgeschrieben. Danke für den Tipp!

    Jo

    6 Sep 12 at 20:34

  12. Seltsam – wenn ich das per Array mache muss ich das Ergebnis trimmen. Mit einer Funktion war das nicht nötig. Weiß jemand warum?

    Beispiel:

    $strWeekday_de = array(‚Mon‘ => ‚Montag‘, ‚Tue‘ => ‚Dienstag‘, ‚Wed‘ => ‚Mittwoch‘,
    ‚Thu‘ => ‚Donnerstag‘, ‚Fri‘ => ‚Freitag‘, ‚Sat‘ => ‚Samstag‘, ‚Sun‘ => ‚Sonntag‘);

    echo = $strWeekday_de[trim($forecast[0][‚day‘])];

    Jo

    7 Sep 12 at 22:16

  13. OK, die Trim-Funktion enfernt nicht nur Leerzeichen, sondern auch Tabulatorzeichen (auch vertikaler Tabulator), Line Feed, Carriage Return und NULL.

    Jo

    9 Sep 12 at 09:22

  14. neueste Neuigkeiten: forecastjson wird leider ab sofort nicht mehr unterstützt. Es heißt also doch wieder xml parsen. Ich hoffe, die nächste API-Anpassung lässt ein Weilchen auch sich warten.

    nk

    6 Okt 12 at 01:50

  15. Hallo Zusammen,
    erst einmal vielen Dank für den Artikel zur Yahoo-Wetter-API.
    Ich habe mich jetzt mal daran versucht das ganze auch zum Laufen zu bringen. Aber es will einfach nicht funktionieren.
    Vielleicht kann ja nochmal einer von euch unterstützen.
    Also folgendes Habe ich gemacht:
    1. zip-Package runtergeladen und entpackt
    2. auf Webspace hochgeladen
    3. die passende WOEID in der yahooweather.php eingefügt
    4. Anpassungen, die hier in den Kommentaren aufgeführt wurden, eingearbeitet.

    Aber ich erhalte immer eine leere Seite. Sogar die Anzeige des Quelltextes ist leer.

    Vielleicht könnte ja auch jemand noch einmal das komplette, lauffähige, Package zur Verfügung stellen.

    Besten Dank
    Micha

    Micha

    23 Okt 12 at 10:38

  16. […] Der Wert GMXX0007 muss durch den entsprechenden eures Wohnortes angepasst werden. Etwas tricky den herauszubekommen. Wie’s geht steht u.a. hier. […]

  17. Vielen Dank für die schöne Zusammenfassung (vor allem der Wettercodes). Hat mir sehr gehlofen die API in ein VB.net/C# Programm einzubinden.

    Michael

    12 Apr 13 at 12:37

  18. DANKE!

    Der Tipp per cURL ist auch gut – dann geht es ohne API 🙂

    Marc

    16 Apr 13 at 10:25

  19. Hi,
    das Wetter von Morgen macht Probleme

    Call to undefined method
    wenn ich $fore[1]->get_code() aufrufe.

    die anderen Werte kann ich abfragen…
    $fore[1]->get_low()
    $fore[1]->get_high()
    $fore[1]->get_label()

    Danke und Grüße
    Zottel

    Zottel

    17 Jul 13 at 13:20

Leave a Reply

You can add images to your comment by clicking here.