WWWReader und Fernsehprogramm

Hallo,

hat jemand mal was gebaut das mittels WWWReader und Textparser von irgendeiner Webseite abgreift, was momentan - beispielsweise in ARD und ZDF - läuft

Alternativ: Kann mir jemand eine Webseite sagen, wo man das relativ leicht rausparsen kann.

Danke im Vorraus

gros_ibou

hab noch dieses Script auf Lager

<?
$simpleXMLElement = simplexml_load_file("http://www.tvmovie.de/rss/tvjetzt.xml"); // URL des RSS Feeds
$senderAnzahl = 15; // Anzahl der anzuzeigenden Sender

// Datenausgabe
for($i=0; $i<$senderAnzahl; $i++)
{
    $item = $simpleXMLElement->channel->item;
    $item = xmlToArray($item[$i]);
     $titel = "<b style=color:#C00000;>".$item['title']."</b>"; // Textfarbe anpassen
     $beschreibung = "<small>".$item['description']."</small>";
     $text = $titel."<br>".$beschreibung."<br>";
     $text = formatText($text);
     $searchArray = $item;
     echo "<table width='980px'>";
     if(array_key_exists('enclosure', $searchArray))
     {
         $image = $item['enclosure']['@attributes']['url'];
        echo "<tr>";
        echo "<td width='auto'height='80px'><div><img src=$image alt='not Found'></div></td>";
        echo "<td width='980px'><div style='text-align:left; margin-left:10px;'>$text</div></td>";
        echo "</tr>
";
    }
    else
    {
        echo "<tr>";
        echo "<td width='980px'><div style='text-align:left; margin-left:95px;'>$text</div></td>";
        echo "</tr>
";
    }
    echo "</table>
";
}


function xmlToArray($data)
{
    if(is_object($data))
    {
        $data = get_object_vars($data);
    }
      return (is_array($data)) ? array_map(__FUNCTION__,$data) : $data;
}

// Textformatierung
function formatText($text)
{
    $text = html_entity_decode($text);
    $text = str_replace("ö", "ö", $text);
    $text = str_replace("Ãœ", "Ü", $text);
    $text = str_replace("ü", "ü", $text);
    $text = str_replace("ä", "ä", $text);
    $text = str_replace("ß", "ß", $text);
    $text = str_replace("&ndash;", "-", $text);
    $text = str_replace('&#039;', "`", $text);
    $text = str_replace("&", "&", $text);
    $text = str_replace("Ö", "Ö", $text);
    $text = str_replace("„", "\"", $text);
    $text = str_replace("“", "\"", $text);
    $text = str_replace("–", "-", $text);
    $text = str_replace("„", "\"", $text);
    $text = str_replace("“", "\"", $text);
    $text = str_replace("„", "\"", $text);
    $text = str_replace("–", "-", $text);
    $text = str_replace("–", "-", $text);
    $text = str_replace("é", "é", $text);
    $text = str_replace("Ä", "Ä", $text);
    return $text;
}

?&gt;

Das ist mittlerweile geschrumpft. :smiley:

<?
$simpleXMLElement = simplexml_load_file("http://www.tvmovie.de/rss/tvjetzt.xml"); // URL des RSS Feeds
$senderAnzahl = 15; // Anzahl der anzuzeigenden Sender

// Datenausgabe
for($i=0; $i<$senderAnzahl; $i++)
{
    $item = $simpleXMLElement->channel->item;
    $item = xmlToArray($item[$i]);
     $titel = "<b style=color:#FFA943;>".$item['title']."</b>"; // Textfarbe anpassen
     $beschreibung = "<small>".$item['description']."</small>";
     $text = $titel."<br>".$beschreibung."<br>";
     $text = utf8_decode($text);
     $searchArray = $item;
     echo "<table width='980px'>";
     if(array_key_exists('enclosure', $searchArray))
     {
         $image = $item['enclosure']['@attributes']['url'];
        echo "<tr>";
        echo "<td width='auto'height='80px'><div><img src=$image alt='not Found'></div></td>";
        echo "<td width='980px'><div style='text-align:left; margin-left:10px;'>$text</div></td>";
        echo "</tr>
";
    }
    else
    {
        echo "<tr>";
        echo "<td width='980px'><div style='text-align:left; margin-left:95px;'>$text</div></td>";
        echo "</tr>
";
    }
    echo "</table>
";
}

function xmlToArray($data)
{
    if(is_object($data))
    {
        $data = get_object_vars($data);
    }
      return (is_array($data)) ? array_map(__FUNCTION__,$data) : $data;
}

?>

Danke!

gros_ibou

$simpleXMLElement = simplexml_load_file("http://www.tvmovie.de/rss/tv2015.xml"); // URL des RSS Feeds

der geht auch

Hallo,

Danke für das Skript. Die Feeds haben sich anscheinend geändert.
Ich habe versucht einfach die URL anzupassen.
Das gelingt zwar aber es kommt immer folgende Meldung aus dem Skript:

Mein Skript sieht folgendermaßen aus:

<?
$simpleXMLElement = simplexml_load_file("http://www.tvspielfilm.de/tv-programm/rss/heute2015.xml"); // URL des RSS Feeds
$senderAnzahl = 10; // Anzahl der anzuzeigenden Sender

// Datenausgabe
for($i=0; $i<$senderAnzahl; $i++)
{
    $item = $simpleXMLElement->channel->item;
    $item = xmlToArray($item[$i]);
     $titel = "<b style=color:#FFA943;>".$item['title']."</b>"; // Textfarbe anpassen
     $beschreibung = "<small>".$item['description']."</small>";
     $text = $titel."<br>".$beschreibung."<br>";
     $text = utf8_decode($text);
     $searchArray = $item;
     echo "<table width='980px'>";
     if(array_key_exists('enclosure', $searchArray))
     {
         $image = $item['enclosure']['@attributes']['url'];
        echo "<tr>";
        echo "<td width='auto'height='80px'><div><img src=$image alt='not Found'></div></td>";
        echo "<td width='980px'><div style='text-align:left; margin-left:10px;'>$text</div></td>";
        echo "</tr>
";
    }
    else
    {
        echo "<tr>";
        echo "<td width='980px'><div style='text-align:left; margin-left:95px;'>$text</div></td>";
        echo "</tr>
";
    }
    echo "</table>
";
}

function xmlToArray($data)
{
    if(is_object($data))
    {
        $data = get_object_vars($data);
    }
      return (is_array($data)) ? array_map(__FUNCTION__,$data) : $data;
}

?>

Weiß jemand Rat?
Gibt’s ne bessere o. funktionierende Möglichkeit?

Danke im Voraus

Gruß

m.

Das Programm funktioniert mit TV Movie immer noch so wie in Post 3 und das schon seit Jahren.

Bei TV Spielfilm sind Änderungen nötig.

Wenn ich den „JETZT“ Feed benutze kommt bei mir irgendwas von 5:30. Das ist aber nicht „Jetzt“
Deswegen hatte ich TV Spielfilm getestet und da hat er die richtigen Zeiten gezeigt

Cache Problem?

Danke

Hier ein Beispiel von eben (11:52)

Das liegt am Feed und nicht am Script. Außerdem ist dein Script für 20 Uhr 15 :confused:

Setzt das unter deinen Aufruf und Du siehst es selber.

print_r($simpleXMLElement);

Im Script einmal ausführen und in der Scriptausgabe nachsehen.!

Hier das Script was ich selbst im Einsatz habe. Einfach die Refresh-Sekunden anpassen und die Ausgabe-Variable. Und dann halt auskommentieren, ob du 20.15 willst, jetzt, usw.

<?
// KONFIGURATION
$senderAnzahl = 1000; // Anzahl der anzuzeigenden Sender festlegen, oder für alle so lassen
$ausgabeVariable = 51552 /*[Skripte & Variablen\TV Programm\TV MOVIE\TV Programm 20.15 Uhr]*/;  // Hier die ID der String-Variable mit HTMLBox Profil eintragen
$refreshtime = 21600 // Aktualisiert die Daten alle 4 Stunden (bei Programm für 20.15 Uhr usw. reicht einmal am Tag

$url='http://www.tvmovie.de/rss/tv2015.xml';                 // TV Programm 20.15 Uhr
//$url='http://www.tvmovie.de/rss/tv2200.xml';               // TV Programm 22.00 Uhr
//$url='http://www.tvmovie.de/rss/tvjetzt.xml';              // TV Programm JETZT
//$url='http://www.tvmovie.de/rss/tvtipps-spielfilm.xml';    // TV Programm SPIELFILME


// AB HIER NICHTS MEHR ÄNDERN
IPS_SetScriptTimer($_IPS['SELF'], $refreshtime);
$simpleXMLElement = simplexml_load_file($url);
$str =  "<table width='auto'>";

// Datenausgabe
for($i=0; $i<$senderAnzahl; $i++)
{
	 $item = $simpleXMLElement->channel->item;
    $item = xmlToArray($item[$i]);
     if (is_string($item['title']))  {
	  }
	  else  {
		  continue;
	  }
     $titel = "<b style=color:#C00000;>".$item['title']."</b>";
     $beschreibung = "<small>".$item['description']."</small>";
     $text = $titel."<br>".$beschreibung."<br>";
     $text = utf8_decode($text);
     $searchArray = $item;
     
     // IF-Abfrage, wenn Array zu Ende, dann abbrechen
     if(isset($searchArray['enclosure']) != true)  {
        break;
     }
     if(array_key_exists('enclosure', $searchArray))
     {
         $image = $item['enclosure']['@attributes']['url'];
        $str .= "<tr>";
        $str .= "<td width='auto'height='80px'><div><img src=$image alt='not Found'></div></td>";
        $str .= "<td width='980px'><div style='text-align:left; margin-left:10px;'>$text</div>";
        $str .= "</td></tr>
";
    }
    else
    {
        $str .= "<tr>";
        $str .= "<td></td><td width='980px'><div style='text-align:left; margin-left:10px;'>$text</div></td>";
        $str .= "</tr>
";
    }
}
$str .= "</table>
";

SetValue($ausgabeVariable, $str);

function xmlToArray($data)
{
    if(is_object($data))
    {
        $data = get_object_vars($data);
    }
      return (is_array($data)) ? array_map(__FUNCTION__,$data) : $data;
}

?>

Sieht dann so im WebFront aus:

Grüße,
Chris

…,.was hat das damit zutun, dass im Feed die falsche Zeit steht. :confused::smiley:

Achsooooooo…überlesen :smiley: Da sollte man einen anderen Feed nehmen oder damit leben :smiley: :stuck_out_tongue:

Grüße,
Chris

Ja, im Skript steht die falsche Uhrzeit, Sorry.
Der Fehler ist dennoch der beschriebene:

Skript für jetzt sieht richtiger Weise so aus:


<?
$simpleXMLElement = simplexml_load_file("http://www.tvmovie.de/rss/tvjetzt.xml"); // URL des RSS Feeds
$senderAnzahl = 15; // Anzahl der anzuzeigenden Sender

// Datenausgabe
for($i=0; $i<$senderAnzahl; $i++)
{
    $item = $simpleXMLElement->channel->item;
    $item = xmlToArray($item[$i]);
     $titel = "<b style=color:#FFA943;>".$item['title']."</b>"; // Textfarbe anpassen
     $beschreibung = "<small>".$item['description']."</small>";
     $text = $titel."<br>".$beschreibung."<br>";
     $text = utf8_decode($text);
     $searchArray = $item;
     echo "<table width='980px'>";
     if(array_key_exists('enclosure', $searchArray))
     {
         $image = $item['enclosure']['@attributes']['url'];
        echo "<tr>";
        echo "<td width='auto'height='80px'><div><img src=$image alt='not Found'></div></td>";
        echo "<td width='980px'><div style='text-align:left; margin-left:10px;'>$text</div></td>";
        echo "</tr>
";
    }
    else
    {
        echo "<tr>";
        echo "<td width='980px'><div style='text-align:left; margin-left:95px;'>$text</div></td>";
        echo "</tr>
";
    }
    echo "</table>
";
}

function xmlToArray($data)
{
    if(is_object($data))
    {
        $data = get_object_vars($data);
    }
      return (is_array($data)) ? array_map(__FUNCTION__,$data) : $data;
}

?>


Hallo Bayaro,

Skript funktioniert tadellos.
Nur fehlt ein Semikolon vor $URL

Danke.

Gruß

Meiko

Hallo Bayaro,

setzte mich gerade mit Deinem Script auseinander. Hab auch schon einiges verstanden. Aber wofür ist denn:

     if (is_string($item['title']))  {
      }
      else  {
          continue;
      }

?

So, hab noch ein wenig mit dem Script rumgespielt.

mit den Änderungen in u.g. Script kann man jetzt auch TV-Spielfilm ohne Fehler anzeigen lassen. Bei denen stimmt die „jetzt“ Anzeige. Zudem haben die in ihren Spielfilmen deutlich weniger Pay-Kanäle. Gestern hatte ich bei TV-Movie nur 5 von 20 freie Kanäle mit Spielfilmen. Bei TV-Spielfilm warens 18.
Zudem hab ich einen Filter eingebaut, mit dem man Sender die man nicht bekommt, auch nicht anzeigt.
Die Titel sind jetzt verlinkt zur Sendung für mehr Infos. (neuer Tab/Fenster).
Sind noch ein paar Zeilen zur Fehlerbehandlung drin. Manche geändert, manche hinzugefügt, wenn z.b. kein Bild dabei ist, oder keine Beschreibung.
Welcher Feed angezigt werden soll hab ich in ein Int-Variable mit entsprechendem Profil ausgelagert. Das selbe könnte man jetzt noch mit den abzufragenden Einträgen machen.
Den Timer hab ich raus genommen. Bei mir wird das Script durch Klick auf eine Feed-Auswahl angestossen.

<?
// KONFIGURATION
$senderAnzahl = 20; // Anzahl der anzuzeigenden Sender festlegen, oder für alle so lassen
$ausgabeVariable = 31187 /*[Test\WF\Diverse\TV-Programm\TV-Programm]*/ ;  // Hier die ID der String-Variable mit HTMLBox Profil eintragen
$url = getvalue(40483 /*[Test\WF\Diverse\TV-Programm\URL]*/ );
$j = 0; // anzeigezähler

// TV-Movie
//$url='http://www.tvmovie.de/rss/tvjetzt.xml';              // TV Programm JETZT Zeiten stimmen nicht, kommt aber Feed
//$url='http://www.tvmovie.de/rss/tv2015.xml';               // TV Programm 20.15 Uhr
//$url='http://www.tvmovie.de/rss/tv2200.xml';               // TV Programm 22.00 Uhr
//$url='http://www.tvmovie.de/rss/tvtipps-spielfilm.xml';    // TV Programm SPIELFILME

// TV Spielfilm
//$url = 'http://www.tvspielfilm.de/tv-programm/rss/jetzt.xml';         // TV Programm JETZT
//$url = 'http://www.tvspielfilm.de/tv-programm/rss/heute2015.xml';    // TV Programm 20.15 Uhr
//$url = 'http://www.tvspielfilm.de/tv-programm/rss/heute2200.xml';  // TV Programm 22.00 Uhr
//$url = 'http://www.tvspielfilm.de/tv-programm/rss/filme.xml';      // TV Programm SPIELFILME
//$url = 'http://www.tvspielfilm.de/news/rss.xml';                   // TV News


//$simpleXMLElement = simplexml_load_file($url); // org zeile
$simpleXMLElement = simplexml_load_file($url,'SimpleXMLElement',LIBXML_NOCDATA);
$str =  "<table width='auto'>";

// Datenausgabe
for($i=0; $i<$senderAnzahl; $i++)
{
     $item = $simpleXMLElement->channel->item;
      $item = xmlToArray($item[$i]);
     if (is_string($item['title']))  {
      }
      else  {
          continue;
      }
      // Sender die nicht angezigt werden sollen. Teilstring reicht, nicht casesensitiv.
        if(stristr($item['title'], 'sky') == FALSE
            and stristr($item['title'], 'mgm') == FALSE
            and stristr($item['title'], 'disney') == FALSE
            and stristr($item['title'], 'kinowelt') == FALSE
            and stristr($item['title'], 'sony') == FALSE)
              {
            }
        else
            {
               continue;
            }
      $link = $item['link'];
     //$titel = "<b style=color:#C00000;>".$item['title']."</b>"; // org zeile
     $titel = "<b><a href=".$link." style='text-decoration:none; color:grey' target='_blank'>".$item['title']."</a> </b>";
        if (empty($item['description']))
           {$beschreibung = "";}
        else
            {$beschreibung = "<small>".$item['description']."</small>";}
      $j += 1;
     $text = $j .". ". $titel."<br>".$beschreibung."<br>";
     $text = utf8_decode($text);
     $searchArray = $item;

     // IF-Abfrage, wenn Array zu Ende, dann abbrechen
     if(isset($searchArray['title']) != true)  {
        break;
     }
     if(array_key_exists('enclosure', $searchArray))
     {
        $image = $item['enclosure']['@attributes']['url'];
        $str .= "<tr>";
        $str .= "<td width='auto'height='80px'><div><img src=$image alt='not Found'></div></td>";
        $str .= "<td width='980px'><div style='text-align:left; margin-left:10px;'>$text</div>";
        $str .= "</td></tr>
";
    }
    else
    {
        $str .= "<tr>";
        $str .= "<td></td><td width='980px'><div style='text-align:left; margin-left:10px;'>$text</div></td>";
        $str .= "</tr>
";
    }
}
$str .= "</table>
";

SetValue($ausgabeVariable, $str);

function xmlToArray($data)
{
    if(is_object($data))
    {
        $data = get_object_vars($data);
    }
      return (is_array($data)) ? array_map(__FUNCTION__,$data) : $data;
}

?>


Hab’s auch mal kopiert, danke. Jetzt kommen wieder Bilder :smiley:

Gruß
Bruno

Hallo Wolfgang,
bin noch nicht der Symcon Profi und habe zu deinem Script eine Frage.

Was ist die Variable 40483 in deinem Script und wie hast du es hinbekommen die verschiedenen XML’s auszuwählen.
Bekomme immer Script Fehler, da ich keine 40483 habe.

Ich habe vorerst die URL: $url = ‚http://www.tvspielfilm.de/tv-programm/rss/jetzt.xml‘; eingeblendet (also ohne//) und habe jetzt in der HTML Box den Inhalt. Würde aber auch gerne zwischen den Url’s bzw. verschiedenen Prgrammzeiten (TV jetzt, ab 20.15…) auswählen.

Danke
Josch

Moin !

40483 ist einfach nur bei ihm eine Variable in der die URL steht. Kannst du aber auch direkt ins Skript schreiben.

Eine Variante wäre >> Einfach das Skript 4 mal verwenden. Also 4 Skripte jeweils für die unterschiedlichen Programminformationen. 4 HTMLBoxen im WebFront und bei Bedarf mit „SetHidden“ arbeiten :slight_smile:

Grüße,
Chris