En la recepción de nuestra oficina tenemos unas pantallas donde hay montada una red de IPTV basada en la solución de MediaStar.

Como eso de dejar puestas tres cadenas de televisión simultáneas y en silencio no tiene ninguna gracia, y mientras no se configurara un canal corporativo o algo oficial, quería poner algún script en php que mostrara algo mejor. Ni en HotScripts ni googleando encontré lo que buscaba, así que en un ratillo que le dediqué, y más retoques de los siguientes días, monté lo siguiente.

  • Gallery: una simple galería de fotos, que muestra de forma aleatoria las imágenes que están en un directorio (que identifico como gallery) y un tiempo de cambio (la variable seconds). Básicamente tengo el directorio ‘galleries‘ compartida de forma que una serie de personas pueden crear allí los diferentes directorios y poner las imágenes.Por ejemplo, se configura en el sistema de IPTV que muestre algo tipo http://servidor/gallery/index.php?gallery=corporate&seconds=300 y con eso mostramos vamos cogiendo imágenes al azar del directorio corporate, realizando el refresco cada 5 minutos.
<?php
$seconds=intval($_GET["seconds"]);
if ($seconds==0)
{    $seconds=300;
}
if(!isset ($_GET['gallery']))
{
    print("No gallery specified");
    die();
}
if (! $handle = opendir('galleries/' . $_GET['gallery'] .'/'))
{
    print("Gallery doesn't exist");
    die();
}
$img = array();
while($file = readdir($handle)){
    if($file !== '.' && $file !== '..' && strstr($file,"jpg") )
    {
        $img[] = $file;
    }
}
$select = rand(0,sizeof($img)-1);
$format = end(explode(".", $img[$select]));
$total = sizeof($img);
$num=0;

print("
<head>
<meta http-equiv='refresh' content='" . $seconds . "'> 
</head>
<body leftmargin='0' topmargin='0' marginwidth='0' marginheight='0'>
<img src='galleries/". $_GET['gallery'] ."/". $img[$select] ."' width='688' height='558'>
</body>");
?>
  • RSS News: muestra un pequeño carrusel de RSS que fuera mostrando las noticias más recientes de diferentes fuentes. Inicialmente mostraba la descripción, pero era tan variable que me desmontaba todo el diseño. Ya los títulos a veces son largos, y como los dispositivos de IPTV que tenemos tienen un tamaño de salida de 762 x 588 píxels tengo una seria limitación. La única variables que se le puede pasar es q para el número de entradas por canal. El refresco lo tengo forzado a 30 segundos, aunque esto se puede cambiar o pasarlo por variable de forma fácil.
<?php
$canales = array();
//----------------------------------------------------------------
$canales[]='http://www.324.cat/rss/not_notportada_rss.xml';
$canales[]='http://www.elpais.com/rss/feed.html?feedId=1022';
$canales[]='http://feeds.reuters.com/reuters/topNews';
$canales[]='http://feeds.reuters.com/reuters/UShealthcareNews';
$canales[]='http://feeds.reuters.com/reuters/scienceNews';
$canales[]='http://feeds.reuters.com/reuters/globalmarketsNews';
//----------------------------------------------------------------
date_default_timezone_set('Europe/Madrid');

$canal=intval($_GET["canal"]);
$canal_sig=$canal+1;
if ( $canal >= count($canales) )
{    $canal=0;
}
if ( $canal_sig >= count($canales) )
{    $canal_sig=0;
}

$items_per_channel=intval($_GET["q"]);
if ( $items_per_channel==0  )
{    $items_per_channel=4;
}

$xmlDoc[$canal] = new DOMDocument();
$xmlDoc[$canal]->load($canales[$canal]);

//get elements from "<channel>"
$channel=$xmlDoc[$canal]->getElementsByTagName('channel')->item(0);
$channel_title = $channel->getElementsByTagName('title')->item(0)->childNodes->item(0)->nodeValue;
$channel_link = $channel->getElementsByTagName('link')->item(0)->childNodes->item(0)->nodeValue;
$channel_desc = $channel->getElementsByTagName('description')->item(0)->childNodes->item(0)->nodeValue;

echo ("

<html>
  <head>
    <title>RSS Reader</title>
      <meta http-equiv='Content-Type' content='text/html; charset=utf-8'>
      <meta http-equiv='refresh' content='30;url=index2.php?canal=" . $canal_sig . "'> 
  </head>
<body background='logobackground.jpg' text='#FF8000' link='#FF8000' vlink='#FF8000' alink='#FF8000' leftmargin='50' topmargin='50' rightmargin='50' bottommargin='50'>
<font face='Verdana,Arial,Sans serif'><h1>" . $channel_title . "</h1>
<table><tr><td width='762' height='588' valign='top'>
");

//get and output "<item>" elements
$x=$xmlDoc[$canal]->getElementsByTagName('item');
for ($i=0; $i<$items_per_channel; $i++)
    {
    $item_title=$x->item($i)->getElementsByTagName('title')->item(0)->childNodes->item(0)->nodeValue;
    $item_link=$x->item($i)->getElementsByTagName('link')->item(0)->childNodes->item(0)->nodeValue;
    $item_desc=$x->item($i)->getElementsByTagName('description')->item(0)->childNodes->item(0)->nodeValue;
    $item_pubdate=$x->item($i)->getElementsByTagName('pubDate')->item(0)->childNodes->item(0)->nodeValue;
    //$item_nicedate=strftime("%d/%b/%Y %H:%M:%S", strtotime($item_pubdate));
    $item_nicedate=strftime("%H:%Mh", strtotime($item_pubdate));

    echo ("<p><b><font size='5' color='#505050'>" . $item_title . "</font></b>");
    echo ("<br />");
    //echo (implode(' ',array_slice(str_word_count($item_desc,1),0,20)) . "... <b><font size='-1'>- Updated: " . $item_nicedate . "</font></b></p>");
    echo ("<b><font size='-1'>Updated: " . $item_nicedate . "</font></b></p>");
}

echo ("
</td></tr></table></font>
</body>
</html>
");
?>