Yahoo! Weather Teil 1

Wieder mal eine Neuerung auf meiner Seite und hier gibts die Anleitung, aber diesmal in 2 Teilen. Da rechts oben im Eck lange eigentlich nur diese leere blaue Box war und ich gestern auf der Yahoo! Developer Seite mal nach Programmierideen gesucht habe, bin ich auf den Yahoo! Weather RSS Feed gestoßen bin. Da man hier sehr viele Informationen erhält, splitte ich dieses Tutorial in zwei Teil, im ersten erkläre ich wie man meine YahooWeather-Klasse nutzt und im zweiten Teil, wie ich sie erstellt habe.

So zum Start ist es erst mal ganz wichtig, herauszubekommen wie der Positionscode der Ortschaft ist, für die man Wetterinformationen will, dies erfährt man auf der Yahoo! Weather Seite. Der Code ist der Dateiname der Wetter-Übersichtsseite der Ortschaft ohne .html. Dies ist das erste Argument, welches wir für den Konstruktor der YahooWeather-Klasse benötigen, das zweite ist die Einheit, f für Fahrenheit, c für Celsius, aber immer kleingeschrieben. Die Klasse habe ich bei mir unter xhochy/YahooWeather.php abgelegt. Die Argumente sind  im Beispiel für Kaiserslautern und Celsius.


Nun schreiben wir den Standort(getLocation) in die Variable $place und den aktuellen Wetterzustand(getCondition) in die Variable $weather. Diese beiden liefern die wichtigsten Informationen über das Wetter.


Ich benutze hiervon $place['city'](aktuelle Stadt) und $weather['temp'](aktuelle Temperatur). Da ich diesen Artikel nicht direkt an meiner Webseite festfixieren will, kurz ein paar andere Funktionen.

$oWeather->getDescription();

Liefert die Beschreibung der aktuellen Wettersorte, z.B. stark bewölkt.

$oWeather->getDescriptionImage();

Liefert die URL zum passenden Bild zu Beschreibung von oben, das Bild wird von den Yahoo! Servern geladen.

$oWeather->getTempUnit();

Liefert die Einheit(C oder F) der Temperatur, die Funktion ist dem Eingabeparameter zu bevozugen, sollte Yahoo! vielleicht mal nicht in der korrekten Einheit zurückliefern.

$oWeather->getForecastUrl()

Liefert den Link zur Yahoo! Weather Seite mit den Vorhersagen für die nächsten 2 Tage (Anmerkung: So wie ich die Yahoo! Weather Terms of Use verstanden habe, ist dieser Link Pflicht)

Beispiel

So sieht der Quelltext meiner Homepage aus, um das Wetter darzustellen:

So und hier die YahooWeather.php(unter der LGPL lizensiert) zum Kopieren:

class UnitUnknownException extends Exception
{
public function
__construct($message, $code = 0)
{
parent::__construct($message, $code);
}

public function __toString()
{
return
__CLASS__ . “: [{$this->code}]: {$this->message}\n”;
}
}

class YahooWeather
{
public function
__construct($location, $unit)
{
if(
$unit != ‘c’ && $unit != ‘f’)
throw new
UnitUnknownException(‘Unit “‘
.$unit.‘” can not be used in this function.’);
$xmlstr = file_get_contents(YahooWeather::$rssUrl
.‘?p=’.urlencode($location)
.
‘&u=’.$unit);
$this->xml = new SimpleXMLElement($xmlstr);
$this->location = $location;
}

public $location;

public $xml;

public static $rssUrl = ‘http://xml.weather.yahoo.com/forecastrss’;

public static $weatherCode = array(
0 => ‘Tornado’,
1 => ‘Tropensturm’,
2 => ‘Hurrikan’,
3 => ‘ernsthafte Gewitter’,
4 => ‘Gewitter’,
5 => ‘Regen und Schnee’,
6 => ‘Regen und Graupelschauer’,
7 => ‘Schnee und Graupelschauer’,
8 => ‘gefriender Nieselregen’,
9 => ‘Nieselregen’,
10 => ‘gefrierender Regen’,
11 => ‘Schauer’,
12 => ‘Schauer’,
13 => ‘Schneegestöber’,
14 => ‘leichte Schneeschauer’,
15 => ‘Schneesturm’,
16 => ‘Schnee’,
17 => ‘Hagel’,
18 => ‘Graupelschauer’,
19 => ’starker Nebel’,
20 => ‘Nebel’,
21 => ’schwacher Nebel’,
22 => ‘Qualmig’,
23 => ‘Stürmisch’,
24 => ‘Windig’,
25 => ‘Kalt’,
26 => ‘Bewölkt’,
27 => ‘überwiegend bewölkt’,
28 => ‘überwiegend bewölkt’,
29 => ‘Teils bewölkt’,
30 => ‘Teils bewölkt’,
31 => ‘Klar’,
32 => ‘Sonnig’,
33 => ‘Heiter’,
34 => ‘Heiter’,
35 => ‘Regen und Hagel’,
36 => ‘Heiss’,
37 => ‘vereinzelte Gewitter’,
38 => ‘verstreute Gewitter’,
39 => ‘verstreute Gewitter’,
40 => ‘vereinzelte Schauer’,
41 => ’starker Schneefall’,
42 => ‘vereinzelt Schnee und Regen’,
43 => ’starker Schneefall’,
44 => ‘teils Bewölkt’,
45 => ‘Gewitter’,
46 => ‘Schneeschauer’,
47 => ‘vereinzelte Gewitter’
);

public function getLocation()
{
$location = $this->xml->channel->xpath(‘//yweather:location’);
return
$location[0];
}

public function getCondition()
{
$weather = $this->xml->channel->xpath(‘//yweather:condition’);
return
$weather[0];
}

public function getDescription()
{
$weather = $this->getCondition();
$code = (int)$weather['code'];
return
YahooWeather::$weatherCode[$code];
}

public static $ImageDir = ‘http://us.i1.yimg.com/us.yimg.com/i/us/we/52/’;

public function getDescriptionImage()
{
$weather = $this->getCondition();
return
YahooWeather::$ImageDir.$weather['code'].‘.gif’;
}

public function getForecastUrl()
{
return
$this->xml->channel->item->link;
}

public function getTempUnit()
{
$units = $this->xml->channel->xpath(‘//yweather:units’);
$units = $units[0];
return
$units['temperature'];
}
}

?>

Share/Save/Bookmark

0 Responses to “Yahoo! Weather Teil 1”


  1. No Comments

Leave a Reply