TV Programm

Moin,

basierend auf dem RSS Skript von Korni http://www.ip-symcon.de/forum/f53/rss-feeds-newsscript-6235/?highlight=rss habe ich mir das TV Programm der TV Spielfilm in eine html-Box erstellt.

Anleitung:

  • Code in leeres Skript kopieren
  • TV Logos in IPS Ordner webfront/user/icons/TV/ kopieren
  • Auswählen ob Programm für 20:15, 22:00, jetzt oder Spielfilme (einfach entsprechende Zeile im Code einkommentieren
  • max. Anzahl der Einträge anpassen
  • Skript laufen lassen
  • die automatisch erstellte „CONTENT“ Variable im WebFront verwenden

Gruß
Tobias

<?
/* Basis: RSS FEED Newsticker korny@korny.org
/* TV Programm: by Smokey

Script in einen Kategorie kopieren
Script gegebenenfalls umbenennen
Skrip ausführen, neue Variable "CONTENT" (wird automatisch angelegt) im WebFront benutzen
*/


//gewünschten Feed einkommentieren
//$url='http://www.tvmovie.de/rss/tvjetzt.xml'; // RSS FEED link eintragen
$url='http://www.tvmovie.de/rss/tv2015.xml'; // RSS FEED link eintragen
//$url='http://www.tvmovie.de/rss/tv2200.xml'; // RSS FEED link eintragen
//$url='http://www.tvmovie.de/rss/tvtipps-spielfilm.xml'; // RSS FEED link eintragen

$newsanzahl=7; // gewünschte Newsanzahl eingeben, keine aenderung = 5 News werden erstellt

// ab hier nicht mehr ändern


$group=0;
$id=$IPS_SELF;
$group=IPS_GetObject($id);
$group=$group['ParentID'];


$name=IPS_GetName($group);

// Hauptscript



$rss_channel = array();
$currently_writing = "";
$main = "";
$item_counter = 0;

function startElement($parser, $name, $attrs) {
   	global $rss_channel, $currently_writing, $main;
   	switch($name) {
   		case "RSS":
   		case "RDF:RDF":
   		case "ITEMS":
   			$currently_writing = "";
   			break;
   		case "CHANNEL":
   			$main = "CHANNEL";
   			break;
   		case "IMAGE":
   			$main = "IMAGE";
   			$rss_channel["IMAGE"] = array();
   			break;
   		case "ITEM":
   			$main = "ITEMS";
   			break;
   		default:
   			$currently_writing = $name;
   			break;
   	}
}

function endElement($parser, $name) {
   	global $rss_channel, $currently_writing, $item_counter;
   	$currently_writing = "";
   	if ($name == "ITEM") {
   		$item_counter++;
   	}
}

function characterData($parser, $data) {
	global $rss_channel, $currently_writing, $main, $item_counter;
	if ($currently_writing != "") {
		switch($main) {
			case "ITEMS":
				if (isset($rss_channel[$main][$item_counter][$currently_writing])) {
					$rss_channel[$main][$item_counter][$currently_writing] .= $data;
				} else {
					//print ("rss_channel[$main][$item_counter][$currently_writing] = $data<br>");
					$rss_channel[$main][$item_counter][$currently_writing] = $data;
				}
				break;
		}
	}
}

$xml_parser = xml_parser_create();
xml_set_element_handler($xml_parser, "startElement", "endElement");
xml_set_character_data_handler($xml_parser, "characterData");

$data=curl_string($url);
xml_parse($xml_parser,$data);
xml_parser_free($xml_parser);

// putting in array
$news=array();
if (isset($rss_channel["ITEMS"]))
{
	if (count($rss_channel["ITEMS"]) > 0)
		for($i = 0;$i < count($rss_channel["ITEMS"]);$i++) $news[]=$rss_channel["ITEMS"][$i];
}
$nr_news = "";
$c=0;
foreach($news as $key=>$val)
{
	if($c<$nr_news)
	{
#		echo "<p align=left>";
#		echo '<a href="'.$val['LINK'].'">'.$val['TITLE'].'</a> - '.$val['PUBDATE'].'<br>'.''.$val['DESCRIPTION'].'</font></p>';
	}
	$c++;
}


function curl_string ($url,$user_agent='Mozilla 4.0'){

       $ch = curl_init();

       curl_setopt ($ch, CURLOPT_URL, $url);
       curl_setopt ($ch, CURLOPT_USERAGENT, $user_agent);
       curl_setopt ($ch, CURLOPT_HEADER, 0);
       curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
       curl_setopt ($ch, CURLOPT_FOLLOWLOCATION, 1);
       curl_setopt ($ch, CURLOPT_TIMEOUT, 120);
       $result = curl_exec ($ch);
       curl_close($ch);
       return $result;

}
$news="";
for($i=0;$i<count($rss_channel['ITEMS']);$i++) {
	$j="0";
	$news[$i][$j]=$rss_channel['ITEMS'][$i]['TITLE']."";
	$j++;
	$news[$i][$j]=$rss_channel['ITEMS'][$i]['LINK']."";
	$j++;
	$news[$i][$j]=$rss_channel['ITEMS'][$i]['DESCRIPTION']."";
	$j++;
	$news[$i][$j]=""; //$rss_channel['ITEMS'][$i]['PUBDATE']."" ==> PUDATE gibt es bei TV Programm nicht
	$j++;
	$news[$i][$j]=$rss_channel['ITEMS'][$i]['GUID']."";
}

$result="";
$result = "<table width='90%' align='center'>
";
$result .= "<tr><td><b>Sender</b></td><td><b>Zeit</b></td><td><b>Sendung</b></td><td><b>Detail</b></td></tr>
";
for($i=0;$i<$newsanzahl;$i++) {
   $result .= "<tr>
";
   
   //Sender
   $temp ="";
	$newsline=$news[$i][0];
	$newsline=text_formatierung($newsline);
	$temp = substr($newsline,6,strpos($newsline," - ",6));
	$temp = substr($temp,0,strpos($temp," - "));
	switch($temp) {
   	case "ARD":
			$result .= "<td><img src=/user/icons/TV/ard_30x30.png></td>
";
         break;
   	case "ZDF":
			$result .= "<td><img src=/user/icons/TV/zdf_30x30.png></td>
";
         break;
   	case "RTL":
			$result .= "<td><img src=/user/icons/TV/rtl_30x30.png></td>
";
         break;
   	case "SAT.1":
			$result .= "<td><img src=/user/icons/TV/sat1_30x30.png></td>
";
         break;
   	case "PRO 7":
			$result .= "<td><img src=/user/icons/TV/pro7_30x30.png></td>
";
         break;
   	case "RTL II":
			$result .= "<td><img src=/user/icons/TV/rtl2_30x30.png></td>
";
         break;
   	case "S RTL":
			$result .= "<td><img src=/user/icons/TV/superrtl_30x30.png></td>
";
         break;
		default:
			$result .= "<td></td>
";
         break;
	}
	
   
   //Zeit
	$newsline=$news[$i][0];
	$newsline=text_formatierung($newsline);
   $result .= "<td>".substr($newsline,0,5)."</td>
";

	//Sendung
	$newsline=$news[$i][0];
	$newsline=text_formatierung($newsline);
   $result .= "<td>".substr($newsline,strpos($newsline," - ")+3,strlen($newsline)-strpos($newsline," - "))."</td>
";

	//Detail
	$newsline=$news[$i][2];
	$newsline=text_formatierung($newsline);
   $result .= "<td>".$newsline."</td>
";

   $result .= "</tr>
";
}
$result .= "</table>";

//Ergbenis in Variable schreiben
$vid = CreateVariableByName($group, "Content", 3);
//IPS_SetIcon($vid, "Distance");
IPS_SetVariableCustomProfile($vid, "~HTMLBox");
SetValue($vid, $result);


function text_formatierung($newsline){

// Hier können noch anpassungen gemacht werden

#$newsline=html_entity_decode($newsline);
#$newsline=str_replace("         ", " ", $newsline);
#$newsline=str_replace("ö", "ö", $newsline);
#$newsline=str_replace("Ãœ", "Ü", $newsline);
#$newsline=str_replace("ü", "ü", $newsline);
#$newsline=str_replace("ä", "ä", $newsline);
#$newsline=str_replace("ß", "ß", $newsline);
#$newsline=str_replace("&ndash;", "-", $newsline);
#$newsline=str_replace('&#039;', "`", $newsline);
#$newsline=str_replace("&", "&", $newsline);
#$newsline=strip_tags($newsline);


$newsline=strip_tags($newsline);
$newsline=html_entity_decode($newsline);
$newsline=str_replace("         ", " ", $newsline);
$newsline=str_replace("ö", "ö", $newsline);
$newsline=str_replace("Ãœ", "Ü", $newsline);
$newsline=str_replace("ü", "ü", $newsline);
$newsline=str_replace("ä", "ä", $newsline);
$newsline=str_replace("ß", "ß", $newsline);
$newsline=str_replace("&ndash;", "-", $newsline);
$newsline=str_replace('&#039;', "`", $newsline);
$newsline=str_replace("&", "&", $newsline);
$newsline=str_replace("Ö", "Ö", $newsline);
$newsline=str_replace("„", "\"", $newsline);
$newsline=str_replace("“", "\"", $newsline);
$newsline=str_replace("–", "-", $newsline);
$newsline=str_replace("„", "\"", $newsline);
$newsline=str_replace("“", "\"", $newsline);

$newsline=str_replace("„", "\"", $newsline);
$newsline=str_replace("–", "-", $newsline);
$newsline=preg_replace("/\r|
/s", "", $newsline);
return $newsline;
}

function CreateVariableByName($id, $name, $type)
{
    global $IPS_SELF;
    $vid = @IPS_GetVariableIDByName($name, $id);
    if($vid === false)
    {
        $vid = IPS_CreateVariable($type);
        IPS_SetParent($vid, $id);
        IPS_SetName($vid, $name);
        IPS_SetInfo($vid, "this variable was created by script #$IPS_SELF");
    }
    return $vid;
}

?>

TV.rar

TV.zip (29.6 KB)

so etwas ähnliches gibt es hier als direkte Ausgabe.

Hallo Rainer,
wenn ich den Inhalt Deines TV Scriptes direkt in das Webfront einbetten möchte (und nicht als Popup), welche Zeile(n) müsste ich da hinzufügen ?

Ich denke mir, dass es in eine Variable geschrieben werden müsste, die das Profil Textbox hat, oder ?

Nur…wie den Inhalt parsen…ein Tip wäre echt super.

Gruss
B71

Hallo Bernd,

leg dir eine Stringvariable mit Profil ~HTMLBox an und kopier das Script von hier.

<?
$simpleXMLElement = simplexml_load_file("http://www.tvmovie.de/rss/tv2015.xml"); // URL des RSS Feeds
$senderAnzahl = 15; // Anzahl der anzuzeigenden Sender
$str =  "<table width='980px'>";
// Datenausgabe
for($i=0; $i<$senderAnzahl; $i++)
{
    $item = $simpleXMLElement->channel->item;
    $item = xmlToArray($item[$i]);
     $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(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(53042 /*[TV Movie\TV]*/, $str);

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

?>

GENAU das meinte ich…wie immer DANKE für die prompte Antwort…

Gruss
Bernd

cool so hatte ich mir das auch vorgestellt.
nur die …tvjetzt.xml sieht anders formatiert aus.

dann versuch ich noch bei klick auf einen titel den kanäl des fernsehers zu wechseln

thx
mäc

Ja…die TV Jetzt ist irgendwie nach rechts verrutscht…was aber wohl eher an der Ursprungs XML Liegen sollte, da die anderen Feeds sauber durchlaufen.

Zeile 25 und 26 austauschen.

$str .= "<td></td><td width='980px'><div style='text-align:left; margin-left:10px;'>$text</div></td>";
        $str .= "</tr>
";

das liegt daran, das manche keine Bilder haben, jetzt passt es.

PS: habs oben geändert.

manno, das ist fix, da bin ich das xml noch gar nicht durch um mir mal an zu schauen was da so kommt.

offensichtlich ist nicht direkt der sender erkennbar. nur aus dem titel. hatte die idee nur gewünschte sender dann dar zu stellen. dann daran den kanal für den fernseher fest machen. aber gemach…

Hallo Bernd,

was meinst Du mit

Schöne Grüße,
Stephan

Ich habe mir im Objektbaum eine neue Variable (56264) angelegt und dieser als Prifil HTMLBox zugewiesen. Dann ein neues Script (23415) erstellt und den Inhalt des Scripts von RWN rein kopiert. Im Script wurde diese Zeile (SetValue(53042 /[TV Movie\TV]/, $str):wink: noch an meine VariablenID 56264 angepasst.

TV-Movie1.PNG

Hallo Jürgen,

es kann so einfach sein. :wink:

Vielen Dank für Deine Hilfe,
Stephan

Gerne, bin auch immer froh, wenn ich hier Hilfe bekomme. Und das Forum hier ist so klasse, dass dir eigentlich immer geholfen wird.

Hat denn irgendjemand so etwas schon mal mit den österreichischen Sendern gemacht, vielleicht auch mit einem anderen RSS Feed? Ich finde das Script echt fein, aber mir als Österreicher fehlen halt ORF1 und ORF2, ATV…nicht mal wenn ich mir 50 Sender anzeigen lasse sind die dabei!

Du musst doch nur eine andere URL für den RSS Feed eintragen.

Wenn ich bei Google nach „österreich tv programm rss“ finde ich diverse Treffer ;).

Ne komm, ist jetz aber nicht wahr oder? Ich hatte das vorhin schon probiert, da gabs jede Menge Fehler. Okay, ich versuch das nochmal :smiley:

Eigentlich schon, ich nutze das RSS Script auch für den Tagesschau und Heise Ticker.

Leider finde ich keinen geeigneten RSS Feed, der mir sowohl die Sender von TVMovie als auch die österreichischen beeinhaltet. Da werde ich das Script wohl nochmal extra anlegen müssen für die Österreicher.

Hat jemand einen Tipp für einen passenden RSS-Feed für Sky?

Hallo,

wenn ich das Skript starte, erhalte ich folgende Fehlermeldung. Leider kann ich den fehler nicht finden.

  • Icons sind kopiert
  • Skript wurde 1zu1 übernommen
  • Program ausgewählt

Hab ich was vergessen?

Fatal error: Call to undefined function curl_init() in [TV\TV Programm] on line 117

Gruß Steve