mirror of
https://github.com/iptv-org/epg
synced 2025-12-16 10:26:41 -05:00
1
sites/vidio.com/__data__/auth.json
Normal file
1
sites/vidio.com/__data__/auth.json
Normal file
@@ -0,0 +1 @@
|
|||||||
|
{"api_key":"eyJhbGciOiJIUzI1NiJ9.eyJkYXRhIjp7InR5cGUiOiJhcGlrZXkifSwiZXhwIjoxNzUxNDc4MDQ2fQ.kxcPR76NBdQYIrsUnmBpqzcSmPD-H7b_-I_SjFi1zY4","api_key_expires_at":"2025-07-03T00:40:46+07:00"}
|
||||||
1
sites/vidio.com/__data__/content.json
Normal file
1
sites/vidio.com/__data__/content.json
Normal file
File diff suppressed because one or more lines are too long
1
sites/vidio.com/__data__/no_content.json
Normal file
1
sites/vidio.com/__data__/no_content.json
Normal file
@@ -0,0 +1 @@
|
|||||||
|
{"errors":[{"detail":"Livestreaming not found"}]}
|
||||||
@@ -2,12 +2,14 @@
|
|||||||
<channels>
|
<channels>
|
||||||
<channel site="vidio.com" lang="id" xmltv_id="ABCAustralia.au" site_id="7150">ABC Australia</channel>
|
<channel site="vidio.com" lang="id" xmltv_id="ABCAustralia.au" site_id="7150">ABC Australia</channel>
|
||||||
<channel site="vidio.com" lang="id" xmltv_id="AfricanewsEnglish.fr" site_id="12784">AFRICANEWS TV</channel>
|
<channel site="vidio.com" lang="id" xmltv_id="AfricanewsEnglish.fr" site_id="12784">AFRICANEWS TV</channel>
|
||||||
|
<channel site="vidio.com" lang="id" xmltv_id="AjwaTV.id" site_id="7464">Ajwa TV</channel>
|
||||||
<channel site="vidio.com" lang="id" xmltv_id="AlJazeera.qa@English" site_id="6410">Aljazeera</channel>
|
<channel site="vidio.com" lang="id" xmltv_id="AlJazeera.qa@English" site_id="6410">Aljazeera</channel>
|
||||||
<channel site="vidio.com" lang="id" xmltv_id="ANTV.id" site_id="782">ANTV</channel>
|
<channel site="vidio.com" lang="id" xmltv_id="ANTV.id" site_id="782">ANTV</channel>
|
||||||
<channel site="vidio.com" lang="id" xmltv_id="ArirangWorld.kr" site_id="6784">Arirang</channel>
|
<channel site="vidio.com" lang="id" xmltv_id="ArirangWorld.kr" site_id="6784">Arirang</channel>
|
||||||
<channel site="vidio.com" lang="id" xmltv_id="beINSports1.qa@Indonesia" site_id="6299">Bein 1</channel>
|
<channel site="vidio.com" lang="id" xmltv_id="beINSports1.qa@Indonesia" site_id="6299">Bein 1</channel>
|
||||||
<channel site="vidio.com" lang="id" xmltv_id="" site_id="17875">Bein 2</channel>
|
<channel site="vidio.com" lang="id" xmltv_id="" site_id="17875">Bein 2</channel>
|
||||||
<channel site="vidio.com" lang="id" xmltv_id="beINSports3.qa@Indonesia" site_id="6317">Bein 3</channel>
|
<channel site="vidio.com" lang="id" xmltv_id="beINSports3.qa@Indonesia" site_id="6317">Bein 3</channel>
|
||||||
|
<channel site="vidio.com" lang="id" xmltv_id="BeritaSatuEnglish.id" site_id="18280">BeritaSatu</channel>
|
||||||
<channel site="vidio.com" lang="id" xmltv_id="BTV.id" site_id="6165">BTV</channel>
|
<channel site="vidio.com" lang="id" xmltv_id="BTV.id" site_id="6165">BTV</channel>
|
||||||
<channel site="vidio.com" lang="id" xmltv_id="ChampionsTV1.id" site_id="6685">CTV 1</channel>
|
<channel site="vidio.com" lang="id" xmltv_id="ChampionsTV1.id" site_id="6685">CTV 1</channel>
|
||||||
<channel site="vidio.com" lang="id" xmltv_id="ChampionsTV2.id" site_id="6686">CTV 2</channel>
|
<channel site="vidio.com" lang="id" xmltv_id="ChampionsTV2.id" site_id="6686">CTV 2</channel>
|
||||||
@@ -15,36 +17,44 @@
|
|||||||
<channel site="vidio.com" lang="id" xmltv_id="ChampionsTV5.id" site_id="9182">CTV 5</channel>
|
<channel site="vidio.com" lang="id" xmltv_id="ChampionsTV5.id" site_id="9182">CTV 5</channel>
|
||||||
<channel site="vidio.com" lang="id" xmltv_id="ChampionsTV6.id" site_id="9183">CTV 6</channel>
|
<channel site="vidio.com" lang="id" xmltv_id="ChampionsTV6.id" site_id="9183">CTV 6</channel>
|
||||||
<channel site="vidio.com" lang="id" xmltv_id="ChampionsTVEPL.id" site_id="9353">Premier League TV</channel>
|
<channel site="vidio.com" lang="id" xmltv_id="ChampionsTVEPL.id" site_id="9353">Premier League TV</channel>
|
||||||
|
<channel site="vidio.com" lang="id" xmltv_id="" site_id="18189">Champions Golf 1</channel>
|
||||||
|
<channel site="vidio.com" lang="id" xmltv_id="" site_id="18190">Champions Golf 2</channel>
|
||||||
<channel site="vidio.com" lang="id" xmltv_id="CNA.sg" site_id="6411">News Asia</channel>
|
<channel site="vidio.com" lang="id" xmltv_id="CNA.sg" site_id="6411">News Asia</channel>
|
||||||
<channel site="vidio.com" lang="id" xmltv_id="DAAITV.id" site_id="6482">DAAI TV</channel>
|
<channel site="vidio.com" lang="id" xmltv_id="DAAITV.id" site_id="6482">DAAI TV</channel>
|
||||||
|
<channel site="vidio.com" lang="id" xmltv_id="DaystarTV.us" site_id="18622">Daystar TV</channel>
|
||||||
<channel site="vidio.com" lang="id" xmltv_id="DW.de@English" site_id="5075">DW English</channel>
|
<channel site="vidio.com" lang="id" xmltv_id="DW.de@English" site_id="5075">DW English</channel>
|
||||||
<channel site="vidio.com" lang="id" xmltv_id="ElshintaTV.id" site_id="10975">Elshinta TV</channel>
|
<channel site="vidio.com" lang="id" xmltv_id="ElshintaTV.id" site_id="10975">Elshinta TV</channel>
|
||||||
<channel site="vidio.com" lang="id" xmltv_id="EuronewsEnglish.fr" site_id="6412">Euro News</channel>
|
<channel site="vidio.com" lang="id" xmltv_id="EuronewsEnglish.fr" site_id="6412">Euro News</channel>
|
||||||
|
<channel site="vidio.com" lang="id" xmltv_id="" site_id="18105">GGS TV</channel>
|
||||||
|
<channel site="vidio.com" lang="id" xmltv_id="HipHipHoree.id" site_id="7052">Hip Hip Horee!</channel>
|
||||||
|
<channel site="vidio.com" lang="id" xmltv_id="Horee.id" site_id="6397">Horee</channel>
|
||||||
<channel site="vidio.com" lang="id" xmltv_id="Indosiar.id" site_id="205">Indosiar</channel>
|
<channel site="vidio.com" lang="id" xmltv_id="Indosiar.id" site_id="205">Indosiar</channel>
|
||||||
<channel site="vidio.com" lang="id" xmltv_id="JakTV.id" site_id="5415">Jaktv</channel>
|
<channel site="vidio.com" lang="id" xmltv_id="JakTV.id" site_id="5415">Jaktv</channel>
|
||||||
<channel site="vidio.com" lang="id" xmltv_id="JPMTV.id" site_id="9714">jawaposTV</channel>
|
<channel site="vidio.com" lang="id" xmltv_id="JPMTV.id" site_id="9714">jawaposTV</channel>
|
||||||
<channel site="vidio.com" lang="id" xmltv_id="JTV.id" site_id="9713">JTV</channel>
|
<channel site="vidio.com" lang="id" xmltv_id="JTV.id" site_id="9713">JTV</channel>
|
||||||
<channel site="vidio.com" lang="id" xmltv_id="KompasTV.id" site_id="874">Kompas TV</channel>
|
<channel site="vidio.com" lang="id" xmltv_id="KompasTV.id" site_id="874">Kompas TV</channel>
|
||||||
<channel site="vidio.com" lang="id" xmltv_id="MagnaChannel.id" site_id="7230">Magna TV</channel>
|
<channel site="vidio.com" lang="id" xmltv_id="MagnaChannel.id" site_id="7230">Magna TV</channel>
|
||||||
<channel site="vidio.com" lang="id" xmltv_id="MetroGlobeNetwork.id" site_id="8815">Metro Globe Network</channel>
|
<channel site="vidio.com" lang="id" xmltv_id="MakkahTV.sa" site_id="6852">Makkah TV</channel>
|
||||||
|
<channel site="vidio.com" lang="id" xmltv_id="NET.id" site_id="875">MDTV</channel>
|
||||||
<channel site="vidio.com" lang="id" xmltv_id="MetroTV.id" site_id="777">Metro TV</channel>
|
<channel site="vidio.com" lang="id" xmltv_id="MetroTV.id" site_id="777">Metro TV</channel>
|
||||||
<channel site="vidio.com" lang="id" xmltv_id="Moji.id" site_id="206">Moji</channel>
|
<channel site="vidio.com" lang="id" xmltv_id="Moji.id" site_id="206">Moji</channel>
|
||||||
|
<channel site="vidio.com" lang="id" xmltv_id="" site_id="7619">MUSICA</channel>
|
||||||
<channel site="vidio.com" lang="id" xmltv_id="NBATV.us" site_id="6717">NBA TV</channel>
|
<channel site="vidio.com" lang="id" xmltv_id="NBATV.us" site_id="6717">NBA TV</channel>
|
||||||
<channel site="vidio.com" lang="id" xmltv_id="NET.id" site_id="875">NET TV</channel>
|
|
||||||
<channel site="vidio.com" lang="id" xmltv_id="NHKWorldJapan.jp" site_id="7968">NHK World Japan</channel>
|
<channel site="vidio.com" lang="id" xmltv_id="NHKWorldJapan.jp" site_id="7968">NHK World Japan</channel>
|
||||||
<channel site="vidio.com" lang="id" xmltv_id="NusantaraTV.id" site_id="7432">Nusantara TV</channel>
|
<channel site="vidio.com" lang="id" xmltv_id="NusantaraTV.id" site_id="7432">Nusantara TV</channel>
|
||||||
<channel site="vidio.com" lang="id" xmltv_id="RajawaliTV.id" site_id="1561">RTV</channel>
|
<channel site="vidio.com" lang="id" xmltv_id="RajawaliTV.id" site_id="1561">RTV</channel>
|
||||||
<channel site="vidio.com" lang="id" xmltv_id="RANSEntertainment.id" site_id="8241">RANS Channel</channel>
|
|
||||||
<channel site="vidio.com" lang="id" xmltv_id="ROCKEntertainment.sg" site_id="8120">ROCK Entertainment</channel>
|
<channel site="vidio.com" lang="id" xmltv_id="ROCKEntertainment.sg" site_id="8120">ROCK Entertainment</channel>
|
||||||
<channel site="vidio.com" lang="id" xmltv_id="ROCKExtreme.sg" site_id="8121">Rock Action</channel>
|
<channel site="vidio.com" lang="id" xmltv_id="ROCKExtreme.sg" site_id="8121">Rock Action</channel>
|
||||||
<channel site="vidio.com" lang="id" xmltv_id="SCTV.id" site_id="204">SCTV</channel>
|
<channel site="vidio.com" lang="id" xmltv_id="SCTV.id" site_id="204">SCTV</channel>
|
||||||
<channel site="vidio.com" lang="id" xmltv_id="SEAToday.id" site_id="7687">SEA TODAY</channel>
|
|
||||||
<channel site="vidio.com" lang="id" xmltv_id="SPOTV2.id" site_id="17140">SPOTV 2</channel>
|
<channel site="vidio.com" lang="id" xmltv_id="SPOTV2.id" site_id="17140">SPOTV 2</channel>
|
||||||
<channel site="vidio.com" lang="id" xmltv_id="SPOTV.id" site_id="17139">SPOTV</channel>
|
<channel site="vidio.com" lang="id" xmltv_id="SPOTV.id" site_id="17139">SPOTV</channel>
|
||||||
|
<channel site="vidio.com" lang="id" xmltv_id="TawafTV.id" site_id="12607">Tawaf TV</channel>
|
||||||
<channel site="vidio.com" lang="id" xmltv_id="Trans7.id" site_id="734">Trans7</channel>
|
<channel site="vidio.com" lang="id" xmltv_id="Trans7.id" site_id="734">Trans7</channel>
|
||||||
<channel site="vidio.com" lang="id" xmltv_id="TransTV.id" site_id="733">TRANS TV</channel>
|
<channel site="vidio.com" lang="id" xmltv_id="TransTV.id" site_id="733">TRANS TV</channel>
|
||||||
<channel site="vidio.com" lang="id" xmltv_id="TV5MondeAsia.fr" site_id="17278">TV5Monde</channel>
|
<channel site="vidio.com" lang="id" xmltv_id="TV5MondeAsia.fr" site_id="17278">TV5Monde</channel>
|
||||||
<channel site="vidio.com" lang="id" xmltv_id="tvNAsia.hk" site_id="6362">TVN</channel>
|
<channel site="vidio.com" lang="id" xmltv_id="tvNAsia.hk" site_id="6362">TVN</channel>
|
||||||
<channel site="vidio.com" lang="id" xmltv_id="tvOne.id" site_id="783">TVOne</channel>
|
<channel site="vidio.com" lang="id" xmltv_id="tvOne.id" site_id="783">TVOne</channel>
|
||||||
<channel site="vidio.com" lang="id" xmltv_id="TVRINasional.id" site_id="6441">TVRI</channel>
|
<channel site="vidio.com" lang="id" xmltv_id="TVRI.id" site_id="6441">TVRI</channel>
|
||||||
|
<channel site="vidio.com" lang="id" xmltv_id="UChannel.id" site_id="6898">U-Channel TV</channel>
|
||||||
|
<channel site="vidio.com" lang="id" xmltv_id="ZooMoo.sg" site_id="6533">Zoomoo</channel>
|
||||||
</channels>
|
</channels>
|
||||||
|
|||||||
@@ -1,112 +1,89 @@
|
|||||||
const cheerio = require('cheerio')
|
const axios = require('axios')
|
||||||
const dayjs = require('dayjs')
|
const dayjs = require('dayjs')
|
||||||
const utc = require('dayjs/plugin/utc')
|
const utc = require('dayjs/plugin/utc')
|
||||||
const timezone = require('dayjs/plugin/timezone')
|
const timezone = require('dayjs/plugin/timezone')
|
||||||
const customParseFormat = require('dayjs/plugin/customParseFormat')
|
const customParseFormat = require('dayjs/plugin/customParseFormat')
|
||||||
|
const crypto = require('crypto')
|
||||||
|
|
||||||
dayjs.extend(utc)
|
dayjs.extend(utc)
|
||||||
dayjs.extend(timezone)
|
dayjs.extend(timezone)
|
||||||
dayjs.extend(customParseFormat)
|
dayjs.extend(customParseFormat)
|
||||||
|
|
||||||
const tz = 'Asia/Jakarta'
|
const WEB_CLIENT_SECRET = Buffer.from('dPr0QImQ7bc5o9LMntNba2DOsSbZcjUh')
|
||||||
|
const WEB_CLIENT_IV = Buffer.from('C8RWsrtFsoeyCyPt')
|
||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
site: 'vidio.com',
|
site: 'vidio.com',
|
||||||
days: 2,
|
days: 2,
|
||||||
url({ channel }) {
|
url({ date, channel }) {
|
||||||
return `https://www.vidio.com/live/${channel.site_id}/schedules`
|
return `https://api.vidio.com/livestreamings/${channel.site_id}/schedules?filter[date]=${date.format('YYYY-MM-DD')}`
|
||||||
},
|
},
|
||||||
parser({ content, date }) {
|
request: {
|
||||||
|
async headers() {
|
||||||
|
const session = await loadSessionDetails()
|
||||||
|
if (!session || !session.api_key) return null
|
||||||
|
|
||||||
|
var cipher = crypto.createCipheriv('aes-256-cbc', WEB_CLIENT_SECRET, WEB_CLIENT_IV)
|
||||||
|
return {
|
||||||
|
'X-API-Key': cipher.update(session.api_key, 'utf8', 'base64') + cipher.final('base64'),
|
||||||
|
'X-Secure-Level': 2
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
parser({ content }) {
|
||||||
const programs = []
|
const programs = []
|
||||||
const items = parseItems(content, date)
|
const json = JSON.parse(content)
|
||||||
items.forEach(item => {
|
if (Array.isArray(json?.data)) {
|
||||||
const prev = programs[programs.length - 1]
|
for (const program of json.data) {
|
||||||
const $item = cheerio.load(item)
|
programs.push({
|
||||||
let start = parseStart($item, date)
|
title: program.attributes.title,
|
||||||
if (prev && start < prev.start) {
|
description: program.attributes.description,
|
||||||
start = start.add(1, 'd')
|
start: dayjs(program.attributes.start_time),
|
||||||
date = date.add(1, 'd')
|
stop: dayjs(program.attributes.end_time),
|
||||||
|
image: program.attributes.image_landscape_url
|
||||||
|
})
|
||||||
}
|
}
|
||||||
let stop = parseStop($item, date)
|
}
|
||||||
if (stop < start) {
|
|
||||||
stop = stop.add(1, 'd')
|
|
||||||
date = date.add(1, 'd')
|
|
||||||
}
|
|
||||||
programs.push({
|
|
||||||
title: parseTitle($item),
|
|
||||||
start,
|
|
||||||
stop
|
|
||||||
})
|
|
||||||
})
|
|
||||||
|
|
||||||
return programs
|
return programs
|
||||||
},
|
},
|
||||||
async channels() {
|
async channels() {
|
||||||
const axios = require('axios')
|
const channels = []
|
||||||
const cheerio = require('cheerio')
|
const json = await axios
|
||||||
const result = await axios
|
.get(
|
||||||
.get('https://www.vidio.com/categories/daftar-channel-tv-radio-live-sports')
|
'https://api.vidio.com/livestreamings?stream_type=tv_stream',
|
||||||
|
{
|
||||||
|
headers: await this.request.headers()
|
||||||
|
}
|
||||||
|
)
|
||||||
.then(response => response.data)
|
.then(response => response.data)
|
||||||
.catch(console.error)
|
.catch(console.error)
|
||||||
|
|
||||||
const $ = cheerio.load(result)
|
if (Array.isArray(json?.data)) {
|
||||||
const itemGroups = $('div[data-variation="circle_horizontal"] ul').toArray()
|
for (const channel of json.data) {
|
||||||
const channels = []
|
channels.push({
|
||||||
|
|
||||||
itemGroups.forEach(group => {
|
|
||||||
const $group = $(group)
|
|
||||||
let skip = false
|
|
||||||
const sites = []
|
|
||||||
const items = $group.find('a[data-testid="circle-card"]').toArray()
|
|
||||||
items.forEach(item => {
|
|
||||||
const name = $(item).find('span[data-testid="circle-title"]').text()
|
|
||||||
// skip radio channels
|
|
||||||
if (name.toLowerCase().indexOf('fm') >= 0 || name.toLowerCase().indexOf('radio') >= 0) {
|
|
||||||
skip = true
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
let url = $(item).attr('href')
|
|
||||||
url = url.substr(url.lastIndexOf('/') + 1)
|
|
||||||
const matches = url.match(/(\d+)/)
|
|
||||||
sites.push({
|
|
||||||
lang: 'id',
|
lang: 'id',
|
||||||
site_id: matches[0],
|
site_id: channel.id,
|
||||||
name: name
|
name: channel.attributes.title
|
||||||
})
|
})
|
||||||
})
|
|
||||||
if (!skip && sites.length) {
|
|
||||||
channels.push(...sites)
|
|
||||||
}
|
}
|
||||||
})
|
}
|
||||||
|
|
||||||
return channels
|
return channels
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function parseStart($item, date) {
|
function loadSessionDetails() {
|
||||||
const timeString = $item('div.b-livestreaming-daily-schedule__item-content-caption').text()
|
return axios
|
||||||
const [, start] = timeString.match(/(\d{2}:\d{2}) -/) || [null, null]
|
.post(
|
||||||
|
'https://www.vidio.com/auth',
|
||||||
return dayjs.tz(`${date.format('YYYY-MM-DD')} ${start}`, 'YYYY-MM-DD HH:mm', tz)
|
{},
|
||||||
}
|
{
|
||||||
|
headers: {
|
||||||
function parseStop($item, date) {
|
'Content-Type': 'application/json'
|
||||||
const timeString = $item('div.b-livestreaming-daily-schedule__item-content-caption').text()
|
}
|
||||||
const [, stop] = timeString.match(/- (\d{2}:\d{2}) WIB/) || [null, null]
|
}
|
||||||
|
)
|
||||||
return dayjs.tz(`${date.format('YYYY-MM-DD')} ${stop}`, 'YYYY-MM-DD HH:mm', tz)
|
.then(r => r.data)
|
||||||
}
|
.catch(console.log)
|
||||||
|
}
|
||||||
function parseTitle($item) {
|
|
||||||
return $item('div.b-livestreaming-daily-schedule__item-content-title').text()
|
|
||||||
}
|
|
||||||
|
|
||||||
function parseItems(content, date) {
|
|
||||||
const $ = cheerio.load(content)
|
|
||||||
|
|
||||||
return $(
|
|
||||||
`#schedule-content-${date.format(
|
|
||||||
'YYYYMMDD'
|
|
||||||
)} > .b-livestreaming-daily-schedule__scroll-container .b-livestreaming-daily-schedule__item`
|
|
||||||
).toArray()
|
|
||||||
}
|
|
||||||
@@ -1,53 +1,67 @@
|
|||||||
const { parser, url } = require('./vidio.com.config.js')
|
const { parser, url, request } = require('./vidio.com.config.js')
|
||||||
|
const fs = require('fs')
|
||||||
|
const path = require('path')
|
||||||
|
const axios = require('axios')
|
||||||
const dayjs = require('dayjs')
|
const dayjs = require('dayjs')
|
||||||
const utc = require('dayjs/plugin/utc')
|
const utc = require('dayjs/plugin/utc')
|
||||||
const customParseFormat = require('dayjs/plugin/customParseFormat')
|
const customParseFormat = require('dayjs/plugin/customParseFormat')
|
||||||
|
|
||||||
dayjs.extend(customParseFormat)
|
dayjs.extend(customParseFormat)
|
||||||
dayjs.extend(utc)
|
dayjs.extend(utc)
|
||||||
|
|
||||||
const date = dayjs.utc('2021-11-24', 'YYYY-MM-DD').startOf('d')
|
jest.mock('axios')
|
||||||
|
|
||||||
|
const date = dayjs.utc('2025-07-01', 'YYYY-MM-DD').startOf('d')
|
||||||
const channel = {
|
const channel = {
|
||||||
site_id: '7464',
|
site_id: '204',
|
||||||
xmltv_id: 'AjwaTV.id'
|
xmltv_id: 'SCTV.id'
|
||||||
}
|
}
|
||||||
|
|
||||||
it('can generate valid url', () => {
|
it('can generate valid url', () => {
|
||||||
expect(url({ channel })).toBe('https://www.vidio.com/live/7464/schedules')
|
expect(url({ channel, date })).toBe(
|
||||||
|
'https://api.vidio.com/livestreamings/204/schedules?filter[date]=2025-07-01'
|
||||||
|
)
|
||||||
|
})
|
||||||
|
|
||||||
|
it('can generate valid request headers', async () => {
|
||||||
|
axios.post.mockImplementation(url => {
|
||||||
|
if (url === 'https://www.vidio.com/auth') {
|
||||||
|
return Promise.resolve({
|
||||||
|
data: JSON.parse(fs.readFileSync(path.resolve(__dirname, '__data__/auth.json')))
|
||||||
|
})
|
||||||
|
} else {
|
||||||
|
return Promise.resolve({ data: '' })
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
const result = await request.headers()
|
||||||
|
expect(result).toMatchObject({
|
||||||
|
'X-API-Key':
|
||||||
|
'CH1ZFsN4N/MIfAds1DL9mP151CNqIpWHqZGRr+LkvUyiq3FRPuP1Kt6aK+pG3nEC1FXt0ZAAJ5FKP8QU8CZ5/jQdSYLVeFwl9NoIkegVpR6b7W2ZwbaF00OPr6ON1/FpLQ3RiUzTPpAqe7f+fwhOr0KrKy8PpCa54OHogaEjI3w=',
|
||||||
|
'X-Secure-Level': 2,
|
||||||
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
it('can parse response', () => {
|
it('can parse response', () => {
|
||||||
const content =
|
const content = fs.readFileSync(path.resolve(__dirname, '__data__/content.json'))
|
||||||
'<div class="b-livestreaming-daily-schedule__section b-livestreaming-daily-schedule__contents"> <div class="b-livestreaming-daily-schedule__content" id="schedule-content-20211124"> <div class="js-ahoy b-livestreaming-schedule__ahoy-impression" data-ahoy-component="Ahoy::Builder" data-ahoy-impression="true" data-ahoy-title="LIVESTREAMING" data-use-bounding-client-rect="true" ></div><div class="b-livestreaming-daily-schedule__scroll-container"> <a class="" href="/watch/2361692-30-hari-30-juz-24-november-2021" ><div class="b-livestreaming-daily-schedule__item js-ahoy" data-ahoy-click="true" data-ahoy-component="Ahoy::Builder" data-ahoy-props=\'{"section":"schedule","stream_type":"TvStream","livestreaming_id":7464,"schedule_day":-1,"schedule_id":1471806,"schedule_title":"30 Hari 30 Juz","action":"click"}\' data-ahoy-title="LIVESTREAMING" id="schedule-item-1471806" > <div class="b-livestreaming-daily-schedule__item-icon"> <div class="b-livestreaming-daily-schedule__item-icon-play"></div></div><div class="b-livestreaming-daily-schedule__item-content"> <div class="b-livestreaming-daily-schedule__item-content-caption"> 00:30 - 01:30 WIB </div><div class="b-livestreaming-daily-schedule__item-content-title">30 Hari 30 Juz</div></div></div></a ><a class="" href="/watch/2361785-makkah-live-24-november-2021" ><div class="b-livestreaming-daily-schedule__item js-ahoy" data-ahoy-click="true" data-ahoy-component="Ahoy::Builder" data-ahoy-props=\'{"section":"schedule","stream_type":"TvStream","livestreaming_id":7464,"schedule_day":-1,"schedule_id":1471807,"schedule_title":"Makkah Live","action":"click"}\' data-ahoy-title="LIVESTREAMING" id="schedule-item-1471807" > <div class="b-livestreaming-daily-schedule__item-icon"> <div class="b-livestreaming-daily-schedule__item-icon-play"></div></div><div class="b-livestreaming-daily-schedule__item-content"> <div class="b-livestreaming-daily-schedule__item-content-caption"> 01:30 - 04:00 WIB </div><div class="b-livestreaming-daily-schedule__item-content-title">Makkah Live</div></div></div></a ><a class="" href="/watch/2362889-ftv-islami-24-november-2021" ><div class="b-livestreaming-daily-schedule__item js-ahoy" data-ahoy-click="true" data-ahoy-component="Ahoy::Builder" data-ahoy-props=\'{"section":"schedule","stream_type":"TvStream","livestreaming_id":7464,"schedule_day":-1,"schedule_id":1473829,"schedule_title":"FTV Islami","action":"click"}\' data-ahoy-title="LIVESTREAMING" id="schedule-item-1473829" > <div class="b-livestreaming-daily-schedule__item-icon"> <div class="b-livestreaming-daily-schedule__item-icon-play"></div></div><div class="b-livestreaming-daily-schedule__item-content"> <div class="b-livestreaming-daily-schedule__item-content-caption"> 22:30 - 00:30 WIB </div><div class="b-livestreaming-daily-schedule__item-content-title">FTV Islami</div></div></div></a > </div></div><div class="b-livestreaming-daily-schedule__content tab-active" id="schedule-content-20211125"> <div class="js-ahoy b-livestreaming-schedule__ahoy-impression" data-ahoy-component="Ahoy::Builder" data-ahoy-impression="true" data-ahoy-title="LIVESTREAMING" data-use-bounding-client-rect="true" ></div><div class="b-livestreaming-daily-schedule__scroll-container"> <a class="" href="/watch/2362921-30-hari-30-juz-25-november-2021" ><div class="b-livestreaming-daily-schedule__item js-ahoy" data-ahoy-click="true" data-ahoy-component="Ahoy::Builder" data-ahoy-props=\'{"section":"schedule","stream_type":"TvStream","livestreaming_id":7464,"schedule_day":0,"schedule_id":1473830,"schedule_title":"30 Hari 30 Juz","action":"click"}\' data-ahoy-title="LIVESTREAMING" id="schedule-item-1473830" > <div class="b-livestreaming-daily-schedule__item-icon"> <div class="b-livestreaming-daily-schedule__item-icon-play"></div></div><div class="b-livestreaming-daily-schedule__item-content"> <div class="b-livestreaming-daily-schedule__item-content-caption"> 00:30 - 01:30 WIB </div><div class="b-livestreaming-daily-schedule__item-content-title">30 Hari 30 Juz</div></div></div></a > </div></div></div>'
|
const results = parser({ content, channel, date }).map(p => {
|
||||||
const result = parser({ content, date }).map(p => {
|
|
||||||
p.start = p.start.toJSON()
|
p.start = p.start.toJSON()
|
||||||
p.stop = p.stop.toJSON()
|
p.stop = p.stop.toJSON()
|
||||||
return p
|
return p
|
||||||
})
|
})
|
||||||
|
|
||||||
expect(result).toMatchObject([
|
expect(results.length).toBe(21)
|
||||||
{
|
expect(results[0]).toMatchObject({
|
||||||
start: '2021-11-23T17:30:00.000Z',
|
start: '2025-06-30T15:57:00.000Z',
|
||||||
stop: '2021-11-23T18:30:00.000Z',
|
stop: '2025-06-30T17:29:00.000Z',
|
||||||
title: '30 Hari 30 Juz'
|
title: 'Ftv PrimeTime : Cinta Dodol Inilah Yang Membuatku Lengket Padamu',
|
||||||
},
|
description: 'Film televisi yang mengangkat kisah romantisme kehidupan dengan konflik yang menarik. tayang setiap hari'
|
||||||
{
|
})
|
||||||
start: '2021-11-23T18:30:00.000Z',
|
|
||||||
stop: '2021-11-23T21:00:00.000Z',
|
|
||||||
title: 'Makkah Live'
|
|
||||||
},
|
|
||||||
{
|
|
||||||
start: '2021-11-24T15:30:00.000Z',
|
|
||||||
stop: '2021-11-24T17:30:00.000Z',
|
|
||||||
title: 'FTV Islami'
|
|
||||||
}
|
|
||||||
])
|
|
||||||
})
|
})
|
||||||
|
|
||||||
it('can handle empty guide', () => {
|
it('can handle empty guide', () => {
|
||||||
const result = parser({
|
const content = fs.readFileSync(path.resolve(__dirname, '__data__/no_content.json'))
|
||||||
date,
|
const results = parser({ content, channel })
|
||||||
channel,
|
|
||||||
content: '<!DOCTYPE html><html><head></head><body></body></html>'
|
expect(results).toMatchObject([])
|
||||||
})
|
|
||||||
expect(result).toMatchObject([])
|
|
||||||
})
|
})
|
||||||
|
|||||||
Reference in New Issue
Block a user