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,127 +1,127 @@
<?xml version="1.0" encoding="UTF-8"?>
<channels>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="ae">A&amp;E</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="agro">Agro+</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="amc">AMC</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="animal-planet">Animal Planet</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="arte-1">Arte 1</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="axn">AXN</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="band">Band</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="bandnews">Bandnews</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="bandsports">Bandsports</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="bbc-world">BBC World</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="bis">Bis</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="bloomberg">Bloomberg</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="box-kids">Box Kids</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="canal-educacao">Canal Educação</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="canal-rural">Canal Rural</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="cancao-nova">Canção Nova</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="cartoon-network">Cartoon Network</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="cartoonito">Cartoonito</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="cinecanal">Cinecanal</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="cinemax">Cinemax</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="cnn-brasil">CNN Brasil</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="combate">Combate</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="comedy-central">Comedy Central</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="curta">Curta!</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="discovery-channel">Discovery Channel</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="discovery-home-health">Discovery Home &amp; Health</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="discovery-kids">Discovery Kids</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="discovery-science">Discovery Science</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="discovery-theater">Discovery Theater</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="discovery-turbo">Discovery Turbo</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="discovery-world">Discovery World</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="disney">Disney</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="e">E!</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="espn">ESPN</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="espn-2">ESPN 2</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="espn-3">ESPN 3</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="espn-4">ESPN 4</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="espn-5">ESPN 5</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="espn-6">ESPN 6</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="film-arts">Film &amp; Arts</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="food-network">Food Network</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="fox-news">Fox News</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="futura">Futura</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="fx">FX</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="globo">Globo</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="globo-news">Globo News</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="gloob">Gloob</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="gloobinho">Gloobinho</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="gnt">GNT</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="hbo">HBO</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="hbo-2">HBO 2</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="hbo-family">HBO Family</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="hbo-mundi">HBO Mundi</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="hbo-plus">HBO Plus</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="hbo-pop">HBO Pop</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="hbo-signature">HBO Signature</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="hbo-xtreme">HBO Xtreme</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="hgtv">HGTV</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="history">History</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="history-2">History 2</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="investigacao-discovery">Investigação Discovery</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="jovem-pan-news">Jovem Pan News</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="lifetime">Lifetime</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="megapix">Megapix</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="mtv">MTV</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="mtv-live">MTV LIVE</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="multishow">Multishow</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="national-geographic">National Geographic</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="nick-jr-">Nick Jr.</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="nickelodeon">Nickelodeon</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="off">Off</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="paramount-network">Paramount Network</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="premiere-2">Premiere 2</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="premiere-3">Premiere 3</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="premiere-4">Premiere 4</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="premiere-5">Premiere 5</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="premiere-6">Premiere 6</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="premiere-7">Premiere 7</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="premiere-fc">Premiere FC</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="prime-box-brazil">Prime Box Brazil</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="record-news">Record News</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="record-tv">Record TV</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="rede-brasil">Rede Brasil</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="rede-familia">Rede Família</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="rede-gospel">Rede Gospel</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="rede-seculo-21">Rede Século 21</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="rede-tv">Rede TV</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="rede-vida">Rede Vida</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="sbt">SBT</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="sony">Sony</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="sony-movies">SONY Movies</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="space">Space</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="sportv">SporTV</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="sportv-2">SporTV 2</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="sportv-3">SporTV 3</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="star-channel">STAR Channel</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="studio-universal">Studio Universal</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="syfy">Syfy</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="tcm">TCM</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="telecine-action">Telecine Action</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="telecine-cult">Telecine Cult</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="telecine-fun">Telecine Fun</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="telecine-pipoca">Telecine Pipoca</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="telecine-premium">Telecine Premium</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="telecine-touch">Telecine Touch</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="terra-viva">Terra Viva</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="tlc">TLC</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="tnt">TNT</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="tnt-novelas">TNT Novelas</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="tnt-series">TNT Séries</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="tooncast">Tooncast</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="travel-box-brasil">Travel Box Brasil</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="trutv">truTV</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="tv-aparecida">TV Aparecida</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="tv-brasil">TV Brasil</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="tv-camara">TV Câmara</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="tv-cultura">TV Cultura</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="tv-gazeta">Tv Gazeta</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="tv-ra-tim-bum">TV Rá Tim Bum</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="tv-senado">TV Senado</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="universal-tv">Universal TV</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="viva">Viva</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="warner">Warner</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="woohoo">Woohoo</channel>
</channels>
<?xml version="1.0" encoding="UTF-8"?>
<channels>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="ae">A&amp;E</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="agro">Agro+</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="amc">AMC</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="animal-planet">Animal Planet</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="arte-1">Arte 1</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="axn">AXN</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="band">Band</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="bandnews">Bandnews</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="bandsports">Bandsports</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="bbc-world">BBC World</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="bis">Bis</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="bloomberg">Bloomberg</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="box-kids">Box Kids</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="canal-educacao">Canal Educação</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="canal-rural">Canal Rural</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="cancao-nova">Canção Nova</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="cartoon-network">Cartoon Network</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="cartoonito">Cartoonito</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="cinecanal">Cinecanal</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="cinemax">Cinemax</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="cnn-brasil">CNN Brasil</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="combate">Combate</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="comedy-central">Comedy Central</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="curta">Curta!</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="discovery-channel">Discovery Channel</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="discovery-home-health">Discovery Home &amp; Health</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="discovery-kids">Discovery Kids</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="discovery-science">Discovery Science</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="discovery-theater">Discovery Theater</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="discovery-turbo">Discovery Turbo</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="discovery-world">Discovery World</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="disney">Disney</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="e">E!</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="espn">ESPN</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="espn-2">ESPN 2</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="espn-3">ESPN 3</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="espn-4">ESPN 4</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="espn-5">ESPN 5</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="espn-6">ESPN 6</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="film-arts">Film &amp; Arts</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="food-network">Food Network</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="fox-news">Fox News</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="futura">Futura</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="fx">FX</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="globo">Globo</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="globo-news">Globo News</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="gloob">Gloob</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="gloobinho">Gloobinho</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="gnt">GNT</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="hbo">HBO</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="hbo-2">HBO 2</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="hbo-family">HBO Family</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="hbo-mundi">HBO Mundi</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="hbo-plus">HBO Plus</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="hbo-pop">HBO Pop</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="hbo-signature">HBO Signature</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="hbo-xtreme">HBO Xtreme</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="hgtv">HGTV</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="history">History</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="history-2">History 2</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="investigacao-discovery">Investigação Discovery</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="jovem-pan-news">Jovem Pan News</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="lifetime">Lifetime</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="megapix">Megapix</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="mtv">MTV</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="mtv-live">MTV LIVE</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="multishow">Multishow</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="national-geographic">National Geographic</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="nick-jr-">Nick Jr.</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="nickelodeon">Nickelodeon</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="off">Off</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="paramount-network">Paramount Network</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="premiere-2">Premiere 2</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="premiere-3">Premiere 3</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="premiere-4">Premiere 4</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="premiere-5">Premiere 5</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="premiere-6">Premiere 6</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="premiere-7">Premiere 7</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="premiere-fc">Premiere FC</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="prime-box-brazil">Prime Box Brazil</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="record-news">Record News</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="record-tv">Record TV</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="rede-brasil">Rede Brasil</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="rede-familia">Rede Família</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="rede-gospel">Rede Gospel</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="rede-seculo-21">Rede Século 21</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="rede-tv">Rede TV</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="rede-vida">Rede Vida</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="sbt">SBT</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="sony">Sony</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="sony-movies">SONY Movies</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="space">Space</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="sportv">SporTV</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="sportv-2">SporTV 2</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="sportv-3">SporTV 3</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="star-channel">STAR Channel</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="studio-universal">Studio Universal</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="syfy">Syfy</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="tcm">TCM</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="telecine-action">Telecine Action</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="telecine-cult">Telecine Cult</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="telecine-fun">Telecine Fun</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="telecine-pipoca">Telecine Pipoca</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="telecine-premium">Telecine Premium</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="telecine-touch">Telecine Touch</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="terra-viva">Terra Viva</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="tlc">TLC</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="tnt">TNT</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="tnt-novelas">TNT Novelas</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="tnt-series">TNT Séries</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="tooncast">Tooncast</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="travel-box-brasil">Travel Box Brasil</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="trutv">truTV</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="tv-aparecida">TV Aparecida</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="tv-brasil">TV Brasil</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="tv-camara">TV Câmara</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="tv-cultura">TV Cultura</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="tv-gazeta">Tv Gazeta</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="tv-ra-tim-bum">TV Rá Tim Bum</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="tv-senado">TV Senado</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="universal-tv">Universal TV</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="viva">Viva</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="warner">Warner</channel>
<channel site="guiadetv.com" lang="pt" xmltv_id="" site_id="woohoo">Woohoo</channel>
</channels>

View File

@@ -1,101 +1,101 @@
const cheerio = require('cheerio')
const axios = require('axios')
const dayjs = require('dayjs')
const customParseFormat = require('dayjs/plugin/customParseFormat')
dayjs.extend(customParseFormat)
require('dayjs/locale/pt')
module.exports = {
site: 'guiadetv.com',
days: 2,
url({ channel }) {
return `https://www.guiadetv.com/canal/${channel.site_id}`
},
parser({ content, date }) {
const programs = []
const items = parseItems(content, date)
items.forEach(item => {
const prev = programs[programs.length - 1]
const $item = cheerio.load(item)
const title = parseTitle($item)
let start = parseStart($item)
if (!start || !title) return
if (prev) {
prev.stop = start
}
const stop = start.add(30, 'm')
programs.push({
title,
description: parseDescription($item),
category: parseCategory($item),
start,
stop
})
})
return programs
},
async channels() {
const categories = [
'variedades',
'tv-aberta',
'noticias',
'infantil',
'filmes-e-series',
'esportes',
'documentarios'
]
const promises = categories.map(category =>
axios.get(`https://www.guiadetv.com/categorias/${category}.html`)
)
const channels = []
const results = await Promise.all(promises).catch(console.log)
results.forEach(r => {
const $ = cheerio.load(r.data)
$('.cardchannel').each((i, el) => {
const link = $(el).find('a')
const name = link.attr('title')
const url = link.attr('href')
const site_id = url.replace('https://www.guiadetv.com/canal/', '')
channels.push({
lang: 'pt',
name,
site_id
})
})
})
return channels
}
}
function parseTitle($item) {
return $item('h3').text().trim()
}
function parseDescription($item) {
return $item('p').clone().children().remove().end().text().trim() || null
}
function parseCategory($item) {
return $item('p > i').text().trim() || null
}
function parseStart($item) {
const dt = $item('b span:nth-child(1)').data('dt') || $item('b').data('dt')
if (!dt) return null
return dayjs(dt, 'YYYY-MM-DD HH:mm:ssZ')
}
function parseItems(content, date) {
const $ = cheerio.load(content)
const localDate = date.locale('pt').format('D MMMM YYYY')
return $(`.row:contains(${localDate})`).nextUntil('.row:not(.mt-1)').toArray()
}
const cheerio = require('cheerio')
const axios = require('axios')
const dayjs = require('dayjs')
const customParseFormat = require('dayjs/plugin/customParseFormat')
dayjs.extend(customParseFormat)
require('dayjs/locale/pt')
module.exports = {
site: 'guiadetv.com',
days: 2,
url({ channel }) {
return `https://www.guiadetv.com/canal/${channel.site_id}`
},
parser({ content, date }) {
const programs = []
const items = parseItems(content, date)
items.forEach(item => {
const prev = programs[programs.length - 1]
const $item = cheerio.load(item)
const title = parseTitle($item)
let start = parseStart($item)
if (!start || !title) return
if (prev) {
prev.stop = start
}
const stop = start.add(30, 'm')
programs.push({
title,
description: parseDescription($item),
category: parseCategory($item),
start,
stop
})
})
return programs
},
async channels() {
const categories = [
'variedades',
'tv-aberta',
'noticias',
'infantil',
'filmes-e-series',
'esportes',
'documentarios'
]
const promises = categories.map(category =>
axios.get(`https://www.guiadetv.com/categorias/${category}.html`)
)
const channels = []
const results = await Promise.all(promises).catch(console.log)
results.forEach(r => {
const $ = cheerio.load(r.data)
$('.cardchannel').each((i, el) => {
const link = $(el).find('a')
const name = link.attr('title')
const url = link.attr('href')
const site_id = url.replace('https://www.guiadetv.com/canal/', '')
channels.push({
lang: 'pt',
name,
site_id
})
})
})
return channels
}
}
function parseTitle($item) {
return $item('h3').text().trim()
}
function parseDescription($item) {
return $item('p').clone().children().remove().end().text().trim() || null
}
function parseCategory($item) {
return $item('p > i').text().trim() || null
}
function parseStart($item) {
const dt = $item('b span:nth-child(1)').data('dt') || $item('b').data('dt')
if (!dt) return null
return dayjs(dt, 'YYYY-MM-DD HH:mm:ssZ')
}
function parseItems(content, date) {
const $ = cheerio.load(content)
const localDate = date.locale('pt').format('D MMMM YYYY')
return $(`.row:contains(${localDate})`).nextUntil('.row:not(.mt-1)').toArray()
}

View File

@@ -1,80 +1,80 @@
const { parser, url } = require('./guiadetv.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')
dayjs.extend(customParseFormat)
dayjs.extend(utc)
const date = dayjs.utc('2025-01-18', 'YYYY-MM-DD').startOf('d')
const channel = {
site_id: 'canal-rural',
xmltv_id: 'CanalRural.br'
}
it('can generate valid url', () => {
expect(url({ channel })).toBe('https://www.guiadetv.com/canal/canal-rural')
})
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.length).toBe(16)
expect(results[0]).toMatchObject({
start: '2025-01-18T03:00:00.000Z',
stop: '2025-01-18T04:00:00.000Z',
title: 'Leilão',
description: null,
category: null
})
expect(results[2]).toMatchObject({
start: '2025-01-18T06:00:00.000Z',
stop: '2025-01-18T09:00:00.000Z',
title: 'TV Verdade',
description: null,
category: 'Jornalismo'
})
expect(results[15]).toMatchObject({
start: '2025-01-19T00:00:00.000Z',
stop: '2025-01-19T00:30:00.000Z',
title: 'Leilão',
description: null,
category: null
})
})
it('can parse response for current day', () => {
const content = fs.readFileSync(path.resolve(__dirname, '__data__/content.html'))
const results = parser({ content, date: dayjs.utc('2025-01-15', 'YYYY-MM-DD').startOf('d') }).map(
p => {
p.start = p.start.toJSON()
p.stop = p.stop.toJSON()
return p
}
)
expect(results.length).toBe(7)
expect(results[0]).toMatchObject({
start: '2025-01-15T21:15:00.000Z',
stop: '2025-01-15T21:45:00.000Z',
title: 'Planeta Campo Talks',
description:
'Grandes reportagens, notícias, entrevistas e debates com foco em ações de sustentabilidade e indicadores ESG. Informações para apoiar o produtor rural a plantar e criar com olhar para o futuro.',
category: null
})
})
it('can handle empty guide', () => {
const results = parser({
date,
content: fs.readFileSync(path.resolve(__dirname, '__data__/no_content.html'))
})
expect(results).toMatchObject([])
})
const { parser, url } = require('./guiadetv.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')
dayjs.extend(customParseFormat)
dayjs.extend(utc)
const date = dayjs.utc('2025-01-18', 'YYYY-MM-DD').startOf('d')
const channel = {
site_id: 'canal-rural',
xmltv_id: 'CanalRural.br'
}
it('can generate valid url', () => {
expect(url({ channel })).toBe('https://www.guiadetv.com/canal/canal-rural')
})
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.length).toBe(16)
expect(results[0]).toMatchObject({
start: '2025-01-18T03:00:00.000Z',
stop: '2025-01-18T04:00:00.000Z',
title: 'Leilão',
description: null,
category: null
})
expect(results[2]).toMatchObject({
start: '2025-01-18T06:00:00.000Z',
stop: '2025-01-18T09:00:00.000Z',
title: 'TV Verdade',
description: null,
category: 'Jornalismo'
})
expect(results[15]).toMatchObject({
start: '2025-01-19T00:00:00.000Z',
stop: '2025-01-19T00:30:00.000Z',
title: 'Leilão',
description: null,
category: null
})
})
it('can parse response for current day', () => {
const content = fs.readFileSync(path.resolve(__dirname, '__data__/content.html'))
const results = parser({ content, date: dayjs.utc('2025-01-15', 'YYYY-MM-DD').startOf('d') }).map(
p => {
p.start = p.start.toJSON()
p.stop = p.stop.toJSON()
return p
}
)
expect(results.length).toBe(7)
expect(results[0]).toMatchObject({
start: '2025-01-15T21:15:00.000Z',
stop: '2025-01-15T21:45:00.000Z',
title: 'Planeta Campo Talks',
description:
'Grandes reportagens, notícias, entrevistas e debates com foco em ações de sustentabilidade e indicadores ESG. Informações para apoiar o produtor rural a plantar e criar com olhar para o futuro.',
category: null
})
})
it('can handle empty guide', () => {
const results = parser({
date,
content: fs.readFileSync(path.resolve(__dirname, '__data__/no_content.html'))
})
expect(results).toMatchObject([])
})

View File

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