Add meuguia.tv.

Signed-off-by: Toha <tohenk@yahoo.com>
This commit is contained in:
Toha 2023-11-22 02:16:03 +07:00
parent 35272ea0a4
commit 1e7c4d76a1
No known key found for this signature in database
GPG key ID: 2D7AA6389D44DCAB
4 changed files with 586 additions and 0 deletions

View file

@ -0,0 +1,318 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<!-- Google tag (gtag.js) -->
<script async src="https://www.googletagmanager.com/gtag/js?id=G-MFPDYVWZ2E"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'G-MFPDYVWZ2E');
</script>
<!-- AdSense -->
<script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-7504334276740439"
crossorigin="anonymous"></script>
<title>Programação AXN</title>
<script src="/meuguia.js"></script>
<link rel="shortcut icon" href=/favicon.ico />
<link rel="apple-touch-icon" href=/apple-touch-icon.png />
<link rel="stylesheet" media="screen" href="/reset.css" />
<link rel="stylesheet" media="screen" href="/meuguia.css" />
<link href="https://fonts.googleapis.com/css?family=Open+Sans:400,600,700|Material+Icons" rel="stylesheet">
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=0"/>
<meta name="author" content="Alexandre Saddi and Fernando Pinho | http://www.alexandresaddi.com" />
<meta name="keywords" content="meuguia,meu,guia,tv,grade,guide,tvguide,filmes,esportes,s&eacute;ries,rede globo,programa&ccedil;&atilde;o,iphone webapp,canal" />
<meta name="description" content="Guia de programa&ccedil;&atilde;o da televis&atilde;o no Brasil, incluindo canais de TV por assinatura. Otimizado para iPhone e iPod Touch." />
</head>
<body>
<div id="fb-root"></div>
<script>(function(d, s, id) {
var js, fjs = d.getElementsByTagName(s)[0];
if (d.getElementById(id)) return;
js = d.createElement(s); js.id = id;
js.src = "//connect.facebook.net/pt_BR/sdk.js#xfbml=1&version=v2.9&appId=324630984267271";
fjs.parentNode.insertBefore(js, fjs);
}(document, 'script', 'facebook-jssdk'));</script>
<script>
window.onscroll = function() {
var h = document.getElementsByTagName("header")[0];
if ( window.pageYOffset > 8 ) {
h.classList.add("elevation4");
} else {
h.classList.remove("elevation4");
}
var hbg = document.getElementById("canal_header_bg");
if ( window.pageYOffset < 8 ) {
hbg.classList.add("show");
} else {
hbg.classList.remove("show");
}
}
</script>
<header id="header" style="background-color: #0099EE">
<div id="header_wrap" class="mw">
<a class="headerbutton" id="backbutton" href="javascript:history.back();"><i class="material-icons">arrow_back</i></a>
<a id="logo" href="/">meuguia.TV</a>
</div>
</header>
<div class="whitebg">
<div class="content">
<div id="canal_header_bg" style="background-color: #0099EE"></div>
<div id="canal_header" style="background-color: #0099EE">
<div class="mw">
<div class="logo_canal canal_axn"></div>
<span>PROGRAMAÇÃO</span>
<h1 class="devicepadding">AXN</h1>
</div>
</div>
<script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-7504334276740439"
crossorigin="anonymous"></script>
<script type="text/javascript">
width = window.innerWidth;
if (width >= 730) {
// Leaderboard
google_ad_slot = "2461297838";
google_ad_width = 728;
google_ad_height = 90;
} else if ((width > 480) && (width < 730)) {
// Banner
google_ad_slot = "3358025652";
google_ad_width = 468;
google_ad_height = 60;
} else if (width <= 480) {
// Mobile
google_ad_slot = "5087461176";
google_ad_width = 320;
google_ad_height = 50;
}
document.write ('<div class="ad" style="width:'+google_ad_width+'px;">Publicidade:');
document.write ('<ins class="adsbygoogle" style="display:inline-block;width:'+google_ad_width+'px;height:'+google_ad_height+'px" data-ad-client="ca-pub-7504334276740439" data-ad-slot="'+google_ad_slot+'"></ins>');
document.write ('</div>');
(adsbygoogle = window.adsbygoogle || []).push({});
</script>
<ul class="mw">
<li class="subheader devicepadding">Terça-feira, 21/11</li>
<!--
<% if dia_atual != programa[:inicio].strftime("%d/%m") %>
<% if dia_atual != "" %>
<% if index == 6 %>
<%= render "shared/adsense_middle" %>
<% else %>
<li class="divider"></li>
<%end %>
<%end %>
<li class="subheader devicepadding"><%= dia_semana(programa[:inicio]) %></li>
<% else %>
<% if index == 6 %>
<%= render "shared/adsense_middle" %>
<%end %>
<% end %>
<% dia_atual = programa[:inicio].strftime("%d/%m") %> -->
<li>
<!-- <a title="Hawaii Five-0 : T10 EP4 - Tiny Is the Flower, Yet It Scents the Grasses Around It" class="devicepadding" href="/programacao/programa/" > -->
<a title="Hawaii Five-0 : T10 EP4 - Tiny Is the Flower, Yet It Scents the Grasses Around It" class="devicepadding" >
<div class='lileft time'>18:20</div>
<div class="licontent">
<h2>Hawaii Five-0 : T10 EP4 - Tiny Is the Flower, Yet It Scents the Grasses Around It</h2>
<h3>Drama</h3>
</div>
</a>
</li>
<!--
<% if dia_atual != programa[:inicio].strftime("%d/%m") %>
<% if dia_atual != "" %>
<% if index == 6 %>
<%= render "shared/adsense_middle" %>
<% else %>
<li class="divider"></li>
<%end %>
<%end %>
<li class="subheader devicepadding"><%= dia_semana(programa[:inicio]) %></li>
<% else %>
<% if index == 6 %>
<%= render "shared/adsense_middle" %>
<%end %>
<% end %>
<% dia_atual = programa[:inicio].strftime("%d/%m") %> -->
<li>
<!-- <a title="Hawaii Five-0 : T10 EP5 - Don&#39;t Blame Ghosts and Spirits for One&#39;s Troubles; A Human Is Responsible" class="devicepadding" href="/programacao/programa/" > -->
<a title="Hawaii Five-0 : T10 EP5 - Don&#39;t Blame Ghosts and Spirits for One&#39;s Troubles; A Human Is Responsible" class="devicepadding" >
<div class='lileft time'>19:15</div>
<div class="licontent">
<h2>Hawaii Five-0 : T10 EP5 - Don&#39;t Blame Ghosts and Spirits for One&#39;s Troubles; A Human Is Responsible</h2>
<h3>Drama</h3>
</div>
</a>
</li>
<li class="divider">
<div class="ad" style="width:300px; padding-bottom: 24px;">
Publicidade:
<script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-7504334276740439"
crossorigin="anonymous"></script>
<!-- Medium Rectangle -->
<ins class="adsbygoogle"
style="display:inline-block;width:300px;height:250px"
data-ad-client="ca-pub-7504334276740439"
data-ad-slot="9046887482"></ins>
<script>
(adsbygoogle = window.adsbygoogle || []).push({});
</script>
</div>
</li>
<!--
<% if dia_atual != programa[:inicio].strftime("%d/%m") %>
<% if dia_atual != "" %>
<% if index == 6 %>
<%= render "shared/adsense_middle" %>
<% else %>
<li class="divider"></li>
<%end %>
<%end %>
<li class="subheader devicepadding"><%= dia_semana(programa[:inicio]) %></li>
<% else %>
<% if index == 6 %>
<%= render "shared/adsense_middle" %>
<%end %>
<% end %>
<% dia_atual = programa[:inicio].strftime("%d/%m") %> -->
<li>
<!-- <a title="NCIS : T5 EP15 - In the Zone" class="devicepadding" href="/programacao/programa/" > -->
<a title="NCIS : T5 EP15 - In the Zone" class="devicepadding" >
<div class='lileft time'>20:10</div>
<div class="licontent">
<h2>NCIS : T5 EP15 - In the Zone</h2>
<h3>Ação</h3>
</div>
</a>
</li>
<!--
<% if dia_atual != programa[:inicio].strftime("%d/%m") %>
<% if dia_atual != "" %>
<% if index == 6 %>
<%= render "shared/adsense_middle" %>
<% else %>
<li class="divider"></li>
<%end %>
<%end %>
<li class="subheader devicepadding"><%= dia_semana(programa[:inicio]) %></li>
<% else %>
<% if index == 6 %>
<%= render "shared/adsense_middle" %>
<%end %>
<% end %>
<% dia_atual = programa[:inicio].strftime("%d/%m") %> -->
</ul>
</div>
</div>
<footer>
<div class="mw">
<span class="rodape devicepadding">
meuguia.TV 5.0.0 - <a href="/info/privacidade">Política de Privacidade</a>
<div class="product-social-links">
<div style="margin-right: 4px;" class="fb-like" data-href="https://facebook.com/meuguiatv" data-layout="button_count" data-action="like" data-size="large" data-width="130" data-show-faces="false" data-share="false"></div>
<a href="https://twitter.com/meuguiatv" class="twitter-follow-button" data-lang="pt" data-show-count="false" data-size="large">Seguir @meuguiatv</a><script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>
</div>
</span>
</div>
</footer>
<script>
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
ga('create', 'UA-305350-4', 'auto');
ga('send', 'pageview');
</script>
</body>
</html>

View file

@ -0,0 +1,105 @@
<?xml version="1.0" encoding="UTF-8"?>
<channels>
<channel site="meuguia.tv" lang="pt" xmltv_id="AMC.br" site_id="MGM">AMC</channel>
<channel site="meuguia.tv" lang="pt" xmltv_id="AnimalPlanet.br" site_id="APL">Animal Planet</channel>
<channel site="meuguia.tv" lang="pt" xmltv_id="Arte1.br" site_id="BQ5">Arte 1</channel>
<channel site="meuguia.tv" lang="pt" xmltv_id="AXN.br" site_id="AXN">AXN</channel>
<channel site="meuguia.tv" lang="pt" xmltv_id="BabyTV.uk" site_id="BAB">Baby TV</channel>
<channel site="meuguia.tv" lang="pt" xmltv_id="Band.br" site_id="BAN">Band</channel>
<channel site="meuguia.tv" lang="pt" xmltv_id="BandNews.br" site_id="NEW">Band News</channel>
<channel site="meuguia.tv" lang="pt" xmltv_id="BandSports.br" site_id="BSP">Band Sports</channel>
<channel site="meuguia.tv" lang="pt" xmltv_id="BBCNewsNorthAmerica.uk" site_id="BBC">BBC World News</channel>
<channel site="meuguia.tv" lang="pt" xmltv_id="Bis.br" site_id="MSH">Bis</channel>
<channel site="meuguia.tv" lang="pt" xmltv_id="BloombergTV.us" site_id="BIT">Bloomberg</channel>
<channel site="meuguia.tv" lang="pt" xmltv_id="BoaVontadeTV.br" site_id="LBV">Rede Boa Vontade</channel>
<channel site="meuguia.tv" lang="pt" xmltv_id="Canal21.br" site_id="C21">Canal 21</channel>
<channel site="meuguia.tv" lang="pt" xmltv_id="CanalBrasil.br" site_id="CBR">Canal Brasil</channel>
<channel site="meuguia.tv" lang="pt" xmltv_id="CanaldoBoi.br" site_id="BOI">Canal do Boi</channel>
<channel site="meuguia.tv" lang="pt" xmltv_id="CanalFutura.br" site_id="FUT">Futura</channel>
<channel site="meuguia.tv" lang="pt" xmltv_id="CanalOff.br" site_id="OFF">OFF HD</channel>
<channel site="meuguia.tv" lang="pt" xmltv_id="CanalRural.br" site_id="RUR">Canal Rural</channel>
<channel site="meuguia.tv" lang="pt" xmltv_id="CanalViva.br" site_id="VIV">Viva</channel>
<channel site="meuguia.tv" lang="pt" xmltv_id="CartoonNetwork.br" site_id="CAR">Cartoon Network</channel>
<channel site="meuguia.tv" lang="pt" xmltv_id="Cinemax.br" site_id="MNX">Cinemax</channel>
<channel site="meuguia.tv" lang="pt" xmltv_id="Climatempo.br" site_id="CLI">Climatempo</channel>
<channel site="meuguia.tv" lang="pt" xmltv_id="CNN.us" site_id="CNN">CNN International</channel>
<channel site="meuguia.tv" lang="pt" xmltv_id="Combate.br" site_id="135">Combate</channel>
<channel site="meuguia.tv" lang="pt" xmltv_id="ComedyCentral.br" site_id="CCE">Comedy Central</channel>
<channel site="meuguia.tv" lang="pt" xmltv_id="DiscoveryChannel.br" site_id="DIS">Discovery Channel</channel>
<channel site="meuguia.tv" lang="pt" xmltv_id="DiscoveryScience.br" site_id="DSC">Discovery Science</channel>
<channel site="meuguia.tv" lang="pt" xmltv_id="DiscoveryTheater.br" site_id="DHD">Discovery HD Theater</channel>
<channel site="meuguia.tv" lang="pt" xmltv_id="DiscoveryTurbo.br" site_id="DTU">Discovery Turbo</channel>
<channel site="meuguia.tv" lang="pt" xmltv_id="DiscoveryWorld.br" site_id="DIW">Discovery World</channel>
<channel site="meuguia.tv" lang="pt" xmltv_id="DisneyChannel.br" site_id="DNY">Disney Channel</channel>
<channel site="meuguia.tv" lang="pt" xmltv_id="DWDeutsch.de" site_id="DWL">Deutsche Welle</channel>
<channel site="meuguia.tv" lang="pt" xmltv_id="E.br" site_id="EET">E! Entertainment Television</channel>
<channel site="meuguia.tv" lang="pt" xmltv_id="ESPN.br" site_id="ESB">ESPN Brasil</channel>
<channel site="meuguia.tv" lang="pt" xmltv_id="ESPN.us" site_id="ESP">ESPN</channel>
<channel site="meuguia.tv" lang="pt" xmltv_id="Eurochannel.uk" site_id="EUR">Eurochannel</channel>
<channel site="meuguia.tv" lang="pt" xmltv_id="FoxSports2.br" site_id="FS2">Fox Sports 2</channel>
<channel site="meuguia.tv" lang="pt" xmltv_id="FoxSports.br" site_id="FSP">Fox Sports</channel>
<channel site="meuguia.tv" lang="pt" xmltv_id="FX.br" site_id="CFX">FX</channel>
<channel site="meuguia.tv" lang="pt" xmltv_id="Globo.br" site_id="GRD">Globo</channel>
<channel site="meuguia.tv" lang="pt" xmltv_id="GloboNews.br" site_id="GLN">Globo News</channel>
<channel site="meuguia.tv" lang="pt" xmltv_id="Gloob.br" site_id="GOB">Gloob</channel>
<channel site="meuguia.tv" lang="pt" xmltv_id="GNT.br" site_id="GNT">GNT</channel>
<channel site="meuguia.tv" lang="pt" xmltv_id="HBO2.br" site_id="HB2">HBO 2</channel>
<channel site="meuguia.tv" lang="pt" xmltv_id="HBO.br" site_id="HBO">HBO</channel>
<channel site="meuguia.tv" lang="pt" xmltv_id="HBOFamily.br" site_id="HFA">HBO Family</channel>
<channel site="meuguia.tv" lang="pt" xmltv_id="HBOPlus.br" site_id="HPL">HBO Plus</channel>
<channel site="meuguia.tv" lang="pt" xmltv_id="HBOSignature.br" site_id="HFE">HBO Signature</channel>
<channel site="meuguia.tv" lang="pt" xmltv_id="Lifetime.br" site_id="ANX">Lifetime</channel>
<channel site="meuguia.tv" lang="pt" xmltv_id="Megapix.br" site_id="MPX">Megapix</channel>
<channel site="meuguia.tv" lang="pt" xmltv_id="MTV.br" site_id="MTV">MTV</channel>
<channel site="meuguia.tv" lang="pt" xmltv_id="Multishow.br" site_id="MSW">Multishow</channel>
<channel site="meuguia.tv" lang="pt" xmltv_id="NationalGeographic.br" site_id="SUP">National Geographic</channel>
<channel site="meuguia.tv" lang="pt" xmltv_id="NHKWorldJapan.jp" site_id="NHK">NHK World</channel>
<channel site="meuguia.tv" lang="pt" xmltv_id="Nickelodeon.br" site_id="NIC">Nickelodeon</channel>
<channel site="meuguia.tv" lang="pt" xmltv_id="NickJr.br" site_id="NJR">Nick Jr.</channel>
<channel site="meuguia.tv" lang="pt" xmltv_id="ParamountNetwork.br" site_id="PAR">Paramount Channel</channel>
<channel site="meuguia.tv" lang="pt" xmltv_id="PremiereClubes.br" site_id="121">Premiere Clubes</channel>
<channel site="meuguia.tv" lang="pt" xmltv_id="RaiItaliaAmerica.it" site_id="RAI">RAI International</channel>
<channel site="meuguia.tv" lang="pt" xmltv_id="Record.br" site_id="REC">Record TV</channel>
<channel site="meuguia.tv" lang="pt" xmltv_id="RecordNews.br" site_id="RCN">Record News</channel>
<channel site="meuguia.tv" lang="pt" xmltv_id="RedeTV.br" site_id="RTV">Rede TV</channel>
<channel site="meuguia.tv" lang="pt" xmltv_id="RedeVida.br" site_id="VDA">Rede Vida</channel>
<channel site="meuguia.tv" lang="pt" xmltv_id="SBT.br" site_id="SBT">SBT</channel>
<channel site="meuguia.tv" lang="pt" xmltv_id="Shoptime.br" site_id="SHO">Shoptime</channel>
<channel site="meuguia.tv" lang="pt" xmltv_id="SICInternacional.pt" site_id="SIC">SIC International</channel>
<channel site="meuguia.tv" lang="pt" xmltv_id="SonyChannel.br" site_id="SET">Sony</channel>
<channel site="meuguia.tv" lang="pt" xmltv_id="Space.br" site_id="SPA">SPACE</channel>
<channel site="meuguia.tv" lang="pt" xmltv_id="SporTV2.br" site_id="SP2">SporTV 2</channel>
<channel site="meuguia.tv" lang="pt" xmltv_id="SporTV3.br" site_id="SP3">SporTV 3</channel>
<channel site="meuguia.tv" lang="pt" xmltv_id="SporTV.br" site_id="SPO">SporTV</channel>
<channel site="meuguia.tv" lang="pt" xmltv_id="StudioUniversal.br" site_id="HAL">Studio Universal</channel>
<channel site="meuguia.tv" lang="pt" xmltv_id="Syfy.br" site_id="SCI">SyFy</channel>
<channel site="meuguia.tv" lang="pt" xmltv_id="TBS.br" site_id="TBS">TBS</channel>
<channel site="meuguia.tv" lang="pt" xmltv_id="TCM.br" site_id="TCM">TCM - Turner Classic</channel>
<channel site="meuguia.tv" lang="pt" xmltv_id="TelecineAction.br" site_id="TC2">Telecine Action</channel>
<channel site="meuguia.tv" lang="pt" xmltv_id="TelecineCult.br" site_id="TC5">Telecine Cult</channel>
<channel site="meuguia.tv" lang="pt" xmltv_id="TelecineFun.br" site_id="TC6">Telecine Fun</channel>
<channel site="meuguia.tv" lang="pt" xmltv_id="TelecinePipoca.br" site_id="TC4">Telecine Pipoca</channel>
<channel site="meuguia.tv" lang="pt" xmltv_id="TelecinePremium.br" site_id="TC1">Telecine Premium</channel>
<channel site="meuguia.tv" lang="pt" xmltv_id="TelecineTouch.br" site_id="TC3">Telecine Touch</channel>
<channel site="meuguia.tv" lang="pt" xmltv_id="TerraViva.br" site_id="TVV">Terra Viva</channel>
<channel site="meuguia.tv" lang="pt" xmltv_id="TLC.br" site_id="TRV">TLC</channel>
<channel site="meuguia.tv" lang="pt" xmltv_id="TNT.br" site_id="TNT">TNT</channel>
<channel site="meuguia.tv" lang="pt" xmltv_id="TNTSeries.br" site_id="TNS">TNT Séries</channel>
<channel site="meuguia.tv" lang="pt" xmltv_id="Tooncast.us" site_id="TOC">Tooncast</channel>
<channel site="meuguia.tv" lang="pt" xmltv_id="TravelBoxBrazil.br" site_id="TRB">Travel Box Brazil</channel>
<channel site="meuguia.tv" lang="pt" xmltv_id="TV5MondeLatinAmerica.fr" site_id="TV5">TV5 Monde</channel>
<channel site="meuguia.tv" lang="pt" xmltv_id="TVAparecida.br" site_id="TAP">TV Aparecida (aberta)</channel>
<channel site="meuguia.tv" lang="pt" xmltv_id="TVBrasil.br" site_id="TED">TV Brasil</channel>
<channel site="meuguia.tv" lang="pt" xmltv_id="TVCamara.br" site_id="CAM">TV Câmara</channel>
<channel site="meuguia.tv" lang="pt" xmltv_id="TVCancaoNova.br" site_id="CNV">Canção Nova</channel>
<channel site="meuguia.tv" lang="pt" xmltv_id="TVCulturaNacional.br" site_id="CUL">TV Cultura</channel>
<channel site="meuguia.tv" lang="pt" xmltv_id="TVEscola.br" site_id="ESC">TV Escola</channel>
<channel site="meuguia.tv" lang="pt" xmltv_id="TVEspanha.br" site_id="TVE">TV Espanha</channel>
<channel site="meuguia.tv" lang="pt" xmltv_id="TVGazeta.br" site_id="GAZ">TV Gazeta</channel>
<channel site="meuguia.tv" lang="pt" xmltv_id="TVJustica.br" site_id="JUS">TV Justiça</channel>
<channel site="meuguia.tv" lang="pt" xmltv_id="TVRaTimBum.br" site_id="RTB">TV Rá-tim-bum</channel>
<channel site="meuguia.tv" lang="pt" xmltv_id="TVSenado.br" site_id="SEN">TV Senado</channel>
<channel site="meuguia.tv" lang="pt" xmltv_id="UniversalTV.br" site_id="USA">Universal Channel</channel>
<channel site="meuguia.tv" lang="pt" xmltv_id="WarnerChannel.br" site_id="WBT">Warner Channel</channel>
<channel site="meuguia.tv" lang="pt" xmltv_id="WooHoo.br" site_id="WOO">Woohoo</channel>
</channels>

View file

@ -0,0 +1,101 @@
const cheerio = require('cheerio')
const dayjs = require('dayjs')
const utc = require('dayjs/plugin/utc')
const timezone = require('dayjs/plugin/timezone')
const customParseFormat = require('dayjs/plugin/customParseFormat')
dayjs.extend(utc)
dayjs.extend(timezone)
dayjs.extend(customParseFormat)
module.exports = {
site: 'meuguia.tv',
days: 2,
url({ channel }) {
return `https://meuguia.tv/programacao/canal/${channel.site_id}`
},
parser({ content, date }) {
const programs = []
parseItems(content, date).forEach(item => {
if (dayjs.utc(item.start).isSame(date, 'day')) {
programs.push(item)
}
})
return programs
},
async channels() {
const channels = []
const axios = require('axios')
const baseUrl = 'https://meuguia.tv'
let seq = 0
const queues = [baseUrl]
while (true) {
if (!queues.length) {
break
}
const url = queues.shift()
const content = await axios
.get(url)
.then(response => response.data)
.catch(console.error)
if (content) {
const [ $, items ] = getItems(content)
if (seq === 0) {
queues.push(...items.map(category => baseUrl + $(category).attr('href')))
} else {
items.forEach(item => {
const href = $(item).attr('href')
channels.push({
lang: 'pt',
site_id: href.substr(href.lastIndexOf('/') + 1),
name: $(item).find('.licontent h2').text().trim()
})
})
}
}
seq++
}
return channels
}
}
function getItems(content) {
const $ = cheerio.load(content)
return [$, $('div.mw ul li a').toArray()]
}
function parseItems(content, date) {
const result = []
const $ = cheerio.load(content)
let lastDate
for (const item of $('ul.mw li').toArray()) {
const $item = $(item)
if ($item.hasClass('subheader')) {
lastDate = `${$item.text().split(', ')[1]}/${date.format('YYYY')}`
} else if ($item.hasClass('divider')) {
// ignore
} else if (lastDate) {
const data = { title: $item.find('a').attr('title').trim() }
const ep = data.title.match(/T(\d+) EP(\d+)/)
if (ep) {
data.season = parseInt(ep[1])
data.episode = parseInt(ep[2])
}
data.start = dayjs.tz(`${lastDate} ${$item.find('.time').text()}`, 'DD/MM/YYYY HH:mm', 'America/Sao_Paulo')
result.push(data)
}
}
// use stop time from next item
if (result.length > 1) {
for (let i = 0; i < result.length - 1; i++) {
result[i].stop = result[i + 1].start
}
}
return result
}

View file

@ -0,0 +1,62 @@
// npm run channels:parse -- --config=./sites/meuguia.tv/meuguia.tv.config.js --output=./sites/meuguia.tv/meuguia.tv.channels.xml
// npm run grab -- --site=meuguia.tv
const { parser, url } = require('./meuguia.tv.config.js')
const fs = require('fs')
const path = require('path')
const dayjs = require('dayjs')
const utc = require('dayjs/plugin/utc')
dayjs.extend(utc)
const date = dayjs.utc('2023-11-21').startOf('d')
const channel = {
site_id: 'AXN',
xmltv_id: 'AXN.id'
}
it('can generate valid url', () => {
expect(url({ channel })).toBe('https://meuguia.tv/programacao/canal/AXN')
})
it('can parse response', () => {
const content = fs.readFileSync(path.resolve(__dirname, '__data__/content.html'))
const result = parser({ content, channel, date }).map(p => {
p.start = p.start.toJSON()
if (p.stop) {
p.stop = p.stop.toJSON()
}
return p
})
expect(result).toMatchObject([
{
title: 'Hawaii Five-0 : T10 EP4 - Tiny Is the Flower, Yet It Scents the Grasses Around It',
start: '2023-11-21T21:20:00.000Z',
stop: '2023-11-21T22:15:00.000Z',
season: 10,
episode: 4
},
{
title: 'Hawaii Five-0 : T10 EP5 - Don\'t Blame Ghosts and Spirits for One\'s Troubles; A Human Is Responsible',
start: '2023-11-21T22:15:00.000Z',
stop: '2023-11-21T23:10:00.000Z',
season: 10,
episode: 5
},
{
title: 'NCIS : T5 EP15 - In the Zone',
start: '2023-11-21T23:10:00.000Z',
season: 5,
episode: 15
}
])
})
it('can handle empty guide', () => {
const result = parser({
date,
channel,
content: '<!DOCTYPE html><html><head></head><body></body></html>'
})
expect(result).toMatchObject([])
})