Verkehrsmeldungen für die Nordlichter (Großraum Hamburg)

Hallo Leute,

auch heute möchte ich mich bedanken für die vielen wertvolle Beiträge in diesem Forum, und für die geduldigen Antworten auf meine Anfängerfragen.:wink:

Es geht um ein rudimentäres Skript für Verkehrsmeldungen im Großbereich Hamburg:

  1. Einrichten eines WWW Readers bei den I/O Instanzen, Link lautet:
  1. Erstellen von vier verschiedenen String-Variablen:
  • „Gefahr“
  • „Autobahnen“
  • „Bundesstraßen“
  • „Sonstige“
  1. Einrichten eines Textparsers der die vier verschiedene String-Variablen in dieser Reihenfolge jeweils mit „Get Text between“ füllt:
  • „<h2>Gefahr</h2>“ bis „</ul></li>“ - füllt String-Variable „Gefahr“
  • „<h2>Autobahnen</h2>“ bis „</ul></li>“ - füllt String-Variable „Autobahnen“
  • „<h2>Bundesstraßen</h2>“ bis „</ul></li>“ - füllt String-Variable „Bundesstraßen“
  • „<h2>Sonstige</h2>“ bis „</ul></li>“ - füllt String-Variable „Sonstige“
  1. Skript erstellen mit folgendem Inhalt:
<?

//$string = zu durchsuchender Text
//$mark = zu suchende Stelle, Format: Anfangsmarke*Endmarke
//Text: "<div>*</div></li>"
//Link: "icons/*.gif"

echo "<body bgcolor='#27292b' text='#ffffff'>"; // Farbe anpassen oder style entfernen
// Link für die Grafik der Verkehrssituation
$Link = "http://data.ndr.de/ndrstau/generated/gesamt.jpg";
// Grafik einfügen in das Ergebnis
echo "<img src=\"$Link\" title=\"Gesamt\">";

// Gefahrenmeldungen aus dem Ausschnitt extrahieren
$Gefahrendaten = get_mark(GetValueString(25715 /*[Sonstige Daten\Verkehrsmeldungen\Gefahr]*/ ),"<div>*</div></li>");
// Gefahrenicons aus dem Auschnitt extrahieren
$GefahrenIcon = get_mark(GetValueString(25715 /*[Sonstige Daten\Verkehrsmeldungen\Gefahr]*/ ),"icons/*.gif");
// Überschrift erstellen
$Gefahren = "<h3>Gefahr</h3>";
// In der folgenden Schleife wird der Text generiert.
for($i=0; $i < Count($Gefahrendaten); $i++)
{
// Macht den ersten Buchstaben zu einem Großbuchstaben
$IconTitel= ucfirst($GefahrenIcon[$i]);
// Icon und Text der Meldung
$Gefahren = $Gefahren."<h5>"."
"."<img src=\"../img/icons/gif/$GefahrenIcon[$i].gif\" title=\"$IconTitel\">"." ".$Gefahrendaten[$i]."</h5>";
}
// Eintragen der Meldung in das Fenster
echo $Gefahren."
";

// Für die weiteren Gruppen entsprechen fortfahren...
$Autobahndaten = get_mark(GetValueString(19047 /*[Sonstige Daten\Verkehrsmeldungen\Autobahnen]*/ ),"<div>*</div></li>");
$AutobahnIcon = get_mark(GetValueString(19047 /*[Sonstige Daten\Verkehrsmeldungen\Autobahnen]*/ ),"icons/*.gif");

$Autobahnen = "<h3>Autobahnen</h3>";
for($i=0; $i < Count($Autobahndaten); $i++)
{
$IconTitel= ucfirst($AutobahnIcon[$i]);
$Autobahnen = $Autobahnen."<h5>"."
"."<img src=\"../img/icons/gif/$AutobahnIcon[$i].gif\" title=\"$IconTitel\">"." ".$Autobahndaten[$i]."</h5>";
}
echo $Autobahnen."
";

$Bundesstrassendaten = get_mark(GetValueString(17771 /*[Sonstige Daten\Verkehrsmeldungen\Bundesstraßen]*/ ),"<div>*</div></li>");
$BundesstrassenIcon = get_mark(GetValueString(17771 /*[Sonstige Daten\Verkehrsmeldungen\Bundesstraßen]*/ ),"icons/*.gif");

$Bundesstrassen = "<h3>Bundesstraßen</h3>";
for($i=0; $i < Count($Bundesstrassendaten); $i++)
{
$IconTitel= ucfirst($BundesstrassenIcon[$i]);
$Bundesstrassen = $Bundesstrassen."<h5>"."
"."<img src=\"../img/icons/gif/$BundesstrassenIcon[$i].gif\" title=\"$IconTitel\">"." ".$Bundesstrassendaten[$i]."</h5>";
}
echo $Bundesstrassen."
";

$Sonstigedaten = get_mark(GetValueString(30818 /*[Sonstige Daten\Verkehrsmeldungen\Sonstige]*/ ),"<div>*</div></li>");
$SonstigeIcon = get_mark(GetValueString(30818 /*[Sonstige Daten\Verkehrsmeldungen\Sonstige]*/ ),"icons/*.gif");

$Sonstige = "<h3>Sonstige</h3>";
for($i=0; $i < Count($Sonstigedaten); $i++)
{
$IconTitel= ucfirst($SonstigeIcon[$i]);
$Sonstige = $Sonstige."<h5>"."
"."<img src=\"../img/icons/gif/$SonstigeIcon[$i].gif\" title=\"$IconTitel\">"." ".$Sonstigedaten[$i]."</h5>";
}
echo $Sonstige."
";


return;
// Diese Funktion trennt die relevanten Bereiche aus dem Ausschnitt heraus $string ist dabei der zu durchsuchende Gesamtstring, 
// in $Mark sind durch "*" getrennt der Beginn des zu suchenden Strings und das Ende des zu suchende Abschnittes. Beispiel für den Text "<div>*</div></li>"
function get_mark($string,$mark)
{
    $ausgabe = array();
    $template = explode("*",$mark);
    $mark = $template[0];
    $end = $template[1];
    $string = strstr($string,$mark);

    $temp = explode($mark,$string);
    $a = 1;
        foreach ($temp as $tempx)
                    {
                    $tempx = explode($end,$tempx);
                    $tempx = $tempx[0];
                    if ($tempx)
                            {
                            array_push ($ausgabe,$tempx);
                            }
                    }
    return $ausgabe;
}


?>

Die Icons kann man sich auch auf der NDR2-Seite direkt herunterladen, sind aber auch im Anhang.


Änderung: sysrun hat mich darauf aufmerksam gemacht, dass die Icon rechtlich ein Problem darstellen könnten, ich kann das nicht beurteilen, möchte aber selbstverständlich weder den Forenbetreibern noch irgendjemanden Probleme bereiten.
Die Dateien die bis dato aufgetaucht sind heißen:

  • baustelle.gif
  • stau.gif
  • stoerung.gif
  • gefahr.gif
  • wetter.gif
  • sperrung.gif

Wie es am Ende aussehen sollte, davon habe ich auch einen Screenshot in den Anhang gehängt. Über Feedback würde ich mich sehr freuen, insbesondere aber über weitere Verbesserungsvorschläge…
und vielleicht lerne ich ja dabei noch ein paar IPS-Fans aus dem Großraum Hamburg kennen?:cool:

Joachim

Schicke Sache :slight_smile:

Ich würde allerdings die Icons hier entfernen! Das kann mächtig Ärger geben. Wenn einer meint er möchte die Icons von der Originalseite nehmen ist das seine Sache :wink:

Hi,

kann´ste HIER am 20.2.2009 persönlich, soll ich Dich auf die Liste setzen?

mfg

BerndJ

Hallo Bernd,

hatte den Thread schon gesehen - und auch gelesen. :wink:
Leider kann ich aus privaten Gründen derzeit keine langfristigen Zusagen zu solchen Dingen geben, wenn könnte ich mich höchstens kurzfristig dort hinzugesellen, interessant wäre es sicher allemal (außerdem baut Helmut gerade etwas für mich, dass ich dort vielleicht gleich hätte mitnehmen können ;)). Nur wenige Kilometer davon entfernt bin ich auch beruflich tätig, von daher wäre das entfernungsmäßig auch kein großer Akt.
Trotzdem vielen Dank der Nachfrage!

Joachim

Moin, moin,
ich scheitere derzeit am Textparser, l.t. DEBUG kommt die geladene Website hier auch an, aber die Variablen werden nicht gefüllt. Ich habe schon die Text geändert, aber leider keine Änderung.

Frage: Kann/ Muss ich Hochkomma in den Suchtags ‚escapen‘?

Tag eins: <h2><a name=„autobahnen“>Autobahnen</a></h2>
oder
Tag eins: <h2><a name=„autobahnen“>Autobahnen</a></h2>

Anmerkung: Die Webseite hat sich mittlerweile auch geändert->
http://www.ndr.de/regional/verkehr/verkehr191.html

MfG Frank

Hallo Frank,

leider hatte sich nicht nur die Website geändert, so dass ich das Ganze umstricken musste und nun den RSS-Feed nutze. Hier mal die neue Version:

<?
 $xml = simplexml_load_file('http://www.ndr.de/regional/verkehr/feed105-verkehr_region-nord_format-rss.xml'); // URL des Atom 1.0 RSS Feeds

 $news_count = count($xml->channel->item); // Anzahl der im RSS Feed vorhandenen News
 $rss_feed = ""; // Titel des Feeds

//Hier werden die News, in der gewünschten Anzahl, eingelesen und formartiert.
 for($i=0;$i<$news_count;$i++) {
 $wert = $xml->channel->item[$i];
 $news = $wert->title;
 $news = utf8_decode($news);
 $news = "<b style=color:#C00000;>".$news."</b>"; // Textfarbe anpassen
 $description = $wert->description;
 $description = utf8_decode($description);
 $rss_feed .= $news."<br>"."<small>".$description."</small>"."<br>"."<br>";
 }
 //echo $rss_feed; // Zur Kontrolle oder als Ausgabe in IPS Version 1.0 bis 2.1
SetValueString(40381 /*[Nachrichten\NDR2 - Verkehrsmeldungen]*/  ,  $rss_feed);

?>

Das wird auf eine Variable vom Typ String gegeben, die als HTMLBox angezeigt wird. Aktualisierung habe ich auf alle 5 Minuten gestellt.

Der „Prinzip“-Code ist hier aus dem Forum und hierzu finden. Ist ganz sicher interessant, da mal reinzuschauen.

Joachim

Hallo Joachim,

vielen Dank, werde ich gleich mal ausprobieren.

MfG Frank