Hallo zusammen,
Hallo squeeezer,
ich habe gestern dein Script aus Post # 10 gefunden, um die Wetterberichte vom DWD in meine View einzubinden.
<?
$forecast = API_GetWeatherForecastText("DWEH");
#print_r($forecast);
// String Variablen anlegen
SetValue(29950 /*[-= in Arbeit\Wetterbericht\DWD_Wetterbericht_NRW\DWD Wetterbericht Tag 1]*/, $forecast[short]);
#SetValue(52393 /*[-= in Arbeit\Wetterbericht\DWD_Wetterbericht_NRW\DWD Wetterbericht Tag 1 Heute]*/, $forecast[today]);
#SetValue(21406 /*[-= in Arbeit\Wetterbericht\DWD_Wetterbericht_NRW\DWD Wetterbericht Tag 2 Morgen]*/, $forecast[tomorrow]);
#SetValue(58873 /*[-= in Arbeit\Wetterbericht\DWD_Wetterbericht_NRW\DWD Wetterbericht Tag 3 Übermorgen]*/, $forecast[secondday]);
#SetValue(38477 /*[-= in Arbeit\Wetterbericht\DWD_Wetterbericht_NRW\DWD Wetterbericht Tag 4 Überübermorgen]*/, $forecast[thirdday]);
function API_GetWeatherForecastText($stateCode)
//Findet zum übergebenen DWD-StateCode entsprechende Wettervorhersagen als Texte
//Übergabe: [STRING]$stateCode = Bundesland-Code, z.B. DEWG für Hessen
//Rückgabe: [ARRAY] = Wettervorhersagetexte
{
//Fehlerbehandlung
if(!isset($stateCode)) die("Error in Function ".__FUNCTION__." - Missing argument for \$stateCode");
if(!is_string($stateCode)) die("Error in Function ".__FUNCTION__." - Value for parameter \$stateCode is not a string");
//API URL
$url = "https://opendata.dwd.de/weather/text_forecasts/html/";
//Vergangene Zeitcodes berechnen, Mögliche Zeitcodes
$timeCodeArray = array("td2334","td2134","td1934","td1834","td1734","td1634","td1534","td1434","td1334","td1234","td1134","td1034","td0934","td0834","td0734","td0634","td0534","td0334","td0134","yd2334","yd2134","yd1934","yd1834","yd1734","yd1634","yd1534");
//Zeitcodes durchlaufen
foreach($timeCodeArray as $key => $row)
{
//Zeitcode splitten
$timeCodeSplit = str_split($row,2);
//Zeitcode abhängig vom Tag in Timestamp umwandeln
if($timeCodeSplit[0] == "td") $timestamp = mktime($timeCodeSplit[1],$timeCodeSplit[2],0);
if($timeCodeSplit[0] == "yd") $timestamp = mktime($timeCodeSplit[1],$timeCodeSplit[2],0,date("m",strtotime("-1 day")),date("d",strtotime("-1 day")),date("Y",strtotime("-1 day")));
//Zeitcode liegt unterhalb der aktuellen Zeit
if($timestamp < time())
{
//Array Key merken und beenden
$index = $key;
break;
}
}
//Neues Array erstellen
$targetCodeArray = array();
//Letzte 5 Zeitcodes durchlaufen
for($i = $index; $i < $index + 5; $i++)
{
//Zeitcode splitten
$targetCodeSplit = str_split($timeCodeArray[$i],2);
//Zeitcode abhängig vom Tag in Zielcode umwandeln
if($targetCodeSplit[0] == "td") $targetCode = date("d").$targetCodeSplit[1].$targetCodeSplit[2];
if($targetCodeSplit[0] == "yd") $targetCode = date("d",strtotime("-1 day")).$targetCodeSplit[1].$targetCodeSplit[2];
//Zielcode in neues Array ablegen
array_push($targetCodeArray,$targetCode);
}
//Variablen für Vorhersagetexte initialisieren
for($i = 0; $i <= 3; $i++) $text[$i] = "";
$textTimestamp = 0;
//Vorhersagetage durchlaufen
for($i = 0; $i <= 3; $i++)
{
//Falls noch kein Text für den Vorhersagetag gespeichert ist
if(!$text[$i])
{
//Zeitcodes durchlaufen
foreach($targetCodeArray as $row)
{
//Filename zusammenbauen
$filename = strval("VHDL".(50 + $i)."_".$stateCode."_".$row."_html");
//Text holen, wenn vorhanden
$content = @file_get_contents($url.$filename);
//Erfolgreich
if($content)
{
//Text übernehmen
$text[$i] = $content;
//Falls noch kein Timestamp bestimmt wurde
if(!$textTimestamp)
{
//Timecode splitten
$split = str_split($row,2);
//Falls Tag nicht dem aktuellen Tag entspricht
if(intval($split[0]) != intval(date("d")))
{
//Timestamp von gesten benutzen
$textTimestamp = mktime($split[1],$split[2],0,date("m",strtotime("-1 day")),date("d",strtotime("-1 day")),date("Y",strtotime("-1 day")));
}
//Tag entspricht aktuellem Tag
else
{
//Timestamp von heute benutzen
$textTimestamp = mktime($split[1],$split[2],0);
}
}
//Schleife abbrechen
break;
}
}
}
}
//Erster Texteintrag in Kurzbericht und ausführlichen Bericht aufteilen
$firstTextSplit = explode("</strong>",$text[0]);
//Rückgabe formatieren und Array zusammenstellen
$return["short"] = trim(strip_tags($firstTextSplit[0]));
$return["today"] = trim(str_replace("
"," ",strip_tags($firstTextSplit[1])));
$return["tomorrow"] = trim(strip_tags($text[1]));
$return["secondday"] = trim(strip_tags($text[2]));
$return["thirdday"] = trim(strip_tags($text[3]));
$return["timestamp"] = $textTimestamp; //Rückgabe
return $return;
}
?>
Ich habe mir 5 String Variablen angelegt um diese mit den Werten zu füllen. Die Variablen werden gefüllt… Das Script gibt aber ein „Warning“ aus.
Warning: Use of undefined constant short - assumed 'short' (this will throw an Error in a future version of PHP) in /var/lib/symcon/scripts/include_DWD_Wettervorhersage_Text.ips.php on line 7
Was mache ich hier falsch?
Beste Grüße
Kai
Edit: Fehler gefunden…