diff --git a/.github/workflows/update.yml b/.github/workflows/update.yml index cf94890a5..2f504e4ef 100644 --- a/.github/workflows/update.yml +++ b/.github/workflows/update.yml @@ -3,6 +3,8 @@ on: workflow_dispatch: schedule: - cron: '0 0 * * *' +permissions: + contents: read jobs: main: runs-on: ubuntu-latest diff --git a/SITES.md b/SITES.md index 41e0ccdbb..47efc793e 100644 --- a/SITES.md +++ b/SITES.md @@ -2,252 +2,252 @@ - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SiteChannels
(total / with xmltv-id)
StatusNotes
SiteChannelsStatusNotes
9tv.co.il11🟢
abc.net.au5480🟢
airtelxstream.in972667🟢
aljazeera.com33🟢
allente.no3190🟢
andorradifusio.ad11🟢
anteltv.com.uy5446🟢
antennaeurope.gr11🟢
antennapacific.gr11🟢
antennasatellite.gr11🟢
app.tvufop.com.br11🟢
arianatelevision.com11🟢
arirang.com33🟢
artonline.tv55🟢
awilime.com1100🟢
ayn.om44🟢
bein.com134134🟢
beinsports.com13081🟢
berrymedia.co.kr55🟢
cableplus.com.uy17144🟢
canalplus.com13940172🟢
cgates.lt4729🟢
chada.ma11🟢
chaines-tv.orange.fr397327🟢
claro.com.br2730🟢https://github.com/iptv-org/epg/issues/2988
clarotvmais.com.br1580🟢
clickthecity.com3230🟢
content.astro.com.my14993🟢
cosmotetv.gr1090🟢
ctc.ru11🟢
cubmu.com140104🟢
cyta.com.cy1170🟢
dens.tv5448🟢
derana.lk11🟢
digea.gr880🟢
digiturk.com.tr11291🟢
directv.com1043640🔴https://github.com/iptv-org/epg/issues/3001, https://github.com/iptv-org/epg/issues/2284
directv.com.ar3710🟢
directv.com.uy37459🟢
dishtv.in603548🟢
distro.tv336125🟢
dna.fi1230🟢
dsmart.com.tr10076🟢
dstv.com297980🟢
dtv8.net11🟢
elcinema.com198196🟢
ena.skylifetv.co.kr66🟢
energeek.cl62🟢
entertainment.ie10580🟢
epg.112114.xyz9421🟢
epg.iptvx.one3329729🟢
epg.telemach.ba4760🟢
epgmaster.com11🟢
epgshare01.online2070615🟢
firstmedia.com11697🟢
foxsports.com.au77🟢
foxtel.com.au9960🟢
freetv.tv77🟢
freeview.co.uk166104🟢
frikanalen.no11🟢
galamtv.kz2722🟢
gatotv.com477342🟢
getafteritmedia.com55🟢
gigatv.3bbtv.co.th7937🟢
go3.ee1470🟢
guiadetv.com1240🟢
guida.tv8886🟢
guidatv.sky.it154154🟢
guidetnt.com6968🟢
horizon.tv184172🟢
hoy.tv31🟢
i.mjh.nz108702935🟢
i24news.tv43🟢
iltalehti.fi1470🟢
indihometv.com128122🟢
ionplustv.com11🟢
ipko.tv194151🟢
jiotv.com10940🟢
knr.gl11🟢
kvf.fo11🟢
m.tv.sms.cz1027449🟢
m.tving.com3026🟢
magticom.ge240110🟢
mako.co.il11🟢
makrodigitaltelevision.com11🟢
maxtvgo.mk11048🟢
mediagenie.co.kr54🟢
mediaklikk.hu88🟢
mediasetinfinity.mediaset.it1313🟢
melita.com127110🟢
meo.pt212199🟢
meuguia.tv10296🟢
mewatch.sg11938🟢
mi.tv2084614🟢
mncvision.id276221🟢
moji.id11🟢
mojmaxtv.hrvatskitelekom.hr2430🟢
mon-programme-tv.be11194🟢
movistarplus.es1380🟢
mtel.ba5010🟢
mts.rs4570🟢
mujtvprogram.cz213190🟢
musor.tv181142🟢
mysky.com.ph11543🟢
mytelly.co.uk488387🟢
mytvsuper.com10899🟢
neo.io337230🟢
nhkworldpremium.com22🟢
nhl.com11🟢
nostv.pt161152🟢
novacyprus.com2924🟢
novasports.gr1616🟢
nowplayer.now.com288227🟢
nuevosiglo.com.uy17346🟢
nzxmltv.com532118🟢
ontvtonight.com5177528🟢
opto.sic.pt33🟢
orangetv.orange.es273151🟢
osn.com13486🟢
passie.nl11🟢
pbsguam.org11🟢
pickx.be404375🟢
player.ee.co.uk231180🟢
playtv.unifi.com.my6661🟢
plex.tv1315555🟢
pluto.tv2591415🟢
port.hu1510🟢
programacion-tv.elpais.com195101🟢
programacion.tcc.com.uy14955🟢
programetv.ro331223🟢
programme-tv.net299171🟢
programme-tv.vini.pf582🟢
programme.tvb.com86🟢
programtv.onet.pl590356🟢
raiplay.it1713🟢
reportv.com.ar16395🟢
rikstv.no800🟢
rotana.net3226🔴https://github.com/iptv-org/epg/issues/3018
roya-tv.com108🟢
rthk.hk88🟢
rtmklik.rtm.gov.my86🟢
rtp.pt1010🟢
rts.ch33🟢
ruv.is22🟢
s.mxtv.jp22🟢
sat.tv30308249🟢
shahid.mbc.net205172🟢
siba.com.co24488🟢
singtel.com139100🟢
sjonvarp.is1313🟢
sky.co.nz9188🟢
sky.com533471🟢
sky.de7474🟢
skylife.co.kr2570🟢
skyperfectv.co.jp19667🟢
snrt.ma117🟢
sporttv.pt99🟢
starhubtvplus.com236206🟢
startimestv.com7758🟢
streamingtvguides.com30661🟢
superguidatv.it204159🟢
syn.is90🟢
taiwanplus.com11🟢
tapdmv.com397🟢
tataplay.com1097727🟢
telebilbao.es11🟢
teleboy.ch3250🟢
telenet.tv26091🟢
teliatv.ee342233🟢
telkussa.fi6632🟢
telsu.fi1715🟢
thesportplus.com30🟢
tivie.id4542🟢
tivu.tv809🟢
toonamiaftermath.com11🟢
turksatkablo.com.tr177118🟢
tv-programme.telecablesat.fr268248🟢
tv-spored.siol.net3120🟢
tv.blue.ch1030556🟢
tv.boxbg.net830🟢
tv.cctv.com9488🟢
tv.dir.bg10082🟢
tv.lv13749🟢
tv.magenta.at307219🟢
tv.mail.ru664632🟢
tv.movistar.co970🟢
tv.movistar.com.pe26231🟢
tv.nu199180🟢
tv.post.lu332241🟢
tv.sfr.fr489438🟢
tv.trueid.net24635🟢
tv24.co.uk107238🟢
tv24.se308136🟢
tv2go.t-2.net342232🟢
tvarenasport.com1818🟢
tvarenasport.hr1010🟢
tvcesoir.fr135132🟢
tvcubana.icrt.cu1010🟢
tvgids.nl115101🟢
tvguide.com153153🟢
tvguide.myjcom.jp134128🟢
tvhebdo.com317213🟢
tvheute.at5348🟢
tvi.iol.pt77🟢
tvim.tv2519🟢
tvinsider.com3740🟢
tvireland.ie334288🟢
tvkaista.org1490🟢
tvmi.mt33🟢
tvmusor.hu9966🟢
tvmustra.hu1890🟢
tvpassport.com192872496🟢
tvplus.com.tr150144🟢
tvprofil.com9091408🔴https://github.com/iptv-org/epg/issues/3032
tvtv.us22992230🟢
v3.myafn.dodmedia.osd.mil88🟢
vantagetv.ee31🟢
vidio.com5752🟢
virginmediatelevision.ie55🟢
virgintvgo.virginmedia.com238181🟢
visionplus.id250224🟢
vivoplay.com.br3970🟢
vodafone.pt146141🟢
vrt.be1010🟢
vtm.be76🟢
walesi.com.fj98🟢
watch.sportsnet.ca88🟢
watch.whaletvplus.com364166🟢
watchyour.tv4024🟢
wavve.com7776🟢
web.magentatv.de337216🟢
webtv.delta.nl247204🟢
webtv.sk1860🟢
winplay.co30🟢
worldfishingnetwork.com11🟢
www3.nhk.or.jp11🟢
xem.kplus.vn770🟢
xumo.tv415191🟢
yes.co.il1740🟢
zap.co.ao11463🟢
zap2it.com5950🟢
ziggogo.tv156150🟡https://github.com/iptv-org/epg/issues/2977
znbc.co.zm44🟢
zuragt.mn3427🟢
9tv.co.il1🟢
abc.net.au548🟢
airtelxstream.in972🟢
aljazeera.com3🟢
allente.no319🟢
andorradifusio.ad1🟢
anteltv.com.uy54🟢
antennaeurope.gr1🟢
antennapacific.gr1🟢
antennasatellite.gr1🟢
app.tvufop.com.br1🟢
arianatelevision.com1🟢
arirang.com3🟢
artonline.tv5🟢
awilime.com110🟢
ayn.om4🟢
bein.com67🟢
beinsports.com78🟢
berrymedia.co.kr5🟢
cableplus.com.uy171🟢
canalplus.com13940🟢
cgates.lt47🟢
chada.ma1🟢
chaines-tv.orange.fr397🟢
claro.com.br273🟢
clarotvmais.com.br158🟢
clickthecity.com32🟢
content.astro.com.my149🟢
cosmotetv.gr109🟢
ctc.ru1🟢
cubmu.com76🟢
cyta.com.cy117🟢
dens.tv43🟢
derana.lk1🟢
digea.gr88🟢
digiturk.com.tr112🟢
directv.com1156🟢
directv.com.ar371🟢
directv.com.uy374🟢
dishtv.in603🟢
distro.tv336🟢
dna.fi123🟢
dsmart.com.tr100🟢
dstv.com2979🟢
dtv8.net1🟢
elcinema.com104🟢
ena.skylifetv.co.kr6🟢
energeek.cl6🟢
entertainment.ie105🟢
epg.112114.xyz942🟢
epg.iptvx.one3329🟢
epg.telemach.ba364🟢
epgmaster.com1🟢
epgshare01.online20706🟢
foxsports.com.au7🟢
foxtel.com.au99🟢
france.tv15🟢
freetv.tv7🟢
freeview.co.uk352🟢
frikanalen.no1🟢
galamtv.kz27🟢
gatotv.com1925🟢
getafteritmedia.com5🟢
gigatv.3bbtv.co.th79🟢
go3.ee147🟢
guiadetv.com124🟢
guida.tv88🟢
guidatv.sky.it154🟢
guidetnt.com69🟢
horizon.tv184🟢
hoy.tv3🟢
i.mjh.nz10870🟢
i24news.tv4🟢
iltalehti.fi147🟢
ionplustv.com1🟢
ipko.tv201🟢
jiotv.com1094🟢
knr.gl1🟢
kvf.fo1🟢
m.tv.sms.cz1027🟢
m.tving.com30🟢
magticom.ge240🟢
mako.co.il1🟢
makrodigitaltelevision.com1🟢
maxstream.tv129🟢
maxtvgo.mk110🟢
mediagenie.co.kr5🟢
mediaklikk.hu8🟢
mediasetinfinity.mediaset.it13🟢
melita.com127🟢
meo.pt212🟢
meuguia.tv102🟢
mewatch.sg119🟢
mi.tv2084🟢
mncvision.id107🟢
moji.id1🟢
mojmaxtv.hrvatskitelekom.hr243🟢
mon-programme-tv.be111🟢
movistarplus.es138🟢
mtel.ba501🟢
mts.rs457🟢
mujtvprogram.cz213🟢
musor.tv181🟢
mysky.com.ph115🟢
mytelly.co.uk488🟢
mytvsuper.com54🟢
neo.io337🟢
nhkworldpremium.com1🟢
nhl.com1🟢
nostv.pt161🟢
novasports.gr16🟢
nowplayer.now.com140🟢
nuevosiglo.com.uy173🟢
nzxmltv.com532🟢
ontvtonight.com5177🟢
opto.sic.pt3🟢
orangetv.orange.es273🔴https://github.com/iptv-org/epg/issues/3099
osn.com67🟢
passie.nl1🟢
pbsguam.org1🟢
pickx.be404🟢
player.ee.co.uk231🟢
playtv.unifi.com.my66🟢
plex.tv1315🟢
pluto.tv2591🟢
port.hu151🟢
programacion-tv.elpais.com195🟢
programacion.tcc.com.uy149🟢
programetv.ro331🟢
programme-tv.net299🟢
programme-tv.vini.pf58🟢
programme.tvb.com4🟢
programtv.onet.pl590🟢
raiplay.it17🟢
reportv.com.ar163🟢
rikstv.no80🟢
rotana.net16🔴https://github.com/iptv-org/epg/issues/3018
roya-tv.com10🟢
rthk.hk4🟢
rtmklik.rtm.gov.my8🟢
rtp.pt10🟢
rts.ch3🟢
ruv.is2🟢
s.mxtv.jp2🟢
sat.tv28270🟢
shahid.mbc.net71🟢
siba.com.co244🟢
singtel.com137🟢
sjonvarp.is13🟢
sky.co.nz91🟢
sky.com533🟢
sky.de74🟢
skylife.co.kr257🟢
skyperfectv.co.jp196🟢
snrt.ma11🟢
sporttv.pt9🟢
starhubtvplus.com118🟢
startimestv.com77🟢
streamingtvguides.com3066🟢
superguidatv.it204🟢
syn.is9🟢
taiwanplus.com1🟢
tapdmv.com39🟢
tataplay.com917🟢
telebilbao.es1🟢
teleboy.ch325🟢
telenet.tv260🟢
teliatv.ee342🟢
telkussa.fi66🟢
telsu.fi17🟢
thesportplus.com3🟢
tivie.id56🟢
tivu.tv80🟢
toonamiaftermath.com1🟢
turksatkablo.com.tr177🟢
tv-programme.telecablesat.fr268🟢
tv-spored.siol.net312🟢
tv.blue.ch1030🟢
tv.boxbg.net83🟢
tv.cctv.com94🟢
tv.dir.bg100🟢
tv.lv137🟢
tv.magenta.at307🟢
tv.mail.ru664🟢
tv.movistar.co97🟢
tv.movistar.com.pe262🟢
tv.nu199🟢
tv.post.lu332🟢
tv.sfr.fr489🟢
tv.trueid.net123🟢
tv24.co.uk1072🟢
tv24.se308🟢
tv2go.t-2.net342🟢
tvarenasport.com18🟢
tvarenasport.hr10🟢
tvcesoir.fr135🟢
tvcubana.icrt.cu10🟢
tvgids.nl115🟢
tvguide.com153🟢
tvguide.myjcom.jp134🟢
tvhebdo.com317🟢
tvheute.at53🟢
tvi.iol.pt7🟢
tvim.tv25🟢
tvinsider.com374🟢
tvireland.ie334🟢
tvkaista.org149🟢
tvmi.mt3🟢
tvmusor.hu99🟢
tvmustra.hu189🟢
tvpassport.com19287🟢
tvplus.com.tr150🟢
tvprofil.com8865🔴https://github.com/iptv-org/epg/issues/3032
tvtv.us2299🟢
v3.myafn.dodmedia.osd.mil8🟢
vantagetv.ee3🟢
vidio.com65🟢
virginmediatelevision.ie5🟢
virgintvgo.virginmedia.com238🟢
visionplus.id133🟢
vivoplay.com.br397🟢
vodafone.pt146🟢
vrt.be10🟢
vtm.be7🟢
walesi.com.fj9🟢
watch.sportsnet.ca8🟢
watch.whaletvplus.com364🟢
watchyour.tv40🟢
wavve.com77🟢
web.magentatv.de337🟢
webtv.delta.nl247🟢
webtv.sk186🟢
winplay.co3🟢
worldfishingnetwork.com1🟢
www3.nhk.or.jp1🟢
xem.kplus.vn77🟢
xumo.tv415🟢
yes.co.il174🟢
zap.co.ao114🟢
zap2it.com595🟢
zee5.com115🟢
ziggogo.tv156🟡https://github.com/iptv-org/epg/issues/2977, https://github.com/iptv-org/epg/issues/2976
znbc.co.zm4🟢
zuragt.mn34🟢
diff --git a/package-lock.json b/package-lock.json index e1f99ee79..8329b6ed6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -35,7 +35,7 @@ "cross-env": "^10.1.0", "curl-generator": "^0.5.0", "dayjs": "^1.11.20", - "epg-grabber": "^0.46.1", + "epg-grabber": "^0.46.2", "epg-parser": "^0.5.0", "eslint": "^10.2.1", "eslint-config-prettier": "^10.1.8", @@ -608,9 +608,9 @@ "integrity": "sha512-lrTPqgvfFQtR/eY/qkIzp98OGdNJu0m5ji3q/nJI8v3SXkRKEnWiOxMmbvcSoAIzv/cGiuvRy57k4suKQSAdwA==" }, "node_modules/@esbuild/aix-ppc64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.27.7.tgz", - "integrity": "sha512-EKX3Qwmhz1eMdEJokhALr0YiD0lhQNwDqkPYyPhiSwKrh7/4KRjQc04sZ8db+5DVVnZ1LmbNDI1uAMPEUBnQPg==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.23.1.tgz", + "integrity": "sha512-6VhYk1diRqrhBAqpJEdjASR/+WVRtfjpqKuNw11cLiaWpAT/Uu+nokB+UJnevzy/P9C/ty6AOe0dwueMrGh/iQ==", "cpu": [ "ppc64" ], @@ -624,9 +624,9 @@ } }, "node_modules/@esbuild/android-arm": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.27.7.tgz", - "integrity": "sha512-jbPXvB4Yj2yBV7HUfE2KHe4GJX51QplCN1pGbYjvsyCZbQmies29EoJbkEc+vYuU5o45AfQn37vZlyXy4YJ8RQ==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.23.1.tgz", + "integrity": "sha512-uz6/tEy2IFm9RYOyvKl88zdzZfwEfKZmnX9Cj1BHjeSGNuGLuMD1kR8y5bteYmwqKm1tj8m4cb/aKEorr6fHWQ==", "cpu": [ "arm" ], @@ -640,9 +640,9 @@ } }, "node_modules/@esbuild/android-arm64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.27.7.tgz", - "integrity": "sha512-62dPZHpIXzvChfvfLJow3q5dDtiNMkwiRzPylSCfriLvZeq0a1bWChrGx/BbUbPwOrsWKMn8idSllklzBy+dgQ==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.23.1.tgz", + "integrity": "sha512-xw50ipykXcLstLeWH7WRdQuysJqejuAGPd30vd1i5zSyKK3WE+ijzHmLKxdiCMtH1pHz78rOg0BKSYOSB/2Khw==", "cpu": [ "arm64" ], @@ -656,9 +656,9 @@ } }, "node_modules/@esbuild/android-x64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.27.7.tgz", - "integrity": "sha512-x5VpMODneVDb70PYV2VQOmIUUiBtY3D3mPBG8NxVk5CogneYhkR7MmM3yR/uMdITLrC1ml/NV1rj4bMJuy9MCg==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.23.1.tgz", + "integrity": "sha512-nlN9B69St9BwUoB+jkyU090bru8L0NA3yFvAd7k8dNsVH8bi9a8cUAUSEcEEgTp2z3dbEDGJGfP6VUnkQnlReg==", "cpu": [ "x64" ], @@ -672,9 +672,9 @@ } }, "node_modules/@esbuild/darwin-arm64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.27.7.tgz", - "integrity": "sha512-5lckdqeuBPlKUwvoCXIgI2D9/ABmPq3Rdp7IfL70393YgaASt7tbju3Ac+ePVi3KDH6N2RqePfHnXkaDtY9fkw==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.23.1.tgz", + "integrity": "sha512-YsS2e3Wtgnw7Wq53XXBLcV6JhRsEq8hkfg91ESVadIrzr9wO6jJDMZnCQbHm1Guc5t/CdDiFSSfWP58FNuvT3Q==", "cpu": [ "arm64" ], @@ -688,9 +688,9 @@ } }, "node_modules/@esbuild/darwin-x64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.27.7.tgz", - "integrity": "sha512-rYnXrKcXuT7Z+WL5K980jVFdvVKhCHhUwid+dDYQpH+qu+TefcomiMAJpIiC2EM3Rjtq0sO3StMV/+3w3MyyqQ==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.23.1.tgz", + "integrity": "sha512-aClqdgTDVPSEGgoCS8QDG37Gu8yc9lTHNAQlsztQ6ENetKEO//b8y31MMu2ZaPbn4kVsIABzVLXYLhCGekGDqw==", "cpu": [ "x64" ], @@ -704,9 +704,9 @@ } }, "node_modules/@esbuild/freebsd-arm64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.27.7.tgz", - "integrity": "sha512-B48PqeCsEgOtzME2GbNM2roU29AMTuOIN91dsMO30t+Ydis3z/3Ngoj5hhnsOSSwNzS+6JppqWsuhTp6E82l2w==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.23.1.tgz", + "integrity": "sha512-h1k6yS8/pN/NHlMl5+v4XPfikhJulk4G+tKGFIOwURBSFzE8bixw1ebjluLOjfwtLqY0kewfjLSrO6tN2MgIhA==", "cpu": [ "arm64" ], @@ -720,9 +720,9 @@ } }, "node_modules/@esbuild/freebsd-x64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.27.7.tgz", - "integrity": "sha512-jOBDK5XEjA4m5IJK3bpAQF9/Lelu/Z9ZcdhTRLf4cajlB+8VEhFFRjWgfy3M1O4rO2GQ/b2dLwCUGpiF/eATNQ==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.23.1.tgz", + "integrity": "sha512-lK1eJeyk1ZX8UklqFd/3A60UuZ/6UVfGT2LuGo3Wp4/z7eRTRYY+0xOu2kpClP+vMTi9wKOfXi2vjUpO1Ro76g==", "cpu": [ "x64" ], @@ -736,9 +736,9 @@ } }, "node_modules/@esbuild/linux-arm": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.27.7.tgz", - "integrity": "sha512-RkT/YXYBTSULo3+af8Ib0ykH8u2MBh57o7q/DAs3lTJlyVQkgQvlrPTnjIzzRPQyavxtPtfg0EopvDyIt0j1rA==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.23.1.tgz", + "integrity": "sha512-CXXkzgn+dXAPs3WBwE+Kvnrf4WECwBdfjfeYHpMeVxWE0EceB6vhWGShs6wi0IYEqMSIzdOF1XjQ/Mkm5d7ZdQ==", "cpu": [ "arm" ], @@ -752,9 +752,9 @@ } }, "node_modules/@esbuild/linux-arm64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.27.7.tgz", - "integrity": "sha512-RZPHBoxXuNnPQO9rvjh5jdkRmVizktkT7TCDkDmQ0W2SwHInKCAV95GRuvdSvA7w4VMwfCjUiPwDi0ZO6Nfe9A==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.23.1.tgz", + "integrity": "sha512-/93bf2yxencYDnItMYV/v116zff6UyTjo4EtEQjUBeGiVpMmffDNUyD9UN2zV+V3LRV3/on4xdZ26NKzn6754g==", "cpu": [ "arm64" ], @@ -768,9 +768,9 @@ } }, "node_modules/@esbuild/linux-ia32": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.27.7.tgz", - "integrity": "sha512-GA48aKNkyQDbd3KtkplYWT102C5sn/EZTY4XROkxONgruHPU72l+gW+FfF8tf2cFjeHaRbWpOYa/uRBz/Xq1Pg==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.23.1.tgz", + "integrity": "sha512-VTN4EuOHwXEkXzX5nTvVY4s7E/Krz7COC8xkftbbKRYAl96vPiUssGkeMELQMOnLOJ8k3BY1+ZY52tttZnHcXQ==", "cpu": [ "ia32" ], @@ -784,9 +784,9 @@ } }, "node_modules/@esbuild/linux-loong64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.27.7.tgz", - "integrity": "sha512-a4POruNM2oWsD4WKvBSEKGIiWQF8fZOAsycHOt6JBpZ+JN2n2JH9WAv56SOyu9X5IqAjqSIPTaJkqN8F7XOQ5Q==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.23.1.tgz", + "integrity": "sha512-Vx09LzEoBa5zDnieH8LSMRToj7ir/Jeq0Gu6qJ/1GcBq9GkfoEAoXvLiW1U9J1qE/Y/Oyaq33w5p2ZWrNNHNEw==", "cpu": [ "loong64" ], @@ -800,9 +800,9 @@ } }, "node_modules/@esbuild/linux-mips64el": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.27.7.tgz", - "integrity": "sha512-KabT5I6StirGfIz0FMgl1I+R1H73Gp0ofL9A3nG3i/cYFJzKHhouBV5VWK1CSgKvVaG4q1RNpCTR2LuTVB3fIw==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.23.1.tgz", + "integrity": "sha512-nrFzzMQ7W4WRLNUOU5dlWAqa6yVeI0P78WKGUo7lg2HShq/yx+UYkeNSE0SSfSure0SqgnsxPvmAUu/vu0E+3Q==", "cpu": [ "mips64el" ], @@ -816,9 +816,9 @@ } }, "node_modules/@esbuild/linux-ppc64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.27.7.tgz", - "integrity": "sha512-gRsL4x6wsGHGRqhtI+ifpN/vpOFTQtnbsupUF5R5YTAg+y/lKelYR1hXbnBdzDjGbMYjVJLJTd2OFmMewAgwlQ==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.23.1.tgz", + "integrity": "sha512-dKN8fgVqd0vUIjxuJI6P/9SSSe/mB9rvA98CSH2sJnlZ/OCZWO1DJvxj8jvKTfYUdGfcq2dDxoKaC6bHuTlgcw==", "cpu": [ "ppc64" ], @@ -832,9 +832,9 @@ } }, "node_modules/@esbuild/linux-riscv64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.27.7.tgz", - "integrity": "sha512-hL25LbxO1QOngGzu2U5xeXtxXcW+/GvMN3ejANqXkxZ/opySAZMrc+9LY/WyjAan41unrR3YrmtTsUpwT66InQ==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.23.1.tgz", + "integrity": "sha512-5AV4Pzp80fhHL83JM6LoA6pTQVWgB1HovMBsLQ9OZWLDqVY8MVobBXNSmAJi//Csh6tcY7e7Lny2Hg1tElMjIA==", "cpu": [ "riscv64" ], @@ -848,9 +848,9 @@ } }, "node_modules/@esbuild/linux-s390x": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.27.7.tgz", - "integrity": "sha512-2k8go8Ycu1Kb46vEelhu1vqEP+UeRVj2zY1pSuPdgvbd5ykAw82Lrro28vXUrRmzEsUV0NzCf54yARIK8r0fdw==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.23.1.tgz", + "integrity": "sha512-9ygs73tuFCe6f6m/Tb+9LtYxWR4c9yg7zjt2cYkjDbDpV/xVn+68cQxMXCjUpYwEkze2RcU/rMnfIXNRFmSoDw==", "cpu": [ "s390x" ], @@ -864,9 +864,9 @@ } }, "node_modules/@esbuild/linux-x64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.27.7.tgz", - "integrity": "sha512-hzznmADPt+OmsYzw1EE33ccA+HPdIqiCRq7cQeL1Jlq2gb1+OyWBkMCrYGBJ+sxVzve2ZJEVeePbLM2iEIZSxA==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.23.1.tgz", + "integrity": "sha512-EV6+ovTsEXCPAp58g2dD68LxoP/wK5pRvgy0J/HxPGB009omFPv3Yet0HiaqvrIrgPTBuC6wCH1LTOY91EO5hQ==", "cpu": [ "x64" ], @@ -879,26 +879,10 @@ "node": ">=18" } }, - "node_modules/@esbuild/netbsd-arm64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.27.7.tgz", - "integrity": "sha512-b6pqtrQdigZBwZxAn1UpazEisvwaIDvdbMbmrly7cDTMFnw/+3lVxxCTGOrkPVnsYIosJJXAsILG9XcQS+Yu6w==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=18" - } - }, "node_modules/@esbuild/netbsd-x64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.27.7.tgz", - "integrity": "sha512-OfatkLojr6U+WN5EDYuoQhtM+1xco+/6FSzJJnuWiUw5eVcicbyK3dq5EeV/QHT1uy6GoDhGbFpprUiHUYggrw==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.23.1.tgz", + "integrity": "sha512-aevEkCNu7KlPRpYLjwmdcuNz6bDFiE7Z8XC4CPqExjTvrHugh28QzUXVOZtiYghciKUacNktqxdpymplil1beA==", "cpu": [ "x64" ], @@ -912,9 +896,9 @@ } }, "node_modules/@esbuild/openbsd-arm64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.27.7.tgz", - "integrity": "sha512-AFuojMQTxAz75Fo8idVcqoQWEHIXFRbOc1TrVcFSgCZtQfSdc1RXgB3tjOn/krRHENUB4j00bfGjyl2mJrU37A==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.23.1.tgz", + "integrity": "sha512-3x37szhLexNA4bXhLrCC/LImN/YtWis6WXr1VESlfVtVeoFJBRINPJ3f0a/6LV8zpikqoUg4hyXw0sFBt5Cr+Q==", "cpu": [ "arm64" ], @@ -928,9 +912,9 @@ } }, "node_modules/@esbuild/openbsd-x64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.27.7.tgz", - "integrity": "sha512-+A1NJmfM8WNDv5CLVQYJ5PshuRm/4cI6WMZRg1by1GwPIQPCTs1GLEUHwiiQGT5zDdyLiRM/l1G0Pv54gvtKIg==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.23.1.tgz", + "integrity": "sha512-aY2gMmKmPhxfU+0EdnN+XNtGbjfQgwZj43k8G3fyrDM/UdZww6xrWxmDkuz2eCZchqVeABjV5BpildOrUbBTqA==", "cpu": [ "x64" ], @@ -943,26 +927,10 @@ "node": ">=18" } }, - "node_modules/@esbuild/openharmony-arm64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.27.7.tgz", - "integrity": "sha512-+KrvYb/C8zA9CU/g0sR6w2RBw7IGc5J2BPnc3dYc5VJxHCSF1yNMxTV5LQ7GuKteQXZtspjFbiuW5/dOj7H4Yw==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "openharmony" - ], - "engines": { - "node": ">=18" - } - }, "node_modules/@esbuild/sunos-x64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.27.7.tgz", - "integrity": "sha512-ikktIhFBzQNt/QDyOL580ti9+5mL/YZeUPKU2ivGtGjdTYoqz6jObj6nOMfhASpS4GU4Q/Clh1QtxWAvcYKamA==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.23.1.tgz", + "integrity": "sha512-RBRT2gqEl0IKQABT4XTj78tpk9v7ehp+mazn2HbUeZl1YMdaGAQqhapjGTCe7uw7y0frDi4gS0uHzhvpFuI1sA==", "cpu": [ "x64" ], @@ -976,9 +944,9 @@ } }, "node_modules/@esbuild/win32-arm64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.27.7.tgz", - "integrity": "sha512-7yRhbHvPqSpRUV7Q20VuDwbjW5kIMwTHpptuUzV+AA46kiPze5Z7qgt6CLCK3pWFrHeNfDd1VKgyP4O+ng17CA==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.23.1.tgz", + "integrity": "sha512-4O+gPR5rEBe2FpKOVyiJ7wNDPA8nGzDuJ6gN4okSA1gEOYZ67N8JPk58tkWtdtPeLz7lBnY6I5L3jdsr3S+A6A==", "cpu": [ "arm64" ], @@ -992,9 +960,9 @@ } }, "node_modules/@esbuild/win32-ia32": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.27.7.tgz", - "integrity": "sha512-SmwKXe6VHIyZYbBLJrhOoCJRB/Z1tckzmgTLfFYOfpMAx63BJEaL9ExI8x7v0oAO3Zh6D/Oi1gVxEYr5oUCFhw==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.23.1.tgz", + "integrity": "sha512-BcaL0Vn6QwCwre3Y717nVHZbAa4UBEigzFm6VdsVdT/MbZ38xoj1X9HPkZhbmaBGUD1W8vxAfffbDe8bA6AKnQ==", "cpu": [ "ia32" ], @@ -1008,9 +976,9 @@ } }, "node_modules/@esbuild/win32-x64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.27.7.tgz", - "integrity": "sha512-56hiAJPhwQ1R4i+21FVF7V8kSD5zZTdHcVuRFMW0hn753vVfQN8xlx4uOPT4xoGH0Z/oVATuR82AiqSTDIpaHg==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.23.1.tgz", + "integrity": "sha512-BHpFFeslkWrXWyUPnbKm+xYYVYruCinGcftSBaa8zoF9hZO4BcSCFUvHVTtzpIY6YzUnYtuEhZ+C9iEXjxnasg==", "cpu": [ "x64" ], @@ -2638,78 +2606,6 @@ "url": "https://opencollective.com/pkgr" } }, - "node_modules/@pm2/agent": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@pm2/agent/-/agent-2.1.1.tgz", - "integrity": "sha512-0V9ckHWd/HSC8BgAbZSoq8KXUG81X97nSkAxmhKDhmF8vanyaoc1YXwc2KVkbWz82Rg4gjd2n9qiT3i7bdvGrQ==", - "license": "AGPL-3.0", - "dependencies": { - "async": "~3.2.0", - "chalk": "~3.0.0", - "dayjs": "~1.8.24", - "debug": "~4.3.1", - "eventemitter2": "~5.0.1", - "fast-json-patch": "^3.1.0", - "fclone": "~1.0.11", - "pm2-axon": "~4.0.1", - "pm2-axon-rpc": "~0.7.0", - "proxy-agent": "~6.4.0", - "semver": "~7.5.0", - "ws": "~7.5.10" - } - }, - "node_modules/@pm2/agent/node_modules/chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@pm2/agent/node_modules/dayjs": { - "version": "1.8.36", - "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.8.36.tgz", - "integrity": "sha512-3VmRXEtw7RZKAf+4Tv1Ym9AGeo8r8+CjDi26x+7SYQil1UqtqdaokhzoEJohqlzt0m5kacJSDhJQkG/LWhpRBw==", - "license": "MIT" - }, - "node_modules/@pm2/agent/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@pm2/agent/node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@pm2/agent/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "license": "ISC" - }, "node_modules/@pm2/blessed": { "version": "0.1.81", "resolved": "https://registry.npmjs.org/@pm2/blessed/-/blessed-0.1.81.tgz", @@ -2722,79 +2618,6 @@ "node": ">= 0.8.0" } }, - "node_modules/@pm2/io": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/@pm2/io/-/io-6.1.0.tgz", - "integrity": "sha512-IxHuYURa3+FQ6BKePlgChZkqABUKFYH6Bwbw7V/pWU1pP6iR1sCI26l7P9ThUEB385ruZn/tZS3CXDUF5IA1NQ==", - "license": "Apache-2", - "dependencies": { - "async": "~2.6.1", - "debug": "~4.3.1", - "eventemitter2": "^6.3.1", - "require-in-the-middle": "^5.0.0", - "semver": "~7.5.4", - "shimmer": "^1.2.0", - "signal-exit": "^3.0.3", - "tslib": "1.9.3" - }, - "engines": { - "node": ">=6.0" - } - }, - "node_modules/@pm2/io/node_modules/async": { - "version": "2.6.4", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", - "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", - "license": "MIT", - "dependencies": { - "lodash": "^4.17.14" - } - }, - "node_modules/@pm2/io/node_modules/eventemitter2": { - "version": "6.4.9", - "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-6.4.9.tgz", - "integrity": "sha512-JEPTiaOt9f04oa6NOkc4aH+nVp5I3wEjpHbIPqfgCdD5v5bUzy7xQqwcVO2aDQgOWhI28da57HksMrzK9HlRxg==", - "license": "MIT" - }, - "node_modules/@pm2/io/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@pm2/io/node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@pm2/io/node_modules/tslib": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.9.3.tgz", - "integrity": "sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ==", - "license": "Apache-2.0" - }, - "node_modules/@pm2/io/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "license": "ISC" - }, "node_modules/@pm2/js-api": { "version": "0.8.0", "resolved": "https://registry.npmjs.org/@pm2/js-api/-/js-api-0.8.0.tgz", @@ -2818,11 +2641,6 @@ "lodash": "^4.17.14" } }, - "node_modules/@pm2/js-api/node_modules/eventemitter2": { - "version": "6.4.9", - "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-6.4.9.tgz", - "integrity": "sha512-JEPTiaOt9f04oa6NOkc4aH+nVp5I3wEjpHbIPqfgCdD5v5bUzy7xQqwcVO2aDQgOWhI28da57HksMrzK9HlRxg==" - }, "node_modules/@pm2/pm2-version-check": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/@pm2/pm2-version-check/-/pm2-version-check-1.0.4.tgz", @@ -3001,9 +2819,6 @@ "cpu": [ "arm64" ], - "libc": [ - "glibc" - ], "license": "Apache-2.0 AND MIT", "optional": true, "os": [ @@ -3020,9 +2835,6 @@ "cpu": [ "arm64" ], - "libc": [ - "musl" - ], "license": "Apache-2.0 AND MIT", "optional": true, "os": [ @@ -3039,9 +2851,6 @@ "cpu": [ "ppc64" ], - "libc": [ - "glibc" - ], "license": "Apache-2.0 AND MIT", "optional": true, "os": [ @@ -3058,9 +2867,6 @@ "cpu": [ "s390x" ], - "libc": [ - "glibc" - ], "license": "Apache-2.0 AND MIT", "optional": true, "os": [ @@ -3077,9 +2883,6 @@ "cpu": [ "x64" ], - "libc": [ - "glibc" - ], "license": "Apache-2.0 AND MIT", "optional": true, "os": [ @@ -3096,9 +2899,6 @@ "cpu": [ "x64" ], - "libc": [ - "musl" - ], "license": "Apache-2.0 AND MIT", "optional": true, "os": [ @@ -4069,14 +3869,6 @@ "string-width": "^4.1.0" } }, - "node_modules/ansi-colors": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", - "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", - "engines": { - "node": ">=6" - } - }, "node_modules/ansi-escapes": { "version": "4.3.2", "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", @@ -4722,11 +4514,6 @@ "integrity": "sha512-PsezH1rqdV9VvyNhxxOW32/d75r01NY7TQCmOqomRo15ZSOKbpTFVsfjghxo6JloQUCGnH4k1LGu0R4yCLlWQQ==", "license": "MIT" }, - "node_modules/charm": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/charm/-/charm-0.1.2.tgz", - "integrity": "sha512-syedaZ9cPe7r3hoQA9twWYKu5AIyCswN5+szkmPBe9ccdLrj4bYaCnLVPTLd2kgVRc7+zoX4tyPgRnFKCj5YjQ==" - }, "node_modules/cheerio": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.2.0.tgz", @@ -5399,17 +5186,6 @@ "node": ">=0.10.0" } }, - "node_modules/enquirer": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", - "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", - "dependencies": { - "ansi-colors": "^4.1.1" - }, - "engines": { - "node": ">=8.6" - } - }, "node_modules/entities": { "version": "4.4.0", "resolved": "https://registry.npmjs.org/entities/-/entities-4.4.0.tgz", @@ -5422,9 +5198,10 @@ } }, "node_modules/epg-grabber": { - "version": "0.46.1", - "resolved": "https://registry.npmjs.org/epg-grabber/-/epg-grabber-0.46.1.tgz", - "integrity": "sha512-yAVcSBzMnPRrLIbFcgSevAC1ccMDh2W0IdndH6N3me9zFIvDm5+I7Q+MkNVWf6mG1x/8A2oFQC17RzKQ/bSDiw==", + "version": "0.46.2", + "resolved": "https://registry.npmjs.org/epg-grabber/-/epg-grabber-0.46.2.tgz", + "integrity": "sha512-pcZD9eo0d5QFqLr/YUXh4SapjrE3MfHvjyIokVpfCVI5wVXkdy3q9SxM8b34hPYPy2caeaCTpZM1yTAeoIOIMw==", + "license": "MIT", "dependencies": { "@freearhey/core": "^0.14.0", "@types/bluebird": "^3.5.42", @@ -5453,7 +5230,7 @@ "epg-grabber": "dist/cli.js" }, "engines": { - "node": ">=22.12.0" + "node": ">=20.20.0" } }, "node_modules/epg-grabber/node_modules/@freearhey/core": { @@ -5561,9 +5338,9 @@ } }, "node_modules/esbuild": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.27.7.tgz", - "integrity": "sha512-IxpibTjyVnmrIQo5aqNpCgoACA/dTKLTlhMHihVHhdkxKyPO1uBBthumT0rdHmcsk9uMonIWS0m4FljWzILh3w==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.23.1.tgz", + "integrity": "sha512-VVNz/9Sa0bs5SELtn3f7qhJCDPCF5oMEl5cO9/SSinpE9hbPVvxbd572HH5AKiP7WD8INO53GgfDDhRjkylHEg==", "hasInstallScript": true, "license": "MIT", "bin": { @@ -5573,32 +5350,30 @@ "node": ">=18" }, "optionalDependencies": { - "@esbuild/aix-ppc64": "0.27.7", - "@esbuild/android-arm": "0.27.7", - "@esbuild/android-arm64": "0.27.7", - "@esbuild/android-x64": "0.27.7", - "@esbuild/darwin-arm64": "0.27.7", - "@esbuild/darwin-x64": "0.27.7", - "@esbuild/freebsd-arm64": "0.27.7", - "@esbuild/freebsd-x64": "0.27.7", - "@esbuild/linux-arm": "0.27.7", - "@esbuild/linux-arm64": "0.27.7", - "@esbuild/linux-ia32": "0.27.7", - "@esbuild/linux-loong64": "0.27.7", - "@esbuild/linux-mips64el": "0.27.7", - "@esbuild/linux-ppc64": "0.27.7", - "@esbuild/linux-riscv64": "0.27.7", - "@esbuild/linux-s390x": "0.27.7", - "@esbuild/linux-x64": "0.27.7", - "@esbuild/netbsd-arm64": "0.27.7", - "@esbuild/netbsd-x64": "0.27.7", - "@esbuild/openbsd-arm64": "0.27.7", - "@esbuild/openbsd-x64": "0.27.7", - "@esbuild/openharmony-arm64": "0.27.7", - "@esbuild/sunos-x64": "0.27.7", - "@esbuild/win32-arm64": "0.27.7", - "@esbuild/win32-ia32": "0.27.7", - "@esbuild/win32-x64": "0.27.7" + "@esbuild/aix-ppc64": "0.23.1", + "@esbuild/android-arm": "0.23.1", + "@esbuild/android-arm64": "0.23.1", + "@esbuild/android-x64": "0.23.1", + "@esbuild/darwin-arm64": "0.23.1", + "@esbuild/darwin-x64": "0.23.1", + "@esbuild/freebsd-arm64": "0.23.1", + "@esbuild/freebsd-x64": "0.23.1", + "@esbuild/linux-arm": "0.23.1", + "@esbuild/linux-arm64": "0.23.1", + "@esbuild/linux-ia32": "0.23.1", + "@esbuild/linux-loong64": "0.23.1", + "@esbuild/linux-mips64el": "0.23.1", + "@esbuild/linux-ppc64": "0.23.1", + "@esbuild/linux-riscv64": "0.23.1", + "@esbuild/linux-s390x": "0.23.1", + "@esbuild/linux-x64": "0.23.1", + "@esbuild/netbsd-x64": "0.23.1", + "@esbuild/openbsd-arm64": "0.23.1", + "@esbuild/openbsd-x64": "0.23.1", + "@esbuild/sunos-x64": "0.23.1", + "@esbuild/win32-arm64": "0.23.1", + "@esbuild/win32-ia32": "0.23.1", + "@esbuild/win32-x64": "0.23.1" } }, "node_modules/escalade": { @@ -5959,9 +5734,9 @@ } }, "node_modules/eventemitter2": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-5.0.1.tgz", - "integrity": "sha512-5EM1GHXycJBS6mauYAbVKT1cVs7POKWb2NXD4Vyt8dDqeZa7LaDK1/sjtL+Zb0lzTpSNil4596Dyu97hz37QLg==", + "version": "6.4.9", + "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-6.4.9.tgz", + "integrity": "sha512-JEPTiaOt9f04oa6NOkc4aH+nVp5I3wEjpHbIPqfgCdD5v5bUzy7xQqwcVO2aDQgOWhI28da57HksMrzK9HlRxg==", "license": "MIT" }, "node_modules/execa": { @@ -6112,12 +5887,6 @@ "bser": "2.1.1" } }, - "node_modules/fclone": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/fclone/-/fclone-1.0.11.tgz", - "integrity": "sha512-GDqVQezKzRABdeqflsgMr7ktzgF9CyS+p2oe0jJqUY6izSSbhPIQJDpoU4PtGcD7VPM9xh/dVrTu6z1nwgmEGw==", - "license": "MIT" - }, "node_modules/fecha": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/fecha/-/fecha-4.2.3.tgz", @@ -6340,9 +6109,9 @@ } }, "node_modules/get-uri": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/get-uri/-/get-uri-6.0.4.tgz", - "integrity": "sha512-E1b1lFFLvLgak2whF2xDBcOy6NLVGZBqqjJjsIhvopKfWWEi64pLVTWWehV8KlLerZkfNTA95sTe2OdJKm1OzQ==", + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/get-uri/-/get-uri-6.0.5.tgz", + "integrity": "sha512-b1O07XYq8eRuVzBNgJLstU6FYc1tS6wnMtF1I1D9lE8LxZSOGZ7LhxN54yPP6mGw5f2CkXY2BQUL9Fx41qvcIg==", "license": "MIT", "dependencies": { "basic-ftp": "^5.0.2", @@ -6710,21 +6479,6 @@ "node": ">=4" } }, - "node_modules/is-core-module": { - "version": "2.16.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", - "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", - "license": "MIT", - "dependencies": { - "hasown": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/is-docker": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", @@ -8630,33 +8384,11 @@ "node": ">=16 || 14 >=14.17" } }, - "node_modules/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "bin": { - "mkdirp": "bin/cmd.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/module-details-from-path": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/module-details-from-path/-/module-details-from-path-1.0.4.tgz", - "integrity": "sha512-EGWKgxALGMgzvxYF1UyGTy0HXX/2vHLkw6+NvDKW2jypWbHpjQuj4UMcqQWXHERJhVGKikolT06G3bcKe4fi7w==", - "license": "MIT" - }, "node_modules/ms": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" }, - "node_modules/mute-stream": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", - "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==" - }, "node_modules/napi-postinstall": { "version": "0.3.4", "resolved": "https://registry.npmjs.org/napi-postinstall/-/napi-postinstall-0.3.4.tgz", @@ -8686,42 +8418,6 @@ "node": ">=18" } }, - "node_modules/needle": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/needle/-/needle-2.4.0.tgz", - "integrity": "sha512-4Hnwzr3mi5L97hMYeNl8wRW/Onhy4nUKR/lVemJ8gJedxxUyBLm9kkrDColJvoSfwi0jCNhD+xCdOtiGDQiRZg==", - "dependencies": { - "debug": "^3.2.6", - "iconv-lite": "^0.4.4", - "sax": "^1.2.4" - }, - "bin": { - "needle": "bin/needle" - }, - "engines": { - "node": ">= 4.4.x" - } - }, - "node_modules/needle/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/needle/node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "license": "MIT", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/negotiator": { "version": "0.6.4", "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.4.tgz", @@ -8731,9 +8427,9 @@ } }, "node_modules/netmask": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/netmask/-/netmask-2.0.2.tgz", - "integrity": "sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/netmask/-/netmask-2.1.1.tgz", + "integrity": "sha512-eonl3sLUha+S1GzTPxychyhnUzKyeQkZ7jLjKrBagJgPla13F+uQ71HgpFefyHgqrjEbCPkDArxYsjY8/+gLKA==", "license": "MIT", "engines": { "node": ">= 0.4.0" @@ -9048,12 +8744,6 @@ "node": ">=8" } }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "license": "MIT" - }, "node_modules/path-scurry": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.2.tgz", @@ -9104,14 +8794,15 @@ } }, "node_modules/pidusage": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/pidusage/-/pidusage-3.0.2.tgz", - "integrity": "sha512-g0VU+y08pKw5M8EZ2rIGiEBaB8wrQMjYGFfW2QVIfyT8V+fq8YFLkvlz4bz5ljvFDJYNFCWT3PWqcRr2FKO81w==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pidusage/-/pidusage-4.0.1.tgz", + "integrity": "sha512-yCH2dtLHfEBnzlHUJymR/Z1nN2ePG3m392Mv8TFlTP1B0xkpMQNHAnfkY0n2tAi6ceKO6YWhxYfZ96V4vVkh/g==", + "license": "MIT", "dependencies": { "safe-buffer": "^5.2.1" }, "engines": { - "node": ">=10" + "node": ">=18" } }, "node_modules/pirates": { @@ -9136,16 +8827,16 @@ } }, "node_modules/pm2": { - "version": "6.0.14", - "resolved": "https://registry.npmjs.org/pm2/-/pm2-6.0.14.tgz", - "integrity": "sha512-wX1FiFkzuT2H/UUEA8QNXDAA9MMHDsK/3UHj6Dkd5U7kxyigKDA5gyDw78ycTQZAuGCLWyUX5FiXEuVQWafukA==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/pm2/-/pm2-7.0.0.tgz", + "integrity": "sha512-/VpW9f7jpy6o7k2CjWhsdCSS0YGYSSWZYz8gt2zJYg+PGOcbt50L7oZgiUqJDpJLyhIL+LnvgtRw4HXdg5pQCg==", "license": "AGPL-3.0", "dependencies": { - "@pm2/agent": "~2.1.1", "@pm2/blessed": "0.1.81", - "@pm2/io": "~6.1.0", - "@pm2/js-api": "~0.8.0", - "@pm2/pm2-version-check": "^1.0.4", + "@pm2/js-api": "0.8.0", + "@pm2/pm2-version-check": "1.0.4", + "amp": "0.3.1", + "amp-message": "0.1.2", "ansis": "4.0.0-node10", "async": "3.2.6", "chokidar": "3.6.0", @@ -9154,22 +8845,15 @@ "croner": "4.1.97", "dayjs": "1.11.15", "debug": "4.4.3", - "enquirer": "2.3.6", - "eventemitter2": "5.0.1", - "fclone": "1.0.11", + "eventemitter2": "6.4.9", + "fast-json-patch": "3.1.1", "js-yaml": "4.1.1", - "mkdirp": "1.0.4", - "needle": "2.4.0", - "pidusage": "3.0.2", - "pm2-axon": "~4.0.1", - "pm2-axon-rpc": "~0.7.1", - "pm2-deploy": "~1.0.2", - "pm2-multimeter": "^0.1.2", - "promptly": "2.2.0", + "pidusage": "4.0.1", + "pm2-deploy": "1.0.2", + "proxy-agent": "6.5.0", "semver": "7.7.2", - "source-map-support": "0.5.21", - "sprintf-js": "1.1.2", - "vizion": "~2.2.1" + "vizion": "2.2.1", + "ws": "8.20.0" }, "bin": { "pm2": "bin/pm2", @@ -9178,51 +8862,12 @@ "pm2-runtime": "bin/pm2-runtime" }, "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" }, "optionalDependencies": { "pm2-sysmonit": "^1.2.8" } }, - "node_modules/pm2-axon": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pm2-axon/-/pm2-axon-4.0.1.tgz", - "integrity": "sha512-kES/PeSLS8orT8dR5jMlNl+Yu4Ty3nbvZRmaAtROuVm9nYYGiaoXqqKQqQYzWQzMYWUKHMQTvBlirjE5GIIxqg==", - "license": "MIT", - "dependencies": { - "amp": "~0.3.1", - "amp-message": "~0.1.1", - "debug": "^4.3.1", - "escape-string-regexp": "^4.0.0" - }, - "engines": { - "node": ">=5" - } - }, - "node_modules/pm2-axon-rpc": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/pm2-axon-rpc/-/pm2-axon-rpc-0.7.1.tgz", - "integrity": "sha512-FbLvW60w+vEyvMjP/xom2UPhUN/2bVpdtLfKJeYM3gwzYhoTEEChCOICfFzxkxuoEleOlnpjie+n1nue91bDQw==", - "license": "MIT", - "dependencies": { - "debug": "^4.3.1" - }, - "engines": { - "node": ">=5" - } - }, - "node_modules/pm2-axon/node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/pm2-deploy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/pm2-deploy/-/pm2-deploy-1.0.2.tgz", @@ -9235,14 +8880,6 @@ "node": ">=4.0.0" } }, - "node_modules/pm2-multimeter": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/pm2-multimeter/-/pm2-multimeter-0.1.2.tgz", - "integrity": "sha512-S+wT6XfyKfd7SJIBqRgOctGxaBzUOmVQzTAS+cg04TsEUObJVreha7lvCfX8zzGVr871XwCSnHUU7DQQ5xEsfA==", - "dependencies": { - "charm": "~0.1.1" - } - }, "node_modules/pm2-sysmonit": { "version": "1.2.8", "resolved": "https://registry.npmjs.org/pm2-sysmonit/-/pm2-sysmonit-1.2.8.tgz", @@ -9296,20 +8933,27 @@ } } }, - "node_modules/pm2/node_modules/source-map-support": { - "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" + "node_modules/pm2/node_modules/ws": { + "version": "8.20.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.20.0.tgz", + "integrity": "sha512-sAt8BhgNbzCtgGbt2OxmpuryO63ZoDk/sqaB/znQm94T4fCEsy/yV+7CdC1kJhOU9lboAEU7R3kquuycDoibVA==", + "license": "MIT", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } } }, - "node_modules/pm2/node_modules/sprintf-js": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.2.tgz", - "integrity": "sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug==" - }, "node_modules/prelude-ls": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", @@ -9355,28 +8999,20 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/promptly": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/promptly/-/promptly-2.2.0.tgz", - "integrity": "sha512-aC9j+BZsRSSzEsXBNBwDnAxujdx19HycZoKgRgzWnS8eOHg1asuf9heuLprfbe739zY3IdUQx+Egv6Jn135WHA==", - "dependencies": { - "read": "^1.0.4" - } - }, "node_modules/proxy-agent": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/proxy-agent/-/proxy-agent-6.4.0.tgz", - "integrity": "sha512-u0piLU+nCOHMgGjRbimiXmA9kM/L9EHh3zL81xCdp7m+Y2pHIsnmbdDoEDoAz5geaonNR6q6+yOPQs6n4T6sBQ==", + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/proxy-agent/-/proxy-agent-6.5.0.tgz", + "integrity": "sha512-TmatMXdr2KlRiA2CyDu8GqR8EjahTG3aY3nXjdzFyoZbmB8hrBsTyMezhULIXKnC0jpfjlmiZ3+EaCzoInSu/A==", "license": "MIT", "dependencies": { - "agent-base": "^7.0.2", + "agent-base": "^7.1.2", "debug": "^4.3.4", "http-proxy-agent": "^7.0.1", - "https-proxy-agent": "^7.0.3", + "https-proxy-agent": "^7.0.6", "lru-cache": "^7.14.1", - "pac-proxy-agent": "^7.0.1", + "pac-proxy-agent": "^7.1.0", "proxy-from-env": "^1.1.0", - "socks-proxy-agent": "^8.0.2" + "socks-proxy-agent": "^8.0.5" }, "engines": { "node": ">= 14" @@ -9408,7 +9044,8 @@ "node_modules/proxy-from-env": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", - "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", + "license": "MIT" }, "node_modules/punycode": { "version": "2.3.1", @@ -9472,17 +9109,6 @@ "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", "license": "MIT" }, - "node_modules/read": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/read/-/read-1.0.7.tgz", - "integrity": "sha512-rSOKNYUmaxy0om1BNjMN4ezNT6VKK+2xF4GBhc81mkH7L60i6dp8qPYrkndNLT3QPphoII3maL9PVC9XmhHwVQ==", - "dependencies": { - "mute-stream": "~0.0.4" - }, - "engines": { - "node": ">=0.8" - } - }, "node_modules/readable-stream": { "version": "3.6.2", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", @@ -9545,40 +9171,6 @@ "node": ">=0.10.0" } }, - "node_modules/require-in-the-middle": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/require-in-the-middle/-/require-in-the-middle-5.2.0.tgz", - "integrity": "sha512-efCx3b+0Z69/LGJmm9Yvi4cqEdxnoGnxYxGxBghkkTTFeXRtTCmmhO0AnAfHz59k957uTSuy8WaHqOs8wbYUWg==", - "license": "MIT", - "dependencies": { - "debug": "^4.1.1", - "module-details-from-path": "^1.0.3", - "resolve": "^1.22.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/resolve": { - "version": "1.22.10", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz", - "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==", - "license": "MIT", - "dependencies": { - "is-core-module": "^2.16.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/resolve-cwd": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", @@ -9793,12 +9385,6 @@ "node": ">=8" } }, - "node_modules/shimmer": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/shimmer/-/shimmer-1.2.1.tgz", - "integrity": "sha512-sQTKC1Re/rM6XyFM6fIAGHRPVGvyXfgzIDvzoq608vM+jeyVD0Tu1E6Np0Kc2zAIFWIj963V2800iF/9LPieQw==", - "license": "BSD-2-Clause" - }, "node_modules/signal-exit": { "version": "3.0.7", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", @@ -9995,18 +9581,6 @@ "node": ">=8" } }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/synckit": { "version": "0.11.12", "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.11.12.tgz", @@ -11122,159 +10696,147 @@ "integrity": "sha512-lrTPqgvfFQtR/eY/qkIzp98OGdNJu0m5ji3q/nJI8v3SXkRKEnWiOxMmbvcSoAIzv/cGiuvRy57k4suKQSAdwA==" }, "@esbuild/aix-ppc64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.27.7.tgz", - "integrity": "sha512-EKX3Qwmhz1eMdEJokhALr0YiD0lhQNwDqkPYyPhiSwKrh7/4KRjQc04sZ8db+5DVVnZ1LmbNDI1uAMPEUBnQPg==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.23.1.tgz", + "integrity": "sha512-6VhYk1diRqrhBAqpJEdjASR/+WVRtfjpqKuNw11cLiaWpAT/Uu+nokB+UJnevzy/P9C/ty6AOe0dwueMrGh/iQ==", "optional": true }, "@esbuild/android-arm": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.27.7.tgz", - "integrity": "sha512-jbPXvB4Yj2yBV7HUfE2KHe4GJX51QplCN1pGbYjvsyCZbQmies29EoJbkEc+vYuU5o45AfQn37vZlyXy4YJ8RQ==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.23.1.tgz", + "integrity": "sha512-uz6/tEy2IFm9RYOyvKl88zdzZfwEfKZmnX9Cj1BHjeSGNuGLuMD1kR8y5bteYmwqKm1tj8m4cb/aKEorr6fHWQ==", "optional": true }, "@esbuild/android-arm64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.27.7.tgz", - "integrity": "sha512-62dPZHpIXzvChfvfLJow3q5dDtiNMkwiRzPylSCfriLvZeq0a1bWChrGx/BbUbPwOrsWKMn8idSllklzBy+dgQ==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.23.1.tgz", + "integrity": "sha512-xw50ipykXcLstLeWH7WRdQuysJqejuAGPd30vd1i5zSyKK3WE+ijzHmLKxdiCMtH1pHz78rOg0BKSYOSB/2Khw==", "optional": true }, "@esbuild/android-x64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.27.7.tgz", - "integrity": "sha512-x5VpMODneVDb70PYV2VQOmIUUiBtY3D3mPBG8NxVk5CogneYhkR7MmM3yR/uMdITLrC1ml/NV1rj4bMJuy9MCg==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.23.1.tgz", + "integrity": "sha512-nlN9B69St9BwUoB+jkyU090bru8L0NA3yFvAd7k8dNsVH8bi9a8cUAUSEcEEgTp2z3dbEDGJGfP6VUnkQnlReg==", "optional": true }, "@esbuild/darwin-arm64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.27.7.tgz", - "integrity": "sha512-5lckdqeuBPlKUwvoCXIgI2D9/ABmPq3Rdp7IfL70393YgaASt7tbju3Ac+ePVi3KDH6N2RqePfHnXkaDtY9fkw==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.23.1.tgz", + "integrity": "sha512-YsS2e3Wtgnw7Wq53XXBLcV6JhRsEq8hkfg91ESVadIrzr9wO6jJDMZnCQbHm1Guc5t/CdDiFSSfWP58FNuvT3Q==", "optional": true }, "@esbuild/darwin-x64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.27.7.tgz", - "integrity": "sha512-rYnXrKcXuT7Z+WL5K980jVFdvVKhCHhUwid+dDYQpH+qu+TefcomiMAJpIiC2EM3Rjtq0sO3StMV/+3w3MyyqQ==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.23.1.tgz", + "integrity": "sha512-aClqdgTDVPSEGgoCS8QDG37Gu8yc9lTHNAQlsztQ6ENetKEO//b8y31MMu2ZaPbn4kVsIABzVLXYLhCGekGDqw==", "optional": true }, "@esbuild/freebsd-arm64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.27.7.tgz", - "integrity": "sha512-B48PqeCsEgOtzME2GbNM2roU29AMTuOIN91dsMO30t+Ydis3z/3Ngoj5hhnsOSSwNzS+6JppqWsuhTp6E82l2w==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.23.1.tgz", + "integrity": "sha512-h1k6yS8/pN/NHlMl5+v4XPfikhJulk4G+tKGFIOwURBSFzE8bixw1ebjluLOjfwtLqY0kewfjLSrO6tN2MgIhA==", "optional": true }, "@esbuild/freebsd-x64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.27.7.tgz", - "integrity": "sha512-jOBDK5XEjA4m5IJK3bpAQF9/Lelu/Z9ZcdhTRLf4cajlB+8VEhFFRjWgfy3M1O4rO2GQ/b2dLwCUGpiF/eATNQ==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.23.1.tgz", + "integrity": "sha512-lK1eJeyk1ZX8UklqFd/3A60UuZ/6UVfGT2LuGo3Wp4/z7eRTRYY+0xOu2kpClP+vMTi9wKOfXi2vjUpO1Ro76g==", "optional": true }, "@esbuild/linux-arm": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.27.7.tgz", - "integrity": "sha512-RkT/YXYBTSULo3+af8Ib0ykH8u2MBh57o7q/DAs3lTJlyVQkgQvlrPTnjIzzRPQyavxtPtfg0EopvDyIt0j1rA==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.23.1.tgz", + "integrity": "sha512-CXXkzgn+dXAPs3WBwE+Kvnrf4WECwBdfjfeYHpMeVxWE0EceB6vhWGShs6wi0IYEqMSIzdOF1XjQ/Mkm5d7ZdQ==", "optional": true }, "@esbuild/linux-arm64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.27.7.tgz", - "integrity": "sha512-RZPHBoxXuNnPQO9rvjh5jdkRmVizktkT7TCDkDmQ0W2SwHInKCAV95GRuvdSvA7w4VMwfCjUiPwDi0ZO6Nfe9A==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.23.1.tgz", + "integrity": "sha512-/93bf2yxencYDnItMYV/v116zff6UyTjo4EtEQjUBeGiVpMmffDNUyD9UN2zV+V3LRV3/on4xdZ26NKzn6754g==", "optional": true }, "@esbuild/linux-ia32": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.27.7.tgz", - "integrity": "sha512-GA48aKNkyQDbd3KtkplYWT102C5sn/EZTY4XROkxONgruHPU72l+gW+FfF8tf2cFjeHaRbWpOYa/uRBz/Xq1Pg==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.23.1.tgz", + "integrity": "sha512-VTN4EuOHwXEkXzX5nTvVY4s7E/Krz7COC8xkftbbKRYAl96vPiUssGkeMELQMOnLOJ8k3BY1+ZY52tttZnHcXQ==", "optional": true }, "@esbuild/linux-loong64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.27.7.tgz", - "integrity": "sha512-a4POruNM2oWsD4WKvBSEKGIiWQF8fZOAsycHOt6JBpZ+JN2n2JH9WAv56SOyu9X5IqAjqSIPTaJkqN8F7XOQ5Q==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.23.1.tgz", + "integrity": "sha512-Vx09LzEoBa5zDnieH8LSMRToj7ir/Jeq0Gu6qJ/1GcBq9GkfoEAoXvLiW1U9J1qE/Y/Oyaq33w5p2ZWrNNHNEw==", "optional": true }, "@esbuild/linux-mips64el": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.27.7.tgz", - "integrity": "sha512-KabT5I6StirGfIz0FMgl1I+R1H73Gp0ofL9A3nG3i/cYFJzKHhouBV5VWK1CSgKvVaG4q1RNpCTR2LuTVB3fIw==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.23.1.tgz", + "integrity": "sha512-nrFzzMQ7W4WRLNUOU5dlWAqa6yVeI0P78WKGUo7lg2HShq/yx+UYkeNSE0SSfSure0SqgnsxPvmAUu/vu0E+3Q==", "optional": true }, "@esbuild/linux-ppc64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.27.7.tgz", - "integrity": "sha512-gRsL4x6wsGHGRqhtI+ifpN/vpOFTQtnbsupUF5R5YTAg+y/lKelYR1hXbnBdzDjGbMYjVJLJTd2OFmMewAgwlQ==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.23.1.tgz", + "integrity": "sha512-dKN8fgVqd0vUIjxuJI6P/9SSSe/mB9rvA98CSH2sJnlZ/OCZWO1DJvxj8jvKTfYUdGfcq2dDxoKaC6bHuTlgcw==", "optional": true }, "@esbuild/linux-riscv64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.27.7.tgz", - "integrity": "sha512-hL25LbxO1QOngGzu2U5xeXtxXcW+/GvMN3ejANqXkxZ/opySAZMrc+9LY/WyjAan41unrR3YrmtTsUpwT66InQ==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.23.1.tgz", + "integrity": "sha512-5AV4Pzp80fhHL83JM6LoA6pTQVWgB1HovMBsLQ9OZWLDqVY8MVobBXNSmAJi//Csh6tcY7e7Lny2Hg1tElMjIA==", "optional": true }, "@esbuild/linux-s390x": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.27.7.tgz", - "integrity": "sha512-2k8go8Ycu1Kb46vEelhu1vqEP+UeRVj2zY1pSuPdgvbd5ykAw82Lrro28vXUrRmzEsUV0NzCf54yARIK8r0fdw==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.23.1.tgz", + "integrity": "sha512-9ygs73tuFCe6f6m/Tb+9LtYxWR4c9yg7zjt2cYkjDbDpV/xVn+68cQxMXCjUpYwEkze2RcU/rMnfIXNRFmSoDw==", "optional": true }, "@esbuild/linux-x64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.27.7.tgz", - "integrity": "sha512-hzznmADPt+OmsYzw1EE33ccA+HPdIqiCRq7cQeL1Jlq2gb1+OyWBkMCrYGBJ+sxVzve2ZJEVeePbLM2iEIZSxA==", - "optional": true - }, - "@esbuild/netbsd-arm64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.27.7.tgz", - "integrity": "sha512-b6pqtrQdigZBwZxAn1UpazEisvwaIDvdbMbmrly7cDTMFnw/+3lVxxCTGOrkPVnsYIosJJXAsILG9XcQS+Yu6w==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.23.1.tgz", + "integrity": "sha512-EV6+ovTsEXCPAp58g2dD68LxoP/wK5pRvgy0J/HxPGB009omFPv3Yet0HiaqvrIrgPTBuC6wCH1LTOY91EO5hQ==", "optional": true }, "@esbuild/netbsd-x64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.27.7.tgz", - "integrity": "sha512-OfatkLojr6U+WN5EDYuoQhtM+1xco+/6FSzJJnuWiUw5eVcicbyK3dq5EeV/QHT1uy6GoDhGbFpprUiHUYggrw==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.23.1.tgz", + "integrity": "sha512-aevEkCNu7KlPRpYLjwmdcuNz6bDFiE7Z8XC4CPqExjTvrHugh28QzUXVOZtiYghciKUacNktqxdpymplil1beA==", "optional": true }, "@esbuild/openbsd-arm64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.27.7.tgz", - "integrity": "sha512-AFuojMQTxAz75Fo8idVcqoQWEHIXFRbOc1TrVcFSgCZtQfSdc1RXgB3tjOn/krRHENUB4j00bfGjyl2mJrU37A==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.23.1.tgz", + "integrity": "sha512-3x37szhLexNA4bXhLrCC/LImN/YtWis6WXr1VESlfVtVeoFJBRINPJ3f0a/6LV8zpikqoUg4hyXw0sFBt5Cr+Q==", "optional": true }, "@esbuild/openbsd-x64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.27.7.tgz", - "integrity": "sha512-+A1NJmfM8WNDv5CLVQYJ5PshuRm/4cI6WMZRg1by1GwPIQPCTs1GLEUHwiiQGT5zDdyLiRM/l1G0Pv54gvtKIg==", - "optional": true - }, - "@esbuild/openharmony-arm64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.27.7.tgz", - "integrity": "sha512-+KrvYb/C8zA9CU/g0sR6w2RBw7IGc5J2BPnc3dYc5VJxHCSF1yNMxTV5LQ7GuKteQXZtspjFbiuW5/dOj7H4Yw==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.23.1.tgz", + "integrity": "sha512-aY2gMmKmPhxfU+0EdnN+XNtGbjfQgwZj43k8G3fyrDM/UdZww6xrWxmDkuz2eCZchqVeABjV5BpildOrUbBTqA==", "optional": true }, "@esbuild/sunos-x64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.27.7.tgz", - "integrity": "sha512-ikktIhFBzQNt/QDyOL580ti9+5mL/YZeUPKU2ivGtGjdTYoqz6jObj6nOMfhASpS4GU4Q/Clh1QtxWAvcYKamA==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.23.1.tgz", + "integrity": "sha512-RBRT2gqEl0IKQABT4XTj78tpk9v7ehp+mazn2HbUeZl1YMdaGAQqhapjGTCe7uw7y0frDi4gS0uHzhvpFuI1sA==", "optional": true }, "@esbuild/win32-arm64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.27.7.tgz", - "integrity": "sha512-7yRhbHvPqSpRUV7Q20VuDwbjW5kIMwTHpptuUzV+AA46kiPze5Z7qgt6CLCK3pWFrHeNfDd1VKgyP4O+ng17CA==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.23.1.tgz", + "integrity": "sha512-4O+gPR5rEBe2FpKOVyiJ7wNDPA8nGzDuJ6gN4okSA1gEOYZ67N8JPk58tkWtdtPeLz7lBnY6I5L3jdsr3S+A6A==", "optional": true }, "@esbuild/win32-ia32": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.27.7.tgz", - "integrity": "sha512-SmwKXe6VHIyZYbBLJrhOoCJRB/Z1tckzmgTLfFYOfpMAx63BJEaL9ExI8x7v0oAO3Zh6D/Oi1gVxEYr5oUCFhw==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.23.1.tgz", + "integrity": "sha512-BcaL0Vn6QwCwre3Y717nVHZbAa4UBEigzFm6VdsVdT/MbZ38xoj1X9HPkZhbmaBGUD1W8vxAfffbDe8bA6AKnQ==", "optional": true }, "@esbuild/win32-x64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.27.7.tgz", - "integrity": "sha512-56hiAJPhwQ1R4i+21FVF7V8kSD5zZTdHcVuRFMW0hn753vVfQN8xlx4uOPT4xoGH0Z/oVATuR82AiqSTDIpaHg==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.23.1.tgz", + "integrity": "sha512-BHpFFeslkWrXWyUPnbKm+xYYVYruCinGcftSBaa8zoF9hZO4BcSCFUvHVTtzpIY6YzUnYtuEhZ+C9iEXjxnasg==", "optional": true }, "@eslint-community/eslint-utils": { @@ -12338,123 +11900,11 @@ "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.2.9.tgz", "integrity": "sha512-QNqXyfVS2wm9hweSYD2O7F0G06uurj9kZ96TRQE5Y9hU7+tgdZwIkbAKc5Ocy1HxEY2kuDQa6cQ1WRs/O5LFKA==" }, - "@pm2/agent": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@pm2/agent/-/agent-2.1.1.tgz", - "integrity": "sha512-0V9ckHWd/HSC8BgAbZSoq8KXUG81X97nSkAxmhKDhmF8vanyaoc1YXwc2KVkbWz82Rg4gjd2n9qiT3i7bdvGrQ==", - "requires": { - "async": "~3.2.0", - "chalk": "~3.0.0", - "dayjs": "~1.8.24", - "debug": "~4.3.1", - "eventemitter2": "~5.0.1", - "fast-json-patch": "^3.1.0", - "fclone": "~1.0.11", - "pm2-axon": "~4.0.1", - "pm2-axon-rpc": "~0.7.0", - "proxy-agent": "~6.4.0", - "semver": "~7.5.0", - "ws": "~7.5.10" - }, - "dependencies": { - "chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "dayjs": { - "version": "1.8.36", - "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.8.36.tgz", - "integrity": "sha512-3VmRXEtw7RZKAf+4Tv1Ym9AGeo8r8+CjDi26x+7SYQil1UqtqdaokhzoEJohqlzt0m5kacJSDhJQkG/LWhpRBw==" - }, - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "requires": { - "yallist": "^4.0.0" - } - }, - "semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "requires": { - "lru-cache": "^6.0.0" - } - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - } - } - }, "@pm2/blessed": { "version": "0.1.81", "resolved": "https://registry.npmjs.org/@pm2/blessed/-/blessed-0.1.81.tgz", "integrity": "sha512-ZcNHqQjMuNRcQ7Z1zJbFIQZO/BDKV3KbiTckWdfbUaYhj7uNmUwb+FbdDWSCkvxNr9dBJQwvV17o6QBkAvgO0g==" }, - "@pm2/io": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/@pm2/io/-/io-6.1.0.tgz", - "integrity": "sha512-IxHuYURa3+FQ6BKePlgChZkqABUKFYH6Bwbw7V/pWU1pP6iR1sCI26l7P9ThUEB385ruZn/tZS3CXDUF5IA1NQ==", - "requires": { - "async": "~2.6.1", - "debug": "~4.3.1", - "eventemitter2": "^6.3.1", - "require-in-the-middle": "^5.0.0", - "semver": "~7.5.4", - "shimmer": "^1.2.0", - "signal-exit": "^3.0.3", - "tslib": "1.9.3" - }, - "dependencies": { - "async": { - "version": "2.6.4", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", - "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", - "requires": { - "lodash": "^4.17.14" - } - }, - "eventemitter2": { - "version": "6.4.9", - "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-6.4.9.tgz", - "integrity": "sha512-JEPTiaOt9f04oa6NOkc4aH+nVp5I3wEjpHbIPqfgCdD5v5bUzy7xQqwcVO2aDQgOWhI28da57HksMrzK9HlRxg==" - }, - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "requires": { - "yallist": "^4.0.0" - } - }, - "semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "requires": { - "lru-cache": "^6.0.0" - } - }, - "tslib": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.9.3.tgz", - "integrity": "sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ==" - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - } - } - }, "@pm2/js-api": { "version": "0.8.0", "resolved": "https://registry.npmjs.org/@pm2/js-api/-/js-api-0.8.0.tgz", @@ -12474,11 +11924,6 @@ "requires": { "lodash": "^4.17.14" } - }, - "eventemitter2": { - "version": "6.4.9", - "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-6.4.9.tgz", - "integrity": "sha512-JEPTiaOt9f04oa6NOkc4aH+nVp5I3wEjpHbIPqfgCdD5v5bUzy7xQqwcVO2aDQgOWhI28da57HksMrzK9HlRxg==" } } }, @@ -13209,11 +12654,6 @@ "string-width": "^4.1.0" } }, - "ansi-colors": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", - "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==" - }, "ansi-escapes": { "version": "4.3.2", "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", @@ -13621,11 +13061,6 @@ "resolved": "https://registry.npmjs.org/chardet/-/chardet-2.1.1.tgz", "integrity": "sha512-PsezH1rqdV9VvyNhxxOW32/d75r01NY7TQCmOqomRo15ZSOKbpTFVsfjghxo6JloQUCGnH4k1LGu0R4yCLlWQQ==" }, - "charm": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/charm/-/charm-0.1.2.tgz", - "integrity": "sha512-syedaZ9cPe7r3hoQA9twWYKu5AIyCswN5+szkmPBe9ccdLrj4bYaCnLVPTLd2kgVRc7+zoX4tyPgRnFKCj5YjQ==" - }, "cheerio": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.2.0.tgz", @@ -14101,23 +13536,15 @@ } } }, - "enquirer": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", - "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", - "requires": { - "ansi-colors": "^4.1.1" - } - }, "entities": { "version": "4.4.0", "resolved": "https://registry.npmjs.org/entities/-/entities-4.4.0.tgz", "integrity": "sha512-oYp7156SP8LkeGD0GF85ad1X9Ai79WtRsZ2gxJqtBuzH+98YUV6jkHEKlZkMbcrjJjIVJNIDP/3WL9wQkoPbWA==" }, "epg-grabber": { - "version": "0.46.1", - "resolved": "https://registry.npmjs.org/epg-grabber/-/epg-grabber-0.46.1.tgz", - "integrity": "sha512-yAVcSBzMnPRrLIbFcgSevAC1ccMDh2W0IdndH6N3me9zFIvDm5+I7Q+MkNVWf6mG1x/8A2oFQC17RzKQ/bSDiw==", + "version": "0.46.2", + "resolved": "https://registry.npmjs.org/epg-grabber/-/epg-grabber-0.46.2.tgz", + "integrity": "sha512-pcZD9eo0d5QFqLr/YUXh4SapjrE3MfHvjyIokVpfCVI5wVXkdy3q9SxM8b34hPYPy2caeaCTpZM1yTAeoIOIMw==", "requires": { "@freearhey/core": "^0.14.0", "@types/bluebird": "^3.5.42", @@ -14229,36 +13656,34 @@ } }, "esbuild": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.27.7.tgz", - "integrity": "sha512-IxpibTjyVnmrIQo5aqNpCgoACA/dTKLTlhMHihVHhdkxKyPO1uBBthumT0rdHmcsk9uMonIWS0m4FljWzILh3w==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.23.1.tgz", + "integrity": "sha512-VVNz/9Sa0bs5SELtn3f7qhJCDPCF5oMEl5cO9/SSinpE9hbPVvxbd572HH5AKiP7WD8INO53GgfDDhRjkylHEg==", "requires": { - "@esbuild/aix-ppc64": "0.27.7", - "@esbuild/android-arm": "0.27.7", - "@esbuild/android-arm64": "0.27.7", - "@esbuild/android-x64": "0.27.7", - "@esbuild/darwin-arm64": "0.27.7", - "@esbuild/darwin-x64": "0.27.7", - "@esbuild/freebsd-arm64": "0.27.7", - "@esbuild/freebsd-x64": "0.27.7", - "@esbuild/linux-arm": "0.27.7", - "@esbuild/linux-arm64": "0.27.7", - "@esbuild/linux-ia32": "0.27.7", - "@esbuild/linux-loong64": "0.27.7", - "@esbuild/linux-mips64el": "0.27.7", - "@esbuild/linux-ppc64": "0.27.7", - "@esbuild/linux-riscv64": "0.27.7", - "@esbuild/linux-s390x": "0.27.7", - "@esbuild/linux-x64": "0.27.7", - "@esbuild/netbsd-arm64": "0.27.7", - "@esbuild/netbsd-x64": "0.27.7", - "@esbuild/openbsd-arm64": "0.27.7", - "@esbuild/openbsd-x64": "0.27.7", - "@esbuild/openharmony-arm64": "0.27.7", - "@esbuild/sunos-x64": "0.27.7", - "@esbuild/win32-arm64": "0.27.7", - "@esbuild/win32-ia32": "0.27.7", - "@esbuild/win32-x64": "0.27.7" + "@esbuild/aix-ppc64": "0.23.1", + "@esbuild/android-arm": "0.23.1", + "@esbuild/android-arm64": "0.23.1", + "@esbuild/android-x64": "0.23.1", + "@esbuild/darwin-arm64": "0.23.1", + "@esbuild/darwin-x64": "0.23.1", + "@esbuild/freebsd-arm64": "0.23.1", + "@esbuild/freebsd-x64": "0.23.1", + "@esbuild/linux-arm": "0.23.1", + "@esbuild/linux-arm64": "0.23.1", + "@esbuild/linux-ia32": "0.23.1", + "@esbuild/linux-loong64": "0.23.1", + "@esbuild/linux-mips64el": "0.23.1", + "@esbuild/linux-ppc64": "0.23.1", + "@esbuild/linux-riscv64": "0.23.1", + "@esbuild/linux-s390x": "0.23.1", + "@esbuild/linux-x64": "0.23.1", + "@esbuild/netbsd-x64": "0.23.1", + "@esbuild/openbsd-arm64": "0.23.1", + "@esbuild/openbsd-x64": "0.23.1", + "@esbuild/sunos-x64": "0.23.1", + "@esbuild/win32-arm64": "0.23.1", + "@esbuild/win32-ia32": "0.23.1", + "@esbuild/win32-x64": "0.23.1" } }, "escalade": { @@ -14466,9 +13891,9 @@ "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==" }, "eventemitter2": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-5.0.1.tgz", - "integrity": "sha512-5EM1GHXycJBS6mauYAbVKT1cVs7POKWb2NXD4Vyt8dDqeZa7LaDK1/sjtL+Zb0lzTpSNil4596Dyu97hz37QLg==" + "version": "6.4.9", + "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-6.4.9.tgz", + "integrity": "sha512-JEPTiaOt9f04oa6NOkc4aH+nVp5I3wEjpHbIPqfgCdD5v5bUzy7xQqwcVO2aDQgOWhI28da57HksMrzK9HlRxg==" }, "execa": { "version": "5.1.1", @@ -14576,11 +14001,6 @@ "bser": "2.1.1" } }, - "fclone": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/fclone/-/fclone-1.0.11.tgz", - "integrity": "sha512-GDqVQezKzRABdeqflsgMr7ktzgF9CyS+p2oe0jJqUY6izSSbhPIQJDpoU4PtGcD7VPM9xh/dVrTu6z1nwgmEGw==" - }, "fecha": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/fecha/-/fecha-4.2.3.tgz", @@ -14723,9 +14143,9 @@ } }, "get-uri": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/get-uri/-/get-uri-6.0.4.tgz", - "integrity": "sha512-E1b1lFFLvLgak2whF2xDBcOy6NLVGZBqqjJjsIhvopKfWWEi64pLVTWWehV8KlLerZkfNTA95sTe2OdJKm1OzQ==", + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/get-uri/-/get-uri-6.0.5.tgz", + "integrity": "sha512-b1O07XYq8eRuVzBNgJLstU6FYc1tS6wnMtF1I1D9lE8LxZSOGZ7LhxN54yPP6mGw5f2CkXY2BQUL9Fx41qvcIg==", "requires": { "basic-ftp": "^5.0.2", "data-uri-to-buffer": "^6.0.2", @@ -14951,14 +14371,6 @@ "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==" }, - "is-core-module": { - "version": "2.16.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", - "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", - "requires": { - "hasown": "^2.0.2" - } - }, "is-docker": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", @@ -16297,26 +15709,11 @@ "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.3.tgz", "integrity": "sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==" }, - "mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==" - }, - "module-details-from-path": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/module-details-from-path/-/module-details-from-path-1.0.4.tgz", - "integrity": "sha512-EGWKgxALGMgzvxYF1UyGTy0HXX/2vHLkw6+NvDKW2jypWbHpjQuj4UMcqQWXHERJhVGKikolT06G3bcKe4fi7w==" - }, "ms": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" }, - "mute-stream": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", - "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==" - }, "napi-postinstall": { "version": "0.3.4", "resolved": "https://registry.npmjs.org/napi-postinstall/-/napi-postinstall-0.3.4.tgz", @@ -16332,43 +15729,15 @@ "resolved": "https://registry.npmjs.org/natural-orderby/-/natural-orderby-5.0.0.tgz", "integrity": "sha512-kKHJhxwpR/Okycz4HhQKKlhWe4ASEfPgkSWNmKFHd7+ezuQlxkA5cM3+XkBPvm1gmHen3w53qsYAv+8GwRrBlg==" }, - "needle": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/needle/-/needle-2.4.0.tgz", - "integrity": "sha512-4Hnwzr3mi5L97hMYeNl8wRW/Onhy4nUKR/lVemJ8gJedxxUyBLm9kkrDColJvoSfwi0jCNhD+xCdOtiGDQiRZg==", - "requires": { - "debug": "^3.2.6", - "iconv-lite": "^0.4.4", - "sax": "^1.2.4" - }, - "dependencies": { - "debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "requires": { - "ms": "^2.1.1" - } - }, - "iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - } - } - }, "negotiator": { "version": "0.6.4", "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.4.tgz", "integrity": "sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==" }, "netmask": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/netmask/-/netmask-2.0.2.tgz", - "integrity": "sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==" + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/netmask/-/netmask-2.1.1.tgz", + "integrity": "sha512-eonl3sLUha+S1GzTPxychyhnUzKyeQkZ7jLjKrBagJgPla13F+uQ71HgpFefyHgqrjEbCPkDArxYsjY8/+gLKA==" }, "node-int64": { "version": "0.4.0", @@ -16585,11 +15954,6 @@ "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==" }, - "path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" - }, "path-scurry": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.2.tgz", @@ -16622,9 +15986,9 @@ "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==" }, "pidusage": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/pidusage/-/pidusage-3.0.2.tgz", - "integrity": "sha512-g0VU+y08pKw5M8EZ2rIGiEBaB8wrQMjYGFfW2QVIfyT8V+fq8YFLkvlz4bz5ljvFDJYNFCWT3PWqcRr2FKO81w==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pidusage/-/pidusage-4.0.1.tgz", + "integrity": "sha512-yCH2dtLHfEBnzlHUJymR/Z1nN2ePG3m392Mv8TFlTP1B0xkpMQNHAnfkY0n2tAi6ceKO6YWhxYfZ96V4vVkh/g==", "requires": { "safe-buffer": "^5.2.1" } @@ -16643,15 +16007,15 @@ } }, "pm2": { - "version": "6.0.14", - "resolved": "https://registry.npmjs.org/pm2/-/pm2-6.0.14.tgz", - "integrity": "sha512-wX1FiFkzuT2H/UUEA8QNXDAA9MMHDsK/3UHj6Dkd5U7kxyigKDA5gyDw78ycTQZAuGCLWyUX5FiXEuVQWafukA==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/pm2/-/pm2-7.0.0.tgz", + "integrity": "sha512-/VpW9f7jpy6o7k2CjWhsdCSS0YGYSSWZYz8gt2zJYg+PGOcbt50L7oZgiUqJDpJLyhIL+LnvgtRw4HXdg5pQCg==", "requires": { - "@pm2/agent": "~2.1.1", "@pm2/blessed": "0.1.81", - "@pm2/io": "~6.1.0", - "@pm2/js-api": "~0.8.0", - "@pm2/pm2-version-check": "^1.0.4", + "@pm2/js-api": "0.8.0", + "@pm2/pm2-version-check": "1.0.4", + "amp": "0.3.1", + "amp-message": "0.1.2", "ansis": "4.0.0-node10", "async": "3.2.6", "chokidar": "3.6.0", @@ -16660,23 +16024,16 @@ "croner": "4.1.97", "dayjs": "1.11.15", "debug": "4.4.3", - "enquirer": "2.3.6", - "eventemitter2": "5.0.1", - "fclone": "1.0.11", + "eventemitter2": "6.4.9", + "fast-json-patch": "3.1.1", "js-yaml": "4.1.1", - "mkdirp": "1.0.4", - "needle": "2.4.0", - "pidusage": "3.0.2", - "pm2-axon": "~4.0.1", - "pm2-axon-rpc": "~0.7.1", - "pm2-deploy": "~1.0.2", - "pm2-multimeter": "^0.1.2", + "pidusage": "4.0.1", + "pm2-deploy": "1.0.2", "pm2-sysmonit": "^1.2.8", - "promptly": "2.2.0", + "proxy-agent": "6.5.0", "semver": "7.7.2", - "source-map-support": "0.5.21", - "sprintf-js": "1.1.2", - "vizion": "~2.2.1" + "vizion": "2.2.1", + "ws": "8.20.0" }, "dependencies": { "commander": { @@ -16697,48 +16054,14 @@ "ms": "^2.1.3" } }, - "source-map-support": { - "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", - "requires": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "sprintf-js": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.2.tgz", - "integrity": "sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug==" + "ws": { + "version": "8.20.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.20.0.tgz", + "integrity": "sha512-sAt8BhgNbzCtgGbt2OxmpuryO63ZoDk/sqaB/znQm94T4fCEsy/yV+7CdC1kJhOU9lboAEU7R3kquuycDoibVA==", + "requires": {} } } }, - "pm2-axon": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pm2-axon/-/pm2-axon-4.0.1.tgz", - "integrity": "sha512-kES/PeSLS8orT8dR5jMlNl+Yu4Ty3nbvZRmaAtROuVm9nYYGiaoXqqKQqQYzWQzMYWUKHMQTvBlirjE5GIIxqg==", - "requires": { - "amp": "~0.3.1", - "amp-message": "~0.1.1", - "debug": "^4.3.1", - "escape-string-regexp": "^4.0.0" - }, - "dependencies": { - "escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==" - } - } - }, - "pm2-axon-rpc": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/pm2-axon-rpc/-/pm2-axon-rpc-0.7.1.tgz", - "integrity": "sha512-FbLvW60w+vEyvMjP/xom2UPhUN/2bVpdtLfKJeYM3gwzYhoTEEChCOICfFzxkxuoEleOlnpjie+n1nue91bDQw==", - "requires": { - "debug": "^4.3.1" - } - }, "pm2-deploy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/pm2-deploy/-/pm2-deploy-1.0.2.tgz", @@ -16748,14 +16071,6 @@ "tv4": "^1.3.0" } }, - "pm2-multimeter": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/pm2-multimeter/-/pm2-multimeter-0.1.2.tgz", - "integrity": "sha512-S+wT6XfyKfd7SJIBqRgOctGxaBzUOmVQzTAS+cg04TsEUObJVreha7lvCfX8zzGVr871XwCSnHUU7DQQ5xEsfA==", - "requires": { - "charm": "~0.1.1" - } - }, "pm2-sysmonit": { "version": "1.2.8", "resolved": "https://registry.npmjs.org/pm2-sysmonit/-/pm2-sysmonit-1.2.8.tgz", @@ -16810,27 +16125,19 @@ } } }, - "promptly": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/promptly/-/promptly-2.2.0.tgz", - "integrity": "sha512-aC9j+BZsRSSzEsXBNBwDnAxujdx19HycZoKgRgzWnS8eOHg1asuf9heuLprfbe739zY3IdUQx+Egv6Jn135WHA==", - "requires": { - "read": "^1.0.4" - } - }, "proxy-agent": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/proxy-agent/-/proxy-agent-6.4.0.tgz", - "integrity": "sha512-u0piLU+nCOHMgGjRbimiXmA9kM/L9EHh3zL81xCdp7m+Y2pHIsnmbdDoEDoAz5geaonNR6q6+yOPQs6n4T6sBQ==", + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/proxy-agent/-/proxy-agent-6.5.0.tgz", + "integrity": "sha512-TmatMXdr2KlRiA2CyDu8GqR8EjahTG3aY3nXjdzFyoZbmB8hrBsTyMezhULIXKnC0jpfjlmiZ3+EaCzoInSu/A==", "requires": { - "agent-base": "^7.0.2", + "agent-base": "^7.1.2", "debug": "^4.3.4", "http-proxy-agent": "^7.0.1", - "https-proxy-agent": "^7.0.3", + "https-proxy-agent": "^7.0.6", "lru-cache": "^7.14.1", - "pac-proxy-agent": "^7.0.1", + "pac-proxy-agent": "^7.1.0", "proxy-from-env": "^1.1.0", - "socks-proxy-agent": "^8.0.2" + "socks-proxy-agent": "^8.0.5" }, "dependencies": { "lru-cache": { @@ -16893,14 +16200,6 @@ "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==" }, - "read": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/read/-/read-1.0.7.tgz", - "integrity": "sha512-rSOKNYUmaxy0om1BNjMN4ezNT6VKK+2xF4GBhc81mkH7L60i6dp8qPYrkndNLT3QPphoII3maL9PVC9XmhHwVQ==", - "requires": { - "mute-stream": "~0.0.4" - } - }, "readable-stream": { "version": "3.6.2", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", @@ -16946,26 +16245,6 @@ "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==" }, - "require-in-the-middle": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/require-in-the-middle/-/require-in-the-middle-5.2.0.tgz", - "integrity": "sha512-efCx3b+0Z69/LGJmm9Yvi4cqEdxnoGnxYxGxBghkkTTFeXRtTCmmhO0AnAfHz59k957uTSuy8WaHqOs8wbYUWg==", - "requires": { - "debug": "^4.1.1", - "module-details-from-path": "^1.0.3", - "resolve": "^1.22.1" - } - }, - "resolve": { - "version": "1.22.10", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz", - "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==", - "requires": { - "is-core-module": "^2.16.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - } - }, "resolve-cwd": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", @@ -17097,11 +16376,6 @@ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==" }, - "shimmer": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/shimmer/-/shimmer-1.2.1.tgz", - "integrity": "sha512-sQTKC1Re/rM6XyFM6fIAGHRPVGvyXfgzIDvzoq608vM+jeyVD0Tu1E6Np0Kc2zAIFWIj963V2800iF/9LPieQw==" - }, "signal-exit": { "version": "3.0.7", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", @@ -17240,11 +16514,6 @@ "has-flag": "^4.0.0" } }, - "supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==" - }, "synckit": { "version": "0.11.12", "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.11.12.tgz", @@ -17356,7 +16625,7 @@ "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.21.0.tgz", "integrity": "sha512-5C1sg4USs1lfG0GFb2RLXsdpXqBSEhAaA/0kPL01wxzpMqLILNxIxIOKiILz+cdg/pLnOUxFYOR5yhHU666wbw==", "requires": { - "esbuild": "~0.27.0", + "esbuild": "0.23.1", "fsevents": "~2.3.3", "get-tsconfig": "^4.7.5" } diff --git a/package.json b/package.json index da6593bbe..c43d0bbb1 100644 --- a/package.json +++ b/package.json @@ -63,7 +63,7 @@ "cross-env": "^10.1.0", "curl-generator": "^0.5.0", "dayjs": "^1.11.20", - "epg-grabber": "^0.46.1", + "epg-grabber": "^0.46.2", "epg-parser": "^0.5.0", "eslint": "^10.2.1", "eslint-config-prettier": "^10.1.8", @@ -81,7 +81,7 @@ "p-limit": "^7.3.0", "pako": "^2.1.0", "parse-duration": "^2.1.6", - "pm2": "^6.0.14", + "pm2": "^7.0.0", "sax": "^1.6.0", "serve": "^14.2.6", "socks-proxy-agent": "^10.0.0", diff --git a/scripts/commands/sites/update.ts b/scripts/commands/sites/update.ts index 862762b81..28ee84ebb 100644 --- a/scripts/commands/sites/update.ts +++ b/scripts/commands/sites/update.ts @@ -40,8 +40,7 @@ async function main() { (channel: epgGrabber.Channel) => new Channel(channel.toObject()) ) - site.totalChannels += channels.count() - site.markedChannels += channels.filter((channel: Channel) => channel.xmltv_id).count() + site.channels = site.channels.concat(channels) } sites.add(site) @@ -53,8 +52,13 @@ async function main() { rows.add( new Collection([ { value: `${site.domain}` }, - { value: site.totalChannels.toString(), align: 'right' }, - { value: site.markedChannels.toString(), align: 'right' }, + { + value: site.channels + .uniqBy((channel: Channel) => channel.site_id) + .count() + .toString(), + align: 'right' + }, { value: site.getStatus().emoji, align: 'center' }, { value: site.getIssueUrls().all().join(', ') } ]) @@ -66,7 +70,7 @@ async function main() { rows, new Collection([ { name: 'Site', align: 'left' }, - { name: 'Channels
(total / with xmltv-id)', colspan: 2, align: 'left' }, + { name: 'Channels', align: 'left' }, { name: 'Status', align: 'left' }, { name: 'Notes', align: 'left' } ]) diff --git a/scripts/models/site.ts b/scripts/models/site.ts index 27d9d1efc..31e901cda 100644 --- a/scripts/models/site.ts +++ b/scripts/models/site.ts @@ -1,5 +1,5 @@ import { Collection } from '@freearhey/core' -import { Issue } from './' +import { Channel, Issue } from './' enum StatusCode { DOWN = 'down', @@ -14,21 +14,18 @@ export interface Status { export interface SiteData { domain: string - totalChannels?: number - markedChannels?: number + channels?: Collection issues: Collection } export class Site { domain: string - totalChannels: number - markedChannels: number + channels: Collection issues: Collection constructor(data: SiteData) { this.domain = data.domain - this.totalChannels = data.totalChannels || 0 - this.markedChannels = data.markedChannels || 0 + this.channels = new Collection() this.issues = data.issues } diff --git a/sites/artonline.tv/artonline.tv.config.js b/sites/artonline.tv/artonline.tv.config.js index b5abb1346..2916314bb 100644 --- a/sites/artonline.tv/artonline.tv.config.js +++ b/sites/artonline.tv/artonline.tv.config.js @@ -1,5 +1,3 @@ -process.env['NODE_TLS_REJECT_UNAUTHORIZED'] = 0 - const customParseFormat = require('dayjs/plugin/customParseFormat') const timezone = require('dayjs/plugin/timezone') const utc = require('dayjs/plugin/utc') diff --git a/sites/claro.com.br/readme.md b/sites/claro.com.br/readme.md index 576fc5df5..af4f426a1 100644 --- a/sites/claro.com.br/readme.md +++ b/sites/claro.com.br/readme.md @@ -1,6 +1,6 @@ # claro.com.br -https://www.claro.com.br/tv-por-assinatura/programacao/grade +https://www.claro.com.br/tv-por-assinatura/programacao/grade _[Geo-blocked]_ ### Download the guide diff --git a/sites/clickthecity.com/clickthecity.com.channels.xml b/sites/clickthecity.com/clickthecity.com.channels.xml index 0252df28f..9db75411d 100644 --- a/sites/clickthecity.com/clickthecity.com.channels.xml +++ b/sites/clickthecity.com/clickthecity.com.channels.xml @@ -29,7 +29,7 @@ K-Movies Pinoy GEM Kapamilya Channel - Rock Extreme + Rock Extreme Liga a2z Channel 11 diff --git a/sites/clickthecity.com/clickthecity.com.config.js b/sites/clickthecity.com/clickthecity.com.config.js index b65096349..1706b522d 100644 --- a/sites/clickthecity.com/clickthecity.com.config.js +++ b/sites/clickthecity.com/clickthecity.com.config.js @@ -19,10 +19,7 @@ module.exports = { }, data({ date }) { const params = new URLSearchParams() - params.append( - 'optDate', - dayjs(date.valueOf()).tz('Asia/Manila').format('YYYY-MM-DD') - ) + params.append('optDate', dayjs(date.valueOf()).tz('Asia/Manila').format('YYYY-MM-DD')) params.append('optTime', '00:00:00') return params @@ -79,7 +76,7 @@ function parseStart($item, date) { const url = $item('td.cPrg > a').attr('href') || '' let [, time] = url.match(/starttime=(\d{1,2}%3A\d{2}\+(AM|PM))/) || [null, null] if (!time) return null - time = `${date.format('YYYY-MM-DD')} ${time.replace('%3A', ':').replace('+', ' ')}` + time = `${date.format('YYYY-MM-DD')} ${decodeURIComponent(time).replace(/\+/g, ' ')}` return dayjs.tz(time, 'YYYY-MM-DD h:mm A', 'Asia/Manila').utc() } @@ -88,7 +85,7 @@ function parseStop($item, date) { const url = $item('td.cPrg > a').attr('href') || '' let [, time] = url.match(/endtime=(\d{1,2}%3A\d{2}\+(AM|PM))/) || [null, null] if (!time) return null - time = `${date.format('YYYY-MM-DD')} ${time.replace('%3A', ':').replace('+', ' ')}` + time = `${date.format('YYYY-MM-DD')} ${decodeURIComponent(time).replace(/\+/g, ' ')}` return dayjs.tz(time, 'YYYY-MM-DD h:mm A', 'Asia/Manila').utc() } diff --git a/sites/cubmu.com/__data__/content.json b/sites/cubmu.com/__data__/content.json index d27a2baa6..049ccbfd1 100644 --- a/sites/cubmu.com/__data__/content.json +++ b/sites/cubmu.com/__data__/content.json @@ -1 +1,301 @@ -{"result":[{"channel_id":"4028c68574537fcd0174be43042758d8","channel_name":"Trans TV","scehedule_title":"CNN Tech News","schedule_date":"2023-11-05 01:30:00","schedule_end_time":"02:00:00","schedule_json":{"availability":0,"channelId":"4028c68574537fcd0174be43042758d8","channelName":"Trans TV","duration":1800,"editable":true,"episodeName":"","imageUrl":"https://cdnjkt2.transvision.co.id:1001/catchup/schedule/thumbnail/4028c68574537fcd0174be43042758d8/4028c6858b8b3621018b9330e3701a7e/458x640","imageUrlWide":"https://cdnjkt2.transvision.co.id:1001/catchup/schedule/thumbnail/4028c68574537fcd0174be43042758d8/4028c6858b8b3621018b9330e3701a7e/320x180","name":"CNN Tech News","ottImageUrl":"","primarySynopsis":"CNN Indonesia Tech News adalah berita teknologi yang membawa pemirsa ke dunia teknologi yang penuh dengan informasi, pendidikan, hiburan sampai informasi kesehatan terkini.","scheduleId":"4028c6858b8b3621018b9330e3701a7e","scheduleTime":"18:30:00","secondarySynopsis":"CNN Indonesia Tech News is tech news brings viewers into the world of technology that provides information, education, entertainment to the latest health information.","startDt":"20231104183000","url":""},"schedule_start_time":"01:30:00"}]} \ No newline at end of file +{ + "data": [ + { + "catchup_id": "1409589", + "channel_id": "210", + "channel_name": "Trans TV", + "content_id": "800", + "duration": 45, + "genre_id": "10", + "is_catchup_available": true, + "is_live": false, + "program_name": "Lacak Kriminal", + "schedule_date": "2026-04-26", + "schedule_end_time": "2026-04-26 02:00:00", + "schedule_start_time": "2026-04-26 01:15:00" + }, + { + "catchup_id": "1409590", + "channel_id": "210", + "channel_name": "Trans TV", + "content_id": "800", + "duration": 60, + "genre_id": "10", + "is_catchup_available": true, + "is_live": false, + "program_name": "CNN Indonesia Prime News", + "schedule_date": "2026-04-26", + "schedule_end_time": "2026-04-26 03:00:00", + "schedule_start_time": "2026-04-26 02:00:00" + }, + { + "catchup_id": "1409591", + "channel_id": "210", + "channel_name": "Trans TV", + "content_id": "800", + "duration": 40, + "genre_id": "10", + "is_catchup_available": true, + "is_live": false, + "program_name": "The Transmart", + "schedule_date": "2026-04-26", + "schedule_end_time": "2026-04-26 03:40:00", + "schedule_start_time": "2026-04-26 03:00:00" + }, + { + "catchup_id": "1409592", + "channel_id": "210", + "channel_name": "Trans TV", + "content_id": "800", + "duration": 60, + "genre_id": "10", + "is_catchup_available": true, + "is_live": false, + "program_name": "Klinik Tendean", + "schedule_date": "2026-04-26", + "schedule_end_time": "2026-04-26 04:40:00", + "schedule_start_time": "2026-04-26 03:40:00" + }, + { + "catchup_id": "1409593", + "channel_id": "210", + "channel_name": "Trans TV", + "content_id": "800", + "duration": 20, + "genre_id": "10", + "is_catchup_available": true, + "is_live": false, + "program_name": "Adam And Inul Love Story", + "schedule_date": "2026-04-26", + "schedule_end_time": "2026-04-26 05:00:00", + "schedule_start_time": "2026-04-26 04:40:00" + }, + { + "catchup_id": "1409594", + "channel_id": "210", + "channel_name": "Trans TV", + "content_id": "800", + "duration": 90, + "genre_id": "10", + "is_catchup_available": true, + "is_live": false, + "program_name": "Islam Itu Indah", + "schedule_date": "2026-04-26", + "schedule_end_time": "2026-04-26 06:30:00", + "schedule_start_time": "2026-04-26 05:00:00" + }, + { + "catchup_id": "1409595", + "channel_id": "210", + "channel_name": "Trans TV", + "content_id": "800", + "duration": 60, + "genre_id": "10", + "is_catchup_available": true, + "is_live": false, + "program_name": "Insert Pagi", + "schedule_date": "2026-04-26", + "schedule_end_time": "2026-04-26 07:30:00", + "schedule_start_time": "2026-04-26 06:30:00" + }, + { + "catchup_id": "1409596", + "channel_id": "210", + "channel_name": "Trans TV", + "content_id": "800", + "duration": 60, + "genre_id": "10", + "is_catchup_available": true, + "is_live": false, + "program_name": "Kajian Hati", + "schedule_date": "2026-04-26", + "schedule_end_time": "2026-04-26 08:30:00", + "schedule_start_time": "2026-04-26 07:30:00" + }, + { + "catchup_id": "1409597", + "channel_id": "210", + "channel_name": "Trans TV", + "content_id": "800", + "duration": 120, + "genre_id": "10", + "is_catchup_available": true, + "is_live": false, + "program_name": "Ambyar In Weekend", + "schedule_date": "2026-04-26", + "schedule_end_time": "2026-04-26 10:30:00", + "schedule_start_time": "2026-04-26 08:30:00" + }, + { + "catchup_id": "1409598", + "channel_id": "210", + "channel_name": "Trans TV", + "content_id": "800", + "duration": 60, + "genre_id": "10", + "is_catchup_available": true, + "is_live": false, + "program_name": "Insert", + "schedule_date": "2026-04-26", + "schedule_end_time": "2026-04-26 11:30:00", + "schedule_start_time": "2026-04-26 10:30:00" + }, + { + "catchup_id": "1409599", + "channel_id": "210", + "channel_name": "Trans TV", + "content_id": "800", + "duration": 60, + "genre_id": "10", + "is_catchup_available": true, + "is_live": false, + "program_name": "Spill DD Tea", + "schedule_date": "2026-04-26", + "schedule_end_time": "2026-04-26 12:30:00", + "schedule_start_time": "2026-04-26 11:30:00" + }, + { + "catchup_id": "1409600", + "channel_id": "210", + "channel_name": "Trans TV", + "content_id": "800", + "duration": 90, + "genre_id": "10", + "is_catchup_available": true, + "is_live": false, + "program_name": "Brownis On The Weekend", + "schedule_date": "2026-04-26", + "schedule_end_time": "2026-04-26 14:00:00", + "schedule_start_time": "2026-04-26 12:30:00" + }, + { + "catchup_id": "1409601", + "channel_id": "210", + "channel_name": "Trans TV", + "content_id": "800", + "duration": 60, + "genre_id": "10", + "is_catchup_available": true, + "is_live": false, + "program_name": "Rumpi Hot Of The Week", + "schedule_date": "2026-04-26", + "schedule_end_time": "2026-04-26 15:00:00", + "schedule_start_time": "2026-04-26 14:00:00" + }, + { + "catchup_id": "1409602", + "channel_id": "210", + "channel_name": "Trans TV", + "content_id": "800", + "duration": 60, + "genre_id": "10", + "is_catchup_available": true, + "is_live": false, + "program_name": "Insert Investigasi", + "schedule_date": "2026-04-26", + "schedule_end_time": "2026-04-26 16:00:00", + "schedule_start_time": "2026-04-26 15:00:00" + }, + { + "catchup_id": "1409603", + "channel_id": "210", + "channel_name": "Trans TV", + "content_id": "800", + "duration": 60, + "genre_id": "10", + "is_catchup_available": true, + "is_live": false, + "program_name": "Sehari Jadi Ratu", + "schedule_date": "2026-04-26", + "schedule_end_time": "2026-04-26 17:00:00", + "schedule_start_time": "2026-04-26 16:00:00" + }, + { + "catchup_id": "1409604", + "channel_id": "210", + "channel_name": "Trans TV", + "content_id": "800", + "duration": 60, + "genre_id": "10", + "is_catchup_available": true, + "is_live": false, + "program_name": "Bikin Laper", + "schedule_date": "2026-04-26", + "schedule_end_time": "2026-04-26 18:00:00", + "schedule_start_time": "2026-04-26 17:00:00" + }, + { + "catchup_id": "1409605", + "channel_id": "210", + "channel_name": "Trans TV", + "content_id": "800", + "duration": 60, + "genre_id": "10", + "is_catchup_available": true, + "is_live": false, + "program_name": "Monitor Ketua", + "schedule_date": "2026-04-26", + "schedule_end_time": "2026-04-26 19:00:00", + "schedule_start_time": "2026-04-26 18:00:00" + }, + { + "catchup_id": "1409606", + "channel_id": "210", + "channel_name": "Trans TV", + "content_id": "800", + "duration": 75, + "genre_id": "10", + "is_catchup_available": true, + "is_live": false, + "program_name": "Insert Story", + "schedule_date": "2026-04-26", + "schedule_end_time": "2026-04-26 20:15:00", + "schedule_start_time": "2026-04-26 19:00:00" + }, + { + "catchup_id": "1409607", + "channel_id": "210", + "channel_name": "Trans TV", + "content_id": "800", + "duration": 60, + "genre_id": "10", + "is_catchup_available": true, + "is_live": false, + "program_name": "Highlight", + "schedule_date": "2026-04-26", + "schedule_end_time": "2026-04-26 21:15:00", + "schedule_start_time": "2026-04-26 20:15:00" + }, + { + "catchup_id": "1409608", + "channel_id": "210", + "channel_name": "Trans TV", + "content_id": "800", + "duration": 120, + "genre_id": "10", + "is_catchup_available": false, + "is_live": true, + "program_name": "Bioskop TransTV", + "schedule_date": "2026-04-26", + "schedule_end_time": "2026-04-26 23:15:00", + "schedule_start_time": "2026-04-26 21:15:00" + }, + { + "catchup_id": "1409609", + "channel_id": "210", + "channel_name": "Trans TV", + "content_id": "800", + "duration": 120, + "genre_id": "10", + "is_catchup_available": false, + "is_live": false, + "program_name": "Bioskop TransTV", + "schedule_date": "2026-04-26", + "schedule_end_time": "2026-04-27 01:15:00", + "schedule_start_time": "2026-04-26 23:15:00" + } + ], + "error": null, + "message": "Get list EPG success", + "status": "success" +} \ No newline at end of file diff --git a/sites/cubmu.com/cubmu.com.channels.xml b/sites/cubmu.com/cubmu.com.channels.xml new file mode 100644 index 000000000..3b706bc78 --- /dev/null +++ b/sites/cubmu.com/cubmu.com.channels.xml @@ -0,0 +1,79 @@ + + + Movies News + Golf Plus ID + Knowledge+ + Cartoon TV Premium + Cartoon TV + Cartoon TV Classic + Football TV + Sports TV + Xtrem Sports + Speed TV + Travel TV + Cooking TV + Gaming TV + Song TV + ABC Australia + Al Jazeera + Al Quran Al Kareem + ANTV + Arirang + Berita Satu + Bioskop Indonesia + BTV + CCTV4 + Celestial Movies + CGTN + CGTN Documentary + Channel Jowo + Channel NewsAsia + CNBC Asia + CNBC Indonesia + CNN Indonesia + DAAI TV + DayStar + DENS Food Channel + DENS Play Channel + DENS Show Bizz + Dunia Anak + Dunia Lain + Eat N Go + Euronews + Fashion TV + Fight TV Premium + France 24 + Garuda TV + GTV + Indosiar + JakTV + jtv + Khazanah + Kompas TV + MDTV + MetroTV + MNC TV + Musik Indonesia + Nabawi TV + NHK World Premium + !nsert + One TV + Pijar TV + PSJ TV + Rtv + RCTI + Russia Today + SCTV + Superyacht TV + Thrill + Trans 7 + Trans TV + TV5 Monde + TV9 + tvMU + tVN + TVN Movies + TVOne + TVRI + Wion TV + diff --git a/sites/cubmu.com/cubmu.com.config.js b/sites/cubmu.com/cubmu.com.config.js index 335a555d3..a994a967c 100644 --- a/sites/cubmu.com/cubmu.com.config.js +++ b/sites/cubmu.com/cubmu.com.config.js @@ -1,3 +1,4 @@ +const axios = require('axios') const dayjs = require('dayjs') const timezone = require('dayjs/plugin/timezone') const utc = require('dayjs/plugin/utc') @@ -5,78 +6,72 @@ const utc = require('dayjs/plugin/utc') dayjs.extend(timezone) dayjs.extend(utc) +const tz = 'Asia/Jakarta' +const dateFormat = 'YYYY-MM-DD HH:mm:ss' +const headers = { + 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36', + 'Origin': 'https://cubmu.com', + 'Referer': 'https://cubmu.com/', +} +let runtimeConfig, accessToken + module.exports = { site: 'cubmu.com', days: 2, url({ channel, date }) { - return `https://servicebuss.transvision.co.id/v2/cms/getEPGData?app_id=cubmu&tvs_platform_id=standalone&schedule_date=${date.format( + return `https://servicebuss.transvision.co.id/global/v2/epg/programs?channel_id=${ + channel.site_id + }&schedule_date=${date.format( 'YYYY-MM-DD' - )}&channel_id=${channel.site_id}` + )}` }, - parser({ content, channel }) { + request: { + async headers() { + await fetchAccessToken() + + return { + Authorization: `Bearer ${accessToken}`, + ...headers, + } + } + }, + parser({ content }) { const programs = [] - const items = parseItems(content) - items.forEach(item => { - programs.push({ - title: parseTitle(item), - description: parseDescription(item, channel.lang), - episode: parseEpisode(item), - start: parseStart(item).toISOString(), - stop: parseStop(item).toISOString() + if (content && typeof content === 'string') { + content = JSON.parse(content) + } + if (Array.isArray(content?.data)) { + content.data.forEach(item => { + programs.push({ + title: item.program_name, + start: dayjs.tz(item.schedule_start_time, dateFormat, tz), + stop: dayjs.tz(item.schedule_end_time, dateFormat, tz), + }) }) - }) + } return programs }, - async channels({ lang }) { - const axios = require('axios') - const cheerio = require('cheerio') + async channels({ lang = 'id' }) { + const now = dayjs() + await fetchAccessToken() const result = await axios - .get('https://cubmu.com/live-tv') - .then(response => response.data) - .catch(console.error) - - const $ = cheerio.load(result) - - // retrieve service api data - const config = JSON.parse($('#__NEXT_DATA__').text()).runtimeConfig || {} - - const options = { - headers: { - Origin: 'https://cubmu.com', - Referer: 'https://cubmu.com/live-tv' - } - } - // login to service bus - await axios - .post( - `https://servicebuss.transvision.co.id/tvs/login/external?email=${config.email}&password=${config.password}&deviceId=${config.deviceId}&deviceType=${config.deviceType}&deviceModel=${config.deviceModel}&deviceToken=&serial=&platformId=${config.platformId}`, - options - ) - .then(response => response.data) - .catch(console.error) - // list channels - const subscribedChannels = await axios - .post( - `https://servicebuss.transvision.co.id/tvs/subscribe_product/list?platformId=${config.platformId}`, - options - ) - .then(response => response.data) - .catch(console.error) + .get(`https://servicebuss.transvision.co.id/global/v2/master-channels?platform_id=1&page=1&per_page=100&schedule_date=${now.format('YYYY-MM-DD')}`, { + headers: { + Authorization: `Bearer ${accessToken}`, + ...headers, + } + }) + .then(r => r.data) + .catch(err => console.error(err.message)) const channels = [] - const included = [] - if (Array.isArray(subscribedChannels.channelPackageList)) { - subscribedChannels.channelPackageList.forEach(pkg => { - pkg.channelList.forEach(channel => { - if (included.indexOf(channel.id) < 0) { - included.push(channel.id) - channels.push({ - lang, - site_id: channel.id, - name: channel.name - }) - } + if (Array.isArray(result?.data?.items)) { + result.data.items.forEach(channel => { + channels.push({ + lang, + site_id: channel.channel_id, + name: channel.channel_name, }) }) } @@ -85,30 +80,65 @@ module.exports = { } } -function parseItems(content) { - return content ? JSON.parse(content.trim()).result || [] : [] +async function fetchRuntimeConfig() { + if (!runtimeConfig) { + const cheerio = require('cheerio') + const url = 'https://cubmu.com/' + const result = await axios + .get(url) + .then(r => r.data) + .catch(err => console.error(err.message)) + + const $ = cheerio.load(result) + + runtimeConfig = JSON.parse($('#__NEXT_DATA__').text()).runtimeConfig || {} + } } -function parseTitle(item) { - return item.scehedule_title -} +async function fetchAccessToken() { + if (!runtimeConfig) { + await fetchRuntimeConfig() + } + const url = 'https://servicebuss.transvision.co.id/global/v3/auth/redirect-login' + if (!accessToken) { + // extracted from https://cubmu.com/_next/static/chunks/pages/_app-ac49656f9b4eac2d.js + const f = t => { + let e = t, + r = 'xx', + n = Math.round(+new Date / 1e3), + i = ''.concat(e, '{SPLITTER}').concat(n) + return [0, 1].map(() => { + i = ''.concat(r).concat(btoa(i)) + }), i + } + const payload = { + app_id: 'cubmu', + device: { + device_brand: 'Web Browser', + device_id: 'web_browser', + device_type: 'Opera', + firebase_id: 'NOT_ALLOWED', + notes: 'Web Browser-V2.1', + }, + email_or_phone: runtimeConfig?.emailMaster, + password: f(runtimeConfig?.passwordMaster), + tvs_platform_id: 'standalone', + } + const result = await axios + .post(url, payload, { + headers: { + ...headers, + 'Content-Type': 'application/json', + } + }) + .then(r => r.data) + .catch(err => console.error(err.message)) -function parseDescription(item, lang = 'id') { - return lang === 'id' ? item.schedule_json.primarySynopsis : item.schedule_json.secondarySynopsis -} - -function parseEpisode(item) { - return item.schedule_json.episodeName -} - -function parseStart(item) { - return dayjs.tz(item.schedule_date, 'YYYY-MM-DD HH:mm:ss', 'Asia/Jakarta') -} - -function parseStop(item) { - return dayjs.tz( - [item.schedule_date.split(' ')[0], item.schedule_end_time].join(' '), - 'YYYY-MM-DD HH:mm:ss', - 'Asia/Jakarta' - ) + if (result?.data?.access_token) { + accessToken = result.data.access_token + } + } + if (!accessToken) { + throw new Error(`Unable to fetch access token from ${url}!`) + } } diff --git a/sites/cubmu.com/cubmu.com.test.js b/sites/cubmu.com/cubmu.com.test.js index a12f9e75c..fc45695dc 100644 --- a/sites/cubmu.com/cubmu.com.test.js +++ b/sites/cubmu.com/cubmu.com.test.js @@ -3,41 +3,31 @@ 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-05', 'DD/MM/YYYY').startOf('d') -const channel = { site_id: '4028c68574537fcd0174be43042758d8', xmltv_id: 'TransTV.id', lang: 'id' } -const channelEn = Object.assign({}, channel, { lang: 'en' }) +const date = dayjs.utc('2026-04-26').startOf('d') +const channel = { site_id: '210', xmltv_id: 'TransTV.id', lang: 'id' } it('can generate valid url', () => { expect(url({ channel, date })).toBe( - 'https://servicebuss.transvision.co.id/v2/cms/getEPGData?app_id=cubmu&tvs_platform_id=standalone&schedule_date=2023-11-05&channel_id=4028c68574537fcd0174be43042758d8' + 'https://servicebuss.transvision.co.id/global/v2/epg/programs?channel_id=210&schedule_date=2026-04-26' ) }) it('can parse response', () => { const content = fs.readFileSync(path.resolve(__dirname, '__data__/content.json'), 'utf8') - const idResults = parser({ content, channel }) - expect(idResults).toMatchObject([ - { - start: '2023-11-04T18:30:00.000Z', - stop: '2023-11-04T19:00:00.000Z', - title: 'CNN Tech News', - description: - 'CNN Indonesia Tech News adalah berita teknologi yang membawa pemirsa ke dunia teknologi yang penuh dengan informasi, pendidikan, hiburan sampai informasi kesehatan terkini.' - } - ]) - - const enResults = parser({ content, channel: channelEn }) - expect(enResults).toMatchObject([ - { - start: '2023-11-04T18:30:00.000Z', - stop: '2023-11-04T19:00:00.000Z', - title: 'CNN Tech News', - description: - 'CNN Indonesia Tech News is tech news brings viewers into the world of technology that provides information, education, entertainment to the latest health information.' - } - ]) + const results = parser({ content, channel }) + .map(p => { + p.start = p.start.toJSON() + p.stop = p.stop.toJSON() + return p + }) + expect(results[4]).toMatchObject({ + title: 'Adam And Inul Love Story', + start: '2026-04-25T21:40:00.000Z', + stop: '2026-04-25T22:00:00.000Z', + }) }) it('can handle empty guide', () => { diff --git a/sites/cubmu.com/cubmu.com_en.channels.xml b/sites/cubmu.com/cubmu.com_en.channels.xml deleted file mode 100644 index 5122dab05..000000000 --- a/sites/cubmu.com/cubmu.com_en.channels.xml +++ /dev/null @@ -1,73 +0,0 @@ - - - jtv - Musik Indonesia - Euronews - Wion TV - CCTV 4 - Fight TV Premium - Xtrem Sports - Travel TV - Fashion TV - Movies News - Sports TV - SuperYacht TV - Speed TV - PSJ TV - DENS Food Channel - DENS PLAY Channel - DENS ShowBiz - TV9 - tv Mu - Pijar TV - Al Quran Al Kareem - Nabawi TV - MDTV - Song TV - Cartoon TV Classics - One TV - Channel Jowo - Cooking TV - Cartoon TV Premium - Cartoon TV - Football TV - Knowledge+ - Berita Satu - Garuda TV - CNA - Al Jazeera - France 24 - Arirang - Dunia Anak - Channel Seru! - Dunia Lain - ABC Australia - Eat N Go - Khazanah - CNBC Indonesia - SCTV - Indosiar - DAAI TV - rtv - MNC TV - Lingua - Bioskop Indonesia - GTV - BTV - Russia Today - !nsert - MetroTV - CNN Indonesia - TVRI - CGTN - RCTI - Jak tv - Kompas TV - TV5 Monde - Trans TV - Trans 7 - CGTN Documentary - LPS Financial Festival 2025 - GOLF PLUS ID - Gaming TV - diff --git a/sites/cubmu.com/cubmu.com_id.channels.xml b/sites/cubmu.com/cubmu.com_id.channels.xml deleted file mode 100644 index 0ee5d3662..000000000 --- a/sites/cubmu.com/cubmu.com_id.channels.xml +++ /dev/null @@ -1,73 +0,0 @@ - - - jtv - Musik Indonesia - Euronews - Wion TV - CCTV 4 - Fight TV Premium - Xtrem Sports - Travel TV - Fashion TV - Movies News - Sports TV - SuperYacht TV - Speed TV - PSJ TV - DENS Food Channel - DENS PLAY Channel - DENS ShowBiz - TV9 - tv Mu - Pijar TV - Al Quran Al Kareem - Nabawi TV - MDTV - Song TV - Cartoon TV Classics - One TV - Channel Jowo - Cooking TV - Cartoon TV Premium - Cartoon TV - Football TV - Knowledge+ - Berita Satu - Garuda TV - CNA - Al Jazeera - France 24 - Arirang - Dunia Anak - Channel Seru! - Dunia Lain - ABC Australia - Eat N Go - Khazanah - CNBC Indonesia - SCTV - Indosiar - DAAI TV - rtv - MNC TV - Lingua - Bioskop Indonesia - GTV - BTV - Russia Today - !nsert - MetroTV - CNN Indonesia - TVRI - CGTN - RCTI - Jak tv - Kompas TV - TV5 Monde - Trans TV - Trans 7 - CGTN Documentary - LPS Financial Festival 2025 - GOLF PLUS ID - Gaming TV - diff --git a/sites/cubmu.com/readme.md b/sites/cubmu.com/readme.md index 8a10f641a..fa997a2c4 100644 --- a/sites/cubmu.com/readme.md +++ b/sites/cubmu.com/readme.md @@ -4,30 +4,14 @@ https://cubmu.com/live-tv _[Geo-restricted]_ ### Download the guide -Indonesian: - ```sh -npm run grab --- --sites=cubmu.com --lang=id -``` - -English: - -```sh -npm run grab --- --sites=cubmu.com --lang=en +npm run grab --- --sites=cubmu.com ``` ### Update channel list -Indonesian: - ```sh -npm run channels:parse --- --config=sites/cubmu.com/cubmu.com.config.js --output=sites/cubmu.com/cubmu.com_id.channels.xml --set=lang:id -``` - -English: - -```sh -npm run channels:parse --- --config=sites/cubmu.com/cubmu.com.config.js --output=sites/cubmu.com/cubmu.com_en.channels.xml --set=lang:en +npm run channels:parse --- --config=sites/cubmu.com/cubmu.com.config.js --output=sites/cubmu.com/cubmu.com.channels.xml ``` ### Test diff --git a/sites/dens.tv/dens.tv.channels.xml b/sites/dens.tv/dens.tv.channels.xml index 0fd5487bd..812d1e7aa 100644 --- a/sites/dens.tv/dens.tv.channels.xml +++ b/sites/dens.tv/dens.tv.channels.xml @@ -1,57 +1,46 @@ - DensKnowledge Live Streaming 1 - Metro TV - MDTV - CGTN Documentary - TVRI - RodjaTV - RTV - DAAI TV - Al Jazeera Arabic - TV5MONDE Style HD - ANIPLUS HD - ROCK Entertainment HD - TRT World - DensLife&Style - ROCK Action - Al Jazeera English - tvN Movies HD - tvN HD - CNA - France 24 - NHK WORLD-JAPAN - TBN - WION - BTV - DW-TV - Quran TV - CCTV-4 - Sunna TV - TV5MONDE ASIE - My Cinema Europe HD - Elshinta TV - My Kidz HD - Motorvision+ - K-PLUS HD - DensShowBiz - FREEDOM - DensPlay - My Cinema Asia - Jak tv - DensFood Channel - TVRI Sport - Magna Channel Crema TV - Stingray Classica - Dance TV - Berita Satu - DIM TV - KBS Korea - KBS World + Al Jazeera Arabic + Al Jazeera English + Quran TV + Sunna TV + Berita Satu + BTV + CCTV-4 + CGTN Documentary Channel Jowo + CNA + DAAI TV + Dance TV + DensFood Channel + DensKnowledge + DensLife&Style + DensPlay + DensShowBiz + DIM TV + DW-TV + Elshinta TV + France 24 + FREEDOM + Jak tv + Magna Channel + MDTV + Metro TV + Motorvision+ + My Cinema Europe HD + NHK WORLD-JAPAN Nusantara TV (NTV) - Qwest TV - Russia Today (RT) + Qwest TV + RTV + RodjaTV + Russia Today (RT) + Stingray Classica + TBN + TRT World + TV5MONDE ASIE + TVRI + TVRI Sport + WION diff --git a/sites/directv.com.ar/directv.com.ar.config.js b/sites/directv.com.ar/directv.com.ar.config.js index fef6a12fe..59df620c5 100644 --- a/sites/directv.com.ar/directv.com.ar.config.js +++ b/sites/directv.com.ar/directv.com.ar.config.js @@ -1,4 +1,3 @@ -process.env['NODE_TLS_REJECT_UNAUTHORIZED'] = 0 const dayjs = require('dayjs') const axios = require('axios') const utc = require('dayjs/plugin/utc') diff --git a/sites/directv.com.uy/directv.com.uy.config.js b/sites/directv.com.uy/directv.com.uy.config.js index 6dd1a268e..58cf8feca 100644 --- a/sites/directv.com.uy/directv.com.uy.config.js +++ b/sites/directv.com.uy/directv.com.uy.config.js @@ -1,4 +1,3 @@ -process.env['NODE_TLS_REJECT_UNAUTHORIZED'] = 0 const axios = require('axios') const dayjs = require('dayjs') const utc = require('dayjs/plugin/utc') diff --git a/sites/distro.tv/distro.tv.channels.xml b/sites/distro.tv/distro.tv.channels.xml index b04004a4b..fe456ddfb 100644 --- a/sites/distro.tv/distro.tv.channels.xml +++ b/sites/distro.tv/distro.tv.channels.xml @@ -1,7 +1,7 @@ FTF Sports - Horizon Sports + Horizon Sports The Boat Show Outside Dove @@ -9,28 +9,28 @@ Newsmax TV Lone Star Hard Knocks - Right Now Tv + Right Now Tv OAN Plus AWE Plus - Qello Concerts - Stingray Karaoke + Qello Concerts + Stingray Karaoke Stingray Naturescape Stingray Classica Stingray DJAZZ - Stingray Hit List - Stingray Hot Country - Stingray Rock Alternative - Stingray Pop Adult - Stingray Classic Rock - Stingray Éxitos del Momento - Stingray Greatest Hits - Stingray HipHop and RnB - Stingray Flashback 70s - Stingray Remember the 80s + Stingray Hit List + Stingray Hot Country + Stingray Rock Alternative + Stingray Pop Adult + Stingray Classic Rock + Stingray Éxitos del Momento + Stingray Greatest Hits + Stingray HipHop and RnB + Stingray Flashback 70s + Stingray Remember the 80s Schwab Network CJC Television Network World Poker Tour - Law & Crime + Law & Crime 24 Hour Free Movies SKWAD Channel Fight @@ -90,7 +90,7 @@ Cinema Hausa True African NatureStream.tv - FITE 24/7 + FITE 24/7 TNA Wrestling Channel Fight Network Africanews @@ -111,11 +111,11 @@ Estrella Games Balle Balle TRACE Latina - TRACE Urban - Bollywood Classic - Bollywood HD + TRACE Urban + Bollywood Classic + Bollywood HD IndieBox - TRACE Brazuca + TRACE Brazuca Motorvision TV Motorvision TV Español CCTV-4 @@ -123,11 +123,11 @@ CGTN Documentary CGTN Español DeFiance Media - Sports Connect + Sports Connect MTRSPT1 CraftsyTV - 9XM - 9X Jalwa + 9XM + 9X Jalwa BritAsiaTV Jewish Life Television JLTV Scream TV @@ -139,7 +139,7 @@ TV9 Kannada TV9 Marathi TV9 Telugu - FloRacing 24/7 + FloRacing 24/7 TV9 Telugu USA crema.tv Negocios TV @@ -169,7 +169,7 @@ Global Punjab TV PLL Network PLL Network - TRACE UK + TRACE UK TidPix-Authentically African Green Chillies TV- Zindagi ka Tadka! Cowboy+ Sports @@ -177,7 +177,7 @@ FUEL TV FUEL TV Willow Sports - Punjabi Hits + Punjabi Hits CNA Originals Ghost Dimension Nolly Africa HD diff --git a/sites/firstmedia.com/__data__/content.json b/sites/firstmedia.com/__data__/content.json deleted file mode 100644 index c6ec2901d..000000000 --- a/sites/firstmedia.com/__data__/content.json +++ /dev/null @@ -1 +0,0 @@ -{"data":{"entries":{"243":[{"createdAt":"2023-11-05T17:09:34.000Z","updatedAt":"2023-11-05T17:09:34.000Z","id":"009f3a34-8164-4ff9-b981-9dcab1a518fc","channelNo":"243","programmeId":null,"title":"News Live","episode":null,"slug":"news-live","date":"2023-11-08 17:00:00","startTime":"2023-11-08 20:00:00","endTime":"2023-11-08 20:30:00","length":1800,"description":"News Live","long_description":"Up to date news and analysis from around the world.","status":true,"channel":{"id":"7fd7a9a6-af32-c861-d2b0-4ddc7846fad2","key":"AljaInt","no":243,"name":"Al Jazeera International","slug":"al-jazeera-international","website":null,"description":"

An international 24-hour English-language It is the first English-language news channel brings you the latest global news stories, analysis from the Middle East & worldwide.

","shortDescription":null,"logo":"files/logos/channels/11-NEWS/AlJazeera Int SD-FirstMedia-Chl-243.jpg","externalId":"132","type":"radio","status":true,"chanel":"SD","locale":"id","relationId":"5a6ea4ae-a008-4889-9c68-7a6f1838e81d","onlyfm":null,"genress":[{"id":"1db3bb43-b00d-49af-b272-6c058a8c0b49","name":"International Free View"},{"id":"2e81a4bd-9719-4186-820a-7e035e07be13","name":"News"}]}}]}}} \ No newline at end of file diff --git a/sites/firstmedia.com/firstmedia.com.channels.xml b/sites/firstmedia.com/firstmedia.com.channels.xml deleted file mode 100644 index 39c5921ba..000000000 --- a/sites/firstmedia.com/firstmedia.com.channels.xml +++ /dev/null @@ -1,119 +0,0 @@ - - - BTV - Investor Daily - First Llifestyle - NET. - Metro TV - SCTV - Indosiar - ANTV - TV One - Kompas TV - TVRI Nasional - Jawa Pos Media Televisi - JTV - Reformed 21 - Kairos - Sekolah Pelita Harapan Channel - SPH - Liga Mahasiswa - MOJI - DAAI TV - Eternal Word Television Network (EWTN) - KaraOKE Channel - Balai Kota Channel - Balai Kota Bandung - Rajawali TV - MNC News - TV9 - Garuda TV - Al Quran Al Kareem - Sunnah TV - West Java Network - AXN - Animax - GTV - Rock Action - Euronews - TBN Asia - Jakarta TV - Jak TV - iNews - The Learning Channel - TLC - Asian Food Network - IMC - Fashion TV - GMS Channel - Discovery Channel - Animal Planet - Nick jr. - Nickelodeon - Cartoon Network - SPOTV - SPOTV 2 - Champions TV 1 - Champions TV 2 - First Football - Eurosport - Star Gold - Zee Bioskop - Star Plus - ZEE TV - Zee Cinema - Wion - Zee Action - TVB Xing He - Phoenix Info News - Phoenix Chinese Channel - Celestial Movies - ONE - Xing Kong China - Zhejiang TV - CCTV 4 - CGTN - TVBS Asia - TVBS News - Hunan TV - Dragon TV - Jiangsu TV - ANHUI TV - Shenzen TV - MTV 90s - DW English - Arirang - BBC World News - CNN International - Fox News - Russia Today - Bloomberg - TRT World - Channel News Asia - Al Jazeera International - KBS World - Al Jazeera Arabic - France 24 - NHK World Premium - ABC Australia - Rai Italia - TV5 Monde - HBO - HBO Signature - HBO Hits - HBO Family - Cinemax - First Atmos HD - First Highlights HD - Jakarta Globe News Channel HD - First Lifestyle HD - HBO HD - HBO Hits HD - HBO Family HD - HBO Signature HD - Cinemax HD - Celestial Movies HD - Warner TV HD - Eurosport HD - Champions TV 1 HD - Champions TV 2 HD - HITS Now HD - Hits Movies HD - HITS HD - diff --git a/sites/firstmedia.com/firstmedia.com.config.js b/sites/firstmedia.com/firstmedia.com.config.js deleted file mode 100644 index 7c6865fc8..000000000 --- a/sites/firstmedia.com/firstmedia.com.config.js +++ /dev/null @@ -1,102 +0,0 @@ -const dayjs = require('dayjs') -const timezone = require('dayjs/plugin/timezone') -const utc = require('dayjs/plugin/utc') - -dayjs.extend(timezone) -dayjs.extend(utc) - -module.exports = { - site: 'firstmedia.com', - days: 2, - url({ channel, date }) { - return `https://api.firstmedia.com/api/content/tv-guide/list?date=${date.format( - 'DD/MM/YYYY' - )}&channel=${channel.site_id}&startTime=1&endTime=24` - }, - parser({ content, channel, date }) { - if (!content || !channel || !date) return [] - - const programs = [] - const items = parseItems(content, channel.site_id) - .map(item => { - item.start = toDelta(item.date, item.startTime) - item.stop = toDelta(item.date, item.endTime) - return item - }) - .sort((a, b) => a.start - b.start) - - const dt = date.tz('Asia/Jakarta').startOf('d') - let lastStop - items.forEach(item => { - if (lastStop === undefined || item.start >= lastStop) { - lastStop = item.stop - programs.push({ - title: parseTitle(item), - description: parseDescription(item), - start: asDate(parseStart({ item, date: dt })), - stop: asDate(parseStop({ item, date: dt })) - }) - } - }) - - return programs - }, - async channels() { - const axios = require('axios') - const result = await axios - .get( - `https://api.firstmedia.com/api/content/tv-guide/list?date=${dayjs().format( - 'DD/MM/YYYY' - )}&channel=&startTime=0&endTime=24` - ) - .then(response => response.data) - .catch(console.error) - - const channels = [] - if (result.data && result.data.entries) { - Object.values(result.data.entries).forEach(schedules => { - if (schedules.length) { - channels.push({ - lang: 'en', - site_id: schedules[0].channel.no, - name: schedules[0].channel.name - }) - } - }) - } - - return channels - } -} - -function parseItems(content, channel) { - return JSON.parse(content.trim()).data.entries[channel] || [] -} - -function parseTitle(item) { - return item.title -} - -function parseDescription(item) { - return item.long_description -} - -function parseStart({ item, date }) { - return date.add(item.start, 'ms') -} - -function parseStop({ item, date }) { - return date.add(item.stop, 'ms') -} - -function toDelta(from, to) { - return toDate(to).diff(toDate(from), 'milliseconds') -} - -function toDate(date) { - return dayjs(date, 'YYYY-MM-DD HH:mm:ss') -} - -function asDate(date) { - return date.toISOString() -} diff --git a/sites/firstmedia.com/firstmedia.com.test.js b/sites/firstmedia.com/firstmedia.com.test.js deleted file mode 100644 index 21bdd7b87..000000000 --- a/sites/firstmedia.com/firstmedia.com.test.js +++ /dev/null @@ -1,38 +0,0 @@ -const { url, parser } = require('./firstmedia.com.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-08').startOf('d') -const channel = { site_id: '243', xmltv_id: 'AlJazeeraEnglish.qa', lang: 'id' } - -it('can generate valid url', () => { - expect(url({ channel, date })).toBe( - 'https://api.firstmedia.com/api/content/tv-guide/list?date=08/11/2023&channel=243&startTime=1&endTime=24' - ) -}) - -it('can parse response', () => { - const content = fs.readFileSync(path.resolve(__dirname, '__data__/content.json'), 'utf8') - const results = parser({ content, channel, date }) - - // All time in Asia/Jakarta - // 2023-11-08 17:00:00 -> 2023-11-08 20:00:00 = 2023-11-08 03:00:00 - // 2023-11-08 17:00:00 -> 2023-11-08 20:30:00 = 2023-11-08 03:30:00 - expect(results).toMatchObject([ - { - start: '2023-11-07T20:00:00.000Z', - stop: '2023-11-07T20:30:00.000Z', - title: 'News Live', - description: 'Up to date news and analysis from around the world.' - } - ]) -}) - -it('can handle empty guide', () => { - const results = parser({ content: '' }) - - expect(results).toMatchObject([]) -}) diff --git a/sites/firstmedia.com/readme.md b/sites/firstmedia.com/readme.md deleted file mode 100644 index 66e2bc2d1..000000000 --- a/sites/firstmedia.com/readme.md +++ /dev/null @@ -1,21 +0,0 @@ -# firstmedia.com - -https://www.firstmedia.com/product/tv-guide - -### Download the guide - -```sh -npm run grab --- --sites=firstmedia.com -``` - -### Update channel list - -```sh -npm run channels:parse --- --config=./sites/firstmedia.com/firstmedia.com.config.js --output=./sites/firstmedia.com/firstmedia.com.channels.xml -``` - -### Test - -```sh -npm test --- firstmedia.com -``` diff --git a/sites/freeview.co.uk/freeview.co.uk.channels.xml b/sites/freeview.co.uk/freeview.co.uk.channels.xml index eee24034c..5aaecde68 100644 --- a/sites/freeview.co.uk/freeview.co.uk.channels.xml +++ b/sites/freeview.co.uk/freeview.co.uk.channels.xml @@ -17,17 +17,16 @@ BBC Radio 2 BBC Radio 3 BBC Radio 4 - That's TV 3 Sonlife On Demand 365 Channelbox - That's Oldies CNA Originals GIGS - EuroNews Trailblazer Odyssey TV Ketchup Too + Music & Memories + Outdoor Channel ROK Global Arabic + Amazing Facts @@ -35,33 +34,83 @@ Nosey Shop On TV Purpose Media - LEGEND XTRA RNIB Connect Heart Capital Classic FM LBC - That's TV 2 SonLife Must Have Ideas - That's 80s Smooth Radio Hobbycraft TV Rewind TV Together TV IP - That's Melody Premier Radio Great! Player Great! Romance Mix - India Today MBC Group - wedotv movies + wedotv Big Stories It Is Written TV OUTflix Proud High Street TV Cartoon Classics wedotv Movies UK Nolly Africa + BBC Solent + BBC Solent Dorset + BBC Sussex + BBC Wiltshire + BBC Kent + BBC Oxford + BBC Gloucestershire + BBC Norfolk + BBC Northampton + BBC Cambridge + BBC Suffolk + BBC Bristol + BBC Somerset + BBC Cornwall + BBC Devon + BBC Guernsey + BBC Jersey + BBC WM + BBC Stoke + BBC Derby + BBC H&W + BBC Shropshire + BBC CWR + BBC Nottingham + BBC Lincolnshire + BBC Leicester + BBC Sheffield + BBC Humberside + BBC Leeds + BBC York + BBC Newcastle + BBC Cumbria + BBC Tees + BBC Manchester + BBC Lancashire + BBC Merseyside + BBC R5L + BBC 5SX + BBC 6 Music + BBC Radio 4 Ex + BBC R1X + BBC Asian Net. + BBC World Sv. + BBC R Scotland + BBC R n Gaidheal + BBC Radio 1 + BBC Radio 2 + BBC Radio 3 + BBC Radio 4 + BBC Radio Wales + BBC Radio Cymru + BBC Radio Cymru 2 + BBC Radio Ulster + BBC Radio Foyle + RTÉ RnaG 4seven 5ACTION 5SELECT @@ -72,52 +121,130 @@ Al Jazeera Arabic Al Jazeera English ASHARQ NEWS - BBC FOUR HD + BBC ALBA BBC FOUR + BBC FOUR HD BBC NEWS + BBC ONE CI + BBC ONE CI HD + BBC ONE East + BBC ONE East + BBC ONE EastHD + BBC ONE EastHD + BBC ONE E Mid + BBC ONE EMidHD BBC ONE Lon BBC ONE Lon HD + BBC ONE NE&C + BBC ONE NE&CHD + BBC ONE NI + BBC ONE NI HD + BBC ONE N West + BBC ONE NWstHD + BBC ONE Scot + BBC 1 Scot HD + BBC ONE South + BBC ONE South + BBC ONE S East + BBC ONE SE HD + BBC ONE Sth HD + BBC ONE Sth HD + BBC ONE S West + BBC ONE SW HD + BBC ONE Wales + BBC 1 Wales HD + BBC ONE West + BBC ONE WestHD + BBC ONE W Mid + BBC ONE WMidHD + BBC ONE Yorks + BBC ONE Yks HD + BBC ONE Yk&Li + BBC ONE Yk&LHD BBC Parliament BBC RB 1 + BBC Scotland HD + BBC Scotland BBC THREE HD BBC THREE BBC TWO BBC TWO HD + BBC TWO NI + BBC TWO NI HD + BBC TWO Wales + BBC 2 Wales HD Blaze+1 Blaze CBBC HD + CBBC HD + CBBC HD CBBC CBeebies HD CBeebies Challenge - Channel 4 HD - Channel 4+1 Channel 4 + Channel 4 HD + Channel 4+1 5 HD 5 +1 5 DMAX E4+1 + E4+1 E4 E4 Extra + EuroNews Film4+1 Film4 Food Network FRANCE 24 GB News Gemporia - God TV Great! Action Great! Mystery Great! Movies Great! Romance Great! TV - HGTV HobbyMaker + LEGEND XTRA Ideal World - ITV1 HD + ITV1 + ITV1 + ITV1+1 + ITV1 Border England + ITV1+1 + ITV1 Border Scotland + ITV1 HD + ITV1 + ITV1 + ITV1 HD + ITV1+1 + ITV1 + ITV1 + ITV1 HD + ITV1+1 ITV1 - ITV1+1 + ITV1 HD + ITV1+1 + ITV1 + ITV1 + ITV1 + ITV1 HD + ITV1+1 + ITV1 + ITV1+1 + ITV1 Wales + ITV1 Wales HD + ITV1+1 + ITV1 + ITV1 + ITV1 HD + ITV1+1 + ITV1+1 + ITV1 + ITV1 + ITV1 HD + ITV1+1 ITV2+1 ITV2 ITV3+1 @@ -127,6 +254,8 @@ ITV Quiz Jewellery Maker Ketchup TV + KMTV + Latest TV LEGEND London TV MBC @@ -134,36 +263,93 @@ Newsmax NHK WORLD PBS America - POP + POP POP UP - QUEST+1 + QUEST+1 QUEST Quest Red QVC2 QVC Really Revelation TV + RTÉ Two + RTÉ One + S4C HD + S4C Sky Arts Sky Mix Sky News + STV HD + STV+1 + STV + STV+1 + STV + Birmingham TV + Bristol TV + Cardiff TV TalkingPictures TV + Leeds TV + Liverpool TV + North Wales TV talkSPORT + Teesside TV Talk + Tyne & Wear TV TBN UK + TG4 + That's 20th Century MCR + That's 20th Century + That's 60s MCR + That's 60s + That's 70s + That's Classics + That's Entertainment + That's Oldies MCR + That's TV 2 MCR + That's TV 2 + That's TV + That's TV + That's TV + That's TV + That's TV + That's TV + That's TV + That's TV + That's TV + That's TV + That's TV + That's TV + That's TV + That's TV That's TV (UK) + That's TV + That's TV + That's TV + That's TV + That's TV + That's TV + That's TV (UK) MCR + That's TV + That's TV Tiny Pop TJC + TLC+1 + TLC Together TV+1 Together TV TRUE CRIME TRUE CRIME XTRA + TV Warehouse+1 + TV Warehouse U&Dave - U&DaveJaVu + U&DaveJaVu U&Drama+1 U&Drama U&Eden - U&W + UTV HD + UTV+1 + UTV + U&W U&Yesterday - WildEarth - YAAAS! + WildEarth
diff --git a/sites/freeview.co.uk/freeview.co.uk.config.js b/sites/freeview.co.uk/freeview.co.uk.config.js index e98f8302e..3a0f03d46 100644 --- a/sites/freeview.co.uk/freeview.co.uk.config.js +++ b/sites/freeview.co.uk/freeview.co.uk.config.js @@ -36,18 +36,25 @@ module.exports = { return programs }, async channels() { - const networkId = '64257' // Great London const startTimestamp = dayjs.utc().startOf('d').unix() - const data = await axios - .get(`https://www.freeview.co.uk/api/tv-guide?nid=${networkId}&start=${startTimestamp}`) - .then(r => r.data) - .catch(console.log) + let channels = [] + for (let networkId = 64257; networkId <= 64425; networkId++) { // loop through all valid networkIds starting from 64257 (Greater London) to 64425 (Belfast) to ensure we can get all the channels available on freeview + console.log(networkId) + const data = await axios + .get(`https://www.freeview.co.uk/api/tv-guide?nid=${networkId}&start=${startTimestamp}`) + .then(r => r.data) + .catch(console.log) - return data.data.programs.map(item => ({ - lang: 'en', - site_id: `${networkId}#${item.service_id}`, - name: item.title - })) + channels = channels.concat(data.data.programs.map(item => ({ + lang: 'en', + site_id: `${networkId}#${item.service_id}`, + name: item.title + }))) + } + const uniqueServiceIds = Array.from(new Set(channels.map(c => c.site_id.split('#')[1]))) + return uniqueServiceIds.map(serviceId => { + return channels.find(c => c.site_id.split('#')[1] === serviceId) + }) } } @@ -85,4 +92,4 @@ async function loadProgramDetails(item) { }) .catch(console.log) return data || {} -} \ No newline at end of file +} diff --git a/sites/indihometv.com/__data__/content.html b/sites/indihometv.com/__data__/content.html deleted file mode 100644 index 9feda34de..000000000 --- a/sites/indihometv.com/__data__/content.html +++ /dev/null @@ -1 +0,0 @@ -
\ No newline at end of file diff --git a/sites/indihometv.com/__data__/no_content.html b/sites/indihometv.com/__data__/no_content.html deleted file mode 100644 index 6fedfd4c7..000000000 --- a/sites/indihometv.com/__data__/no_content.html +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/sites/indihometv.com/indihometv.com.channels.xml b/sites/indihometv.com/indihometv.com.channels.xml deleted file mode 100644 index 85d06ca99..000000000 --- a/sites/indihometv.com/indihometv.com.channels.xml +++ /dev/null @@ -1,131 +0,0 @@ - - - ABC Australia - Asian Food Network - Aljazeera - AlQuran Kareem - Animal Planet - Animax - Aniplus - Antara - ANTV - Arirang - ATV - AXN - Bali TV - SPOTV - SPOTV 2 - BTV - Bioskop Indonesia - Bloomberg - Rock Entertainment - Rock Action - Cartoonito - Cartoon Network - CCTV4 - Citra Drama - Celestial Movie - CGTN Documentary - Chinese Drama - Cinema World - Citra Dangdut - CNBC Asia - CNBC Indonesia - CNN Indonesia - CNN International - Crime Investigation - Curiosity - Daai TV - Da Vinci Learning - Discovery Channel - Discovery Asia - Dreamworks - Dunia anak - Dunia Lain - DW (English) - Euronews - FashionTV - Fight Sport - Flik - France 24 - Galaxy - Galaxy Premium - HGTV - History - Hits - HIts Movie - HITS Now - Horee - Horizon Sports - Berita Satu - IDX - IMC - FunPlanet - Indosiar - iNews - JakTV - Jawa Pos TV - JTV - KBS World - Kix - Kompas TV - Kplus - Lifetime - Love Nature - Maxstream - Mentari TV - Metro TV - SINDO News TV - Moonbug - MQTV - MTATV - MTV Live - Muhammadiyah TV - MUI TV - Musik Indonesia - MyKidz - NBA - MDTV - News Asia - New Tv Comprehensive - New Tv Finance - New Tv Variety - nhk world Japan - Nickelodeon - Nick Junior - Nusantara TV - MOJI - Phoenix Chinese - Phoenix InfoNews - Prambors - Rodja TV - Rajawali TV - SCTV - Shenzen - SONE - Studio Universal - Tawaf TV - Thrill - TLC - Trans7 - TransTV - TV5Monde - TV9 NU - TVBS News - TVN - TVN Movies - TV One - TVRI Nasional - UChannel - AllPlay Ent - Warner - ZBioskop - Zhejiang - GTV - MNCTV - RCTI - RT - TVRI World - BBC World News - CBeebies - diff --git a/sites/indihometv.com/indihometv.com.config.js b/sites/indihometv.com/indihometv.com.config.js deleted file mode 100644 index cf943af82..000000000 --- a/sites/indihometv.com/indihometv.com.config.js +++ /dev/null @@ -1,92 +0,0 @@ -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) - -const tz = 'Asia/Jakarta' - -module.exports = { - site: 'indihometv.com', - days: 2, - url({ channel }) { - return `https://www.indihometv.com/livetv/${channel.site_id}` - }, - parser({ content, date }) { - const programs = [] - const [$, items] = parseItems(content, date) - items.forEach(item => { - const prev = programs[programs.length - 1] - const $item = $(item) - let start = parseStart($item, date) - if (prev && start.isBefore(prev.start)) { - start = start.add(1, 'd') - date = date.add(1, 'd') - } - let stop = parseStop($item, date) - if (stop.isBefore(start)) { - stop = stop.add(1, 'd') - date = date.add(1, 'd') - } - programs.push({ - title: parseTitle($item), - start, - stop - }) - }) - - return programs - }, - async channels() { - const axios = require('axios') - const cheerio = require('cheerio') - const data = await axios - .get('https://www.indihometv.com/tv/live') - .then(response => response.data) - .catch(console.error) - - const $ = cheerio.load(data) - const items = $('#channelContainer a.channel-item').toArray() - const channels = items.map(item => { - const $item = $(item) - - return { - lang: 'id', - site_id: $item.data('url').substr($item.data('url').lastIndexOf('/') + 1), - name: $item.data('name') - } - }) - - return channels - } -} - -function parseStart($item, date) { - const timeString = $item.find('p').text() - const [, start] = timeString.match(/(\d{2}:\d{2}) -/) || [null, null] - const dateString = `${date.format('YYYY-MM-DD')} ${start}` - - return dayjs.tz(dateString, 'YYYY-MM-DD HH:mm', tz) -} - -function parseStop($item, date) { - const timeString = $item.find('p').text() - const [, stop] = timeString.match(/- (\d{2}:\d{2})/) || [null, null] - const dateString = `${date.format('YYYY-MM-DD')} ${stop}` - - return dayjs.tz(dateString, 'YYYY-MM-DD HH:mm', tz) -} - -function parseTitle($item) { - return $item.find('b').text() -} - -function parseItems(content, date) { - const $ = cheerio.load(content) - - return [$, $(`#pills-${date.format('YYYY-MM-DD')} .schedule-item`).toArray()] -} diff --git a/sites/indihometv.com/indihometv.com.test.js b/sites/indihometv.com/indihometv.com.test.js deleted file mode 100644 index d84c0c24e..000000000 --- a/sites/indihometv.com/indihometv.com.test.js +++ /dev/null @@ -1,57 +0,0 @@ -const { parser, url } = require('./indihometv.com.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('2022-08-08').startOf('d') -const channel = { - site_id: 'metrotv', - xmltv_id: 'MetroTV.id' -} - -it('can generate valid url', () => { - expect(url({ channel })).toBe('https://www.indihometv.com/livetv/metrotv') -}) - -it('can parse response', () => { - const content = fs.readFileSync(path.resolve(__dirname, '__data__/content.html'), 'utf8') - const result = parser({ content, channel, date }).map(p => { - p.start = p.start.toJSON() - p.stop = p.stop.toJSON() - return p - }) - - expect(result).toMatchObject([ - { - title: 'Headline News', - start: '2022-08-08T00:00:00.000Z', - stop: '2022-08-08T00:05:00.000Z' - }, - { - title: 'Editorial Media Indonesia', - start: '2022-08-08T00:05:00.000Z', - stop: '2022-08-08T00:30:00.000Z' - }, - { - title: 'Editorial Media Indonesia', - start: '2022-08-08T00:30:00.000Z', - stop: '2022-08-08T00:45:00.000Z' - }, - { - title: 'Editorial Media Indonesia', - start: '2022-08-08T00:45:00.000Z', - stop: '2022-08-08T01:00:00.000Z' - } - ]) -}) - -it('can handle empty guide', () => { - const result = parser({ - date, - channel, - content: fs.readFileSync(path.resolve(__dirname, '__data__/no_content.html'), 'utf8') - }) - expect(result).toMatchObject([]) -}) diff --git a/sites/indihometv.com/readme.md b/sites/indihometv.com/readme.md deleted file mode 100644 index ccced056c..000000000 --- a/sites/indihometv.com/readme.md +++ /dev/null @@ -1,23 +0,0 @@ -# indihometv.com - -https://www.indihometv.com/ - -### Download the guide - -```sh -npm run grab --- --sites=indihometv.com -``` - -**NOTE:** Requests from some regions may return a "Connection timeout" error (https://check-host.net/check-report/13a843e2ke22). - -### Update channel list - -```sh -npm run channels:parse --- --config=./sites/indihometv.com/indihometv.com.config.js --output=./sites/indihometv.com/indihometv.com.channels.xml -``` - -### Test - -```sh -npm test --- indihometv.com -``` diff --git a/sites/ipko.tv/ipko.tv.channels.xml b/sites/ipko.tv/ipko.tv.channels.xml index d2695f745..5a64991d5 100644 --- a/sites/ipko.tv/ipko.tv.channels.xml +++ b/sites/ipko.tv/ipko.tv.channels.xml @@ -194,4 +194,11 @@ Ülke TV Vizion+ Zico TV + Tring Sport 1 + Tring Sport 2 + Tring Sport 3 + Tring Sport 4 + Tring Sport 5 + Tring Sport 6 + Tring Sport 7 diff --git a/sites/maxstream.tv/__data__/content.json b/sites/maxstream.tv/__data__/content.json new file mode 100644 index 000000000..6b233f699 --- /dev/null +++ b/sites/maxstream.tv/__data__/content.json @@ -0,0 +1,5365 @@ +{ + "serverTime": "2026-05-02", + "data": [ + { + "date": "2026-04-25", + "metadata": [ + { + "playUrlId": 30903381, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Fruits Basket Season 1 - Eps.16", + "description": "Tohru Honda tinggal bersama keluarga Soma yang menyimpan kutukan zodiak. Kehadirannya membawa kehangatan dan perlahan menyembuhkan luka emosional anggota keluarga tersebut melalui kasih dan pengertian.", + "startTime": "2026-04-25T00:00:00Z", + "endTime": "2026-04-25T00:30:00Z", + "thumbnail_url": "https://images.indihometv.com/tvod_thumbs/2026-04-25/30903381.webp", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903382, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Fruits Basket Season 1 - Eps.17", + "description": "Tohru Honda tinggal bersama keluarga Soma yang menyimpan kutukan zodiak. Kehadirannya membawa kehangatan dan perlahan menyembuhkan luka emosional anggota keluarga tersebut melalui kasih dan pengertian.", + "startTime": "2026-04-25T00:30:00Z", + "endTime": "2026-04-25T01:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903383, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Haikyu!! 4Th Season - Eps.16", + "description": "Karasuno melaju ke tingkat nasional dan menghadapi tim-tim kuat. Latihan intens dan pertandingan menegangkan menguji kemampuan individu serta kerja sama tim, terutama bagi Hinata yang berkembang pesat.", + "startTime": "2026-04-25T01:00:00Z", + "endTime": "2026-04-25T01:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903384, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Haikyu!! 4Th Season - Eps.17", + "description": "Karasuno melaju ke tingkat nasional dan menghadapi tim-tim kuat. Latihan intens dan pertandingan menegangkan menguji kemampuan individu serta kerja sama tim, terutama bagi Hinata yang berkembang pesat.", + "startTime": "2026-04-25T01:30:00Z", + "endTime": "2026-04-25T02:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903385, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Witch Watch - Eps.24", + "description": "Nico, penyihir ceroboh, tinggal bersama Morihito, ogre penjaganya. Kehidupan mereka dipenuhi kejadian magis yang kacau dan lucu, menciptakan komedi ringan dengan sentuhan fantasi dan hubungan unik.", + "startTime": "2026-04-25T02:00:00Z", + "endTime": "2026-04-25T02:30:00Z", + "thumbnail_url": "https://images.indihometv.com/tvod_thumbs/2026-04-25/30903385.webp", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903386, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Witch Watch - Eps.25", + "description": "Nico, penyihir ceroboh, tinggal bersama Morihito, ogre penjaganya. Kehidupan mereka dipenuhi kejadian magis yang kacau dan lucu, menciptakan komedi ringan dengan sentuhan fantasi dan hubungan unik.", + "startTime": "2026-04-25T02:30:00Z", + "endTime": "2026-04-25T03:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903387, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "I'Ll Become A Villainess Who Goes Down In History - Eps.9", + "description": "Seorang gadis bereinkarnasi sebagai karakter antagonis dalam dunia novel. Ia bertekad menjadi villain legendaris, namun tindakannya justru mengubah takdir dan menarik perhatian banyak orang di sekitarnya.", + "startTime": "2026-04-25T03:00:00Z", + "endTime": "2026-04-25T03:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903388, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "I'Ll Become A Villainess Who Goes Down In History - Eps.10", + "description": "Seorang gadis bereinkarnasi sebagai karakter antagonis dalam dunia novel. Ia bertekad menjadi villain legendaris, namun tindakannya justru mengubah takdir dan menarik perhatian banyak orang di sekitarnya.", + "startTime": "2026-04-25T03:30:00Z", + "endTime": "2026-04-25T04:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903389, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Fruits Basket Season 1 - Eps.16", + "description": "Tohru Honda tinggal bersama keluarga Soma yang menyimpan kutukan zodiak. Kehadirannya membawa kehangatan dan perlahan menyembuhkan luka emosional anggota keluarga tersebut melalui kasih dan pengertian.", + "startTime": "2026-04-25T04:00:00Z", + "endTime": "2026-04-25T04:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903390, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Fruits Basket Season 1 - Eps.17", + "description": "Tohru Honda tinggal bersama keluarga Soma yang menyimpan kutukan zodiak. Kehadirannya membawa kehangatan dan perlahan menyembuhkan luka emosional anggota keluarga tersebut melalui kasih dan pengertian.", + "startTime": "2026-04-25T04:30:00Z", + "endTime": "2026-04-25T05:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903391, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Haikyu!! 4Th Season - Eps.13", + "description": "Karasuno melaju ke tingkat nasional dan menghadapi tim-tim kuat. Latihan intens dan pertandingan menegangkan menguji kemampuan individu serta kerja sama tim, terutama bagi Hinata yang berkembang pesat.", + "startTime": "2026-04-25T05:00:00Z", + "endTime": "2026-04-25T05:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903392, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Haikyu!! 4Th Season - Eps.14", + "description": "Karasuno melaju ke tingkat nasional dan menghadapi tim-tim kuat. Latihan intens dan pertandingan menegangkan menguji kemampuan individu serta kerja sama tim, terutama bagi Hinata yang berkembang pesat.", + "startTime": "2026-04-25T05:30:00Z", + "endTime": "2026-04-25T06:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903393, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Haikyu!! 4Th Season - Eps.15", + "description": "Karasuno melaju ke tingkat nasional dan menghadapi tim-tim kuat. Latihan intens dan pertandingan menegangkan menguji kemampuan individu serta kerja sama tim, terutama bagi Hinata yang berkembang pesat.", + "startTime": "2026-04-25T06:00:00Z", + "endTime": "2026-04-25T06:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903394, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Haikyu!! 4Th Season - Eps.16", + "description": "Karasuno melaju ke tingkat nasional dan menghadapi tim-tim kuat. Latihan intens dan pertandingan menegangkan menguji kemampuan individu serta kerja sama tim, terutama bagi Hinata yang berkembang pesat.", + "startTime": "2026-04-25T06:30:00Z", + "endTime": "2026-04-25T07:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903395, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Haikyu!! 4Th Season - Eps.17", + "description": "Karasuno melaju ke tingkat nasional dan menghadapi tim-tim kuat. Latihan intens dan pertandingan menegangkan menguji kemampuan individu serta kerja sama tim, terutama bagi Hinata yang berkembang pesat.", + "startTime": "2026-04-25T07:00:00Z", + "endTime": "2026-04-25T07:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903396, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "The Do-Over Damsel Conquers The Dragon Emperor - Eps.5", + "description": "Seorang putri diberi kesempatan mengulang hidupnya setelah kematian tragis. Ia berusaha mengubah nasib dengan mendekati kaisar naga, menghadirkan kisah romansa politik dan strategi bertahan hidup.", + "startTime": "2026-04-25T07:30:00Z", + "endTime": "2026-04-25T08:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903397, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "The Do-Over Damsel Conquers The Dragon Emperor - Eps.6", + "description": "Seorang putri diberi kesempatan mengulang hidupnya setelah kematian tragis. Ia berusaha mengubah nasib dengan mendekati kaisar naga, menghadirkan kisah romansa politik dan strategi bertahan hidup.", + "startTime": "2026-04-25T08:00:00Z", + "endTime": "2026-04-25T08:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903398, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "The Do-Over Damsel Conquers The Dragon Emperor - Eps.7", + "description": "Seorang putri diberi kesempatan mengulang hidupnya setelah kematian tragis. Ia berusaha mengubah nasib dengan mendekati kaisar naga, menghadirkan kisah romansa politik dan strategi bertahan hidup.", + "startTime": "2026-04-25T08:30:00Z", + "endTime": "2026-04-25T09:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903399, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "The Do-Over Damsel Conquers The Dragon Emperor - Eps.8", + "description": "Seorang putri diberi kesempatan mengulang hidupnya setelah kematian tragis. Ia berusaha mengubah nasib dengan mendekati kaisar naga, menghadirkan kisah romansa politik dan strategi bertahan hidup.", + "startTime": "2026-04-25T09:00:00Z", + "endTime": "2026-04-25T09:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903400, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "One Piece: Marineford Arc - Eps.496", + "description": "Luffy berusaha menyelamatkan Ace dalam perang besar di Marineford. Pertempuran epik antara Angkatan Laut dan Bajak Laut Shirohige ini penuh pengorbanan, tragedi, dan momen yang mengubah dunia One Piece.", + "startTime": "2026-04-25T09:30:00Z", + "endTime": "2026-04-25T10:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903401, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "One Piece: Marineford Arc - Eps.497", + "description": "Luffy berusaha menyelamatkan Ace dalam perang besar di Marineford. Pertempuran epik antara Angkatan Laut dan Bajak Laut Shirohige ini penuh pengorbanan, tragedi, dan momen yang mengubah dunia One Piece.", + "startTime": "2026-04-25T10:00:00Z", + "endTime": "2026-04-25T10:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903402, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "One Piece: Marineford Arc - Eps.498", + "description": "Luffy berusaha menyelamatkan Ace dalam perang besar di Marineford. Pertempuran epik antara Angkatan Laut dan Bajak Laut Shirohige ini penuh pengorbanan, tragedi, dan momen yang mengubah dunia One Piece.", + "startTime": "2026-04-25T10:30:00Z", + "endTime": "2026-04-25T11:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903403, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Godzilla Minus One - Eps.", + "description": "Jepang pascaperang menghadapi ancaman baru saat Godzilla muncul. Film ini menyoroti perjuangan manusia yang rapuh melawan kehancuran, dengan drama emosional dan aksi spektakuler yang intens.", + "startTime": "2026-04-25T11:00:00Z", + "endTime": "2026-04-25T13:30:00Z", + "thumbnail_url": "https://images.indihometv.com/tvod_thumbs/2026-04-25/30903403.webp", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903404, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Haikyu!! 4Th Season - Eps.13", + "description": "Karasuno melaju ke tingkat nasional dan menghadapi tim-tim kuat. Latihan intens dan pertandingan menegangkan menguji kemampuan individu serta kerja sama tim, terutama bagi Hinata yang berkembang pesat.", + "startTime": "2026-04-25T13:30:00Z", + "endTime": "2026-04-25T14:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903405, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Haikyu!! 4Th Season - Eps.14", + "description": "Karasuno melaju ke tingkat nasional dan menghadapi tim-tim kuat. Latihan intens dan pertandingan menegangkan menguji kemampuan individu serta kerja sama tim, terutama bagi Hinata yang berkembang pesat.", + "startTime": "2026-04-25T14:00:00Z", + "endTime": "2026-04-25T14:30:00Z", + "thumbnail_url": "https://images.indihometv.com/tvod_thumbs/2026-04-25/30903405.webp", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903406, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "The Do-Over Damsel Conquers The Dragon Emperor - Eps.5", + "description": "Seorang putri diberi kesempatan mengulang hidupnya setelah kematian tragis. Ia berusaha mengubah nasib dengan mendekati kaisar naga, menghadirkan kisah romansa politik dan strategi bertahan hidup.", + "startTime": "2026-04-25T14:30:00Z", + "endTime": "2026-04-25T15:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903407, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "The Do-Over Damsel Conquers The Dragon Emperor - Eps.6", + "description": "Seorang putri diberi kesempatan mengulang hidupnya setelah kematian tragis. Ia berusaha mengubah nasib dengan mendekati kaisar naga, menghadirkan kisah romansa politik dan strategi bertahan hidup.", + "startTime": "2026-04-25T15:00:00Z", + "endTime": "2026-04-25T15:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903408, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "The Do-Over Damsel Conquers The Dragon Emperor - Eps.7", + "description": "Seorang putri diberi kesempatan mengulang hidupnya setelah kematian tragis. Ia berusaha mengubah nasib dengan mendekati kaisar naga, menghadirkan kisah romansa politik dan strategi bertahan hidup.", + "startTime": "2026-04-25T15:30:00Z", + "endTime": "2026-04-25T15:58:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903409, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "The Do-Over Damsel Conquers The Dragon Emperor - Eps.8", + "description": "Seorang putri diberi kesempatan mengulang hidupnya setelah kematian tragis. Ia berusaha mengubah nasib dengan mendekati kaisar naga, menghadirkan kisah romansa politik dan strategi bertahan hidup.", + "startTime": "2026-04-25T15:58:00Z", + "endTime": "2026-04-25T16:30:00Z", + "thumbnail_url": "https://images.indihometv.com/tvod_thumbs/2026-04-25/30903409.webp", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903410, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Tsukimichi -Moonlit Fantasy- Season 2 - Eps.6", + "description": "Makoto melanjutkan petualangannya di dunia lain, membangun kekuatan dan aliansi baru. Konflik dengan dewa dan kerajaan semakin kompleks, menampilkan aksi, strategi, dan perkembangan karakter utama.", + "startTime": "2026-04-25T16:30:00Z", + "endTime": "2026-04-25T17:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903411, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Tsukimichi -Moonlit Fantasy- Season 2 - Eps.7", + "description": "Makoto melanjutkan petualangannya di dunia lain, membangun kekuatan dan aliansi baru. Konflik dengan dewa dan kerajaan semakin kompleks, menampilkan aksi, strategi, dan perkembangan karakter utama.", + "startTime": "2026-04-25T17:00:00Z", + "endTime": "2026-04-25T17:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903412, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Tsukimichi -Moonlit Fantasy- Season 2 - Eps.8", + "description": "Makoto melanjutkan petualangannya di dunia lain, membangun kekuatan dan aliansi baru. Konflik dengan dewa dan kerajaan semakin kompleks, menampilkan aksi, strategi, dan perkembangan karakter utama.", + "startTime": "2026-04-25T17:30:00Z", + "endTime": "2026-04-25T17:58:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903413, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "I'Ll Become A Villainess Who Goes Down In History - Eps.9", + "description": "Seorang gadis bereinkarnasi sebagai karakter antagonis dalam dunia novel. Ia bertekad menjadi villain legendaris, namun tindakannya justru mengubah takdir dan menarik perhatian banyak orang di sekitarnya.", + "startTime": "2026-04-25T17:58:00Z", + "endTime": "2026-04-25T18:28:00Z", + "thumbnail_url": "https://images.indihometv.com/tvod_thumbs/2026-04-25/30903413.webp", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903414, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "I'Ll Become A Villainess Who Goes Down In History - Eps.10", + "description": "Seorang gadis bereinkarnasi sebagai karakter antagonis dalam dunia novel. Ia bertekad menjadi villain legendaris, namun tindakannya justru mengubah takdir dan menarik perhatian banyak orang di sekitarnya.", + "startTime": "2026-04-25T18:28:00Z", + "endTime": "2026-04-25T19:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903415, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "One Piece: Marineford Arc - Eps.496", + "description": "Luffy berusaha menyelamatkan Ace dalam perang besar di Marineford. Pertempuran epik antara Angkatan Laut dan Bajak Laut Shirohige ini penuh pengorbanan, tragedi, dan momen yang mengubah dunia One Piece.", + "startTime": "2026-04-25T19:00:00Z", + "endTime": "2026-04-25T19:28:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903416, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "One Piece: Marineford Arc - Eps.497", + "description": "Luffy berusaha menyelamatkan Ace dalam perang besar di Marineford. Pertempuran epik antara Angkatan Laut dan Bajak Laut Shirohige ini penuh pengorbanan, tragedi, dan momen yang mengubah dunia One Piece.", + "startTime": "2026-04-25T19:28:00Z", + "endTime": "2026-04-25T19:58:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903417, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "One Piece: Marineford Arc - Eps.498", + "description": "Luffy berusaha menyelamatkan Ace dalam perang besar di Marineford. Pertempuran epik antara Angkatan Laut dan Bajak Laut Shirohige ini penuh pengorbanan, tragedi, dan momen yang mengubah dunia One Piece.", + "startTime": "2026-04-25T19:58:00Z", + "endTime": "2026-04-25T20:30:00Z", + "thumbnail_url": "https://images.indihometv.com/tvod_thumbs/2026-04-25/30903417.webp", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903418, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Haikyu!! 4Th Season - Eps.13", + "description": "Karasuno melaju ke tingkat nasional dan menghadapi tim-tim kuat. Latihan intens dan pertandingan menegangkan menguji kemampuan individu serta kerja sama tim, terutama bagi Hinata yang berkembang pesat.", + "startTime": "2026-04-25T20:30:00Z", + "endTime": "2026-04-25T21:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903419, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Haikyu!! 4Th Season - Eps.14", + "description": "Karasuno melaju ke tingkat nasional dan menghadapi tim-tim kuat. Latihan intens dan pertandingan menegangkan menguji kemampuan individu serta kerja sama tim, terutama bagi Hinata yang berkembang pesat.", + "startTime": "2026-04-25T21:00:00Z", + "endTime": "2026-04-25T21:28:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903420, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Haikyu!! 4Th Season - Eps.15", + "description": "Karasuno melaju ke tingkat nasional dan menghadapi tim-tim kuat. Latihan intens dan pertandingan menegangkan menguji kemampuan individu serta kerja sama tim, terutama bagi Hinata yang berkembang pesat.", + "startTime": "2026-04-25T21:28:00Z", + "endTime": "2026-04-25T21:58:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903421, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Haikyu!! 4Th Season - Eps.16", + "description": "Karasuno melaju ke tingkat nasional dan menghadapi tim-tim kuat. Latihan intens dan pertandingan menegangkan menguji kemampuan individu serta kerja sama tim, terutama bagi Hinata yang berkembang pesat.", + "startTime": "2026-04-25T21:58:00Z", + "endTime": "2026-04-25T22:26:00Z", + "thumbnail_url": "https://images.indihometv.com/tvod_thumbs/2026-04-25/30903421.webp", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903422, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Haikyu!! 4Th Season - Eps.17", + "description": "Karasuno melaju ke tingkat nasional dan menghadapi tim-tim kuat. Latihan intens dan pertandingan menegangkan menguji kemampuan individu serta kerja sama tim, terutama bagi Hinata yang berkembang pesat.", + "startTime": "2026-04-25T22:26:00Z", + "endTime": "2026-04-25T23:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903423, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "The Do-Over Damsel Conquers The Dragon Emperor - Eps.5", + "description": "Seorang putri diberi kesempatan mengulang hidupnya setelah kematian tragis. Ia berusaha mengubah nasib dengan mendekati kaisar naga, menghadirkan kisah romansa politik dan strategi bertahan hidup.", + "startTime": "2026-04-25T23:00:00Z", + "endTime": "2026-04-25T23:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903424, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "The Do-Over Damsel Conquers The Dragon Emperor - Eps.6", + "description": "Seorang putri diberi kesempatan mengulang hidupnya setelah kematian tragis. Ia berusaha mengubah nasib dengan mendekati kaisar naga, menghadirkan kisah romansa politik dan strategi bertahan hidup.", + "startTime": "2026-04-25T23:30:00Z", + "endTime": "2026-04-26T00:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + } + ] + }, + { + "date": "2026-04-26", + "metadata": [ + { + "playUrlId": 30903425, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "The Do-Over Damsel Conquers The Dragon Emperor - Eps.7", + "description": "Seorang putri diberi kesempatan mengulang hidupnya setelah kematian tragis. Ia berusaha mengubah nasib dengan mendekati kaisar naga, menghadirkan kisah romansa politik dan strategi bertahan hidup.", + "startTime": "2026-04-26T00:00:00Z", + "endTime": "2026-04-26T00:30:00Z", + "thumbnail_url": "https://images.indihometv.com/tvod_thumbs/2026-04-26/30903425.webp", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903426, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "The Do-Over Damsel Conquers The Dragon Emperor - Eps.8", + "description": "Seorang putri diberi kesempatan mengulang hidupnya setelah kematian tragis. Ia berusaha mengubah nasib dengan mendekati kaisar naga, menghadirkan kisah romansa politik dan strategi bertahan hidup.", + "startTime": "2026-04-26T00:30:00Z", + "endTime": "2026-04-26T01:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903427, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Tsukimichi -Moonlit Fantasy- Season 2 - Eps.6", + "description": "Makoto melanjutkan petualangannya di dunia lain, membangun kekuatan dan aliansi baru. Konflik dengan dewa dan kerajaan semakin kompleks, menampilkan aksi, strategi, dan perkembangan karakter utama.", + "startTime": "2026-04-26T01:00:00Z", + "endTime": "2026-04-26T01:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903428, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Tsukimichi -Moonlit Fantasy- Season 2 - Eps.7", + "description": "Makoto melanjutkan petualangannya di dunia lain, membangun kekuatan dan aliansi baru. Konflik dengan dewa dan kerajaan semakin kompleks, menampilkan aksi, strategi, dan perkembangan karakter utama.", + "startTime": "2026-04-26T01:30:00Z", + "endTime": "2026-04-26T02:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903429, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Tsukimichi -Moonlit Fantasy- Season 2 - Eps.8", + "description": "Makoto melanjutkan petualangannya di dunia lain, membangun kekuatan dan aliansi baru. Konflik dengan dewa dan kerajaan semakin kompleks, menampilkan aksi, strategi, dan perkembangan karakter utama.", + "startTime": "2026-04-26T02:00:00Z", + "endTime": "2026-04-26T02:30:00Z", + "thumbnail_url": "https://images.indihometv.com/tvod_thumbs/2026-04-26/30903429.webp", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903430, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "I'Ll Become A Villainess Who Goes Down In History - Eps.9", + "description": "Seorang gadis bereinkarnasi sebagai karakter antagonis dalam dunia novel. Ia bertekad menjadi villain legendaris, namun tindakannya justru mengubah takdir dan menarik perhatian banyak orang di sekitarnya.", + "startTime": "2026-04-26T02:30:00Z", + "endTime": "2026-04-26T03:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903431, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "I'Ll Become A Villainess Who Goes Down In History - Eps.10", + "description": "Seorang gadis bereinkarnasi sebagai karakter antagonis dalam dunia novel. Ia bertekad menjadi villain legendaris, namun tindakannya justru mengubah takdir dan menarik perhatian banyak orang di sekitarnya.", + "startTime": "2026-04-26T03:00:00Z", + "endTime": "2026-04-26T03:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903432, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "One Piece: Marineford Arc - Eps.496", + "description": "Luffy berusaha menyelamatkan Ace dalam perang besar di Marineford. Pertempuran epik antara Angkatan Laut dan Bajak Laut Shirohige ini penuh pengorbanan, tragedi, dan momen yang mengubah dunia One Piece.", + "startTime": "2026-04-26T03:30:00Z", + "endTime": "2026-04-26T04:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903433, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "One Piece: Marineford Arc - Eps.497", + "description": "Luffy berusaha menyelamatkan Ace dalam perang besar di Marineford. Pertempuran epik antara Angkatan Laut dan Bajak Laut Shirohige ini penuh pengorbanan, tragedi, dan momen yang mengubah dunia One Piece.", + "startTime": "2026-04-26T04:00:00Z", + "endTime": "2026-04-26T04:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903434, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "One Piece: Marineford Arc - Eps.498", + "description": "Luffy berusaha menyelamatkan Ace dalam perang besar di Marineford. Pertempuran epik antara Angkatan Laut dan Bajak Laut Shirohige ini penuh pengorbanan, tragedi, dan momen yang mengubah dunia One Piece.", + "startTime": "2026-04-26T04:30:00Z", + "endTime": "2026-04-26T05:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903435, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Fruits Basket Season 1 - Eps.15", + "description": "Tohru Honda tinggal bersama keluarga Soma yang menyimpan kutukan zodiak. Kehadirannya membawa kehangatan dan perlahan menyembuhkan luka emosional anggota keluarga tersebut melalui kasih dan pengertian.", + "startTime": "2026-04-26T05:00:00Z", + "endTime": "2026-04-26T05:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903436, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Fruits Basket Season 1 - Eps.16", + "description": "Tohru Honda tinggal bersama keluarga Soma yang menyimpan kutukan zodiak. Kehadirannya membawa kehangatan dan perlahan menyembuhkan luka emosional anggota keluarga tersebut melalui kasih dan pengertian.", + "startTime": "2026-04-26T05:30:00Z", + "endTime": "2026-04-26T06:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903437, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Fruits Basket Season 1 - Eps.17", + "description": "Tohru Honda tinggal bersama keluarga Soma yang menyimpan kutukan zodiak. Kehadirannya membawa kehangatan dan perlahan menyembuhkan luka emosional anggota keluarga tersebut melalui kasih dan pengertian.", + "startTime": "2026-04-26T06:00:00Z", + "endTime": "2026-04-26T06:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903438, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Tsukimichi -Moonlit Fantasy- Season 2 - Eps.6", + "description": "Makoto melanjutkan petualangannya di dunia lain, membangun kekuatan dan aliansi baru. Konflik dengan dewa dan kerajaan semakin kompleks, menampilkan aksi, strategi, dan perkembangan karakter utama.", + "startTime": "2026-04-26T06:30:00Z", + "endTime": "2026-04-26T07:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903439, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Tsukimichi -Moonlit Fantasy- Season 2 - Eps.7", + "description": "Makoto melanjutkan petualangannya di dunia lain, membangun kekuatan dan aliansi baru. Konflik dengan dewa dan kerajaan semakin kompleks, menampilkan aksi, strategi, dan perkembangan karakter utama.", + "startTime": "2026-04-26T07:00:00Z", + "endTime": "2026-04-26T07:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903440, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Tsukimichi -Moonlit Fantasy- Season 2 - Eps.8", + "description": "Makoto melanjutkan petualangannya di dunia lain, membangun kekuatan dan aliansi baru. Konflik dengan dewa dan kerajaan semakin kompleks, menampilkan aksi, strategi, dan perkembangan karakter utama.", + "startTime": "2026-04-26T07:30:00Z", + "endTime": "2026-04-26T08:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903441, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Witch Watch - Eps.23", + "description": "Nico, penyihir ceroboh, tinggal bersama Morihito, ogre penjaganya. Kehidupan mereka dipenuhi kejadian magis yang kacau dan lucu, menciptakan komedi ringan dengan sentuhan fantasi dan hubungan unik.", + "startTime": "2026-04-26T08:00:00Z", + "endTime": "2026-04-26T08:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903442, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Witch Watch - Eps.24", + "description": "Nico, penyihir ceroboh, tinggal bersama Morihito, ogre penjaganya. Kehidupan mereka dipenuhi kejadian magis yang kacau dan lucu, menciptakan komedi ringan dengan sentuhan fantasi dan hubungan unik.", + "startTime": "2026-04-26T08:30:00Z", + "endTime": "2026-04-26T09:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903443, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Witch Watch - Eps.25", + "description": "Nico, penyihir ceroboh, tinggal bersama Morihito, ogre penjaganya. Kehidupan mereka dipenuhi kejadian magis yang kacau dan lucu, menciptakan komedi ringan dengan sentuhan fantasi dan hubungan unik.", + "startTime": "2026-04-26T09:00:00Z", + "endTime": "2026-04-26T09:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903444, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Haikyu!! 4Th Season - Eps.15", + "description": "Karasuno melaju ke tingkat nasional dan menghadapi tim-tim kuat. Latihan intens dan pertandingan menegangkan menguji kemampuan individu serta kerja sama tim, terutama bagi Hinata yang berkembang pesat.", + "startTime": "2026-04-26T09:30:00Z", + "endTime": "2026-04-26T10:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903445, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "I'Ll Become A Villainess Who Goes Down In History - Eps.9", + "description": "Seorang gadis bereinkarnasi sebagai karakter antagonis dalam dunia novel. Ia bertekad menjadi villain legendaris, namun tindakannya justru mengubah takdir dan menarik perhatian banyak orang di sekitarnya.", + "startTime": "2026-04-26T10:00:00Z", + "endTime": "2026-04-26T10:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903446, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "I'Ll Become A Villainess Who Goes Down In History - Eps.10", + "description": "Seorang gadis bereinkarnasi sebagai karakter antagonis dalam dunia novel. Ia bertekad menjadi villain legendaris, namun tindakannya justru mengubah takdir dan menarik perhatian banyak orang di sekitarnya.", + "startTime": "2026-04-26T10:30:00Z", + "endTime": "2026-04-26T11:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903447, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "One Piece: Marineford Arc - Eps.496", + "description": "Luffy berusaha menyelamatkan Ace dalam perang besar di Marineford. Pertempuran epik antara Angkatan Laut dan Bajak Laut Shirohige ini penuh pengorbanan, tragedi, dan momen yang mengubah dunia One Piece.", + "startTime": "2026-04-26T11:00:00Z", + "endTime": "2026-04-26T11:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903448, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "One Piece: Marineford Arc - Eps.497", + "description": "Luffy berusaha menyelamatkan Ace dalam perang besar di Marineford. Pertempuran epik antara Angkatan Laut dan Bajak Laut Shirohige ini penuh pengorbanan, tragedi, dan momen yang mengubah dunia One Piece.", + "startTime": "2026-04-26T11:30:00Z", + "endTime": "2026-04-26T12:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903449, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "One Piece: Marineford Arc - Eps.498", + "description": "Luffy berusaha menyelamatkan Ace dalam perang besar di Marineford. Pertempuran epik antara Angkatan Laut dan Bajak Laut Shirohige ini penuh pengorbanan, tragedi, dan momen yang mengubah dunia One Piece.", + "startTime": "2026-04-26T12:00:00Z", + "endTime": "2026-04-26T12:30:00Z", + "thumbnail_url": "https://images.indihometv.com/tvod_thumbs/2026-04-26/30903449.webp", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903450, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Witch Watch - Eps.23", + "description": "Nico, penyihir ceroboh, tinggal bersama Morihito, ogre penjaganya. Kehidupan mereka dipenuhi kejadian magis yang kacau dan lucu, menciptakan komedi ringan dengan sentuhan fantasi dan hubungan unik.", + "startTime": "2026-04-26T12:30:00Z", + "endTime": "2026-04-26T13:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903451, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Witch Watch - Eps.24", + "description": "Nico, penyihir ceroboh, tinggal bersama Morihito, ogre penjaganya. Kehidupan mereka dipenuhi kejadian magis yang kacau dan lucu, menciptakan komedi ringan dengan sentuhan fantasi dan hubungan unik.", + "startTime": "2026-04-26T13:00:00Z", + "endTime": "2026-04-26T13:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903452, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Witch Watch - Eps.25", + "description": "Nico, penyihir ceroboh, tinggal bersama Morihito, ogre penjaganya. Kehidupan mereka dipenuhi kejadian magis yang kacau dan lucu, menciptakan komedi ringan dengan sentuhan fantasi dan hubungan unik.", + "startTime": "2026-04-26T13:30:00Z", + "endTime": "2026-04-26T14:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903453, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Haikyu!! 4Th Season - Eps.16", + "description": "Karasuno melaju ke tingkat nasional dan menghadapi tim-tim kuat. Latihan intens dan pertandingan menegangkan menguji kemampuan individu serta kerja sama tim, terutama bagi Hinata yang berkembang pesat.", + "startTime": "2026-04-26T14:00:00Z", + "endTime": "2026-04-26T14:30:00Z", + "thumbnail_url": "https://images.indihometv.com/tvod_thumbs/2026-04-26/30903453.webp", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903454, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Tsukimichi -Moonlit Fantasy- Season 2 - Eps.6", + "description": "Makoto melanjutkan petualangannya di dunia lain, membangun kekuatan dan aliansi baru. Konflik dengan dewa dan kerajaan semakin kompleks, menampilkan aksi, strategi, dan perkembangan karakter utama.", + "startTime": "2026-04-26T14:30:00Z", + "endTime": "2026-04-26T14:58:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903455, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Tsukimichi -Moonlit Fantasy- Season 2 - Eps.7", + "description": "Makoto melanjutkan petualangannya di dunia lain, membangun kekuatan dan aliansi baru. Konflik dengan dewa dan kerajaan semakin kompleks, menampilkan aksi, strategi, dan perkembangan karakter utama.", + "startTime": "2026-04-26T14:58:00Z", + "endTime": "2026-04-26T15:28:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903456, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Tsukimichi -Moonlit Fantasy- Season 2 - Eps.8", + "description": "Makoto melanjutkan petualangannya di dunia lain, membangun kekuatan dan aliansi baru. Konflik dengan dewa dan kerajaan semakin kompleks, menampilkan aksi, strategi, dan perkembangan karakter utama.", + "startTime": "2026-04-26T15:28:00Z", + "endTime": "2026-04-26T16:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903457, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "I'Ll Become A Villainess Who Goes Down In History - Eps.9", + "description": "Seorang gadis bereinkarnasi sebagai karakter antagonis dalam dunia novel. Ia bertekad menjadi villain legendaris, namun tindakannya justru mengubah takdir dan menarik perhatian banyak orang di sekitarnya.", + "startTime": "2026-04-26T16:00:00Z", + "endTime": "2026-04-26T16:30:00Z", + "thumbnail_url": "https://images.indihometv.com/tvod_thumbs/2026-04-26/30903457.webp", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903458, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "I'Ll Become A Villainess Who Goes Down In History - Eps.10", + "description": "Seorang gadis bereinkarnasi sebagai karakter antagonis dalam dunia novel. Ia bertekad menjadi villain legendaris, namun tindakannya justru mengubah takdir dan menarik perhatian banyak orang di sekitarnya.", + "startTime": "2026-04-26T16:30:00Z", + "endTime": "2026-04-26T17:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903459, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Fruits Basket Season 1 - Eps.15", + "description": "Tohru Honda tinggal bersama keluarga Soma yang menyimpan kutukan zodiak. Kehadirannya membawa kehangatan dan perlahan menyembuhkan luka emosional anggota keluarga tersebut melalui kasih dan pengertian.", + "startTime": "2026-04-26T17:00:00Z", + "endTime": "2026-04-26T17:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903460, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Fruits Basket Season 1 - Eps.16", + "description": "Tohru Honda tinggal bersama keluarga Soma yang menyimpan kutukan zodiak. Kehadirannya membawa kehangatan dan perlahan menyembuhkan luka emosional anggota keluarga tersebut melalui kasih dan pengertian.", + "startTime": "2026-04-26T17:30:00Z", + "endTime": "2026-04-26T17:58:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903461, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Fruits Basket Season 1 - Eps.17", + "description": "Tohru Honda tinggal bersama keluarga Soma yang menyimpan kutukan zodiak. Kehadirannya membawa kehangatan dan perlahan menyembuhkan luka emosional anggota keluarga tersebut melalui kasih dan pengertian.", + "startTime": "2026-04-26T17:58:00Z", + "endTime": "2026-04-26T18:30:00Z", + "thumbnail_url": "https://images.indihometv.com/tvod_thumbs/2026-04-26/30903461.webp", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903462, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Tsukimichi -Moonlit Fantasy- Season 2 - Eps.6", + "description": "Makoto melanjutkan petualangannya di dunia lain, membangun kekuatan dan aliansi baru. Konflik dengan dewa dan kerajaan semakin kompleks, menampilkan aksi, strategi, dan perkembangan karakter utama.", + "startTime": "2026-04-26T18:30:00Z", + "endTime": "2026-04-26T18:58:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903463, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Tsukimichi -Moonlit Fantasy- Season 2 - Eps.7", + "description": "Makoto melanjutkan petualangannya di dunia lain, membangun kekuatan dan aliansi baru. Konflik dengan dewa dan kerajaan semakin kompleks, menampilkan aksi, strategi, dan perkembangan karakter utama.", + "startTime": "2026-04-26T18:58:00Z", + "endTime": "2026-04-26T19:28:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903464, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Tsukimichi -Moonlit Fantasy- Season 2 - Eps.8", + "description": "Makoto melanjutkan petualangannya di dunia lain, membangun kekuatan dan aliansi baru. Konflik dengan dewa dan kerajaan semakin kompleks, menampilkan aksi, strategi, dan perkembangan karakter utama.", + "startTime": "2026-04-26T19:28:00Z", + "endTime": "2026-04-26T20:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903465, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Witch Watch - Eps.23", + "description": "Nico, penyihir ceroboh, tinggal bersama Morihito, ogre penjaganya. Kehidupan mereka dipenuhi kejadian magis yang kacau dan lucu, menciptakan komedi ringan dengan sentuhan fantasi dan hubungan unik.", + "startTime": "2026-04-26T20:00:00Z", + "endTime": "2026-04-26T20:28:00Z", + "thumbnail_url": "https://images.indihometv.com/tvod_thumbs/2026-04-26/30903465.webp", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903466, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Witch Watch - Eps.24", + "description": "Nico, penyihir ceroboh, tinggal bersama Morihito, ogre penjaganya. Kehidupan mereka dipenuhi kejadian magis yang kacau dan lucu, menciptakan komedi ringan dengan sentuhan fantasi dan hubungan unik.", + "startTime": "2026-04-26T20:28:00Z", + "endTime": "2026-04-26T20:58:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903467, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Witch Watch - Eps.25", + "description": "Nico, penyihir ceroboh, tinggal bersama Morihito, ogre penjaganya. Kehidupan mereka dipenuhi kejadian magis yang kacau dan lucu, menciptakan komedi ringan dengan sentuhan fantasi dan hubungan unik.", + "startTime": "2026-04-26T20:58:00Z", + "endTime": "2026-04-26T21:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903468, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Haikyu!! 4Th Season - Eps.17", + "description": "Karasuno melaju ke tingkat nasional dan menghadapi tim-tim kuat. Latihan intens dan pertandingan menegangkan menguji kemampuan individu serta kerja sama tim, terutama bagi Hinata yang berkembang pesat.", + "startTime": "2026-04-26T21:30:00Z", + "endTime": "2026-04-26T22:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903469, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Fruits Basket Season 1 - Eps.15", + "description": "Tohru Honda tinggal bersama keluarga Soma yang menyimpan kutukan zodiak. Kehadirannya membawa kehangatan dan perlahan menyembuhkan luka emosional anggota keluarga tersebut melalui kasih dan pengertian.", + "startTime": "2026-04-26T22:00:00Z", + "endTime": "2026-04-26T22:28:00Z", + "thumbnail_url": "https://images.indihometv.com/tvod_thumbs/2026-04-26/30903469.webp", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903470, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Fruits Basket Season 1 - Eps.16", + "description": "Tohru Honda tinggal bersama keluarga Soma yang menyimpan kutukan zodiak. Kehadirannya membawa kehangatan dan perlahan menyembuhkan luka emosional anggota keluarga tersebut melalui kasih dan pengertian.", + "startTime": "2026-04-26T22:28:00Z", + "endTime": "2026-04-26T22:58:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903471, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Fruits Basket Season 1 - Eps.17", + "description": "Tohru Honda tinggal bersama keluarga Soma yang menyimpan kutukan zodiak. Kehadirannya membawa kehangatan dan perlahan menyembuhkan luka emosional anggota keluarga tersebut melalui kasih dan pengertian.", + "startTime": "2026-04-26T22:58:00Z", + "endTime": "2026-04-26T23:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903472, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "One Piece: Marineford Arc - Eps.496", + "description": "Luffy berusaha menyelamatkan Ace dalam perang besar di Marineford. Pertempuran epik antara Angkatan Laut dan Bajak Laut Shirohige ini penuh pengorbanan, tragedi, dan momen yang mengubah dunia One Piece.", + "startTime": "2026-04-26T23:30:00Z", + "endTime": "2026-04-27T00:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + } + ] + }, + { + "date": "2026-04-27", + "metadata": [ + { + "playUrlId": 30903473, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "One Piece: Marineford Arc - Eps.497", + "description": "Luffy berusaha menyelamatkan Ace dalam perang besar di Marineford. Pertempuran epik antara Angkatan Laut dan Bajak Laut Shirohige ini penuh pengorbanan, tragedi, dan momen yang mengubah dunia One Piece.", + "startTime": "2026-04-27T00:00:00Z", + "endTime": "2026-04-27T00:30:00Z", + "thumbnail_url": "https://images.indihometv.com/tvod_thumbs/2026-04-27/30903473.webp", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903474, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "One Piece: Marineford Arc - Eps.498", + "description": "Luffy berusaha menyelamatkan Ace dalam perang besar di Marineford. Pertempuran epik antara Angkatan Laut dan Bajak Laut Shirohige ini penuh pengorbanan, tragedi, dan momen yang mengubah dunia One Piece.", + "startTime": "2026-04-27T00:30:00Z", + "endTime": "2026-04-27T01:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903475, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "I'Ll Become A Villainess Who Goes Down In History - Eps.9", + "description": "Seorang gadis bereinkarnasi sebagai karakter antagonis dalam dunia novel. Ia bertekad menjadi villain legendaris, namun tindakannya justru mengubah takdir dan menarik perhatian banyak orang di sekitarnya.", + "startTime": "2026-04-27T01:00:00Z", + "endTime": "2026-04-27T01:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903476, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "I'Ll Become A Villainess Who Goes Down In History - Eps.10", + "description": "Seorang gadis bereinkarnasi sebagai karakter antagonis dalam dunia novel. Ia bertekad menjadi villain legendaris, namun tindakannya justru mengubah takdir dan menarik perhatian banyak orang di sekitarnya.", + "startTime": "2026-04-27T01:30:00Z", + "endTime": "2026-04-27T02:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903477, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Fruits Basket Season 1 - Eps.15", + "description": "Tohru Honda tinggal bersama keluarga Soma yang menyimpan kutukan zodiak. Kehadirannya membawa kehangatan dan perlahan menyembuhkan luka emosional anggota keluarga tersebut melalui kasih dan pengertian.", + "startTime": "2026-04-27T02:00:00Z", + "endTime": "2026-04-27T02:30:00Z", + "thumbnail_url": "https://images.indihometv.com/tvod_thumbs/2026-04-27/30903477.webp", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903478, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Fruits Basket Season 1 - Eps.16", + "description": "Tohru Honda tinggal bersama keluarga Soma yang menyimpan kutukan zodiak. Kehadirannya membawa kehangatan dan perlahan menyembuhkan luka emosional anggota keluarga tersebut melalui kasih dan pengertian.", + "startTime": "2026-04-27T02:30:00Z", + "endTime": "2026-04-27T03:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903479, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Fruits Basket Season 1 - Eps.17", + "description": "Tohru Honda tinggal bersama keluarga Soma yang menyimpan kutukan zodiak. Kehadirannya membawa kehangatan dan perlahan menyembuhkan luka emosional anggota keluarga tersebut melalui kasih dan pengertian.", + "startTime": "2026-04-27T03:00:00Z", + "endTime": "2026-04-27T03:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903480, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Tsukimichi -Moonlit Fantasy- Season 2 - Eps.6", + "description": "Makoto melanjutkan petualangannya di dunia lain, membangun kekuatan dan aliansi baru. Konflik dengan dewa dan kerajaan semakin kompleks, menampilkan aksi, strategi, dan perkembangan karakter utama.", + "startTime": "2026-04-27T03:30:00Z", + "endTime": "2026-04-27T04:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903481, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Tsukimichi -Moonlit Fantasy- Season 2 - Eps.7", + "description": "Makoto melanjutkan petualangannya di dunia lain, membangun kekuatan dan aliansi baru. Konflik dengan dewa dan kerajaan semakin kompleks, menampilkan aksi, strategi, dan perkembangan karakter utama.", + "startTime": "2026-04-27T04:00:00Z", + "endTime": "2026-04-27T04:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903482, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Tsukimichi -Moonlit Fantasy- Season 2 - Eps.8", + "description": "Makoto melanjutkan petualangannya di dunia lain, membangun kekuatan dan aliansi baru. Konflik dengan dewa dan kerajaan semakin kompleks, menampilkan aksi, strategi, dan perkembangan karakter utama.", + "startTime": "2026-04-27T04:30:00Z", + "endTime": "2026-04-27T05:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903483, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Haikyu!! 4Th Season - Eps.16", + "description": "Karasuno melaju ke tingkat nasional dan menghadapi tim-tim kuat. Latihan intens dan pertandingan menegangkan menguji kemampuan individu serta kerja sama tim, terutama bagi Hinata yang berkembang pesat.", + "startTime": "2026-04-27T05:00:00Z", + "endTime": "2026-04-27T05:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903484, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Haikyu!! 4Th Season - Eps.17", + "description": "Karasuno melaju ke tingkat nasional dan menghadapi tim-tim kuat. Latihan intens dan pertandingan menegangkan menguji kemampuan individu serta kerja sama tim, terutama bagi Hinata yang berkembang pesat.", + "startTime": "2026-04-27T05:30:00Z", + "endTime": "2026-04-27T06:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903485, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "I'Ll Become A Villainess Who Goes Down In History - Eps.9", + "description": "Seorang gadis bereinkarnasi sebagai karakter antagonis dalam dunia novel. Ia bertekad menjadi villain legendaris, namun tindakannya justru mengubah takdir dan menarik perhatian banyak orang di sekitarnya.", + "startTime": "2026-04-27T06:00:00Z", + "endTime": "2026-04-27T06:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903486, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "I'Ll Become A Villainess Who Goes Down In History - Eps.10", + "description": "Seorang gadis bereinkarnasi sebagai karakter antagonis dalam dunia novel. Ia bertekad menjadi villain legendaris, namun tindakannya justru mengubah takdir dan menarik perhatian banyak orang di sekitarnya.", + "startTime": "2026-04-27T06:30:00Z", + "endTime": "2026-04-27T07:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903487, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Witch Watch - Eps.24", + "description": "Nico, penyihir ceroboh, tinggal bersama Morihito, ogre penjaganya. Kehidupan mereka dipenuhi kejadian magis yang kacau dan lucu, menciptakan komedi ringan dengan sentuhan fantasi dan hubungan unik.", + "startTime": "2026-04-27T07:00:00Z", + "endTime": "2026-04-27T07:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903488, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Witch Watch - Eps.25", + "description": "Nico, penyihir ceroboh, tinggal bersama Morihito, ogre penjaganya. Kehidupan mereka dipenuhi kejadian magis yang kacau dan lucu, menciptakan komedi ringan dengan sentuhan fantasi dan hubungan unik.", + "startTime": "2026-04-27T07:30:00Z", + "endTime": "2026-04-27T08:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903489, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Haikyu!! 4Th Season - Eps.16", + "description": "Karasuno melaju ke tingkat nasional dan menghadapi tim-tim kuat. Latihan intens dan pertandingan menegangkan menguji kemampuan individu serta kerja sama tim, terutama bagi Hinata yang berkembang pesat.", + "startTime": "2026-04-27T08:00:00Z", + "endTime": "2026-04-27T08:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903490, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Haikyu!! 4Th Season - Eps.17", + "description": "Karasuno melaju ke tingkat nasional dan menghadapi tim-tim kuat. Latihan intens dan pertandingan menegangkan menguji kemampuan individu serta kerja sama tim, terutama bagi Hinata yang berkembang pesat.", + "startTime": "2026-04-27T08:30:00Z", + "endTime": "2026-04-27T09:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903491, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Fruits Basket Season 1 - Eps.16", + "description": "Tohru Honda tinggal bersama keluarga Soma yang menyimpan kutukan zodiak. Kehadirannya membawa kehangatan dan perlahan menyembuhkan luka emosional anggota keluarga tersebut melalui kasih dan pengertian.", + "startTime": "2026-04-27T09:00:00Z", + "endTime": "2026-04-27T09:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903492, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Fruits Basket Season 1 - Eps.17", + "description": "Tohru Honda tinggal bersama keluarga Soma yang menyimpan kutukan zodiak. Kehadirannya membawa kehangatan dan perlahan menyembuhkan luka emosional anggota keluarga tersebut melalui kasih dan pengertian.", + "startTime": "2026-04-27T09:30:00Z", + "endTime": "2026-04-27T10:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903493, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "I'Ll Become A Villainess Who Goes Down In History - Eps.9", + "description": "Seorang gadis bereinkarnasi sebagai karakter antagonis dalam dunia novel. Ia bertekad menjadi villain legendaris, namun tindakannya justru mengubah takdir dan menarik perhatian banyak orang di sekitarnya.", + "startTime": "2026-04-27T10:00:00Z", + "endTime": "2026-04-27T10:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903494, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "I'Ll Become A Villainess Who Goes Down In History - Eps.10", + "description": "Seorang gadis bereinkarnasi sebagai karakter antagonis dalam dunia novel. Ia bertekad menjadi villain legendaris, namun tindakannya justru mengubah takdir dan menarik perhatian banyak orang di sekitarnya.", + "startTime": "2026-04-27T10:30:00Z", + "endTime": "2026-04-27T11:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903495, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Witch Watch - Eps.25", + "description": "Nico, penyihir ceroboh, tinggal bersama Morihito, ogre penjaganya. Kehidupan mereka dipenuhi kejadian magis yang kacau dan lucu, menciptakan komedi ringan dengan sentuhan fantasi dan hubungan unik.", + "startTime": "2026-04-27T11:00:00Z", + "endTime": "2026-04-27T11:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903496, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Witch Watch - Eps.24", + "description": "Nico, penyihir ceroboh, tinggal bersama Morihito, ogre penjaganya. Kehidupan mereka dipenuhi kejadian magis yang kacau dan lucu, menciptakan komedi ringan dengan sentuhan fantasi dan hubungan unik.", + "startTime": "2026-04-27T11:30:00Z", + "endTime": "2026-04-27T12:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903497, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Haikyu!! 4Th Season - Eps.16", + "description": "Karasuno melaju ke tingkat nasional dan menghadapi tim-tim kuat. Latihan intens dan pertandingan menegangkan menguji kemampuan individu serta kerja sama tim, terutama bagi Hinata yang berkembang pesat.", + "startTime": "2026-04-27T12:00:00Z", + "endTime": "2026-04-27T12:30:00Z", + "thumbnail_url": "https://images.indihometv.com/tvod_thumbs/2026-04-27/30903497.webp", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903498, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Haikyu!! 4Th Season - Eps.17", + "description": "Karasuno melaju ke tingkat nasional dan menghadapi tim-tim kuat. Latihan intens dan pertandingan menegangkan menguji kemampuan individu serta kerja sama tim, terutama bagi Hinata yang berkembang pesat.", + "startTime": "2026-04-27T12:30:00Z", + "endTime": "2026-04-27T13:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903499, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Fruits Basket Season 1 - Eps.16", + "description": "Tohru Honda tinggal bersama keluarga Soma yang menyimpan kutukan zodiak. Kehadirannya membawa kehangatan dan perlahan menyembuhkan luka emosional anggota keluarga tersebut melalui kasih dan pengertian.", + "startTime": "2026-04-27T13:00:00Z", + "endTime": "2026-04-27T13:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903500, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Fruits Basket Season 1 - Eps.17", + "description": "Tohru Honda tinggal bersama keluarga Soma yang menyimpan kutukan zodiak. Kehadirannya membawa kehangatan dan perlahan menyembuhkan luka emosional anggota keluarga tersebut melalui kasih dan pengertian.", + "startTime": "2026-04-27T13:30:00Z", + "endTime": "2026-04-27T14:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903501, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "I'Ll Become A Villainess Who Goes Down In History - Eps.9", + "description": "Seorang gadis bereinkarnasi sebagai karakter antagonis dalam dunia novel. Ia bertekad menjadi villain legendaris, namun tindakannya justru mengubah takdir dan menarik perhatian banyak orang di sekitarnya.", + "startTime": "2026-04-27T14:00:00Z", + "endTime": "2026-04-27T14:30:00Z", + "thumbnail_url": "https://images.indihometv.com/tvod_thumbs/2026-04-27/30903501.webp", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903502, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "I'Ll Become A Villainess Who Goes Down In History - Eps.10", + "description": "Seorang gadis bereinkarnasi sebagai karakter antagonis dalam dunia novel. Ia bertekad menjadi villain legendaris, namun tindakannya justru mengubah takdir dan menarik perhatian banyak orang di sekitarnya.", + "startTime": "2026-04-27T14:30:00Z", + "endTime": "2026-04-27T15:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903503, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Haikyu!! 4Th Season - Eps.16", + "description": "Karasuno melaju ke tingkat nasional dan menghadapi tim-tim kuat. Latihan intens dan pertandingan menegangkan menguji kemampuan individu serta kerja sama tim, terutama bagi Hinata yang berkembang pesat.", + "startTime": "2026-04-27T15:00:00Z", + "endTime": "2026-04-27T15:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903504, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Haikyu!! 4Th Season - Eps.17", + "description": "Karasuno melaju ke tingkat nasional dan menghadapi tim-tim kuat. Latihan intens dan pertandingan menegangkan menguji kemampuan individu serta kerja sama tim, terutama bagi Hinata yang berkembang pesat.", + "startTime": "2026-04-27T15:30:00Z", + "endTime": "2026-04-27T16:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903505, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Fruits Basket Season 1 - Eps.16", + "description": "Tohru Honda tinggal bersama keluarga Soma yang menyimpan kutukan zodiak. Kehadirannya membawa kehangatan dan perlahan menyembuhkan luka emosional anggota keluarga tersebut melalui kasih dan pengertian.", + "startTime": "2026-04-27T16:00:00Z", + "endTime": "2026-04-27T16:30:00Z", + "thumbnail_url": "https://images.indihometv.com/tvod_thumbs/2026-04-27/30903505.webp", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903506, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Fruits Basket Season 1 - Eps.17", + "description": "Tohru Honda tinggal bersama keluarga Soma yang menyimpan kutukan zodiak. Kehadirannya membawa kehangatan dan perlahan menyembuhkan luka emosional anggota keluarga tersebut melalui kasih dan pengertian.", + "startTime": "2026-04-27T16:30:00Z", + "endTime": "2026-04-27T17:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903507, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Haikyu!! 4Th Season - Eps.17", + "description": "Karasuno melaju ke tingkat nasional dan menghadapi tim-tim kuat. Latihan intens dan pertandingan menegangkan menguji kemampuan individu serta kerja sama tim, terutama bagi Hinata yang berkembang pesat.", + "startTime": "2026-04-27T17:00:00Z", + "endTime": "2026-04-27T17:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903508, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Haikyu!! 4Th Season - Eps.18", + "description": "Karasuno melaju ke tingkat nasional dan menghadapi tim-tim kuat. Latihan intens dan pertandingan menegangkan menguji kemampuan individu serta kerja sama tim, terutama bagi Hinata yang berkembang pesat.", + "startTime": "2026-04-27T17:30:00Z", + "endTime": "2026-04-27T18:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903509, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Tsukimichi -Moonlit Fantasy- Season 2 - Eps.8", + "description": "Makoto melanjutkan petualangannya di dunia lain, membangun kekuatan dan aliansi baru. Konflik dengan dewa dan kerajaan semakin kompleks, menampilkan aksi, strategi, dan perkembangan karakter utama.", + "startTime": "2026-04-27T18:00:00Z", + "endTime": "2026-04-27T18:30:00Z", + "thumbnail_url": "https://images.indihometv.com/tvod_thumbs/2026-04-27/30903509.webp", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903510, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Tsukimichi -Moonlit Fantasy- Season 2 - Eps.9", + "description": "Makoto melanjutkan petualangannya di dunia lain, membangun kekuatan dan aliansi baru. Konflik dengan dewa dan kerajaan semakin kompleks, menampilkan aksi, strategi, dan perkembangan karakter utama.", + "startTime": "2026-04-27T18:30:00Z", + "endTime": "2026-04-27T19:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903511, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "One Piece: Marineford Arc - Eps.498", + "description": "Luffy berusaha menyelamatkan Ace dalam perang besar di Marineford. Pertempuran epik antara Angkatan Laut dan Bajak Laut Shirohige ini penuh pengorbanan, tragedi, dan momen yang mengubah dunia One Piece.", + "startTime": "2026-04-27T19:00:00Z", + "endTime": "2026-04-27T19:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903512, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "One Piece: Marineford Arc - Eps.499", + "description": "Luffy berusaha menyelamatkan Ace dalam perang besar di Marineford. Pertempuran epik antara Angkatan Laut dan Bajak Laut Shirohige ini penuh pengorbanan, tragedi, dan momen yang mengubah dunia One Piece.", + "startTime": "2026-04-27T19:30:00Z", + "endTime": "2026-04-27T20:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903513, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Tsukimichi -Moonlit Fantasy- Season 2 - Eps.8", + "description": "Makoto melanjutkan petualangannya di dunia lain, membangun kekuatan dan aliansi baru. Konflik dengan dewa dan kerajaan semakin kompleks, menampilkan aksi, strategi, dan perkembangan karakter utama.", + "startTime": "2026-04-27T20:00:00Z", + "endTime": "2026-04-27T20:30:00Z", + "thumbnail_url": "https://images.indihometv.com/tvod_thumbs/2026-04-27/30903513.webp", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903514, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Tsukimichi -Moonlit Fantasy- Season 2 - Eps.9", + "description": "Makoto melanjutkan petualangannya di dunia lain, membangun kekuatan dan aliansi baru. Konflik dengan dewa dan kerajaan semakin kompleks, menampilkan aksi, strategi, dan perkembangan karakter utama.", + "startTime": "2026-04-27T20:30:00Z", + "endTime": "2026-04-27T21:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903515, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "The Do-Over Damsel Conquers The Dragon Emperor - Eps.9", + "description": "Seorang putri diberi kesempatan mengulang hidupnya setelah kematian tragis. Ia berusaha mengubah nasib dengan mendekati kaisar naga, menghadirkan kisah romansa politik dan strategi bertahan hidup.", + "startTime": "2026-04-27T21:00:00Z", + "endTime": "2026-04-27T21:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903516, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "The Do-Over Damsel Conquers The Dragon Emperor - Eps.10", + "description": "Seorang putri diberi kesempatan mengulang hidupnya setelah kematian tragis. Ia berusaha mengubah nasib dengan mendekati kaisar naga, menghadirkan kisah romansa politik dan strategi bertahan hidup.", + "startTime": "2026-04-27T21:30:00Z", + "endTime": "2026-04-27T22:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903517, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "One Piece: Marineford Arc - Eps.498", + "description": "Luffy berusaha menyelamatkan Ace dalam perang besar di Marineford. Pertempuran epik antara Angkatan Laut dan Bajak Laut Shirohige ini penuh pengorbanan, tragedi, dan momen yang mengubah dunia One Piece.", + "startTime": "2026-04-27T22:00:00Z", + "endTime": "2026-04-27T22:30:00Z", + "thumbnail_url": "https://images.indihometv.com/tvod_thumbs/2026-04-27/30903517.webp", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903518, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "One Piece: Marineford Arc - Eps.499", + "description": "Luffy berusaha menyelamatkan Ace dalam perang besar di Marineford. Pertempuran epik antara Angkatan Laut dan Bajak Laut Shirohige ini penuh pengorbanan, tragedi, dan momen yang mengubah dunia One Piece.", + "startTime": "2026-04-27T22:30:00Z", + "endTime": "2026-04-27T23:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903519, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Tsukimichi -Moonlit Fantasy- Season 2 - Eps.8", + "description": "Makoto melanjutkan petualangannya di dunia lain, membangun kekuatan dan aliansi baru. Konflik dengan dewa dan kerajaan semakin kompleks, menampilkan aksi, strategi, dan perkembangan karakter utama.", + "startTime": "2026-04-27T23:00:00Z", + "endTime": "2026-04-27T23:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903520, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Tsukimichi -Moonlit Fantasy- Season 2 - Eps.9", + "description": "Makoto melanjutkan petualangannya di dunia lain, membangun kekuatan dan aliansi baru. Konflik dengan dewa dan kerajaan semakin kompleks, menampilkan aksi, strategi, dan perkembangan karakter utama.", + "startTime": "2026-04-27T23:30:00Z", + "endTime": "2026-04-28T00:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + } + ] + }, + { + "date": "2026-04-28", + "metadata": [ + { + "playUrlId": 30903521, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "The Do-Over Damsel Conquers The Dragon Emperor - Eps.9", + "description": "Seorang putri diberi kesempatan mengulang hidupnya setelah kematian tragis. Ia berusaha mengubah nasib dengan mendekati kaisar naga, menghadirkan kisah romansa politik dan strategi bertahan hidup.", + "startTime": "2026-04-28T00:00:00Z", + "endTime": "2026-04-28T00:30:00Z", + "thumbnail_url": "https://images.indihometv.com/tvod_thumbs/2026-04-28/30903521.webp", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903522, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "The Do-Over Damsel Conquers The Dragon Emperor - Eps.10", + "description": "Seorang putri diberi kesempatan mengulang hidupnya setelah kematian tragis. Ia berusaha mengubah nasib dengan mendekati kaisar naga, menghadirkan kisah romansa politik dan strategi bertahan hidup.", + "startTime": "2026-04-28T00:30:00Z", + "endTime": "2026-04-28T01:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903523, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Haikyu!! 4Th Season - Eps.17", + "description": "Karasuno melaju ke tingkat nasional dan menghadapi tim-tim kuat. Latihan intens dan pertandingan menegangkan menguji kemampuan individu serta kerja sama tim, terutama bagi Hinata yang berkembang pesat.", + "startTime": "2026-04-28T01:00:00Z", + "endTime": "2026-04-28T01:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903524, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Haikyu!! 4Th Season - Eps.18", + "description": "Karasuno melaju ke tingkat nasional dan menghadapi tim-tim kuat. Latihan intens dan pertandingan menegangkan menguji kemampuan individu serta kerja sama tim, terutama bagi Hinata yang berkembang pesat.", + "startTime": "2026-04-28T01:30:00Z", + "endTime": "2026-04-28T02:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903525, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "One Piece: Marineford Arc - Eps.498", + "description": "Luffy berusaha menyelamatkan Ace dalam perang besar di Marineford. Pertempuran epik antara Angkatan Laut dan Bajak Laut Shirohige ini penuh pengorbanan, tragedi, dan momen yang mengubah dunia One Piece.", + "startTime": "2026-04-28T02:00:00Z", + "endTime": "2026-04-28T02:30:00Z", + "thumbnail_url": "https://images.indihometv.com/tvod_thumbs/2026-04-28/30903525.webp", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903526, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "One Piece: Marineford Arc - Eps.499", + "description": "Luffy berusaha menyelamatkan Ace dalam perang besar di Marineford. Pertempuran epik antara Angkatan Laut dan Bajak Laut Shirohige ini penuh pengorbanan, tragedi, dan momen yang mengubah dunia One Piece.", + "startTime": "2026-04-28T02:30:00Z", + "endTime": "2026-04-28T03:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903527, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Tsukimichi -Moonlit Fantasy- Season 2 - Eps.8", + "description": "Makoto melanjutkan petualangannya di dunia lain, membangun kekuatan dan aliansi baru. Konflik dengan dewa dan kerajaan semakin kompleks, menampilkan aksi, strategi, dan perkembangan karakter utama.", + "startTime": "2026-04-28T03:00:00Z", + "endTime": "2026-04-28T03:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903528, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Tsukimichi -Moonlit Fantasy- Season 2 - Eps.9", + "description": "Makoto melanjutkan petualangannya di dunia lain, membangun kekuatan dan aliansi baru. Konflik dengan dewa dan kerajaan semakin kompleks, menampilkan aksi, strategi, dan perkembangan karakter utama.", + "startTime": "2026-04-28T03:30:00Z", + "endTime": "2026-04-28T04:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903529, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "The Do-Over Damsel Conquers The Dragon Emperor - Eps.9", + "description": "Seorang putri diberi kesempatan mengulang hidupnya setelah kematian tragis. Ia berusaha mengubah nasib dengan mendekati kaisar naga, menghadirkan kisah romansa politik dan strategi bertahan hidup.", + "startTime": "2026-04-28T04:00:00Z", + "endTime": "2026-04-28T04:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903530, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "The Do-Over Damsel Conquers The Dragon Emperor - Eps.10", + "description": "Seorang putri diberi kesempatan mengulang hidupnya setelah kematian tragis. Ia berusaha mengubah nasib dengan mendekati kaisar naga, menghadirkan kisah romansa politik dan strategi bertahan hidup.", + "startTime": "2026-04-28T04:30:00Z", + "endTime": "2026-04-28T05:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903531, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Haikyu!! 4Th Season - Eps.17", + "description": "Karasuno melaju ke tingkat nasional dan menghadapi tim-tim kuat. Latihan intens dan pertandingan menegangkan menguji kemampuan individu serta kerja sama tim, terutama bagi Hinata yang berkembang pesat.", + "startTime": "2026-04-28T05:00:00Z", + "endTime": "2026-04-28T05:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903532, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Haikyu!! 4Th Season - Eps.18", + "description": "Karasuno melaju ke tingkat nasional dan menghadapi tim-tim kuat. Latihan intens dan pertandingan menegangkan menguji kemampuan individu serta kerja sama tim, terutama bagi Hinata yang berkembang pesat.", + "startTime": "2026-04-28T05:30:00Z", + "endTime": "2026-04-28T06:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903533, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Tsukimichi -Moonlit Fantasy- Season 2 - Eps.8", + "description": "Makoto melanjutkan petualangannya di dunia lain, membangun kekuatan dan aliansi baru. Konflik dengan dewa dan kerajaan semakin kompleks, menampilkan aksi, strategi, dan perkembangan karakter utama.", + "startTime": "2026-04-28T06:00:00Z", + "endTime": "2026-04-28T06:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903534, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Tsukimichi -Moonlit Fantasy- Season 2 - Eps.9", + "description": "Makoto melanjutkan petualangannya di dunia lain, membangun kekuatan dan aliansi baru. Konflik dengan dewa dan kerajaan semakin kompleks, menampilkan aksi, strategi, dan perkembangan karakter utama.", + "startTime": "2026-04-28T06:30:00Z", + "endTime": "2026-04-28T07:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903535, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "One Piece: Marineford Arc - Eps.498", + "description": "Luffy berusaha menyelamatkan Ace dalam perang besar di Marineford. Pertempuran epik antara Angkatan Laut dan Bajak Laut Shirohige ini penuh pengorbanan, tragedi, dan momen yang mengubah dunia One Piece.", + "startTime": "2026-04-28T07:00:00Z", + "endTime": "2026-04-28T07:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903536, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "One Piece: Marineford Arc - Eps.499", + "description": "Luffy berusaha menyelamatkan Ace dalam perang besar di Marineford. Pertempuran epik antara Angkatan Laut dan Bajak Laut Shirohige ini penuh pengorbanan, tragedi, dan momen yang mengubah dunia One Piece.", + "startTime": "2026-04-28T07:30:00Z", + "endTime": "2026-04-28T08:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903537, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Haikyu!! 4Th Season - Eps.17", + "description": "Karasuno melaju ke tingkat nasional dan menghadapi tim-tim kuat. Latihan intens dan pertandingan menegangkan menguji kemampuan individu serta kerja sama tim, terutama bagi Hinata yang berkembang pesat.", + "startTime": "2026-04-28T08:00:00Z", + "endTime": "2026-04-28T08:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903538, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Haikyu!! 4Th Season - Eps.18", + "description": "Karasuno melaju ke tingkat nasional dan menghadapi tim-tim kuat. Latihan intens dan pertandingan menegangkan menguji kemampuan individu serta kerja sama tim, terutama bagi Hinata yang berkembang pesat.", + "startTime": "2026-04-28T08:30:00Z", + "endTime": "2026-04-28T09:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903539, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "The Do-Over Damsel Conquers The Dragon Emperor - Eps.9", + "description": "Seorang putri diberi kesempatan mengulang hidupnya setelah kematian tragis. Ia berusaha mengubah nasib dengan mendekati kaisar naga, menghadirkan kisah romansa politik dan strategi bertahan hidup.", + "startTime": "2026-04-28T09:00:00Z", + "endTime": "2026-04-28T09:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903540, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "The Do-Over Damsel Conquers The Dragon Emperor - Eps.10", + "description": "Seorang putri diberi kesempatan mengulang hidupnya setelah kematian tragis. Ia berusaha mengubah nasib dengan mendekati kaisar naga, menghadirkan kisah romansa politik dan strategi bertahan hidup.", + "startTime": "2026-04-28T09:30:00Z", + "endTime": "2026-04-28T10:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903541, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Tsukimichi -Moonlit Fantasy- Season 2 - Eps.8", + "description": "Makoto melanjutkan petualangannya di dunia lain, membangun kekuatan dan aliansi baru. Konflik dengan dewa dan kerajaan semakin kompleks, menampilkan aksi, strategi, dan perkembangan karakter utama.", + "startTime": "2026-04-28T10:00:00Z", + "endTime": "2026-04-28T10:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903542, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Tsukimichi -Moonlit Fantasy- Season 2 - Eps.9", + "description": "Makoto melanjutkan petualangannya di dunia lain, membangun kekuatan dan aliansi baru. Konflik dengan dewa dan kerajaan semakin kompleks, menampilkan aksi, strategi, dan perkembangan karakter utama.", + "startTime": "2026-04-28T10:30:00Z", + "endTime": "2026-04-28T11:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903543, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "One Piece: Marineford Arc - Eps.498", + "description": "Luffy berusaha menyelamatkan Ace dalam perang besar di Marineford. Pertempuran epik antara Angkatan Laut dan Bajak Laut Shirohige ini penuh pengorbanan, tragedi, dan momen yang mengubah dunia One Piece.", + "startTime": "2026-04-28T11:00:00Z", + "endTime": "2026-04-28T11:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903544, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "One Piece: Marineford Arc - Eps.499", + "description": "Luffy berusaha menyelamatkan Ace dalam perang besar di Marineford. Pertempuran epik antara Angkatan Laut dan Bajak Laut Shirohige ini penuh pengorbanan, tragedi, dan momen yang mengubah dunia One Piece.", + "startTime": "2026-04-28T11:30:00Z", + "endTime": "2026-04-28T12:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903545, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Haikyu!! 4Th Season - Eps.17", + "description": "Karasuno melaju ke tingkat nasional dan menghadapi tim-tim kuat. Latihan intens dan pertandingan menegangkan menguji kemampuan individu serta kerja sama tim, terutama bagi Hinata yang berkembang pesat.", + "startTime": "2026-04-28T12:00:00Z", + "endTime": "2026-04-28T12:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903546, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Haikyu!! 4Th Season - Eps.18", + "description": "Karasuno melaju ke tingkat nasional dan menghadapi tim-tim kuat. Latihan intens dan pertandingan menegangkan menguji kemampuan individu serta kerja sama tim, terutama bagi Hinata yang berkembang pesat.", + "startTime": "2026-04-28T12:30:00Z", + "endTime": "2026-04-28T13:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903547, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "The Do-Over Damsel Conquers The Dragon Emperor - Eps.9", + "description": "Seorang putri diberi kesempatan mengulang hidupnya setelah kematian tragis. Ia berusaha mengubah nasib dengan mendekati kaisar naga, menghadirkan kisah romansa politik dan strategi bertahan hidup.", + "startTime": "2026-04-28T13:00:00Z", + "endTime": "2026-04-28T13:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903548, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "The Do-Over Damsel Conquers The Dragon Emperor - Eps.10", + "description": "Seorang putri diberi kesempatan mengulang hidupnya setelah kematian tragis. Ia berusaha mengubah nasib dengan mendekati kaisar naga, menghadirkan kisah romansa politik dan strategi bertahan hidup.", + "startTime": "2026-04-28T13:30:00Z", + "endTime": "2026-04-28T14:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903549, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Tsukimichi -Moonlit Fantasy- Season 2 - Eps.8", + "description": "Makoto melanjutkan petualangannya di dunia lain, membangun kekuatan dan aliansi baru. Konflik dengan dewa dan kerajaan semakin kompleks, menampilkan aksi, strategi, dan perkembangan karakter utama.", + "startTime": "2026-04-28T14:00:00Z", + "endTime": "2026-04-28T14:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903550, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Tsukimichi -Moonlit Fantasy- Season 2 - Eps.9", + "description": "Makoto melanjutkan petualangannya di dunia lain, membangun kekuatan dan aliansi baru. Konflik dengan dewa dan kerajaan semakin kompleks, menampilkan aksi, strategi, dan perkembangan karakter utama.", + "startTime": "2026-04-28T14:30:00Z", + "endTime": "2026-04-28T15:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903551, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Haikyu!! 4Th Season - Eps.17", + "description": "Karasuno melaju ke tingkat nasional dan menghadapi tim-tim kuat. Latihan intens dan pertandingan menegangkan menguji kemampuan individu serta kerja sama tim, terutama bagi Hinata yang berkembang pesat.", + "startTime": "2026-04-28T15:00:00Z", + "endTime": "2026-04-28T15:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903552, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Haikyu!! 4Th Season - Eps.18", + "description": "Karasuno melaju ke tingkat nasional dan menghadapi tim-tim kuat. Latihan intens dan pertandingan menegangkan menguji kemampuan individu serta kerja sama tim, terutama bagi Hinata yang berkembang pesat.", + "startTime": "2026-04-28T15:30:00Z", + "endTime": "2026-04-28T16:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903553, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "The Do-Over Damsel Conquers The Dragon Emperor - Eps.9", + "description": "Seorang putri diberi kesempatan mengulang hidupnya setelah kematian tragis. Ia berusaha mengubah nasib dengan mendekati kaisar naga, menghadirkan kisah romansa politik dan strategi bertahan hidup.", + "startTime": "2026-04-28T16:00:00Z", + "endTime": "2026-04-28T16:30:00Z", + "thumbnail_url": "https://images.indihometv.com/tvod_thumbs/2026-04-28/30903553.webp", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903554, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "The Do-Over Damsel Conquers The Dragon Emperor - Eps.10", + "description": "Seorang putri diberi kesempatan mengulang hidupnya setelah kematian tragis. Ia berusaha mengubah nasib dengan mendekati kaisar naga, menghadirkan kisah romansa politik dan strategi bertahan hidup.", + "startTime": "2026-04-28T16:30:00Z", + "endTime": "2026-04-28T17:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903555, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Haikyu!! 4Th Season - Eps.18", + "description": "Karasuno melaju ke tingkat nasional dan menghadapi tim-tim kuat. Latihan intens dan pertandingan menegangkan menguji kemampuan individu serta kerja sama tim, terutama bagi Hinata yang berkembang pesat.", + "startTime": "2026-04-28T17:00:00Z", + "endTime": "2026-04-28T17:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903556, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Haikyu!! 4Th Season - Eps.19", + "description": "Karasuno melaju ke tingkat nasional dan menghadapi tim-tim kuat. Latihan intens dan pertandingan menegangkan menguji kemampuan individu serta kerja sama tim, terutama bagi Hinata yang berkembang pesat.", + "startTime": "2026-04-28T17:30:00Z", + "endTime": "2026-04-28T18:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903557, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Tsukimichi -Moonlit Fantasy- Season 2 - Eps.9", + "description": "Makoto melanjutkan petualangannya di dunia lain, membangun kekuatan dan aliansi baru. Konflik dengan dewa dan kerajaan semakin kompleks, menampilkan aksi, strategi, dan perkembangan karakter utama.", + "startTime": "2026-04-28T18:00:00Z", + "endTime": "2026-04-28T18:30:00Z", + "thumbnail_url": "https://images.indihometv.com/tvod_thumbs/2026-04-28/30903557.webp", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903558, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Tsukimichi -Moonlit Fantasy- Season 2 - Eps.10", + "description": "Makoto melanjutkan petualangannya di dunia lain, membangun kekuatan dan aliansi baru. Konflik dengan dewa dan kerajaan semakin kompleks, menampilkan aksi, strategi, dan perkembangan karakter utama.", + "startTime": "2026-04-28T18:30:00Z", + "endTime": "2026-04-28T19:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903559, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "One Piece: Marineford Arc - Eps.499", + "description": "Luffy berusaha menyelamatkan Ace dalam perang besar di Marineford. Pertempuran epik antara Angkatan Laut dan Bajak Laut Shirohige ini penuh pengorbanan, tragedi, dan momen yang mengubah dunia One Piece.", + "startTime": "2026-04-28T19:00:00Z", + "endTime": "2026-04-28T19:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903560, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "One Piece: Marineford Arc - Eps.500", + "description": "Luffy berusaha menyelamatkan Ace dalam perang besar di Marineford. Pertempuran epik antara Angkatan Laut dan Bajak Laut Shirohige ini penuh pengorbanan, tragedi, dan momen yang mengubah dunia One Piece.", + "startTime": "2026-04-28T19:30:00Z", + "endTime": "2026-04-28T20:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903561, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Tsukimichi -Moonlit Fantasy- Season 2 - Eps.9", + "description": "Makoto melanjutkan petualangannya di dunia lain, membangun kekuatan dan aliansi baru. Konflik dengan dewa dan kerajaan semakin kompleks, menampilkan aksi, strategi, dan perkembangan karakter utama.", + "startTime": "2026-04-28T20:00:00Z", + "endTime": "2026-04-28T20:30:00Z", + "thumbnail_url": "https://images.indihometv.com/tvod_thumbs/2026-04-28/30903561.webp", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903562, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Tsukimichi -Moonlit Fantasy- Season 2 - Eps.10", + "description": "Makoto melanjutkan petualangannya di dunia lain, membangun kekuatan dan aliansi baru. Konflik dengan dewa dan kerajaan semakin kompleks, menampilkan aksi, strategi, dan perkembangan karakter utama.", + "startTime": "2026-04-28T20:30:00Z", + "endTime": "2026-04-28T21:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903563, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "The Do-Over Damsel Conquers The Dragon Emperor - Eps.11", + "description": "Seorang putri diberi kesempatan mengulang hidupnya setelah kematian tragis. Ia berusaha mengubah nasib dengan mendekati kaisar naga, menghadirkan kisah romansa politik dan strategi bertahan hidup.", + "startTime": "2026-04-28T21:00:00Z", + "endTime": "2026-04-28T21:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903564, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "The Do-Over Damsel Conquers The Dragon Emperor - Eps.12", + "description": "Seorang putri diberi kesempatan mengulang hidupnya setelah kematian tragis. Ia berusaha mengubah nasib dengan mendekati kaisar naga, menghadirkan kisah romansa politik dan strategi bertahan hidup.", + "startTime": "2026-04-28T21:30:00Z", + "endTime": "2026-04-28T22:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903565, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "One Piece: Marineford Arc - Eps.499", + "description": "Luffy berusaha menyelamatkan Ace dalam perang besar di Marineford. Pertempuran epik antara Angkatan Laut dan Bajak Laut Shirohige ini penuh pengorbanan, tragedi, dan momen yang mengubah dunia One Piece.", + "startTime": "2026-04-28T22:00:00Z", + "endTime": "2026-04-28T22:30:00Z", + "thumbnail_url": "https://images.indihometv.com/tvod_thumbs/2026-04-28/30903565.webp", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903566, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "One Piece: Marineford Arc - Eps.500", + "description": "Luffy berusaha menyelamatkan Ace dalam perang besar di Marineford. Pertempuran epik antara Angkatan Laut dan Bajak Laut Shirohige ini penuh pengorbanan, tragedi, dan momen yang mengubah dunia One Piece.", + "startTime": "2026-04-28T22:30:00Z", + "endTime": "2026-04-28T23:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903567, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Tsukimichi -Moonlit Fantasy- Season 2 - Eps.9", + "description": "Makoto melanjutkan petualangannya di dunia lain, membangun kekuatan dan aliansi baru. Konflik dengan dewa dan kerajaan semakin kompleks, menampilkan aksi, strategi, dan perkembangan karakter utama.", + "startTime": "2026-04-28T23:00:00Z", + "endTime": "2026-04-28T23:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903568, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Tsukimichi -Moonlit Fantasy- Season 2 - Eps.10", + "description": "Makoto melanjutkan petualangannya di dunia lain, membangun kekuatan dan aliansi baru. Konflik dengan dewa dan kerajaan semakin kompleks, menampilkan aksi, strategi, dan perkembangan karakter utama.", + "startTime": "2026-04-28T23:30:00Z", + "endTime": "2026-04-29T00:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + } + ] + }, + { + "date": "2026-04-29", + "metadata": [ + { + "playUrlId": 30903569, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "The Do-Over Damsel Conquers The Dragon Emperor - Eps.11", + "description": "Seorang putri diberi kesempatan mengulang hidupnya setelah kematian tragis. Ia berusaha mengubah nasib dengan mendekati kaisar naga, menghadirkan kisah romansa politik dan strategi bertahan hidup.", + "startTime": "2026-04-29T00:00:00Z", + "endTime": "2026-04-29T00:30:00Z", + "thumbnail_url": "https://images.indihometv.com/tvod_thumbs/2026-04-29/30903569.webp", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903570, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "The Do-Over Damsel Conquers The Dragon Emperor - Eps.12", + "description": "Seorang putri diberi kesempatan mengulang hidupnya setelah kematian tragis. Ia berusaha mengubah nasib dengan mendekati kaisar naga, menghadirkan kisah romansa politik dan strategi bertahan hidup.", + "startTime": "2026-04-29T00:30:00Z", + "endTime": "2026-04-29T01:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903571, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Haikyu!! 4Th Season - Eps.18", + "description": "Karasuno melaju ke tingkat nasional dan menghadapi tim-tim kuat. Latihan intens dan pertandingan menegangkan menguji kemampuan individu serta kerja sama tim, terutama bagi Hinata yang berkembang pesat.", + "startTime": "2026-04-29T01:00:00Z", + "endTime": "2026-04-29T01:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903572, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Haikyu!! 4Th Season - Eps.19", + "description": "Karasuno melaju ke tingkat nasional dan menghadapi tim-tim kuat. Latihan intens dan pertandingan menegangkan menguji kemampuan individu serta kerja sama tim, terutama bagi Hinata yang berkembang pesat.", + "startTime": "2026-04-29T01:30:00Z", + "endTime": "2026-04-29T02:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903573, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "One Piece: Marineford Arc - Eps.499", + "description": "Luffy berusaha menyelamatkan Ace dalam perang besar di Marineford. Pertempuran epik antara Angkatan Laut dan Bajak Laut Shirohige ini penuh pengorbanan, tragedi, dan momen yang mengubah dunia One Piece.", + "startTime": "2026-04-29T02:00:00Z", + "endTime": "2026-04-29T02:30:00Z", + "thumbnail_url": "https://images.indihometv.com/tvod_thumbs/2026-04-29/30903573.webp", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903574, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "One Piece: Marineford Arc - Eps.500", + "description": "Luffy berusaha menyelamatkan Ace dalam perang besar di Marineford. Pertempuran epik antara Angkatan Laut dan Bajak Laut Shirohige ini penuh pengorbanan, tragedi, dan momen yang mengubah dunia One Piece.", + "startTime": "2026-04-29T02:30:00Z", + "endTime": "2026-04-29T03:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903575, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Tsukimichi -Moonlit Fantasy- Season 2 - Eps.9", + "description": "Makoto melanjutkan petualangannya di dunia lain, membangun kekuatan dan aliansi baru. Konflik dengan dewa dan kerajaan semakin kompleks, menampilkan aksi, strategi, dan perkembangan karakter utama.", + "startTime": "2026-04-29T03:00:00Z", + "endTime": "2026-04-29T03:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903576, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Tsukimichi -Moonlit Fantasy- Season 2 - Eps.10", + "description": "Makoto melanjutkan petualangannya di dunia lain, membangun kekuatan dan aliansi baru. Konflik dengan dewa dan kerajaan semakin kompleks, menampilkan aksi, strategi, dan perkembangan karakter utama.", + "startTime": "2026-04-29T03:30:00Z", + "endTime": "2026-04-29T04:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903577, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "The Do-Over Damsel Conquers The Dragon Emperor - Eps.11", + "description": "Seorang putri diberi kesempatan mengulang hidupnya setelah kematian tragis. Ia berusaha mengubah nasib dengan mendekati kaisar naga, menghadirkan kisah romansa politik dan strategi bertahan hidup.", + "startTime": "2026-04-29T04:00:00Z", + "endTime": "2026-04-29T04:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903578, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "The Do-Over Damsel Conquers The Dragon Emperor - Eps.12", + "description": "Seorang putri diberi kesempatan mengulang hidupnya setelah kematian tragis. Ia berusaha mengubah nasib dengan mendekati kaisar naga, menghadirkan kisah romansa politik dan strategi bertahan hidup.", + "startTime": "2026-04-29T04:30:00Z", + "endTime": "2026-04-29T05:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903579, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Haikyu!! 4Th Season - Eps.18", + "description": "Karasuno melaju ke tingkat nasional dan menghadapi tim-tim kuat. Latihan intens dan pertandingan menegangkan menguji kemampuan individu serta kerja sama tim, terutama bagi Hinata yang berkembang pesat.", + "startTime": "2026-04-29T05:00:00Z", + "endTime": "2026-04-29T05:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903580, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Haikyu!! 4Th Season - Eps.19", + "description": "Karasuno melaju ke tingkat nasional dan menghadapi tim-tim kuat. Latihan intens dan pertandingan menegangkan menguji kemampuan individu serta kerja sama tim, terutama bagi Hinata yang berkembang pesat.", + "startTime": "2026-04-29T05:30:00Z", + "endTime": "2026-04-29T06:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903581, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Tsukimichi -Moonlit Fantasy- Season 2 - Eps.9", + "description": "Makoto melanjutkan petualangannya di dunia lain, membangun kekuatan dan aliansi baru. Konflik dengan dewa dan kerajaan semakin kompleks, menampilkan aksi, strategi, dan perkembangan karakter utama.", + "startTime": "2026-04-29T06:00:00Z", + "endTime": "2026-04-29T06:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903582, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Tsukimichi -Moonlit Fantasy- Season 2 - Eps.10", + "description": "Makoto melanjutkan petualangannya di dunia lain, membangun kekuatan dan aliansi baru. Konflik dengan dewa dan kerajaan semakin kompleks, menampilkan aksi, strategi, dan perkembangan karakter utama.", + "startTime": "2026-04-29T06:30:00Z", + "endTime": "2026-04-29T07:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903583, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "One Piece: Marineford Arc - Eps.499", + "description": "Luffy berusaha menyelamatkan Ace dalam perang besar di Marineford. Pertempuran epik antara Angkatan Laut dan Bajak Laut Shirohige ini penuh pengorbanan, tragedi, dan momen yang mengubah dunia One Piece.", + "startTime": "2026-04-29T07:00:00Z", + "endTime": "2026-04-29T07:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903584, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "One Piece: Marineford Arc - Eps.500", + "description": "Luffy berusaha menyelamatkan Ace dalam perang besar di Marineford. Pertempuran epik antara Angkatan Laut dan Bajak Laut Shirohige ini penuh pengorbanan, tragedi, dan momen yang mengubah dunia One Piece.", + "startTime": "2026-04-29T07:30:00Z", + "endTime": "2026-04-29T08:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903585, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Haikyu!! 4Th Season - Eps.18", + "description": "Karasuno melaju ke tingkat nasional dan menghadapi tim-tim kuat. Latihan intens dan pertandingan menegangkan menguji kemampuan individu serta kerja sama tim, terutama bagi Hinata yang berkembang pesat.", + "startTime": "2026-04-29T08:00:00Z", + "endTime": "2026-04-29T08:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903586, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Haikyu!! 4Th Season - Eps.19", + "description": "Karasuno melaju ke tingkat nasional dan menghadapi tim-tim kuat. Latihan intens dan pertandingan menegangkan menguji kemampuan individu serta kerja sama tim, terutama bagi Hinata yang berkembang pesat.", + "startTime": "2026-04-29T08:30:00Z", + "endTime": "2026-04-29T09:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903587, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "The Do-Over Damsel Conquers The Dragon Emperor - Eps.11", + "description": "Seorang putri diberi kesempatan mengulang hidupnya setelah kematian tragis. Ia berusaha mengubah nasib dengan mendekati kaisar naga, menghadirkan kisah romansa politik dan strategi bertahan hidup.", + "startTime": "2026-04-29T09:00:00Z", + "endTime": "2026-04-29T09:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903588, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "The Do-Over Damsel Conquers The Dragon Emperor - Eps.12", + "description": "Seorang putri diberi kesempatan mengulang hidupnya setelah kematian tragis. Ia berusaha mengubah nasib dengan mendekati kaisar naga, menghadirkan kisah romansa politik dan strategi bertahan hidup.", + "startTime": "2026-04-29T09:30:00Z", + "endTime": "2026-04-29T10:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903589, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Tsukimichi -Moonlit Fantasy- Season 2 - Eps.9", + "description": "Makoto melanjutkan petualangannya di dunia lain, membangun kekuatan dan aliansi baru. Konflik dengan dewa dan kerajaan semakin kompleks, menampilkan aksi, strategi, dan perkembangan karakter utama.", + "startTime": "2026-04-29T10:00:00Z", + "endTime": "2026-04-29T10:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903590, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Tsukimichi -Moonlit Fantasy- Season 2 - Eps.10", + "description": "Makoto melanjutkan petualangannya di dunia lain, membangun kekuatan dan aliansi baru. Konflik dengan dewa dan kerajaan semakin kompleks, menampilkan aksi, strategi, dan perkembangan karakter utama.", + "startTime": "2026-04-29T10:30:00Z", + "endTime": "2026-04-29T11:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903591, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "One Piece: Marineford Arc - Eps.499", + "description": "Luffy berusaha menyelamatkan Ace dalam perang besar di Marineford. Pertempuran epik antara Angkatan Laut dan Bajak Laut Shirohige ini penuh pengorbanan, tragedi, dan momen yang mengubah dunia One Piece.", + "startTime": "2026-04-29T11:00:00Z", + "endTime": "2026-04-29T11:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903592, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "One Piece: Marineford Arc - Eps.500", + "description": "Luffy berusaha menyelamatkan Ace dalam perang besar di Marineford. Pertempuran epik antara Angkatan Laut dan Bajak Laut Shirohige ini penuh pengorbanan, tragedi, dan momen yang mengubah dunia One Piece.", + "startTime": "2026-04-29T11:30:00Z", + "endTime": "2026-04-29T12:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903593, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Haikyu!! 4Th Season - Eps.18", + "description": "Karasuno melaju ke tingkat nasional dan menghadapi tim-tim kuat. Latihan intens dan pertandingan menegangkan menguji kemampuan individu serta kerja sama tim, terutama bagi Hinata yang berkembang pesat.", + "startTime": "2026-04-29T12:00:00Z", + "endTime": "2026-04-29T12:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903594, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Haikyu!! 4Th Season - Eps.19", + "description": "Karasuno melaju ke tingkat nasional dan menghadapi tim-tim kuat. Latihan intens dan pertandingan menegangkan menguji kemampuan individu serta kerja sama tim, terutama bagi Hinata yang berkembang pesat.", + "startTime": "2026-04-29T12:30:00Z", + "endTime": "2026-04-29T13:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903595, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "The Do-Over Damsel Conquers The Dragon Emperor - Eps.11", + "description": "Seorang putri diberi kesempatan mengulang hidupnya setelah kematian tragis. Ia berusaha mengubah nasib dengan mendekati kaisar naga, menghadirkan kisah romansa politik dan strategi bertahan hidup.", + "startTime": "2026-04-29T13:00:00Z", + "endTime": "2026-04-29T13:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903596, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "The Do-Over Damsel Conquers The Dragon Emperor - Eps.12", + "description": "Seorang putri diberi kesempatan mengulang hidupnya setelah kematian tragis. Ia berusaha mengubah nasib dengan mendekati kaisar naga, menghadirkan kisah romansa politik dan strategi bertahan hidup.", + "startTime": "2026-04-29T13:30:00Z", + "endTime": "2026-04-29T14:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903597, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Tsukimichi -Moonlit Fantasy- Season 2 - Eps.9", + "description": "Makoto melanjutkan petualangannya di dunia lain, membangun kekuatan dan aliansi baru. Konflik dengan dewa dan kerajaan semakin kompleks, menampilkan aksi, strategi, dan perkembangan karakter utama.", + "startTime": "2026-04-29T14:00:00Z", + "endTime": "2026-04-29T14:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903598, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Tsukimichi -Moonlit Fantasy- Season 2 - Eps.10", + "description": "Makoto melanjutkan petualangannya di dunia lain, membangun kekuatan dan aliansi baru. Konflik dengan dewa dan kerajaan semakin kompleks, menampilkan aksi, strategi, dan perkembangan karakter utama.", + "startTime": "2026-04-29T14:30:00Z", + "endTime": "2026-04-29T15:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903599, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Haikyu!! 4Th Season - Eps.18", + "description": "Karasuno melaju ke tingkat nasional dan menghadapi tim-tim kuat. Latihan intens dan pertandingan menegangkan menguji kemampuan individu serta kerja sama tim, terutama bagi Hinata yang berkembang pesat.", + "startTime": "2026-04-29T15:00:00Z", + "endTime": "2026-04-29T15:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903600, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Haikyu!! 4Th Season - Eps.19", + "description": "Karasuno melaju ke tingkat nasional dan menghadapi tim-tim kuat. Latihan intens dan pertandingan menegangkan menguji kemampuan individu serta kerja sama tim, terutama bagi Hinata yang berkembang pesat.", + "startTime": "2026-04-29T15:30:00Z", + "endTime": "2026-04-29T16:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903601, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "The Do-Over Damsel Conquers The Dragon Emperor - Eps.11", + "description": "Seorang putri diberi kesempatan mengulang hidupnya setelah kematian tragis. Ia berusaha mengubah nasib dengan mendekati kaisar naga, menghadirkan kisah romansa politik dan strategi bertahan hidup.", + "startTime": "2026-04-29T16:00:00Z", + "endTime": "2026-04-29T16:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903602, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "The Do-Over Damsel Conquers The Dragon Emperor - Eps.12", + "description": "Seorang putri diberi kesempatan mengulang hidupnya setelah kematian tragis. Ia berusaha mengubah nasib dengan mendekati kaisar naga, menghadirkan kisah romansa politik dan strategi bertahan hidup.", + "startTime": "2026-04-29T16:30:00Z", + "endTime": "2026-04-29T17:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903603, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Haikyu!! 4Th Season - Eps.19", + "description": "Karasuno melaju ke tingkat nasional dan menghadapi tim-tim kuat. Latihan intens dan pertandingan menegangkan menguji kemampuan individu serta kerja sama tim, terutama bagi Hinata yang berkembang pesat.", + "startTime": "2026-04-29T17:00:00Z", + "endTime": "2026-04-29T17:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903604, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Haikyu!! 4Th Season - Eps.20", + "description": "Karasuno melaju ke tingkat nasional dan menghadapi tim-tim kuat. Latihan intens dan pertandingan menegangkan menguji kemampuan individu serta kerja sama tim, terutama bagi Hinata yang berkembang pesat.", + "startTime": "2026-04-29T17:30:00Z", + "endTime": "2026-04-29T18:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903605, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Tsukimichi -Moonlit Fantasy- Season 2 - Eps.10", + "description": "Makoto melanjutkan petualangannya di dunia lain, membangun kekuatan dan aliansi baru. Konflik dengan dewa dan kerajaan semakin kompleks, menampilkan aksi, strategi, dan perkembangan karakter utama.", + "startTime": "2026-04-29T18:00:00Z", + "endTime": "2026-04-29T18:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903606, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Tsukimichi -Moonlit Fantasy- Season 2 - Eps.11", + "description": "Makoto melanjutkan petualangannya di dunia lain, membangun kekuatan dan aliansi baru. Konflik dengan dewa dan kerajaan semakin kompleks, menampilkan aksi, strategi, dan perkembangan karakter utama.", + "startTime": "2026-04-29T18:30:00Z", + "endTime": "2026-04-29T19:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903607, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "One Piece: Marineford Arc - Eps.500", + "description": "Luffy berusaha menyelamatkan Ace dalam perang besar di Marineford. Pertempuran epik antara Angkatan Laut dan Bajak Laut Shirohige ini penuh pengorbanan, tragedi, dan momen yang mengubah dunia One Piece.", + "startTime": "2026-04-29T19:00:00Z", + "endTime": "2026-04-29T19:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903608, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "One Piece: Marineford Arc - Eps.501", + "description": "Luffy berusaha menyelamatkan Ace dalam perang besar di Marineford. Pertempuran epik antara Angkatan Laut dan Bajak Laut Shirohige ini penuh pengorbanan, tragedi, dan momen yang mengubah dunia One Piece.", + "startTime": "2026-04-29T19:30:00Z", + "endTime": "2026-04-29T20:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903609, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Tsukimichi -Moonlit Fantasy- Season 2 - Eps.10", + "description": "Makoto melanjutkan petualangannya di dunia lain, membangun kekuatan dan aliansi baru. Konflik dengan dewa dan kerajaan semakin kompleks, menampilkan aksi, strategi, dan perkembangan karakter utama.", + "startTime": "2026-04-29T20:00:00Z", + "endTime": "2026-04-29T20:30:00Z", + "thumbnail_url": "https://images.indihometv.com/tvod_thumbs/2026-04-29/30903609.webp", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903610, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Tsukimichi -Moonlit Fantasy- Season 2 - Eps.11", + "description": "Makoto melanjutkan petualangannya di dunia lain, membangun kekuatan dan aliansi baru. Konflik dengan dewa dan kerajaan semakin kompleks, menampilkan aksi, strategi, dan perkembangan karakter utama.", + "startTime": "2026-04-29T20:30:00Z", + "endTime": "2026-04-29T21:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903611, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Fruits Basket Season 1 - Eps.17", + "description": "Tohru Honda tinggal bersama keluarga Soma yang menyimpan kutukan zodiak. Kehadirannya membawa kehangatan dan perlahan menyembuhkan luka emosional anggota keluarga tersebut melalui kasih dan pengertian.", + "startTime": "2026-04-29T21:00:00Z", + "endTime": "2026-04-29T21:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903612, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Fruits Basket Season 1 - Eps.18", + "description": "Tohru Honda tinggal bersama keluarga Soma yang menyimpan kutukan zodiak. Kehadirannya membawa kehangatan dan perlahan menyembuhkan luka emosional anggota keluarga tersebut melalui kasih dan pengertian.", + "startTime": "2026-04-29T21:30:00Z", + "endTime": "2026-04-29T22:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903613, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "One Piece: Marineford Arc - Eps.500", + "description": "Luffy berusaha menyelamatkan Ace dalam perang besar di Marineford. Pertempuran epik antara Angkatan Laut dan Bajak Laut Shirohige ini penuh pengorbanan, tragedi, dan momen yang mengubah dunia One Piece.", + "startTime": "2026-04-29T22:00:00Z", + "endTime": "2026-04-29T22:30:00Z", + "thumbnail_url": "https://images.indihometv.com/tvod_thumbs/2026-04-29/30903613.webp", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903614, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "One Piece: Marineford Arc - Eps.501", + "description": "Luffy berusaha menyelamatkan Ace dalam perang besar di Marineford. Pertempuran epik antara Angkatan Laut dan Bajak Laut Shirohige ini penuh pengorbanan, tragedi, dan momen yang mengubah dunia One Piece.", + "startTime": "2026-04-29T22:30:00Z", + "endTime": "2026-04-29T23:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903615, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Tsukimichi -Moonlit Fantasy- Season 2 - Eps.10", + "description": "Makoto melanjutkan petualangannya di dunia lain, membangun kekuatan dan aliansi baru. Konflik dengan dewa dan kerajaan semakin kompleks, menampilkan aksi, strategi, dan perkembangan karakter utama.", + "startTime": "2026-04-29T23:00:00Z", + "endTime": "2026-04-29T23:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903616, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Tsukimichi -Moonlit Fantasy- Season 2 - Eps.11", + "description": "Makoto melanjutkan petualangannya di dunia lain, membangun kekuatan dan aliansi baru. Konflik dengan dewa dan kerajaan semakin kompleks, menampilkan aksi, strategi, dan perkembangan karakter utama.", + "startTime": "2026-04-29T23:30:00Z", + "endTime": "2026-04-30T00:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + } + ] + }, + { + "date": "2026-04-30", + "metadata": [ + { + "playUrlId": 30903617, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Fruits Basket Season 1 - Eps.17", + "description": "Tohru Honda tinggal bersama keluarga Soma yang menyimpan kutukan zodiak. Kehadirannya membawa kehangatan dan perlahan menyembuhkan luka emosional anggota keluarga tersebut melalui kasih dan pengertian.", + "startTime": "2026-04-30T00:00:00Z", + "endTime": "2026-04-30T00:30:00Z", + "thumbnail_url": "https://images.indihometv.com/tvod_thumbs/2026-04-30/30903617.webp", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903618, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Fruits Basket Season 1 - Eps.18", + "description": "Tohru Honda tinggal bersama keluarga Soma yang menyimpan kutukan zodiak. Kehadirannya membawa kehangatan dan perlahan menyembuhkan luka emosional anggota keluarga tersebut melalui kasih dan pengertian.", + "startTime": "2026-04-30T00:30:00Z", + "endTime": "2026-04-30T01:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903619, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Haikyu!! 4Th Season - Eps.19", + "description": "Karasuno melaju ke tingkat nasional dan menghadapi tim-tim kuat. Latihan intens dan pertandingan menegangkan menguji kemampuan individu serta kerja sama tim, terutama bagi Hinata yang berkembang pesat.", + "startTime": "2026-04-30T01:00:00Z", + "endTime": "2026-04-30T01:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903620, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Haikyu!! 4Th Season - Eps.20", + "description": "Karasuno melaju ke tingkat nasional dan menghadapi tim-tim kuat. Latihan intens dan pertandingan menegangkan menguji kemampuan individu serta kerja sama tim, terutama bagi Hinata yang berkembang pesat.", + "startTime": "2026-04-30T01:30:00Z", + "endTime": "2026-04-30T02:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903621, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "One Piece: Marineford Arc - Eps.500", + "description": "Luffy berusaha menyelamatkan Ace dalam perang besar di Marineford. Pertempuran epik antara Angkatan Laut dan Bajak Laut Shirohige ini penuh pengorbanan, tragedi, dan momen yang mengubah dunia One Piece.", + "startTime": "2026-04-30T02:00:00Z", + "endTime": "2026-04-30T02:30:00Z", + "thumbnail_url": "https://images.indihometv.com/tvod_thumbs/2026-04-30/30903621.webp", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903622, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "One Piece: Marineford Arc - Eps.501", + "description": "Luffy berusaha menyelamatkan Ace dalam perang besar di Marineford. Pertempuran epik antara Angkatan Laut dan Bajak Laut Shirohige ini penuh pengorbanan, tragedi, dan momen yang mengubah dunia One Piece.", + "startTime": "2026-04-30T02:30:00Z", + "endTime": "2026-04-30T03:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903623, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Tsukimichi -Moonlit Fantasy- Season 2 - Eps.10", + "description": "Makoto melanjutkan petualangannya di dunia lain, membangun kekuatan dan aliansi baru. Konflik dengan dewa dan kerajaan semakin kompleks, menampilkan aksi, strategi, dan perkembangan karakter utama.", + "startTime": "2026-04-30T03:00:00Z", + "endTime": "2026-04-30T03:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903624, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Tsukimichi -Moonlit Fantasy- Season 2 - Eps.11", + "description": "Makoto melanjutkan petualangannya di dunia lain, membangun kekuatan dan aliansi baru. Konflik dengan dewa dan kerajaan semakin kompleks, menampilkan aksi, strategi, dan perkembangan karakter utama.", + "startTime": "2026-04-30T03:30:00Z", + "endTime": "2026-04-30T04:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903625, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Fruits Basket Season 1 - Eps.17", + "description": "Tohru Honda tinggal bersama keluarga Soma yang menyimpan kutukan zodiak. Kehadirannya membawa kehangatan dan perlahan menyembuhkan luka emosional anggota keluarga tersebut melalui kasih dan pengertian.", + "startTime": "2026-04-30T04:00:00Z", + "endTime": "2026-04-30T04:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903626, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Fruits Basket Season 1 - Eps.18", + "description": "Tohru Honda tinggal bersama keluarga Soma yang menyimpan kutukan zodiak. Kehadirannya membawa kehangatan dan perlahan menyembuhkan luka emosional anggota keluarga tersebut melalui kasih dan pengertian.", + "startTime": "2026-04-30T04:30:00Z", + "endTime": "2026-04-30T05:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903627, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Haikyu!! 4Th Season - Eps.19", + "description": "Karasuno melaju ke tingkat nasional dan menghadapi tim-tim kuat. Latihan intens dan pertandingan menegangkan menguji kemampuan individu serta kerja sama tim, terutama bagi Hinata yang berkembang pesat.", + "startTime": "2026-04-30T05:00:00Z", + "endTime": "2026-04-30T05:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903628, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Haikyu!! 4Th Season - Eps.20", + "description": "Karasuno melaju ke tingkat nasional dan menghadapi tim-tim kuat. Latihan intens dan pertandingan menegangkan menguji kemampuan individu serta kerja sama tim, terutama bagi Hinata yang berkembang pesat.", + "startTime": "2026-04-30T05:30:00Z", + "endTime": "2026-04-30T06:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903629, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Tsukimichi -Moonlit Fantasy- Season 2 - Eps.10", + "description": "Makoto melanjutkan petualangannya di dunia lain, membangun kekuatan dan aliansi baru. Konflik dengan dewa dan kerajaan semakin kompleks, menampilkan aksi, strategi, dan perkembangan karakter utama.", + "startTime": "2026-04-30T06:00:00Z", + "endTime": "2026-04-30T06:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903630, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Tsukimichi -Moonlit Fantasy- Season 2 - Eps.11", + "description": "Makoto melanjutkan petualangannya di dunia lain, membangun kekuatan dan aliansi baru. Konflik dengan dewa dan kerajaan semakin kompleks, menampilkan aksi, strategi, dan perkembangan karakter utama.", + "startTime": "2026-04-30T06:30:00Z", + "endTime": "2026-04-30T07:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903631, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "One Piece: Marineford Arc - Eps.500", + "description": "Luffy berusaha menyelamatkan Ace dalam perang besar di Marineford. Pertempuran epik antara Angkatan Laut dan Bajak Laut Shirohige ini penuh pengorbanan, tragedi, dan momen yang mengubah dunia One Piece.", + "startTime": "2026-04-30T07:00:00Z", + "endTime": "2026-04-30T07:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903632, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "One Piece: Marineford Arc - Eps.501", + "description": "Luffy berusaha menyelamatkan Ace dalam perang besar di Marineford. Pertempuran epik antara Angkatan Laut dan Bajak Laut Shirohige ini penuh pengorbanan, tragedi, dan momen yang mengubah dunia One Piece.", + "startTime": "2026-04-30T07:30:00Z", + "endTime": "2026-04-30T08:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903633, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Haikyu!! 4Th Season - Eps.19", + "description": "Karasuno melaju ke tingkat nasional dan menghadapi tim-tim kuat. Latihan intens dan pertandingan menegangkan menguji kemampuan individu serta kerja sama tim, terutama bagi Hinata yang berkembang pesat.", + "startTime": "2026-04-30T08:00:00Z", + "endTime": "2026-04-30T08:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903634, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Haikyu!! 4Th Season - Eps.20", + "description": "Karasuno melaju ke tingkat nasional dan menghadapi tim-tim kuat. Latihan intens dan pertandingan menegangkan menguji kemampuan individu serta kerja sama tim, terutama bagi Hinata yang berkembang pesat.", + "startTime": "2026-04-30T08:30:00Z", + "endTime": "2026-04-30T09:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903635, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Fruits Basket Season 1 - Eps.17", + "description": "Tohru Honda tinggal bersama keluarga Soma yang menyimpan kutukan zodiak. Kehadirannya membawa kehangatan dan perlahan menyembuhkan luka emosional anggota keluarga tersebut melalui kasih dan pengertian.", + "startTime": "2026-04-30T09:00:00Z", + "endTime": "2026-04-30T09:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903636, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Fruits Basket Season 1 - Eps.18", + "description": "Tohru Honda tinggal bersama keluarga Soma yang menyimpan kutukan zodiak. Kehadirannya membawa kehangatan dan perlahan menyembuhkan luka emosional anggota keluarga tersebut melalui kasih dan pengertian.", + "startTime": "2026-04-30T09:30:00Z", + "endTime": "2026-04-30T10:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903637, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Tsukimichi -Moonlit Fantasy- Season 2 - Eps.10", + "description": "Makoto melanjutkan petualangannya di dunia lain, membangun kekuatan dan aliansi baru. Konflik dengan dewa dan kerajaan semakin kompleks, menampilkan aksi, strategi, dan perkembangan karakter utama.", + "startTime": "2026-04-30T10:00:00Z", + "endTime": "2026-04-30T10:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903638, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Tsukimichi -Moonlit Fantasy- Season 2 - Eps.11", + "description": "Makoto melanjutkan petualangannya di dunia lain, membangun kekuatan dan aliansi baru. Konflik dengan dewa dan kerajaan semakin kompleks, menampilkan aksi, strategi, dan perkembangan karakter utama.", + "startTime": "2026-04-30T10:30:00Z", + "endTime": "2026-04-30T11:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903639, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "One Piece: Marineford Arc - Eps.500", + "description": "Luffy berusaha menyelamatkan Ace dalam perang besar di Marineford. Pertempuran epik antara Angkatan Laut dan Bajak Laut Shirohige ini penuh pengorbanan, tragedi, dan momen yang mengubah dunia One Piece.", + "startTime": "2026-04-30T11:00:00Z", + "endTime": "2026-04-30T11:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903640, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "One Piece: Marineford Arc - Eps.501", + "description": "Luffy berusaha menyelamatkan Ace dalam perang besar di Marineford. Pertempuran epik antara Angkatan Laut dan Bajak Laut Shirohige ini penuh pengorbanan, tragedi, dan momen yang mengubah dunia One Piece.", + "startTime": "2026-04-30T11:30:00Z", + "endTime": "2026-04-30T12:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903641, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Haikyu!! 4Th Season - Eps.19", + "description": "Karasuno melaju ke tingkat nasional dan menghadapi tim-tim kuat. Latihan intens dan pertandingan menegangkan menguji kemampuan individu serta kerja sama tim, terutama bagi Hinata yang berkembang pesat.", + "startTime": "2026-04-30T12:00:00Z", + "endTime": "2026-04-30T12:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903642, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Haikyu!! 4Th Season - Eps.20", + "description": "Karasuno melaju ke tingkat nasional dan menghadapi tim-tim kuat. Latihan intens dan pertandingan menegangkan menguji kemampuan individu serta kerja sama tim, terutama bagi Hinata yang berkembang pesat.", + "startTime": "2026-04-30T12:30:00Z", + "endTime": "2026-04-30T13:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903643, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Fruits Basket Season 1 - Eps.17", + "description": "Tohru Honda tinggal bersama keluarga Soma yang menyimpan kutukan zodiak. Kehadirannya membawa kehangatan dan perlahan menyembuhkan luka emosional anggota keluarga tersebut melalui kasih dan pengertian.", + "startTime": "2026-04-30T13:00:00Z", + "endTime": "2026-04-30T13:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903644, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Fruits Basket Season 1 - Eps.18", + "description": "Tohru Honda tinggal bersama keluarga Soma yang menyimpan kutukan zodiak. Kehadirannya membawa kehangatan dan perlahan menyembuhkan luka emosional anggota keluarga tersebut melalui kasih dan pengertian.", + "startTime": "2026-04-30T13:30:00Z", + "endTime": "2026-04-30T14:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903645, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Tsukimichi -Moonlit Fantasy- Season 2 - Eps.10", + "description": "Makoto melanjutkan petualangannya di dunia lain, membangun kekuatan dan aliansi baru. Konflik dengan dewa dan kerajaan semakin kompleks, menampilkan aksi, strategi, dan perkembangan karakter utama.", + "startTime": "2026-04-30T14:00:00Z", + "endTime": "2026-04-30T14:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903646, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Tsukimichi -Moonlit Fantasy- Season 2 - Eps.11", + "description": "Makoto melanjutkan petualangannya di dunia lain, membangun kekuatan dan aliansi baru. Konflik dengan dewa dan kerajaan semakin kompleks, menampilkan aksi, strategi, dan perkembangan karakter utama.", + "startTime": "2026-04-30T14:30:00Z", + "endTime": "2026-04-30T15:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903647, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Haikyu!! 4Th Season - Eps.19", + "description": "Karasuno melaju ke tingkat nasional dan menghadapi tim-tim kuat. Latihan intens dan pertandingan menegangkan menguji kemampuan individu serta kerja sama tim, terutama bagi Hinata yang berkembang pesat.", + "startTime": "2026-04-30T15:00:00Z", + "endTime": "2026-04-30T15:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903648, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Haikyu!! 4Th Season - Eps.20", + "description": "Karasuno melaju ke tingkat nasional dan menghadapi tim-tim kuat. Latihan intens dan pertandingan menegangkan menguji kemampuan individu serta kerja sama tim, terutama bagi Hinata yang berkembang pesat.", + "startTime": "2026-04-30T15:30:00Z", + "endTime": "2026-04-30T16:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903649, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Fruits Basket Season 1 - Eps.17", + "description": "Tohru Honda tinggal bersama keluarga Soma yang menyimpan kutukan zodiak. Kehadirannya membawa kehangatan dan perlahan menyembuhkan luka emosional anggota keluarga tersebut melalui kasih dan pengertian.", + "startTime": "2026-04-30T16:00:00Z", + "endTime": "2026-04-30T16:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903650, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Fruits Basket Season 1 - Eps.18", + "description": "Tohru Honda tinggal bersama keluarga Soma yang menyimpan kutukan zodiak. Kehadirannya membawa kehangatan dan perlahan menyembuhkan luka emosional anggota keluarga tersebut melalui kasih dan pengertian.", + "startTime": "2026-04-30T16:30:00Z", + "endTime": "2026-04-30T17:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903651, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Haikyu!! 4Th Season - Eps.20", + "description": "Karasuno melaju ke tingkat nasional dan menghadapi tim-tim kuat. Latihan intens dan pertandingan menegangkan menguji kemampuan individu serta kerja sama tim, terutama bagi Hinata yang berkembang pesat.", + "startTime": "2026-04-30T17:00:00Z", + "endTime": "2026-04-30T17:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903652, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Haikyu!! 4Th Season - Eps.21", + "description": "Karasuno melaju ke tingkat nasional dan menghadapi tim-tim kuat. Latihan intens dan pertandingan menegangkan menguji kemampuan individu serta kerja sama tim, terutama bagi Hinata yang berkembang pesat.", + "startTime": "2026-04-30T17:30:00Z", + "endTime": "2026-04-30T18:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903653, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "I'Ll Become A Villainess Who Goes Down In History - Eps.10", + "description": "Seorang gadis bereinkarnasi sebagai karakter antagonis dalam dunia novel. Ia bertekad menjadi villain legendaris, namun tindakannya justru mengubah takdir dan menarik perhatian banyak orang di sekitarnya.", + "startTime": "2026-04-30T18:00:00Z", + "endTime": "2026-04-30T18:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903654, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "I'Ll Become A Villainess Who Goes Down In History - Eps.11", + "description": "Seorang gadis bereinkarnasi sebagai karakter antagonis dalam dunia novel. Ia bertekad menjadi villain legendaris, namun tindakannya justru mengubah takdir dan menarik perhatian banyak orang di sekitarnya.", + "startTime": "2026-04-30T18:30:00Z", + "endTime": "2026-04-30T19:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903655, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Nyaight Of The Living Cat - Eps.1", + "description": "Dunia dilanda wabah aneh yang mengubah manusia menjadi kucing. Seorang pria berusaha bertahan hidup di tengah kekacauan, menghadirkan perpaduan horor, komedi absurd, dan satire unik.", + "startTime": "2026-04-30T19:00:00Z", + "endTime": "2026-04-30T19:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903656, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Nyaight Of The Living Cat - Eps.2", + "description": "Dunia dilanda wabah aneh yang mengubah manusia menjadi kucing. Seorang pria berusaha bertahan hidup di tengah kekacauan, menghadirkan perpaduan horor, komedi absurd, dan satire unik.", + "startTime": "2026-04-30T19:30:00Z", + "endTime": "2026-04-30T20:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903657, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "I'Ll Become A Villainess Who Goes Down In History - Eps.10", + "description": "Seorang gadis bereinkarnasi sebagai karakter antagonis dalam dunia novel. Ia bertekad menjadi villain legendaris, namun tindakannya justru mengubah takdir dan menarik perhatian banyak orang di sekitarnya.", + "startTime": "2026-04-30T20:00:00Z", + "endTime": "2026-04-30T20:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903658, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "I'Ll Become A Villainess Who Goes Down In History - Eps.11", + "description": "Seorang gadis bereinkarnasi sebagai karakter antagonis dalam dunia novel. Ia bertekad menjadi villain legendaris, namun tindakannya justru mengubah takdir dan menarik perhatian banyak orang di sekitarnya.", + "startTime": "2026-04-30T20:30:00Z", + "endTime": "2026-04-30T21:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903659, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Fruits Basket Season 1 - Eps.18", + "description": "Tohru Honda tinggal bersama keluarga Soma yang menyimpan kutukan zodiak. Kehadirannya membawa kehangatan dan perlahan menyembuhkan luka emosional anggota keluarga tersebut melalui kasih dan pengertian.", + "startTime": "2026-04-30T21:00:00Z", + "endTime": "2026-04-30T21:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903660, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Fruits Basket Season 1 - Eps.19", + "description": "Tohru Honda tinggal bersama keluarga Soma yang menyimpan kutukan zodiak. Kehadirannya membawa kehangatan dan perlahan menyembuhkan luka emosional anggota keluarga tersebut melalui kasih dan pengertian.", + "startTime": "2026-04-30T21:30:00Z", + "endTime": "2026-04-30T22:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903661, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Nyaight Of The Living Cat - Eps.1", + "description": "Dunia dilanda wabah aneh yang mengubah manusia menjadi kucing. Seorang pria berusaha bertahan hidup di tengah kekacauan, menghadirkan perpaduan horor, komedi absurd, dan satire unik.", + "startTime": "2026-04-30T22:00:00Z", + "endTime": "2026-04-30T22:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903662, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Nyaight Of The Living Cat - Eps.2", + "description": "Dunia dilanda wabah aneh yang mengubah manusia menjadi kucing. Seorang pria berusaha bertahan hidup di tengah kekacauan, menghadirkan perpaduan horor, komedi absurd, dan satire unik.", + "startTime": "2026-04-30T22:30:00Z", + "endTime": "2026-04-30T23:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903663, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "I'Ll Become A Villainess Who Goes Down In History - Eps.10", + "description": "Seorang gadis bereinkarnasi sebagai karakter antagonis dalam dunia novel. Ia bertekad menjadi villain legendaris, namun tindakannya justru mengubah takdir dan menarik perhatian banyak orang di sekitarnya.", + "startTime": "2026-04-30T23:00:00Z", + "endTime": "2026-04-30T23:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 30903664, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "I'Ll Become A Villainess Who Goes Down In History - Eps.11", + "description": "Seorang gadis bereinkarnasi sebagai karakter antagonis dalam dunia novel. Ia bertekad menjadi villain legendaris, namun tindakannya justru mengubah takdir dan menarik perhatian banyak orang di sekitarnya.", + "startTime": "2026-04-30T23:30:00Z", + "endTime": "2026-05-01T00:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + } + ] + }, + { + "date": "2026-05-01", + "metadata": [ + { + "playUrlId": 31857332, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Fruits Basket Season 1 - Eps.18", + "description": "Tohru Honda tinggal bersama keluarga Soma yang menyimpan kutukan zodiak. Kehadirannya membawa kehangatan dan perlahan menyembuhkan luka emosional anggota keluarga tersebut melalui kasih dan pengertian.", + "startTime": "2026-05-01T00:00:00Z", + "endTime": "2026-05-01T00:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 31857333, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Fruits Basket Season 1 - Eps.19", + "description": "Tohru Honda tinggal bersama keluarga Soma yang menyimpan kutukan zodiak. Kehadirannya membawa kehangatan dan perlahan menyembuhkan luka emosional anggota keluarga tersebut melalui kasih dan pengertian.", + "startTime": "2026-05-01T00:30:00Z", + "endTime": "2026-05-01T01:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 31857334, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Haikyu!! 4Th Season - Eps.20", + "description": "Karasuno melaju ke tingkat nasional dan menghadapi tim-tim kuat. Latihan intens dan pertandingan menegangkan menguji kemampuan individu serta kerja sama tim, terutama bagi Hinata yang berkembang pesat.", + "startTime": "2026-05-01T01:00:00Z", + "endTime": "2026-05-01T01:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 31857335, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Haikyu!! 4Th Season - Eps.21", + "description": "Karasuno melaju ke tingkat nasional dan menghadapi tim-tim kuat. Latihan intens dan pertandingan menegangkan menguji kemampuan individu serta kerja sama tim, terutama bagi Hinata yang berkembang pesat.", + "startTime": "2026-05-01T01:30:00Z", + "endTime": "2026-05-01T02:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 31857336, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Nyaight Of The Living Cat - Eps.1", + "description": "Dunia dilanda wabah aneh yang mengubah manusia menjadi kucing. Seorang pria berusaha bertahan hidup di tengah kekacauan, menghadirkan perpaduan horor, komedi absurd, dan satire unik.", + "startTime": "2026-05-01T02:00:00Z", + "endTime": "2026-05-01T02:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 31857337, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Nyaight Of The Living Cat - Eps.2", + "description": "Dunia dilanda wabah aneh yang mengubah manusia menjadi kucing. Seorang pria berusaha bertahan hidup di tengah kekacauan, menghadirkan perpaduan horor, komedi absurd, dan satire unik.", + "startTime": "2026-05-01T02:30:00Z", + "endTime": "2026-05-01T03:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 31857338, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "I'Ll Become A Villainess Who Goes Down In History - Eps.10", + "description": "Seorang gadis bereinkarnasi sebagai karakter antagonis dalam dunia novel. Ia bertekad menjadi villain legendaris, namun tindakannya justru mengubah takdir dan menarik perhatian banyak orang di sekitarnya.", + "startTime": "2026-05-01T03:00:00Z", + "endTime": "2026-05-01T03:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 31857339, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "I'Ll Become A Villainess Who Goes Down In History - Eps.11", + "description": "Seorang gadis bereinkarnasi sebagai karakter antagonis dalam dunia novel. Ia bertekad menjadi villain legendaris, namun tindakannya justru mengubah takdir dan menarik perhatian banyak orang di sekitarnya.", + "startTime": "2026-05-01T03:30:00Z", + "endTime": "2026-05-01T04:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 31857340, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Fruits Basket Season 1 - Eps.18", + "description": "Tohru Honda tinggal bersama keluarga Soma yang menyimpan kutukan zodiak. Kehadirannya membawa kehangatan dan perlahan menyembuhkan luka emosional anggota keluarga tersebut melalui kasih dan pengertian.", + "startTime": "2026-05-01T04:00:00Z", + "endTime": "2026-05-01T04:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 31857341, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Fruits Basket Season 1 - Eps.19", + "description": "Tohru Honda tinggal bersama keluarga Soma yang menyimpan kutukan zodiak. Kehadirannya membawa kehangatan dan perlahan menyembuhkan luka emosional anggota keluarga tersebut melalui kasih dan pengertian.", + "startTime": "2026-05-01T04:30:00Z", + "endTime": "2026-05-01T05:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 31857342, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Haikyu!! 4Th Season - Eps.20", + "description": "Karasuno melaju ke turnamen nasional dan menghadapi tim-tim elit dengan gaya bermain berbeda. Latihan intens dan strategi baru menguji kemampuan Hinata serta rekan-rekannya dalam menghadapi tekanan pertandingan besar.", + "startTime": "2026-05-01T05:00:00Z", + "endTime": "2026-05-01T05:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 31857343, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Haikyu!! 4Th Season - Eps.21", + "description": "Karasuno melaju ke turnamen nasional dan menghadapi tim-tim elit dengan gaya bermain berbeda. Latihan intens dan strategi baru menguji kemampuan Hinata serta rekan-rekannya dalam menghadapi tekanan pertandingan besar.", + "startTime": "2026-05-01T05:30:00Z", + "endTime": "2026-05-01T06:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 31857344, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "I'll Become A Villainess Who Goes Down In History - Eps.10", + "description": "Seorang gadis bereinkarnasi sebagai tokoh antagonis dalam novel fantasi. Ia bertekad menjadi villain sejati, namun pilihan tindakannya justru mengubah jalan cerita dan memengaruhi hubungan dengan karakter lain.", + "startTime": "2026-05-01T06:00:00Z", + "endTime": "2026-05-01T06:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 31857345, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "I'll Become A Villainess Who Goes Down In History - Eps.11", + "description": "Seorang gadis bereinkarnasi sebagai tokoh antagonis dalam novel fantasi. Ia bertekad menjadi villain sejati, namun pilihan tindakannya justru mengubah jalan cerita dan memengaruhi hubungan dengan karakter lain.", + "startTime": "2026-05-01T06:30:00Z", + "endTime": "2026-05-01T07:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 31857346, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Nyaight Of The Living Cat - Eps.1", + "description": "Wabah misterius mengubah manusia menjadi kucing saat tersentuh. Seorang pria berusaha bertahan hidup di dunia yang kacau, menghadapi situasi absurd yang memadukan unsur horor ringan dan komedi unik.", + "startTime": "2026-05-01T07:00:00Z", + "endTime": "2026-05-01T07:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 31857347, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Nyaight Of The Living Cat - Eps.2", + "description": "Wabah misterius mengubah manusia menjadi kucing saat tersentuh. Seorang pria berusaha bertahan hidup di dunia yang kacau, menghadapi situasi absurd yang memadukan unsur horor ringan dan komedi unik.", + "startTime": "2026-05-01T07:30:00Z", + "endTime": "2026-05-01T08:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 31857348, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Haikyu!! 4Th Season - Eps.20", + "description": "Karasuno melaju ke turnamen nasional dan menghadapi tim-tim elit dengan gaya bermain berbeda. Latihan intens dan strategi baru menguji kemampuan Hinata serta rekan-rekannya dalam menghadapi tekanan pertandingan besar.", + "startTime": "2026-05-01T08:00:00Z", + "endTime": "2026-05-01T08:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 31857349, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Haikyu!! 4Th Season - Eps.21", + "description": "Karasuno melaju ke turnamen nasional dan menghadapi tim-tim elit dengan gaya bermain berbeda. Latihan intens dan strategi baru menguji kemampuan Hinata serta rekan-rekannya dalam menghadapi tekanan pertandingan besar.", + "startTime": "2026-05-01T08:30:00Z", + "endTime": "2026-05-01T09:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 31857350, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Fruits Basket Season 1 - Eps.18", + "description": "Tohru Honda tinggal bersama keluarga Soma yang dikutuk berubah menjadi hewan zodiak. Kehadirannya membawa kehangatan, membantu mereka menghadapi trauma dan membuka jalan menuju penyembuhan emosional.", + "startTime": "2026-05-01T09:00:00Z", + "endTime": "2026-05-01T09:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 31857351, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Fruits Basket Season 1 - Eps.19", + "description": "Tohru Honda tinggal bersama keluarga Soma yang dikutuk berubah menjadi hewan zodiak. Kehadirannya membawa kehangatan, membantu mereka menghadapi trauma dan membuka jalan menuju penyembuhan emosional.", + "startTime": "2026-05-01T09:30:00Z", + "endTime": "2026-05-01T10:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 31857352, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "I'll Become A Villainess Who Goes Down In History - Eps.10", + "description": "Seorang gadis bereinkarnasi sebagai tokoh antagonis dalam novel fantasi. Ia bertekad menjadi villain sejati, namun pilihan tindakannya justru mengubah jalan cerita dan memengaruhi hubungan dengan karakter lain.", + "startTime": "2026-05-01T10:00:00Z", + "endTime": "2026-05-01T10:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 31857353, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "I'll Become A Villainess Who Goes Down In History - Eps.11", + "description": "Seorang gadis bereinkarnasi sebagai tokoh antagonis dalam novel fantasi. Ia bertekad menjadi villain sejati, namun pilihan tindakannya justru mengubah jalan cerita dan memengaruhi hubungan dengan karakter lain.", + "startTime": "2026-05-01T10:30:00Z", + "endTime": "2026-05-01T11:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 31857354, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Nyaight Of The Living Cat - Eps.1", + "description": "Wabah misterius mengubah manusia menjadi kucing saat tersentuh. Seorang pria berusaha bertahan hidup di dunia yang kacau, menghadapi situasi absurd yang memadukan unsur horor ringan dan komedi unik.", + "startTime": "2026-05-01T11:00:00Z", + "endTime": "2026-05-01T11:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 31857355, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Nyaight Of The Living Cat - Eps.2", + "description": "Wabah misterius mengubah manusia menjadi kucing saat tersentuh. Seorang pria berusaha bertahan hidup di dunia yang kacau, menghadapi situasi absurd yang memadukan unsur horor ringan dan komedi unik.", + "startTime": "2026-05-01T11:30:00Z", + "endTime": "2026-05-01T12:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 31857356, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Haikyu!! 4Th Season - Eps.20", + "description": "Karasuno melaju ke turnamen nasional dan menghadapi tim-tim elit dengan gaya bermain berbeda. Latihan intens dan strategi baru menguji kemampuan Hinata serta rekan-rekannya dalam menghadapi tekanan pertandingan besar.", + "startTime": "2026-05-01T12:00:00Z", + "endTime": "2026-05-01T12:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 31857357, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Haikyu!! 4Th Season - Eps.21", + "description": "Karasuno melaju ke turnamen nasional dan menghadapi tim-tim elit dengan gaya bermain berbeda. Latihan intens dan strategi baru menguji kemampuan Hinata serta rekan-rekannya dalam menghadapi tekanan pertandingan besar.", + "startTime": "2026-05-01T12:30:00Z", + "endTime": "2026-05-01T13:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 31857358, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Fruits Basket Season 1 - Eps.18", + "description": "Tohru Honda tinggal bersama keluarga Soma yang dikutuk berubah menjadi hewan zodiak. Kehadirannya membawa kehangatan, membantu mereka menghadapi trauma dan membuka jalan menuju penyembuhan emosional.", + "startTime": "2026-05-01T13:00:00Z", + "endTime": "2026-05-01T13:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 31857359, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Fruits Basket Season 1 - Eps.19", + "description": "Tohru Honda tinggal bersama keluarga Soma yang dikutuk berubah menjadi hewan zodiak. Kehadirannya membawa kehangatan, membantu mereka menghadapi trauma dan membuka jalan menuju penyembuhan emosional.", + "startTime": "2026-05-01T13:30:00Z", + "endTime": "2026-05-01T14:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 31857360, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "I'll Become A Villainess Who Goes Down In History - Eps.10", + "description": "Seorang gadis bereinkarnasi sebagai tokoh antagonis dalam novel fantasi. Ia bertekad menjadi villain sejati, namun pilihan tindakannya justru mengubah jalan cerita dan memengaruhi hubungan dengan karakter lain.", + "startTime": "2026-05-01T14:00:00Z", + "endTime": "2026-05-01T14:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 31857361, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "I'll Become A Villainess Who Goes Down In History - Eps.11", + "description": "Seorang gadis bereinkarnasi sebagai tokoh antagonis dalam novel fantasi. Ia bertekad menjadi villain sejati, namun pilihan tindakannya justru mengubah jalan cerita dan memengaruhi hubungan dengan karakter lain.", + "startTime": "2026-05-01T14:30:00Z", + "endTime": "2026-05-01T15:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 31857362, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Haikyu!! 4Th Season - Eps.20", + "description": "Karasuno melaju ke turnamen nasional dan menghadapi tim-tim elit dengan gaya bermain berbeda. Latihan intens dan strategi baru menguji kemampuan Hinata serta rekan-rekannya dalam menghadapi tekanan pertandingan besar.", + "startTime": "2026-05-01T15:00:00Z", + "endTime": "2026-05-01T15:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 31857363, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Haikyu!! 4Th Season - Eps.21", + "description": "Karasuno melaju ke turnamen nasional dan menghadapi tim-tim elit dengan gaya bermain berbeda. Latihan intens dan strategi baru menguji kemampuan Hinata serta rekan-rekannya dalam menghadapi tekanan pertandingan besar.", + "startTime": "2026-05-01T15:30:00Z", + "endTime": "2026-05-01T16:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 31857364, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Fruits Basket Season 1 - Eps.18", + "description": "Tohru Honda tinggal bersama keluarga Soma yang dikutuk berubah menjadi hewan zodiak. Kehadirannya membawa kehangatan, membantu mereka menghadapi trauma dan membuka jalan menuju penyembuhan emosional.", + "startTime": "2026-05-01T16:00:00Z", + "endTime": "2026-05-01T16:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 31857365, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Fruits Basket Season 1 - Eps.19", + "description": "Tohru Honda tinggal bersama keluarga Soma yang dikutuk berubah menjadi hewan zodiak. Kehadirannya membawa kehangatan, membantu mereka menghadapi trauma dan membuka jalan menuju penyembuhan emosional.", + "startTime": "2026-05-01T16:30:00Z", + "endTime": "2026-05-01T17:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 31857366, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Haikyu!! 4Th Season - Eps.21", + "description": "Karasuno melaju ke turnamen nasional dan menghadapi tim-tim elit dengan gaya bermain berbeda. Latihan intens dan strategi baru menguji kemampuan Hinata serta rekan-rekannya dalam menghadapi tekanan pertandingan besar.", + "startTime": "2026-05-01T17:00:00Z", + "endTime": "2026-05-01T17:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 31857367, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Haikyu!! 4Th Season - Eps.22", + "description": "Karasuno melaju ke turnamen nasional dan menghadapi tim-tim elit dengan gaya bermain berbeda. Latihan intens dan strategi baru menguji kemampuan Hinata serta rekan-rekannya dalam menghadapi tekanan pertandingan besar.", + "startTime": "2026-05-01T17:30:00Z", + "endTime": "2026-05-01T18:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 31857368, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "I'll Become A Villainess Who Goes Down In History - Eps.11", + "description": "Seorang gadis bereinkarnasi sebagai tokoh antagonis dalam novel fantasi. Ia bertekad menjadi villain sejati, namun pilihan tindakannya justru mengubah jalan cerita dan memengaruhi hubungan dengan karakter lain.", + "startTime": "2026-05-01T18:00:00Z", + "endTime": "2026-05-01T18:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 31857369, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "I'll Become A Villainess Who Goes Down In History - Eps.12", + "description": "Seorang gadis bereinkarnasi sebagai tokoh antagonis dalam novel fantasi. Ia bertekad menjadi villain sejati, namun pilihan tindakannya justru mengubah jalan cerita dan memengaruhi hubungan dengan karakter lain.", + "startTime": "2026-05-01T18:30:00Z", + "endTime": "2026-05-01T19:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 31857370, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Nyaight Of The Living Cat - Eps.3", + "description": "Wabah misterius mengubah manusia menjadi kucing saat tersentuh. Seorang pria berusaha bertahan hidup di dunia yang kacau, menghadapi situasi absurd yang memadukan unsur horor ringan dan komedi unik.", + "startTime": "2026-05-01T19:00:00Z", + "endTime": "2026-05-01T19:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 31857371, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Nyaight Of The Living Cat - Eps.4", + "description": "Wabah misterius mengubah manusia menjadi kucing saat tersentuh. Seorang pria berusaha bertahan hidup di dunia yang kacau, menghadapi situasi absurd yang memadukan unsur horor ringan dan komedi unik.", + "startTime": "2026-05-01T19:30:00Z", + "endTime": "2026-05-01T20:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 31857372, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "I'll Become A Villainess Who Goes Down In History - Eps.11", + "description": "Seorang gadis bereinkarnasi sebagai tokoh antagonis dalam novel fantasi. Ia bertekad menjadi villain sejati, namun pilihan tindakannya justru mengubah jalan cerita dan memengaruhi hubungan dengan karakter lain.", + "startTime": "2026-05-01T20:00:00Z", + "endTime": "2026-05-01T20:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 31857373, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "I'll Become A Villainess Who Goes Down In History - Eps.12", + "description": "Seorang gadis bereinkarnasi sebagai tokoh antagonis dalam novel fantasi. Ia bertekad menjadi villain sejati, namun pilihan tindakannya justru mengubah jalan cerita dan memengaruhi hubungan dengan karakter lain.", + "startTime": "2026-05-01T20:30:00Z", + "endTime": "2026-05-01T21:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 31857374, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Fruits Basket Season 1 - Eps.19", + "description": "Tohru Honda tinggal bersama keluarga Soma yang dikutuk berubah menjadi hewan zodiak. Kehadirannya membawa kehangatan, membantu mereka menghadapi trauma dan membuka jalan menuju penyembuhan emosional.", + "startTime": "2026-05-01T21:00:00Z", + "endTime": "2026-05-01T21:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 31857375, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Fruits Basket Season 1 - Eps.20", + "description": "Tohru Honda tinggal bersama keluarga Soma yang dikutuk berubah menjadi hewan zodiak. Kehadirannya membawa kehangatan, membantu mereka menghadapi trauma dan membuka jalan menuju penyembuhan emosional.", + "startTime": "2026-05-01T21:30:00Z", + "endTime": "2026-05-01T22:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 31857376, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Nyaight Of The Living Cat - Eps.3", + "description": "Wabah misterius mengubah manusia menjadi kucing saat tersentuh. Seorang pria berusaha bertahan hidup di dunia yang kacau, menghadapi situasi absurd yang memadukan unsur horor ringan dan komedi unik.", + "startTime": "2026-05-01T22:00:00Z", + "endTime": "2026-05-01T22:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 31857377, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Nyaight Of The Living Cat - Eps.4", + "description": "Wabah misterius mengubah manusia menjadi kucing saat tersentuh. Seorang pria berusaha bertahan hidup di dunia yang kacau, menghadapi situasi absurd yang memadukan unsur horor ringan dan komedi unik.", + "startTime": "2026-05-01T22:30:00Z", + "endTime": "2026-05-01T23:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 31857378, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "I'll Become A Villainess Who Goes Down In History - Eps.11", + "description": "Seorang gadis bereinkarnasi sebagai tokoh antagonis dalam novel fantasi. Ia bertekad menjadi villain sejati, namun pilihan tindakannya justru mengubah jalan cerita dan memengaruhi hubungan dengan karakter lain.", + "startTime": "2026-05-01T23:00:00Z", + "endTime": "2026-05-01T23:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 31857379, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "I'll Become A Villainess Who Goes Down In History - Eps.12", + "description": "Seorang gadis bereinkarnasi sebagai tokoh antagonis dalam novel fantasi. Ia bertekad menjadi villain sejati, namun pilihan tindakannya justru mengubah jalan cerita dan memengaruhi hubungan dengan karakter lain.", + "startTime": "2026-05-01T23:30:00Z", + "endTime": "2026-05-02T00:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + } + ] + }, + { + "date": "2026-05-02", + "metadata": [ + { + "playUrlId": 31857380, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Fruits Basket Season 1 - Eps.19", + "description": "Tohru Honda tinggal bersama keluarga Soma yang dikutuk berubah menjadi hewan zodiak. Kehadirannya membawa kehangatan, membantu mereka menghadapi trauma dan membuka jalan menuju penyembuhan emosional.", + "startTime": "2026-05-02T00:00:00Z", + "endTime": "2026-05-02T00:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 31857381, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Fruits Basket Season 1 - Eps.20", + "description": "Tohru Honda tinggal bersama keluarga Soma yang dikutuk berubah menjadi hewan zodiak. Kehadirannya membawa kehangatan, membantu mereka menghadapi trauma dan membuka jalan menuju penyembuhan emosional.", + "startTime": "2026-05-02T00:30:00Z", + "endTime": "2026-05-02T01:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 31857382, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Haikyu!! 4Th Season - Eps.21", + "description": "Karasuno melaju ke turnamen nasional dan menghadapi tim-tim elit dengan gaya bermain berbeda. Latihan intens dan strategi baru menguji kemampuan Hinata serta rekan-rekannya dalam menghadapi tekanan pertandingan besar.", + "startTime": "2026-05-02T01:00:00Z", + "endTime": "2026-05-02T01:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 31857383, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Haikyu!! 4Th Season - Eps.22", + "description": "Karasuno melaju ke turnamen nasional dan menghadapi tim-tim elit dengan gaya bermain berbeda. Latihan intens dan strategi baru menguji kemampuan Hinata serta rekan-rekannya dalam menghadapi tekanan pertandingan besar.", + "startTime": "2026-05-02T01:30:00Z", + "endTime": "2026-05-02T02:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 31857384, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Nyaight Of The Living Cat - Eps.3", + "description": "Wabah misterius mengubah manusia menjadi kucing saat tersentuh. Seorang pria berusaha bertahan hidup di dunia yang kacau, menghadapi situasi absurd yang memadukan unsur horor ringan dan komedi unik.", + "startTime": "2026-05-02T02:00:00Z", + "endTime": "2026-05-02T02:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 31857385, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Nyaight Of The Living Cat - Eps.4", + "description": "Wabah misterius mengubah manusia menjadi kucing saat tersentuh. Seorang pria berusaha bertahan hidup di dunia yang kacau, menghadapi situasi absurd yang memadukan unsur horor ringan dan komedi unik.", + "startTime": "2026-05-02T02:30:00Z", + "endTime": "2026-05-02T03:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 31857386, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "I'll Become A Villainess Who Goes Down In History - Eps.11", + "description": "Seorang gadis bereinkarnasi sebagai tokoh antagonis dalam novel fantasi. Ia bertekad menjadi villain sejati, namun pilihan tindakannya justru mengubah jalan cerita dan memengaruhi hubungan dengan karakter lain.", + "startTime": "2026-05-02T03:00:00Z", + "endTime": "2026-05-02T03:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 31857387, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "I'll Become A Villainess Who Goes Down In History - Eps.12", + "description": "Seorang gadis bereinkarnasi sebagai tokoh antagonis dalam novel fantasi. Ia bertekad menjadi villain sejati, namun pilihan tindakannya justru mengubah jalan cerita dan memengaruhi hubungan dengan karakter lain.", + "startTime": "2026-05-02T03:30:00Z", + "endTime": "2026-05-02T04:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 31857388, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Fruits Basket Season 1 - Eps.19", + "description": "Tohru Honda tinggal bersama keluarga Soma yang dikutuk berubah menjadi hewan zodiak. Kehadirannya membawa kehangatan, membantu mereka menghadapi trauma dan membuka jalan menuju penyembuhan emosional.", + "startTime": "2026-05-02T04:00:00Z", + "endTime": "2026-05-02T04:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 31857389, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Fruits Basket Season 1 - Eps.20", + "description": "Tohru Honda tinggal bersama keluarga Soma yang dikutuk berubah menjadi hewan zodiak. Kehadirannya membawa kehangatan, membantu mereka menghadapi trauma dan membuka jalan menuju penyembuhan emosional.", + "startTime": "2026-05-02T04:30:00Z", + "endTime": "2026-05-02T05:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 31857390, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Haikyu!! 4Th Season - Eps.18", + "description": "Karasuno melaju ke turnamen nasional dan menghadapi tim-tim elit dengan gaya bermain berbeda. Latihan intens dan strategi baru menguji kemampuan Hinata serta rekan-rekannya dalam menghadapi tekanan pertandingan besar.", + "startTime": "2026-05-02T05:00:00Z", + "endTime": "2026-05-02T05:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 31857391, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Haikyu!! 4Th Season - Eps.19", + "description": "Karasuno melaju ke turnamen nasional dan menghadapi tim-tim elit dengan gaya bermain berbeda. Latihan intens dan strategi baru menguji kemampuan Hinata serta rekan-rekannya dalam menghadapi tekanan pertandingan besar.", + "startTime": "2026-05-02T05:30:00Z", + "endTime": "2026-05-02T06:00:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 31857392, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Haikyu!! 4Th Season - Eps.20", + "description": "Karasuno melaju ke turnamen nasional dan menghadapi tim-tim elit dengan gaya bermain berbeda. Latihan intens dan strategi baru menguji kemampuan Hinata serta rekan-rekannya dalam menghadapi tekanan pertandingan besar.", + "startTime": "2026-05-02T06:00:00Z", + "endTime": "2026-05-02T06:30:00Z", + "thumbnail_url": "", + "status": "completed", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 31857393, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Haikyu!! 4Th Season - Eps.21", + "description": "Karasuno melaju ke turnamen nasional dan menghadapi tim-tim elit dengan gaya bermain berbeda. Latihan intens dan strategi baru menguji kemampuan Hinata serta rekan-rekannya dalam menghadapi tekanan pertandingan besar.", + "startTime": "2026-05-02T06:30:00Z", + "endTime": "2026-05-02T07:00:00Z", + "thumbnail_url": "", + "status": "ongoing", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 31857394, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Haikyu!! 4Th Season - Eps.22", + "description": "Karasuno melaju ke turnamen nasional dan menghadapi tim-tim elit dengan gaya bermain berbeda. Latihan intens dan strategi baru menguji kemampuan Hinata serta rekan-rekannya dalam menghadapi tekanan pertandingan besar.", + "startTime": "2026-05-02T07:00:00Z", + "endTime": "2026-05-02T07:30:00Z", + "thumbnail_url": "", + "status": "upcoming", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 31857395, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "The Do-Over Damsel Conquers The Dragon Emperor - Eps.9", + "description": "Seorang bangsawan wanita mendapatkan kesempatan kedua setelah kematian tragis. Ia berusaha mengubah nasib dengan menjalin hubungan dengan kaisar naga, dalam kisah penuh intrik politik dan romansa.", + "startTime": "2026-05-02T07:30:00Z", + "endTime": "2026-05-02T08:00:00Z", + "thumbnail_url": "", + "status": "upcoming", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 31857396, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "The Do-Over Damsel Conquers The Dragon Emperor - Eps.10", + "description": "Seorang bangsawan wanita mendapatkan kesempatan kedua setelah kematian tragis. Ia berusaha mengubah nasib dengan menjalin hubungan dengan kaisar naga, dalam kisah penuh intrik politik dan romansa.", + "startTime": "2026-05-02T08:00:00Z", + "endTime": "2026-05-02T08:30:00Z", + "thumbnail_url": "", + "status": "upcoming", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 31857397, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "The Do-Over Damsel Conquers The Dragon Emperor - Eps.11", + "description": "Seorang bangsawan wanita mendapatkan kesempatan kedua setelah kematian tragis. Ia berusaha mengubah nasib dengan menjalin hubungan dengan kaisar naga, dalam kisah penuh intrik politik dan romansa.", + "startTime": "2026-05-02T08:30:00Z", + "endTime": "2026-05-02T09:00:00Z", + "thumbnail_url": "", + "status": "upcoming", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 31857398, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "The Do-Over Damsel Conquers The Dragon Emperor - Eps.12", + "description": "Seorang bangsawan wanita mendapatkan kesempatan kedua setelah kematian tragis. Ia berusaha mengubah nasib dengan menjalin hubungan dengan kaisar naga, dalam kisah penuh intrik politik dan romansa.", + "startTime": "2026-05-02T09:00:00Z", + "endTime": "2026-05-02T09:30:00Z", + "thumbnail_url": "", + "status": "upcoming", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 31857399, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "One Piece: Marineford Arc - Eps.40", + "description": "Luffy terlibat dalam perang besar di Marineford untuk menyelamatkan Ace. Pertempuran antara Angkatan Laut dan Bajak Laut memicu tragedi besar, mengubah keseimbangan kekuatan dunia secara dramatis.", + "startTime": "2026-05-02T09:30:00Z", + "endTime": "2026-05-02T10:00:00Z", + "thumbnail_url": "", + "status": "upcoming", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 31857400, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "One Piece: Marineford Arc - Eps.41", + "description": "Luffy terlibat dalam perang besar di Marineford untuk menyelamatkan Ace. Pertempuran antara Angkatan Laut dan Bajak Laut memicu tragedi besar, mengubah keseimbangan kekuatan dunia secara dramatis.", + "startTime": "2026-05-02T10:00:00Z", + "endTime": "2026-05-02T10:30:00Z", + "thumbnail_url": "", + "status": "upcoming", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 31857401, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "One Piece: Marineford Arc - Eps.42", + "description": "Luffy terlibat dalam perang besar di Marineford untuk menyelamatkan Ace. Pertempuran antara Angkatan Laut dan Bajak Laut memicu tragedi besar, mengubah keseimbangan kekuatan dunia secara dramatis.", + "startTime": "2026-05-02T10:30:00Z", + "endTime": "2026-05-02T11:00:00Z", + "thumbnail_url": "", + "status": "upcoming", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 31857402, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "I'll Become A Villainess Who Goes Down In History - Eps.11", + "description": "Seorang gadis bereinkarnasi sebagai tokoh antagonis dalam novel fantasi. Ia bertekad menjadi villain sejati, namun pilihan tindakannya justru mengubah jalan cerita dan memengaruhi hubungan dengan karakter lain.", + "startTime": "2026-05-02T11:00:00Z", + "endTime": "2026-05-02T11:30:00Z", + "thumbnail_url": "", + "status": "upcoming", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 31857403, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "I'll Become A Villainess Who Goes Down In History - Eps.12", + "description": "Seorang gadis bereinkarnasi sebagai tokoh antagonis dalam novel fantasi. Ia bertekad menjadi villain sejati, namun pilihan tindakannya justru mengubah jalan cerita dan memengaruhi hubungan dengan karakter lain.", + "startTime": "2026-05-02T11:30:00Z", + "endTime": "2026-05-02T12:00:00Z", + "thumbnail_url": "", + "status": "upcoming", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 31857404, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Haikyu!! 4Th Season - Eps.18", + "description": "Karasuno melaju ke turnamen nasional dan menghadapi tim-tim elit dengan gaya bermain berbeda. Latihan intens dan strategi baru menguji kemampuan Hinata serta rekan-rekannya dalam menghadapi tekanan pertandingan besar.", + "startTime": "2026-05-02T12:00:00Z", + "endTime": "2026-05-02T12:30:00Z", + "thumbnail_url": "", + "status": "upcoming", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 31857405, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Haikyu!! 4Th Season - Eps.19", + "description": "Karasuno melaju ke turnamen nasional dan menghadapi tim-tim elit dengan gaya bermain berbeda. Latihan intens dan strategi baru menguji kemampuan Hinata serta rekan-rekannya dalam menghadapi tekanan pertandingan besar.", + "startTime": "2026-05-02T12:30:00Z", + "endTime": "2026-05-02T13:00:00Z", + "thumbnail_url": "", + "status": "upcoming", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 31857406, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Haikyu!! 4Th Season - Eps.20", + "description": "Karasuno melaju ke turnamen nasional dan menghadapi tim-tim elit dengan gaya bermain berbeda. Latihan intens dan strategi baru menguji kemampuan Hinata serta rekan-rekannya dalam menghadapi tekanan pertandingan besar.", + "startTime": "2026-05-02T13:00:00Z", + "endTime": "2026-05-02T13:30:00Z", + "thumbnail_url": "", + "status": "upcoming", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 31857407, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Haikyu!! 4Th Season - Eps.21", + "description": "Karasuno melaju ke turnamen nasional dan menghadapi tim-tim elit dengan gaya bermain berbeda. Latihan intens dan strategi baru menguji kemampuan Hinata serta rekan-rekannya dalam menghadapi tekanan pertandingan besar.", + "startTime": "2026-05-02T13:30:00Z", + "endTime": "2026-05-02T14:00:00Z", + "thumbnail_url": "", + "status": "upcoming", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 31857408, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Haikyu!! 4Th Season - Eps.22", + "description": "Karasuno melaju ke turnamen nasional dan menghadapi tim-tim elit dengan gaya bermain berbeda. Latihan intens dan strategi baru menguji kemampuan Hinata serta rekan-rekannya dalam menghadapi tekanan pertandingan besar.", + "startTime": "2026-05-02T14:00:00Z", + "endTime": "2026-05-02T14:30:00Z", + "thumbnail_url": "", + "status": "upcoming", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 31857409, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "The Do-Over Damsel Conquers The Dragon Emperor - Eps.9", + "description": "Seorang bangsawan wanita mendapatkan kesempatan kedua setelah kematian tragis. Ia berusaha mengubah nasib dengan menjalin hubungan dengan kaisar naga, dalam kisah penuh intrik politik dan romansa.", + "startTime": "2026-05-02T14:30:00Z", + "endTime": "2026-05-02T15:00:00Z", + "thumbnail_url": "", + "status": "upcoming", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 31857410, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "The Do-Over Damsel Conquers The Dragon Emperor - Eps.10", + "description": "Seorang bangsawan wanita mendapatkan kesempatan kedua setelah kematian tragis. Ia berusaha mengubah nasib dengan menjalin hubungan dengan kaisar naga, dalam kisah penuh intrik politik dan romansa.", + "startTime": "2026-05-02T15:00:00Z", + "endTime": "2026-05-02T15:28:00Z", + "thumbnail_url": "", + "status": "upcoming", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 31857411, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "The Do-Over Damsel Conquers The Dragon Emperor - Eps.11", + "description": "Seorang bangsawan wanita mendapatkan kesempatan kedua setelah kematian tragis. Ia berusaha mengubah nasib dengan menjalin hubungan dengan kaisar naga, dalam kisah penuh intrik politik dan romansa.", + "startTime": "2026-05-02T15:28:00Z", + "endTime": "2026-05-02T15:56:00Z", + "thumbnail_url": "", + "status": "upcoming", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 31857412, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "The Do-Over Damsel Conquers The Dragon Emperor - Eps.12", + "description": "Seorang bangsawan wanita mendapatkan kesempatan kedua setelah kematian tragis. Ia berusaha mengubah nasib dengan menjalin hubungan dengan kaisar naga, dalam kisah penuh intrik politik dan romansa.", + "startTime": "2026-05-02T15:56:00Z", + "endTime": "2026-05-02T16:30:00Z", + "thumbnail_url": "", + "status": "upcoming", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 31857413, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Tsukimichi -Moonlit Fantasy- Season 2 - Eps.9", + "description": "Makoto melanjutkan petualangan di dunia lain dengan membangun kekuatan dan aliansi baru. Konflik dengan dewa dan berbagai ras semakin kompleks, menghadirkan aksi, strategi, dan dinamika politik.", + "startTime": "2026-05-02T16:30:00Z", + "endTime": "2026-05-02T17:00:00Z", + "thumbnail_url": "", + "status": "upcoming", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 31857414, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Tsukimichi -Moonlit Fantasy- Season 2 - Eps.10", + "description": "Makoto melanjutkan petualangan di dunia lain dengan membangun kekuatan dan aliansi baru. Konflik dengan dewa dan berbagai ras semakin kompleks, menghadirkan aksi, strategi, dan dinamika politik.", + "startTime": "2026-05-02T17:00:00Z", + "endTime": "2026-05-02T17:28:00Z", + "thumbnail_url": "", + "status": "upcoming", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 31857415, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Tsukimichi -Moonlit Fantasy- Season 2 - Eps.11", + "description": "Makoto melanjutkan petualangan di dunia lain dengan membangun kekuatan dan aliansi baru. Konflik dengan dewa dan berbagai ras semakin kompleks, menghadirkan aksi, strategi, dan dinamika politik.", + "startTime": "2026-05-02T17:28:00Z", + "endTime": "2026-05-02T18:00:00Z", + "thumbnail_url": "", + "status": "upcoming", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 31857416, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "I'll Become A Villainess Who Goes Down In History - Eps.11", + "description": "Seorang gadis bereinkarnasi sebagai tokoh antagonis dalam novel fantasi. Ia bertekad menjadi villain sejati, namun pilihan tindakannya justru mengubah jalan cerita dan memengaruhi hubungan dengan karakter lain.", + "startTime": "2026-05-02T18:00:00Z", + "endTime": "2026-05-02T18:30:00Z", + "thumbnail_url": "", + "status": "upcoming", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 31857417, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "I'll Become A Villainess Who Goes Down In History - Eps.12", + "description": "Seorang gadis bereinkarnasi sebagai tokoh antagonis dalam novel fantasi. Ia bertekad menjadi villain sejati, namun pilihan tindakannya justru mengubah jalan cerita dan memengaruhi hubungan dengan karakter lain.", + "startTime": "2026-05-02T18:30:00Z", + "endTime": "2026-05-02T19:00:00Z", + "thumbnail_url": "", + "status": "upcoming", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 31857418, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "One Piece: Marineford Arc - Eps.40", + "description": "Luffy terlibat dalam perang besar di Marineford untuk menyelamatkan Ace. Pertempuran antara Angkatan Laut dan Bajak Laut memicu tragedi besar, mengubah keseimbangan kekuatan dunia secara dramatis.", + "startTime": "2026-05-02T19:00:00Z", + "endTime": "2026-05-02T19:28:00Z", + "thumbnail_url": "", + "status": "upcoming", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 31857419, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "One Piece: Marineford Arc - Eps.41", + "description": "Luffy terlibat dalam perang besar di Marineford untuk menyelamatkan Ace. Pertempuran antara Angkatan Laut dan Bajak Laut memicu tragedi besar, mengubah keseimbangan kekuatan dunia secara dramatis.", + "startTime": "2026-05-02T19:28:00Z", + "endTime": "2026-05-02T19:56:00Z", + "thumbnail_url": "", + "status": "upcoming", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 31857420, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "One Piece: Marineford Arc - Eps.42", + "description": "Luffy terlibat dalam perang besar di Marineford untuk menyelamatkan Ace. Pertempuran antara Angkatan Laut dan Bajak Laut memicu tragedi besar, mengubah keseimbangan kekuatan dunia secara dramatis.", + "startTime": "2026-05-02T19:56:00Z", + "endTime": "2026-05-02T20:30:00Z", + "thumbnail_url": "", + "status": "upcoming", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 31857421, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Haikyu!! 4Th Season - Eps.18", + "description": "Karasuno melaju ke turnamen nasional dan menghadapi tim-tim elit dengan gaya bermain berbeda. Latihan intens dan strategi baru menguji kemampuan Hinata serta rekan-rekannya dalam menghadapi tekanan pertandingan besar.", + "startTime": "2026-05-02T20:30:00Z", + "endTime": "2026-05-02T21:00:00Z", + "thumbnail_url": "", + "status": "upcoming", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 31857422, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Haikyu!! 4Th Season - Eps.19", + "description": "Karasuno melaju ke turnamen nasional dan menghadapi tim-tim elit dengan gaya bermain berbeda. Latihan intens dan strategi baru menguji kemampuan Hinata serta rekan-rekannya dalam menghadapi tekanan pertandingan besar.", + "startTime": "2026-05-02T21:00:00Z", + "endTime": "2026-05-02T21:28:00Z", + "thumbnail_url": "", + "status": "upcoming", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 31857423, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Haikyu!! 4Th Season - Eps.20", + "description": "Karasuno melaju ke turnamen nasional dan menghadapi tim-tim elit dengan gaya bermain berbeda. Latihan intens dan strategi baru menguji kemampuan Hinata serta rekan-rekannya dalam menghadapi tekanan pertandingan besar.", + "startTime": "2026-05-02T21:28:00Z", + "endTime": "2026-05-02T21:58:00Z", + "thumbnail_url": "", + "status": "upcoming", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 31857424, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Haikyu!! 4Th Season - Eps.21", + "description": "Karasuno melaju ke turnamen nasional dan menghadapi tim-tim elit dengan gaya bermain berbeda. Latihan intens dan strategi baru menguji kemampuan Hinata serta rekan-rekannya dalam menghadapi tekanan pertandingan besar.", + "startTime": "2026-05-02T21:58:00Z", + "endTime": "2026-05-02T22:26:00Z", + "thumbnail_url": "", + "status": "upcoming", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 31857425, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "Haikyu!! 4Th Season - Eps.22", + "description": "Karasuno melaju ke turnamen nasional dan menghadapi tim-tim elit dengan gaya bermain berbeda. Latihan intens dan strategi baru menguji kemampuan Hinata serta rekan-rekannya dalam menghadapi tekanan pertandingan besar.", + "startTime": "2026-05-02T22:26:00Z", + "endTime": "2026-05-02T23:00:00Z", + "thumbnail_url": "", + "status": "upcoming", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 31857426, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "The Do-Over Damsel Conquers The Dragon Emperor - Eps.9", + "description": "Seorang bangsawan wanita mendapatkan kesempatan kedua setelah kematian tragis. Ia berusaha mengubah nasib dengan menjalin hubungan dengan kaisar naga, dalam kisah penuh intrik politik dan romansa.", + "startTime": "2026-05-02T23:00:00Z", + "endTime": "2026-05-02T23:30:00Z", + "thumbnail_url": "", + "status": "upcoming", + "parentId": "0_86sal99e", + "isEnable": true + }, + { + "playUrlId": 31857427, + "type": "tvod", + "tvCode": "animax", + "tvChannel": "Animax", + "tvProgram": "The Do-Over Damsel Conquers The Dragon Emperor - Eps.10", + "description": "Seorang bangsawan wanita mendapatkan kesempatan kedua setelah kematian tragis. Ia berusaha mengubah nasib dengan menjalin hubungan dengan kaisar naga, dalam kisah penuh intrik politik dan romansa.", + "startTime": "2026-05-02T23:30:00Z", + "endTime": "2026-05-03T00:00:00Z", + "thumbnail_url": "", + "status": "upcoming", + "parentId": "0_86sal99e", + "isEnable": true + } + ] + } + ] +} \ No newline at end of file diff --git a/sites/maxstream.tv/maxstream.tv.channels.xml b/sites/maxstream.tv/maxstream.tv.channels.xml new file mode 100644 index 000000000..28e813ea9 --- /dev/null +++ b/sites/maxstream.tv/maxstream.tv.channels.xml @@ -0,0 +1,132 @@ + + + ABC Australia + Al Jazeera + Animal Planet + Animax + Aniplus + ANTARA TV + ANTV + Arirang + afn + AXN + BBC News + Berita Satu + Bioskop Indonesia + Bloomberg + BTV + CBeebies + CCTV 4 + Celestial Movies + CGTN + CGTN Documentary + Chinese Drama + CinemaWorld + Cinemax + Citra Dangdut + Citra Drama + CNA + CNBC Asia + CNBC Indonesia + CNN Indonesia + CNN International + Crime Investigation + Curiosity Channel + DAAI TV + Da Vinci Learning + Discovery Asia + Discovery Channel + DMI TV + DreamWorks + Dunia Anak + Dunia Lain + DW English + Euronews + Fashion TV + Fight Sports + Flik + France 24 + Galaxy + Galaxy Premium + GTV + HBO + HBO Family + HBO Hits + HBO Signature + HGTV + History + HITS + HITS MOVIES + HITS Now + Horee + Horizon Sports + IDX Channel + IMC + Indosiar + Inews + JAK TV + Jawa Pos TV + JTV + KBS World + KIX + Kompas TV + K Plus + Lifetime + Love Nature + MAXEats + MAXKids + MAXReels + MAXSports + MAXStreak + MAXStream TV + MDTV + Mentari TV + Metro TV + MNC TV + Moji + Moonbug + MQTV + MTA TV + Musik Indonesia + My Kidz + New TV Comprehensive + New TV Finance + New TV Variety + NHK World Japan + Nickelodeon + Nick Junior + ONE + Phoenix Chinese + Phoenix Info News + Prambors + RTV + RCTI + Rock Action + Rock Entertainment + Rodja TV + SCTV + Shenzhen TV + Sindo News + Sinpo TV + SPOTV 2 + SPOTV + Studio Universal + The Indonesia Channel + Thrill + TLC + TRANS 7 + Trans TV + TV5 MONDE + TV9 + TVBS News + TV MU + TV MUI + tvN + tvN Movies + TV One + TVRI + TVRI World + U Channel + Zee Bioskop + Zhejiang Int + diff --git a/sites/maxstream.tv/maxstream.tv.config.js b/sites/maxstream.tv/maxstream.tv.config.js new file mode 100644 index 000000000..53d67705f --- /dev/null +++ b/sites/maxstream.tv/maxstream.tv.config.js @@ -0,0 +1,73 @@ +const axios = require('axios') +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) + +const tz = 'Asia/Jakarta' + +module.exports = { + site: 'maxstream.tv', + days: 2, + url({ channel }) { + return `https://vmp.maxstream.tv/api/v3/videos/${channel.site_id}/schedules` + }, + parser({ content, channel, date }) { + const programs = [] + if (content && typeof content === 'string') { + content = JSON.parse(content) + } + if (Array.isArray(content?.data)) { + const schedules = [] + content.data.forEach(item => { + schedules.push(...item.metadata) + }) + const f = dt => dayjs.tz(dt, tz).isSame(date, 'day') + schedules + .filter( + entry => entry.parentId === channel.site_id && (f(entry.startTime) || f(entry.endTime)) + ) + .forEach(entry => { + const [, , , season, , , session2, , , episode] = entry.tvProgram.match( + /((\s(\d+)[a-zA-Z]{2})?\s(Season(\s)?||S)(\d+)?)?(\s-\sEps\.(\s)?(\d+))/ + ) || [null, null, null, null, null, null, null, null, null, null] + programs.push({ + title: entry.tvProgram, + description: entry.description, + start: dayjs.tz(entry.startTime, tz), + stop: dayjs.tz(entry.endTime, tz), + season: season || session2 ? parseInt(season || session2) : null, + episode: episode ? parseInt(episode) : null, + image: entry.thumbnail_url + }) + }) + } + + return programs + }, + async channels() { + const channels = [] + const data = await axios + .get('https://vmp.maxstream.tv/api/v3/videos/list?contentType=channel') + .then(response => response.data) + .catch(console.error) + + if (Array.isArray(data?.videos)) { + channels.push( + ...data.videos + .filter(item => item?.contentType === 'Channel') + .map(item => ({ + lang: 'id', + site_id: item.id, + name: item.translations.id.title + })) + ) + } + + return channels + } +} diff --git a/sites/maxstream.tv/maxstream.tv.test.js b/sites/maxstream.tv/maxstream.tv.test.js new file mode 100644 index 000000000..6ff7a0713 --- /dev/null +++ b/sites/maxstream.tv/maxstream.tv.test.js @@ -0,0 +1,51 @@ +const { parser, url } = require('./maxstream.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('2026-05-02').startOf('d') +const channel = { site_id: '0_86sal99e' } + +it('can generate valid url', () => { + expect(url({ channel })).toBe('https://vmp.maxstream.tv/api/v3/videos/0_86sal99e/schedules') +}) + +it('can parse response', () => { + const content = fs.readFileSync(path.resolve(__dirname, '__data__/content.json')).toString() + const results = parser({ content, channel, date }).map(p => { + p.start = p.start.toJSON() + p.stop = p.stop.toJSON() + return p + }) + + expect(results.length).toBe(49) + expect(results[0]).toMatchObject({ + title: "I'll Become A Villainess Who Goes Down In History - Eps.12", + description: + 'Seorang gadis bereinkarnasi sebagai tokoh antagonis dalam novel fantasi. Ia bertekad menjadi villain sejati, namun pilihan tindakannya justru mengubah jalan cerita dan memengaruhi hubungan dengan karakter lain.', + start: '2026-05-01T16:30:00.000Z', + stop: '2026-05-01T17:00:00.000Z', + episode: 12 + }) + expect(results[46]).toMatchObject({ + title: 'Haikyu!! 4Th Season - Eps.22', + description: + 'Karasuno melaju ke turnamen nasional dan menghadapi tim-tim elit dengan gaya bermain berbeda. Latihan intens dan strategi baru menguji kemampuan Hinata serta rekan-rekannya dalam menghadapi tekanan pertandingan besar.', + start: '2026-05-02T15:26:00.000Z', + stop: '2026-05-02T16:00:00.000Z', + season: 4, + episode: 22 + }) +}) + +it('can handle empty guide', () => { + const results = parser({ + content: '', + channel + }) + + expect(results).toMatchObject([]) +}) diff --git a/sites/maxstream.tv/readme.md b/sites/maxstream.tv/readme.md new file mode 100644 index 000000000..6df945a40 --- /dev/null +++ b/sites/maxstream.tv/readme.md @@ -0,0 +1,21 @@ +# maxstream.tv + +https://maxstream.tv/home + +### Download the guide + +```sh +npm run grab --- --channels=sites/maxstream.tv/maxstream.tv.channels.xml +``` + +### Update channel list + +```sh +npm run channels:parse --- --config=./sites/maxstream.tv/maxstream.tv.config.js --output=./sites/maxstream.tv/maxstream.tv.channels.xml +``` + +### Test + +```sh +npm test --- maxstream.tv +``` diff --git a/sites/mncvision.id/mncvision.id_en.channels.xml b/sites/mncvision.id/mncvision.id_en.channels.xml index dd37ec1d7..ec79f99c6 100644 --- a/sites/mncvision.id/mncvision.id_en.channels.xml +++ b/sites/mncvision.id/mncvision.id_en.channels.xml @@ -1,141 +1,110 @@ - Vision Prime HD - CINEMACHI XTRA - CINEMACHI - CINEMACHI ACTION - CINEMACHI KIDS - CINEMACHI MAX - HITS MOVIES - Galaxy Premium - Galaxy - IMC - My Family - My Cinema - My Cinema Asia - Thrill - Celestial Movies - CCM - Zee Bioskop - tvN Movies - Nickelodeon Jr - Zoomoo - Moonbug - CBeebies - Kids TV - Dreamworks - Nickelodeon - My Kidz - Indosiar - RCTI - GTV - MNCTV - iNews - Sindo News TV - Entertainment - Trans TV - Sportstars 4 - SCTV Hanacaraka TV - LIFE - Muslim TV - Al Quran Al Kareem - Vision Prime - FOOD TRAVEL + ABC Australia + Al Jazeera English + Al Quran Al Kareem + Animax + ANTV + Arirang + AXN + BBC Earth + BBC Earth HD + BBC World News + beIN Sports 1 + beIN Sports 2 + beIN Sports 3 + beIN SPORTS 4 + beIN SPORTS 5 + Bloomberg + BTV + CBeebies Celebrities TV - tvOne + CCM + Celestial Movies + CGTN + CGTN Documentary + ORIGINALS HD + ORIGINALS + CINEEDGE HD + CINEEDGE + BUDDY STARS HD + BUDDY STARS + Superrix HD + Superrix + UNIQUES HD + UNIQUES + Channel News Asia + CNBC + Crime Investigation + Tawaf TV + Dreamworks + DW English + Entertainment + EURONEWS + Fight Sports + FOX News + France 24 English + Galaxy + Galaxy Premium + Global Trekker + GTV + History + HITS + HITS MOVIES HD + HITS MOVIES + IDX + IMC + Indosiar + iNews + JAKTV + Kids TV + KIX + Kompas TV + LIFE + Lifetime + Love Nature HD + Love Nature + MDTV + Metro TV + MNCTV + Moonbug + Music TV + Muslim TV + NHK World + NHK World Premium + Nickelodeon + Nick Jr. HD + Nickelodeon Jr + FOOD TRAVEL + ONE HD + ONE + Outdoor channel HD + Outdoor Channel + RCTI + Rock Action + Rock Entertainment + SCTV + SEA TODAY + Sindo News TV + Soccer Channel Sportstars 2 Sportstars 3 - IDX - Soccer Channel + Sportstars 4 Sportstars - BTV - Tawaf TV - Kompas TV - Metro TV + SPOTV 2 + SPOTV + Studio Universal + Thrill Trans 7 - Music TV - JAKTV - ANTV - NET TV - TVRI - MTV LIVE - MTV 90's - FMN - AXN - Animax - tvN - HITS - KIX - ONE - Lifetime - BBC Earth - Global Trekker - Outdoor Channel - Love Nature - CGTN Documentary - History - Crime Investigation - Rock Entertainment - Rock Action - Fight Sports - SPOTV - SPOTV 2 - beIN Sports 1 - beIN Sports 2 - beIN Sports 3 - beIN SPORTS 4 - beIN SPORTS 5 - Channel News Asia - Al Jazeera English - BBC World News - EURONEWS - FOX News - SEA TODAY - CNBC - Bloomberg - ABC Australia - Arirang - France 24 English - CGTN - NHK World Premium - NHK World - DW English - CINEMACHI HD - CINEMACHI ACTION HD - CINEMACHI KIDS HD - CINEMACHI MAX HD - CINEMACHI XTRA HD - HITS MOVIES HD - tvN Movies HD - beIN Sports 1 HD - beIN Sports 2 HD - beIN Sports 3 HD - Soccer Channel HD - Sportstars HD - Sportstars 2 HD - sportstars 3 HD - Sportstars 4 HD - SPOTV HD - SPOTV 2 HD - RCTI HD - GTV HD - MNCTV HD - iNews HD - Sindo News TV HD - IDX HD - SCTV HD - Indosiar HD - Music TV HD - ONE HD + Trans TV tvN HD - AXN HD - Food Travel HD - Outdoor channel HD - BBC Earth HD - Global Trekker HD - Love Nature HD - Kids TV HD - Nick Jr. HD - Dreamworks HD + tvN + tvN Movies HD + tvN Movies + tvOne + TVRI + Vision Prime + Zee Bioskop + Zoomoo diff --git a/sites/mncvision.id/mncvision.id_id.channels.xml b/sites/mncvision.id/mncvision.id_id.channels.xml index 59957209c..3b3e6e33b 100644 --- a/sites/mncvision.id/mncvision.id_id.channels.xml +++ b/sites/mncvision.id/mncvision.id_id.channels.xml @@ -1,141 +1,110 @@ - Vision Prime HD - CINEMACHI XTRA - CINEMACHI - CINEMACHI ACTION - CINEMACHI KIDS - CINEMACHI MAX - HITS MOVIES - Galaxy Premium - Galaxy - IMC - My Family - My Cinema - My Cinema Asia - Thrill - Celestial Movies - CCM - Zee Bioskop - tvN Movies - Nickelodeon Jr - Zoomoo - Moonbug - CBeebies - Kids TV - Dreamworks - Nickelodeon - My Kidz - Indosiar - RCTI - GTV - MNCTV - iNews - Sindo News TV - Entertainment - Trans TV - Sportstars 4 - SCTV Hanacaraka TV - LIFE - Muslim TV - Al Quran Al Kareem - Vision Prime - FOOD TRAVEL + ABC Australia + Al Jazeera English + Al Quran Al Kareem + Animax + ANTV + Arirang + AXN + BBC Earth + BBC Earth HD + BBC World News + beIN Sports 1 + beIN Sports 2 + beIN Sports 3 + beIN SPORTS 4 + beIN SPORTS 5 + Bloomberg + BTV + CBeebies Celebrities TV - tvOne + CCM + Celestial Movies + CGTN + CGTN Documentary + ORIGINALS HD + ORIGINALS + CINEEDGE HD + CINEEDGE + BUDDY STARS HD + BUDDY STARS + Superrix HD + Superrix + UNIQUES HD + UNIQUES + Channel News Asia + CNBC + Crime Investigation + Tawaf TV + Dreamworks + DW English + Entertainment + EURONEWS + Fight Sports + FOX News + France 24 English + Galaxy + Galaxy Premium + Global Trekker + GTV + History + HITS + HITS MOVIES HD + HITS MOVIES + IDX + IMC + Indosiar + iNews + JAKTV + Kids TV + KIX + Kompas TV + LIFE + Lifetime + Love Nature HD + Love Nature + MDTV + Metro TV + MNCTV + Moonbug + Music TV + Muslim TV + NHK World + NHK World Premium + Nickelodeon + Nick Jr. HD + Nickelodeon Jr + FOOD TRAVEL + ONE HD + ONE + Outdoor channel HD + Outdoor Channel + RCTI + Rock Action + Rock Entertainment + SCTV + SEA TODAY + Sindo News TV + Soccer Channel Sportstars 2 Sportstars 3 - IDX - Soccer Channel + Sportstars 4 Sportstars - BTV - Tawaf TV - Kompas TV - Metro TV + SPOTV 2 + SPOTV + Studio Universal + Thrill Trans 7 - Music TV - JAKTV - ANTV - NET TV - TVRI - MTV LIVE - MTV 90's - FMN - AXN - Animax - tvN - HITS - KIX - ONE - Lifetime - BBC Earth - Global Trekker - Outdoor Channel - Love Nature - CGTN Documentary - History - Crime Investigation - Rock Entertainment - Rock Action - Fight Sports - SPOTV - SPOTV 2 - beIN Sports 1 - beIN Sports 2 - beIN Sports 3 - beIN SPORTS 4 - beIN SPORTS 5 - Channel News Asia - Al Jazeera English - BBC World News - EURONEWS - FOX News - SEA TODAY - CNBC - Bloomberg - ABC Australia - Arirang - France 24 English - CGTN - NHK World Premium - NHK World - DW English - CINEMACHI HD - CINEMACHI ACTION HD - CINEMACHI KIDS HD - CINEMACHI MAX HD - CINEMACHI XTRA HD - HITS MOVIES HD - tvN Movies HD - beIN Sports 1 HD - beIN Sports 2 HD - beIN Sports 3 HD - Soccer Channel HD - Sportstars HD - Sportstars 2 HD - sportstars 3 HD - Sportstars 4 HD - SPOTV HD - SPOTV 2 HD - RCTI HD - GTV HD - MNCTV HD - iNews HD - Sindo News TV HD - IDX HD - SCTV HD - Indosiar HD - Music TV HD - ONE HD + Trans TV tvN HD - AXN HD - Food Travel HD - Outdoor channel HD - BBC Earth HD - Global Trekker HD - Love Nature HD - Kids TV HD - Nick Jr. HD - Dreamworks HD + tvN + tvN Movies HD + tvN Movies + tvOne + TVRI + Vision Prime + Zee Bioskop + Zoomoo diff --git a/sites/mysky.com.ph/mysky.com.ph.channels.xml b/sites/mysky.com.ph/mysky.com.ph.channels.xml index 189ba6180..071f0538c 100644 --- a/sites/mysky.com.ph/mysky.com.ph.channels.xml +++ b/sites/mysky.com.ph/mysky.com.ph.channels.xml @@ -42,7 +42,7 @@ HBO SIGNATURE HBO FAMILY NICK JR. - ROCK ACTION + ROCK ACTION THRILL FASHION TV CHANNEL NEWS ASIA diff --git a/sites/mytvsuper.com/mytvsuper.com_en.channels.xml b/sites/mytvsuper.com/mytvsuper.com_en.channels.xml index a8294d575..7ee70c783 100644 --- a/sites/mytvsuper.com/mytvsuper.com_en.channels.xml +++ b/sites/mytvsuper.com/mytvsuper.com_en.channels.xml @@ -26,7 +26,7 @@ Nickelodeon Creation TV ROCK Entertainment - ROCK Action + ROCK Action Thrill TVBS Asia TVBS News diff --git a/sites/mytvsuper.com/mytvsuper.com_zh.channels.xml b/sites/mytvsuper.com/mytvsuper.com_zh.channels.xml index 2449a2122..130a9da02 100644 --- a/sites/mytvsuper.com/mytvsuper.com_zh.channels.xml +++ b/sites/mytvsuper.com/mytvsuper.com_zh.channels.xml @@ -26,7 +26,7 @@ Nickelodeon 創世電視 ROCK綜藝娛樂 - ROCK Action + ROCK Action Thrill 無線衛星亞洲台 無線衛星新聞台 diff --git a/sites/novacyprus.com/__data__/content.json b/sites/novacyprus.com/__data__/content.json deleted file mode 100644 index f3504a962..000000000 --- a/sites/novacyprus.com/__data__/content.json +++ /dev/null @@ -1 +0,0 @@ -{"nodes":[{"datetime":"2021-11-17 06:20:00","day":"Wednesday","numDay":17,"numMonth":11,"month":"November","channelName":"Cyprus Novacinema1HD","channelLog":"https://ssl2.novago.gr/EPG/jsp/images/universal/film/logo/20200210/000100/XTV100000762/d6a2f5e0-dbc0-49c7-9843-e3161ca5ae5d.png","cid":"42","ChannelId":"614","startingTime":"06:20","endTime":"08:10","title":"Δεσμοί Αίματος","description":"Θρίλερ Μυστηρίου","duration":"109","slotDuration":"110","bref":"COMMOBLOOX","mediaItems":[{"MediaListTypeId":"6","CdnUrl":"http://cache-forthnet.secure.footprint.net/linear/3/0/305608_COMMOBLOOX_GUIDE_STILL.jpg"},{"MediaListTypeId":"7","CdnUrl":"http://cache-forthnet.secure.footprint.net/linear/3/0/305608_COMMOBLOOX_POSTER_CROSS.jpg"},{"MediaListTypeId":"8","CdnUrl":"http://cache-forthnet.secure.footprint.net/linear/3/0/305608_COMMOBLOOX_ICON_CYP.jpg"},{"MediaListTypeId":"9","CdnUrl":"http://cache-forthnet.secure.footprint.net/linear/3/0/305608_COMMOBLOOX_POSTER_CYP.jpg"},{"MediaListTypeId":"10","CdnUrl":"http://cache-forthnet.secure.footprint.net/linear/3/0/305608_COMMOBLOOX_BACKGROUND_CYP.jpg"}]},{"datetime":"2021-11-17 06:00:00","day":"Wednesday","numDay":17,"numMonth":11,"month":"November","channelName":"Cyprus Novacinema2HD","channelLog":"https://ssl2.novago.gr/EPG/jsp/images/universal/film/logo/20200210/000100/XTV100000763/24e05354-d6ad-4949-bcb3-a81d1c1d2cba.png","cid":"62","ChannelId":"653","startingTime":"06:00","endTime":"07:40","title":"Ανυπόφοροι Γείτονες","description":"Κωμωδία","duration":"93","slotDuration":"100","bref":"NEIGHBORSX","mediaItems":[{"MediaListTypeId":"7","CdnUrl":"http://cache-forthnet.secure.footprint.net/linear/3/1/312582_NEIGHBORSX_POSTER_CROSS.jpg"},{"MediaListTypeId":"8","CdnUrl":"http://cache-forthnet.secure.footprint.net/linear/3/1/312582_NEIGHBORSX_ICON_CYP.jpg"},{"MediaListTypeId":"9","CdnUrl":"http://cache-forthnet.secure.footprint.net/linear/3/1/312582_NEIGHBORSX_POSTER_CYP.jpg"},{"MediaListTypeId":"10","CdnUrl":"http://cache-forthnet.secure.footprint.net/linear/3/1/312582_NEIGHBORSX_BACKGROUND_CYP.jpg"}]}]} \ No newline at end of file diff --git a/sites/novacyprus.com/__data__/no_content.json b/sites/novacyprus.com/__data__/no_content.json deleted file mode 100644 index a0b8012cf..000000000 --- a/sites/novacyprus.com/__data__/no_content.json +++ /dev/null @@ -1 +0,0 @@ -{"nodes":[],"total":0,"pages":0} \ No newline at end of file diff --git a/sites/novacyprus.com/novacyprus.com.channels.xml b/sites/novacyprus.com/novacyprus.com.channels.xml deleted file mode 100644 index 6354918b0..000000000 --- a/sites/novacyprus.com/novacyprus.com.channels.xml +++ /dev/null @@ -1,32 +0,0 @@ - - - Cyprus Novasports5HD - Cyprus NovalifeHD - InsightTV - Cyprus Novasports4HD - MyZen TV - Mad TV - Discovery - Βουλή - Τηλεόραση - Nickelodeon - FOX Life - Smile tv - Viasat History HD - MAD GREEKZ - One Channel - Travel Channel HD - E! Entertainment - FOX - Boomerang - Cyprus Novacinema1HD - National Geographic Wild HD - National Geographic HD - Cyprus Novasports2HD - Animal Planet - NR1 HD - Cyprus Novacinema3HD - Cyprus Novacinema2HD - Cyprus Novacinema4HD - Cyprus Novasports3HD - MTV Live HD - diff --git a/sites/novacyprus.com/novacyprus.com.config.js b/sites/novacyprus.com/novacyprus.com.config.js deleted file mode 100644 index 6bf63c84b..000000000 --- a/sites/novacyprus.com/novacyprus.com.config.js +++ /dev/null @@ -1,67 +0,0 @@ -process.env['NODE_TLS_REJECT_UNAUTHORIZED'] = 0 - -const axios = require('axios') -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: 'novacyprus.com', - days: 2, - url({ date }) { - return `https://www.novacyprus.com/api/v1/tvprogram/from/${date.format('YYYYMMDD')}/to/${date - .add(1, 'd') - .format('YYYYMMDD')}` - }, - parser({ content, channel }) { - let programs = [] - const items = parseItems(content, channel) - items.forEach(item => { - const start = parseStart(item) - const stop = start.add(item.slotDuration, 'm') - programs.push({ - title: item.title, - description: item.description, - image: parseImage(item), - start, - stop - }) - }) - - return programs - }, - async channels() { - const channels = await axios - .get('https://www.novacyprus.com/api/v1/guide/dailychannels') - .then(r => r.data) - .catch(console.log) - - return channels.map(item => { - return { - lang: 'el', - site_id: item.ChannelId, - name: item.nameEl - } - }) - } -} - -function parseStart(item) { - return dayjs.tz(item.datetime, 'YYYY-MM-DD HH:mm:ss', 'Asia/Nicosia') -} - -function parseImage(item) { - return item.mediaItems.length ? item.mediaItems[0].CdnUrl : null -} - -function parseItems(content, channel) { - const data = JSON.parse(content) - if (!data || !Array.isArray(data.nodes)) return [] - - return data.nodes.filter(i => i.ChannelId === channel.site_id) -} diff --git a/sites/novacyprus.com/novacyprus.com.test.js b/sites/novacyprus.com/novacyprus.com.test.js deleted file mode 100644 index 0f4de631a..000000000 --- a/sites/novacyprus.com/novacyprus.com.test.js +++ /dev/null @@ -1,49 +0,0 @@ -const { parser, url } = require('./novacyprus.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('2021-11-17', 'YYYY-MM-DD').startOf('d') -const channel = { - site_id: '614', - xmltv_id: 'NovaCinema1.gr' -} - -it('can generate valid url', () => { - expect(url({ date })).toBe( - 'https://www.novacyprus.com/api/v1/tvprogram/from/20211117/to/20211118' - ) -}) - -it('can parse response', () => { - const content = fs.readFileSync(path.resolve(__dirname, '__data__/content.json')) - const result = parser({ content, channel }).map(p => { - p.start = p.start.toJSON() - p.stop = p.stop.toJSON() - return p - }) - - expect(result).toMatchObject([ - { - start: '2021-11-17T04:20:00.000Z', - stop: '2021-11-17T06:10:00.000Z', - title: 'Δεσμοί Αίματος', - description: 'Θρίλερ Μυστηρίου', - image: - 'http://cache-forthnet.secure.footprint.net/linear/3/0/305608_COMMOBLOOX_GUIDE_STILL.jpg' - } - ]) -}) - -it('can handle empty guide', () => { - const result = parser({ - date, - channel, - content: fs.readFileSync(path.resolve(__dirname, '__data__/no_content.json')) - }) - expect(result).toMatchObject([]) -}) diff --git a/sites/novacyprus.com/readme.md b/sites/novacyprus.com/readme.md deleted file mode 100644 index 6695d154c..000000000 --- a/sites/novacyprus.com/readme.md +++ /dev/null @@ -1,21 +0,0 @@ -# novacyprus.com - -https://www.novacyprus.com/en/node/32742 - -### Download the guide - -```sh -npm run grab --- --sites=novacyprus.com -``` - -### Update channel list - -```sh -npm run channels:parse --- --config=./sites/novacyprus.com/novacyprus.com.config.js --output=./sites/novacyprus.com/novacyprus.com.channels.xml -``` - -### Test - -```sh -npm test --- novacyprus.com -``` diff --git a/sites/nowplayer.now.com/nowplayer.now.com_en.channels.xml b/sites/nowplayer.now.com/nowplayer.now.com_en.channels.xml index fe3e4a524..c4538e3ab 100644 --- a/sites/nowplayer.now.com/nowplayer.now.com_en.channels.xml +++ b/sites/nowplayer.now.com/nowplayer.now.com_en.channels.xml @@ -1,147 +1,143 @@ - ViuTVsix - ViuTV - Viu channel - Now Chinese Drama Channel - Now Video Express - NowJelli - HBO Hits - HBO Family - CINEMAX - HBO Signature - HBO - MOVIE MOVIE - Now Baogu Movies - Now Baogu Superstars - Animax - tvN - KBS World - ETTV Asia Channel MOOV Concert/MV - Discovery Asia - Discovery Channel - Animal Planet - Discovery Science - DMAX - TLC - Love Nature - Love Nature 4K - BBC Earth - Outdoor Channel - Crime + Investigation - HISTORY - CNN International - CNBC - BBC News - Bloomberg Television - Channel NewsAsia - Sky News - DW (English) - Al Jazeera English - euronews - France 24 - NHK WORLD-JAPAN - RT - CGTN - Now Direct - Now NEWS - Now Business News Channel - Now Data - Yicai TV - Phoenix InfoNews Channel - Phoenix Hong Kong Channel - ETTV Asia News Watch N Learn - DreamWorks - Cartoon Network - Nickelodeon - Cartoonito - CBeebies - Nick Jr. - Da Vinci - BBC Lifestyle - WarnerTV - AXN - ROCK Entertainment - Lifetime - Food Network - Asian Food Network - Travel Channel - HGTV Netflix - CTI Asia Channel - Shenzhen TV + Sports Schedule Highlights + Now Sports 4K 3 + Now Sports Premier League 7 + Now Sports 641 + Now Sports 647 + Now Sports 651 + Now Sports 652 + Adult Promotional Channel + ABC Australia + Al Jazeera English + Animal Planet + Animax + Asian Food Network + Cricbuzz + AXN + BBC Earth + BBC Lifestyle + BBC News + beIN SPORTS 1 + beIN SPORTS 2 + beIN SPORTS 6 + beIN SPORTS 3 + beIN SPORTS 4 + beIN SPORTS 5 + Bloomberg Television + Cartoon Network + CBeebies CCTV-1 CCTV-4 - GBA Satellite TV - CCTV-13 - Phoenix Chinese Channel - OneTV General Channel - Sansha TV - Zhejiang Satellite TV - ABC Australia - Sports Schedule Highlights + CCTV-13 + CGTN + Channel Adult + CINEMAX + Channel NewsAsia + CNBC + CNN International + COLORS + Crime + Investigation + CTI Asia Channel + Da Vinci + Discovery Asia + Discovery Channel + Discovery Science + DMAX + Dragon TV + DW (English) + euronews + Food Network + France 24 + France 24 (French) + GMA Life TV + GMA News TV + GMA Pinoy TV + HBO + HBO Family + HBO Hits + HBO Signature + HISTORY + HITS + HITS MOVIES + Ice Fire + Panda TV + KBS World + Lifetime + Love Nature 4K + Love Nature + Moonbug + MOVIE MOVIE + MTV India + MUTV + NBA TV + NHK WORLD-JAPAN + NHK World Premium + Nickelodeon + Nick Jr. + Now668 + Now Baogu Movies + Now Baogu Superstars + Now Business News Channel + Now Chinese Drama Channel + Now Data + Now Direct + Now Golf 2 + Now Golf 3 + NowJelli + Now NEWS + Now Sports 1 + Now Sports 2 + Now Sports 3 + Now Sports 4 Now Sports 4K 1 - Now Sports 4K 2 - Now Sports 4K 3 - Now Sports Premier League TV + Now Sports 4K 2 + Now Sports 4K 616 + Now Sports 4K 617 + Now Sports 5 + Now Sports 6 + Now Sports 7 + Now Sports 618 + Now Sports 619 + Now Sports 650 + Now Sports Plus Now Sports Premier League 1 Now Sports Premier League 2 Now Sports Premier League 3 Now Sports Premier League 4 Now Sports Premier League 5 Now Sports Premier League 6 - Now Sports Premier League 7 + Now Sports Premier League TV Now Sports Prime - Now Sports 1 - Now Sports 2 - Now Sports 3 - Now Sports 4 - Now Sports 5 - Now Sports 6 - Now Sports 7 - beIN SPORTS 1 - beIN SPORTS 2 - MUTV - Now Sports 641 - NBA TV - beIN SPORTS 3 - beIN SPORTS 4 - beIN SPORTS 5 - beIN SPORTS 6 - beIN SPORTS RUGBY - Now Sports 651 - Now668 - SPOTV - SPOTV2 - Astro Cricket + Now Video Express + Outdoor Channel + Phoenix Chinese Channel + Phoenix InfoNews Channel + ROCK Entertainment + RT Premier Sports - Now Sports Plus - Now Sports 681 - Now Golf 2 - Now Golf 3 - NHK World Premium - TV5MONDE Style - TV5MONDE ASIE - France 24 (French) - GMA Pinoy TV - GMA Life TV - GMA News TV - TFC - DW Deutsch + Sansha TV + Shenzhen TV + Sky News Sony TV (India) - Sony MAX + Sony MAX Sony SAB - MTV India - COLORS - Zee Cinema International - Zee TV - Zee News + Star Bharat Star Gold STAR PLUS - Star Bharat - Adult Promotional Channel - Ice Fire - Channel Adult + TFC + TLC + TV5MONDE ASIE + TV5MONDE Style + tvN + GBA Satellite TV + Viu channel + ViuTV + ViuTVsix + Zee Cinema International + Zee News + Zee TV diff --git a/sites/nowplayer.now.com/nowplayer.now.com_zh.channels.xml b/sites/nowplayer.now.com/nowplayer.now.com_zh.channels.xml index 50b3ff493..065b20d65 100644 --- a/sites/nowplayer.now.com/nowplayer.now.com_zh.channels.xml +++ b/sites/nowplayer.now.com/nowplayer.now.com_zh.channels.xml @@ -1,147 +1,143 @@ - ViuTVsix - ViuTV - Viu channel - Now Chinese Drama Channel - Now Video Express - NowJelli - HBO Hits - HBO Family - CINEMAX - HBO Signature - HBO - MOVIE MOVIE - Now Baogu Movies - Now Baogu Superstars - Animax - tvN - KBS World - ETTV Asia Channel MOOV Concert/MV - Discovery Asia - Discovery Channel - Animal Planet - Discovery Science - DMAX - TLC - Love Nature - Love Nature 4K - BBC Earth - Outdoor Channel - Crime + Investigation - HISTORY - CNN International - CNBC - BBC News - Bloomberg Television - Channel NewsAsia - Sky News - DW (English) - Al Jazeera English - euronews - France 24 - NHK WORLD-JAPAN - RT - CGTN - Now Direct - Now NEWS - Now Business News Channel - Now Data - Yicai TV - Phoenix InfoNews Channel - Phoenix Hong Kong Channel - ETTV Asia News Watch N Learn - DreamWorks - Cartoon Network - Nickelodeon - Cartoonito - CBeebies - Nick Jr. - Da Vinci - BBC Lifestyle - WarnerTV - AXN - ROCK Entertainment - Lifetime - Food Network - Asian Food Network - Travel Channel - HGTV Netflix - CTI Asia Channel - Shenzhen TV + Sports Schedule Highlights + Now Sports 4K 3 + Now Sports Premier League 7 + Now Sports 641 + Now Sports 647 + Now Sports 651 + Now Sports 652 + Adult Promotional Channel + ABC Australia + Al Jazeera English + Animal Planet + Animax + Asian Food Network + Cricbuzz + AXN + BBC Earth + BBC Lifestyle + BBC News + beIN SPORTS 1 + beIN SPORTS 2 + beIN SPORTS 6 + beIN SPORTS 3 + beIN SPORTS 4 + beIN SPORTS 5 + Bloomberg Television + Cartoon Network + CBeebies CCTV-1 CCTV-4 - GBA Satellite TV - CCTV-13 - Phoenix Chinese Channel - OneTV General Channel - Sansha TV - Zhejiang Satellite TV - ABC Australia - Sports Schedule Highlights + CCTV-13 + CGTN + Channel Adult + CINEMAX + Channel NewsAsia + CNBC + CNN International + COLORS + Crime + Investigation + CTI Asia Channel + Da Vinci + Discovery Asia + Discovery Channel + Discovery Science + DMAX + Dragon TV + DW (English) + euronews + Food Network + France 24 + France 24 (French) + GMA Life TV + GMA News TV + GMA Pinoy TV + HBO + HBO Family + HBO Hits + HBO Signature + HISTORY + HITS + HITS MOVIES + Ice Fire + Panda TV + KBS World + Lifetime + Love Nature 4K + Love Nature + Moonbug + MOVIE MOVIE + MTV India + MUTV + NBA TV + NHK WORLD-JAPAN + NHK World Premium + Nickelodeon + Nick Jr. + Now668 + Now Baogu Movies + Now Baogu Superstars + Now Business News Channel + Now Chinese Drama Channel + Now Data + Now Direct + Now Golf 2 + Now Golf 3 + NowJelli + Now NEWS + Now Sports 1 + Now Sports 2 + Now Sports 3 + Now Sports 4 Now Sports 4K 1 - Now Sports 4K 2 - Now Sports 4K 3 - Now Sports Premier League TV + Now Sports 4K 2 + Now Sports 4K 616 + Now Sports 4K 617 + Now Sports 5 + Now Sports 6 + Now Sports 7 + Now Sports 618 + Now Sports 619 + Now Sports 650 + Now Sports Plus Now Sports Premier League 1 Now Sports Premier League 2 Now Sports Premier League 3 Now Sports Premier League 4 Now Sports Premier League 5 Now Sports Premier League 6 - Now Sports Premier League 7 + Now Sports Premier League TV Now Sports Prime - Now Sports 1 - Now Sports 2 - Now Sports 3 - Now Sports 4 - Now Sports 5 - Now Sports 6 - Now Sports 7 - beIN SPORTS 1 - beIN SPORTS 2 - MUTV - Now Sports 641 - NBA TV - beIN SPORTS 3 - beIN SPORTS 4 - beIN SPORTS 5 - beIN SPORTS 6 - beIN SPORTS RUGBY - Now Sports 651 - Now668 - SPOTV - SPOTV2 - Astro Cricket + Now Video Express + Outdoor Channel + Phoenix Chinese Channel + Phoenix InfoNews Channel + ROCK Entertainment + RT Premier Sports - Now Sports Plus - Now Sports 681 - Now Golf 2 - Now Golf 3 - NHK World Premium - TV5MONDE Style - TV5MONDE ASIE - France 24 (French) - GMA Pinoy TV - GMA Life TV - GMA News TV - TFC - DW Deutsch + Sansha TV + Shenzhen TV + Sky News Sony TV (India) - Sony MAX + Sony MAX Sony SAB - MTV India - COLORS - Zee Cinema International - Zee TV - Zee News + Star Bharat Star Gold STAR PLUS - Star Bharat - Adult Promotional Channel - Ice Fire - Channel Adult + TFC + TLC + TV5MONDE ASIE + TV5MONDE Style + tvN + GBA Satellite TV + Viu channel + ViuTV + ViuTVsix + Zee Cinema International + Zee News + Zee TV diff --git a/sites/shahid.mbc.net/shahid.mbc.net_ar.channels.xml b/sites/shahid.mbc.net/shahid.mbc.net_ar.channels.xml index dfbc74d28..39bbc3ac3 100644 --- a/sites/shahid.mbc.net/shahid.mbc.net_ar.channels.xml +++ b/sites/shahid.mbc.net/shahid.mbc.net_ar.channels.xml @@ -11,17 +11,20 @@ القرآن الكريم بصوت السديس قناة كامل العدد قناة جاك العلم + AWSN عبدالمجيد عبدالله أفلام العربية العربية Business AL Arabiya English + العربية برامج الإخبارية الحدث إذاعة خزامى القرآن الكريم السعودية السعودية الآن + السورية السنة النبوية الشرق ديسكفري Asharq Documentary @@ -34,6 +37,7 @@ إقرأ ماجد المهندس قناة مرايا + MBC1 MBC1 MBC1 MBC2 @@ -41,6 +45,7 @@ MBC3 MBC4 MBC5 + MBC Action MBC Bollywood MBC Drama MBC Drama @@ -63,7 +68,6 @@ الثقافية SBC Spacetoon - السورية طرب ذكريات وناسه diff --git a/sites/shahid.mbc.net/shahid.mbc.net_en.channels.xml b/sites/shahid.mbc.net/shahid.mbc.net_en.channels.xml index ec416a6c8..f766f2435 100644 --- a/sites/shahid.mbc.net/shahid.mbc.net_en.channels.xml +++ b/sites/shahid.mbc.net/shahid.mbc.net_en.channels.xml @@ -11,17 +11,20 @@ The Holy Quran Recited By Al Sudais Kamel El Adad Channel Jak Al Elm Channel + AWSN Abdul Majeed Abdullah Aflam Al Arabiya Al Arabiya Business AL Arabiya English + Al Arabiya Program Alikhbariya Al Hadath Alkhuzama Radio Al Quraan al Kareem AlSaudia KSA Now + Al Souriya TV Al Sunnah al Nabawiyah Asharq Discovery Asharq Documentary @@ -65,7 +68,6 @@ AlThaqafeya SBC Spacetoon - Al Souriya TV Tarab Thikrayat Wanasa diff --git a/sites/shahid.mbc.net/shahid.mbc.net_fr.channels.xml b/sites/shahid.mbc.net/shahid.mbc.net_fr.channels.xml index 6d64a1048..da35d5339 100644 --- a/sites/shahid.mbc.net/shahid.mbc.net_fr.channels.xml +++ b/sites/shahid.mbc.net/shahid.mbc.net_fr.channels.xml @@ -11,17 +11,20 @@ The Holy Quran Recited By Al Sudais Kamel El Adad Channel Jak Al Elm Channel + AWSN Abdul Majeed Abdullah Aflam Al Arabiya Al Arabiya Business AL Arabiya English + Al Arabiya Program Alikhbariya Al Hadath Alkhuzama Radio Al Quraan al Kareem AlSaudia KSA Now + Al Souriya TV Al Sunnah al Nabawiyah Asharq Discovery Asharq Documentary @@ -65,7 +68,6 @@ AlThaqafeya SBC Spacetoon - Al Souriya TV Tarab Thikrayat Wanasa diff --git a/sites/singtel.com/singtel.com.channels.xml b/sites/singtel.com/singtel.com.channels.xml index 60f4da732..8611e7238 100644 --- a/sites/singtel.com/singtel.com.channels.xml +++ b/sites/singtel.com/singtel.com.channels.xml @@ -1,49 +1,31 @@ - Hub Premier 5 - Hub Premier 6 - KBS World (HD) - Russia Today (4K) mio Stadium OD mio Sports (HD) mio Sports 2 (HD) mio Sports 3 (HD) - (HD) Outdoor Channel Cricbuzz (HD) Cricbuzz 2 (HD) Cricket Plus MOLA Sport (HD) - FOX News Channel - Bloomberg Originals - HISTORY™ (HD) - HGTV (HD) - TLC (HD) - AFN (HD) - WAKUWAKU JAPAN (HD) (Mandarin / Malay) - HITS NOW (HD) - ROCK Action (HD) - MTV LIVE HD e-Le (HD) Jia Le Channel (HD) - China Movie Channel - ETTV Asia News (HD) Drama Channel - Zee Thirai - Sony YAY! maa movies Zoom TV - WION - Fight Sports (HD) - CBeebies (HD) CM+ - Cinema One Global - ABS-CBN News Channel ABC Australia Adithya TV + ABS-CBN News Channel Animal Planet (HD) Animax (HD) ANIPLUS HD + Arirang TV (HD) Asianet + Asianet Movies + AFN (HD) + Astro Prima HD + Astro Ria HD SAB TV AXN (HD) BBC Earth (HD) @@ -52,12 +34,22 @@ beIN SPORTS 2 (HD) beIN SPORTS 3 (HD) beIN SPORTS 1 (HD) + Bloomberg Originals Bloomberg Television (HD) - Cartoonito (HD) + BRTV International Cartoon Network (HD) + CBeebies (HD) + CCM + CCTV-4 (HD) + CCTV Entertainment + Celestial Movies (HD) CGTN CGTN-Documentary Ch 5 (HD) + Ch 8 (HD) + Ch U (HD) + China Movie Channel + Cinema One Global CINEMAX (HD) Citra Drama (HD) CNA (HD) @@ -66,39 +58,60 @@ Colors Colors Tamil HD Crime + Investigation™ (HD) - Discovery Asia (HD) + CTI Asia (HD) Discovery Channel (HD) + Dragon TV Intl Deutsche Welle (English) - EUROSPORT (HD) - Food Network (HD) + ETTV Asia (HD) + ETTV Asia News (HD) + Fight Sports (HD) + FOX News Channel France 24 (English) + France 24 (French) + Global Trekker (HD) GMA Life TV GMA News TV GMA Pinoy TV - HBO HD + HBO HD HBO Family (HD) HBO Hits (HD) HBO Signature (HD) + HGTV (HD) + HISTORY™ (HD) HITS (HD) HITS Movies HD + HITS NOW (HD) Hub Premier 1 Hub Premier 2 Hub Premier 3 Hub Premier 4 + Hub Premier 5 + Hub Premier 6 + Hunan International + TVB Jade (HD) + KBS World (HD) KTV HD Lifetime (HD) + Love Nature (HD) MTV India NHK World – Japan (HD) NHK World Premium Nickelodeon Asia HD Nick Jr. + now Jelli (HD) + ONE HD (Mandarin) ONE HD (Malay) + (HD) Outdoor Channel Pesona HD + Phoenix InfoNews Premier Sports + ROCK Action (HD) ROCK Entertainment (HD) + Russia Today Sky News HD SET (HINDI) SONY MAX + Sony YAY! SPOTV 2 (HD) SPOTV (HD) Star Bharat @@ -110,33 +123,18 @@ Suria (HD) The Filipino Channel Times Now + TLC (HD) TRACE Sports Stars HD + TVBS Asia + TVBS News + TVB Xing He (HD) + tvN HD (Mandarin) tvN HD (Malay) Vasantham (HD) Vijay TV + WAKUWAKU JAPAN (HD) (Mandarin) + WION Zee Tamil + Zee Thirai ZEE TV - France 24 (French) - Asianet Movies - Astro Prima HD - Astro Ria HD - ETTV Asia (HD) - BRTV International - CCM - CCTV-4 (HD) - CCTV Entertainment - Celestial Movies (HD) - Ch 8 (HD) - Ch U (HD) - CTI Asia (HD) - Dragon TV Intl - Hunan International - TVB Jade (HD) - now Jelli (HD) - ONE HD (Mandarin) - Phoenix InfoNews - TVBS Asia - TVBS News - TVB Xing He (HD) - tvN HD (Mandarin) diff --git a/sites/singtel.com/singtel.com.config.js b/sites/singtel.com/singtel.com.config.js index 07d3a33e0..c39e7b651 100644 --- a/sites/singtel.com/singtel.com.config.js +++ b/sites/singtel.com/singtel.com.config.js @@ -19,7 +19,7 @@ module.exports = { )}.json` }, parser({ content, channel }) { - let programs = [] + const programs = [] const items = parseItems(content, channel) items.forEach(item => { const start = dayjs.tz(item.startDateTime, 'Asia/Singapore') @@ -36,6 +36,7 @@ module.exports = { return programs }, async channels() { + const channels = {} const axios = require('axios') const cheerio = require('cheerio') @@ -45,16 +46,19 @@ module.exports = { .catch(console.log) const $ = cheerio.load(data) - let datamodel = $('ux-tv-channel-epg').attr('datamodel') - datamodel = JSON.parse(datamodel) + const datamodel = JSON.parse($('ux-tv-channel-epg').attr('datamodel')) - return datamodel.tvChannelLists.map(item => { - return { - lang: 'en', - site_id: item.epgChannelId, - name: item.title.trim() + datamodel?.tvChannelLists.forEach(item => { + if (channels[item.epgChannelId] === undefined) { + channels[item.epgChannelId] = { + lang: 'en', + site_id: item.epgChannelId, + name: item.title.trim() + } } }) + + return Object.values(channels) } } diff --git a/sites/streamingtvguides.com/streamingtvguides.com.config.js b/sites/streamingtvguides.com/streamingtvguides.com.config.js index 28c3e0a0b..bfdd6dd92 100644 --- a/sites/streamingtvguides.com/streamingtvguides.com.config.js +++ b/sites/streamingtvguides.com/streamingtvguides.com.config.js @@ -30,7 +30,10 @@ module.exports = { }) }) - programs = sortBy(uniqBy(programs, p => p.start), p => p.start.valueOf()) + programs = sortBy( + uniqBy(programs, p => p.start), + p => p.start.valueOf() + ) return programs }, @@ -45,7 +48,7 @@ module.exports = { const $ = cheerio.load(data) $('#channel-group-all > div > div').each((i, el) => { - const site_id = $(el).find('input').attr('value').replace('&', '&') + const site_id = $(el).find('input').attr('value').replace(/&/g, '&') const label = $(el).text().trim() const svgTitle = $(el).find('svg').attr('alt') const name = (label || svgTitle || '').replace(site_id, '').trim() diff --git a/sites/tivie.id/__data__/content.html b/sites/tivie.id/__data__/content.html index f6caa1966..e52f1119d 100644 --- a/sites/tivie.id/__data__/content.html +++ b/sites/tivie.id/__data__/content.html @@ -1,15 +1,853 @@ - -
-
-
-
-
- -
-
    + + + + Jadwal Acara AXN 29 April 2026 | TiViE + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    + +
    +
    +
    + +
    + +
    +

    Jadwal Acara AXN 29 April 2026

    +
    +
    + +
    + + +

    AXN merupakan channel televisi satelit dan/atau kabel. Perlu berlangganan untuk yang dapat menyaksikan channel ini.

    + +

    Siaran AXN bisa disaksikan melalui penyedia layanan televisi berikut:

    + +
    +
    +
    Parabola
    +
      +
    • +
      +
      + MNC Vision +
      + + Channel #438 + +
      +
    • +
    • +
      +
      + K-Vision +
      + + + +
      +
    • +
    • +
      +
      + Nex Parabola +
      + + + +
      +
    • +
    • +
      +
      + TransVision +
      + + Channel #301 + +
      +
    • +
    +
    +
    +
    Kabel/IPTV
    +
      +
    • +
      +
      + First Media +
      + + Channel #51 + +
      +
    • +
    • +
      +
      + IndiHome +
      + + Channel #509 + +
      +
    • +
    • +
      +
      + MNC Play +
      + + Channel #79 + +
      +
    • +
    • +
      +
      + MyRepublic +
      + + Channel #201 + +
      +
    • +
    +
    +
    +
    Internet/OTT
    +
      +
    • +
      +
      + MAXStreamTV +
      + + + +
      +
    • +
    • +
      +
      + Vision+ +
      + + + +
      +
    • +
    +
    +
    +
    +
    + +
    +
    +
    + +
    + + +
    + + +
    + -
    -
    -
    -
    -
    +
    + + + + + + +
  • + + + +
  • +
  • + +
    +
    + 23:30 + + + WIB +
    +
    +
    + + + The Rainmaker, Ep. 1 + + +
    + + +
    +
    +
  • + + +
+
+
+ +
+
+
+
+ +
+

TiViE - Jadwal program acara televisi.

+

Made with in East Java 61353.

+
+
+ + + + + + + + + \ No newline at end of file diff --git a/sites/tivie.id/__data__/program01.html b/sites/tivie.id/__data__/program01.html index 973e0511a..9b0c4fcd2 100644 --- a/sites/tivie.id/__data__/program01.html +++ b/sites/tivie.id/__data__/program01.html @@ -1,102 +1,204 @@ - -
-
-
-
-
-
- -
-
-
- Film -
-

White House Down

-

2013

-
-

Saat melakukan tur di Gedung Putih bersama putrinya yang masih kecil, seorang perwira polisi - beraksi untuk melindungi anaknya dan presiden dari sekelompok penjajah paramiliter - bersenjata lengkap.

-
-
- - - -
-
-

Terakhir Tayang

- -
-
-
-
+ + +
+
+
+ +
+ +
+
+ Serial +
+ +

The Hunting Party S1

+

Episode 3

+ +
+

Di pedalaman Montana, tim memburu seorang pembunuh berantai nan kejam bernama Lowe yang terobsesi dengan kawanan serigala.

+
+ +
+ + + +
+ + +
+

Terakhir Tayang

+ + +
+ + +
+ + + + +
+
+
+
+ +
+

TiViE - Jadwal program acara televisi.

+

Made with in East Java 61353.

+
+
+ + + + + + + + + \ No newline at end of file diff --git a/sites/tivie.id/__data__/program02.html b/sites/tivie.id/__data__/program02.html index 5233f2b0a..1a6b319d9 100644 --- a/sites/tivie.id/__data__/program02.html +++ b/sites/tivie.id/__data__/program02.html @@ -1,106 +1,204 @@ - -
-
-
+ +
+
+
+ +
+ +
+
+ Serial +
+ +

The Rookie S7

+

Episode 6

+ +
+

Grey memberi Tim dan Lucy suatu tugas yang tak menyenangkan, sementara John dan Celina melacak keberadaan seorang gadis yang menghilang. Beberapa hubungan asmara berakhir di suatu acara amal.

+
+ +
+ + + +
+ + +
+

Terakhir Tayang

+ + +
+ + +
+ + + + +
+
+
+
+ +
+

TiViE - Jadwal program acara televisi.

+

Made with in East Java 61353.

+
+
+ + + + + + + + + \ No newline at end of file diff --git a/sites/tivie.id/tivie.id.channels.xml b/sites/tivie.id/tivie.id.channels.xml index 895c50459..b31f0ae9c 100644 --- a/sites/tivie.id/tivie.id.channels.xml +++ b/sites/tivie.id/tivie.id.channels.xml @@ -3,46 +3,57 @@ ANTV AXN beIN Sports 1 - beIN Sports 2 + beIN Sports 2 beIN Sports 3 BTV + CCM + Celestial Movies + CinemaWorld Cinemax CNN Galaxy Galaxy Premium Garuda TV GTV - HBO + HBO HBO Family HBO Hits HBO Signature HITS HITS Movies - HITS Now + HITS Now + IMC Indosiar iNews + KIX Kompas TV + K-Plus Lifetime - MDTV + MDTV Mentari TV Metro TV MNC TV Moji Nusantara TV - RCTI - Rock Action - Rock Entertainment + ONE RTV + RCTI + Rock Action + Rock Entertainment SCTV - SEA Today Sindonews TV + Sin Po TV + SpoTV2 SpoTV - SpoTV 2 + Studio Universal + Thrill Trans7 Trans TV tvN tvN Movies TvOne - TVRI + TVRI + VTV + Warner TV Zee Bioskop diff --git a/sites/tivie.id/tivie.id.config.js b/sites/tivie.id/tivie.id.config.js index 87d025c3c..a9ee5d7c1 100644 --- a/sites/tivie.id/tivie.id.config.js +++ b/sites/tivie.id/tivie.id.config.js @@ -65,23 +65,28 @@ module.exports = { }) if (queues.length) { await doFetch(queues, (queue, res) => { - const $ = cheerio.load(res) - const img = $('#main-content > div > div:nth-child(1) img') - const info = $('#main-content > div > div:nth-child(2)') - const title = parseText(info.find('h2:nth-child(2)')) - if (!queue.i.title.startsWith(title) && !queue.i.title.startsWith('LIVE ')) { - queue.i.subTitle = parseText(info.find('h2:nth-child(2)')) + if (res) { + const $ = cheerio.load(res) + const info = $('#main-content > div > div:nth-child(2)') + // program description + const desc = info.find('div[class=""] > p') + if (desc.length) { + desc.find('.hidden') + .toArray() + .forEach(el => $(el).remove()) + queue.i.description = parseText(desc) + } + // program categories + const cat = info.find('div[class=""] > a') + if (cat.length) { + queue.i.categories = parseText(cat).split(', ') + } + // program image + const img = $('#main-content > div > div:nth-child(1) img') + if (img.length) { + queue.i.image = img.attr('src') + } } - const desc1 = parseText(info.find('div[class=""]:nth-child(3)')) - const desc2 = parseText(info.find('div[class=""]:nth-child(4)')) - if (desc2 == '') { - queue.i.description = desc1.replace('TiViE.id | ', '') - } else { - queue.i.description = desc2.replace('TiViE.id | ', '') - queue.i.date = parseText(info.find('h2:nth-child(3)')) - } - queue.i.categories = parseText(info.find('div[class=""]:nth-child(1)')).split(', ') - queue.i.image = img.length ? img.attr('src') : null }) } // fill start-stop @@ -115,7 +120,7 @@ module.exports = { const url = $item.attr('href') return { lang, - site_id: url.substr(url.lastIndexOf('/') + 1), + site_id: url.substr(url.lastIndexOf('/') + 1, url.lastIndexOf('?') - url.lastIndexOf('/') - 1), name: $item.find('strong').text() } }) @@ -127,8 +132,8 @@ module.exports = { function parseText($item) { let text = $item.text().replace(/\t/g, '').replace(/\n/g, ' ').trim() while (true) { - if (text.match(/\s\s/)) { - text = text.replace(/\s\s/g, ' ') + if (text.match(/\s{2,}/)) { + text = text.replace(/\s{2,}/g, ' ') continue } break diff --git a/sites/tivie.id/tivie.id.test.js b/sites/tivie.id/tivie.id.test.js index dcc4e0ee5..cc609121a 100644 --- a/sites/tivie.id/tivie.id.test.js +++ b/sites/tivie.id/tivie.id.test.js @@ -11,7 +11,7 @@ dayjs.extend(utc) jest.mock('axios') -const date = dayjs.utc('2024-12-31').startOf('d') +const date = dayjs.utc('2026-04-29').startOf('d') const channel = { site_id: 'axn', xmltv_id: 'AXN.id', @@ -20,8 +20,8 @@ const channel = { axios.get.mockImplementation(url => { const urls = { - 'https://tivie.id/film/white-house-down-nwzDnwz9nAv6': 'program01.html', - 'https://tivie.id/program/hudson-rex-s6-e14-nwzDnwvBmQr9': 'program02.html' + 'https://tivie.id/program/the-hunting-party-e3-nwzDnwrCmAnB?utm_source=tivie&utm_medium=referral&utm_campaign=channel_detail&utm_content=button': 'program01.html', + 'https://tivie.id/program/the-rookie-s7-e6-nwzDnwv6mwzC?utm_source=tivie&utm_medium=referral&utm_campaign=channel_detail&utm_content=button': 'program02.html' } let data = '' if (urls[url] !== undefined) { @@ -31,7 +31,7 @@ axios.get.mockImplementation(url => { }) it('can generate valid url', () => { - expect(url({ channel, date })).toBe('https://tivie.id/channel/axn/20241231') + expect(url({ channel, date })).toBe('https://tivie.id/channel/axn/20260429') }) it('can parse response', async () => { @@ -42,26 +42,30 @@ it('can parse response', async () => { return p }) - expect(results.length).toBe(27) + expect(results.length).toBe(28) expect(results[0]).toMatchObject({ - start: '2024-12-30T17:00:00.000Z', - stop: '2024-12-30T17:05:00.000Z', - title: 'White House Down', + start: '2026-04-28T17:00:00.000Z', + stop: '2026-04-28T17:25:00.000Z', + title: 'The Hunting Party S1, Ep. 3', description: - 'Saat melakukan tur di Gedung Putih bersama putrinya yang masih kecil, seorang perwira polisi beraksi untuk melindungi anaknya dan presiden dari sekelompok penjajah paramiliter bersenjata lengkap.', + 'Di pedalaman Montana, tim memburu seorang pembunuh berantai nan kejam bernama Lowe yang terobsesi dengan kawanan serigala.', image: - 'https://i0.wp.com/is3.cloudhost.id/tivie/poster/2023/09/65116c78791c2-1695640694.jpg?resize=480,270' + 'https://i0.wp.com/is3.cloudhost.id/tivie/poster/2025/10/68e9d54962c8f-1760154953.jpg?resize=480,270', + categories: ['Serial'], + season: 1, + episode: 3 }) expect(results[2]).toMatchObject({ - start: '2024-12-30T18:00:00.000Z', - stop: '2024-12-30T18:55:00.000Z', - title: 'Hudson & Rex S6, Ep. 14', + start: '2026-04-28T18:20:00.000Z', + stop: '2026-04-28T19:15:00.000Z', + title: 'The Rookie S7, Ep. 6', description: - 'Saat guru musik Jesse terbunuh di studio rekamannya, Charlie dan Rex menghubungkan kejahatan tersebut dengan pembunuhan yang tampaknya tak ada hubungannya.', + 'Grey memberi Tim dan Lucy suatu tugas yang tak menyenangkan, sementara John dan Celina melacak keberadaan seorang gadis yang menghilang. Beberapa hubungan asmara berakhir di suatu acara amal.', image: - 'https://i0.wp.com/is3.cloudhost.id/tivie/poster/2024/07/668b7ced47b25-1720417517.jpg?resize=480,270', - season: 6, - episode: 14 + 'https://i0.wp.com/is3.cloudhost.id/tivie/poster/2025/01/677a9f2fb4b5f-1736089391.jpg?resize=480,270', + categories: ['Serial'], + season: 7, + episode: 6 }) }) diff --git a/sites/toonamiaftermath.com/__data__/certificate.pem b/sites/toonamiaftermath.com/__data__/certificate.pem new file mode 100644 index 000000000..09d1850d9 --- /dev/null +++ b/sites/toonamiaftermath.com/__data__/certificate.pem @@ -0,0 +1,89 @@ +-----BEGIN CERTIFICATE----- +MIIFBjCCA+6gAwIBAgISBqgDKu02NonzjkNEeHx7z9iZMA0GCSqGSIb3DQEBCwUA +MDMxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MQwwCgYDVQQD +EwNSMTMwHhcNMjYwNDMwMDkwMTM4WhcNMjYwNzI5MDkwMTM3WjAhMR8wHQYDVQQD +DBYqLnRvb25hbWlhZnRlcm1hdGguY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A +MIIBCgKCAQEAmqz8whacnCOafltHQbNkcmV5J04A0aKqi8SoPu3zl+x0n30GXHkr +7ssaHaXGb/LhIHQ71b1VrspDMcgb204YmSDYE0Ox5tmEt9+toRRkaR6BuZk2IPgI +Vuhx4z6PIYoY4BPq0wxqAzWCxKOCjN2PcEbzczVOfRnaI8JYWPXF7WrwkwB6gz7M +E2pq3/pS8+OIjMAnivGuvTBq702EzE/Rrym1G2y+kWUg5DeQ+X0Rm5VPIeW7hFNG +WdCz/RC/01dWiWyrFR4C4R7povYfkowJTzfdWeTEDkdxyoyS/4zETFk291aLYkEF +gDvrs6J/GHpCsEQyu21W5UAE5UTQv2hNuQIDAQABo4ICJDCCAiAwDgYDVR0PAQH/ +BAQDAgWgMBMGA1UdJQQMMAoGCCsGAQUFBwMBMAwGA1UdEwEB/wQCMAAwHQYDVR0O +BBYEFCvvVo6mBZ+wkP+jfF+GLCONwlNzMB8GA1UdIwQYMBaAFOernw8sM6BT015P +eMiyhA471pIzMDMGCCsGAQUFBwEBBCcwJTAjBggrBgEFBQcwAoYXaHR0cDovL3Ix +My5pLmxlbmNyLm9yZy8wIQYDVR0RBBowGIIWKi50b29uYW1pYWZ0ZXJtYXRoLmNv +bTATBgNVHSAEDDAKMAgGBmeBDAECATAuBgNVHR8EJzAlMCOgIaAfhh1odHRwOi8v +cjEzLmMubGVuY3Iub3JnLzI2LmNybDCCAQwGCisGAQQB1nkCBAIEgf0EgfoA+AB2 +AJROQ4f67MHvgfMZJCaoGGUBx9NfOAIBP3JnfVU3LhnYAAABnd3U3sgAAAQDAEcw +RQIhALu/dSOQk6HaGhlSNZxCAAHJT9cEWH1QBbSJ+SFaqrYWAiA0NxkcHvEQN4fa +EgUThyi6rCQSaAXVv5aLeHyPRbHbzwB+ACbjZG5YaSEjvDQ/RyQ1mzeSzSRaiNgV +05Mz/ZkYq0cjAAABnd3U3tgACAAABQALrWUiBAMARzBFAiBlCj3uiItFozSgfHKe +Hbznkv2q1k/0gr6BrqZH4zwE6wIhAOZVWBO329elJp/XbSHbuU0sQ3VF4x9IGRz0 +pVUpORgqMA0GCSqGSIb3DQEBCwUAA4IBAQAwAwhV6gsfenG1GOGsCWdGIC5884mk +r8s8g5DZM0OgsqyJdRry6Umpe1/tMOlxjqumWUcSCgfz+D+PLznJXSGNnHqvQ7sZ +pL7ET8rnuyQn22Qu4AVUxnbpuh4MeR3wNPgFNOx06VxoZA+E3YBwQhJIJzAYj8cg +dmA78ZlL2HfJiZ7pUXoTXC4y6D0U8rEdxHEwU5r8XRDRCVp3elp5s4EM93VQWH/E +Kgfe3MhZF864SHwyqkMEghk+6jsIemYwzg4EddIMasxFkCWcTMU6fZ7rF4iF2rMO +Cn5jJ5SAUy7308TPw6Js3JJ5ahaKTAPHERCvXyHK+c/bLSFT7mXWfdb8 +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIFBTCCAu2gAwIBAgIQWgDyEtjUtIDzkkFX6imDBTANBgkqhkiG9w0BAQsFADBP +MQswCQYDVQQGEwJVUzEpMCcGA1UEChMgSW50ZXJuZXQgU2VjdXJpdHkgUmVzZWFy +Y2ggR3JvdXAxFTATBgNVBAMTDElTUkcgUm9vdCBYMTAeFw0yNDAzMTMwMDAwMDBa +Fw0yNzAzMTIyMzU5NTlaMDMxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBF +bmNyeXB0MQwwCgYDVQQDEwNSMTMwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK +AoIBAQClZ3CN0FaBZBUXYc25BtStGZCMJlA3mBZjklTb2cyEBZPs0+wIG6BgUUNI +fSvHSJaetC3ancgnO1ehn6vw1g7UDjDKb5ux0daknTI+WE41b0VYaHEX/D7YXYKg +L7JRbLAaXbhZzjVlyIuhrxA3/+OcXcJJFzT/jCuLjfC8cSyTDB0FxLrHzarJXnzR +yQH3nAP2/Apd9Np75tt2QnDr9E0i2gB3b9bJXxf92nUupVcM9upctuBzpWjPoXTi +dYJ+EJ/B9aLrAek4sQpEzNPCifVJNYIKNLMc6YjCR06CDgo28EdPivEpBHXazeGa +XP9enZiVuppD0EqiFwUBBDDTMrOPAgMBAAGjgfgwgfUwDgYDVR0PAQH/BAQDAgGG +MB0GA1UdJQQWMBQGCCsGAQUFBwMCBggrBgEFBQcDATASBgNVHRMBAf8ECDAGAQH/ +AgEAMB0GA1UdDgQWBBTnq58PLDOgU9NeT3jIsoQOO9aSMzAfBgNVHSMEGDAWgBR5 +tFnme7bl5AFzgAiIyBpY9umbbjAyBggrBgEFBQcBAQQmMCQwIgYIKwYBBQUHMAKG +Fmh0dHA6Ly94MS5pLmxlbmNyLm9yZy8wEwYDVR0gBAwwCjAIBgZngQwBAgEwJwYD +VR0fBCAwHjAcoBqgGIYWaHR0cDovL3gxLmMubGVuY3Iub3JnLzANBgkqhkiG9w0B +AQsFAAOCAgEAUTdYUqEimzW7TbrOypLqCfL7VOwYf/Q79OH5cHLCZeggfQhDconl +k7Kgh8b0vi+/XuWu7CN8n/UPeg1vo3G+taXirrytthQinAHGwc/UdbOygJa9zuBc +VyqoH3CXTXDInT+8a+c3aEVMJ2St+pSn4ed+WkDp8ijsijvEyFwE47hulW0Ltzjg +9fOV5Pmrg/zxWbRuL+k0DBDHEJennCsAen7c35Pmx7jpmJ/HtgRhcnz0yjSBvyIw +6L1QIupkCv2SBODT/xDD3gfQQyKv6roV4G2EhfEyAsWpmojxjCUCGiyg97FvDtm/ +NK2LSc9lybKxB73I2+P2G3CaWpvvpAiHCVu30jW8GCxKdfhsXtnIy2imskQqVZ2m +0Pmxobb28Tucr7xBK7CtwvPrb79os7u2XP3O5f9b/H66GNyRrglRXlrYjI1oGYL/ +f4I1n/Sgusda6WvA6C190kxjU15Y12mHU4+BxyR9cx2hhGS9fAjMZKJss28qxvz6 +Axu4CaDmRNZpK/pQrXF17yXCXkmEWgvSOEZy6Z9pcbLIVEGckV/iVeq0AOo2pkg9 +p4QRIy0tK2diRENLSF2KysFwbY6B26BFeFs3v1sYVRhFW9nLkOrQVporCS0KyZmf +wVD89qSTlnctLcZnIavjKsKUu1nA1iU0yYMdYepKR7lWbnwhdx3ewok= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIFazCCA1OgAwIBAgIRAIIQz7DSQONZRGPgu2OCiwAwDQYJKoZIhvcNAQELBQAw +TzELMAkGA1UEBhMCVVMxKTAnBgNVBAoTIEludGVybmV0IFNlY3VyaXR5IFJlc2Vh +cmNoIEdyb3VwMRUwEwYDVQQDEwxJU1JHIFJvb3QgWDEwHhcNMTUwNjA0MTEwNDM4 +WhcNMzUwNjA0MTEwNDM4WjBPMQswCQYDVQQGEwJVUzEpMCcGA1UEChMgSW50ZXJu +ZXQgU2VjdXJpdHkgUmVzZWFyY2ggR3JvdXAxFTATBgNVBAMTDElTUkcgUm9vdCBY +MTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAK3oJHP0FDfzm54rVygc +h77ct984kIxuPOZXoHj3dcKi/vVqbvYATyjb3miGbESTtrFj/RQSa78f0uoxmyF+ +0TM8ukj13Xnfs7j/EvEhmkvBioZxaUpmZmyPfjxwv60pIgbz5MDmgK7iS4+3mX6U +A5/TR5d8mUgjU+g4rk8Kb4Mu0UlXjIB0ttov0DiNewNwIRt18jA8+o+u3dpjq+sW +T8KOEUt+zwvo/7V3LvSye0rgTBIlDHCNAymg4VMk7BPZ7hm/ELNKjD+Jo2FR3qyH +B5T0Y3HsLuJvW5iB4YlcNHlsdu87kGJ55tukmi8mxdAQ4Q7e2RCOFvu396j3x+UC +B5iPNgiV5+I3lg02dZ77DnKxHZu8A/lJBdiB3QW0KtZB6awBdpUKD9jf1b0SHzUv +KBds0pjBqAlkd25HN7rOrFleaJ1/ctaJxQZBKT5ZPt0m9STJEadao0xAH0ahmbWn +OlFuhjuefXKnEgV4We0+UXgVCwOPjdAvBbI+e0ocS3MFEvzG6uBQE3xDk3SzynTn +jh8BCNAw1FtxNrQHusEwMFxIt4I7mKZ9YIqioymCzLq9gwQbooMDQaHWBfEbwrbw +qHyGO0aoSCqI3Haadr8faqU9GY/rOPNk3sgrDQoo//fb4hVC1CLQJ13hef4Y53CI +rU7m2Ys6xt0nUW7/vGT1M0NPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNV +HRMBAf8EBTADAQH/MB0GA1UdDgQWBBR5tFnme7bl5AFzgAiIyBpY9umbbjANBgkq +hkiG9w0BAQsFAAOCAgEAVR9YqbyyqFDQDLHYGmkgJykIrGF1XIpu+ILlaS/V9lZL +ubhzEFnTIZd+50xx+7LSYK05qAvqFyFWhfFQDlnrzuBZ6brJFe+GnY+EgPbk6ZGQ +3BebYhtF8GaV0nxvwuo77x/Py9auJ/GpsMiu/X1+mvoiBOv/2X/qkSsisRcOj/KK +NFtY2PwByVS5uCbMiogziUwthDyC3+6WVwW6LLv3xLfHTjuCvjHIInNzktHCgKQ5 +ORAzI4JMPJ+GslWYHb4phowim57iaztXOoJwTdwJx4nLCgdNbOhdjsnvzqvHu7Ur +TkXWStAmzOVyyghqpZXjFaH3pO3JLF+l+/+sKAIuvtd7u+Nxe5AW0wdeRlN8NwdC +jNPElpzVmbUq4JUagEiuTDkHzsxHpFKVK7q4+63SM1N95R1NbdWhscdCb+ZAJzVc +oyi3B43njTOQ5yOf+1CceWxG1bQVs5ZufpsMljq4Ui0/1lvh+wjChP4kqKOJ2qxq +4RgqsahDYVvTH9w7jXbyLeiNdd8XM2w9U/t7y0Ff/9yi0GE44Za4rF2LN9d11TPA +mRGunUHBcnWEvgJBQl9nJEiU0Zsnvgc/ubhPgXRR4Xq37Z0j4r7g1SgEEzwxA57d +emyPxgcYxn/eR44/KJ4EBs+lVDR3veyJm+kXQ99b21/+jh5Xos1AnX5iItreGCc= +-----END CERTIFICATE----- diff --git a/sites/toonamiaftermath.com/toonamiaftermath.com.config.js b/sites/toonamiaftermath.com/toonamiaftermath.com.config.js index 4be2308d8..5dc13323f 100644 --- a/sites/toonamiaftermath.com/toonamiaftermath.com.config.js +++ b/sites/toonamiaftermath.com/toonamiaftermath.com.config.js @@ -1,19 +1,26 @@ -process.env['NODE_TLS_REJECT_UNAUTHORIZED'] = '0' - const dayjs = require('dayjs') const axios = require('axios') +const https = require('https') +const path = require('path') +const fs = require('fs') const API_ENDPOINT = 'https://api.toonamiaftermath.com' -module.exports = { +const config = { site: 'toonamiaftermath.com', days: 3, + request: { + httpsAgent: new https.Agent({ + ca: fs.readFileSync(path.resolve(__dirname, '__data__/certificate.pem')) + }) + }, async url({ channel, date }) { const playlists = await axios .get( `${API_ENDPOINT}/playlists?scheduleName=${channel.site_id}&startDate=${date .add(1, 'd') - .toJSON()}&thisWeek=true&weekStartDay=monday` + .toJSON()}&thisWeek=true&weekStartDay=monday`, + config.request ) .then(r => r.data) .catch(console.error) @@ -58,3 +65,5 @@ function parseEpisode(item) { function parseImage(item) { return item && item.info && item.info.image ? item.info.image : null } + +module.exports = config diff --git a/sites/vidio.com/vidio.com.channels.xml b/sites/vidio.com/vidio.com.channels.xml index c0ea3b1c8..797d690a9 100644 --- a/sites/vidio.com/vidio.com.channels.xml +++ b/sites/vidio.com/vidio.com.channels.xml @@ -1,60 +1,68 @@ - SCTV - Indosiar - Moji - TRANS TV - Trans7 - Metro TV - ANTV - TVOne - Kompas TV - MDTV - RTV - DW English - Jaktv - BTV - Bein 1 - Bein 3 - TVN - Horee - Aljazeera - News Asia - Euro News - TVRI - DAAI TV - Zoomoo - CTV 1 - CTV 2 - NBA TV - Arirang - CTV 3 - Makkah TV - U-Channel TV - Hip Hip Horee! - ABC Australia - Magna TV - Nusantara TV - Ajwa TV MUSICA - NHK World Japan - ROCK Entertainment - Rock Action - CTV 5 - CTV 6 - Premier League TV - JTV - jawaposTV - Elshinta TV - Tawaf TV - AFRICANEWS TV - SPOTV - SPOTV 2 - TV5Monde - Bein 2 GGS TV - Champions Golf 1 - Champions Golf 2 - BeritaSatu + Voli TV 2 + ABC Australia + Africanews + AJWA TV + Aljazeera + ANTV + Arirang + Bein 1 + Bein 2 + Bein 3 + Berita Satu + BTV + Champions Fight + Champions Golf 1 + Champions Golf 2 + Champions TV 1 + Champions TV 2 + Champions TV 3 + Champions TV 5 + Champions TV 6 + Premier League TV + Citra Drama + CNA + DAAI TV Daystar TV + DMI TV + DW English + Elshinta TV + Euronews + Garuda TV + GTV + Hip Hip Horee! + Horee + Indosiar + iNews + Jaktv + jawaposTV + JTV + Kompas TV + Magna TV + Makkah TV + MDTV + Mentari TV + Metro TV + MNCTV + Moji + NHK World Japan + Nusantara TV + RTV + RCTI + Real Madrid TV + Rock Action + SCTV + Sin Po TV + SPOTV 2 + SPOTV + Trans7 + TRANS TV + TV5Monde + TVN + TVOne + TVRI + U-Channel TV diff --git a/sites/visionplus.id/visionplus.id.config.js b/sites/visionplus.id/visionplus.id.config.js index e4220ca48..20bbb8571 100644 --- a/sites/visionplus.id/visionplus.id.config.js +++ b/sites/visionplus.id/visionplus.id.config.js @@ -36,7 +36,7 @@ module.exports = { programs.push({ title, description: ev.con && ev.con.loc ? ev.con.loc[0].syn : null, - categories: ev.con ? ev.con.categories : null, + categories: ev.con ? parseCategories(ev.con.categories) : null, season: season ? parseInt(season) : season, episode: episode ? parseInt(episode) : episode, start: dayjs(ev.sta), @@ -52,7 +52,9 @@ module.exports = { const result = [] const axios = require('axios') const json = await axios - .get(`https://www.visionplus.id/managetv/tvinfo/channels/get?language=${languages[lang]}`) + .get(`https://www.visionplus.id/managetv/tvinfo/channels/get?language=${ + languages[lang] + }&partition=IndonesiaPartition®ion=Indonesia`) .then(response => response.data) .catch(console.error) @@ -69,3 +71,22 @@ module.exports = { return result } } + +function parseCategories(categories) { + if (Array.isArray(categories)) { + const f = s => (s.match(/\//g) || []).length + const cat = [...categories] + .sort((a, b) => f(a) - f(b)) + .map(a => a.split('/')) + categories = [] + for (const a of cat) { + for (const b of a) { + if (!categories.includes(b)) { + categories.push(b) + } + } + } + } + + return categories +} diff --git a/sites/visionplus.id/visionplus.id.test.js b/sites/visionplus.id/visionplus.id.test.js index f71f7c6fc..46faf4363 100644 --- a/sites/visionplus.id/visionplus.id.test.js +++ b/sites/visionplus.id/visionplus.id.test.js @@ -42,6 +42,7 @@ it('can parse response', () => { title: 'FBI: Most Wanted S4, Ep 18', description: 'After two agents from the Bureau of Land Management go missing while executing a land seizure warrant in Wyoming, the Fugitive Task Force heads west to track them down in an unwelcoming county.', + categories: ['Series', 'Thriller'], season: 4, episode: 18 }) @@ -60,6 +61,7 @@ it('can parse response', () => { title: 'FBI: Most Wanted S4, Ep 18', description: 'Satgas Buronan pergi ke wilayah barat untuk melacak keberadaan dua petugas Biro Pengelolaan Lahan yang menghilang saat menjalankan perintah penyitaan lahan di negara bagian yang tak ramah, Wyoming.', + categories: ['Series', 'Thriller'], season: 4, episode: 18 }) diff --git a/sites/visionplus.id/visionplus.id_en.channels.xml b/sites/visionplus.id/visionplus.id_en.channels.xml index 2f0d700bb..eed2cae95 100644 --- a/sites/visionplus.id/visionplus.id_en.channels.xml +++ b/sites/visionplus.id/visionplus.id_en.channels.xml @@ -1,123 +1,10 @@ - RCTI - MNCTV - GTV - iNews - SindoNews - Trans TV - Trans 7 - ANTV - RTV - TVOne - Kompas TV - Metro TV - BTV - TVRI - SEA Today - DAAI TV - Net TV - JTV - JAK TV - Bali TV - Bandung TV - TV 9 - Tawaf - TV MU - Cinemachi - Cinemachi Kids - Cinemachi Xtra - Cinemachi Max - Cinemachi Action - Thrill - Hits Movies - Celestial Movies - CCM - TVN Movies - Zee Bioskop - GALAXY PREMIUM - GALAXY - IMC (Indonesia Movie Channel) - My Family Channel - My Cinema - My Cinema Asia - Kids TV - Moonbug - Cbeebies - Nick Jr - Zoo Moo - Nick - Animax - My Kidz - Dream Works - Food Travel - Entertainment - TVN - One - Kix - NHK World Premium - Hits - AXN - Lifetime - FMN - Vision Prime - Celebrities TV Hanacaraka TV - Rock Entertainment - Rock Action - Crime Investigation - Outdoor Channel - BBC Earth - Global Trekker - History - Love Nature - Sportstars - Sportstars 2 - Soccer Channel - SpoTV 1 - SpoTV 2 - Fight Sports - beIN SPORTS - beIN SPORTS 2 - beIN SPORTS 3 - beIN SPORTS 4 - beIN SPORTS 5 - BBC World news - CNBC Asia - FOX News - Bloomberg - IDX - Muslim TV - LIFE - Reformed 21 - Music TV - MTV Live - MTV 90s - DW - France 24 - TRT World - Aljazeera - RT - EURONEWS - Channel News Asia - Al Quran Al Kareem - EWTN - CGTN Documentary - CGTN - Anhui - Xing kong TV - Shanghai Dragon - Hunan TV - Jiangsu TV - NHK - TV5Monde - Arirang - ABC - CCM - Celebrities TV - DENS Food Channel - DENSPLAY Channel - DENS Showbizz Channel + RCTI World + GTV World + MNCTV World + Drama World V+ LIVE R+ LIVE V+ LIVE 2 @@ -125,4 +12,125 @@ V+ LIVE 3 V+ LIVE 4 V+ LIVE 5 + V+ LIVE 6 + V+ LIVE 7 + V+ LIVE 8 + V+ LIVE 9 + ABC + Aljazeera + Al Quran Al Kareem + Anhui + Animax + ANTV + Arirang + AXN + Bali TV + Bandung TV + BBC Earth + BBC World news + beIN SPORTS + beIN SPORTS 2 + beIN SPORTS 3 + beIN SPORTS 4 + beIN SPORTS 5 + Bloomberg + BTV + Cbeebies + Celebrities TV + CCM + Celestial Movies + CGTN + CGTN Documentary + Originals + Cineedge + Buddy Star + Superrix + Uniques + Channel News Asia + CNBC Asia + Crime Investigation + DAAI TV + DENS Food Channel + DENSPLAY Channel + DENS Showbizz Channel + DMI TV + Shanghai Dragon + Dream Works + DW + Entertainment + EURONEWS + EWTN + Fight Sports + FOX News + France 24 + Formosa + GALAXY + GALAXY PREMIUM + Global Trekker + GTV + History + Hits + Hits Movies + HITS Now + Hunan TV + IDX + IMC (Indonesia Movie Channel) + Indosiar + iNews + JAK TV + Jiangsu TV + JTV + Kids TV + Kix + Kompas TV + LIFE + Lifetime + Love Nature + MDTV + Mentari TV + Metro TV + MNCTV + Moji + Moonbug + Music TV + Muslim TV + NHK + NHK World Premium + Nick + Nick Jr + Food Travel + One + Outdoor Channel + RTV + RCTI + Reformed 21 + Rock Action + Rock Entertainment + RT + SCTV + Sanlih + SindoNews + Soccer Channel + Sportstars 2 + Sportstars 3 + Sportstars 4 + Sportstars + SpoTV 2 + SpoTV 1 + Studio Universal + Thrill + Trans 7 + Trans TV + TRT World + TV5Monde + TV 9 + TV MU + TVN + TVN Movies + TVOne + TVRI + Vision Prime + Xing kong TV + Zee Bioskop + Zoo Moo diff --git a/sites/visionplus.id/visionplus.id_id.channels.xml b/sites/visionplus.id/visionplus.id_id.channels.xml index 418c6d5e7..f4cd9c853 100644 --- a/sites/visionplus.id/visionplus.id_id.channels.xml +++ b/sites/visionplus.id/visionplus.id_id.channels.xml @@ -1,123 +1,10 @@ - RCTI - MNCTV - GTV - iNews - SindoNews - Trans TV - Trans 7 - ANTV - RTV - TVOne - Kompas TV - Metro TV - BTV - TVRI - SEA Today - DAAI TV - Net TV - JTV - JAK TV - Bali TV - Bandung TV - TV 9 - Tawaf - TV MU - Cinemachi - Cinemachi Kids - Cinemachi Xtra - Cinemachi Max - Cinemachi Action - Thrill - Hits Movies - Celestial Movies - CCM - TVN Movies - Zee Bioskop - GALAXY PREMIUM - GALAXY - IMC (Indonesia Movie Channel) - My Family Channel - My Cinema - My Cinema Asia - Kids TV - Moonbug - Cbeebies - Nick Jr - Zoo Moo - Nick - Animax - My Kidz - Dream Works - Food Travel - Entertainment - TVN - One - Kix - NHK World Premium - Hits - AXN - Lifetime - FMN - Vision Prime - Celebrities TV Hanacaraka TV - Rock Entertainment - Rock Action - Crime Investigation - Outdoor Channel - BBC Earth - Global Trekker - History - Love Nature - Sportstars - Sportstars 2 - Soccer Channel - SpoTV 1 - SpoTV 2 - Fight Sports - beIN SPORTS - beIN SPORTS 2 - beIN SPORTS 3 - beIN SPORTS 4 - beIN SPORTS 5 - BBC World news - CNBC Asia - FOX News - Bloomberg - IDX - Muslim TV - LIFE - Reformed 21 - Music TV - MTV Live - MTV 90s - DW - France 24 - TRT World - Aljazeera - RT - EURONEWS - Channel News Asia - Al Quran Al Kareem - EWTN - CGTN Documentary - CGTN - Anhui - Xing kong TV - Shanghai Dragon - Hunan TV - Jiangsu TV - NHK - TV5Monde - Arirang - ABC - CCM - Celebrities TV - DENS Food Channel - DENSPLAY Channel - DENS Showbizz Channel + RCTI World + GTV World + MNCTV World + Drama World V+ LIVE R+ LIVE V+ LIVE 2 @@ -125,4 +12,125 @@ V+ LIVE 3 V+ LIVE 4 V+ LIVE 5 + V+ LIVE 6 + V+ LIVE 7 + V+ LIVE 8 + V+ LIVE 9 + ABC + Aljazeera + Al Quran Al Kareem + Anhui + Animax + ANTV + Arirang + AXN + Bali TV + Bandung TV + BBC Earth + BBC World news + beIN SPORTS + beIN SPORTS 2 + beIN SPORTS 3 + beIN SPORTS 4 + beIN SPORTS 5 + Bloomberg + BTV + Cbeebies + Celebrities TV + CCM + Celestial Movies + CGTN + CGTN Documentary + Originals + Cineedge + Buddy Star + Superrix + Uniques + Channel News Asia + CNBC Asia + Crime Investigation + DAAI TV + DENS Food Channel + DENSPLAY Channel + DENS Showbizz Channel + DMI TV + Shanghai Dragon + Dream Works + DW + Entertainment + EURONEWS + EWTN + Fight Sports + FOX News + France 24 + Formosa + GALAXY + GALAXY PREMIUM + Global Trekker + GTV + History + Hits + Hits Movies + HITS Now + Hunan TV + IDX + IMC (Indonesia Movie Channel) + Indosiar + iNews + JAK TV + Jiangsu TV + JTV + Kids TV + Kix + Kompas TV + LIFE + Lifetime + Love Nature + MDTV + Mentari TV + Metro TV + MNCTV + Moji + Moonbug + Music TV + Muslim TV + NHK + NHK World Premium + Nick + Nick Jr + Food Travel + One + Outdoor Channel + RTV + RCTI + Reformed 21 + Rock Action + Rock Entertainment + RT + SCTV + Sanlih + SindoNews + Soccer Channel + Sportstars 2 + Sportstars 3 + Sportstars 4 + Sportstars + SpoTV 2 + SpoTV 1 + Studio Universal + Thrill + Trans 7 + Trans TV + TRT World + TV5Monde + TV 9 + TV MU + TVN + TVN Movies + TVOne + TVRI + Vision Prime + Xing kong TV + Zee Bioskop + Zoo Moo diff --git a/sites/zee5.com/__data__/content.json b/sites/zee5.com/__data__/content.json new file mode 100644 index 000000000..539a7d542 --- /dev/null +++ b/sites/zee5.com/__data__/content.json @@ -0,0 +1 @@ +{"total":1,"page":1,"page_size":500,"items":[{"id":"0-9-zeecinemahd","title":"Zee Cinema HD","original_title":"Zee Cinema HD","asset_type":9,"image":{"cover":"1920x770a2c0642b147d48c187c718c92d1557bb","app_cover":"1920x1080appcoverbb6a37e29fa444b0b156ad2d5a889860","list":"1920x1080listb0707389e11d47edb651c329f76a0755","channel_square":"386x3863e01c38ce532461fa11091a2d509c50a","channel_list":"360x2032123e39878fe48e1af5d3c64af1a8176","channel_web":"170x120397a2a6991f84cafbafda4b8c28d30f6","square":"374x374d317f8e1ff0343f79ef93ce57532a194","tv_cover":"","portrait":"720x1080withlogoc66bd8a1ad89493796ba7f949773eee1","listclean":"1920x1080list4eba330859bf4682916e4603d09931aa","portraitclean":"1920x5484184f0c087f844d8876c4fc552205c73","homefeed-launcher-sticker":"1920x457d091c4f11ec34ab38b4a205aed123db4","vert_banner":"845x1080affdf107e2f9404b890b531106b92256","4k_banner":"","hd_tile":"","2x3_hd_poster":"2000x300081745a1c983647dda8b790146ec72cb5","title_logo":"","tv_banner":"3840x2160tvbanner9d6c6352deea4e14a26332e760076fbb","motion_app_cover":"","motion_cover":"","motion_vert_banner":"","motion_homefeed-launcher-sticker":""},"list_image":"1920x1080listb0707389e11d47edb651c329f76a0755.jpg","cover_image":"1920x770a2c0642b147d48c187c718c92d1557bb.jpg","languages":["hi"],"audio_languages":["hi"],"genres":[{"id":"Movie","value":"Movie"}],"items":[{"id":"0-10-CHN-007790000-20260426013300","title":"Tamilarasan","actors":[],"duration":120,"tags":["Action","Crime","Drama","Thriller","Medical Drama","FamilyVijay Antony","Suresh Gopi","Sangeetha","Remya Nambeesan","S. Kowsalya Rani"],"original_title":"Tamilarasan","asset_type":10,"image":{"cover":"","list":"ZeeCinemaHDTamilarasan1567745cf08a3ba1a9946d890a2f523ab71f38e","in__cover":"","in__list":""},"description":"An officer seizes control of a hospital, defying orders, which sparks a fierce conflict. His rebellion sets off a chain of events that could lead to a dramatic clash with authorities.","start_time":"2026-04-25T20:03:00Z","end_time":"2026-04-25T22:03:00Z","list_image":"ZeeCinemaHDTamilarasan1567745cf08a3ba1a9946d890a2f523ab71f38e.jpg","licensing":{"licensing_periods":[]},"channel":{"id":"0-9-zeecinemahd"},"languages":["hi"],"audio_languages":["hi"],"genres":[{"id":"Film","value":"Film"}]},{"id":"0-10-CHN-007790000-20260426033300","title":"Vedha","actors":[],"duration":142,"tags":["Action","Thriller","Murder","Crime","Revenge","Daughter","EscapeShiva Rajkumar","Ganavi Laxman","Shwetha Chengappa","Umashree","Aditi Sagar","Geeta Shiva Rajkumar"],"original_title":"Vedha","asset_type":10,"image":{"cover":"","list":"ZeeCinemaHDVedha1500769c92eb40ae1c8457ebb0304fac0b48e21","in__cover":"","in__list":""},"description":"Father daughter killers evade cop pursuit.","start_time":"2026-04-25T22:03:00Z","end_time":"2026-04-26T00:25:00Z","list_image":"ZeeCinemaHDVedha1500769c92eb40ae1c8457ebb0304fac0b48e21.jpg","licensing":{"licensing_periods":[]},"channel":{"id":"0-9-zeecinemahd"},"languages":["hi"],"audio_languages":["hi"],"genres":[{"id":"Film","value":"Film"}]},{"id":"0-10-CHN-007790000-20260426055500","title":"Sye Raa Narasimha Reddy","actors":[],"duration":185,"tags":["Freedom","Revolution","Colonial Rule","Resistance","Rayalaseema","Courage","Sacrifice","Empire","Atrocities","UprisingChiranjeevi","Nayanthara","Tamannaah Bhatia","Sudeep","Ram Charan"],"original_title":"Sye Raa Narasimha Reddy","asset_type":10,"image":{"cover":"","list":"ZeeCinemaHDSyeRaaNarasimhaReddy1108856342f53e21b4a4ae79b5803247f5d29ac","in__cover":"","in__list":""},"description":"10 years before the Sepoy Mutiny, Emperor Uyyalawada Narasimha Reddy fights the British East India Company in order to put an end to their atrocities.","start_time":"2026-04-26T00:25:00Z","end_time":"2026-04-26T03:30:00Z","list_image":"ZeeCinemaHDSyeRaaNarasimhaReddy1108856342f53e21b4a4ae79b5803247f5d29ac.jpg","licensing":{"licensing_periods":[]},"channel":{"id":"0-9-zeecinemahd"},"languages":["hi"],"audio_languages":["hi"],"genres":[{"id":"Film","value":"Film"}]},{"id":"0-10-CHN-007790000-20260426090000","title":"Aranmanai 4","actors":[],"duration":180,"tags":["mystery","grief","revenge","secrets","thriller","investigation","family","betrayal","darkness","redemptionSundar C","Tamannaah Bhatia","Raashi Khanna","Khushbu Sundar","A. C. Shanmugam","A. C. S. Arun Kumar"],"original_title":"Aranmanai 4","asset_type":10,"image":{"cover":"","list":"ZeeCinemaHDAranmanai4178971914d5593b58c84b14ad75cbaf9c28daf9","in__cover":"","in__list":""},"description":"After his sister's suspicious death, a man decides to discover the hidden truth, setting off a chasm for chaos and terror.","start_time":"2026-04-26T03:30:00Z","end_time":"2026-04-26T06:30:00Z","list_image":"ZeeCinemaHDAranmanai4178971914d5593b58c84b14ad75cbaf9c28daf9.jpg","licensing":{"licensing_periods":[]},"channel":{"id":"0-9-zeecinemahd"},"languages":["hi"],"audio_languages":["hi"],"genres":[{"id":"Film","value":"Film"}]},{"id":"0-10-CHN-007790000-20260426120000","title":"Bhabhi Ji Ghar Par Hain Fun On The Run","duration":147,"tags":["Entertainment"],"original_title":"Bhabhi Ji Ghar Par Hain Fun On The Run","asset_type":10,"image":{"cover":"","list":"ZeeCinemaHDBhabhiJiGharParHainFunOnTheRun2069730daaced6acda84bfba0e758765a8b3258","in__cover":"","in__list":""},"description":"Anita and Vibhuti embark on a hilarious adventure filled with chaos, witty exchanges, and quirky situations, bringing laughter through their unique chemistry and comic timing.","start_time":"2026-04-26T06:30:00Z","end_time":"2026-04-26T08:57:00Z","list_image":"ZeeCinemaHDBhabhiJiGharParHainFunOnTheRun2069730daaced6acda84bfba0e758765a8b3258.jpg","actors":[],"licensing":{"licensing_periods":[]},"channel":{"id":"0-9-zeecinemahd"},"languages":["hi"],"audio_languages":["hi"],"genres":[{"id":"Film","value":"Film"}]},{"id":"0-10-CHN-007790000-20260426142700","title":"Saaho","actors":[],"duration":173,"tags":["Thief","Stolen Money","Crime Lord","Gang War","Investigation","Action","Thriller","Kidnapped Man","Car Accident","Black Panther","Video SurveillancePrabhas","Shraddha Kapoor","Chunky Pandey","Jackie Shroff","V. Vamsi Krishna Reddy","Pramod Uppalapati"],"original_title":"Saaho","asset_type":10,"image":{"cover":"","list":"ZeeCinemaHDSaaho8628577baa5b12251146308005ba45cb8c7c57","in__cover":"","in__list":""},"description":"An undercover agent and his partner chase a thief who stole ?2,000 crore, only to uncover ties to a crime lord's death and a dangerous gang war threatening the city.","start_time":"2026-04-26T08:57:00Z","end_time":"2026-04-26T11:50:00Z","list_image":"ZeeCinemaHDSaaho8628577baa5b12251146308005ba45cb8c7c57.jpg","licensing":{"licensing_periods":[]},"channel":{"id":"0-9-zeecinemahd"},"languages":["hi"],"audio_languages":["hi"],"genres":[{"id":"Film","value":"Film"}]},{"id":"0-10-CHN-007790000-20260426172000","title":"Kisi Ka Bhai Kisi Ki Jaan","actors":[],"duration":155,"tags":["Family","Brotherhood","Sacrifice","Love","Tradition","Responsibility","Romance","Comedy","Unity","ChangeSalman Khan","Pooja Hegde","Venkatesh","Salman Khan"],"original_title":"Kisi Ka Bhai Kisi Ki Jaan","asset_type":10,"image":{"cover":"","list":"ZeeCinemaHDKisiKaBhaiKisiKiJaan1509528267f74f3539842a9bca9824e8c8768b3","in__cover":"","in__list":""},"description":"Bhaijaan, the eldest brother of three siblings, refuses to get married to maintain harmony in his family. However, complications arise after his brothers conspire for him to fall in love.","start_time":"2026-04-26T11:50:00Z","end_time":"2026-04-26T14:25:00Z","list_image":"ZeeCinemaHDKisiKaBhaiKisiKiJaan1509528267f74f3539842a9bca9824e8c8768b3.jpg","licensing":{"licensing_periods":[]},"channel":{"id":"0-9-zeecinemahd"},"languages":["hi"],"audio_languages":["hi"],"genres":[{"id":"Film","value":"Film"}]},{"id":"0-10-CHN-007790000-20260426195500","title":"Raid 2","actors":[],"duration":150,"tags":["corruption","truth","power","justice","deceptionAjay Devgn","Riteish Deshmukh","Vaani Kapoor","Saurabh Shukla.","Abhishek Pathak","Kumar Mangat Pathak","Bhushan Kumar","Pragya Singh","Krishan Kumar"],"original_title":"Raid 2","asset_type":10,"image":{"cover":"","list":"ZeeCinemaHDRaid219662512c969bdde5d94e64ba433e53d981da18","in__cover":"","in__list":""},"description":"Amay Patnaik, an Income Tax officer, uncovers corruption tied to Dada Bhai. He battles deceit and power, seeking justice in a dangerous political web.","start_time":"2026-04-26T14:25:00Z","end_time":"2026-04-26T16:55:00Z","list_image":"ZeeCinemaHDRaid219662512c969bdde5d94e64ba433e53d981da18.jpg","licensing":{"licensing_periods":[]},"channel":{"id":"0-9-zeecinemahd"},"languages":["hi"],"audio_languages":["hi"],"genres":[{"id":"Film","value":"Film"}]},{"id":"0-10-CHN-007790000-20260426222500","title":"Sooryavanshi","actors":[],"duration":143,"tags":["Terrorism","Mumbai","ATS","RDX","Conspiracy","Hunt","Action","Thriller","Akshay Kumar","Katrina Kaif","Jackie Shroff","Jaaved JaaferiAkshay Kumar","Katrina Kaif","Jackie Shroff","Ajay Devgan","Ranveer Singh","Hiroo Yash Johar","Karan Johar","Apoorva Mehta","Rohit Shetty"],"original_title":"Sooryavanshi","asset_type":10,"image":{"cover":"","list":"ZeeCinemaHDSooryavanshi13023739c3a165ee1bd4061abdecdce321d93ca","in__cover":"","in__list":""},"description":"In 'Sooryavanshi,' our hero chases down terrorists who have gone missing with a dangerous stash of RDX, navigating intense action and suspense to keep the world safe.","start_time":"2026-04-26T16:55:00Z","end_time":"2026-04-26T19:18:00Z","list_image":"ZeeCinemaHDSooryavanshi13023739c3a165ee1bd4061abdecdce321d93ca.jpg","licensing":{"licensing_periods":[]},"channel":{"id":"0-9-zeecinemahd"},"languages":["hi"],"audio_languages":["hi"],"genres":[{"id":"Film","value":"Film"}]}]}]} diff --git a/sites/zee5.com/readme.md b/sites/zee5.com/readme.md new file mode 100644 index 000000000..64f1b59c2 --- /dev/null +++ b/sites/zee5.com/readme.md @@ -0,0 +1,21 @@ +# zee5.com + +https://zee5.com/tvguide + +### Download the guide + +```sh +npm run grab --- --site=zee5.com +``` + +### Update channel list + +```sh +npm run channels:parse --- --config=./sites/zee5.com/zee5.com.config.js --output=./sites/zee5.com/zee5.com.channels.xml +``` + +### Test + +```sh +npm test --- zee5.com +``` diff --git a/sites/zee5.com/zee5.com.channels.xml b/sites/zee5.com/zee5.com.channels.xml new file mode 100644 index 000000000..d1d7573b7 --- /dev/null +++ b/sites/zee5.com/zee5.com.channels.xml @@ -0,0 +1,118 @@ + + + &flix HD + &Pictures + &Pictures HD + &TV HD + &TV HD + &TV HD USA + &xplorHD + Aaj Tak + Anmol Cinema + Anmol Cinema 2 + Anmol TV + Asianet News + Big Magic + Dagdusheth Halwai Ganpati Mandir + Good News Today + Great! Movies + Great! Mystery + Great! Romance + India Today + Iskon Vrindavan + Kashi Vishwanath + Ma Naina Devi + Mahavir Mandir Patna + NDTV 24x7 + NDTV India + NDTV Marathi + NDTV Profit + News 9 + Patna Sahib + Polimer News + POP + POP UP + Sai Baba, Shirdi + Salaam TV + Shree Naga Sai Temple - Coimbatore + Somnath Temple + Suvarna News + Tiny Pop + TV9 Bangla + TV9 Bharatvarsh + TV9 Gujarati + TV9 Kannada + TV9 Marathi + TV9 Telugu + WION + Zee 24 Ghanta + Zee 24 Kalak + Zee 24 Taas + Zee Action + Zee Aflam + Zee Aflam HD + Zee Alwan + Zee Alwan HD + Zee Bangla + Zee Bangla HD + Zee Bangla International + Zee Bangla Sonar + Zee Bharat + Zee Bihar Jharkhand + Zee Bioskop + Zee Biskope + Zee Bollywood + Zee Business + Zee Café HD + Zee Cinema + Zee Cinema HD + Zee Cinema ME + Zee Cinema UK + Zee Cinema USA + Zee Cinemalu + Zee Cinemalu HD + Zee Classic + Zee Delhi NCR Haryana + Zee Kannada + Zee Kannada HD + Zee Keralam HD + Zee Madhya Pradesh Chhattisgarh + Zee Marathi + Zee Marathi HD + Zee Marathi USA + Zee News + Zee News Kannada + ZEE News Malayalam + ZEE News Tamil + Zee News Telugu + Zee News Uttar Pradesh Uttrakhand + Zee One + Zee One French + Zee One German + Zee Power HD + Zee Punjab Haryana Himachal Pradesh + Zee Punjabi + Zee Rajasthan News + Zee Sarthak + Zee Talkies + Zee Talkies HD + Zee Tamil + Zee Tamil HD + Zee Tamil HD APAC + Zee Telugu + Zee Telugu HD + Zee Thirai HD + Zee TV + Zee TV APAC HD + Zee TV DE + Zee TV HD + Zee TV HD Canada + Zee TV HD UK + Zee TV HD USA + Zee TV ME + Zee TV USA + Zee Yuva + Zee Zest HD + Zing + Zing USA + diff --git a/sites/zee5.com/zee5.com.config.js b/sites/zee5.com/zee5.com.config.js new file mode 100644 index 000000000..14029f8b5 --- /dev/null +++ b/sites/zee5.com/zee5.com.config.js @@ -0,0 +1,80 @@ +const axios = require('axios') +const dayjs = require('dayjs') +const utc = require('dayjs/plugin/utc') +const timezone = require('dayjs/plugin/timezone') + +dayjs.extend(utc) +dayjs.extend(timezone) + +module.exports = { + site: 'zee5.com', + days: 2, // max 7 days to the past/future + request: { + cache: { + ttl: 60 * 60 * 1000 + }, + headers: { + 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Safari/537.36 Edg/142.0.0.0', + 'Referer': 'https://www.zee5.com/' + } + }, + url: function ({ channel, date }) { + // start=0 (Today), start=1 (Tomorrow) + const today = dayjs.tz(new Date(), 'Asia/Kolkata').startOf('day') + const requestedDate = dayjs.tz(date, 'Asia/Kolkata').startOf('day') + + const diff = requestedDate.diff(today, 'day') + + return `https://gwapi.zee5.com/v1/epg?channels=${channel.site_id}&start=${diff}&end=${diff}&page_size=500` + }, + parser: function ({ content }) { + let programs = [] + + if (!content) return programs + + try { + const json = JSON.parse(content) + + const channelList = json.items ? json.items : (Array.isArray(json) ? json : [json]) + + const channelPrograms = channelList[0] && channelList[0].items ? channelList[0].items : [] + + channelPrograms.forEach(program => { + programs.push({ + title: program.title, + description: program.description || program.list_image_description || null, + start: dayjs(program.start_time), + stop: dayjs(program.end_time), + image: (program.image && program.image.list ? `https://akamaividz2.zee5.com/image/upload/resources/${program.id}/list/${program.image.list}.jpg` : program.list_image) || null, + category: program.genres && program.genres.length ? program.genres.map(g => g.value) : null, + lang: program.languages && program.languages.length ? program.languages : null + }) + }) + + } catch (e) { + console.error('Error parsing programs:', e) + return programs + } + + return programs + }, + + + async channels() { + try { + const url = 'https://catalogapi.zee5.com/v1/channel?page=1&page_size=500' + const response = await axios.get(url) + const items = response.data.items || [] + + return items.map(item => ({ + lang: 'en', + site_id: item.id, + name: item.title, + logo: item.list_image ? `https://akamaividz2.zee5.com/image/upload/resources/${item.id}/channel_list/${item.list_image}` : null + })) + } catch (error) { + console.error('Error fetching channels:', error.message) + return [] + } + } +} diff --git a/sites/zee5.com/zee5.com.test.js b/sites/zee5.com/zee5.com.test.js new file mode 100644 index 000000000..b470ba782 --- /dev/null +++ b/sites/zee5.com/zee5.com.test.js @@ -0,0 +1,67 @@ +const { parser, url, channels } = require('./zee5.com.config.js') +const axios = require('axios') +const fs = require('fs') +const path = require('path') +const dayjs = require('dayjs') +const utc = require('dayjs/plugin/utc') +const timezone = require('dayjs/plugin/timezone') + +dayjs.extend(utc) +dayjs.extend(timezone) + +jest.mock('axios') + +const date = dayjs.tz('2025-12-02', 'Asia/Kolkata').startOf('d') +const channel = { site_id: '0-9-zeecinema', xmltv_id: 'ZeeCinema.in' } + +it('can generate valid url', () => { + const result = url({ channel, date }) + expect(result).toMatch('https://gwapi.zee5.com/v1/epg') + expect(result).toMatch('channels=0-9-zeecinema') +}) + +it('can parse response', () => { + const content = fs.readFileSync(path.resolve(__dirname, '__data__/content.json'), 'utf8') + const result = parser({ content }) + + expect(result.length).toBe(9) + expect(result[0]).toMatchObject( + { + title: 'Tamilarasan', + description: 'An officer seizes control of a hospital, defying orders, which sparks a fierce conflict. His rebellion sets off a chain of events that could lead to a dramatic clash with authorities.', + start: dayjs('2026-04-25T20:03:00Z'), + stop: dayjs('2026-04-25T22:03:00Z'), + image: 'https://akamaividz2.zee5.com/image/upload/resources/0-10-CHN-007790000-20260426013300/list/ZeeCinemaHDTamilarasan1567745cf08a3ba1a9946d890a2f523ab71f38e.jpg', + category: ['Film'], + lang: ['hi'] + } + ) +}) + +it('can handle empty guide', () => { + const result = parser({ content: '[]' }) + expect(result).toMatchObject([]) +}) + +it('can parse channel list', async () => { + axios.get.mockResolvedValue({ + data: { + items: [ + { + id: '0-9-channel_1643519345', + title: 'Zing USA', + list_image: '1920x1080listclean721faf534a79451fa714b25d2102de48.png' + } + ] + } + }) + + const result = await channels() + expect(result.length).toBe(1) + expect(result[0]).toMatchObject({ + lang: 'en', + site_id: '0-9-channel_1643519345', + name: 'Zing USA', + logo: 'https://akamaividz2.zee5.com/image/upload/resources/0-9-channel_1643519345/channel_list/1920x1080listclean721faf534a79451fa714b25d2102de48.png' + }) +}) diff --git a/tests/__data__/expected/sites_update/SITES.md b/tests/__data__/expected/sites_update/SITES.md index dce09dcf8..ffde517b3 100644 --- a/tests/__data__/expected/sites_update/SITES.md +++ b/tests/__data__/expected/sites_update/SITES.md @@ -1,12 +1,12 @@ -# Sites - - - - - - - - - - -
SiteChannels
(total / with xmltv-id)
StatusNotes
iltalehti.fi14244🟡https://github.com/iptv-org/epg/issues/2396
indihometv.com130124🟢
kan.org.il66🔴https://github.com/iptv-org/epg/issues/2273
+# Sites + + + + + + + + + + +
SiteChannelsStatusNotes
iltalehti.fi142🟡https://github.com/iptv-org/epg/issues/2396
indihometv.com130🟢
kan.org.il3🔴https://github.com/iptv-org/epg/issues/2273