Merge pull request #2800 from GreenSnakeLinux/guidetnt

add new guide_tnt site
This commit is contained in:
Ismaël Moret
2025-07-08 19:32:06 +02:00
committed by GitHub
6 changed files with 1987 additions and 0 deletions

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,390 @@
<!DOCTYPE html>
<html lang="fr-FR" dir="ltr">
<head>
<title>Programme TF1 - GuideTNT.com</title>
<link rel="canonical" href="https://www.guidetnt.com/tv/programme-tf1" />
<link rel="alternate" media="only screen and (max-width: 640px)" href="https://www.guidetnt.com/mobile/tv/programme-tf1" />
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="description" content="Programme TF1 : retrouvez tous les programmes téle de TF1, les series, les films… aujourd'hui, ce soir, demain." />
<meta name="robots" content="index, nofollow" />
<meta charset="utf-8" />
<style>/* @see https://github.com/aFarkas/lazysizes#broken-image-symbol */.js img.lazyload:not([src]) { visibility: hidden; }/* @see https://github.com/aFarkas/lazysizes#automatically-setting-the-sizes-attribute */.js img.lazyloaded[data-sizes=auto] { display: block; width: 100%; }</style>
<link rel="icon" href="/themes/tv_desktop/favicon.ico" type="image/vnd.microsoft.icon" />
<link rel="stylesheet" media="all" href="/sites/default/files/css/css_9nuvaeEmNA08el71NJFLlttfauI_QpRLRSFJvVoz454.css?delta=0&amp;language=en&amp;theme=tv_desktop&amp;include=eJxNy0sKwCAMRdENaV2S-AkixkT6tODu205KZ4cLV2oi30kWnHz0CTBDmV0-1wh8vLZcpcFgY1J3MYDMvHwmtKnDBVHZXRf-sbDGwBZzP2-5AeeqKlk" />
<link rel="stylesheet" media="all" href="/sites/default/files/css/css_IsbAlqEc6AE2KOVIUc6Bl117QK1dQRHEBJCuusr4rqo.css?delta=1&amp;language=en&amp;theme=tv_desktop&amp;include=eJxNy0sKwCAMRdENaV2S-AkixkT6tODu205KZ4cLV2oi30kWnHz0CTBDmV0-1wh8vLZcpcFgY1J3MYDMvHwmtKnDBVHZXRf-sbDGwBZzP2-5AeeqKlk" />
<script async="async" type="text/javascript" src="/modules/custom/tvmachine_blocks/js/wz_tooltip.min.js"></script>
<!-- Global site tag (gtag.js) - Google Analytics -->
<script async src="https://www.googletagmanager.com/gtag/js?id=G-122P0EXBFP"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'G-122P0EXBFP');
</script>
<script async src="https://securepubads.g.doubleclick.net/tag/js/gpt.js"></script>
</head>
<body >
<div class="dialog-off-canvas-main-canvas" data-off-canvas-main-canvas>
<div id="container">
<div id="header-wrapper" class="clear">
<div id="header-wrapper-up">
<div id="tvlogo">
<a href="/" title="Programme TV" rel="Programme TV">
<img src="/themes/tv_desktop/images/guide-tnt.png" alt="Programme TV" />
</a>
</div>
<div id="tvsocial">
<div><div class="tvsocial-facebook">
<div id="facebook-div" style="border-style:none; margin:0px; padding:0px; height:25px; display:inline-block; float:none; ">
<a href="https://www.facebook.com/guidetnt/" title="Facebook">
<img src="/themes/tv_desktop/images/button-fb.png" alt="Facebook" width="20" height="20" />
</a>
</div>
</div>
<div class="tvsocial-instagram">
<div id="instagram-div" style="border-style:none; margin:0px; padding:0px; height:25px; display:inline-block; float:none; ">
<a href="https://www.instagram.com/guidetnt/" title="Instagram">
<img src="/themes/tv_desktop/images/button-instagram.png" alt="Instagram" width="20" height="20" />
</a>
</div>
</div>
<div class="tvsocial-x">
<div id="twitter-div" style="border-style:none; margin:0px; padding:0px; height:25px; display:inline-block; float:none; ">
<a href="https://twitter.com/guidetnt" title="Twitter">
<img src="/themes/tv_desktop/images/button-follow-x.png" alt="Twitter" width="20" height="20" />
</a>
</div>
</div></div>
</div>
</div>
<div id="nav">
<div id="block-nicemenus">
<ul class="nice-menu nice-menu-menu-tv-desktop nice-menu-down menu">
<li class="menuparent menu-item menu-item--expanded" id="id-1"
>
<a href="/programme-tv/programme-tv" title="Programme télé du soir">Ce soir à la télé</a>
<ul class="menu">
<li class="menu-item"
>
<a href="/programme-tv/programme-tv" title="Programme télé du soir">Ce soir à la télé</a>
</li>
<li class="menu-item"
>
<a href="/programme-tv/programme-tv-maintenant" title="Maintenant à la télé">Maintenant à la télé</a>
</li>
</ul>
</li>
<li id="id-2" class="menu-item"
>
<a href="/page/sondage-soiree-tv" title="Sondage">Sondage</a>
</li>
<li id="id-3" class="menu-item"
>
<a href="/page/selection-chaines" title="Sélection des chaînes">Chaînes</a>
</li>
<li class="menuparent menu-item menu-item--expanded" id="id-4"
>
<a href="/webmaster/grille-television-2-heures">Webmasters</a>
<ul class="menu">
<li class="menu-item"
>
<a href="/webmaster/grille-television-2-heures" title="Grille TV 2 heures">Grille TV 2 heures</a>
</li>
<li class="menu-item"
>
<a href="/webmaster/grille-television-3-heures" title="Grille TV 3 heures">Grille TV 3 heures</a>
</li>
<li class="menu-item"
>
<a href="/webmaster/liste-programmes-tele-1" title="Liste 1 programme">Liste 1 programme</a>
</li>
<li class="menu-item"
>
<a href="/webmaster/liste-programmes-tele-2" title="Liste 2 programmes">Liste 2 programmes</a>
</li>
</ul>
</li>
<li id="id-5" class="menu-item"
>
<a href="/page/live-tv" title="Live TV">Live TV</a>
</li>
</ul>
</div>
</div>
</div>
<div id="main-wrapper" class="clear sidebar-left ">
<div id="tvtoptop">
</div>
<div id="sidebar-left" class="sidebar">
<div id="block-channelsmenudesktop">
<div><div style="padding: 0 0 0 2px; margin: 40px 0 15px 0;">
<h5>Chaînes TV</h5>
</div>
<script>
function loadjscssfile(filename, filetype){
if (filetype=="js"){ //if filename is a external JavaScript file
var fileref=document.createElement('script')
fileref.setAttribute("type","text/javascript")
fileref.setAttribute("src", filename)
}
else if (filetype=="css"){ //if filename is an external CSS file
var fileref=document.createElement("link")
fileref.setAttribute("rel", "stylesheet")
fileref.setAttribute("type", "text/css")
fileref.setAttribute("href", filename)
}
if (typeof fileref!="undefined")
document.getElementsByTagName("head")[0].appendChild(fileref)
}
loadjscssfile("/modules/custom/tvmachine_blocks/css/ajax_temp_list_3.css", "css")
</script>
<div class="tvlogo58" style="float: left; width: 34px;"></div><div class="block-channel-programs-div-title"><a target="_top" href="/tv/programme-tf1" title="Programme TF1">TF1</a></div><br style="clear:both;">
<div class="tvlogo59" style="float: left; width: 34px;"></div><div class="block-channel-programs-div-title"><a target="_top" href="/tv/programme-france-2" title="Programme France 2">France 2</a></div><br style="clear:both;">
<div class="tvlogo60" style="float: left; width: 34px;"></div><div class="block-channel-programs-div-title"><a target="_top" href="/tv/programme-france-3" title="Programme France 3">France 3</a></div><br style="clear:both;">
<div class="tvlogo61" style="float: left; width: 34px;"></div><div class="block-channel-programs-div-title"><a target="_top" href="/tv/programme-france-4" title="Programme France 4">France 4</a></div><br style="clear:both;">
<div class="tvlogo62" style="float: left; width: 34px;"></div><div class="block-channel-programs-div-title"><a target="_top" href="/tv/programme-france-5" title="Programme France 5">France 5</a></div><br style="clear:both;">
<div class="tvlogo63" style="float: left; width: 34px;"></div><div class="block-channel-programs-div-title"><a target="_top" href="/tv/programme-m6" title="Programme M6">M6</a></div><br style="clear:both;">
<div class="tvlogo64" style="float: left; width: 34px;"></div><div class="block-channel-programs-div-title"><a target="_top" href="/tv/programme-arte" title="Programme Arte">Arte</a></div><br style="clear:both;">
<div class="tvlogo71" style="float: left; width: 34px;"></div><div class="block-channel-programs-div-title"><a target="_top" href="/tv/programme-w9" title="Programme W9">W9</a></div><br style="clear:both;">
<div class="tvlogo72" style="float: left; width: 34px;"></div><div class="block-channel-programs-div-title"><a target="_top" href="/tv/programme-tmc" title="Programme TMC">TMC</a></div><br style="clear:both;">
<div class="tvlogo73" style="float: left; width: 34px;"></div><div class="block-channel-programs-div-title"><a target="_top" href="/tv/programme-tfx" title="Programme TFX">TFX</a></div><br style="clear:both;">
<div class="tvlogo74" style="float: left; width: 34px;"></div><div class="block-channel-programs-div-title"><a target="_top" href="/tv/programme-tf1-series-films" title="Programme TF1 Séries Films">TF1 Séries Films</a></div><br style="clear:both;">
<div class="tvlogo75" style="float: left; width: 34px;"></div><div class="block-channel-programs-div-title"><a target="_top" href="/tv/programme-cstar" title="Programme CSTAR">CSTAR</a></div><br style="clear:both;">
<div class="tvlogo76" style="float: left; width: 34px;"></div><div class="block-channel-programs-div-title"><a target="_top" href="/tv/programme-cherie-25" title="Programme Chérie 25">Chérie 25</a></div><br style="clear:both;">
<div class="tvlogo70" style="float: left; width: 34px;"></div><div class="block-channel-programs-div-title"><a target="_top" href="/tv/programme-t18" title="Programme T18">T18</a></div><br style="clear:both;">
<div class="tvlogo79" style="float: left; width: 34px;"></div><div class="block-channel-programs-div-title"><a target="_top" href="/tv/programme-6ter" title="Programme 6ter">6ter</a></div><br style="clear:both;">
<div class="tvlogo80" style="float: left; width: 34px;"></div><div class="block-channel-programs-div-title"><a target="_top" href="/tv/programme-rmc-story" title="Programme RMC Story">RMC Story</a></div><br style="clear:both;">
<div class="tvlogo69" style="float: left; width: 34px;"></div><div class="block-channel-programs-div-title"><a target="_top" href="/tv/programme-tv5monde" title="Programme TV5MONDE">TV5MONDE</a></div><br style="clear:both;">
<div class="tvlogo81" style="float: left; width: 34px;"></div><div class="block-channel-programs-div-title"><a target="_top" href="/tv/programme-lcp-public-senat" title="Programme LCP / Public Senat">LCP / Public Senat</a></div><br style="clear:both;">
<div class="tvlogo87" style="float: left; width: 34px;"></div><div class="block-channel-programs-div-title"><a target="_top" href="/tv/programme-gulli" title="Programme Gulli">Gulli</a></div><br style="clear:both;">
<div class="tvlogo91" style="float: left; width: 34px;"></div><div class="block-channel-programs-div-title"><a target="_top" href="/tv/programme-disney-channel" title="Programme Disney Channel">Disney Channel</a></div><br style="clear:both;">
<div class="tvlogo102" style="float: left; width: 34px;"></div><div class="block-channel-programs-div-title"><a target="_top" href="/tv/programme-canalplus-kids" title="Programme Canal+ Kids">Canal+ Kids</a></div><br style="clear:both;">
<div class="tvlogo92" style="float: left; width: 34px;"></div><div class="block-channel-programs-div-title"><a target="_top" href="/tv/programme-ab1" title="Programme AB1">AB1</a></div><br style="clear:both;">
<div class="tvlogo93" style="float: left; width: 34px;"></div><div class="block-channel-programs-div-title"><a target="_top" href="/tv/programme-mtv" title="Programme MTV">MTV</a></div><br style="clear:both;">
<div class="tvlogo94" style="float: left; width: 34px;"></div><div class="block-channel-programs-div-title"><a target="_top" href="/tv/programme-e-entertainment" title="Programme E! Entertainment">E! Entertainment</a></div><br style="clear:both;">
<div class="tvlogo95" style="float: left; width: 34px;"></div><div class="block-channel-programs-div-title"><a target="_top" href="/tv/programme-13eme-rue" title="Programme 13ème RUE">13ème RUE</a></div><br style="clear:both;">
<div class="tvlogo96" style="float: left; width: 34px;"></div><div class="block-channel-programs-div-title"><a target="_top" href="/tv/programme-tv-breizh" title="Programme TV Breizh">TV Breizh</a></div><br style="clear:both;">
<div class="tvlogo105" style="float: left; width: 34px;"></div><div class="block-channel-programs-div-title"><a target="_top" href="/tv/programme-polarplus" title="Programme Polar+">Polar+</a></div><br style="clear:both;">
<div class="tvlogo97" style="float: left; width: 34px;"></div><div class="block-channel-programs-div-title"><a target="_top" href="/tv/programme-comedieplus" title="Programme Comedie+">Comedie+</a></div><br style="clear:both;">
<div class="tvlogo107" style="float: left; width: 34px;"></div><div class="block-channel-programs-div-title"><a target="_top" href="/tv/programme-comedy-central" title="Programme Comedy Central">Comedy Central</a></div><br style="clear:both;">
<div class="tvlogo158" style="float: left; width: 34px;"></div><div class="block-channel-programs-div-title"><a target="_top" href="/tv/programme-bet" title="Programme BET">BET</a></div><br style="clear:both;">
<div class="tvlogo157" style="float: left; width: 34px;"></div><div class="block-channel-programs-div-title"><a target="_top" href="/tv/programme-mcm" title="Programme MCM">MCM</a></div><br style="clear:both;">
<div class="tvlogo119" style="float: left; width: 34px;"></div><div class="block-channel-programs-div-title"><a target="_top" href="/tv/programme-paramount-channel" title="Programme Paramount Channel">Paramount Channel</a></div><br style="clear:both;">
<div class="tvlogo104" style="float: left; width: 34px;"></div><div class="block-channel-programs-div-title"><a target="_top" href="/tv/programme-warner-tv" title="Programme Warner TV">Warner TV</a></div><br style="clear:both;">
<div class="tvlogo67" style="float: left; width: 34px;"></div><div class="block-channel-programs-div-title"><a target="_top" href="/tv/programme-rtl9" title="Programme RTL9">RTL9</a></div><br style="clear:both;">
<div class="tvlogo122" style="float: left; width: 34px;"></div><div class="block-channel-programs-div-title"><a target="_top" href="/tv/programme-syfy" title="Programme Syfy">Syfy</a></div><br style="clear:both;">
<div class="tvlogo121" style="float: left; width: 34px;"></div><div class="block-channel-programs-div-title"><a target="_top" href="/tv/programme-action" title="Programme Action">Action</a></div><br style="clear:both;">
<div class="tvlogo120" style="float: left; width: 34px;"></div><div class="block-channel-programs-div-title"><a target="_top" href="/tv/programme-tcm" title="Programme TCM">TCM</a></div><br style="clear:both;">
<div class="tvlogo98" style="float: left; width: 34px;"></div><div class="block-channel-programs-div-title"><a target="_top" href="/tv/programme-canalplus" title="Programme Canal+">Canal+</a></div><br style="clear:both;">
<div class="tvlogo99" style="float: left; width: 34px;"></div><div class="block-channel-programs-div-title"><a target="_top" href="/tv/programme-canalplus-cinema" title="Programme Canal+ Cinéma(s)">Canal+ Cinéma(s)</a></div><br style="clear:both;">
<div class="tvlogo100" style="float: left; width: 34px;"></div><div class="block-channel-programs-div-title"><a target="_top" href="/tv/programme-canalplus-grand-ecran" title="Programme Canal+ Grand écran">Canal+ Grand écran</a></div><br style="clear:both;">
<div class="tvlogo106" style="float: left; width: 34px;"></div><div class="block-channel-programs-div-title"><a target="_top" href="/tv/programme-canalplus-box-office" title="Programme Canal+ Box office">Canal+ Box office</a></div><br style="clear:both;">
<div class="tvlogo101" style="float: left; width: 34px;"></div><div class="block-channel-programs-div-title"><a target="_top" href="/tv/programme-canalplus-series" title="Programme Canal+ Séries">Canal+ Séries</a></div><br style="clear:both;">
<div class="tvlogo140" style="float: left; width: 34px;"></div><div class="block-channel-programs-div-title"><a target="_top" href="/tv/programme-canalplus-docs" title="Programme Canal+ Docs">Canal+ Docs</a></div><br style="clear:both;">
<div class="tvlogo115" style="float: left; width: 34px;"></div><div class="block-channel-programs-div-title"><a target="_top" href="/tv/programme-ocs" title="Programme OCS">OCS</a></div><br style="clear:both;">
<div class="tvlogo114" style="float: left; width: 34px;"></div><div class="block-channel-programs-div-title"><a target="_top" href="/tv/programme-cineplus-frisson" title="Programme Cine+ Frisson">Cine+ Frisson</a></div><br style="clear:both;">
<div class="tvlogo117" style="float: left; width: 34px;"></div><div class="block-channel-programs-div-title"><a target="_top" href="/tv/programme-cineplus-classic" title="Programme Cine+ Classic">Cine+ Classic</a></div><br style="clear:both;">
<div class="tvlogo111" style="float: left; width: 34px;"></div><div class="block-channel-programs-div-title"><a target="_top" href="/tv/programme-cineplus-festival" title="Programme Cine+ Festival">Cine+ Festival</a></div><br style="clear:both;">
<div class="tvlogo112" style="float: left; width: 34px;"></div><div class="block-channel-programs-div-title"><a target="_top" href="/tv/programme-cineplus-emotion" title="Programme Cine+ Emotion">Cine+ Emotion</a></div><br style="clear:both;">
<div class="tvlogo113" style="float: left; width: 34px;"></div><div class="block-channel-programs-div-title"><a target="_top" href="/tv/programme-cineplus-family" title="Programme Cine+ Family">Cine+ Family</a></div><br style="clear:both;">
<div class="tvlogo125" style="float: left; width: 34px;"></div><div class="block-channel-programs-div-title"><a target="_top" href="/tv/programme-histoire" title="Programme Histoire">Histoire</a></div><br style="clear:both;">
<div class="tvlogo126" style="float: left; width: 34px;"></div><div class="block-channel-programs-div-title"><a target="_top" href="/tv/programme-toute-l-histoire" title="Programme Toute l'histoire">Toute l'histoire</a></div><br style="clear:both;">
<div class="tvlogo127" style="float: left; width: 34px;"></div><div class="block-channel-programs-div-title"><a target="_top" href="/tv/programme-crime-district" title="Programme Crime District">Crime District</a></div><br style="clear:both;">
<div class="tvlogo128" style="float: left; width: 34px;"></div><div class="block-channel-programs-div-title"><a target="_top" href="/tv/programme-discovery-channel" title="Programme Discovery Channel">Discovery Channel</a></div><br style="clear:both;">
<div class="tvlogo130" style="float: left; width: 34px;"></div><div class="block-channel-programs-div-title"><a target="_top" href="/tv/programme-science-vie-tv" title="Programme Science&Vie TV">Science&Vie TV</a></div><br style="clear:both;">
<div class="tvlogo131" style="float: left; width: 34px;"></div><div class="block-channel-programs-div-title"><a target="_top" href="/tv/programme-rmc-decouverte" title="Programme RMC Découverte">RMC Découverte</a></div><br style="clear:both;">
<div class="tvlogo133" style="float: left; width: 34px;"></div><div class="block-channel-programs-div-title"><a target="_top" href="/tv/programme-planeteplus" title="Programme Planète+">Planète+</a></div><br style="clear:both;">
<div class="tvlogo134" style="float: left; width: 34px;"></div><div class="block-channel-programs-div-title"><a target="_top" href="/tv/programme-planeteplus-crime" title="Programme Planète+ Crime">Planète+ Crime</a></div><br style="clear:both;">
<div class="tvlogo135" style="float: left; width: 34px;"></div><div class="block-channel-programs-div-title"><a target="_top" href="/tv/programme-planeteplus-aventure" title="Programme Planète+ Aventure">Planète+ Aventure</a></div><br style="clear:both;">
<div class="tvlogo136" style="float: left; width: 34px;"></div><div class="block-channel-programs-div-title"><a target="_top" href="/tv/programme-national-geographic" title="Programme National Geographic">National Geographic</a></div><br style="clear:both;">
<div class="tvlogo137" style="float: left; width: 34px;"></div><div class="block-channel-programs-div-title"><a target="_top" href="/tv/programme-nat-geo-wild" title="Programme Nat Geo Wild">Nat Geo Wild</a></div><br style="clear:both;">
<div class="tvlogo138" style="float: left; width: 34px;"></div><div class="block-channel-programs-div-title"><a target="_top" href="/tv/programme-animaux" title="Programme Animaux">Animaux</a></div><br style="clear:both;">
<div class="tvlogo139" style="float: left; width: 34px;"></div><div class="block-channel-programs-div-title"><a target="_top" href="/tv/programme-ushuaia-tv" title="Programme Ushuaia TV">Ushuaia TV</a></div><br style="clear:both;">
<div class="tvlogo141" style="float: left; width: 34px;"></div><div class="block-channel-programs-div-title"><a target="_top" href="/tv/programme-trek" title="Programme Trek">Trek</a></div><br style="clear:both;">
<div class="tvlogo142" style="float: left; width: 34px;"></div><div class="block-channel-programs-div-title"><a target="_top" href="/tv/programme-lequipe" title="Programme L'Equipe">L'Equipe</a></div><br style="clear:both;">
<div class="tvlogo145" style="float: left; width: 34px;"></div><div class="block-channel-programs-div-title"><a target="_top" href="/tv/programme-eurosport-1" title="Programme Eurosport 1">Eurosport 1</a></div><br style="clear:both;">
<div class="tvlogo146" style="float: left; width: 34px;"></div><div class="block-channel-programs-div-title"><a target="_top" href="/tv/programme-eurosport-2" title="Programme Eurosport 2">Eurosport 2</a></div><br style="clear:both;">
<div class="tvlogo150" style="float: left; width: 34px;"></div><div class="block-channel-programs-div-title"><a target="_top" href="/tv/programme-automoto" title="Programme Automoto">Automoto</a></div><br style="clear:both;">
<div class="tvlogo103" style="float: left; width: 34px;"></div><div class="block-channel-programs-div-title"><a target="_top" href="/tv/programme-canalplus-sport" title="Programme Canal+ Sport">Canal+ Sport</a></div><br style="clear:both;">
<div class="tvlogo174" style="float: left; width: 34px;"></div><div class="block-channel-programs-div-title"><a target="_top" href="/tv/programme-canalplus-sport-360" title="Programme Canal+ Sport 360">Canal+ Sport 360</a></div><br style="clear:both;">
<div class="tvlogo172" style="float: left; width: 34px;"></div><div class="block-channel-programs-div-title"><a target="_top" href="/tv/programme-canalplus-foot" title="Programme Canal+ Foot">Canal+ Foot</a></div><br style="clear:both;">
</div>
</div>
</div>
<div id="main">
<div data-drupal-messages-fallback class="hidden"></div>
<br />
<br />
<div id='tvmachine_programs_channel_top'>
<div id='logo'>
<img src='https://www.guidetnt.com/sites/default/files/logo/tf1.png' />
</div>
<div id='title'>
<h1> Programme TF1</h1>
</div>
<div id='subtitle'>du 01 Juillet 2025</div>
</div>
<div id="tvmachine_programs_channel">
<a class="button-programs-channel-active" title="Aujourd'hui" href="/tv/programme-tf1">Aujourd'hui</a>
<a class="button-programs-channel" title="Demain" href="/tv-demain/programme-tf1">Demain</a>
<a class="button-programs-channel" title="Grille TV" href="/">Grille TV</a>
<br style="clear:both;">
<br />
<br />
<br />
<br />
<br />
<br />
</div>
</div>
</div>
<div id="footer-wrapper" class="clear">
<div id="footer">
</div>
<div id="footer-message">
<br style="clear:both;" />
<div id="block-footerhomedesktop">
<div><a href="/" title="Programme TV">Programme TV</a> -
<a href="/programme-tv/programme-tv-maintenant" title="Programme TV maintenant">Programme TV maintenant</a> -
<a href="/page/sondage-soiree-tv" title="Sondage">Sondage</a> -
<a href="/page/live-tv" title="Live TV">Live TV</a> -
<a href="/page/conditions-d-utilisation" title="Conditions d'utilisation">Conditions d'utilisation</a> -
<a href="/page/politique-des-cookies" title="Politique des cookies">Politique des cookies</a>
<br />
<a href="/tv/programme-tf1" title="programme TF1">TF1</a> -
<a href="/tv/programme-france-2" title="programme France 2">France 2</a> -
<a href="/tv/programme-france-3" title="programme France 3">France 3</a> -
<a href="/tv/programme-france-4" title="programme France 4">France 4</a> -
<a href="/tv/programme-france-5" title="programme France 5">France 5</a> -
<a href="/tv/programme-m6" title="programme M6">M6</a> -
<a href="/tv/programme-arte" title="programme Arte">Arte</a> -
<a href="/tv/programme-tv5monde" title="programme TV5MONDE">TV5MONDE</a> -
<a href="/tv/programme-w9" title="programme W9">W9</a> -
<a href="/tv/programme-tmc" title="programme TMC">TMC</a> -
<a href="/tv/programme-tfx" title="programme TFX">TFX</a> -
<a href="/tv/programme-tf1-series-films" title="programme TF1 Séries Films">TF1 Séries Films</a> -
<a href="/tv/programme-cstar" title="programme CSTAR">CSTAR</a> -
<a href="/tv/programme-cherie-25" title="programme Chérie 25">Chérie 25</a> -
<a href="/tv/programme-6ter" title="programme 6ter">6ter</a> -
<a href="/tv/programme-ab1" title="programme AB1">AB1</a> -
<a href="/tv/programme-bet" title="programme BET">BET</a> -
<a href="/tv/programme-mcm" title="programme MCM">MCM</a> -
<a href="/tv/programme-paramount-channel" title="programme Paramount Channel">Paramount Channel</a> -
<a href="/tv/programme-warner-tv" title="programme Warner TV">Warner TV</a> -
<a href="/tv/programme-canalplus" title="programme Canal+">Canal+</a> -
<a href="/tv/programme-ocs" title="programme OCS">OCS</a>
<br />
<a title="programacion TV" href="http://www.tvguia.es/">Programacion TV</a> España -
<a title="programme TV" href="https://www.guidetnt.com/">Programme TV</a> France -
<a title="programme TV" href="http://www.guidetv.be/">Programme TV</a> Belgique -
<a title="programme TV" href="http://www.programmetv.ch/">Programme TV</a> Suisse</div>
</div>
</div>
</div>
</div>
</div>
<script type="application/json" data-drupal-selector="drupal-settings-json">{"path":{"baseUrl":"\/","pathPrefix":"","currentPath":"program-television\/58","currentPathIsAdmin":false,"isFront":false,"currentLanguage":"en"},"pluralDelimiter":"\u0003","suppressDeprecationErrors":true,"lazy":{"lazysizes":{"lazyClass":"lazyload","loadedClass":"lazyloaded","loadingClass":"lazyloading","preloadClass":"lazypreload","errorClass":"lazyerror","autosizesClass":"lazyautosizes","srcAttr":"data-src","srcsetAttr":"data-srcset","sizesAttr":"data-sizes","minSize":40,"customMedia":[],"init":true,"expFactor":1.5,"hFac":0.8000000000000000444089209850062616169452667236328125,"loadMode":2,"loadHidden":false,"ricTimeout":0,"throttleDelay":125,"plugins":[]},"placeholderSrc":"","preferNative":false,"minified":true,"libraryPath":"\/libraries\/lazysizes"},"nice_menus_options":{"delay":1,"speed":"fast"},"user":{"uid":0,"permissionsHash":"1d1e9bfdeaafe363b8ddedcdbbbf087c0bacf20856355791b844607852a24f54"}}</script>
<script src="/sites/default/files/js/js_-QbgrSyjT9BT1ItWGQq9Hcy9cYubyFiHwI2sS26Rr9s.js?scope=footer&amp;delta=0&amp;language=en&amp;theme=tv_desktop&amp;include=eJxtiUEKwCAMBD9kyZNEbbBLYywkFezr662XXoZhRtIzSRaConBsrLfRp8FH3NlO7xdV6TnJZj4FWtdpqRxQjgOGDIFP-osvrgAnxA"></script>
</body>
</html>

View File

@@ -0,0 +1,73 @@
<?xml version="1.0" encoding="UTF-8"?>
<channels>
<channel site="guidetnt.com" lang="fr" xmltv_id="TF1.fr" site_id="tf1">TF1</channel>
<channel site="guidetnt.com" lang="fr" xmltv_id="France2.fr" site_id="france-2">France 2</channel>
<channel site="guidetnt.com" lang="fr" xmltv_id="France3.fr" site_id="france-3">France 3</channel>
<channel site="guidetnt.com" lang="fr" xmltv_id="France4.fr" site_id="france-4">France 4</channel>
<channel site="guidetnt.com" lang="fr" xmltv_id="France5.fr" site_id="france-5">France 5</channel>
<channel site="guidetnt.com" lang="fr" xmltv_id="M6.fr" site_id="m6">M6</channel>
<channel site="guidetnt.com" lang="fr" xmltv_id="arte.fr" site_id="arte">Arte</channel>
<channel site="guidetnt.com" lang="fr" xmltv_id="W9.fr" site_id="w9">W9</channel>
<channel site="guidetnt.com" lang="fr" xmltv_id="TMC.fr" site_id="tmc">TMC</channel>
<channel site="guidetnt.com" lang="fr" xmltv_id="TFX.fr" site_id="tfx">TFX</channel>
<channel site="guidetnt.com" lang="fr" xmltv_id="TF1SeriesFilms.fr" site_id="tf1-series-films">TF1 Séries Films</channel>
<channel site="guidetnt.com" lang="fr" xmltv_id="CStar.fr" site_id="cstar">CSTAR</channel>
<channel site="guidetnt.com" lang="fr" xmltv_id="Cherie25.fr" site_id="cherie-25">Chérie 25</channel>
<channel site="guidetnt.com" lang="fr" xmltv_id="T18.fr" site_id="t18">T18</channel>
<channel site="guidetnt.com" lang="fr" xmltv_id="6ter.fr" site_id="6ter">6ter</channel>
<channel site="guidetnt.com" lang="fr" xmltv_id="RMCStory.fr" site_id="rmc-story">RMC STORY</channel>
<channel site="guidetnt.com" lang="fr" xmltv_id="TV5MondeFranceBelgiumSwitzerlandMonaco.fr" site_id="tv5monde">TV5MONDE</channel>
<channel site="guidetnt.com" lang="fr" xmltv_id="LCP.fr" site_id="lcp-public-senat">LCP / Public Senat</channel>
<channel site="guidetnt.com" lang="fr" xmltv_id="Gulli.fr" site_id="gulli">Gulli</channel>
<channel site="guidetnt.com" lang="fr" xmltv_id="DisneyChannel.fr" site_id="disney-channel">Disney Channel</channel>
<channel site="guidetnt.com" lang="fr" xmltv_id="CanalPlusKids.fr" site_id="canalplus-kids">Canal+ Kids</channel>
<channel site="guidetnt.com" lang="fr" xmltv_id="AB1.fr" site_id="ab1">AB1</channel>
<channel site="guidetnt.com" lang="fr" xmltv_id="MTV.fr" site_id="mtv">MTV</channel>
<channel site="guidetnt.com" lang="fr" xmltv_id="E.fr" site_id="e-entertainment">E! Entertainment</channel>
<channel site="guidetnt.com" lang="fr" xmltv_id="13emeRue.fr" site_id="13eme-rue">13ème RUE</channel>
<channel site="guidetnt.com" lang="fr" xmltv_id="TVBreizh.fr" site_id="tv-breizh"></channel>
<channel site="guidetnt.com" lang="fr" xmltv_id="PolarPlus.fr" site_id="polarplus">Polar+</channel>
<channel site="guidetnt.com" lang="fr" xmltv_id="ComediePlus.fr" site_id="comedieplus">Comedie+</channel>
<channel site="guidetnt.com" lang="fr" xmltv_id="ComedyCentral.fr" site_id="comedy-central">Comedy Central</channel>
<channel site="guidetnt.com" lang="fr" xmltv_id="BET.fr" site_id="bet">BET</channel>
<channel site="guidetnt.com" lang="fr" xmltv_id="MCM.fr" site_id="mcm">MCM</channel>
<channel site="guidetnt.com" lang="fr" xmltv_id="ParamountChannel.fr" site_id="paramount-channel">Paramount Channel</channel>
<channel site="guidetnt.com" lang="fr" xmltv_id="WarnerTV.fr" site_id="warner-tv">Warner TV</channel>
<channel site="guidetnt.com" lang="fr" xmltv_id="RTL9.lu" site_id="rtl9">RTL9</channel>
<channel site="guidetnt.com" lang="fr" xmltv_id="Syfy.fr" site_id="syfy">Syfy</channel>
<channel site="guidetnt.com" lang="fr" xmltv_id="Action.fr" site_id="action">Action</channel>
<channel site="guidetnt.com" lang="fr" xmltv_id="TCMCinema.fr" site_id="tcm">TCM</channel>
<channel site="guidetnt.com" lang="fr" xmltv_id="CanalPlus.fr" site_id="canalplus">Canal+</channel>
<channel site="guidetnt.com" lang="fr" xmltv_id="CanalPlusCinemas.fr" site_id="canalplus-cinema">Canal+ Cinéma(s)</channel>
<channel site="guidetnt.com" lang="fr" xmltv_id="CanalPlusGrandEcran.fr" site_id="canalplus-grand-ecran">Canal+ Grand écran</channel>
<channel site="guidetnt.com" lang="fr" xmltv_id="CanalPlusBoxOffice.fr" site_id="canalplus-box-office">Canal+ Box office</channel>
<channel site="guidetnt.com" lang="fr" xmltv_id="CanalPlusSeries.fr" site_id="canalplus-series">Canal+ Séries</channel>
<channel site="guidetnt.com" lang="fr" xmltv_id="CanalPlusDocs.fr" site_id="canalplus-docs">Canal+ Docs</channel>
<channel site="guidetnt.com" lang="fr" xmltv_id="CinePlusOCS.fr" site_id="ocs">OCS</channel>
<channel site="guidetnt.com" lang="fr" xmltv_id="CinePlusFrisson.fr" site_id="cineplus-frisson">Cine+ Frisson</channel>
<channel site="guidetnt.com" lang="fr" xmltv_id="CinePlusClassic.fr" site_id="cineplus-classic">Cine+ Classic</channel>
<channel site="guidetnt.com" lang="fr" xmltv_id="CinePlusFestival.fr" site_id="cineplus-festival">Cine+ Festival</channel>
<channel site="guidetnt.com" lang="fr" xmltv_id="CinePlusEmotion.fr" site_id="cineplus-emotion">Cine+ Emotion</channel>
<channel site="guidetnt.com" lang="fr" xmltv_id="CinePlusFamily.fr" site_id="cineplus-family">Cine+ Family</channel>
<channel site="guidetnt.com" lang="fr" xmltv_id="HistoireTV.fr" site_id="histoire">Histoire</channel>
<channel site="guidetnt.com" lang="fr" xmltv_id="ToutelHistoire.fr" site_id="toute-l-histoire">Toute l&apos;histoire</channel>
<channel site="guidetnt.com" lang="fr" xmltv_id="CrimeDistrict.fr" site_id="crime-district">Crime District</channel>
<channel site="guidetnt.com" lang="fr" xmltv_id="DiscoveryChannel.fr" site_id="discovery-channel">Discovery Channel</channel>
<channel site="guidetnt.com" lang="fr" xmltv_id="ScienceVieTV.fr" site_id="science-vie-tv">Science&amp;Vie TV</channel>
<channel site="guidetnt.com" lang="fr" xmltv_id="RMCDecouverte.fr" site_id="rmc-decouverte">RMC Découverte</channel>
<channel site="guidetnt.com" lang="fr" xmltv_id="PlanetePlus.fr" site_id="planeteplus">Planète+</channel>
<channel site="guidetnt.com" lang="fr" xmltv_id="PlanetePlusCrime.fr" site_id="planeteplus-crime">Planète+ Crime</channel>
<channel site="guidetnt.com" lang="fr" xmltv_id="PlanetePlusAventure.fr" site_id="planeteplus-aventure">Planète+ Aventure</channel>
<channel site="guidetnt.com" lang="fr" xmltv_id="NationalGeographic.fr" site_id="national-geographic">National Geographic</channel>
<channel site="guidetnt.com" lang="fr" xmltv_id="NationalGeographicWild.fr" site_id="nat-geo-wild">Nat Geo Wild</channel>
<channel site="guidetnt.com" lang="fr" xmltv_id="Animaux.fr" site_id="animaux">Animaux</channel>
<channel site="guidetnt.com" lang="fr" xmltv_id="UshuaiaTV.fr" site_id="ushuaia-tv">Ushuaia TV</channel>
<channel site="guidetnt.com" lang="fr" xmltv_id="Trek.fr" site_id="trek">Trek</channel>
<channel site="guidetnt.com" lang="fr" xmltv_id="LEquipe.fr" site_id="lequipe">L&apos;Equipe</channel>
<channel site="guidetnt.com" lang="fr" xmltv_id="Eurosport1.fr" site_id="eurosport-1">Eurosport 1</channel>
<channel site="guidetnt.com" lang="fr" xmltv_id="Eurosport2.fr" site_id="eurosport-2">Eurosport 2</channel>
<channel site="guidetnt.com" lang="fr" xmltv_id="Automotolachaine.fr" site_id="automoto">Automoto</channel>
<channel site="guidetnt.com" lang="fr" xmltv_id="CanalPlusSport.fr" site_id="canalplus-sport">Canal+ Sport</channel>
<channel site="guidetnt.com" lang="fr" xmltv_id="CanalPlusSport360.fr" site_id="canalplus-sport-360">Canal+ Sport 360</channel>
<channel site="guidetnt.com" lang="fr" xmltv_id="CanalPlusFoot.fr" site_id="canalplus-foot">Canal+ Foot</channel>
</channels>

View File

@@ -0,0 +1,333 @@
const cheerio = require('cheerio')
const axios = require('axios')
const dayjs = require('dayjs')
const customParseFormat = require('dayjs/plugin/customParseFormat')
const utc = require('dayjs/plugin/utc')
const timezone = require('dayjs/plugin/timezone')
require('dayjs/locale/fr')
dayjs.extend(customParseFormat)
dayjs.extend(utc)
dayjs.extend(timezone)
const PARIS_TZ = 'Europe/Paris'
module.exports = {
site: 'guidetnt.com',
days: 2,
url({ channel, date }) {
const now = dayjs()
const demain = now.add(1, 'd')
if (date && date.isSame(demain, 'day')) {
return `https://www.guidetnt.com/tv-demain/programme-${channel.site_id}`
} else if (!date || date.isSame(now, 'day')) {
return `https://www.guidetnt.com/tv/programme-${channel.site_id}`
} else {
return null
}
},
async parser({ content, date }) {
const programs = []
const allItems = parseItems(content)
const items = allItems?.rows
const itemDate = allItems?.formattedDate
for (const item of items) {
const prev = programs[programs.length - 1]
const $item = cheerio.load(item)
const title = parseTitle($item)
let start = parseStart($item, itemDate)
if (!start || !title) return
if (prev) {
if (start.isBefore(prev.start)) {
start = start.add(1, 'd')
date = date.add(1, 'd')
}
prev.stop = start
}
let stop = start.add(30, 'm')
let itemDetails = null
let subTitle = null
//let duration = null
let country = null
let productionDate = null
let episode = null
let season = null
let category = parseCategory($item)
let description = parseDescription($item)
const itemDetailsURL = parseDescriptionURL($item)
if(itemDetailsURL) {
const url = 'https://www.guidetnt.com' + itemDetailsURL
try {
const response = await axios.get(url)
itemDetails = parseItemDetails(response.data)
} catch (err) {
console.error(`Erreur lors du fetch des détails pour l'item: ${url}`, err)
}
const timeRange = parseTimeRange(itemDetails?.programHour, date.format('YYYY-MM-DD'))
start = timeRange?.start
stop = timeRange?.stop
subTitle = itemDetails?.subTitle
if (title == subTitle) subTitle = null
description = itemDetails?.description
const categoryDetails = parseCategoryText(itemDetails?.category)
//duration = categoryDetails?.duration
country = categoryDetails?.country
productionDate = categoryDetails?.productionDate
season = categoryDetails?.season
episode = categoryDetails?.episode
}
// See https://www.npmjs.com/package/epg-parser for parameters
programs.push({
title,
subTitle: subTitle,
description: description,
image: itemDetails?.image,
category: category,
directors: itemDetails?.directorActors?.Réalisateur,
actors: itemDetails?.directorActors?.Acteur,
country: country,
date: productionDate,
//duration: duration, // Tried with length: too, but does not work ! (stop-start is not accurate because of Ads)
season: season,
episode: episode,
start,
stop
})
}
return programs
},
async channels() {
const response = await axios.get('https://www.guidetnt.com')
const channels = []
const $ = cheerio.load(response.data)
// Look inside each .tvlogo container
$('.tvlogo').each((i, el) => {
// Find all descendants that have an alt attribute
$(el).find('[alt]').each((j, subEl) => {
const alt = $(subEl).attr('alt')
const href = $(subEl).attr('href')
if (href && alt && alt.trim() !== '') {
const name = alt.trim()
const site_id = href.replace(/^\/tv\/programme-/, '')
channels.push({
lang: 'fr',
name,
site_id
})
}
})
})
return channels
}
}
function parseTimeRange(timeRange, baseDate) {
// Split times
const [startStr, endStr] = timeRange.split(' - ').map(s => s.trim())
// Parse with base date
const start = dayjs(`${baseDate} ${startStr}`, 'YYYY-MM-DD HH:mm')
let end = dayjs(`${baseDate} ${endStr}`, 'YYYY-MM-DD HH:mm')
// Handle possible day wrap (e.g., 23:30 - 00:15)
if (end.isBefore(start)) {
end = end.add(1, 'day')
}
// Calculate duration in minutes
const diffMinutes = end.diff(start, 'minute')
return {
start: start.format(),
stop: end.format(),
duration: diffMinutes
}
}
function parseItemDetails(itemDetails) {
const $ = cheerio.load(itemDetails)
const program = $('.program-wrapper').first()
const programHour = program.find('.program-hour').text().trim()
const programTitle = program.find('.program-title').text().trim()
const programElementBold = program.find('.program-element-bold').text().trim()
const programArea1 = program.find('.program-element.program-area-1').text().trim()
let description = ''
const programElements = $('.program-element').filter((i, el) => {
const classAttr = $(el).attr('class')
// Return true only if it is exactly "program-element" (no extra classes)
return classAttr.trim() === 'program-element'
})
programElements.each((i, el) => {
description += $(el).text().trim()
})
const area2Node = $('.program-area-2').first()
const area2 = $(area2Node)
const data = {}
let currentLabel = null
let texts = []
area2.contents().each((i, node) => {
if (node.type === 'tag' && node.name === 'strong') {
// If we had collected some text for the previous label, save it
if (currentLabel && texts.length) {
data[currentLabel] = texts.join('').trim().replace(/,\s*$/, '') // Remove trailing comma
}
// New label - get text without colon
currentLabel = $(node).text().replace(/:$/, '').trim()
texts = []
} else if (currentLabel) {
// Append the text content (text node or others)
if (node.type === 'text') {
texts.push(node.data)
} else if (node.type === 'tag' && node.name !== 'strong' && node.name !== 'br') {
texts.push($(node).text())
}
}
})
// Save last label text
if (currentLabel && texts.length) {
data[currentLabel] = texts.join('').trim().replace(/,\s*$/, '')
}
const imgSrc = program.find('div[style*="float:left"]')?.find('img')?.attr('src') || null
return {
programHour,
title: programTitle,
subTitle: programElementBold,
category: programArea1,
description: description,
directorActors: data,
image: imgSrc
}
}
function parseCategoryText(text) {
if (!text) return null
const parts = text.split(',').map(s => s.trim()).filter(Boolean)
const len = parts.length
const category = parts[0] || null
if (len < 3) {
return {
category: category,
duration: null,
country: null,
productionDate: null,
season: null,
episode: null
}
}
// Check last part: date if numeric
const dateCandidate = parts[len - 1]
const productionDate = /^\d{4}$/.test(dateCandidate) ? dateCandidate : null
// Check for duration (first part containing "minutes")
let durationMinute = null
//let duration = null
let episode = null
let season = null
let durationIndex = -1
for (let i = 0; i < len; i++) {
if (parts[i].toLowerCase().includes('minute')) {
durationMinute = parts[i].trim()
durationMinute = durationMinute.replace('minutes', '')
durationMinute = durationMinute.replace('minute', '')
//duration = [{ units: 'minutes', value: durationMinute }],
durationIndex = i
} else if (parts[i].toLowerCase().includes('épisode')) {
const match = text.match(/épisode\s+(\d+)(?:\/(\d+))?/i)
if (match) {
episode = parseInt(match[1], 10)
}
} else if (parts[i].toLowerCase().includes('saison')) {
season = parts[i].replace('saison', '').trim()
}
}
// Country: second to last
const countryIndex = len - 2
let country = (durationIndex === countryIndex) ? null : parts[countryIndex]
return {
category,
durationMinute,
country,
productionDate,
season,
episode
}
}
function parseTitle($item) {
return $item('.channel-programs-title a').text().trim()
}
function parseDescription($item) {
return $item('#descr').text().trim() || null
}
function parseDescriptionURL($item) {
const descrLink = $item('#descr a')
return descrLink.attr('href') || null
}
function parseCategory($item) {
let type = null
$item('.channel-programs-title span').each((i, span) => {
const className = $item(span).attr('class')
if (className && className.startsWith('text_bg')) {
type = $item(span).text().trim()
}
})
return type
}
function parseStart($item, itemDate) {
const dt = $item('.channel-programs-time a').text().trim()
if (!dt) return null
const datetimeStr = `${itemDate} ${dt}`
return dayjs.tz(datetimeStr, 'YYYY-MM-DD HH:mm', PARIS_TZ)
}
function parseItems(content) {
const $ = cheerio.load(content)
// Extract header information
const logoSrc = $('#logo img').attr('src')
const title = $('#title h1').text().trim()
const subtitle = $('#subtitle').text().trim()
const dateMatch = subtitle.match(/(\d{1,2} \w+ \d{4})/)
const dateStr = dateMatch ? dateMatch[1].toLowerCase() : null
// Parse the French date string
const parsedDate = dayjs(dateStr, 'D MMMM YYYY', 'fr')
// Format it as YYYY-MM-DD
const formattedDate = parsedDate.format('YYYY-MM-DD')
const rows = $('.channel-row').toArray()
return {
rows,
logoSrc,
title,
formattedDate
}
}

View File

@@ -0,0 +1,83 @@
const { parser, url } = require('./guidetnt.com.config.js')
const fs = require('fs')
const path = require('path')
const dayjs = require('dayjs')
const utc = require('dayjs/plugin/utc')
const customParseFormat = require('dayjs/plugin/customParseFormat')
const timezone = require('dayjs/plugin/timezone')
require('dayjs/locale/fr')
dayjs.extend(customParseFormat)
dayjs.extend(utc)
dayjs.extend(timezone)
const date = dayjs.utc('2025-07-01', 'YYYY-MM-DD').startOf('d')
const channel = {
site_id: 'tf1',
xmltv_id: 'TF1.fr'
}
it('can generate valid url', () => {
expect(url({ channel })).toBe('https://www.guidetnt.com/tv/programme-tf1')
})
it('can parse response', async () => {
const content = fs.readFileSync(path.resolve(__dirname, '__data__/content.html'))
let results = await parser({ content, date })
results = results.map(p => {
p.start = p.start.toJSON()
p.stop = p.stop.toJSON()
return p
})
expect(results.length).toBe(29)
expect(results[0]).toMatchObject({
category: 'Série',
description: 'Grande effervescence pour toute l\'équipe du Camping Paradis, qui prépare les Olympiades. Côté arrivants, Hélène et sa fille Eva viennent passer quelques jours dans le but d\'optimiser les révisions d\'E...',
start: '2025-06-30T22:55:00.000Z',
stop: '2025-06-30T23:45:00.000Z',
title: 'Camping Paradis'
})
expect(results[2]).toMatchObject({
category: 'Magazine',
description: 'Retrouvez tous vos programmes de nuit.',
start: '2025-07-01T00:55:00.000Z',
stop: '2025-07-01T04:00:00.000Z',
title: 'Programmes de la nuit'
})
expect(results[15]).toMatchObject({
category: 'Téléfilm',
description: 'La vie quasi parfaite de Riley bascule brutalement lorsqu\'un accident de voiture lui coûte la vie, laissant derrière elle sa famille. Alors que l\'enquête débute, l\'affaire prend une tournure étrange l...',
start: '2025-07-01T12:25:00.000Z',
stop: '2025-07-01T14:00:00.000Z',
title: 'Trahie par l\'amour'
})
})
it('can parse response for current day', async () => {
const content = fs.readFileSync(path.resolve(__dirname, '__data__/content.html'))
let results = await parser({ content, date: dayjs.utc('2025-07-01', 'YYYY-MM-DD').startOf('d') })
results = results.map(p => {
p.start = p.start.toJSON()
p.stop = p.stop.toJSON()
return p
}
)
expect(results.length).toBe(29)
expect(results[0]).toMatchObject({
category: 'Série',
description: 'Grande effervescence pour toute l\'équipe du Camping Paradis, qui prépare les Olympiades. Côté arrivants, Hélène et sa fille Eva viennent passer quelques jours dans le but d\'optimiser les révisions d\'E...',
start: '2025-06-30T22:55:00.000Z',
stop: '2025-06-30T23:45:00.000Z',
title: 'Camping Paradis'
})
})
it('can handle empty guide', async () => {
const results = await parser({
date,
content: fs.readFileSync(path.resolve(__dirname, '__data__/no_content.html'))
})
expect(results).toEqual([])
})

View File

@@ -0,0 +1,21 @@
# guidetnt.com
https://www.guidetnt.com/
### Download the guide
```sh
npm run grab --- --site=guidetnt.com
```
### Update channel list
```sh
npm run channels:parse --- --config=./sites/guidetnt.com/guidetnt.com.config.js --output=./sites/guidetnt.com/guidetnt.com.channels.xml
```
### Test
```sh
npm test --- guidetnt.com
```