2025-01-01 12:27:22 +03:00
|
|
|
const axios = require('axios')
|
|
|
|
|
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')
|
|
|
|
|
const doFetch = require('@ntlab/sfetch')
|
|
|
|
|
const debug = require('debug')('site:tivie.id')
|
|
|
|
|
|
|
|
|
|
dayjs.extend(utc)
|
|
|
|
|
dayjs.extend(timezone)
|
|
|
|
|
dayjs.extend(customParseFormat)
|
|
|
|
|
|
|
|
|
|
doFetch.setDebugger(debug)
|
|
|
|
|
|
|
|
|
|
const tz = 'Asia/Jakarta'
|
|
|
|
|
|
|
|
|
|
module.exports = {
|
|
|
|
|
site: 'tivie.id',
|
|
|
|
|
days: 2,
|
|
|
|
|
url({ channel, date }) {
|
|
|
|
|
return `https://tivie.id/channel/${channel.site_id}/${date.format('YYYYMMDD')}`
|
|
|
|
|
},
|
|
|
|
|
async parser({ content, date }) {
|
|
|
|
|
const programs = []
|
|
|
|
|
if (content) {
|
|
|
|
|
const $ = cheerio.load(content)
|
|
|
|
|
const items = $('ul[x-data] > li[id*="event-"] > div.w-full')
|
|
|
|
|
.toArray()
|
|
|
|
|
.map(item => {
|
|
|
|
|
const $item = $(item)
|
|
|
|
|
const time = $item.find('div:nth-child(1) span:nth-child(1)')
|
|
|
|
|
const info = $item.find('div:nth-child(2) h5')
|
|
|
|
|
const detail = info.find('a')
|
|
|
|
|
const p = {
|
|
|
|
|
start: dayjs.tz(`${date.format('YYYY-MM-DD')} ${time.html()}`, 'YYYY-MM-DD HH:mm', tz)
|
|
|
|
|
}
|
|
|
|
|
if (detail.length) {
|
|
|
|
|
const subtitle = detail.find('div')
|
|
|
|
|
p.title = parseText(subtitle.length ? subtitle : detail)
|
|
|
|
|
p.url = detail.attr('href')
|
|
|
|
|
} else {
|
|
|
|
|
p.title = parseText(info)
|
|
|
|
|
}
|
|
|
|
|
if (p.title) {
|
|
|
|
|
const [, , season, episode] = p.title.match(/( S(\d+))?, Ep\. (\d+)/) || [
|
|
|
|
|
null,
|
|
|
|
|
null,
|
|
|
|
|
null,
|
|
|
|
|
null
|
|
|
|
|
]
|
|
|
|
|
if (season) {
|
|
|
|
|
p.season = parseInt(season)
|
|
|
|
|
}
|
|
|
|
|
if (episode) {
|
|
|
|
|
p.episode = parseInt(episode)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return p
|
|
|
|
|
})
|
|
|
|
|
// fetch detailed guide if necessary
|
|
|
|
|
const queues = items
|
|
|
|
|
.filter(i => i.url)
|
|
|
|
|
.map(i => {
|
|
|
|
|
const url = i.url
|
|
|
|
|
delete i.url
|
|
|
|
|
return { i, url }
|
|
|
|
|
})
|
|
|
|
|
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)'))
|
Update tivie.id
Replaces #2786. Has the same parsing fix from the last commit of said PR but with changes to the channels.xml.
```shell
@leap0x7b ➜ /workspaces/epg (master) $ npm test --- tivie.id
> test
> run-script-os tivie.id
> test:default
> TZ=Pacific/Nauru npx jest --runInBand tivie.id
PASS sites/tivie.id/tivie.id.test.js
✓ can generate valid url (3 ms)
✓ can parse response (179 ms)
✓ can handle empty guide
Test Suites: 1 passed, 1 total
Tests: 3 passed, 3 total
Snapshots: 0 total
Time: 0.52 s
Ran all test suites matching /tivie.id/i.
```
```shell
@leap0x7b ➜ /workspaces/epg (master) $ npm run grab --- --site=tivie.id
> grab
> npx tsx scripts/commands/epg/grab.ts --site=tivie.id
starting...
config:
output: guide.xml
maxConnections: 1
gzip: false
site: tivie.id
loading channels...
found 45 channel(s)
run:
[1/90] tivie.id (id) - ANTV.id - Jun 22, 2025 (14 programs)
[2/90] tivie.id (id) - ANTV.id - Jun 23, 2025 (13 programs)
[3/90] tivie.id (id) - ZeeBioskop.id - Jun 23, 2025 (14 programs)
[4/90] tivie.id (id) - ZeeBioskop.id - Jun 22, 2025 (11 programs)
[5/90] tivie.id (id) - TVRINasional.id - Jun 23, 2025 (36 programs)
[6/90] tivie.id (id) - TVRINasional.id - Jun 22, 2025 (38 programs)
[7/90] tivie.id (id) - tvOne.id - Jun 23, 2025 (24 programs)
[8/90] tivie.id (id) - tvOne.id - Jun 22, 2025 (25 programs)
[9/90] tivie.id (id) - tvNMoviesAsia.hk - Jun 23, 2025 (14 programs)
[10/90] tivie.id (id) - tvNMoviesAsia.hk - Jun 22, 2025 (13 programs)
[11/90] tivie.id (id) - tvNAsia.hk - Jun 23, 2025 (21 programs)
[12/90] tivie.id (id) - tvNAsia.hk - Jun 22, 2025 (18 programs)
[13/90] tivie.id (id) - TransTV.id - Jun 23, 2025 (21 programs)
[14/90] tivie.id (id) - TransTV.id - Jun 22, 2025 (23 programs)
[15/90] tivie.id (id) - Trans7.id - Jun 23, 2025 (28 programs)
[16/90] tivie.id (id) - Trans7.id - Jun 22, 2025 (23 programs)
[17/90] tivie.id (id) - SPOTV.id - Jun 23, 2025 (6 programs)
[18/90] tivie.id (id) - SPOTV.id - Jun 22, 2025 (9 programs)
[19/90] tivie.id (id) - SPOTV2.id - Jun 23, 2025 (11 programs)
[20/90] tivie.id (id) - SPOTV2.id - Jun 22, 2025 (15 programs)
[21/90] tivie.id (id) - SindoNewsTV.id - Jun 23, 2025 (23 programs)
[22/90] tivie.id (id) - SindoNewsTV.id - Jun 22, 2025 (23 programs)
[23/90] tivie.id (id) - SEAToday.id - Jun 23, 2025 (42 programs)
[24/90] tivie.id (id) - SEAToday.id - Jun 22, 2025 (42 programs)
[25/90] tivie.id (id) - SCTV.id - Jun 23, 2025 (18 programs)
[26/90] tivie.id (id) - SCTV.id - Jun 22, 2025 (19 programs)
[27/90] tivie.id (id) - ROCKExtreme.sg - Jun 23, 2025 (14 programs)
[28/90] tivie.id (id) - ROCKExtreme.sg - Jun 22, 2025 (14 programs)
[29/90] tivie.id (id) - ROCKEntertainment.sg - Jun 23, 2025 (26 programs)
[30/90] tivie.id (id) - ROCKEntertainment.sg - Jun 22, 2025 (17 programs)
[31/90] tivie.id (id) - RCTI.id - Jun 23, 2025 (19 programs)
[32/90] tivie.id (id) - RCTI.id - Jun 22, 2025 (19 programs)
[33/90] tivie.id (id) - RajawaliTV.id - Jun 23, 2025 (26 programs)
[34/90] tivie.id (id) - RajawaliTV.id - Jun 22, 2025 (29 programs)
[35/90] tivie.id (id) - NusantaraTV.id - Jun 23, 2025 (23 programs)
[36/90] tivie.id (id) - NusantaraTV.id - Jun 22, 2025 (26 programs)
[37/90] tivie.id (id) - Moji.id - Jun 23, 2025 (14 programs)
[38/90] tivie.id (id) - Moji.id - Jun 22, 2025 (16 programs)
[39/90] tivie.id (id) - MNCTV.id - Jun 23, 2025 (19 programs)
[40/90] tivie.id (id) - MNCTV.id - Jun 22, 2025 (16 programs)
Unable to fetch https://tivie.id/program/go-healthy-nwzDnwzDnAPB: socket hang up!
Unable to fetch https://tivie.id/program/metro-sports-nwzDnwzDnAPD: socket hang up!
Unable to fetch https://tivie.id/program/metro-siang-nwzDnwzDnAP8: socket hang up!
Unable to fetch https://tivie.id/program/metro-siang-nwzDnwzDnAP8: socket hang up!
Unable to fetch https://tivie.id/program/headline-news-nwzDnwzDmwz6: socket hang up!
Unable to fetch https://tivie.id/program/metro-siang-nwzDnwzDnAP8: socket hang up!
Unable to fetch https://tivie.id/program/newsline-nwzDnwzDnAP6: socket hang up!
Unable to fetch https://tivie.id/program/headline-news-nwzDnwzDmwz6: socket hang up!
Unable to fetch https://tivie.id/program/headline-news-nwzDnwzDmwz6: socket hang up!
[41/90] tivie.id (id) - MetroTV.id - Jun 23, 2025 (59 programs)
[42/90] tivie.id (id) - MetroTV.id - Jun 22, 2025 (56 programs)
[43/90] tivie.id (id) - MentariTV.id - Jun 23, 2025 (19 programs)
[44/90] tivie.id (id) - MentariTV.id - Jun 22, 2025 (19 programs)
[45/90] tivie.id (id) - NET.id - Jun 23, 2025 (22 programs)
[46/90] tivie.id (id) - NET.id - Jun 22, 2025 (22 programs)
[47/90] tivie.id (id) - LifetimeAsia.us - Jun 23, 2025 (25 programs)
[48/90] tivie.id (id) - LifetimeAsia.us - Jun 22, 2025 (18 programs)
[49/90] tivie.id (id) - KompasTV.id - Jun 23, 2025 (23 programs)
[50/90] tivie.id (id) - KompasTV.id - Jun 22, 2025 (28 programs)
[51/90] tivie.id (id) - iNews.id - Jun 23, 2025 (24 programs)
[52/90] tivie.id (id) - iNews.id - Jun 22, 2025 (22 programs)
[53/90] tivie.id (id) - Indosiar.id - Jun 23, 2025 (15 programs)
[54/90] tivie.id (id) - Indosiar.id - Jun 22, 2025 (15 programs)
[55/90] tivie.id (id) - HITSNowHD.sg - Jun 23, 2025 (25 programs)
[56/90] tivie.id (id) - HITSNowHD.sg - Jun 22, 2025 (26 programs)
[57/90] tivie.id (id) - HITSMovies.sg - Jun 23, 2025 (12 programs)
[58/90] tivie.id (id) - HITSMovies.sg - Jun 22, 2025 (12 programs)
[59/90] tivie.id (id) - HITS.sg - Jun 23, 2025 (29 programs)
[60/90] tivie.id (id) - HITS.sg - Jun 22, 2025 (30 programs)
[61/90] tivie.id (id) - HBOSignatureAsia.sg - Jun 23, 2025 (16 programs)
[62/90] tivie.id (id) - HBOSignatureAsia.sg - Jun 22, 2025 (15 programs)
[63/90] tivie.id (id) - HBOHitsAsia.sg - Jun 23, 2025 (17 programs)
[64/90] tivie.id (id) - HBOHitsAsia.sg - Jun 22, 2025 (15 programs)
[65/90] tivie.id (id) - HBOFamilyAsia.sg - Jun 23, 2025 (63 programs)
[66/90] tivie.id (id) - HBOFamilyAsia.sg - Jun 22, 2025 (60 programs)
[67/90] tivie.id (id) - HBOAsia.sg - Jun 23, 2025 (13 programs)
[68/90] tivie.id (id) - HBOAsia.sg - Jun 22, 2025 (14 programs)
[69/90] tivie.id (id) - GTV.id - Jun 23, 2025 (20 programs)
[70/90] tivie.id (id) - GTV.id - Jun 22, 2025 (18 programs)
[71/90] tivie.id (id) - GarudaTV.id - Jun 23, 2025 (37 programs)
[72/90] tivie.id (id) - GarudaTV.id - Jun 22, 2025 (39 programs)
[73/90] tivie.id (id) - GalaxyPremium.id - Jun 23, 2025 (14 programs)
[74/90] tivie.id (id) - GalaxyPremium.id - Jun 22, 2025 (13 programs)
[75/90] tivie.id (id) - Galaxy.id - Jun 23, 2025 (16 programs)
[76/90] tivie.id (id) - Galaxy.id - Jun 22, 2025 (16 programs)
[77/90] tivie.id (id) - CNNIndonesia.id - Jun 23, 2025 (26 programs)
[78/90] tivie.id (id) - CNNIndonesia.id - Jun 22, 2025 (26 programs)
[79/90] tivie.id (id) - CinemaxAsia.sg - Jun 23, 2025 (16 programs)
[80/90] tivie.id (id) - CinemaxAsia.sg - Jun 22, 2025 (15 programs)
[81/90] tivie.id (id) - BTV.id - Jun 23, 2025 (27 programs)
[82/90] tivie.id (id) - BTV.id - Jun 22, 2025 (28 programs)
[83/90] tivie.id (id) - beINSports3.qa@Indonesia - Jun 23, 2025 (21 programs)
[84/90] tivie.id (id) - beINSports3.qa@Indonesia - Jun 22, 2025 (20 programs)
[85/90] tivie.id (id) - beinsports2 - Jun 23, 2025 (22 programs)
[86/90] tivie.id (id) - beinsports2 - Jun 22, 2025 (18 programs)
[87/90] tivie.id (id) - beINSports1.qa@Indonesia - Jun 23, 2025 (21 programs)
[88/90] tivie.id (id) - beINSports1.qa@Indonesia - Jun 22, 2025 (23 programs)
[89/90] tivie.id (id) - AXNAsia.sg@Indonesia - Jun 23, 2025 (25 programs)
[90/90] tivie.id (id) - AXNAsia.sg@Indonesia - Jun 22, 2025 (24 programs)
saving to "guide.xml"...
done in 00h 02m 45s
```
2025-06-22 07:24:21 +00:00
|
|
|
if (!queue.i.title.startsWith(title) && !queue.i.title.startsWith('LIVE ')) {
|
2025-01-01 12:27:22 +03:00
|
|
|
queue.i.subTitle = parseText(info.find('h2:nth-child(2)'))
|
|
|
|
|
}
|
Update tivie.id
Replaces #2786. Has the same parsing fix from the last commit of said PR but with changes to the channels.xml.
```shell
@leap0x7b ➜ /workspaces/epg (master) $ npm test --- tivie.id
> test
> run-script-os tivie.id
> test:default
> TZ=Pacific/Nauru npx jest --runInBand tivie.id
PASS sites/tivie.id/tivie.id.test.js
✓ can generate valid url (3 ms)
✓ can parse response (179 ms)
✓ can handle empty guide
Test Suites: 1 passed, 1 total
Tests: 3 passed, 3 total
Snapshots: 0 total
Time: 0.52 s
Ran all test suites matching /tivie.id/i.
```
```shell
@leap0x7b ➜ /workspaces/epg (master) $ npm run grab --- --site=tivie.id
> grab
> npx tsx scripts/commands/epg/grab.ts --site=tivie.id
starting...
config:
output: guide.xml
maxConnections: 1
gzip: false
site: tivie.id
loading channels...
found 45 channel(s)
run:
[1/90] tivie.id (id) - ANTV.id - Jun 22, 2025 (14 programs)
[2/90] tivie.id (id) - ANTV.id - Jun 23, 2025 (13 programs)
[3/90] tivie.id (id) - ZeeBioskop.id - Jun 23, 2025 (14 programs)
[4/90] tivie.id (id) - ZeeBioskop.id - Jun 22, 2025 (11 programs)
[5/90] tivie.id (id) - TVRINasional.id - Jun 23, 2025 (36 programs)
[6/90] tivie.id (id) - TVRINasional.id - Jun 22, 2025 (38 programs)
[7/90] tivie.id (id) - tvOne.id - Jun 23, 2025 (24 programs)
[8/90] tivie.id (id) - tvOne.id - Jun 22, 2025 (25 programs)
[9/90] tivie.id (id) - tvNMoviesAsia.hk - Jun 23, 2025 (14 programs)
[10/90] tivie.id (id) - tvNMoviesAsia.hk - Jun 22, 2025 (13 programs)
[11/90] tivie.id (id) - tvNAsia.hk - Jun 23, 2025 (21 programs)
[12/90] tivie.id (id) - tvNAsia.hk - Jun 22, 2025 (18 programs)
[13/90] tivie.id (id) - TransTV.id - Jun 23, 2025 (21 programs)
[14/90] tivie.id (id) - TransTV.id - Jun 22, 2025 (23 programs)
[15/90] tivie.id (id) - Trans7.id - Jun 23, 2025 (28 programs)
[16/90] tivie.id (id) - Trans7.id - Jun 22, 2025 (23 programs)
[17/90] tivie.id (id) - SPOTV.id - Jun 23, 2025 (6 programs)
[18/90] tivie.id (id) - SPOTV.id - Jun 22, 2025 (9 programs)
[19/90] tivie.id (id) - SPOTV2.id - Jun 23, 2025 (11 programs)
[20/90] tivie.id (id) - SPOTV2.id - Jun 22, 2025 (15 programs)
[21/90] tivie.id (id) - SindoNewsTV.id - Jun 23, 2025 (23 programs)
[22/90] tivie.id (id) - SindoNewsTV.id - Jun 22, 2025 (23 programs)
[23/90] tivie.id (id) - SEAToday.id - Jun 23, 2025 (42 programs)
[24/90] tivie.id (id) - SEAToday.id - Jun 22, 2025 (42 programs)
[25/90] tivie.id (id) - SCTV.id - Jun 23, 2025 (18 programs)
[26/90] tivie.id (id) - SCTV.id - Jun 22, 2025 (19 programs)
[27/90] tivie.id (id) - ROCKExtreme.sg - Jun 23, 2025 (14 programs)
[28/90] tivie.id (id) - ROCKExtreme.sg - Jun 22, 2025 (14 programs)
[29/90] tivie.id (id) - ROCKEntertainment.sg - Jun 23, 2025 (26 programs)
[30/90] tivie.id (id) - ROCKEntertainment.sg - Jun 22, 2025 (17 programs)
[31/90] tivie.id (id) - RCTI.id - Jun 23, 2025 (19 programs)
[32/90] tivie.id (id) - RCTI.id - Jun 22, 2025 (19 programs)
[33/90] tivie.id (id) - RajawaliTV.id - Jun 23, 2025 (26 programs)
[34/90] tivie.id (id) - RajawaliTV.id - Jun 22, 2025 (29 programs)
[35/90] tivie.id (id) - NusantaraTV.id - Jun 23, 2025 (23 programs)
[36/90] tivie.id (id) - NusantaraTV.id - Jun 22, 2025 (26 programs)
[37/90] tivie.id (id) - Moji.id - Jun 23, 2025 (14 programs)
[38/90] tivie.id (id) - Moji.id - Jun 22, 2025 (16 programs)
[39/90] tivie.id (id) - MNCTV.id - Jun 23, 2025 (19 programs)
[40/90] tivie.id (id) - MNCTV.id - Jun 22, 2025 (16 programs)
Unable to fetch https://tivie.id/program/go-healthy-nwzDnwzDnAPB: socket hang up!
Unable to fetch https://tivie.id/program/metro-sports-nwzDnwzDnAPD: socket hang up!
Unable to fetch https://tivie.id/program/metro-siang-nwzDnwzDnAP8: socket hang up!
Unable to fetch https://tivie.id/program/metro-siang-nwzDnwzDnAP8: socket hang up!
Unable to fetch https://tivie.id/program/headline-news-nwzDnwzDmwz6: socket hang up!
Unable to fetch https://tivie.id/program/metro-siang-nwzDnwzDnAP8: socket hang up!
Unable to fetch https://tivie.id/program/newsline-nwzDnwzDnAP6: socket hang up!
Unable to fetch https://tivie.id/program/headline-news-nwzDnwzDmwz6: socket hang up!
Unable to fetch https://tivie.id/program/headline-news-nwzDnwzDmwz6: socket hang up!
[41/90] tivie.id (id) - MetroTV.id - Jun 23, 2025 (59 programs)
[42/90] tivie.id (id) - MetroTV.id - Jun 22, 2025 (56 programs)
[43/90] tivie.id (id) - MentariTV.id - Jun 23, 2025 (19 programs)
[44/90] tivie.id (id) - MentariTV.id - Jun 22, 2025 (19 programs)
[45/90] tivie.id (id) - NET.id - Jun 23, 2025 (22 programs)
[46/90] tivie.id (id) - NET.id - Jun 22, 2025 (22 programs)
[47/90] tivie.id (id) - LifetimeAsia.us - Jun 23, 2025 (25 programs)
[48/90] tivie.id (id) - LifetimeAsia.us - Jun 22, 2025 (18 programs)
[49/90] tivie.id (id) - KompasTV.id - Jun 23, 2025 (23 programs)
[50/90] tivie.id (id) - KompasTV.id - Jun 22, 2025 (28 programs)
[51/90] tivie.id (id) - iNews.id - Jun 23, 2025 (24 programs)
[52/90] tivie.id (id) - iNews.id - Jun 22, 2025 (22 programs)
[53/90] tivie.id (id) - Indosiar.id - Jun 23, 2025 (15 programs)
[54/90] tivie.id (id) - Indosiar.id - Jun 22, 2025 (15 programs)
[55/90] tivie.id (id) - HITSNowHD.sg - Jun 23, 2025 (25 programs)
[56/90] tivie.id (id) - HITSNowHD.sg - Jun 22, 2025 (26 programs)
[57/90] tivie.id (id) - HITSMovies.sg - Jun 23, 2025 (12 programs)
[58/90] tivie.id (id) - HITSMovies.sg - Jun 22, 2025 (12 programs)
[59/90] tivie.id (id) - HITS.sg - Jun 23, 2025 (29 programs)
[60/90] tivie.id (id) - HITS.sg - Jun 22, 2025 (30 programs)
[61/90] tivie.id (id) - HBOSignatureAsia.sg - Jun 23, 2025 (16 programs)
[62/90] tivie.id (id) - HBOSignatureAsia.sg - Jun 22, 2025 (15 programs)
[63/90] tivie.id (id) - HBOHitsAsia.sg - Jun 23, 2025 (17 programs)
[64/90] tivie.id (id) - HBOHitsAsia.sg - Jun 22, 2025 (15 programs)
[65/90] tivie.id (id) - HBOFamilyAsia.sg - Jun 23, 2025 (63 programs)
[66/90] tivie.id (id) - HBOFamilyAsia.sg - Jun 22, 2025 (60 programs)
[67/90] tivie.id (id) - HBOAsia.sg - Jun 23, 2025 (13 programs)
[68/90] tivie.id (id) - HBOAsia.sg - Jun 22, 2025 (14 programs)
[69/90] tivie.id (id) - GTV.id - Jun 23, 2025 (20 programs)
[70/90] tivie.id (id) - GTV.id - Jun 22, 2025 (18 programs)
[71/90] tivie.id (id) - GarudaTV.id - Jun 23, 2025 (37 programs)
[72/90] tivie.id (id) - GarudaTV.id - Jun 22, 2025 (39 programs)
[73/90] tivie.id (id) - GalaxyPremium.id - Jun 23, 2025 (14 programs)
[74/90] tivie.id (id) - GalaxyPremium.id - Jun 22, 2025 (13 programs)
[75/90] tivie.id (id) - Galaxy.id - Jun 23, 2025 (16 programs)
[76/90] tivie.id (id) - Galaxy.id - Jun 22, 2025 (16 programs)
[77/90] tivie.id (id) - CNNIndonesia.id - Jun 23, 2025 (26 programs)
[78/90] tivie.id (id) - CNNIndonesia.id - Jun 22, 2025 (26 programs)
[79/90] tivie.id (id) - CinemaxAsia.sg - Jun 23, 2025 (16 programs)
[80/90] tivie.id (id) - CinemaxAsia.sg - Jun 22, 2025 (15 programs)
[81/90] tivie.id (id) - BTV.id - Jun 23, 2025 (27 programs)
[82/90] tivie.id (id) - BTV.id - Jun 22, 2025 (28 programs)
[83/90] tivie.id (id) - beINSports3.qa@Indonesia - Jun 23, 2025 (21 programs)
[84/90] tivie.id (id) - beINSports3.qa@Indonesia - Jun 22, 2025 (20 programs)
[85/90] tivie.id (id) - beinsports2 - Jun 23, 2025 (22 programs)
[86/90] tivie.id (id) - beinsports2 - Jun 22, 2025 (18 programs)
[87/90] tivie.id (id) - beINSports1.qa@Indonesia - Jun 23, 2025 (21 programs)
[88/90] tivie.id (id) - beINSports1.qa@Indonesia - Jun 22, 2025 (23 programs)
[89/90] tivie.id (id) - AXNAsia.sg@Indonesia - Jun 23, 2025 (25 programs)
[90/90] tivie.id (id) - AXNAsia.sg@Indonesia - Jun 22, 2025 (24 programs)
saving to "guide.xml"...
done in 00h 02m 45s
```
2025-06-22 07:24:21 +00:00
|
|
|
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(', ')
|
2025-01-01 12:27:22 +03:00
|
|
|
queue.i.image = img.length ? img.attr('src') : null
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
// fill start-stop
|
|
|
|
|
for (let i = 0; i < items.length; i++) {
|
|
|
|
|
if (i < items.length - 1) {
|
|
|
|
|
items[i].stop = items[i + 1].start
|
|
|
|
|
} else {
|
|
|
|
|
items[i].stop = dayjs.tz(
|
|
|
|
|
`${date.add(1, 'd').format('YYYY-MM-DD')} 00:00`,
|
|
|
|
|
'YYYY-MM-DD HH:mm',
|
|
|
|
|
tz
|
|
|
|
|
)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
// add programs
|
|
|
|
|
programs.push(...items)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return programs
|
|
|
|
|
},
|
|
|
|
|
async channels({ lang = 'id' }) {
|
|
|
|
|
const result = await axios
|
|
|
|
|
.get('https://tivie.id/channel')
|
|
|
|
|
.then(response => response.data)
|
|
|
|
|
.catch(console.error)
|
|
|
|
|
|
|
|
|
|
const $ = cheerio.load(result)
|
|
|
|
|
const items = $('ul[x-data] li[x-data] div header h2 a').toArray()
|
|
|
|
|
const channels = items.map(item => {
|
|
|
|
|
const $item = $(item)
|
|
|
|
|
const url = $item.attr('href')
|
|
|
|
|
return {
|
|
|
|
|
lang,
|
|
|
|
|
site_id: url.substr(url.lastIndexOf('/') + 1),
|
|
|
|
|
name: $item.find('strong').text()
|
|
|
|
|
}
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
return channels
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
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, ' ')
|
|
|
|
|
continue
|
|
|
|
|
}
|
|
|
|
|
break
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return text
|
|
|
|
|
}
|