Ich habe mir eine Funktion zusammengehackt, die für eine bestimmte Region die aktuell vorhandenen Warnungen vom DWD ausliest (von der Website). Man bekommt die Warnungen dann als ein Array von Datenobjekten, so dass sie sich auf vielfältige Weise weiterverwerten bzw. anzeigen lassen.
Den Code für die eigene Region findet man so:
- auf diesen Link klicken.
- auf die eigene Region klicken bis sich das Fenster mit den Warnungen in Textform öffnet
- die URL jenes Fensters enthält den Code. Es sind die drei Großbuchstaben zwischen http://www.dwd.de/dyn/app/ws/html/reports/ und _warning_de.html.
Die Struktur des Rückgabeobjekts lässt sich mittels des Aufrufs print_r ausgeben. Es handelt sich um ein Array(!) von Datenobjekten. Als Hilfestellung:
[ul]
[li]‚level‘ - die Warnstufe von 1…4
[/li][li]‚title‘ - der Originaltitel der Warnung
[/li][li]‚class‘ - Textstring in Großbuchstaben, welcher der Warnstufe entsprechen sollte z.B. „UNWETTERWARNUNG“
[/li][li]‚matter‘ - Textstring in Großbuchstaben, der angibt wovor gewarnt wird, z.B. „SCHWERER STURM“
[/li][li]‚area‘ - Textstring, der die Gegen angibt für die die Warnung gilt (z.B. „Schleswig-Holstein“)
[/li][li]‚starttime‘, ‚endtime‘ - das Zeitfenster in dem die Warnung gilt. Es handelt sich um Datumsobjekte.
[/li][li]‚issuer‘ - Herausgeber der Warnung, üblicherweise „DWD“
[/li][li]‚issuetime‘ - Zeitpunkt, wann die Warnung herausgegeben wurde. Datumsobjekt.
[/li][li]‚ineffect‘ - Boolean, der angibt ob die Warnung jetzt gerade gilt.
[/li][li]‚upcoming‘ - Boolean, der angibt ob die Gültigkeit der Warnung noch bevorsteht.
[/li][li]‚text‘ - der Textinhalt der Warnung, z.B. „Es regnet Katzen und Hunde.“
[/li][li]‚datacenter‘ - unwichtiger String, der angibt welches Rechenzentrum die Daten verarbeitet hat (denke ich mal).
[/li][/ul]
print_r(dwdGetWarnings('HHX')); // HHX ist der Code für Hamburg
function dwdGetWarnings($code)
{
$result = Array();
$url = 'http://www.dwd.de/dyn/app/ws/html/reports/' . $code . '_warning_de.html';
$content = Sys_GetURLContent($url);
$xml = simplexml_load_string($content);
$i = 2;
while($xml->body->div->div[$i]->div)
{
$warning = Array();
$style = $xml->body->div->div[$i]->attributes()->style;
$color = substr($style, strpos($style, ': #') + 3);
switch($color)
{
case '5FB4FF':
$warning['level'] = 0;
break;
case 'FFFE00':
case 'FFFF00':
$warning['level'] = 1;
break;
case 'FA9600':
$warning['level'] = 2;
break;
case 'FF0000':
$warning['level'] = 3;
break;
case 'AE1365':
$warning['level'] = 4;
break;
default:
$warning['level'] = 4;
break;
}
for($j = 0; $j < count($xml->body->div->div[$i]->div->p); $j++)
{
$line = utf8_decode(trim($xml->body->div->div[$i]->div->p[$j]));
switch($j)
{
case 0:
$warning['title'] = $line;
$warning['class'] = substr($line, strpos($line, ' ') + 1);
$warning['matter'] = substr($warning['class'], strpos($warning['class'], ' vor ') + 5);
$warning['class'] = substr($warning['class'], 0, strpos($warning['class'], ' vor '));
$warning['matter'] = str_replace('ER ', 'E ', $warning['matter']);
$warning['matter'] = str_replace('EM ', 'ER ', $warning['matter']);
$warning['matter'] = str_replace('EN ', 'E ', $warning['matter']);
break;
case 1:
$warning['area'] = substr($line, 4);
break;
case 2:
$warning['starttime'] = new DateTime(substr($line, strpos($line, ', ') + 2, 16));
break;
case 3:
$warning['endtime'] = new DateTime(substr($line, strpos($line, ', ') + 2, 16));
$warning['ineffect'] = false;
$warning['upcoming'] = false;
if
(
(time() >= $warning['starttime']->getTimestamp()) &&
(time() <= $warning['endtime']->getTimestamp())
)
{
$warning['ineffect'] = true;
}
if
(
(time() < $warning['starttime']->getTimestamp()) &&
(time() < $warning['endtime']->getTimestamp())
)
{
$warning['upcoming'] = true;
}
break;
case 4:
$warning['issuer'] = str_replace('en ', 'er ', substr($line, 15));
break;
case 5:
$warning['issuetime'] = new DateTime(substr($line, strpos($line, ', ') + 2, 16));
break;
default:
if($j < count($xml->body->div->div[$i]->div->p) - 1)
{
if(array_key_exists('text', $warning))
$warning['text'] .= ' ' . $line;
else
$warning['text'] = $line;
}
else
$warning['datacenter'] = $line;
}
}
$i++;
$result[] = $warning;
}
return $result;
}