Replace LF line endings with CRLF

This commit is contained in:
freearhey
2025-09-28 17:55:05 +03:00
parent efc74efcf8
commit b6a589c62a
1192 changed files with 445631 additions and 445631 deletions

View File

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

View File

@@ -1,118 +1,118 @@
<?xml version="1.0" encoding="UTF-8"?>
<channels>
<channel site="tvgids.nl" lang="en" xmltv_id="AlJazeera.qa@English" site_id="aljazeera">Al Jazeera Engels</channel>
<channel site="tvgids.nl" lang="en" xmltv_id="CNNInternational.us@MENA" site_id="cnn">CNN</channel>
<channel site="tvgids.nl" lang="en" xmltv_id="ExtremeSportsChannel.nl" site_id="extsports">Extreme Sports Channel</channel>
<channel site="tvgids.nl" lang="es" xmltv_id="TVEInternacionalEuropeAsia.es" site_id="tve">TV E</channel>
<channel site="tvgids.nl" lang="fr" xmltv_id="LaUne.be" site_id="rtbfla1">RTBF La 1</channel>
<channel site="tvgids.nl" lang="fr" xmltv_id="Mezzo.fr" site_id="mezzo">Mezzo</channel>
<channel site="tvgids.nl" lang="it" xmltv_id="Rai1.it" site_id="raiuno">Rai Uno</channel>
<channel site="tvgids.nl" lang="nl" xmltv_id="" site_id="ard">ARD</channel>
<channel site="tvgids.nl" lang="nl" xmltv_id="" site_id="bbc1">BBC 1</channel>
<channel site="tvgids.nl" lang="nl" xmltv_id="" site_id="bbc2">BBC 2</channel>
<channel site="tvgids.nl" lang="nl" xmltv_id="" site_id="bbc4">BBC 4</channel>
<channel site="tvgids.nl" lang="nl" xmltv_id="" site_id="bbcnews">BBC News</channel>
<channel site="tvgids.nl" lang="nl" xmltv_id="" site_id="canalplusaction">Canal+ Action</channel>
<channel site="tvgids.nl" lang="nl" xmltv_id="" site_id="Cartoonito">Cartoonito</channel>
<channel site="tvgids.nl" lang="nl" xmltv_id="" site_id="discoveryscience">Discovery Science</channel>
<channel site="tvgids.nl" lang="nl" xmltv_id="" site_id="eentertainment">E! Entertainment</channel>
<channel site="tvgids.nl" lang="nl" xmltv_id="" site_id="euronews">Euronews</channel>
<channel site="tvgids.nl" lang="nl" xmltv_id="" site_id="hgtv">HGTV</channel>
<channel site="tvgids.nl" lang="nl" xmltv_id="" site_id="nh">NH</channel>
<channel site="tvgids.nl" lang="nl" xmltv_id="" site_id="paramountnetwork">Paramount Network</channel>
<channel site="tvgids.nl" lang="nl" xmltv_id="" site_id="rtl">RTL</channel>
<channel site="tvgids.nl" lang="nl" xmltv_id="" site_id="sat1">Sat 1</channel>
<channel site="tvgids.nl" lang="nl" xmltv_id="" site_id="starchannel">STAR Channel</channel>
<channel site="tvgids.nl" lang="nl" xmltv_id="" site_id="viaplaytv">Viaplay TV</channel>
<channel site="tvgids.nl" lang="nl" xmltv_id="" site_id="vrt1">VRT 1</channel>
<channel site="tvgids.nl" lang="nl" xmltv_id="" site_id="wdr">WDR Fernsehen</channel>
<channel site="tvgids.nl" lang="nl" xmltv_id="" site_id="ziggosport2">Ziggo Sport 2</channel>
<channel site="tvgids.nl" lang="nl" xmltv_id="" site_id="ziggosport3">Ziggo Sport 3</channel>
<channel site="tvgids.nl" lang="nl" xmltv_id="" site_id="ziggosport4">Ziggo Sport 4</channel>
<channel site="tvgids.nl" lang="nl" xmltv_id="" site_id="ziggosport5">Ziggo Sport 5</channel>
<channel site="tvgids.nl" lang="nl" xmltv_id="" site_id="ziggosport6">Ziggo Sport 6</channel>
<channel site="tvgids.nl" lang="nl" xmltv_id="3sat.de" site_id="3sat">3Sat</channel>
<channel site="tvgids.nl" lang="nl" xmltv_id="24Kitchen.us@Netherlands" site_id="24kitchen">24Kitchen</channel>
<channel site="tvgids.nl" lang="nl" xmltv_id="AnimalPlanet.nl" site_id="animalplanet">Animal Planet</channel>
<channel site="tvgids.nl" lang="nl" xmltv_id="arte.fr" site_id="arte">ARTE</channel>
<channel site="tvgids.nl" lang="nl" xmltv_id="AT5.nl" site_id="at5">AT5</channel>
<channel site="tvgids.nl" lang="nl" xmltv_id="BBCFirst.uk@Benelux" site_id="bbcfirst">BBC First</channel>
<channel site="tvgids.nl" lang="nl" xmltv_id="BVN.nl" site_id="bvn">BVN</channel>
<channel site="tvgids.nl" lang="nl" xmltv_id="" site_id="canvas">VRT Canvas</channel>
<channel site="tvgids.nl" lang="nl" xmltv_id="CartoonNetworkWesternEurope.uk@Netherlands" site_id="cartoonnetwork">Cartoon Network</channel>
<channel site="tvgids.nl" lang="nl" xmltv_id="CBSReality.nl" site_id="cbsreality">CBS Reality</channel>
<channel site="tvgids.nl" lang="nl" xmltv_id="CNBCEurope.uk" site_id="cnbc">CNBC</channel>
<channel site="tvgids.nl" lang="nl" xmltv_id="ComedyCentral.nl" site_id="comedycentral">Comedy Central</channel>
<channel site="tvgids.nl" lang="nl" xmltv_id="CrimePlusInvestigationBenelux.uk" site_id="crimeinvestigation">Crime + Investigation</channel>
<channel site="tvgids.nl" lang="nl" xmltv_id="DiscoveryChannel.nl" site_id="discovery">Discovery</channel>
<channel site="tvgids.nl" lang="nl" xmltv_id="DisneyChannel.nl" site_id="disneychannel">Disney Channel</channel>
<channel site="tvgids.nl" lang="nl" xmltv_id="DisneyXD.nl" site_id="disneyxd">Disney XD</channel>
<channel site="tvgids.nl" lang="nl" xmltv_id="ESPN2.nl" site_id="espn2">ESPN 2</channel>
<channel site="tvgids.nl" lang="nl" xmltv_id="ESPN3.nl" site_id="espn3">ESPN 3</channel>
<channel site="tvgids.nl" lang="nl" xmltv_id="ESPN4.nl" site_id="espn4">ESPN 4</channel>
<channel site="tvgids.nl" lang="nl" xmltv_id="ESPN.nl" site_id="espn">ESPN 1</channel>
<channel site="tvgids.nl" lang="nl" xmltv_id="Eurosport1.fr@Netherlands" site_id="eurosport1">Eurosport 1</channel>
<channel site="tvgids.nl" lang="nl" xmltv_id="Eurosport2.fr@Netherlands" site_id="eurosport2">Eurosport 2</channel>
<channel site="tvgids.nl" lang="nl" xmltv_id="Film1Action.nl" site_id="film1action">Film1 Action</channel>
<channel site="tvgids.nl" lang="nl" xmltv_id="Film1Drama.nl" site_id="film1drama">Film1 Drama</channel>
<channel site="tvgids.nl" lang="nl" xmltv_id="Film1Family.nl" site_id="film1family">Film1 Family</channel>
<channel site="tvgids.nl" lang="nl" xmltv_id="Film1Premiere.nl" site_id="film1premiere">Film 1 Premiere</channel>
<channel site="tvgids.nl" lang="nl" xmltv_id="FilmBox.nl" site_id="filmboxnl">Filmbox.nl</channel>
<channel site="tvgids.nl" lang="nl" xmltv_id="History.nl" site_id="history">HISTORY</channel>
<channel site="tvgids.nl" lang="nl" xmltv_id="INPLUS.nl" site_id="inplus">INPLUS</channel>
<channel site="tvgids.nl" lang="nl" xmltv_id="InvestigationDiscovery.nl" site_id="id">Investigation Discovery</channel>
<channel site="tvgids.nl" lang="nl" xmltv_id="Ketnet.be" site_id="ketnet">Ketnet</channel>
<channel site="tvgids.nl" lang="nl" xmltv_id="L1TV.nl" site_id="l1tv">L1 TV</channel>
<channel site="tvgids.nl" lang="nl" xmltv_id="LoveNature.ca" site_id="lovenature">Love Nature</channel>
<channel site="tvgids.nl" lang="nl" xmltv_id="MTV.nl" site_id="mtv">MTV</channel>
<channel site="tvgids.nl" lang="nl" xmltv_id="NationalGeographic.nl" site_id="ngc">National Geographic</channel>
<channel site="tvgids.nl" lang="nl" xmltv_id="NationalGeographicWild.nl" site_id="natgeowild">Nat Geo Wild</channel>
<channel site="tvgids.nl" lang="nl" xmltv_id="NDRFernsehenInternational.de" site_id="ndr">NDR Fernsehen</channel>
<channel site="tvgids.nl" lang="nl" xmltv_id="NET5.nl" site_id="net5">NET 5</channel>
<channel site="tvgids.nl" lang="nl" xmltv_id="Nickelodeon.nl" site_id="nickelodeon">Nickelodeon</channel>
<channel site="tvgids.nl" lang="nl" xmltv_id="NickJr.nl" site_id="nickjr">Nick Jr.</channel>
<channel site="tvgids.nl" lang="nl" xmltv_id="NPO1.nl" site_id="npo1">NPO 1</channel>
<channel site="tvgids.nl" lang="nl" xmltv_id="NPO1extra.nl" site_id="npo1extra">NPO 1 extra</channel>
<channel site="tvgids.nl" lang="nl" xmltv_id="NPO2.nl" site_id="npo2">NPO 2</channel>
<channel site="tvgids.nl" lang="nl" xmltv_id="NPO2extra.nl" site_id="npo2extra">NPO 2 extra</channel>
<channel site="tvgids.nl" lang="nl" xmltv_id="NPO3.nl" site_id="npo3">NPO 3</channel>
<channel site="tvgids.nl" lang="nl" xmltv_id="NPOPolitiekenNieuws.nl" site_id="npopolitiek">NPO Politiek</channel>
<channel site="tvgids.nl" lang="nl" xmltv_id="OmroepBrabant.nl" site_id="brabant">Omroep Brabant</channel>
<channel site="tvgids.nl" lang="nl" xmltv_id="OmroepFlevoland.nl" site_id="flevoland">Omroep Flevoland</channel>
<channel site="tvgids.nl" lang="nl" xmltv_id="OmroepGelderland.nl" site_id="gelderland">Omroep Gelderland</channel>
<channel site="tvgids.nl" lang="nl" xmltv_id="OmroepZeeland.nl" site_id="zeeland">Omroep Zeeland</channel>
<channel site="tvgids.nl" lang="nl" xmltv_id="OmropFryslan.nl" site_id="omropfryslan">Omrop Fryslân</channel>
<channel site="tvgids.nl" lang="nl" xmltv_id="ONS.nl" site_id="ons">ONS</channel>
<channel site="tvgids.nl" lang="nl" xmltv_id="OUTtv.nl" site_id="outtv">OUTtv</channel>
<channel site="tvgids.nl" lang="nl" xmltv_id="PebbleTV.nl" site_id="pebbletv">Pebble TV</channel>
<channel site="tvgids.nl" lang="nl" xmltv_id="Play4.be" site_id="play4">Play4</channel>
<channel site="tvgids.nl" lang="nl" xmltv_id="ProSieben.de" site_id="pro7">PRO 7</channel>
<channel site="tvgids.nl" lang="nl" xmltv_id="RTL4.nl" site_id="rtl4">RTL 4</channel>
<channel site="tvgids.nl" lang="nl" xmltv_id="RTL5.nl" site_id="rtl5">RTL 5</channel>
<channel site="tvgids.nl" lang="nl" xmltv_id="RTL7.nl" site_id="rtl7">RTL 7</channel>
<channel site="tvgids.nl" lang="nl" xmltv_id="RTL8.nl" site_id="rtl8">RTL 8</channel>
<channel site="tvgids.nl" lang="nl" xmltv_id="RTLCrime.nl" site_id="rtlcrime">RTL Crime</channel>
<channel site="tvgids.nl" lang="nl" xmltv_id="RTLLounge.nl" site_id="rtllounge">RTL Lounge</channel>
<channel site="tvgids.nl" lang="nl" xmltv_id="RTLTelekids.nl" site_id="rtltelekids">RTL Telekids</channel>
<channel site="tvgids.nl" lang="nl" xmltv_id="RTLZ.nl" site_id="rtlz">RTL Z</channel>
<channel site="tvgids.nl" lang="nl" xmltv_id="RTVDrenthe.nl" site_id="drenthe">RTV Drenthe</channel>
<channel site="tvgids.nl" lang="nl" xmltv_id="RTVOost.nl" site_id="rtvoost">RTV Oost</channel>
<channel site="tvgids.nl" lang="nl" xmltv_id="RTVRijnmond.nl" site_id="rtvrijnmond">RTV Rijnmond</channel>
<channel site="tvgids.nl" lang="nl" xmltv_id="RTVUtrecht.nl" site_id="rtvutrecht">RTV Utrecht</channel>
<channel site="tvgids.nl" lang="nl" xmltv_id="SBS6.nl" site_id="sbs6">SBS 6</channel>
<channel site="tvgids.nl" lang="nl" xmltv_id="ShortsTV.uk" site_id="shortstv">ShortsTV</channel>
<channel site="tvgids.nl" lang="nl" xmltv_id="StingrayClassica.ca" site_id="stingrayclassica">Stingray Classica</channel>
<channel site="tvgids.nl" lang="nl" xmltv_id="Tipik.be" site_id="rtbfla2">RTBF Tipik</channel>
<channel site="tvgids.nl" lang="nl" xmltv_id="TLC.nl" site_id="tlc">TLC</channel>
<channel site="tvgids.nl" lang="nl" xmltv_id="TV5MondeEurope.fr" site_id="tv5">TV5MONDE</channel>
<channel site="tvgids.nl" lang="nl" xmltv_id="TV538.nl" site_id="tv538">TV 538</channel>
<channel site="tvgids.nl" lang="nl" xmltv_id="TVNoord.nl" site_id="noord">TV Noord</channel>
<channel site="tvgids.nl" lang="nl" xmltv_id="TVOrange.nl" site_id="oranjetv">Oranje TV</channel>
<channel site="tvgids.nl" lang="nl" xmltv_id="TVWest.nl" site_id="rtvwest">RTV West</channel>
<channel site="tvgids.nl" lang="nl" xmltv_id="Veronica.nl" site_id="veronica">Veronica</channel>
<channel site="tvgids.nl" lang="nl" xmltv_id="VeronicaDisneyXD.nl" site_id="veronicadisneyxd">Veronica/Disney XD</channel>
<channel site="tvgids.nl" lang="nl" xmltv_id="XITE.nl" site_id="xite">XITE</channel>
<channel site="tvgids.nl" lang="nl" xmltv_id="ZDF.de" site_id="zdf">ZDF</channel>
<channel site="tvgids.nl" lang="nl" xmltv_id="ZiggoSport.nl" site_id="ziggosport">Ziggo Sport</channel>
<channel site="tvgids.nl" lang="tr" xmltv_id="TRTWorld.tr" site_id="trt">TRT World</channel>
</channels>
<?xml version="1.0" encoding="UTF-8"?>
<channels>
<channel site="tvgids.nl" lang="en" xmltv_id="AlJazeera.qa@English" site_id="aljazeera">Al Jazeera Engels</channel>
<channel site="tvgids.nl" lang="en" xmltv_id="CNNInternational.us@MENA" site_id="cnn">CNN</channel>
<channel site="tvgids.nl" lang="en" xmltv_id="ExtremeSportsChannel.nl" site_id="extsports">Extreme Sports Channel</channel>
<channel site="tvgids.nl" lang="es" xmltv_id="TVEInternacionalEuropeAsia.es" site_id="tve">TV E</channel>
<channel site="tvgids.nl" lang="fr" xmltv_id="LaUne.be" site_id="rtbfla1">RTBF La 1</channel>
<channel site="tvgids.nl" lang="fr" xmltv_id="Mezzo.fr" site_id="mezzo">Mezzo</channel>
<channel site="tvgids.nl" lang="it" xmltv_id="Rai1.it" site_id="raiuno">Rai Uno</channel>
<channel site="tvgids.nl" lang="nl" xmltv_id="" site_id="ard">ARD</channel>
<channel site="tvgids.nl" lang="nl" xmltv_id="" site_id="bbc1">BBC 1</channel>
<channel site="tvgids.nl" lang="nl" xmltv_id="" site_id="bbc2">BBC 2</channel>
<channel site="tvgids.nl" lang="nl" xmltv_id="" site_id="bbc4">BBC 4</channel>
<channel site="tvgids.nl" lang="nl" xmltv_id="" site_id="bbcnews">BBC News</channel>
<channel site="tvgids.nl" lang="nl" xmltv_id="" site_id="canalplusaction">Canal+ Action</channel>
<channel site="tvgids.nl" lang="nl" xmltv_id="" site_id="Cartoonito">Cartoonito</channel>
<channel site="tvgids.nl" lang="nl" xmltv_id="" site_id="discoveryscience">Discovery Science</channel>
<channel site="tvgids.nl" lang="nl" xmltv_id="" site_id="eentertainment">E! Entertainment</channel>
<channel site="tvgids.nl" lang="nl" xmltv_id="" site_id="euronews">Euronews</channel>
<channel site="tvgids.nl" lang="nl" xmltv_id="" site_id="hgtv">HGTV</channel>
<channel site="tvgids.nl" lang="nl" xmltv_id="" site_id="nh">NH</channel>
<channel site="tvgids.nl" lang="nl" xmltv_id="" site_id="paramountnetwork">Paramount Network</channel>
<channel site="tvgids.nl" lang="nl" xmltv_id="" site_id="rtl">RTL</channel>
<channel site="tvgids.nl" lang="nl" xmltv_id="" site_id="sat1">Sat 1</channel>
<channel site="tvgids.nl" lang="nl" xmltv_id="" site_id="starchannel">STAR Channel</channel>
<channel site="tvgids.nl" lang="nl" xmltv_id="" site_id="viaplaytv">Viaplay TV</channel>
<channel site="tvgids.nl" lang="nl" xmltv_id="" site_id="vrt1">VRT 1</channel>
<channel site="tvgids.nl" lang="nl" xmltv_id="" site_id="wdr">WDR Fernsehen</channel>
<channel site="tvgids.nl" lang="nl" xmltv_id="" site_id="ziggosport2">Ziggo Sport 2</channel>
<channel site="tvgids.nl" lang="nl" xmltv_id="" site_id="ziggosport3">Ziggo Sport 3</channel>
<channel site="tvgids.nl" lang="nl" xmltv_id="" site_id="ziggosport4">Ziggo Sport 4</channel>
<channel site="tvgids.nl" lang="nl" xmltv_id="" site_id="ziggosport5">Ziggo Sport 5</channel>
<channel site="tvgids.nl" lang="nl" xmltv_id="" site_id="ziggosport6">Ziggo Sport 6</channel>
<channel site="tvgids.nl" lang="nl" xmltv_id="3sat.de" site_id="3sat">3Sat</channel>
<channel site="tvgids.nl" lang="nl" xmltv_id="24Kitchen.us@Netherlands" site_id="24kitchen">24Kitchen</channel>
<channel site="tvgids.nl" lang="nl" xmltv_id="AnimalPlanet.nl" site_id="animalplanet">Animal Planet</channel>
<channel site="tvgids.nl" lang="nl" xmltv_id="arte.fr" site_id="arte">ARTE</channel>
<channel site="tvgids.nl" lang="nl" xmltv_id="AT5.nl" site_id="at5">AT5</channel>
<channel site="tvgids.nl" lang="nl" xmltv_id="BBCFirst.uk@Benelux" site_id="bbcfirst">BBC First</channel>
<channel site="tvgids.nl" lang="nl" xmltv_id="BVN.nl" site_id="bvn">BVN</channel>
<channel site="tvgids.nl" lang="nl" xmltv_id="" site_id="canvas">VRT Canvas</channel>
<channel site="tvgids.nl" lang="nl" xmltv_id="CartoonNetworkWesternEurope.uk@Netherlands" site_id="cartoonnetwork">Cartoon Network</channel>
<channel site="tvgids.nl" lang="nl" xmltv_id="CBSReality.nl" site_id="cbsreality">CBS Reality</channel>
<channel site="tvgids.nl" lang="nl" xmltv_id="CNBCEurope.uk" site_id="cnbc">CNBC</channel>
<channel site="tvgids.nl" lang="nl" xmltv_id="ComedyCentral.nl" site_id="comedycentral">Comedy Central</channel>
<channel site="tvgids.nl" lang="nl" xmltv_id="CrimePlusInvestigationBenelux.uk" site_id="crimeinvestigation">Crime + Investigation</channel>
<channel site="tvgids.nl" lang="nl" xmltv_id="DiscoveryChannel.nl" site_id="discovery">Discovery</channel>
<channel site="tvgids.nl" lang="nl" xmltv_id="DisneyChannel.nl" site_id="disneychannel">Disney Channel</channel>
<channel site="tvgids.nl" lang="nl" xmltv_id="DisneyXD.nl" site_id="disneyxd">Disney XD</channel>
<channel site="tvgids.nl" lang="nl" xmltv_id="ESPN2.nl" site_id="espn2">ESPN 2</channel>
<channel site="tvgids.nl" lang="nl" xmltv_id="ESPN3.nl" site_id="espn3">ESPN 3</channel>
<channel site="tvgids.nl" lang="nl" xmltv_id="ESPN4.nl" site_id="espn4">ESPN 4</channel>
<channel site="tvgids.nl" lang="nl" xmltv_id="ESPN.nl" site_id="espn">ESPN 1</channel>
<channel site="tvgids.nl" lang="nl" xmltv_id="Eurosport1.fr@Netherlands" site_id="eurosport1">Eurosport 1</channel>
<channel site="tvgids.nl" lang="nl" xmltv_id="Eurosport2.fr@Netherlands" site_id="eurosport2">Eurosport 2</channel>
<channel site="tvgids.nl" lang="nl" xmltv_id="Film1Action.nl" site_id="film1action">Film1 Action</channel>
<channel site="tvgids.nl" lang="nl" xmltv_id="Film1Drama.nl" site_id="film1drama">Film1 Drama</channel>
<channel site="tvgids.nl" lang="nl" xmltv_id="Film1Family.nl" site_id="film1family">Film1 Family</channel>
<channel site="tvgids.nl" lang="nl" xmltv_id="Film1Premiere.nl" site_id="film1premiere">Film 1 Premiere</channel>
<channel site="tvgids.nl" lang="nl" xmltv_id="FilmBox.nl" site_id="filmboxnl">Filmbox.nl</channel>
<channel site="tvgids.nl" lang="nl" xmltv_id="History.nl" site_id="history">HISTORY</channel>
<channel site="tvgids.nl" lang="nl" xmltv_id="INPLUS.nl" site_id="inplus">INPLUS</channel>
<channel site="tvgids.nl" lang="nl" xmltv_id="InvestigationDiscovery.nl" site_id="id">Investigation Discovery</channel>
<channel site="tvgids.nl" lang="nl" xmltv_id="Ketnet.be" site_id="ketnet">Ketnet</channel>
<channel site="tvgids.nl" lang="nl" xmltv_id="L1TV.nl" site_id="l1tv">L1 TV</channel>
<channel site="tvgids.nl" lang="nl" xmltv_id="LoveNature.ca" site_id="lovenature">Love Nature</channel>
<channel site="tvgids.nl" lang="nl" xmltv_id="MTV.nl" site_id="mtv">MTV</channel>
<channel site="tvgids.nl" lang="nl" xmltv_id="NationalGeographic.nl" site_id="ngc">National Geographic</channel>
<channel site="tvgids.nl" lang="nl" xmltv_id="NationalGeographicWild.nl" site_id="natgeowild">Nat Geo Wild</channel>
<channel site="tvgids.nl" lang="nl" xmltv_id="NDRFernsehenInternational.de" site_id="ndr">NDR Fernsehen</channel>
<channel site="tvgids.nl" lang="nl" xmltv_id="NET5.nl" site_id="net5">NET 5</channel>
<channel site="tvgids.nl" lang="nl" xmltv_id="Nickelodeon.nl" site_id="nickelodeon">Nickelodeon</channel>
<channel site="tvgids.nl" lang="nl" xmltv_id="NickJr.nl" site_id="nickjr">Nick Jr.</channel>
<channel site="tvgids.nl" lang="nl" xmltv_id="NPO1.nl" site_id="npo1">NPO 1</channel>
<channel site="tvgids.nl" lang="nl" xmltv_id="NPO1extra.nl" site_id="npo1extra">NPO 1 extra</channel>
<channel site="tvgids.nl" lang="nl" xmltv_id="NPO2.nl" site_id="npo2">NPO 2</channel>
<channel site="tvgids.nl" lang="nl" xmltv_id="NPO2extra.nl" site_id="npo2extra">NPO 2 extra</channel>
<channel site="tvgids.nl" lang="nl" xmltv_id="NPO3.nl" site_id="npo3">NPO 3</channel>
<channel site="tvgids.nl" lang="nl" xmltv_id="NPOPolitiekenNieuws.nl" site_id="npopolitiek">NPO Politiek</channel>
<channel site="tvgids.nl" lang="nl" xmltv_id="OmroepBrabant.nl" site_id="brabant">Omroep Brabant</channel>
<channel site="tvgids.nl" lang="nl" xmltv_id="OmroepFlevoland.nl" site_id="flevoland">Omroep Flevoland</channel>
<channel site="tvgids.nl" lang="nl" xmltv_id="OmroepGelderland.nl" site_id="gelderland">Omroep Gelderland</channel>
<channel site="tvgids.nl" lang="nl" xmltv_id="OmroepZeeland.nl" site_id="zeeland">Omroep Zeeland</channel>
<channel site="tvgids.nl" lang="nl" xmltv_id="OmropFryslan.nl" site_id="omropfryslan">Omrop Fryslân</channel>
<channel site="tvgids.nl" lang="nl" xmltv_id="ONS.nl" site_id="ons">ONS</channel>
<channel site="tvgids.nl" lang="nl" xmltv_id="OUTtv.nl" site_id="outtv">OUTtv</channel>
<channel site="tvgids.nl" lang="nl" xmltv_id="PebbleTV.nl" site_id="pebbletv">Pebble TV</channel>
<channel site="tvgids.nl" lang="nl" xmltv_id="Play4.be" site_id="play4">Play4</channel>
<channel site="tvgids.nl" lang="nl" xmltv_id="ProSieben.de" site_id="pro7">PRO 7</channel>
<channel site="tvgids.nl" lang="nl" xmltv_id="RTL4.nl" site_id="rtl4">RTL 4</channel>
<channel site="tvgids.nl" lang="nl" xmltv_id="RTL5.nl" site_id="rtl5">RTL 5</channel>
<channel site="tvgids.nl" lang="nl" xmltv_id="RTL7.nl" site_id="rtl7">RTL 7</channel>
<channel site="tvgids.nl" lang="nl" xmltv_id="RTL8.nl" site_id="rtl8">RTL 8</channel>
<channel site="tvgids.nl" lang="nl" xmltv_id="RTLCrime.nl" site_id="rtlcrime">RTL Crime</channel>
<channel site="tvgids.nl" lang="nl" xmltv_id="RTLLounge.nl" site_id="rtllounge">RTL Lounge</channel>
<channel site="tvgids.nl" lang="nl" xmltv_id="RTLTelekids.nl" site_id="rtltelekids">RTL Telekids</channel>
<channel site="tvgids.nl" lang="nl" xmltv_id="RTLZ.nl" site_id="rtlz">RTL Z</channel>
<channel site="tvgids.nl" lang="nl" xmltv_id="RTVDrenthe.nl" site_id="drenthe">RTV Drenthe</channel>
<channel site="tvgids.nl" lang="nl" xmltv_id="RTVOost.nl" site_id="rtvoost">RTV Oost</channel>
<channel site="tvgids.nl" lang="nl" xmltv_id="RTVRijnmond.nl" site_id="rtvrijnmond">RTV Rijnmond</channel>
<channel site="tvgids.nl" lang="nl" xmltv_id="RTVUtrecht.nl" site_id="rtvutrecht">RTV Utrecht</channel>
<channel site="tvgids.nl" lang="nl" xmltv_id="SBS6.nl" site_id="sbs6">SBS 6</channel>
<channel site="tvgids.nl" lang="nl" xmltv_id="ShortsTV.uk" site_id="shortstv">ShortsTV</channel>
<channel site="tvgids.nl" lang="nl" xmltv_id="StingrayClassica.ca" site_id="stingrayclassica">Stingray Classica</channel>
<channel site="tvgids.nl" lang="nl" xmltv_id="Tipik.be" site_id="rtbfla2">RTBF Tipik</channel>
<channel site="tvgids.nl" lang="nl" xmltv_id="TLC.nl" site_id="tlc">TLC</channel>
<channel site="tvgids.nl" lang="nl" xmltv_id="TV5MondeEurope.fr" site_id="tv5">TV5MONDE</channel>
<channel site="tvgids.nl" lang="nl" xmltv_id="TV538.nl" site_id="tv538">TV 538</channel>
<channel site="tvgids.nl" lang="nl" xmltv_id="TVNoord.nl" site_id="noord">TV Noord</channel>
<channel site="tvgids.nl" lang="nl" xmltv_id="TVOrange.nl" site_id="oranjetv">Oranje TV</channel>
<channel site="tvgids.nl" lang="nl" xmltv_id="TVWest.nl" site_id="rtvwest">RTV West</channel>
<channel site="tvgids.nl" lang="nl" xmltv_id="Veronica.nl" site_id="veronica">Veronica</channel>
<channel site="tvgids.nl" lang="nl" xmltv_id="VeronicaDisneyXD.nl" site_id="veronicadisneyxd">Veronica/Disney XD</channel>
<channel site="tvgids.nl" lang="nl" xmltv_id="XITE.nl" site_id="xite">XITE</channel>
<channel site="tvgids.nl" lang="nl" xmltv_id="ZDF.de" site_id="zdf">ZDF</channel>
<channel site="tvgids.nl" lang="nl" xmltv_id="ZiggoSport.nl" site_id="ziggosport">Ziggo Sport</channel>
<channel site="tvgids.nl" lang="tr" xmltv_id="TRTWorld.tr" site_id="trt">TRT World</channel>
</channels>

View File

@@ -1,87 +1,87 @@
const cheerio = require('cheerio')
const axios = require('axios')
const { DateTime } = require('luxon')
module.exports = {
site: 'tvgids.nl',
days: 2,
url: function ({ date, channel }) {
const path =
DateTime.utc().day === DateTime.fromMillis(date.valueOf()).day
? ''
: `${date.format('DD-MM-YYYY')}/`
return `https://www.tvgids.nl/gids/${path}${channel.site_id}`
},
parser: function ({ content, date }) {
date = date.subtract(1, 'd')
let programs = []
const items = parseItems(content)
items.forEach(item => {
const $item = cheerio.load(item)
const prev = programs[programs.length - 1]
let start = parseStart($item, date)
if (prev) {
if (start < prev.start) {
start = start.plus({ days: 1 })
date = date.add(1, 'd')
}
prev.stop = start
}
const stop = start.plus({ minutes: 30 })
programs.push({
title: parseTitle($item),
description: parseDescription($item),
image: parseImage($item),
start,
stop
})
})
return programs
},
async channels() {
const data = await axios
.get('https://www.tvgids.nl/gids/')
.then(r => r.data)
.catch(console.log)
const $ = cheerio.load(data)
const channels = []
$('.guide__channel-logo-container').each((i, el) => {
channels.push({
site_id: $(el).find('a').attr('id'),
name: $(el).find('img').attr('title'),
lang: 'nl'
})
})
return channels
}
}
function parseTitle($item) {
return $item('.program__title').text().trim()
}
function parseDescription($item) {
return $item('.program__text').text().trim()
}
function parseImage($item) {
return $item('.program__thumbnail').data('src')
}
function parseStart($item, date) {
const time = $item('.program__starttime').clone().children().remove().end().text().trim()
return DateTime.fromFormat(`${date.format('YYYY-MM-DD')} ${time}`, 'yyyy-MM-dd HH:mm', {
zone: 'Europe/Amsterdam'
}).toUTC()
}
function parseItems(content) {
const $ = cheerio.load(content)
return $('.guide__guide .program').toArray()
}
const cheerio = require('cheerio')
const axios = require('axios')
const { DateTime } = require('luxon')
module.exports = {
site: 'tvgids.nl',
days: 2,
url: function ({ date, channel }) {
const path =
DateTime.utc().day === DateTime.fromMillis(date.valueOf()).day
? ''
: `${date.format('DD-MM-YYYY')}/`
return `https://www.tvgids.nl/gids/${path}${channel.site_id}`
},
parser: function ({ content, date }) {
date = date.subtract(1, 'd')
let programs = []
const items = parseItems(content)
items.forEach(item => {
const $item = cheerio.load(item)
const prev = programs[programs.length - 1]
let start = parseStart($item, date)
if (prev) {
if (start < prev.start) {
start = start.plus({ days: 1 })
date = date.add(1, 'd')
}
prev.stop = start
}
const stop = start.plus({ minutes: 30 })
programs.push({
title: parseTitle($item),
description: parseDescription($item),
image: parseImage($item),
start,
stop
})
})
return programs
},
async channels() {
const data = await axios
.get('https://www.tvgids.nl/gids/')
.then(r => r.data)
.catch(console.log)
const $ = cheerio.load(data)
const channels = []
$('.guide__channel-logo-container').each((i, el) => {
channels.push({
site_id: $(el).find('a').attr('id'),
name: $(el).find('img').attr('title'),
lang: 'nl'
})
})
return channels
}
}
function parseTitle($item) {
return $item('.program__title').text().trim()
}
function parseDescription($item) {
return $item('.program__text').text().trim()
}
function parseImage($item) {
return $item('.program__thumbnail').data('src')
}
function parseStart($item, date) {
const time = $item('.program__starttime').clone().children().remove().end().text().trim()
return DateTime.fromFormat(`${date.format('YYYY-MM-DD')} ${time}`, 'yyyy-MM-dd HH:mm', {
zone: 'Europe/Amsterdam'
}).toUTC()
}
function parseItems(content) {
const $ = cheerio.load(content)
return $('.guide__guide .program').toArray()
}

View File

@@ -1,60 +1,60 @@
const { parser, url } = require('./tvgids.nl.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')
dayjs.extend(customParseFormat)
dayjs.extend(utc)
const date = dayjs.utc('2025-01-19', 'YYYY-MM-DD').startOf('d')
const channel = {
site_id: 'npo1',
xmltv_id: 'NPO1.nl'
}
it('can generate valid url', () => {
jest.useFakeTimers().setSystemTime(new Date('2025-01-17'))
expect(url({ date, channel })).toBe('https://www.tvgids.nl/gids/19-01-2025/npo1')
})
it('can generate valid url for today', () => {
const today = dayjs().startOf('d')
expect(url({ date: today, channel })).toBe('https://www.tvgids.nl/gids/npo1')
})
it('can parse response', () => {
const content = fs.readFileSync(path.resolve(__dirname, '__data__/content.html'))
const results = parser({ content, date }).map(p => {
p.start = p.start.toJSON()
p.stop = p.stop.toJSON()
return p
})
expect(results[0]).toMatchObject({
start: '2025-01-18T22:57:00.000Z',
stop: '2025-01-18T23:58:00.000Z',
title: 'Op1',
image: 'https://tvgidsassets.nl/v301/upload/o/carrousel/op1-451542641.jpg',
description: "Talkshow met wisselende presentatieduo's, live vanuit Amsterdam."
})
expect(results[61]).toMatchObject({
start: '2025-01-20T01:18:00.000Z',
stop: '2025-01-20T01:48:00.000Z',
title: 'NOS Journaal',
image: 'https://tvgidsassets.nl/v301/upload/n/carrousel/nos-journaal-452818771.jpg',
description:
'Met het laatste nieuws, gebeurtenissen van nationaal en internationaal belang en de weersverwachting voor vandaag.'
})
})
it('can handle empty guide', () => {
const result = parser({
content: '',
date
})
expect(result).toMatchObject([])
})
const { parser, url } = require('./tvgids.nl.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')
dayjs.extend(customParseFormat)
dayjs.extend(utc)
const date = dayjs.utc('2025-01-19', 'YYYY-MM-DD').startOf('d')
const channel = {
site_id: 'npo1',
xmltv_id: 'NPO1.nl'
}
it('can generate valid url', () => {
jest.useFakeTimers().setSystemTime(new Date('2025-01-17'))
expect(url({ date, channel })).toBe('https://www.tvgids.nl/gids/19-01-2025/npo1')
})
it('can generate valid url for today', () => {
const today = dayjs().startOf('d')
expect(url({ date: today, channel })).toBe('https://www.tvgids.nl/gids/npo1')
})
it('can parse response', () => {
const content = fs.readFileSync(path.resolve(__dirname, '__data__/content.html'))
const results = parser({ content, date }).map(p => {
p.start = p.start.toJSON()
p.stop = p.stop.toJSON()
return p
})
expect(results[0]).toMatchObject({
start: '2025-01-18T22:57:00.000Z',
stop: '2025-01-18T23:58:00.000Z',
title: 'Op1',
image: 'https://tvgidsassets.nl/v301/upload/o/carrousel/op1-451542641.jpg',
description: "Talkshow met wisselende presentatieduo's, live vanuit Amsterdam."
})
expect(results[61]).toMatchObject({
start: '2025-01-20T01:18:00.000Z',
stop: '2025-01-20T01:48:00.000Z',
title: 'NOS Journaal',
image: 'https://tvgidsassets.nl/v301/upload/n/carrousel/nos-journaal-452818771.jpg',
description:
'Met het laatste nieuws, gebeurtenissen van nationaal en internationaal belang en de weersverwachting voor vandaag.'
})
})
it('can handle empty guide', () => {
const result = parser({
content: '',
date
})
expect(result).toMatchObject([])
})