Récupérer l'EPG de Télépoche en XMLTV

Avatar de l’utilisateur
Eléphant du PHP | 103 Messages

27 févr. 2017, 21:38

Bonjour,
Beaucoup de sites existent pour graber l'EPG en XML TV. La plupart (non, tous) utilisent Télérama. J'ai un script pour Télérama, mais je dois le peaufiner.

Donc, j'ai décidé de partager avec vous, un script PHP qui récupère l'EPG de TéléPoche. Cela sera parfait pour des plateformes telles que Kodi ou MythTV. Il a l'avantage d'être léger contrairement à celui de Télérama qui est vraiment complet au niveau de la description. Le désavantage est qu'il y a moins de chaines mais le principal est là. D'ailleurs, dans l'array, vous pouvez en enlever si certaines ne vous intéressent pas. Je n'ai pas activé la MAJ auto de la liste des chaines car les ID peuvent changer et ce serait problématique.

Voici le script, il est pas beau mais il fonctionne. L'EPG est réactualisé chaque jour pour une semaine :
<?php
ini_set("display_errors",0);error_reporting(0);
if(date('Ymd') <> date('Ymd',filemtime("complet.xml")))
{
set_time_limit(0);
header("Content-Type: application/force-download");
header("Content-Disposition: attachment; filename=\"Telepoche-".date('Y-m-d').".xml\""); 
$blah = '<?xml version="1.0" encoding="UTF-8"?>

<tv source-info-url="http://telepoche.com/" source-data-url="http://telepoche.com/" generator-info-url="http://forum-racacax.ga/">
';
$lolo = $lolo.$blah;
echo $blah;
$listechaine = array('tf1','france2','france3','canalplus','france5','m6','arte','c8','w9','tmc','nt1','nrj12','lcp2424','france4','bfmtv','cnews','cstar','gulli','franceo','hd1','lequipe','6ter','numero23','rmcdecouverte','cherie25','teva','tv5mondefbs','parispremiere','rtl9','ab1','tvbreizh','mcm','canalpluscinema','canalplussport','canalplusseries','canalplusfamily','canalplusdecale','ocsmax','ocscity','ocschoc','ocsgeants','polar','cinefx','cinepluspremier','cineplusemotion','cineplusfamiz','cineplusclub','cineplusclassic','disneychannelplus1','disneychannel','boomerang','piwiplus','babytv','boing','equidialive','equidialife','abmoteurs','beinsports1','beinsports2','eurosport','eurosport2','tracesports','girondinstv','lci','bfmbusiness','ushuaiatv','histoire','animaux','chasseetpeche','toutelhistoire','nolife','gameone','traceurban','nrjhits','m6music','mcmtop','tracetropical','mezzo','mezzolivehd','mensup','kto','cnninternational','cnbc','bbcworld','aljazeerauk','bestofshopping','astrocentertv','luckyjacktv','cctvf','motorstv','oltv','vivolta','publicsenatlcpan','paramountchannel','nationalgeographicchannel','nationalgeographicwild','voyage','ofivetv','just4talent','bloombergtv','publicsenat2424','mcetv','tv7bordeaux','8montblanc','telegrenoble','bravahdtv','mtv','jone','mcs','serieclub','13emerue','comedieplus','syfy','eentertainment','mangas','mcsbienetre','planeteplus','planeteplusci','planeteplusae','discoverychannel','discoveryscience','infosport','mcsextreme','golfplus','extremesportschannel','disneyjunior','tiji','nickelodeon','nickelodeonjunior','canalj','cartoonnetwork','disneyxd','mtvhits','action','cineplusfrisson','cinepluspremierbe','clubrtl','laune','ladeux','latrois','plugrtl','rtltvi','rtsun','rtsdeux','seasonsplus','teletoonplus','be1','becine','beseries','besport1','besport2','cineplusclassicbe','cineplusfrissonbe');

// $get1 = html_entity_decode(file_get_contents('http://www.telepoche.fr/programme-tv/grille/'.date('Y-m-d').'/orange').file_get_contents('http://www.telepoche.fr/programme-tv/grille/'.date('Y-m-d').'/free').file_get_contents('http://www.telepoche.fr/programme-tv/grille/'.date('Y-m-d').'/bouygues').file_get_contents('http://www.telepoche.fr/programme-tv/grille/'.date('Y-m-d').'/sfr').file_get_contents('http://www.telepoche.fr/programme-tv/grille/'.date('Y-m-d').'/numericable').file_get_contents('http://www.telepoche.fr/programme-tv/grille/'.date('Y-m-d').'/canal-et-canalsat').file_get_contents('http://www.telepoche.fr/programme-tv/grille/'.date('Y-m-d').'/cable-adsl-satellite').file_get_contents('http://www.telepoche.fr/programme-tv/grille/'.date('Y-m-d').'/belgique').file_get_contents('http://www.telepoche.fr/programme-tv/grille/'.date('Y-m-d').'/ors-bouquet'),ENT_QUOTES);
// $get1 = str_replace('<a href="/programme-tv/grille-chaine/','<a chduzes="',"$get1");
// preg_match_all('/a chduzes="(.*?)"/', $get1, $listechaine);
// $listechaine = array_unique($listechaine[1]);
// Pour faire la liste des chaines à chaque fois. Déconseillé car changement d'IDS possible
$ii = 1;
foreach ($listechaine as &$chn) {	
$bloh = "<channel id=\"C".$ii.".telepoche.com\">
    <display-name>".$chn."</display-name>
</channel>".chr(10);
echo $bloh;
$lolo = $lolo.$bloh;
$ii++;
}
$ii = 1;
foreach ($listechaine as &$chn) {
$get88 = html_entity_decode(file_get_contents('http://www.telepoche.fr/programme-tv/grille-chaine/'.$chn),ENT_QUOTES);
$delimiter = explode('<div class="grid-content">',$get88)[1];
$delimiter = strstr($delimiter, '<!-- adtech emplacement:footer -->', true);
$conversion = array(">"=>'"',"<"=>'"');
$res2 = strtr($delimiter,$conversion);
$res2 = str_replace('"/div"                                                                                                "/div"','"enday"',"$res2");
$conversion = array('   '=>'','class="category"""'=>'class="category""Inconnue"','class="title-episode"""'=>'class="title-episode""Inconnu"','"p class="synopsis""'.CHR(10)=>'"p class="synopsis""',CHR(10).'                "/p"'=>'"/p"','                    '=>'');
$res2 = strtr($res2,$conversion);
$res2 = str_replace('p class="synopsis"""','p class="synopsis""Aucune Description disponible"',"$res2");
$res2 = str_replace('"span"'.CHR(10).CHR(10).'"div class="meta-datas""','"span"'.CHR(10).CHR(10).'"img itemprop="image" class="thumbnail" src="http://css1.telepoche.fr/extension/telepoche/design/telepoche/images/layout/grid-no-picture.jpg" "div class="meta-datas""',"$res2");
$count = 0;
$exp = "fttf";
$dr = 0;
$exp2 = explode('div id="days"',$res2);
$exp2 = explode('"enday"',$res2);
while(strlen($exp) > 2) {
$date = date('Ymd',strtotime(date("Ymd", strtotime(date("Ymd"))) . " +".$count." day"));
${'deb'.$date} = array();
${'fin'.$date} = array();
${'title'.$date} = array();
${'time'.$date} = array();
${'duree'.$date} = array();
${'cat'.$date} = array();
${'epi'.$date} = array();
${'syno'.$date} = array();
${'thumb'.$date} = array();
${'url'.$date} = array();
$exp = $exp2[$dr];
if(strlen($exp) > 2) {
$tabexp[] = $exp;
preg_match_all('/p class="time""(.*?) - "/', $exp, ${'time'.$date});
${'time'.$date} = ${'time'.$date}[1];
preg_match_all('/span"(.*?)"/', $exp, ${'duree'.$date});
${'duree'.$date} = array_filter(${'duree'.$date}[1]);
preg_match_all('/class="category""(.*?)"/', $exp, ${'cat'.$date});
${'cat'.$date} = array_filter(${'cat'.$date}[1]);
preg_match_all('/class="title-episode""(.*?)"/', $exp, ${'epi'.$date});
${'epi'.$date} = array_filter(${'epi'.$date}[1]);
preg_match_all('/p class="synopsis""(.*?)"/', $exp, ${'syno'.$date});
${'syno'.$date} = array_filter(${'syno'.$date}[1]);
preg_match_all('/class="thumbnail" src="(.*?)"/', $exp, ${'thumb'.$date});
${'thumb'.$date} = array_filter(${'thumb'.$date}[1]);
preg_match_all('/lien-fiche" href="(.*?)"/', $exp, ${'url'.$date});
${'url'.$date} = array_filter(${'url'.$date}[1]);
foreach (${'url'.$date} as &$uuu) {
$dab = explode('lien-fiche" href="'.$uuu.'""',$exp)[1];
$dab = strstr($dab, '"', true);
${'title'.$date}[] = $dab;
}
foreach (array_combine(${'time'.$date}, ${'duree'.$date}) as $time => $duree) {
$duree = str_replace('(','',"$duree");
$duree = str_replace(')','',"$duree");
$duree = str_replace(' ','',"$duree");
$duree = str_replace('min','',"$duree");
$duree = $duree*60;
$time = str_replace("h","","$time");
$time = $date.$time.'00';
$dt = strtotime($time);
$duree = $dt+$duree;
$duree = date('YmdHis',$duree);

${'fin'.$date}[] = $duree;
${'deb'.$date}[] = $time;
}
}
$dr++;
$count++;
}
$count3 = 0;
$date = date('Ymd');
while(strlen(${'title'.$date}[0]) > 0)
{
$date = date('Ymd',strtotime(date("Ymd", strtotime(date("Ymd"))) . " +".$count3." day"));
$count3++;
$count2 = 0;
while(strlen(${'title'.$date}[$count2]) >0)
	{
if(strlen(${'deb'.$date}[$count2+1]) >2)
	{
	$hdf = ${'deb'.$date}[$count2+1];
	} else { $hdf = ${'fin'.$date}[$count2]; } 
$string = '  <programme start="'.${'deb'.$date}[$count2].' +0100" stop="'.$hdf.' +0100" channel="C'.$ii.'.telepoche.com">
    <title>'.${'title'.$date}[$count2].'</title>
    <desc lang="fr">'.${'syno'.$date}[$count2].'</desc>
    <category lang="fr">'.${'cat'.$date}[$count2].'</category>
    <icon src="'.${'thumb'.$date}[$count2].'" />
  </programme>';
$string = str_replace('&','&',"$string");
$lolo = $lolo.$string.chr(10);
echo $string.chr(10);
$count2++;	
	}
}
$ii++;
}
$lolo = $lolo.'</tv>';
echo '</tv>';
file_put_contents('complet.xml',$lolo);
} else { header('Location: complet.xml'); }