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,187 +1,187 @@
<?xml version="1.0" encoding="UTF-8"?>
<channels>
<channel site="horizon.tv" lang="de" xmltv_id="kabeleins.de" site_id="10163">Kabel eins</channel>
<channel site="horizon.tv" lang="de" xmltv_id="Nitro.de" site_id="10171">Nitro</channel>
<channel site="horizon.tv" lang="de" xmltv_id="ORF1.at" site_id="10115">ORF 1</channel>
<channel site="horizon.tv" lang="de" xmltv_id="ORF2.at" site_id="10116">ORF 2</channel>
<channel site="horizon.tv" lang="de" xmltv_id="ORFIII.at" site_id="10117">ORF III</channel>
<channel site="horizon.tv" lang="de" xmltv_id="ProSieben.de" site_id="10165">ProSieben</channel>
<channel site="horizon.tv" lang="de" xmltv_id="RTL.de" site_id="10166">RTL DE</channel>
<channel site="horizon.tv" lang="de" xmltv_id="RTLZwei.de" site_id="10167">RTL Zwei</channel>
<channel site="horizon.tv" lang="de" xmltv_id="SAT1.de" site_id="10169">SAT 1</channel>
<channel site="horizon.tv" lang="de" xmltv_id="RTLSuper.de" site_id="10168">Super RTL</channel>
<channel site="horizon.tv" lang="de" xmltv_id="VOX.de" site_id="10170">VOX</channel>
<channel site="horizon.tv" lang="de" xmltv_id="WELT.de" site_id="10164">WELT</channel>
<channel site="horizon.tv" lang="en" xmltv_id="360TuneBox.nl" site_id="10200">360 TuneBox HD</channel>
<channel site="horizon.tv" lang="en" xmltv_id="BabesTV.us" site_id="10187">BabesTV HD</channel>
<channel site="horizon.tv" lang="en" xmltv_id="BrazzersTVEurope.us" site_id="10188">Brazzers TV HD</channel>
<channel site="horizon.tv" lang="en" xmltv_id="ClubMTVEurope.uk" site_id="10094">Club MTV</channel>
<channel site="horizon.tv" lang="en" xmltv_id="CNBCEurope.uk" site_id="10110">CNBC Europe HD</channel>
<channel site="horizon.tv" lang="en" xmltv_id="CNNInternational.us@MENA" site_id="10108">CNN</channel>
<channel site="horizon.tv" lang="en" xmltv_id="DocuBox.nl" site_id="10129">Docubox HD</channel>
<channel site="horizon.tv" lang="en" xmltv_id="DW.de@English" site_id="10109">Deutsche Welle HD</channel>
<channel site="horizon.tv" lang="en" xmltv_id="EroXXX.nl@HD" site_id="10131">EroXXX HD</channel>
<channel site="horizon.tv" lang="en" xmltv_id="EuronewsEnglish.fr" site_id="10111">Euronews HD</channel>
<channel site="horizon.tv" lang="en" xmltv_id="EXTASYTV.cz" site_id="10136">Extasy HD</channel>
<channel site="horizon.tv" lang="en" xmltv_id="ExtremeSportsChannel.nl" site_id="10079">Extreme Sports</channel>
<channel site="horizon.tv" lang="en" xmltv_id="FashionBox.nl" site_id="10202">FashionBox HD</channel>
<channel site="horizon.tv" lang="en" xmltv_id="FashionTVEurope.fr" site_id="10105">Fashion TV HD</channel>
<channel site="horizon.tv" lang="en" xmltv_id="FastFunBox.nl" site_id="10130">Fast &amp; FunBox HD</channel>
<channel site="horizon.tv" lang="en" xmltv_id="FightBox.nl" site_id="10128">Fightbox HD</channel>
<channel site="horizon.tv" lang="en" xmltv_id="FilmBoxArthouse.nl" site_id="10201">FilmBox Arthouse HD</channel>
<channel site="horizon.tv" lang="en" xmltv_id="FREEDOM.ua" site_id="10190">UATV</channel>
<channel site="horizon.tv" lang="en" xmltv_id="Mezzo.fr" site_id="10104">Mezzo</channel>
<channel site="horizon.tv" lang="en" xmltv_id="MTV00s.uk" site_id="10096">MTV 00s</channel>
<channel site="horizon.tv" lang="en" xmltv_id="MTV80s.uk" site_id="10097">MTV 80s</channel>
<channel site="horizon.tv" lang="en" xmltv_id="MTV90s.uk" site_id="10095">MTV 90s</channel>
<channel site="horizon.tv" lang="en" xmltv_id="MTVLive.uk" site_id="10093">MTV Live HD</channel>
<channel site="horizon.tv" lang="en" xmltv_id="RealityKingsTV.us" site_id="10189">Reality Kings HD</channel>
<channel site="horizon.tv" lang="en" xmltv_id="SkyNewsInternational.uk" site_id="10197">Sky News</channel>
<channel site="horizon.tv" lang="en" xmltv_id="TRTWorld.tr" site_id="10119">TRT World HD</channel>
<channel site="horizon.tv" lang="fr" xmltv_id="France24.fr@French" site_id="10112">France 24</channel>
<channel site="horizon.tv" lang="sk" xmltv_id="" site_id="10020">CT D HD / CT art HD</channel>
<channel site="horizon.tv" lang="sk" xmltv_id="" site_id="10046">CS Film CS Horror HD</channel>
<channel site="horizon.tv" lang="sk" xmltv_id="" site_id="10051">Crime and Investigation</channel>
<channel site="horizon.tv" lang="sk" xmltv_id="" site_id="10055">ID HD</channel>
<channel site="horizon.tv" lang="sk" xmltv_id="" site_id="10062">TLC HD</channel>
<channel site="horizon.tv" lang="sk" xmltv_id="" site_id="10078">Golf Channel HD</channel>
<channel site="horizon.tv" lang="sk" xmltv_id="" site_id="10092">MTV Europe</channel>
<channel site="horizon.tv" lang="sk" xmltv_id="" site_id="10144">Filmbox HU</channel>
<channel site="horizon.tv" lang="sk" xmltv_id="" site_id="10196">Markiza Krimi HD</channel>
<channel site="horizon.tv" lang="sk" xmltv_id="" site_id="10199">Skvele TV HD</channel>
<channel site="horizon.tv" lang="sk" xmltv_id="" site_id="10203">E! Entertainment HD</channel>
<channel site="horizon.tv" lang="sk" xmltv_id="" site_id="10204">TV Doktor HD</channel>
<channel site="horizon.tv" lang="sk" xmltv_id="24.sk" site_id="10193">RTVS 24 HD</channel>
<channel site="horizon.tv" lang="sk" xmltv_id="AMCEurope.uk@CzechRepublic" site_id="10024">AMC HD</channel>
<channel site="horizon.tv" lang="en" xmltv_id="AnimalPlanetEurope.uk" site_id="10049">Animal Planet HD</channel>
<channel site="horizon.tv" lang="hu" xmltv_id="ATV.hu" site_id="10147">Magyar ATV</channel>
<channel site="horizon.tv" lang="sk" xmltv_id="automotorundsportchannel.de" site_id="10077">Auto Motor Sport</channel>
<channel site="horizon.tv" lang="sk" xmltv_id="BarrandovKrimi.cz" site_id="10033">Barrandov Krimi HD</channel>
<channel site="horizon.tv" lang="eo" xmltv_id="Bober.ru" site_id="10178">Bober</channel>
<channel site="horizon.tv" lang="pl" xmltv_id="Carousel.ru" site_id="10180">Carousel</channel>
<channel site="horizon.tv" lang="cs" xmltv_id="CartoonNetworkCEE.uk@CzechRepublic" site_id="10091">Cartoon Network HD</channel>
<channel site="horizon.tv" lang="cs" xmltv_id="Cinemax2CentralEurope.hu@HD" site_id="10124">Cinemax 2 HD</channel>
<channel site="horizon.tv" lang="cs" xmltv_id="CinemaxCentralEurope.hu@HD" site_id="10123">Cinemax HD</channel>
<channel site="horizon.tv" lang="sk" xmltv_id="CNNPrimaNews.cz" site_id="10026">CNN Prima News HD</channel>
<channel site="horizon.tv" lang="hu" xmltv_id="CoolTV.hu" site_id="10149">Cool TV</channel>
<channel site="horizon.tv" lang="cs" xmltv_id="CSHistory.cz" site_id="10047">CS History HD</channel>
<channel site="horizon.tv" lang="cs" xmltv_id="CSMystery.cz" site_id="10048">CS Mystery HD</channel>
<channel site="horizon.tv" lang="cs" xmltv_id="CT1.cz" site_id="10018">CT 1 HD</channel>
<channel site="horizon.tv" lang="cs" xmltv_id="CT2.cz" site_id="10019">CT 2 HD</channel>
<channel site="horizon.tv" lang="cs" xmltv_id="CT24.cz" site_id="10021">CT 24 HD</channel>
<channel site="horizon.tv" lang="cs" xmltv_id="CTSport.cz" site_id="10082">CT sport HD</channel>
<channel site="horizon.tv" lang="sk" xmltv_id="CurrentTimeTV.cz" site_id="10194">Current Time HD</channel>
<channel site="horizon.tv" lang="sk" xmltv_id="DiscoveryChannelEurope.uk@CzechRepublic" site_id="10052">Discovery HD</channel>
<channel site="horizon.tv" lang="en" xmltv_id="DiscoveryScienceEurope.uk@CzechRepublic" site_id="10053">Discovery Science HD</channel>
<channel site="horizon.tv" lang="sk" xmltv_id="DisneyChannel.cz" site_id="10086">Disney Channel</channel>
<channel site="horizon.tv" lang="sk" xmltv_id="Domkino.ru" site_id="10174">Dom Kino</channel>
<channel site="horizon.tv" lang="sk" xmltv_id="DomkinoPremium.ru" site_id="10173">Dom Kino PREMIUM HD</channel>
<channel site="horizon.tv" lang="en" xmltv_id="DTX.cz" site_id="10054">DTX HD</channel>
<channel site="horizon.tv" lang="sk" xmltv_id="ducktv.sk" site_id="10084">ducktv HD</channel>
<channel site="horizon.tv" lang="hu" xmltv_id="Duna.hu" site_id="10146">Duna HD</channel>
<channel site="horizon.tv" lang="hu" xmltv_id="DunaWorld.hu" site_id="10145">Duna World HD</channel>
<channel site="horizon.tv" lang="sk" xmltv_id="Dvojka.sk" site_id="10002">Dvojka HD</channel>
<channel site="horizon.tv" lang="sk" xmltv_id="EspresoTV.ua" site_id="10192">Espreso TV</channel>
<channel site="horizon.tv" lang="sk" xmltv_id="EuronewsHungarian.fr" site_id="10152">Euronews HU</channel>
<channel site="horizon.tv" lang="sk" xmltv_id="Eurosport1.fr" site_id="10072">Eurosport 1 HD</channel>
<channel site="horizon.tv" lang="sk" xmltv_id="Eurosport2.fr" site_id="10073">Eurosport 2 HD</channel>
<channel site="horizon.tv" lang="hu" xmltv_id="FEM3.hu" site_id="10161">Fem3</channel>
<channel site="horizon.tv" lang="cs" xmltv_id="FilmBox.nl" site_id="10044">FilmBox HD</channel>
<channel site="horizon.tv" lang="cs" xmltv_id="FilmBoxExtra.nl@CzechRepublic" site_id="10125">FilmBox Extra HD</channel>
<channel site="horizon.tv" lang="cs" xmltv_id="FilmBoxFamily.nl" site_id="10045">FilmBox Family</channel>
<channel site="horizon.tv" lang="cs" xmltv_id="FilmBoxPremium.nl@CzechRepublic" site_id="10126">FilmBox Premium HD</channel>
<channel site="horizon.tv" lang="cs" xmltv_id="FilmBoxStars.nl@CzechRepublic" site_id="10127">FilmBox Stars HD</channel>
<channel site="horizon.tv" lang="sk" xmltv_id="FilmPlus.cz" site_id="10043">Film+ CZ HD</channel>
<channel site="horizon.tv" lang="hu" xmltv_id="FilmPlus.hu" site_id="10162">FILM+ HU</channel>
<channel site="horizon.tv" lang="sk" xmltv_id="Folklorika.sk" site_id="10014">Folklorika HD</channel>
<channel site="horizon.tv" lang="en" xmltv_id="FoodNetwork.hu" site_id="10056">Food Network HD</channel>
<channel site="horizon.tv" lang="cs" xmltv_id="HBO2CentralEurope.hu@HD" site_id="10121">HBO 2 HD</channel>
<channel site="horizon.tv" lang="cs" xmltv_id="HBO3CentralEurope.hu@HD" site_id="10122">HBO 3 HD</channel>
<channel site="horizon.tv" lang="cs" xmltv_id="HBOCentralEurope.hu@HD" site_id="10120">HBO HD</channel>
<channel site="horizon.tv" lang="hu" xmltv_id="HirTV.hu" site_id="10137">HirTV</channel>
<channel site="horizon.tv" lang="cs" xmltv_id="History.cz" site_id="10057">History HD</channel>
<channel site="horizon.tv" lang="cs" xmltv_id="HobbyTV.cz" site_id="10069">Hobby TV HD</channel>
<channel site="horizon.tv" lang="sk" xmltv_id="Jednotka.sk" site_id="10001">Jednotka HD</channel>
<channel site="horizon.tv" lang="sk" xmltv_id="JimJam.hu" site_id="10087">JimJam</channel>
<channel site="horizon.tv" lang="sk" xmltv_id="JOJ24.sk" site_id="10198">JOJ 24 HD</channel>
<channel site="horizon.tv" lang="sk" xmltv_id="JOJCinema.sk" site_id="10007">JOJ Cinema HD</channel>
<channel site="horizon.tv" lang="sk" xmltv_id="Jojko.sk" site_id="10011">Jojko HD</channel>
<channel site="horizon.tv" lang="sk" xmltv_id="JOJPlus.sk" site_id="10006">JOJ Plus HD</channel>
<channel site="horizon.tv" lang="sk" xmltv_id="JOJSport.sk" site_id="10185">JOJ Sport HD</channel>
<channel site="horizon.tv" lang="sk" xmltv_id="JOJWAU.sk" site_id="10009">WAU HD</channel>
<channel site="horizon.tv" lang="sk" xmltv_id="KinoBarrandov.cz" site_id="10034">Kino Barrandov HD</channel>
<channel site="horizon.tv" lang="sk" xmltv_id="LEOTV.cz" site_id="10134">Leo TV HD</channel>
<channel site="horizon.tv" lang="hu" xmltv_id="M1.hu" site_id="10138">m1 HD</channel>
<channel site="horizon.tv" lang="hu" xmltv_id="M2.hu" site_id="10139">m2 HD</channel>
<channel site="horizon.tv" lang="sk" xmltv_id="M4Sport.hu" site_id="10141">m4 Sport HD</channel>
<channel site="horizon.tv" lang="hu" xmltv_id="M5.hu" site_id="10140">m5 HD</channel>
<channel site="horizon.tv" lang="sk" xmltv_id="Markiza.sk" site_id="10003">Markiza HD</channel>
<channel site="horizon.tv" lang="sk" xmltv_id="MarkizaDajto.sk" site_id="10008">Dajto HD</channel>
<channel site="horizon.tv" lang="sk" xmltv_id="MarkizaDoma.sk" site_id="10004">Doma HD</channel>
<channel site="horizon.tv" lang="sk" xmltv_id="MinimaxCEE.cz" site_id="10085">Minimax</channel>
<channel site="horizon.tv" lang="cs" xmltv_id="MnamTV.cz" site_id="10036">Mnam TV HD</channel>
<channel site="horizon.tv" lang="sk" xmltv_id="MnauTV.cz" site_id="10037">Mnau TV HD</channel>
<channel site="horizon.tv" lang="hu" xmltv_id="MuzsikaTV.hu" site_id="10156">Muzsika TV</channel>
<channel site="horizon.tv" lang="sk" xmltv_id="MuzykaPervogo.ru" site_id="10182">Muzika Pervogo</channel>
<channel site="horizon.tv" lang="cs" xmltv_id="NationalGeographic.cz" site_id="10058">National Geographic HD</channel>
<channel site="horizon.tv" lang="cs" xmltv_id="NationalGeographicWild.cz" site_id="10059">Nat Geo Wild HD</channel>
<channel site="horizon.tv" lang="sk" xmltv_id="Nickelodeon.cz" site_id="10088">Nickelodeon</channel>
<channel site="horizon.tv" lang="sk" xmltv_id="NickJr.cz" site_id="10089">Nick Jr.</channel>
<channel site="horizon.tv" lang="cs" xmltv_id="Nicktoons.cz" site_id="10090">NickToons</channel>
<channel site="horizon.tv" lang="cs" xmltv_id="NovaInternational.cz" site_id="10022">Nova International HD</channel>
<channel site="horizon.tv" lang="cs" xmltv_id="NovaSport1.cz" site_id="10080">Nova Sport 1 HD</channel>
<channel site="horizon.tv" lang="cs" xmltv_id="NovaSport2.cz" site_id="10081">Nova Sport 2 HD</channel>
<channel site="horizon.tv" lang="sk" xmltv_id="O.ru" site_id="10181">O!</channel>
<channel site="horizon.tv" lang="sk" xmltv_id="ParkTV.sk" site_id="10070">Park TV HD</channel>
<channel site="horizon.tv" lang="sk" xmltv_id="Pobeda.ru" site_id="10179">Pobeda</channel>
<channel site="horizon.tv" lang="sk" xmltv_id="Poehali.ru" site_id="10176">Poekhali!</channel>
<channel site="horizon.tv" lang="cs" xmltv_id="PrimaCool.cz" site_id="10029">Prima COOL HD</channel>
<channel site="horizon.tv" lang="cs" xmltv_id="PrimaKrimi.cz" site_id="10027">Prima KRIMI HD</channel>
<channel site="horizon.tv" lang="cs" xmltv_id="PrimaLove.cz" site_id="10030">Prima love HD</channel>
<channel site="horizon.tv" lang="cs" xmltv_id="PrimaMax.cz" site_id="10028">Prima MAX HD</channel>
<channel site="horizon.tv" lang="sk" xmltv_id="PrimaPlus.cz" site_id="10023">Prima PLUS HD</channel>
<channel site="horizon.tv" lang="cs" xmltv_id="PrimaZoom.cz" site_id="10031">Prima ZOOM HD</channel>
<channel site="horizon.tv" lang="sk" xmltv_id="Relax.cz" site_id="10106">RELAX</channel>
<channel site="horizon.tv" lang="cs" xmltv_id="RetroMusicTV.cz" site_id="10098">Retro Music TV</channel>
<channel site="horizon.tv" lang="hu" xmltv_id="RTL.hu" site_id="10142">RTL HU</channel>
<channel site="horizon.tv" lang="hu" xmltv_id="RTLGold.hu" site_id="10153">RTL Gold</channel>
<channel site="horizon.tv" lang="hu" xmltv_id="RTLHarom.hu" site_id="10154">RTL HAROM</channel>
<channel site="horizon.tv" lang="hu" xmltv_id="RTLKetto.hu" site_id="10143">RTL KETTO</channel>
<channel site="horizon.tv" lang="sk" xmltv_id="Senzi.sk" site_id="10016">SENZI HD</channel>
<channel site="horizon.tv" lang="sk" xmltv_id="SlagerMuzika.cz" site_id="10102">Slager muzika HD</channel>
<channel site="horizon.tv" lang="sk" xmltv_id="SlagerOriginal.cz" site_id="10101">Slager original HD</channel>
<channel site="horizon.tv" lang="sk" xmltv_id="SlagerPremium.cz" site_id="10103">Slager Premium HD</channel>
<channel site="horizon.tv" lang="hu" xmltv_id="SlagerTV.hu" site_id="10157">Slager TV HD</channel>
<channel site="horizon.tv" lang="hu" xmltv_id="SorozatPlus.hu" site_id="10155">Sorozat+</channel>
<channel site="horizon.tv" lang="sk" xmltv_id="Spektrum.cz" site_id="10060">Spektrum HD</channel>
<channel site="horizon.tv" lang="cs" xmltv_id="SpektrumHome.hu" site_id="10061">Spektrum home HD</channel>
<channel site="horizon.tv" lang="sk" xmltv_id="Sport1.cz" site_id="10074">Sport 1 HD</channel>
<channel site="horizon.tv" lang="sk" xmltv_id="Sport2.cz" site_id="10075">Sport 2 HD</channel>
<channel site="horizon.tv" lang="sk" xmltv_id="Sport.sk" site_id="10186">RTVS Sport HD</channel>
<channel site="horizon.tv" lang="hu" xmltv_id="Story4.hu" site_id="10158">Story 4</channel>
<channel site="horizon.tv" lang="hu" xmltv_id="SuperTV2.hu" site_id="10159">Super TV2</channel>
<channel site="horizon.tv" lang="sk" xmltv_id="TA3.sk" site_id="10012">TA3 HD</channel>
<channel site="horizon.tv" lang="sk" xmltv_id="Telecafe.ru" site_id="10177">Telecafe</channel>
<channel site="horizon.tv" lang="cs" xmltv_id="TelevizeSeznam.cz" site_id="10025">Seznam.cz TV HD</channel>
<channel site="horizon.tv" lang="sk" xmltv_id="TheFishingHuntingChannel.hu" site_id="10068">Fishing and Hunting</channel>
<channel site="horizon.tv" lang="en" xmltv_id="TravelChannelEMEA.uk@Hungary" site_id="10064">Travel Channel HD</channel>
<channel site="horizon.tv" lang="sk" xmltv_id="TurboTV.sk" site_id="10195">TurboTV HD</channel>
<channel site="horizon.tv" lang="hu" xmltv_id="TV2.hu" site_id="10148">TV2</channel>
<channel site="horizon.tv" lang="hu" xmltv_id="TV2Sef.hu" site_id="10160">TV2Sef</channel>
<channel site="horizon.tv" lang="hu" xmltv_id="TV4.hu" site_id="10150">TV4</channel>
<channel site="horizon.tv" lang="sk" xmltv_id="TV8.sk" site_id="10015">TV8 HD</channel>
<channel site="horizon.tv" lang="cs" xmltv_id="TVBarrandov.cz" site_id="10032">Barrandov TV HD</channel>
<channel site="horizon.tv" lang="sk" xmltv_id="TVJOJ.sk" site_id="10005">JOJ HD</channel>
<channel site="horizon.tv" lang="sk" xmltv_id="TVLux.sk" site_id="10013">TV LUX HD</channel>
<channel site="horizon.tv" lang="cs" xmltv_id="TVNoe.cz" site_id="10035">Noe TV HD</channel>
<channel site="horizon.tv" lang="cs" xmltv_id="TVPaprika.cz" site_id="10063">TV Paprika HD</channel>
<channel site="horizon.tv" lang="hu" xmltv_id="TVPaprika.hu" site_id="10151">TV Paprika HU</channel>
<channel site="horizon.tv" lang="pl" xmltv_id="TVPPolonia.pl" site_id="10118">TVP Polonia HD</channel>
<channel site="horizon.tv" lang="sk" xmltv_id="TVRaj.sk" site_id="10038">TV Raj HD</channel>
<channel site="horizon.tv" lang="sk" xmltv_id="TVRomana.sk" site_id="10184">TV Romana HD</channel>
<channel site="horizon.tv" lang="sk" xmltv_id="TVRuzinov.sk" site_id="10039">TV Ruzinov HD</channel>
<channel site="horizon.tv" lang="cs" xmltv_id="ViasatExplore.cz" site_id="10065">Viasat Explore HD</channel>
<channel site="horizon.tv" lang="cs" xmltv_id="ViasatHistory.cz" site_id="10066">Viasat History HD</channel>
<channel site="horizon.tv" lang="cs" xmltv_id="ViasatNature.cz" site_id="10067">Viasat Nature HD</channel>
<channel site="horizon.tv" lang="sk" xmltv_id="Vremya.ru" site_id="10175">Vremja</channel>
<?xml version="1.0" encoding="UTF-8"?>
<channels>
<channel site="horizon.tv" lang="de" xmltv_id="kabeleins.de" site_id="10163">Kabel eins</channel>
<channel site="horizon.tv" lang="de" xmltv_id="Nitro.de" site_id="10171">Nitro</channel>
<channel site="horizon.tv" lang="de" xmltv_id="ORF1.at" site_id="10115">ORF 1</channel>
<channel site="horizon.tv" lang="de" xmltv_id="ORF2.at" site_id="10116">ORF 2</channel>
<channel site="horizon.tv" lang="de" xmltv_id="ORFIII.at" site_id="10117">ORF III</channel>
<channel site="horizon.tv" lang="de" xmltv_id="ProSieben.de" site_id="10165">ProSieben</channel>
<channel site="horizon.tv" lang="de" xmltv_id="RTL.de" site_id="10166">RTL DE</channel>
<channel site="horizon.tv" lang="de" xmltv_id="RTLZwei.de" site_id="10167">RTL Zwei</channel>
<channel site="horizon.tv" lang="de" xmltv_id="SAT1.de" site_id="10169">SAT 1</channel>
<channel site="horizon.tv" lang="de" xmltv_id="RTLSuper.de" site_id="10168">Super RTL</channel>
<channel site="horizon.tv" lang="de" xmltv_id="VOX.de" site_id="10170">VOX</channel>
<channel site="horizon.tv" lang="de" xmltv_id="WELT.de" site_id="10164">WELT</channel>
<channel site="horizon.tv" lang="en" xmltv_id="360TuneBox.nl" site_id="10200">360 TuneBox HD</channel>
<channel site="horizon.tv" lang="en" xmltv_id="BabesTV.us" site_id="10187">BabesTV HD</channel>
<channel site="horizon.tv" lang="en" xmltv_id="BrazzersTVEurope.us" site_id="10188">Brazzers TV HD</channel>
<channel site="horizon.tv" lang="en" xmltv_id="ClubMTVEurope.uk" site_id="10094">Club MTV</channel>
<channel site="horizon.tv" lang="en" xmltv_id="CNBCEurope.uk" site_id="10110">CNBC Europe HD</channel>
<channel site="horizon.tv" lang="en" xmltv_id="CNNInternational.us@MENA" site_id="10108">CNN</channel>
<channel site="horizon.tv" lang="en" xmltv_id="DocuBox.nl" site_id="10129">Docubox HD</channel>
<channel site="horizon.tv" lang="en" xmltv_id="DW.de@English" site_id="10109">Deutsche Welle HD</channel>
<channel site="horizon.tv" lang="en" xmltv_id="EroXXX.nl@HD" site_id="10131">EroXXX HD</channel>
<channel site="horizon.tv" lang="en" xmltv_id="EuronewsEnglish.fr" site_id="10111">Euronews HD</channel>
<channel site="horizon.tv" lang="en" xmltv_id="EXTASYTV.cz" site_id="10136">Extasy HD</channel>
<channel site="horizon.tv" lang="en" xmltv_id="ExtremeSportsChannel.nl" site_id="10079">Extreme Sports</channel>
<channel site="horizon.tv" lang="en" xmltv_id="FashionBox.nl" site_id="10202">FashionBox HD</channel>
<channel site="horizon.tv" lang="en" xmltv_id="FashionTVEurope.fr" site_id="10105">Fashion TV HD</channel>
<channel site="horizon.tv" lang="en" xmltv_id="FastFunBox.nl" site_id="10130">Fast &amp; FunBox HD</channel>
<channel site="horizon.tv" lang="en" xmltv_id="FightBox.nl" site_id="10128">Fightbox HD</channel>
<channel site="horizon.tv" lang="en" xmltv_id="FilmBoxArthouse.nl" site_id="10201">FilmBox Arthouse HD</channel>
<channel site="horizon.tv" lang="en" xmltv_id="FREEDOM.ua" site_id="10190">UATV</channel>
<channel site="horizon.tv" lang="en" xmltv_id="Mezzo.fr" site_id="10104">Mezzo</channel>
<channel site="horizon.tv" lang="en" xmltv_id="MTV00s.uk" site_id="10096">MTV 00s</channel>
<channel site="horizon.tv" lang="en" xmltv_id="MTV80s.uk" site_id="10097">MTV 80s</channel>
<channel site="horizon.tv" lang="en" xmltv_id="MTV90s.uk" site_id="10095">MTV 90s</channel>
<channel site="horizon.tv" lang="en" xmltv_id="MTVLive.uk" site_id="10093">MTV Live HD</channel>
<channel site="horizon.tv" lang="en" xmltv_id="RealityKingsTV.us" site_id="10189">Reality Kings HD</channel>
<channel site="horizon.tv" lang="en" xmltv_id="SkyNewsInternational.uk" site_id="10197">Sky News</channel>
<channel site="horizon.tv" lang="en" xmltv_id="TRTWorld.tr" site_id="10119">TRT World HD</channel>
<channel site="horizon.tv" lang="fr" xmltv_id="France24.fr@French" site_id="10112">France 24</channel>
<channel site="horizon.tv" lang="sk" xmltv_id="" site_id="10020">CT D HD / CT art HD</channel>
<channel site="horizon.tv" lang="sk" xmltv_id="" site_id="10046">CS Film CS Horror HD</channel>
<channel site="horizon.tv" lang="sk" xmltv_id="" site_id="10051">Crime and Investigation</channel>
<channel site="horizon.tv" lang="sk" xmltv_id="" site_id="10055">ID HD</channel>
<channel site="horizon.tv" lang="sk" xmltv_id="" site_id="10062">TLC HD</channel>
<channel site="horizon.tv" lang="sk" xmltv_id="" site_id="10078">Golf Channel HD</channel>
<channel site="horizon.tv" lang="sk" xmltv_id="" site_id="10092">MTV Europe</channel>
<channel site="horizon.tv" lang="sk" xmltv_id="" site_id="10144">Filmbox HU</channel>
<channel site="horizon.tv" lang="sk" xmltv_id="" site_id="10196">Markiza Krimi HD</channel>
<channel site="horizon.tv" lang="sk" xmltv_id="" site_id="10199">Skvele TV HD</channel>
<channel site="horizon.tv" lang="sk" xmltv_id="" site_id="10203">E! Entertainment HD</channel>
<channel site="horizon.tv" lang="sk" xmltv_id="" site_id="10204">TV Doktor HD</channel>
<channel site="horizon.tv" lang="sk" xmltv_id="24.sk" site_id="10193">RTVS 24 HD</channel>
<channel site="horizon.tv" lang="sk" xmltv_id="AMCEurope.uk@CzechRepublic" site_id="10024">AMC HD</channel>
<channel site="horizon.tv" lang="en" xmltv_id="AnimalPlanetEurope.uk" site_id="10049">Animal Planet HD</channel>
<channel site="horizon.tv" lang="hu" xmltv_id="ATV.hu" site_id="10147">Magyar ATV</channel>
<channel site="horizon.tv" lang="sk" xmltv_id="automotorundsportchannel.de" site_id="10077">Auto Motor Sport</channel>
<channel site="horizon.tv" lang="sk" xmltv_id="BarrandovKrimi.cz" site_id="10033">Barrandov Krimi HD</channel>
<channel site="horizon.tv" lang="eo" xmltv_id="Bober.ru" site_id="10178">Bober</channel>
<channel site="horizon.tv" lang="pl" xmltv_id="Carousel.ru" site_id="10180">Carousel</channel>
<channel site="horizon.tv" lang="cs" xmltv_id="CartoonNetworkCEE.uk@CzechRepublic" site_id="10091">Cartoon Network HD</channel>
<channel site="horizon.tv" lang="cs" xmltv_id="Cinemax2CentralEurope.hu@HD" site_id="10124">Cinemax 2 HD</channel>
<channel site="horizon.tv" lang="cs" xmltv_id="CinemaxCentralEurope.hu@HD" site_id="10123">Cinemax HD</channel>
<channel site="horizon.tv" lang="sk" xmltv_id="CNNPrimaNews.cz" site_id="10026">CNN Prima News HD</channel>
<channel site="horizon.tv" lang="hu" xmltv_id="CoolTV.hu" site_id="10149">Cool TV</channel>
<channel site="horizon.tv" lang="cs" xmltv_id="CSHistory.cz" site_id="10047">CS History HD</channel>
<channel site="horizon.tv" lang="cs" xmltv_id="CSMystery.cz" site_id="10048">CS Mystery HD</channel>
<channel site="horizon.tv" lang="cs" xmltv_id="CT1.cz" site_id="10018">CT 1 HD</channel>
<channel site="horizon.tv" lang="cs" xmltv_id="CT2.cz" site_id="10019">CT 2 HD</channel>
<channel site="horizon.tv" lang="cs" xmltv_id="CT24.cz" site_id="10021">CT 24 HD</channel>
<channel site="horizon.tv" lang="cs" xmltv_id="CTSport.cz" site_id="10082">CT sport HD</channel>
<channel site="horizon.tv" lang="sk" xmltv_id="CurrentTimeTV.cz" site_id="10194">Current Time HD</channel>
<channel site="horizon.tv" lang="sk" xmltv_id="DiscoveryChannelEurope.uk@CzechRepublic" site_id="10052">Discovery HD</channel>
<channel site="horizon.tv" lang="en" xmltv_id="DiscoveryScienceEurope.uk@CzechRepublic" site_id="10053">Discovery Science HD</channel>
<channel site="horizon.tv" lang="sk" xmltv_id="DisneyChannel.cz" site_id="10086">Disney Channel</channel>
<channel site="horizon.tv" lang="sk" xmltv_id="Domkino.ru" site_id="10174">Dom Kino</channel>
<channel site="horizon.tv" lang="sk" xmltv_id="DomkinoPremium.ru" site_id="10173">Dom Kino PREMIUM HD</channel>
<channel site="horizon.tv" lang="en" xmltv_id="DTX.cz" site_id="10054">DTX HD</channel>
<channel site="horizon.tv" lang="sk" xmltv_id="ducktv.sk" site_id="10084">ducktv HD</channel>
<channel site="horizon.tv" lang="hu" xmltv_id="Duna.hu" site_id="10146">Duna HD</channel>
<channel site="horizon.tv" lang="hu" xmltv_id="DunaWorld.hu" site_id="10145">Duna World HD</channel>
<channel site="horizon.tv" lang="sk" xmltv_id="Dvojka.sk" site_id="10002">Dvojka HD</channel>
<channel site="horizon.tv" lang="sk" xmltv_id="EspresoTV.ua" site_id="10192">Espreso TV</channel>
<channel site="horizon.tv" lang="sk" xmltv_id="EuronewsHungarian.fr" site_id="10152">Euronews HU</channel>
<channel site="horizon.tv" lang="sk" xmltv_id="Eurosport1.fr" site_id="10072">Eurosport 1 HD</channel>
<channel site="horizon.tv" lang="sk" xmltv_id="Eurosport2.fr" site_id="10073">Eurosport 2 HD</channel>
<channel site="horizon.tv" lang="hu" xmltv_id="FEM3.hu" site_id="10161">Fem3</channel>
<channel site="horizon.tv" lang="cs" xmltv_id="FilmBox.nl" site_id="10044">FilmBox HD</channel>
<channel site="horizon.tv" lang="cs" xmltv_id="FilmBoxExtra.nl@CzechRepublic" site_id="10125">FilmBox Extra HD</channel>
<channel site="horizon.tv" lang="cs" xmltv_id="FilmBoxFamily.nl" site_id="10045">FilmBox Family</channel>
<channel site="horizon.tv" lang="cs" xmltv_id="FilmBoxPremium.nl@CzechRepublic" site_id="10126">FilmBox Premium HD</channel>
<channel site="horizon.tv" lang="cs" xmltv_id="FilmBoxStars.nl@CzechRepublic" site_id="10127">FilmBox Stars HD</channel>
<channel site="horizon.tv" lang="sk" xmltv_id="FilmPlus.cz" site_id="10043">Film+ CZ HD</channel>
<channel site="horizon.tv" lang="hu" xmltv_id="FilmPlus.hu" site_id="10162">FILM+ HU</channel>
<channel site="horizon.tv" lang="sk" xmltv_id="Folklorika.sk" site_id="10014">Folklorika HD</channel>
<channel site="horizon.tv" lang="en" xmltv_id="FoodNetwork.hu" site_id="10056">Food Network HD</channel>
<channel site="horizon.tv" lang="cs" xmltv_id="HBO2CentralEurope.hu@HD" site_id="10121">HBO 2 HD</channel>
<channel site="horizon.tv" lang="cs" xmltv_id="HBO3CentralEurope.hu@HD" site_id="10122">HBO 3 HD</channel>
<channel site="horizon.tv" lang="cs" xmltv_id="HBOCentralEurope.hu@HD" site_id="10120">HBO HD</channel>
<channel site="horizon.tv" lang="hu" xmltv_id="HirTV.hu" site_id="10137">HirTV</channel>
<channel site="horizon.tv" lang="cs" xmltv_id="History.cz" site_id="10057">History HD</channel>
<channel site="horizon.tv" lang="cs" xmltv_id="HobbyTV.cz" site_id="10069">Hobby TV HD</channel>
<channel site="horizon.tv" lang="sk" xmltv_id="Jednotka.sk" site_id="10001">Jednotka HD</channel>
<channel site="horizon.tv" lang="sk" xmltv_id="JimJam.hu" site_id="10087">JimJam</channel>
<channel site="horizon.tv" lang="sk" xmltv_id="JOJ24.sk" site_id="10198">JOJ 24 HD</channel>
<channel site="horizon.tv" lang="sk" xmltv_id="JOJCinema.sk" site_id="10007">JOJ Cinema HD</channel>
<channel site="horizon.tv" lang="sk" xmltv_id="Jojko.sk" site_id="10011">Jojko HD</channel>
<channel site="horizon.tv" lang="sk" xmltv_id="JOJPlus.sk" site_id="10006">JOJ Plus HD</channel>
<channel site="horizon.tv" lang="sk" xmltv_id="JOJSport.sk" site_id="10185">JOJ Sport HD</channel>
<channel site="horizon.tv" lang="sk" xmltv_id="JOJWAU.sk" site_id="10009">WAU HD</channel>
<channel site="horizon.tv" lang="sk" xmltv_id="KinoBarrandov.cz" site_id="10034">Kino Barrandov HD</channel>
<channel site="horizon.tv" lang="sk" xmltv_id="LEOTV.cz" site_id="10134">Leo TV HD</channel>
<channel site="horizon.tv" lang="hu" xmltv_id="M1.hu" site_id="10138">m1 HD</channel>
<channel site="horizon.tv" lang="hu" xmltv_id="M2.hu" site_id="10139">m2 HD</channel>
<channel site="horizon.tv" lang="sk" xmltv_id="M4Sport.hu" site_id="10141">m4 Sport HD</channel>
<channel site="horizon.tv" lang="hu" xmltv_id="M5.hu" site_id="10140">m5 HD</channel>
<channel site="horizon.tv" lang="sk" xmltv_id="Markiza.sk" site_id="10003">Markiza HD</channel>
<channel site="horizon.tv" lang="sk" xmltv_id="MarkizaDajto.sk" site_id="10008">Dajto HD</channel>
<channel site="horizon.tv" lang="sk" xmltv_id="MarkizaDoma.sk" site_id="10004">Doma HD</channel>
<channel site="horizon.tv" lang="sk" xmltv_id="MinimaxCEE.cz" site_id="10085">Minimax</channel>
<channel site="horizon.tv" lang="cs" xmltv_id="MnamTV.cz" site_id="10036">Mnam TV HD</channel>
<channel site="horizon.tv" lang="sk" xmltv_id="MnauTV.cz" site_id="10037">Mnau TV HD</channel>
<channel site="horizon.tv" lang="hu" xmltv_id="MuzsikaTV.hu" site_id="10156">Muzsika TV</channel>
<channel site="horizon.tv" lang="sk" xmltv_id="MuzykaPervogo.ru" site_id="10182">Muzika Pervogo</channel>
<channel site="horizon.tv" lang="cs" xmltv_id="NationalGeographic.cz" site_id="10058">National Geographic HD</channel>
<channel site="horizon.tv" lang="cs" xmltv_id="NationalGeographicWild.cz" site_id="10059">Nat Geo Wild HD</channel>
<channel site="horizon.tv" lang="sk" xmltv_id="Nickelodeon.cz" site_id="10088">Nickelodeon</channel>
<channel site="horizon.tv" lang="sk" xmltv_id="NickJr.cz" site_id="10089">Nick Jr.</channel>
<channel site="horizon.tv" lang="cs" xmltv_id="Nicktoons.cz" site_id="10090">NickToons</channel>
<channel site="horizon.tv" lang="cs" xmltv_id="NovaInternational.cz" site_id="10022">Nova International HD</channel>
<channel site="horizon.tv" lang="cs" xmltv_id="NovaSport1.cz" site_id="10080">Nova Sport 1 HD</channel>
<channel site="horizon.tv" lang="cs" xmltv_id="NovaSport2.cz" site_id="10081">Nova Sport 2 HD</channel>
<channel site="horizon.tv" lang="sk" xmltv_id="O.ru" site_id="10181">O!</channel>
<channel site="horizon.tv" lang="sk" xmltv_id="ParkTV.sk" site_id="10070">Park TV HD</channel>
<channel site="horizon.tv" lang="sk" xmltv_id="Pobeda.ru" site_id="10179">Pobeda</channel>
<channel site="horizon.tv" lang="sk" xmltv_id="Poehali.ru" site_id="10176">Poekhali!</channel>
<channel site="horizon.tv" lang="cs" xmltv_id="PrimaCool.cz" site_id="10029">Prima COOL HD</channel>
<channel site="horizon.tv" lang="cs" xmltv_id="PrimaKrimi.cz" site_id="10027">Prima KRIMI HD</channel>
<channel site="horizon.tv" lang="cs" xmltv_id="PrimaLove.cz" site_id="10030">Prima love HD</channel>
<channel site="horizon.tv" lang="cs" xmltv_id="PrimaMax.cz" site_id="10028">Prima MAX HD</channel>
<channel site="horizon.tv" lang="sk" xmltv_id="PrimaPlus.cz" site_id="10023">Prima PLUS HD</channel>
<channel site="horizon.tv" lang="cs" xmltv_id="PrimaZoom.cz" site_id="10031">Prima ZOOM HD</channel>
<channel site="horizon.tv" lang="sk" xmltv_id="Relax.cz" site_id="10106">RELAX</channel>
<channel site="horizon.tv" lang="cs" xmltv_id="RetroMusicTV.cz" site_id="10098">Retro Music TV</channel>
<channel site="horizon.tv" lang="hu" xmltv_id="RTL.hu" site_id="10142">RTL HU</channel>
<channel site="horizon.tv" lang="hu" xmltv_id="RTLGold.hu" site_id="10153">RTL Gold</channel>
<channel site="horizon.tv" lang="hu" xmltv_id="RTLHarom.hu" site_id="10154">RTL HAROM</channel>
<channel site="horizon.tv" lang="hu" xmltv_id="RTLKetto.hu" site_id="10143">RTL KETTO</channel>
<channel site="horizon.tv" lang="sk" xmltv_id="Senzi.sk" site_id="10016">SENZI HD</channel>
<channel site="horizon.tv" lang="sk" xmltv_id="SlagerMuzika.cz" site_id="10102">Slager muzika HD</channel>
<channel site="horizon.tv" lang="sk" xmltv_id="SlagerOriginal.cz" site_id="10101">Slager original HD</channel>
<channel site="horizon.tv" lang="sk" xmltv_id="SlagerPremium.cz" site_id="10103">Slager Premium HD</channel>
<channel site="horizon.tv" lang="hu" xmltv_id="SlagerTV.hu" site_id="10157">Slager TV HD</channel>
<channel site="horizon.tv" lang="hu" xmltv_id="SorozatPlus.hu" site_id="10155">Sorozat+</channel>
<channel site="horizon.tv" lang="sk" xmltv_id="Spektrum.cz" site_id="10060">Spektrum HD</channel>
<channel site="horizon.tv" lang="cs" xmltv_id="SpektrumHome.hu" site_id="10061">Spektrum home HD</channel>
<channel site="horizon.tv" lang="sk" xmltv_id="Sport1.cz" site_id="10074">Sport 1 HD</channel>
<channel site="horizon.tv" lang="sk" xmltv_id="Sport2.cz" site_id="10075">Sport 2 HD</channel>
<channel site="horizon.tv" lang="sk" xmltv_id="Sport.sk" site_id="10186">RTVS Sport HD</channel>
<channel site="horizon.tv" lang="hu" xmltv_id="Story4.hu" site_id="10158">Story 4</channel>
<channel site="horizon.tv" lang="hu" xmltv_id="SuperTV2.hu" site_id="10159">Super TV2</channel>
<channel site="horizon.tv" lang="sk" xmltv_id="TA3.sk" site_id="10012">TA3 HD</channel>
<channel site="horizon.tv" lang="sk" xmltv_id="Telecafe.ru" site_id="10177">Telecafe</channel>
<channel site="horizon.tv" lang="cs" xmltv_id="TelevizeSeznam.cz" site_id="10025">Seznam.cz TV HD</channel>
<channel site="horizon.tv" lang="sk" xmltv_id="TheFishingHuntingChannel.hu" site_id="10068">Fishing and Hunting</channel>
<channel site="horizon.tv" lang="en" xmltv_id="TravelChannelEMEA.uk@Hungary" site_id="10064">Travel Channel HD</channel>
<channel site="horizon.tv" lang="sk" xmltv_id="TurboTV.sk" site_id="10195">TurboTV HD</channel>
<channel site="horizon.tv" lang="hu" xmltv_id="TV2.hu" site_id="10148">TV2</channel>
<channel site="horizon.tv" lang="hu" xmltv_id="TV2Sef.hu" site_id="10160">TV2Sef</channel>
<channel site="horizon.tv" lang="hu" xmltv_id="TV4.hu" site_id="10150">TV4</channel>
<channel site="horizon.tv" lang="sk" xmltv_id="TV8.sk" site_id="10015">TV8 HD</channel>
<channel site="horizon.tv" lang="cs" xmltv_id="TVBarrandov.cz" site_id="10032">Barrandov TV HD</channel>
<channel site="horizon.tv" lang="sk" xmltv_id="TVJOJ.sk" site_id="10005">JOJ HD</channel>
<channel site="horizon.tv" lang="sk" xmltv_id="TVLux.sk" site_id="10013">TV LUX HD</channel>
<channel site="horizon.tv" lang="cs" xmltv_id="TVNoe.cz" site_id="10035">Noe TV HD</channel>
<channel site="horizon.tv" lang="cs" xmltv_id="TVPaprika.cz" site_id="10063">TV Paprika HD</channel>
<channel site="horizon.tv" lang="hu" xmltv_id="TVPaprika.hu" site_id="10151">TV Paprika HU</channel>
<channel site="horizon.tv" lang="pl" xmltv_id="TVPPolonia.pl" site_id="10118">TVP Polonia HD</channel>
<channel site="horizon.tv" lang="sk" xmltv_id="TVRaj.sk" site_id="10038">TV Raj HD</channel>
<channel site="horizon.tv" lang="sk" xmltv_id="TVRomana.sk" site_id="10184">TV Romana HD</channel>
<channel site="horizon.tv" lang="sk" xmltv_id="TVRuzinov.sk" site_id="10039">TV Ruzinov HD</channel>
<channel site="horizon.tv" lang="cs" xmltv_id="ViasatExplore.cz" site_id="10065">Viasat Explore HD</channel>
<channel site="horizon.tv" lang="cs" xmltv_id="ViasatHistory.cz" site_id="10066">Viasat History HD</channel>
<channel site="horizon.tv" lang="cs" xmltv_id="ViasatNature.cz" site_id="10067">Viasat Nature HD</channel>
<channel site="horizon.tv" lang="sk" xmltv_id="Vremya.ru" site_id="10175">Vremja</channel>
</channels>

View File

@@ -1,145 +1,145 @@
const axios = require('axios')
const dayjs = require('dayjs')
const API_ENDPOINT = 'https://legacy-static.oesp.horizon.tv/oesp/v4/SK/slk/web'
module.exports = {
site: 'horizon.tv',
days: 3,
request: {
cache: {
ttl: 60 * 60 * 1000 // 1 hour
}
},
url: function ({ date }) {
return `${API_ENDPOINT}/programschedules/${date.format('YYYYMMDD')}/1`
},
async parser({ content, channel, date }) {
let programs = []
let items = parseItems(content, channel)
if (!items.length) return programs
const d = date.format('YYYYMMDD')
const promises = [
axios.get(`${API_ENDPOINT}/programschedules/${d}/2`),
axios.get(`${API_ENDPOINT}/programschedules/${d}/3`),
axios.get(`${API_ENDPOINT}/programschedules/${d}/4`)
]
await Promise.allSettled(promises)
.then(results => {
results.forEach(r => {
if (r.status === 'fulfilled') {
items = items.concat(parseItems(r.value.data, channel))
}
})
})
.catch(console.error)
for (let item of items) {
const detail = await loadProgramDetails(item)
programs.push({
title: item.t,
description: parseDescription(detail),
category: parseCategory(detail),
season: parseSeason(detail),
episode: parseEpisode(detail),
actors: parseActors(detail),
directors: parseDirectors(detail),
date: parseYear(detail),
start: parseStart(item),
stop: parseStop(item)
})
}
return programs
},
async channels() {
const data = await axios
.get(`${API_ENDPOINT}/channels`)
.then(r => r.data)
.catch(console.log)
return data.channels.map(item => {
return {
lang: 'sk',
site_id: item.id.replace('lgi-obolite-sk-prod-master:5-', ''),
name: item.title
}
})
}
}
async function loadProgramDetails(item) {
if (!item.i) return {}
const url = `${API_ENDPOINT}/listings/${item.i}`
const data = await axios
.get(url)
.then(r => r.data)
.catch(console.log)
return data || {}
}
function parseStart(item) {
return dayjs(item.s)
}
function parseStop(item) {
return dayjs(item.e)
}
function parseItems(content, channel) {
if (!content) return []
const data = typeof content === 'string' ? JSON.parse(content) : content
if (!data || !Array.isArray(data.entries)) return []
const entity = data.entries.find(e => e.o === `lgi-obolite-sk-prod-master:${channel.site_id}`)
return entity ? entity.l : []
}
function parseDescription(detail) {
if (!detail) return []
if (!detail.program) return []
return detail.program.longDescription || null
}
function parseCategory(detail) {
if (!detail) return []
if (!detail.program) return []
if (!detail.program.categories) return []
let categories = []
detail.program.categories.forEach(category => {
categories.push(category.title)
})
return categories
}
function parseSeason(detail) {
if (!detail) return null
if (!detail.program) return null
if (!detail.program.seriesNumber) return null
if (String(detail.program.seriesNumber).length > 2) return null
return detail.program.seriesNumber
}
function parseEpisode(detail) {
if (!detail) return null
if (!detail.program) return null
if (!detail.program.seriesEpisodeNumber) return null
if (String(detail.program.seriesEpisodeNumber).length > 3) return null
return detail.program.seriesEpisodeNumber
}
function parseDirectors(detail) {
if (!detail) return []
if (!detail.program) return []
return detail.program.directors || []
}
function parseActors(detail) {
if (!detail) return []
if (!detail.program) return []
return detail.program.cast || []
}
function parseYear(detail) {
if (!detail) return null
if (!detail.program) return null
return detail.program.year || null
}
const axios = require('axios')
const dayjs = require('dayjs')
const API_ENDPOINT = 'https://legacy-static.oesp.horizon.tv/oesp/v4/SK/slk/web'
module.exports = {
site: 'horizon.tv',
days: 3,
request: {
cache: {
ttl: 60 * 60 * 1000 // 1 hour
}
},
url: function ({ date }) {
return `${API_ENDPOINT}/programschedules/${date.format('YYYYMMDD')}/1`
},
async parser({ content, channel, date }) {
let programs = []
let items = parseItems(content, channel)
if (!items.length) return programs
const d = date.format('YYYYMMDD')
const promises = [
axios.get(`${API_ENDPOINT}/programschedules/${d}/2`),
axios.get(`${API_ENDPOINT}/programschedules/${d}/3`),
axios.get(`${API_ENDPOINT}/programschedules/${d}/4`)
]
await Promise.allSettled(promises)
.then(results => {
results.forEach(r => {
if (r.status === 'fulfilled') {
items = items.concat(parseItems(r.value.data, channel))
}
})
})
.catch(console.error)
for (let item of items) {
const detail = await loadProgramDetails(item)
programs.push({
title: item.t,
description: parseDescription(detail),
category: parseCategory(detail),
season: parseSeason(detail),
episode: parseEpisode(detail),
actors: parseActors(detail),
directors: parseDirectors(detail),
date: parseYear(detail),
start: parseStart(item),
stop: parseStop(item)
})
}
return programs
},
async channels() {
const data = await axios
.get(`${API_ENDPOINT}/channels`)
.then(r => r.data)
.catch(console.log)
return data.channels.map(item => {
return {
lang: 'sk',
site_id: item.id.replace('lgi-obolite-sk-prod-master:5-', ''),
name: item.title
}
})
}
}
async function loadProgramDetails(item) {
if (!item.i) return {}
const url = `${API_ENDPOINT}/listings/${item.i}`
const data = await axios
.get(url)
.then(r => r.data)
.catch(console.log)
return data || {}
}
function parseStart(item) {
return dayjs(item.s)
}
function parseStop(item) {
return dayjs(item.e)
}
function parseItems(content, channel) {
if (!content) return []
const data = typeof content === 'string' ? JSON.parse(content) : content
if (!data || !Array.isArray(data.entries)) return []
const entity = data.entries.find(e => e.o === `lgi-obolite-sk-prod-master:${channel.site_id}`)
return entity ? entity.l : []
}
function parseDescription(detail) {
if (!detail) return []
if (!detail.program) return []
return detail.program.longDescription || null
}
function parseCategory(detail) {
if (!detail) return []
if (!detail.program) return []
if (!detail.program.categories) return []
let categories = []
detail.program.categories.forEach(category => {
categories.push(category.title)
})
return categories
}
function parseSeason(detail) {
if (!detail) return null
if (!detail.program) return null
if (!detail.program.seriesNumber) return null
if (String(detail.program.seriesNumber).length > 2) return null
return detail.program.seriesNumber
}
function parseEpisode(detail) {
if (!detail) return null
if (!detail.program) return null
if (!detail.program.seriesEpisodeNumber) return null
if (String(detail.program.seriesEpisodeNumber).length > 3) return null
return detail.program.seriesEpisodeNumber
}
function parseDirectors(detail) {
if (!detail) return []
if (!detail.program) return []
return detail.program.directors || []
}
function parseActors(detail) {
if (!detail) return []
if (!detail.program) return []
return detail.program.cast || []
}
function parseYear(detail) {
if (!detail) return null
if (!detail.program) return null
return detail.program.year || null
}

View File

@@ -1,246 +1,246 @@
const { parser, url } = require('./horizon.tv.config.js')
const fs = require('fs')
const path = require('path')
const axios = require('axios')
const dayjs = require('dayjs')
const utc = require('dayjs/plugin/utc')
const customParseFormat = require('dayjs/plugin/customParseFormat')
dayjs.extend(customParseFormat)
dayjs.extend(utc)
jest.mock('axios')
const date = dayjs.utc('2023-02-07', 'YYYY-MM-DD').startOf('d')
const channel = {
site_id: '10024',
xmltv_id: 'AMCCzechRepublic.cz'
}
it('can generate valid url', () => {
expect(url({ date, channel })).toBe(
'https://legacy-static.oesp.horizon.tv/oesp/v4/SK/slk/web/programschedules/20230207/1'
)
})
it('can parse response', done => {
const content = JSON.parse(fs.readFileSync(path.resolve(__dirname, '__data__/content.json'), 'utf8'))
axios.get.mockImplementation(url => {
if (
url === 'https://legacy-static.oesp.horizon.tv/oesp/v4/SK/slk/web/programschedules/20230207/2'
) {
return Promise.resolve({
data: JSON.parse(fs.readFileSync(path.resolve(__dirname, '__data__/content_1.json'), 'utf8'))
})
} else if (
url === 'https://legacy-static.oesp.horizon.tv/oesp/v4/SK/slk/web/programschedules/20230207/3'
) {
return Promise.resolve({
data: JSON.parse(fs.readFileSync(path.resolve(__dirname, '__data__/content_2.json'), 'utf8'))
})
} else if (
url === 'https://legacy-static.oesp.horizon.tv/oesp/v4/SK/slk/web/programschedules/20230207/4'
) {
return Promise.resolve({
data: JSON.parse(fs.readFileSync(path.resolve(__dirname, '__data__/content_3.json'), 'utf8'))
})
} else if (
url === 'https://legacy-static.oesp.horizon.tv/oesp/v4/SK/slk/web/listings/crid:~~2F~~2Fport.cs~~2F122941980,imi:7ca159c917344e0dd3fbe1cd8db5ff8043d96a78'
) {
return Promise.resolve({
data: JSON.parse(fs.readFileSync(path.resolve(__dirname, '__data__/content_listings_1.json'), 'utf8'))
})
} else if (
url === 'https://legacy-static.oesp.horizon.tv/oesp/v4/SK/slk/web/listings/crid:~~2F~~2Fport.cs~~2F248281986,imi:e85129f9d1e211406a521df7a36f22237c22651b'
) {
return Promise.resolve({
data: JSON.parse(fs.readFileSync(path.resolve(__dirname, '__data__/content_listings_2.json'), 'utf8'))
})
} else if (
url === 'https://legacy-static.oesp.horizon.tv/oesp/v4/SK/slk/web/listings/crid:~~2F~~2Fport.cs~~2F1379541,imi:5f806a2a0bc13e9745e14907a27116c60ea2c6ad'
) {
return Promise.resolve({
data: JSON.parse(fs.readFileSync(path.resolve(__dirname, '__data__/content_listings_3.json'), 'utf8'))
})
} else if (
url === 'https://legacy-static.oesp.horizon.tv/oesp/v4/SK/slk/web/listings/crid:~~2F~~2Fport.cs~~2F71927954,imi:f1b4b0285b72cf44cba74e1c62322a4c682385c7'
) {
return Promise.resolve({
data: JSON.parse(fs.readFileSync(path.resolve(__dirname, '__data__/content_listings_4.json'), 'utf8'))
})
} else {
return Promise.resolve({ data: '' })
}
})
parser({ content, channel, date })
.then(result => {
result = result.map(p => {
p.start = p.start.toJSON()
p.stop = p.stop.toJSON()
return p
})
expect(result).toMatchObject([
{
start: '2023-02-06T21:35:00.000Z',
stop: '2023-02-06T23:05:00.000Z',
title: 'Avengement',
description:
'Během propustky z vězení za účelem návštěvy umírající matky v nemocnici zločinec Cain Burgess (Scott Adkins) unikne svým dozorcům a mizí v ulicích Londýna. Jde o epickou cestu krve a bolesti za dosažením vytoužené pomsty na těch, kteří z něj udělali chladnokrevného vraha.',
category: ['Drama', 'Akcia'],
directors: ['Jesse V. Johnson'],
actors: [
'Scott Adkins',
'Craig Fairbrass',
'Thomas Turgoose',
'Nick Moran',
'Kierston Wareing',
'Leo Gregory',
'Mark Strange',
'Luke LaFontaine',
'Beau Fowler',
'Dan Styles',
'Christopher Sciueref',
'Matt Routledge',
'Jane Thorne',
'Louis Mandylor',
'Terence Maynard',
'Greg Burridge',
'Michael Higgs',
'Damian Gallagher',
'Daniel Adegboyega',
'John Ioannou',
'Sofie Golding-Spittle',
'Joe Egan',
'Darren Swain',
'Lee Charles',
'Dominic Kinnaird',
"Ross O'Hennessy",
'Teresa Mahoney',
'Andrew Dunkelberger',
'Sam Hardy',
'Ivan Moy',
'Mark Sears',
'Phillip Ray Tommy'
],
date: '2019'
},
{
start: '2023-02-07T04:35:00.000Z',
stop: '2023-02-07T05:00:00.000Z',
title: 'Zoom In',
description: 'Film/Kino',
category: ['Hudba a umenie', 'Film'],
date: '2010'
},
{
start: '2023-02-07T09:10:00.000Z',
stop: '2023-02-07T11:00:00.000Z',
title: 'Studentka',
description:
'Ambiciózní vysokoškolačka Valentina (Sophie Marceau) studuje literaturu na pařížské Sorbonně a právě se připravuje k závěrečným zkouškám. Žádný odpočinek, žádné volno, žádné večírky, téměř žádný spánek a především a hlavně ... žádná láska! Věří, že jedině tak obstojí před zkušební komisí. Jednoho dne se však odehraje něco, s čím nepočítala. Potká charismatického hudebníka Neda - a bláznivě se zamiluje. V tuto chvíli stojí před osudovým rozhodnutím: zahodí roky obrovského studijního nasazení, nebo odmítne lásku? Nebo se snad dá obojí skloubit dohromady?',
category: ['Film', 'Komédia'],
actors: [
'Sophie Marceauová',
'Vincent Lindon',
'Elisabeth Vitali',
'Elena Pompei',
'Jean-Claude Leguay',
'Brigitte Chamarande',
'Christian Pereira',
'Gérard Dacier',
'Roberto Attias',
'Beppe Chierici',
'Nathalie Mann',
'Anne Macina',
'Janine Souchon',
'Virginie Demians',
'Hugues Leforestier',
'Jacqueline Noëlle',
'Marc-André Brunet',
'Isabelle Caubère',
'André Chazel',
'Med Salah Cheurfi',
'Guillaume Corea',
'Eric Denize',
'Gilles Gaston-Dreyfuss',
'Benoît Gourley',
'Marc Innocenti',
'Najim Laouriga',
'Laurent Ledermann',
'Philippe Maygal',
'Dominique Pifarely',
'Ysé Tran'
],
directors: ['Francis De Gueltz', 'Dominique Talmon', 'Claude Pinoteau'],
date: '1988'
},
{
start: '2023-02-07T16:05:00.000Z',
stop: '2023-02-07T17:45:00.000Z',
title: 'Zilionáři',
description:
'David (Zach Galifianakis) je nekomplikovaný muž, který uvízl v monotónním životě. Den co den usedá za volant svého obrněného automobilu, aby odvážel obrovské sumy peněz jiných lidí. Jediným vzrušujícím momentem v jeho životě je flirtování s kolegyní Kelly (Kristen Wiig), která ho však brzy zatáhne do těžko uvěřitelného dobrodružství. Skupinka nepříliš inteligentních loserů, pod vedením Steva (Owen Wilson), plánuje vyloupit banku a David jim v tom má samozřejmě pomoci. Navzdory absolutně amatérskému plánu se ale stane nemožné a oni mají najednou v kapse 17 miliónů dolarů. A protože tato partička je opravdu bláznivá, začne je hned ve velkém roztáčet. Peníze létají vzduchem za luxusní a kolikrát i zbytečné věci, ale nedochází jim, že pro policii tak zanechávají jasné stopy...',
category: ['Drama', 'Akcia'],
actors: [
'Zach Galifianakis',
'Kristen Wiigová',
'Owen Wilson',
'Kate McKinnon',
'Leslie Jones',
'Jason Sudeikis',
'Ross Kimball',
'Devin Ratray',
'Mary Elizabeth Ellisová',
'Jon Daly',
'Ken Marino',
'Daniel Zacapa',
'Tom Werme',
'Njema Williams',
'Nils Cruz',
'Michael Fraguada',
'Christian Gonzalez',
'Candace Blanchard',
'Karsten Friske',
'Dallas Edwards',
'Barry Ratcliffe',
'Shelton Grant',
'Laura Palka',
'Reegus Flenory',
'Wynn Reichert',
'Jill Jane Clements',
'Joseph S. Wilson',
'Jee An',
'Rhoda Griffisová',
'Nicole Dupre Sobchack'
],
directors: [
'Scott August',
'Richard L. Fox',
'Michelle Malley-Campos',
'Sebastian Mazzola',
'Steven Ritzi',
'Pete Waterman',
'Jared Hess'
],
date: '2016'
}
])
done()
})
.catch(done)
})
it('can handle empty guide', done => {
parser({
content: fs.readFileSync(path.resolve(__dirname, '__data__/no_content.json')),
channel,
date
})
.then(result => {
expect(result).toMatchObject([])
done()
})
.catch(done)
})
const { parser, url } = require('./horizon.tv.config.js')
const fs = require('fs')
const path = require('path')
const axios = require('axios')
const dayjs = require('dayjs')
const utc = require('dayjs/plugin/utc')
const customParseFormat = require('dayjs/plugin/customParseFormat')
dayjs.extend(customParseFormat)
dayjs.extend(utc)
jest.mock('axios')
const date = dayjs.utc('2023-02-07', 'YYYY-MM-DD').startOf('d')
const channel = {
site_id: '10024',
xmltv_id: 'AMCCzechRepublic.cz'
}
it('can generate valid url', () => {
expect(url({ date, channel })).toBe(
'https://legacy-static.oesp.horizon.tv/oesp/v4/SK/slk/web/programschedules/20230207/1'
)
})
it('can parse response', done => {
const content = JSON.parse(fs.readFileSync(path.resolve(__dirname, '__data__/content.json'), 'utf8'))
axios.get.mockImplementation(url => {
if (
url === 'https://legacy-static.oesp.horizon.tv/oesp/v4/SK/slk/web/programschedules/20230207/2'
) {
return Promise.resolve({
data: JSON.parse(fs.readFileSync(path.resolve(__dirname, '__data__/content_1.json'), 'utf8'))
})
} else if (
url === 'https://legacy-static.oesp.horizon.tv/oesp/v4/SK/slk/web/programschedules/20230207/3'
) {
return Promise.resolve({
data: JSON.parse(fs.readFileSync(path.resolve(__dirname, '__data__/content_2.json'), 'utf8'))
})
} else if (
url === 'https://legacy-static.oesp.horizon.tv/oesp/v4/SK/slk/web/programschedules/20230207/4'
) {
return Promise.resolve({
data: JSON.parse(fs.readFileSync(path.resolve(__dirname, '__data__/content_3.json'), 'utf8'))
})
} else if (
url === 'https://legacy-static.oesp.horizon.tv/oesp/v4/SK/slk/web/listings/crid:~~2F~~2Fport.cs~~2F122941980,imi:7ca159c917344e0dd3fbe1cd8db5ff8043d96a78'
) {
return Promise.resolve({
data: JSON.parse(fs.readFileSync(path.resolve(__dirname, '__data__/content_listings_1.json'), 'utf8'))
})
} else if (
url === 'https://legacy-static.oesp.horizon.tv/oesp/v4/SK/slk/web/listings/crid:~~2F~~2Fport.cs~~2F248281986,imi:e85129f9d1e211406a521df7a36f22237c22651b'
) {
return Promise.resolve({
data: JSON.parse(fs.readFileSync(path.resolve(__dirname, '__data__/content_listings_2.json'), 'utf8'))
})
} else if (
url === 'https://legacy-static.oesp.horizon.tv/oesp/v4/SK/slk/web/listings/crid:~~2F~~2Fport.cs~~2F1379541,imi:5f806a2a0bc13e9745e14907a27116c60ea2c6ad'
) {
return Promise.resolve({
data: JSON.parse(fs.readFileSync(path.resolve(__dirname, '__data__/content_listings_3.json'), 'utf8'))
})
} else if (
url === 'https://legacy-static.oesp.horizon.tv/oesp/v4/SK/slk/web/listings/crid:~~2F~~2Fport.cs~~2F71927954,imi:f1b4b0285b72cf44cba74e1c62322a4c682385c7'
) {
return Promise.resolve({
data: JSON.parse(fs.readFileSync(path.resolve(__dirname, '__data__/content_listings_4.json'), 'utf8'))
})
} else {
return Promise.resolve({ data: '' })
}
})
parser({ content, channel, date })
.then(result => {
result = result.map(p => {
p.start = p.start.toJSON()
p.stop = p.stop.toJSON()
return p
})
expect(result).toMatchObject([
{
start: '2023-02-06T21:35:00.000Z',
stop: '2023-02-06T23:05:00.000Z',
title: 'Avengement',
description:
'Během propustky z vězení za účelem návštěvy umírající matky v nemocnici zločinec Cain Burgess (Scott Adkins) unikne svým dozorcům a mizí v ulicích Londýna. Jde o epickou cestu krve a bolesti za dosažením vytoužené pomsty na těch, kteří z něj udělali chladnokrevného vraha.',
category: ['Drama', 'Akcia'],
directors: ['Jesse V. Johnson'],
actors: [
'Scott Adkins',
'Craig Fairbrass',
'Thomas Turgoose',
'Nick Moran',
'Kierston Wareing',
'Leo Gregory',
'Mark Strange',
'Luke LaFontaine',
'Beau Fowler',
'Dan Styles',
'Christopher Sciueref',
'Matt Routledge',
'Jane Thorne',
'Louis Mandylor',
'Terence Maynard',
'Greg Burridge',
'Michael Higgs',
'Damian Gallagher',
'Daniel Adegboyega',
'John Ioannou',
'Sofie Golding-Spittle',
'Joe Egan',
'Darren Swain',
'Lee Charles',
'Dominic Kinnaird',
"Ross O'Hennessy",
'Teresa Mahoney',
'Andrew Dunkelberger',
'Sam Hardy',
'Ivan Moy',
'Mark Sears',
'Phillip Ray Tommy'
],
date: '2019'
},
{
start: '2023-02-07T04:35:00.000Z',
stop: '2023-02-07T05:00:00.000Z',
title: 'Zoom In',
description: 'Film/Kino',
category: ['Hudba a umenie', 'Film'],
date: '2010'
},
{
start: '2023-02-07T09:10:00.000Z',
stop: '2023-02-07T11:00:00.000Z',
title: 'Studentka',
description:
'Ambiciózní vysokoškolačka Valentina (Sophie Marceau) studuje literaturu na pařížské Sorbonně a právě se připravuje k závěrečným zkouškám. Žádný odpočinek, žádné volno, žádné večírky, téměř žádný spánek a především a hlavně ... žádná láska! Věří, že jedině tak obstojí před zkušební komisí. Jednoho dne se však odehraje něco, s čím nepočítala. Potká charismatického hudebníka Neda - a bláznivě se zamiluje. V tuto chvíli stojí před osudovým rozhodnutím: zahodí roky obrovského studijního nasazení, nebo odmítne lásku? Nebo se snad dá obojí skloubit dohromady?',
category: ['Film', 'Komédia'],
actors: [
'Sophie Marceauová',
'Vincent Lindon',
'Elisabeth Vitali',
'Elena Pompei',
'Jean-Claude Leguay',
'Brigitte Chamarande',
'Christian Pereira',
'Gérard Dacier',
'Roberto Attias',
'Beppe Chierici',
'Nathalie Mann',
'Anne Macina',
'Janine Souchon',
'Virginie Demians',
'Hugues Leforestier',
'Jacqueline Noëlle',
'Marc-André Brunet',
'Isabelle Caubère',
'André Chazel',
'Med Salah Cheurfi',
'Guillaume Corea',
'Eric Denize',
'Gilles Gaston-Dreyfuss',
'Benoît Gourley',
'Marc Innocenti',
'Najim Laouriga',
'Laurent Ledermann',
'Philippe Maygal',
'Dominique Pifarely',
'Ysé Tran'
],
directors: ['Francis De Gueltz', 'Dominique Talmon', 'Claude Pinoteau'],
date: '1988'
},
{
start: '2023-02-07T16:05:00.000Z',
stop: '2023-02-07T17:45:00.000Z',
title: 'Zilionáři',
description:
'David (Zach Galifianakis) je nekomplikovaný muž, který uvízl v monotónním životě. Den co den usedá za volant svého obrněného automobilu, aby odvážel obrovské sumy peněz jiných lidí. Jediným vzrušujícím momentem v jeho životě je flirtování s kolegyní Kelly (Kristen Wiig), která ho však brzy zatáhne do těžko uvěřitelného dobrodružství. Skupinka nepříliš inteligentních loserů, pod vedením Steva (Owen Wilson), plánuje vyloupit banku a David jim v tom má samozřejmě pomoci. Navzdory absolutně amatérskému plánu se ale stane nemožné a oni mají najednou v kapse 17 miliónů dolarů. A protože tato partička je opravdu bláznivá, začne je hned ve velkém roztáčet. Peníze létají vzduchem za luxusní a kolikrát i zbytečné věci, ale nedochází jim, že pro policii tak zanechávají jasné stopy...',
category: ['Drama', 'Akcia'],
actors: [
'Zach Galifianakis',
'Kristen Wiigová',
'Owen Wilson',
'Kate McKinnon',
'Leslie Jones',
'Jason Sudeikis',
'Ross Kimball',
'Devin Ratray',
'Mary Elizabeth Ellisová',
'Jon Daly',
'Ken Marino',
'Daniel Zacapa',
'Tom Werme',
'Njema Williams',
'Nils Cruz',
'Michael Fraguada',
'Christian Gonzalez',
'Candace Blanchard',
'Karsten Friske',
'Dallas Edwards',
'Barry Ratcliffe',
'Shelton Grant',
'Laura Palka',
'Reegus Flenory',
'Wynn Reichert',
'Jill Jane Clements',
'Joseph S. Wilson',
'Jee An',
'Rhoda Griffisová',
'Nicole Dupre Sobchack'
],
directors: [
'Scott August',
'Richard L. Fox',
'Michelle Malley-Campos',
'Sebastian Mazzola',
'Steven Ritzi',
'Pete Waterman',
'Jared Hess'
],
date: '2016'
}
])
done()
})
.catch(done)
})
it('can handle empty guide', done => {
parser({
content: fs.readFileSync(path.resolve(__dirname, '__data__/no_content.json')),
channel,
date
})
.then(result => {
expect(result).toMatchObject([])
done()
})
.catch(done)
})

View File

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