Update cubmu.com api and channels.

Signed-off-by: Toha <tohenk@yahoo.com>
This commit is contained in:
Toha
2026-04-26 22:00:38 +07:00
parent 0092154ab6
commit 4700706fec
7 changed files with 507 additions and 270 deletions

View File

@@ -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"}]}
{
"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"
}

View File

@@ -0,0 +1,79 @@
<?xml version="1.0" encoding="UTF-8"?>
<channels>
<channel site="cubmu.com" site_id="185" lang="id" xmltv_id="">Movies News</channel>
<channel site="cubmu.com" site_id="203" lang="id" xmltv_id="">Golf Plus ID</channel>
<channel site="cubmu.com" site_id="205" lang="id" xmltv_id="">Knowledge+</channel>
<channel site="cubmu.com" site_id="248" lang="id" xmltv_id="">Cartoon TV Premium</channel>
<channel site="cubmu.com" site_id="249" lang="id" xmltv_id="">Cartoon TV</channel>
<channel site="cubmu.com" site_id="250" lang="id" xmltv_id="">Cartoon TV Classic</channel>
<channel site="cubmu.com" site_id="252" lang="id" xmltv_id="">Football TV</channel>
<channel site="cubmu.com" site_id="253" lang="id" xmltv_id="">Sports TV</channel>
<channel site="cubmu.com" site_id="254" lang="id" xmltv_id="">Xtrem Sports</channel>
<channel site="cubmu.com" site_id="255" lang="id" xmltv_id="">Speed TV</channel>
<channel site="cubmu.com" site_id="274" lang="id" xmltv_id="">Travel TV</channel>
<channel site="cubmu.com" site_id="276" lang="id" xmltv_id="">Cooking TV</channel>
<channel site="cubmu.com" site_id="277" lang="id" xmltv_id="">Gaming TV</channel>
<channel site="cubmu.com" site_id="281" lang="id" xmltv_id="">Song TV</channel>
<channel site="cubmu.com" site_id="238" lang="id" xmltv_id="ABCAustralia.au@SD">ABC Australia</channel>
<channel site="cubmu.com" site_id="197" lang="id" xmltv_id="AlJazeera.qa@Arabic">Al Jazeera</channel>
<channel site="cubmu.com" site_id="364" lang="id" xmltv_id="ANTV.id@SD">ANTV</channel>
<channel site="cubmu.com" site_id="261" lang="id" xmltv_id="ArirangTV.kr@SD">Arirang</channel>
<channel site="cubmu.com" site_id="214" lang="id" xmltv_id="BeritaSatu.id@SD">Berita Satu</channel>
<channel site="cubmu.com" site_id="230" lang="id" xmltv_id="BioskopIndonesia.id@SD">Bioskop Indonesia</channel>
<channel site="cubmu.com" site_id="245" lang="id" xmltv_id="BTV.id@SD">BTV</channel>
<channel site="cubmu.com" site_id="266" lang="id" xmltv_id="CCTV4Asia.cn@SD">CCTV4</channel>
<channel site="cubmu.com" site_id="229" lang="id" xmltv_id="CelestialMoviesIndonesia.id@SD">Celestial Movies</channel>
<channel site="cubmu.com" site_id="259" lang="id" xmltv_id="CGTN.cn@SD">CGTN</channel>
<channel site="cubmu.com" site_id="234" lang="id" xmltv_id="CGTNDocumentary.cn@SD">CGTN Documentary</channel>
<channel site="cubmu.com" site_id="247" lang="id" xmltv_id="ChannelJowo.id@SD">Channel Jowo</channel>
<channel site="cubmu.com" site_id="209" lang="id" xmltv_id="CNA.sg@SD">Channel NewsAsia</channel>
<channel site="cubmu.com" site_id="237" lang="id" xmltv_id="CNBCAsia.sg@SD">CNBC Asia</channel>
<channel site="cubmu.com" site_id="213" lang="id" xmltv_id="CNBCIndonesia.id@SD">CNBC Indonesia</channel>
<channel site="cubmu.com" site_id="212" lang="id" xmltv_id="CNNIndonesia.id@SD">CNN Indonesia</channel>
<channel site="cubmu.com" site_id="241" lang="id" xmltv_id="DAAITV.id@SD">DAAI TV</channel>
<channel site="cubmu.com" site_id="244" lang="id" xmltv_id="DaystarTV.us">DayStar</channel>
<channel site="cubmu.com" site_id="278" lang="id" xmltv_id="DensFoodChannel.id@SD">DENS Food Channel</channel>
<channel site="cubmu.com" site_id="279" lang="id" xmltv_id="DensPlay.id@SD">DENS Play Channel</channel>
<channel site="cubmu.com" site_id="280" lang="id" xmltv_id="DensShowBiz.id@SD">DENS Show Bizz</channel>
<channel site="cubmu.com" site_id="186" lang="id" xmltv_id="DuniaAnak.id@SD">Dunia Anak</channel>
<channel site="cubmu.com" site_id="265" lang="id" xmltv_id="DuniaLain.id@SD">Dunia Lain</channel>
<channel site="cubmu.com" site_id="208" lang="id" xmltv_id="EatNGo.id@SD">Eat N Go</channel>
<channel site="cubmu.com" site_id="199" lang="id" xmltv_id="EuronewsEnglish.fr@SD">Euronews</channel>
<channel site="cubmu.com" site_id="196" lang="id" xmltv_id="FashionTVAsia.fr@SD">Fashion TV</channel>
<channel site="cubmu.com" site_id="256" lang="id" xmltv_id="Fight.us@SD">Fight TV Premium</channel>
<channel site="cubmu.com" site_id="258" lang="id" xmltv_id="France24.fr@English">France 24</channel>
<channel site="cubmu.com" site_id="219" lang="id" xmltv_id="GarudaTV.id@SD">Garuda TV</channel>
<channel site="cubmu.com" site_id="218" lang="id" xmltv_id="GTV.id@SD">GTV</channel>
<channel site="cubmu.com" site_id="216" lang="id" xmltv_id="Indosiar.id@SD">Indosiar</channel>
<channel site="cubmu.com" site_id="243" lang="id" xmltv_id="JakTV.id@SD">JakTV</channel>
<channel site="cubmu.com" site_id="284" lang="id" xmltv_id="JTV.id@SD">jtv</channel>
<channel site="cubmu.com" site_id="200" lang="id" xmltv_id="Khazanah.id@SD">Khazanah</channel>
<channel site="cubmu.com" site_id="220" lang="id" xmltv_id="KompasTV.id@SD">Kompas TV</channel>
<channel site="cubmu.com" site_id="221" lang="id" xmltv_id="MDTV.id@SD">MDTV</channel>
<channel site="cubmu.com" site_id="211" lang="id" xmltv_id="MetroTV.id@SD">MetroTV</channel>
<channel site="cubmu.com" site_id="222" lang="id" xmltv_id="MNCTV.id@SD">MNC TV</channel>
<channel site="cubmu.com" site_id="195" lang="id" xmltv_id="MusikIndonesia.id@SD">Musik Indonesia</channel>
<channel site="cubmu.com" site_id="240" lang="id" xmltv_id="NabawiTV.id@SD">Nabawi TV</channel>
<channel site="cubmu.com" site_id="236" lang="id" xmltv_id="NHKWorldPremium.jp@SD">NHK World Premium</channel>
<channel site="cubmu.com" site_id="263" lang="id" xmltv_id="nsert.id@SD">!nsert</channel>
<channel site="cubmu.com" site_id="268" lang="id" xmltv_id="OneTV.in@SD">One TV</channel>
<channel site="cubmu.com" site_id="242" lang="id" xmltv_id="PijarTV.id@SD">Pijar TV</channel>
<channel site="cubmu.com" site_id="257" lang="id" xmltv_id="PSJTV.id@SD">PSJ TV</channel>
<channel site="cubmu.com" site_id="204" lang="id" xmltv_id="QuranTV.sa@SD">Al Quran Al Kareem</channel>
<channel site="cubmu.com" site_id="246" lang="id" xmltv_id="RajawaliTV.id@SD">Rtv</channel>
<channel site="cubmu.com" site_id="217" lang="id" xmltv_id="RCTI.id@SD">RCTI</channel>
<channel site="cubmu.com" site_id="260" lang="id" xmltv_id="RT.ru@SD">Russia Today</channel>
<channel site="cubmu.com" site_id="215" lang="id" xmltv_id="SCTV.id@SD">SCTV</channel>
<channel site="cubmu.com" site_id="251" lang="id" xmltv_id="SuperyachtTV.mc@SD">Superyacht TV</channel>
<channel site="cubmu.com" site_id="232" lang="id" xmltv_id="Thrill.hk@SD">Thrill</channel>
<channel site="cubmu.com" site_id="201" lang="id" xmltv_id="Trans7.id@SD">Trans 7</channel>
<channel site="cubmu.com" site_id="210" lang="id" xmltv_id="TransTV.id@SD">Trans TV</channel>
<channel site="cubmu.com" site_id="267" lang="id" xmltv_id="TV5MondeAsia.fr@SD">TV5 Monde</channel>
<channel site="cubmu.com" site_id="239" lang="id" xmltv_id="TV9Nusantara.id@SD">TV9</channel>
<channel site="cubmu.com" site_id="187" lang="id" xmltv_id="TVMu.id@SD">tvMU</channel>
<channel site="cubmu.com" site_id="194" lang="id" xmltv_id="tvNAsia.hk@SD">tVN</channel>
<channel site="cubmu.com" site_id="227" lang="id" xmltv_id="tvNMoviesAsia.hk@SD">TVN Movies</channel>
<channel site="cubmu.com" site_id="363" lang="id" xmltv_id="tvOne.id@SD">TVOne</channel>
<channel site="cubmu.com" site_id="223" lang="id" xmltv_id="TVRI.id@SD">TVRI</channel>
<channel site="cubmu.com" site_id="283" lang="id" xmltv_id="WION.in@SD">Wion TV</channel>
</channels>

View File

@@ -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}`
)}`
},
request: {
async headers() {
await fetchAccessToken()
return {
Authorization: `Bearer ${accessToken}`,
...headers,
}
}
},
parser({ content, channel }) {
const programs = []
const items = parseItems(content)
items.forEach(item => {
if (content && typeof content === 'string') {
content = JSON.parse(content)
}
if (Array.isArray(content?.data)) {
content.data.forEach(item => {
programs.push({
title: parseTitle(item),
description: parseDescription(item, channel.lang),
episode: parseEpisode(item),
start: parseStart(item).toISOString(),
stop: parseStop(item).toISOString()
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 = {
.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: {
Origin: 'https://cubmu.com',
Referer: 'https://cubmu.com/live-tv'
Authorization: `Bearer ${accessToken}`,
...headers,
}
}
// 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)
})
.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)
if (Array.isArray(result?.data?.items)) {
result.data.items.forEach(channel => {
channels.push({
lang,
site_id: channel.id,
name: channel.name
})
}
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}!`);
}
}

View File

@@ -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', () => {

View File

@@ -1,73 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<channels>
<channel site="cubmu.com" site_id="4028c6857e04fca5017ec407d96b7362" lang="en" xmltv_id="JTV.id@SD">jtv</channel>
<channel site="cubmu.com" site_id="4028c6857e04fca5017ec528dc550e98" lang="en" xmltv_id="MusikIndonesia.id@SD">Musik Indonesia</channel>
<channel site="cubmu.com" site_id="4028c6857e04fca5017f310a21613e4e" lang="en" xmltv_id="EuronewsEnglish.fr@SD">Euronews</channel>
<channel site="cubmu.com" site_id="4028c6857f48ecd2017f5e9c23f413e8" lang="en" xmltv_id="WION.in@SD">Wion TV</channel>
<channel site="cubmu.com" site_id="4028c6857f48ecd2017f5e95744613e2" lang="en" xmltv_id="CCTV4Asia.cn@SD">CCTV 4</channel>
<channel site="cubmu.com" site_id="4028c6857fe540a1018060a0c34340b6" lang="en" xmltv_id="Fight.us@SD">Fight TV Premium</channel>
<channel site="cubmu.com" site_id="4028c6857fe540a1018060a4379740b7" lang="en" xmltv_id="">Xtrem Sports</channel>
<channel site="cubmu.com" site_id="4028c6857fe540a1018060aab83c40b9" lang="en" xmltv_id="">Travel TV</channel>
<channel site="cubmu.com" site_id="4028c6857fe540a1018060ac364140ba" lang="en" xmltv_id="FashionTVAsia.fr@SD">Fashion TV</channel>
<channel site="cubmu.com" site_id="4028c6857fe540a1018060ae0aa740bb" lang="en" xmltv_id="">Movies News</channel>
<channel site="cubmu.com" site_id="4028c6857fe540a1018060afdef540bc" lang="en" xmltv_id="">Sports TV</channel>
<channel site="cubmu.com" site_id="4028c6857fe540a1018060b4163a40be" lang="en" xmltv_id="SuperyachtTV.mc@SD">SuperYacht TV</channel>
<channel site="cubmu.com" site_id="4028c6857fe540a1018060b2307340bd" lang="en" xmltv_id="">Speed TV</channel>
<channel site="cubmu.com" site_id="4028c6858d6351f0018dc0100d513246" lang="en" xmltv_id="PSJTV.id@SD">PSJ TV</channel>
<channel site="cubmu.com" site_id="4028c6858f902547018fccae36ec12b0" lang="en" xmltv_id="DensFoodChannel.id@SD">DENS Food Channel</channel>
<channel site="cubmu.com" site_id="4028c6858f902547018fccb15a5212b1" lang="en" xmltv_id="DensPlay.id@SD">DENS PLAY Channel</channel>
<channel site="cubmu.com" site_id="4028c6858f902547018fccb23c8c12b2" lang="en" xmltv_id="DensShowBiz.id@SD">DENS ShowBiz</channel>
<channel site="cubmu.com" site_id="4028c68574f658b101750667e76e5415" lang="en" xmltv_id="TV9Nusantara.id@SD">TV9</channel>
<channel site="cubmu.com" site_id="4028c68574f658b1017506651f835414" lang="en" xmltv_id="TVMu.id@SD">tv Mu</channel>
<channel site="cubmu.com" site_id="4028c68574f658b1017506741c665418" lang="en" xmltv_id="PijarTV.id@SD">Pijar TV</channel>
<channel site="cubmu.com" site_id="4028c68574f658b101750641670b540e" lang="en" xmltv_id="QuranTV.sa@SD">Al Quran Al Kareem</channel>
<channel site="cubmu.com" site_id="4028c68588e2da5a01892e47e9d64b5e" lang="en" xmltv_id="NabawiTV.id@SD">Nabawi TV</channel>
<channel site="cubmu.com" site_id="4028c685758bcfff01776c4ea3520a72" lang="en" xmltv_id="NET.id@SD">MDTV</channel>
<channel site="cubmu.com" site_id="4028c685840ff0490184616d5ba53e65" lang="en" xmltv_id="">Song TV</channel>
<channel site="cubmu.com" site_id="4028c685840ff04901846166f4d93e5e" lang="en" xmltv_id="">Cartoon TV Classics</channel>
<channel site="cubmu.com" site_id="4028c685840ff04901846166123a3e5d" lang="en" xmltv_id="OneTV.in@SD">One TV</channel>
<channel site="cubmu.com" site_id="4028c685910daca60191a8636d706700" lang="en" xmltv_id="ChannelJowo.id@SD">Channel Jowo</channel>
<channel site="cubmu.com" site_id="4028c6858262bb8001827b6a98a62be4" lang="en" xmltv_id="">Cooking TV</channel>
<channel site="cubmu.com" site_id="4028c6858262bb8001827b64d0742be1" lang="en" xmltv_id="">Cartoon TV Premium</channel>
<channel site="cubmu.com" site_id="4028c6858262bb8001827b65fa882be2" lang="en" xmltv_id="">Cartoon TV</channel>
<channel site="cubmu.com" site_id="4028c6858262bb8001827b703a262be7" lang="en" xmltv_id="">Football TV</channel>
<channel site="cubmu.com" site_id="4028c6858262bb8001827b6764522be3" lang="en" xmltv_id="">Knowledge+</channel>
<channel site="cubmu.com" site_id="4028c6859645ee4801965cd2114b4431" lang="en" xmltv_id="">Berita Satu</channel>
<channel site="cubmu.com" site_id="4028c6859645ee4801965cf074994bf2" lang="en" xmltv_id="">Garuda TV</channel>
<channel site="cubmu.com" site_id="4028c68574537fcd0174bdfa7e13514f" lang="en" xmltv_id="CNA.sg@SD">CNA</channel>
<channel site="cubmu.com" site_id="4028c68574537fcd0174bdfe22ee5150" lang="en" xmltv_id="AlJazeera.qa@Arabic">Al Jazeera</channel>
<channel site="cubmu.com" site_id="4028c68574537fcd0174be0c2f975152" lang="en" xmltv_id="France24.fr@English">France 24</channel>
<channel site="cubmu.com" site_id="4028c68574537fcd0174be1c9566571f" lang="en" xmltv_id="ArirangTV.kr@SD">Arirang</channel>
<channel site="cubmu.com" site_id="4028c68574537fcd0174be1f09275720" lang="en" xmltv_id="DuniaAnak.id@SD">Dunia Anak</channel>
<channel site="cubmu.com" site_id="4028c68574537fcd0174be2b660c5727" lang="en" xmltv_id="SeruChannel.id@SD">Channel Seru!</channel>
<channel site="cubmu.com" site_id="4028c68574537fcd0174be2db0a25728" lang="en" xmltv_id="DuniaLain.id@SD">Dunia Lain</channel>
<channel site="cubmu.com" site_id="4028c68574537fcd0174be3b835358d5" lang="en" xmltv_id="ABCAustralia.au@SD">ABC Australia</channel>
<channel site="cubmu.com" site_id="4028c68574537fcd0174be3daa5c58d6" lang="en" xmltv_id="EatNGo.id@SD">Eat N Go</channel>
<channel site="cubmu.com" site_id="4028c68574537fcd0174be3fbd2f58d7" lang="en" xmltv_id="Khazanah.id@SD">Khazanah</channel>
<channel site="cubmu.com" site_id="4028c68574537fcd0174be4b82c758dc" lang="en" xmltv_id="CNBCIndonesia.id@SD">CNBC Indonesia</channel>
<channel site="cubmu.com" site_id="4028c68574537fcd0174be4d55ce58dd" lang="en" xmltv_id="SCTV.id@SD">SCTV</channel>
<channel site="cubmu.com" site_id="4028c68574537fcd0174be4f342858e9" lang="en" xmltv_id="Indosiar.id@SD">Indosiar</channel>
<channel site="cubmu.com" site_id="4028c68574537fcd0174be5a48505902" lang="en" xmltv_id="DAAITV.id@SD">DAAI TV</channel>
<channel site="cubmu.com" site_id="4028c68574537fcd0174be5cd0b15903" lang="en" xmltv_id="RajawaliTV.id@SD">rtv</channel>
<channel site="cubmu.com" site_id="4028c68574537fcd0174be5ef52a5904" lang="en" xmltv_id="MNCTV.id@SD">MNC TV</channel>
<channel site="cubmu.com" site_id="4028c68574537fcd0174be21d3755722" lang="en" xmltv_id="LinguaChannel.id@SD">Lingua</channel>
<channel site="cubmu.com" site_id="4028c68574537fcd0174be26e4325724" lang="en" xmltv_id="BioskopIndonesia.id@SD">Bioskop Indonesia</channel>
<channel site="cubmu.com" site_id="4028c68574537fcd0174be52f87b58f2" lang="en" xmltv_id="GTV.id@SD">GTV</channel>
<channel site="cubmu.com" site_id="4028c68574537fcd0174be56c7d858fd" lang="en" xmltv_id="BTV.id@SD">BTV</channel>
<channel site="cubmu.com" site_id="4028c68574537fcd0174be167d8a571e" lang="en" xmltv_id="RT.ru@SD">Russia Today</channel>
<channel site="cubmu.com" site_id="4028c68574537fcd0174be292d655725" lang="en" xmltv_id="nsert.id@SD">!nsert</channel>
<channel site="cubmu.com" site_id="4028c68574537fcd0174be4783ff58da" lang="en" xmltv_id="MetroTV.id@SD">MetroTV</channel>
<channel site="cubmu.com" site_id="4028c68574537fcd0174be4997e958db" lang="en" xmltv_id="CNNIndonesia.id@SD">CNN Indonesia</channel>
<channel site="cubmu.com" site_id="4028c68574537fcd0174be6135dc5905" lang="en" xmltv_id="">TVRI</channel>
<channel site="cubmu.com" site_id="4028c68574537fcd0174be13661a571d" lang="en" xmltv_id="CGTN.cn@SD">CGTN</channel>
<channel site="cubmu.com" site_id="4028c68574537fcd0174be51092e58f1" lang="en" xmltv_id="RCTI.id@SD">RCTI</channel>
<channel site="cubmu.com" site_id="4028c68574537fcd0174be55099d58fa" lang="en" xmltv_id="JakTV.id@SD">Jak tv</channel>
<channel site="cubmu.com" site_id="4028c68574537fcd0174be58644c5901" lang="en" xmltv_id="KompasTV.id@SD">Kompas TV</channel>
<channel site="cubmu.com" site_id="4028c68574537fcd0174be39494458d4" lang="en" xmltv_id="TV5MondeAsia.fr@SD">TV5 Monde</channel>
<channel site="cubmu.com" site_id="4028c68574537fcd0174be43042758d8" lang="en" xmltv_id="TransTV.id@SD">Trans TV</channel>
<channel site="cubmu.com" site_id="4028c68574537fcd0174be45631158d9" lang="en" xmltv_id="Trans7.id@SD">Trans 7</channel>
<channel site="cubmu.com" site_id="4028c68574537fcd0174be2463495723" lang="en" xmltv_id="CGTNDocumentary.cn@SD">CGTN Documentary</channel>
<channel site="cubmu.com" site_id="4028c68598610fad01987a41012571f7" lang="en" xmltv_id="">LPS Financial Festival 2025</channel>
<channel site="cubmu.com" site_id="4028c68598610fad0198875a95322b98" lang="en" xmltv_id="">GOLF PLUS ID</channel>
<channel site="cubmu.com" site_id="4028c6858119921801816b5359d15e63" lang="en" xmltv_id="">Gaming TV</channel>
</channels>

View File

@@ -1,73 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<channels>
<channel site="cubmu.com" site_id="4028c6857e04fca5017ec407d96b7362" lang="id" xmltv_id="JTV.id@SD">jtv</channel>
<channel site="cubmu.com" site_id="4028c6857e04fca5017ec528dc550e98" lang="id" xmltv_id="MusikIndonesia.id@SD">Musik Indonesia</channel>
<channel site="cubmu.com" site_id="4028c6857e04fca5017f310a21613e4e" lang="id" xmltv_id="EuronewsEnglish.fr@SD">Euronews</channel>
<channel site="cubmu.com" site_id="4028c6857f48ecd2017f5e9c23f413e8" lang="id" xmltv_id="WION.in@SD">Wion TV</channel>
<channel site="cubmu.com" site_id="4028c6857f48ecd2017f5e95744613e2" lang="id" xmltv_id="CCTV4Asia.cn@SD">CCTV 4</channel>
<channel site="cubmu.com" site_id="4028c6857fe540a1018060a0c34340b6" lang="id" xmltv_id="Fight.us@SD">Fight TV Premium</channel>
<channel site="cubmu.com" site_id="4028c6857fe540a1018060a4379740b7" lang="id" xmltv_id="">Xtrem Sports</channel>
<channel site="cubmu.com" site_id="4028c6857fe540a1018060aab83c40b9" lang="id" xmltv_id="">Travel TV</channel>
<channel site="cubmu.com" site_id="4028c6857fe540a1018060ac364140ba" lang="id" xmltv_id="FashionTVAsia.fr@SD">Fashion TV</channel>
<channel site="cubmu.com" site_id="4028c6857fe540a1018060ae0aa740bb" lang="id" xmltv_id="">Movies News</channel>
<channel site="cubmu.com" site_id="4028c6857fe540a1018060afdef540bc" lang="id" xmltv_id="">Sports TV</channel>
<channel site="cubmu.com" site_id="4028c6857fe540a1018060b4163a40be" lang="id" xmltv_id="SuperyachtTV.mc@SD">SuperYacht TV</channel>
<channel site="cubmu.com" site_id="4028c6857fe540a1018060b2307340bd" lang="id" xmltv_id="">Speed TV</channel>
<channel site="cubmu.com" site_id="4028c6858d6351f0018dc0100d513246" lang="id" xmltv_id="PSJTV.id@SD">PSJ TV</channel>
<channel site="cubmu.com" site_id="4028c6858f902547018fccae36ec12b0" lang="id" xmltv_id="DensFoodChannel.id@SD">DENS Food Channel</channel>
<channel site="cubmu.com" site_id="4028c6858f902547018fccb15a5212b1" lang="id" xmltv_id="DensPlay.id@SD">DENS PLAY Channel</channel>
<channel site="cubmu.com" site_id="4028c6858f902547018fccb23c8c12b2" lang="id" xmltv_id="DensShowBiz.id@SD">DENS ShowBiz</channel>
<channel site="cubmu.com" site_id="4028c68574f658b101750667e76e5415" lang="id" xmltv_id="TV9Nusantara.id@SD">TV9</channel>
<channel site="cubmu.com" site_id="4028c68574f658b1017506651f835414" lang="id" xmltv_id="TVMu.id@SD">tv Mu</channel>
<channel site="cubmu.com" site_id="4028c68574f658b1017506741c665418" lang="id" xmltv_id="PijarTV.id@SD">Pijar TV</channel>
<channel site="cubmu.com" site_id="4028c68574f658b101750641670b540e" lang="id" xmltv_id="QuranTV.sa@SD">Al Quran Al Kareem</channel>
<channel site="cubmu.com" site_id="4028c68588e2da5a01892e47e9d64b5e" lang="id" xmltv_id="NabawiTV.id@SD">Nabawi TV</channel>
<channel site="cubmu.com" site_id="4028c685758bcfff01776c4ea3520a72" lang="id" xmltv_id="NET.id@SD">MDTV</channel>
<channel site="cubmu.com" site_id="4028c685840ff0490184616d5ba53e65" lang="id" xmltv_id="">Song TV</channel>
<channel site="cubmu.com" site_id="4028c685840ff04901846166f4d93e5e" lang="id" xmltv_id="">Cartoon TV Classics</channel>
<channel site="cubmu.com" site_id="4028c685840ff04901846166123a3e5d" lang="id" xmltv_id="OneTV.in@SD">One TV</channel>
<channel site="cubmu.com" site_id="4028c685910daca60191a8636d706700" lang="id" xmltv_id="ChannelJowo.id@SD">Channel Jowo</channel>
<channel site="cubmu.com" site_id="4028c6858262bb8001827b6a98a62be4" lang="id" xmltv_id="">Cooking TV</channel>
<channel site="cubmu.com" site_id="4028c6858262bb8001827b64d0742be1" lang="id" xmltv_id="">Cartoon TV Premium</channel>
<channel site="cubmu.com" site_id="4028c6858262bb8001827b65fa882be2" lang="id" xmltv_id="">Cartoon TV</channel>
<channel site="cubmu.com" site_id="4028c6858262bb8001827b703a262be7" lang="id" xmltv_id="">Football TV</channel>
<channel site="cubmu.com" site_id="4028c6858262bb8001827b6764522be3" lang="id" xmltv_id="">Knowledge+</channel>
<channel site="cubmu.com" site_id="4028c6859645ee4801965cd2114b4431" lang="id" xmltv_id="">Berita Satu</channel>
<channel site="cubmu.com" site_id="4028c6859645ee4801965cf074994bf2" lang="id" xmltv_id="">Garuda TV</channel>
<channel site="cubmu.com" site_id="4028c68574537fcd0174bdfa7e13514f" lang="id" xmltv_id="CNA.sg@SD">CNA</channel>
<channel site="cubmu.com" site_id="4028c68574537fcd0174bdfe22ee5150" lang="id" xmltv_id="AlJazeera.qa@Arabic">Al Jazeera</channel>
<channel site="cubmu.com" site_id="4028c68574537fcd0174be0c2f975152" lang="id" xmltv_id="France24.fr@English">France 24</channel>
<channel site="cubmu.com" site_id="4028c68574537fcd0174be1c9566571f" lang="id" xmltv_id="ArirangTV.kr@SD">Arirang</channel>
<channel site="cubmu.com" site_id="4028c68574537fcd0174be1f09275720" lang="id" xmltv_id="DuniaAnak.id@SD">Dunia Anak</channel>
<channel site="cubmu.com" site_id="4028c68574537fcd0174be2b660c5727" lang="id" xmltv_id="SeruChannel.id@SD">Channel Seru!</channel>
<channel site="cubmu.com" site_id="4028c68574537fcd0174be2db0a25728" lang="id" xmltv_id="DuniaLain.id@SD">Dunia Lain</channel>
<channel site="cubmu.com" site_id="4028c68574537fcd0174be3b835358d5" lang="id" xmltv_id="ABCAustralia.au@SD">ABC Australia</channel>
<channel site="cubmu.com" site_id="4028c68574537fcd0174be3daa5c58d6" lang="id" xmltv_id="EatNGo.id@SD">Eat N Go</channel>
<channel site="cubmu.com" site_id="4028c68574537fcd0174be3fbd2f58d7" lang="id" xmltv_id="Khazanah.id@SD">Khazanah</channel>
<channel site="cubmu.com" site_id="4028c68574537fcd0174be4b82c758dc" lang="id" xmltv_id="CNBCIndonesia.id@SD">CNBC Indonesia</channel>
<channel site="cubmu.com" site_id="4028c68574537fcd0174be4d55ce58dd" lang="id" xmltv_id="SCTV.id@SD">SCTV</channel>
<channel site="cubmu.com" site_id="4028c68574537fcd0174be4f342858e9" lang="id" xmltv_id="Indosiar.id@SD">Indosiar</channel>
<channel site="cubmu.com" site_id="4028c68574537fcd0174be5a48505902" lang="id" xmltv_id="DAAITV.id@SD">DAAI TV</channel>
<channel site="cubmu.com" site_id="4028c68574537fcd0174be5cd0b15903" lang="id" xmltv_id="RajawaliTV.id@SD">rtv</channel>
<channel site="cubmu.com" site_id="4028c68574537fcd0174be5ef52a5904" lang="id" xmltv_id="MNCTV.id@SD">MNC TV</channel>
<channel site="cubmu.com" site_id="4028c68574537fcd0174be21d3755722" lang="id" xmltv_id="LinguaChannel.id@SD">Lingua</channel>
<channel site="cubmu.com" site_id="4028c68574537fcd0174be26e4325724" lang="id" xmltv_id="BioskopIndonesia.id@SD">Bioskop Indonesia</channel>
<channel site="cubmu.com" site_id="4028c68574537fcd0174be52f87b58f2" lang="id" xmltv_id="GTV.id@SD">GTV</channel>
<channel site="cubmu.com" site_id="4028c68574537fcd0174be56c7d858fd" lang="id" xmltv_id="BTV.id@SD">BTV</channel>
<channel site="cubmu.com" site_id="4028c68574537fcd0174be167d8a571e" lang="id" xmltv_id="RT.ru@SD">Russia Today</channel>
<channel site="cubmu.com" site_id="4028c68574537fcd0174be292d655725" lang="id" xmltv_id="nsert.id@SD">!nsert</channel>
<channel site="cubmu.com" site_id="4028c68574537fcd0174be4783ff58da" lang="id" xmltv_id="MetroTV.id@SD">MetroTV</channel>
<channel site="cubmu.com" site_id="4028c68574537fcd0174be4997e958db" lang="id" xmltv_id="CNNIndonesia.id@SD">CNN Indonesia</channel>
<channel site="cubmu.com" site_id="4028c68574537fcd0174be6135dc5905" lang="id" xmltv_id="">TVRI</channel>
<channel site="cubmu.com" site_id="4028c68574537fcd0174be13661a571d" lang="id" xmltv_id="CGTN.cn@SD">CGTN</channel>
<channel site="cubmu.com" site_id="4028c68574537fcd0174be51092e58f1" lang="id" xmltv_id="RCTI.id@SD">RCTI</channel>
<channel site="cubmu.com" site_id="4028c68574537fcd0174be55099d58fa" lang="id" xmltv_id="JakTV.id@SD">Jak tv</channel>
<channel site="cubmu.com" site_id="4028c68574537fcd0174be58644c5901" lang="id" xmltv_id="KompasTV.id@SD">Kompas TV</channel>
<channel site="cubmu.com" site_id="4028c68574537fcd0174be39494458d4" lang="id" xmltv_id="TV5MondeAsia.fr@SD">TV5 Monde</channel>
<channel site="cubmu.com" site_id="4028c68574537fcd0174be43042758d8" lang="id" xmltv_id="TransTV.id@SD">Trans TV</channel>
<channel site="cubmu.com" site_id="4028c68574537fcd0174be45631158d9" lang="id" xmltv_id="Trans7.id@SD">Trans 7</channel>
<channel site="cubmu.com" site_id="4028c68574537fcd0174be2463495723" lang="id" xmltv_id="CGTNDocumentary.cn@SD">CGTN Documentary</channel>
<channel site="cubmu.com" site_id="4028c68598610fad01987a41012571f7" lang="id" xmltv_id="">LPS Financial Festival 2025</channel>
<channel site="cubmu.com" site_id="4028c68598610fad0198875a95322b98" lang="id" xmltv_id="">GOLF PLUS ID</channel>
<channel site="cubmu.com" site_id="4028c6858119921801816b5359d15e63" lang="id" xmltv_id="">Gaming TV</channel>
</channels>

View File

@@ -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