diff --git a/.github/workflows/_update.yml b/.github/workflows/_update.yml
index 190b532b..1ae0cf67 100644
--- a/.github/workflows/_update.yml
+++ b/.github/workflows/_update.yml
@@ -39,14 +39,11 @@ jobs:
path: scripts/logs
- run: npm run api:update
- run: npm run readme:update
- - run: npm run status:update
- name: Commit Changes
if: ${{ !env.ACT }}
run: |
git add README.md
git commit --allow-empty -m "[Bot] Update README.md"
- git add STATUS.md
- git commit --allow-empty -m "[Bot] Update STATUS.md"
git status
- name: Push to origin
if: ${{ !env.ACT }}
diff --git a/.readme/.gitignore b/.readme/.gitignore
index 7453eaa7..534ce766 100644
--- a/.readme/.gitignore
+++ b/.readme/.gitignore
@@ -1,2 +1 @@
-_countries.md
-_sites.md
\ No newline at end of file
+_guides.md
\ No newline at end of file
diff --git a/.readme/readme.md b/.readme/readme.md
index 678f6939..52e02ac8 100644
--- a/.readme/readme.md
+++ b/.readme/readme.md
@@ -4,14 +4,16 @@
EPG (Electronic Program Guide) for thousands of TV channels collected from different sources.
-## Usage
+## How to use?
To load a program guide, all you need to do is copy the link to one or more of the guides from the list below and paste it into your favorite player.
-
-#include "./.readme/_countries.md"
+## Guides
-All guides also have a compressed and JSON version. To download them, simply change the extension from `.xml` to `.xml.gz` or `.json` respectively.
+All guides also have a compressed and JSON version. To load them just change the extension from `.xml` to `.xml.gz` or `.json` respectively.
+
+
+#include "./.readme/_guides.md"
## Contribution
diff --git a/.readme/status.json b/.readme/status.json
deleted file mode 100644
index 1505b3a8..00000000
--- a/.readme/status.json
+++ /dev/null
@@ -1,4 +0,0 @@
-{
- "build": "STATUS.md",
- "files": ["./.readme/status.md"]
-}
\ No newline at end of file
diff --git a/.readme/status.md b/.readme/status.md
deleted file mode 100644
index 3ee20ea5..00000000
--- a/.readme/status.md
+++ /dev/null
@@ -1,4 +0,0 @@
-# Status
-
-
-#include "./.readme/_sites.md"
diff --git a/STATUS.md b/STATUS.md
deleted file mode 100644
index 7eb2a76a..00000000
--- a/STATUS.md
+++ /dev/null
@@ -1,150 +0,0 @@
-# Status
-
-
-
-
- Site | Status |
-
-
- 9tv.co.il |  |
- abc.net.au |  |
- allente.se |  |
- andorradifusio.ad |  |
- arianaafgtv.com |  |
- arianatelevision.com |  |
- artonline.tv |  |
- astro.com.my |  |
- bein.com |  |
- beinsports.com |  |
- bt.com |  |
- cablego.com.pe |  |
- canalplus-afrique.com |  |
- canalplus-caraibes.com |  |
- canalplus-haiti.com |  |
- canalplus-reunion.com |  |
- canalplus.com |  |
- cgates.lt |  |
- chaines-tv.orange.fr |  |
- clickthecity.com |  |
- compulms.com |  |
- comteco.com.bo |  |
- cosmote.gr |  |
- delta.nl |  |
- digiturk.com.tr |  |
- directv.com.ar |  |
- directv.com.uy |  |
- directv.com |  |
- dishtv.in |  |
- dsmart.com.tr |  |
- dstv.com |  |
- elcinema.com |  |
- epg.i-cable.com |  |
- foxsports.com.au |  |
- frikanalen.no |  |
- gatotv.com |  |
- getafteritmedia.com |  |
- guidatv.sky.it |  |
- guide.dstv.com |  |
- hd-plus.de |  |
- horizon.tv |  |
- i.mjh.nz |  |
- i24news.tv |  |
- ionplustv.com |  |
- ipko.com |  |
- knr.gl |  |
- kvf.fo |  |
- m.tv.sms.cz |  |
- magentatv.at |  |
- magticom.ge |  |
- mako.co.il |  |
- maxtv.hrvatskitelekom.hr |  |
- maxtvgo.mk |  |
- mediaklikk.hu |  |
- mediaset.it |  |
- melita.com |  |
- meo.pt |  |
- mewatch.sg |  |
- mi.tv |  |
- mncvision.id |  |
- movistarplus.es |  |
- mtel.ba |  |
- mts.rs |  |
- mujtvprogram.cz |  |
- musor.tv |  |
- myafn.dodmedia.osd.mil |  |
- mysky.com.ph |  |
- mytvsuper.com |  |
- novacyprus.com |  |
- novasports.gr |  |
- nowplayer.now.com |  |
- ontvtonight.com |  |
- osn.com |  |
- pbsguam.org |  |
- plex.tv |  |
- programacion-tv.elpais.com |  |
- programetv.ro |  |
- programme-tv.net |  |
- programme-tv.vini.pf |  |
- programme.tvb.com |  |
- programtv.onet.pl |  |
- raiplay.it |  |
- reportv.com.ar |  |
- rev.bs |  |
- rthk.hk |  |
- rtmklik.rtm.gov.my |  |
- rtp.pt |  |
- ruv.is |  |
- seezntv.com |  |
- siba.com.co |  |
- sjonvarp.is |  |
- sky.com |  |
- sportsnet.ca |  |
- starhubtvplus.com |  |
- startimestv.com |  |
- tapdmv.com |  |
- telecablesat.fr |  |
- telenet.tv |  |
- teliatv.ee |  |
- telkku.com |  |
- telkussa.fi |  |
- telsu.fi |  |
- tivu.tv |  |
- toonamiaftermath.com |  |
- transvision.co.id |  |
- tv.blue.ch |  |
- tv.cctv.com |  |
- tv.dir.bg |  |
- tv.lv |  |
- tv.mail.ru |  |
- tv.movistar.com.pe |  |
- tv.nu |  |
- tv.trueid.net |  |
- tv.yandex.ru |  |
- tv.yettel.hu |  |
- tv24.co.uk |  |
- tv24.se |  |
- tv2go.t-2.net |  |
- tva.tv |  |
- tvarenasport.com |  |
- tvcubana.icrt.cu |  |
- tvgids.nl |  |
- tvguide.com |  |
- tvguide.myjcom.jp |  |
- tvhebdo.com |  |
- tvheute.at |  |
- tvim.tv |  |
- tvmi.mt |  |
- tvmusor.hu |  |
- tvpassport.com |  |
- tvplus.com.tr |  |
- useetv.com |  |
- vidio.com |  |
- virginmedia.com |  |
- vtm.be |  |
- watchyour.tv |  |
- wavve.com |  |
- xumo.tv |  |
- ziggogo.tv |  |
- znbc.co.zm |  |
-
-
diff --git a/package-lock.json b/package-lock.json
index 71f1182d..96145b04 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -15,7 +15,7 @@
"commander": "^8.2.0",
"csv-parser": "^3.0.0",
"dayjs": "^1.10.8",
- "epg-grabber": "^0.29.5",
+ "epg-grabber": "^0.29.7",
"epg-parser": "^0.2.0",
"form-data": "^4.0.0",
"fs-extra": "^10.0.1",
@@ -2436,9 +2436,9 @@
}
},
"node_modules/epg-grabber": {
- "version": "0.29.5",
- "resolved": "https://registry.npmjs.org/epg-grabber/-/epg-grabber-0.29.5.tgz",
- "integrity": "sha512-HJvziMNM7YDcJnfkIxWm5ulg76T5eH44mxsLL579dfold//QYZgaCKWMQKPNoGVuCW5SMIY7g90d08VC2rZe6w==",
+ "version": "0.29.7",
+ "resolved": "https://registry.npmjs.org/epg-grabber/-/epg-grabber-0.29.7.tgz",
+ "integrity": "sha512-wvjevMnrJD/fr4TaJ0Wh4Y2Kyy0LLQtp+bOEsHFCsF8oe53jUnThOlUYsAT49Sx5v7A6K9GheGxDAXOpLXV67A==",
"dependencies": {
"axios": "^0.21.1",
"axios-cache-interceptor": "^0.10.3",
@@ -8213,9 +8213,9 @@
"integrity": "sha512-oYp7156SP8LkeGD0GF85ad1X9Ai79WtRsZ2gxJqtBuzH+98YUV6jkHEKlZkMbcrjJjIVJNIDP/3WL9wQkoPbWA=="
},
"epg-grabber": {
- "version": "0.29.5",
- "resolved": "https://registry.npmjs.org/epg-grabber/-/epg-grabber-0.29.5.tgz",
- "integrity": "sha512-HJvziMNM7YDcJnfkIxWm5ulg76T5eH44mxsLL579dfold//QYZgaCKWMQKPNoGVuCW5SMIY7g90d08VC2rZe6w==",
+ "version": "0.29.7",
+ "resolved": "https://registry.npmjs.org/epg-grabber/-/epg-grabber-0.29.7.tgz",
+ "integrity": "sha512-wvjevMnrJD/fr4TaJ0Wh4Y2Kyy0LLQtp+bOEsHFCsF8oe53jUnThOlUYsAT49Sx5v7A6K9GheGxDAXOpLXV67A==",
"requires": {
"axios": "^0.21.1",
"axios-cache-interceptor": "^0.10.3",
diff --git a/package.json b/package.json
index f54438de..c5883adb 100644
--- a/package.json
+++ b/package.json
@@ -13,7 +13,6 @@
"api:load": "./scripts/commands/api/load.sh",
"api:update": "node scripts/commands/api/update.js",
"readme:update": "node scripts/commands/readme/update.js",
- "status:update": "node scripts/commands/status/update.js",
"lint": "npx eslint ./scripts/**/*.js",
"test": "TZ=Pacific/Nauru npx jest --runInBand",
"test:commands": "npx jest --runInBand -- commands",
@@ -42,7 +41,7 @@
"commander": "^8.2.0",
"csv-parser": "^3.0.0",
"dayjs": "^1.10.8",
- "epg-grabber": "^0.29.5",
+ "epg-grabber": "^0.29.7",
"epg-parser": "^0.2.0",
"form-data": "^4.0.0",
"fs-extra": "^10.0.1",
diff --git a/scripts/commands/api/update.js b/scripts/commands/api/update.js
index d4161446..98219680 100644
--- a/scripts/commands/api/update.js
+++ b/scripts/commands/api/update.js
@@ -16,6 +16,7 @@ async function main() {
channel: result.channel,
site: result.site,
lang: result.lang,
+ days: result.days,
url: `https://iptv-org.github.io/epg/guides/${result.filename}.xml`
})
}
diff --git a/scripts/commands/guides/update.js b/scripts/commands/guides/update.js
index daecafd9..624c7bb5 100644
--- a/scripts/commands/guides/update.js
+++ b/scripts/commands/guides/update.js
@@ -1,7 +1,6 @@
const { db, api, logger, file, zip } = require('../../core')
const { generateXMLTV, Program, Channel } = require('epg-grabber')
const _ = require('lodash')
-const langs = require('langs')
const PUBLIC_DIR = process.env.PUBLIC_DIR || '.gh-pages'
const LOGS_DIR = process.env.LOGS_DIR || 'scripts/logs'
@@ -9,193 +8,110 @@ const CURR_DATE = process.env.CURR_DATE || new Date()
const logPath = `${LOGS_DIR}/guides/update.log`
-let guides = []
+let api_channels = {}
let db_programs = []
+let guides = []
async function main() {
logger.info(`starting...`)
- logger.info('loading data/countries.json...')
- await api.countries.load()
logger.info('loading data/channels.json...')
await api.channels.load()
- logger.info('loading data/regions.json...')
- await api.regions.load()
- logger.info('loading data/subdivisions.json...')
- await api.subdivisions.load()
- let countries = await api.countries.all()
- let api_channels = await api.channels.all()
-
- let channels_dic = {}
- api_channels.forEach(channel => {
- channels_dic[channel.id] = channel
+ api.channels.all().forEach(channel => {
+ api_channels[channel.id] = channel
})
- let api_regions = await api.regions.all()
- let api_subdivisions = await api.subdivisions.all()
-
logger.info('loading database/programs.db...')
await db.programs.load()
db_programs = await db.programs.find({})
- db_programs = db_programs
- .map(p => {
- if (p.titles.length) {
- p.score = calcScore(p)
- p.lang = p.titles[0].lang
-
- return p
- }
- return null
- })
- .filter(Boolean)
logger.info(`found ${db_programs.length} programs`)
- for (let country of countries) {
- let countryBroadcastCode = `c/${country.code}`
- let countryRegions = api_regions
- .filter(r => r.countries.includes(country.code))
- .map(r => `r/${r.code}`)
- let countrySubdivisions = api_subdivisions
- .filter(s => s.country === country.code)
- .map(s => `s/${s.code}`)
- let broadcastCodes = [countryBroadcastCode, ...countryRegions, ...countrySubdivisions]
+ await generate()
- let countryChannels = api_channels.filter(
- c => _.intersection(c.broadcast_area, broadcastCodes).length
- )
- countryChannels = countryChannels.map(c => c.id)
+ logger.info(`creating ${logPath}...`)
+ await file.create(logPath, guides.map(g => JSON.stringify(g)).join('\r\n'))
- let countryPrograms = db_programs.filter(p => countryChannels.includes(p.channel))
- let langGroups = _.groupBy(countryPrograms, 'lang')
- let countryLanguages = _.uniq([...country.languages, 'eng'])
+ logger.info('finished')
+}
- let programs = {}
- for (let langCode of countryLanguages) {
- const lang = convertLangCode(langCode, '3', '1')
- if (!lang) continue
+main()
- let langPrograms = langGroups[lang]
- if (!langPrograms || !langPrograms.length) continue
+async function generate() {
+ let programs = _.groupBy(db_programs, p =>
+ p.titles.length ? `${p.titles[0].lang}/${p.site}` : `_`
+ )
- let channelGroups = _.groupBy(langPrograms, 'channel')
- for (let channel in channelGroups) {
- if (programs[channel]) continue
- let groupedPrograms = channelGroups[channel]
- let channelPrograms = getChannelPrograms(groupedPrograms)
- if (!channelPrograms.length) continue
+ delete programs['_']
- programs[channel] = channelPrograms
- }
- }
-
- programs = _.flatten(Object.values(programs))
-
- if (!programs.length) continue
-
- let channels = programs.map(p => {
- let c = channels_dic[p.channel]
- c.site = p.site
- c.lang = p.lang
-
- return new Channel(c)
- })
- channels = _.sortBy(channels, 'id')
- channels = _.uniqBy(channels, 'id')
-
- programs = _.sortBy(programs, ['channel', 'start'])
- programs = programs.map(p => new Program(p, new Channel(channels_dic[p.channel])))
- programs = _.uniqBy(programs, p => p.channel + p.start)
-
- const filename = country.code.toLowerCase()
- const xmlFilepath = `${PUBLIC_DIR}/guides/${filename}.xml`
- const gzFilepath = `${PUBLIC_DIR}/guides/${filename}.xml.gz`
- const jsonFilepath = `${PUBLIC_DIR}/guides/${filename}.json`
- logger.info(`creating ${xmlFilepath}...`)
- const xmltv = generateXMLTV({
- channels,
- programs,
- date: CURR_DATE
- })
- await file.create(xmlFilepath, xmltv)
- logger.info(`creating ${gzFilepath}...`)
- const compressed = await zip.compress(xmltv)
- await file.create(gzFilepath, compressed)
- logger.info(`creating ${jsonFilepath}...`)
- await file.create(jsonFilepath, JSON.stringify({ channels, programs }))
+ for (let filename in programs) {
+ let { channels } = await save(filename, programs[filename])
for (let channel of channels) {
+ const configPath = `sites/${channel.site}/${channel.site}.config.js`
+ const config = require(file.resolve(configPath))
+
guides.push({
- country: country.code,
- lang: channel.lang,
site: channel.site,
+ lang: channel.lang,
+ days: config.days,
channel: channel.id,
filename
})
}
}
-
- logger.info(`creating ${logPath}...`)
- await file.create(logPath, guides.map(g => JSON.stringify(g)).join('\r\n'))
-
- await makeReport()
}
-main()
-
-function convertLangCode(code, from, to) {
- let found = langs.where(from, code)
-
- return found ? found[to] : null
-}
-
-function getChannelPrograms(programs) {
- let sites = _.groupBy(programs, 'site')
-
- let topScore = 0
- let selected
- for (let site in sites) {
- let sitePrograms = sites[site]
- let siteScore = _.sumBy(sitePrograms, 'score')
-
- if (siteScore > topScore) {
- selected = site
- topScore = siteScore
- }
+async function save(filepath, programs) {
+ let output = {
+ channels: [],
+ programs: [],
+ date: CURR_DATE
}
- return sites[selected] || []
-}
+ for (let programData of programs) {
+ let channelData = api_channels[programData.channel]
+ channelData.site = programData.site
+ channelData.lang = programData.titles[0].lang
-function calcScore(program) {
- let score = 0
- let values = Object.values(program)
- for (let value of values) {
- if (Array.isArray(value) && value.length) {
- score++
- } else if (typeof value === 'string' && value) {
- score++
- } else if (value && typeof value === 'object' && Object.values(value).map(Boolean).length) {
- score++
- }
+ let channel = new Channel(channelData)
+ let program = new Program(programData, channel)
+
+ output.channels.push(channel)
+ output.programs.push(program)
}
- return score
+ output.channels = _.sortBy(output.channels, 'id')
+ output.channels = _.uniqBy(output.channels, 'id')
+
+ output.programs = _.sortBy(output.programs, ['channel', 'start'])
+ output.programs = _.uniqBy(output.programs, p => p.channel + p.start)
+
+ const xmlFilepath = `${PUBLIC_DIR}/guides/${filepath}.xml`
+ const gzFilepath = `${PUBLIC_DIR}/guides/${filepath}.xml.gz`
+ const jsonFilepath = `${PUBLIC_DIR}/guides/${filepath}.json`
+ logger.info(`creating ${xmlFilepath}...`)
+ const xmltv = generateXMLTV(output)
+ await file.create(xmlFilepath, xmltv)
+ logger.info(`creating ${gzFilepath}...`)
+ const compressed = await zip.compress(xmltv)
+ await file.create(gzFilepath, compressed)
+ logger.info(`creating ${jsonFilepath}...`)
+ await file.create(jsonFilepath, JSON.stringify(output))
+
+ return output
}
-async function makeReport() {
- const errors = []
+// function merge(p1, p2) {
+// for (let prop in p1) {
+// if (Array.isArray(p1[prop])) {
+// p1[prop] = _.orderBy(
+// _.uniqWith(p1[prop].concat(p2[prop]), _.isEqual),
+// v => (v.lang === 'en' ? Infinity : 1),
+// 'desc'
+// )
+// }
+// }
- let programs = _.uniqBy(db_programs, p => p.site + p.channel)
- for (let program of programs) {
- if (!guides.find(g => g.channel === program.channel)) {
- const channel = await api.channels.find({ id: program.channel })
- errors.push({ type: 'no_guide', ...program, ...channel })
- }
- }
-
- console.log()
- logger.info(`report:`)
- console.table(errors, ['type', 'site', 'lang', 'channel', 'broadcast_area', 'languages'])
- logger.error(`found ${errors.length} error(s)`)
-}
+// return p1
+// }
diff --git a/scripts/commands/queue/create.js b/scripts/commands/queue/create.js
index 892fbc16..dd2ae06a 100644
--- a/scripts/commands/queue/create.js
+++ b/scripts/commands/queue/create.js
@@ -9,11 +9,11 @@ const options = program
parser.parseNumber,
256
)
- .option('--days ', 'Number of days for which to grab the program', parser.parseNumber, 1)
.parse(process.argv)
.opts()
const CHANNELS_PATH = process.env.CHANNELS_PATH || 'sites/**/*.channels.xml'
+const CURR_DATE = process.env.CURR_DATE || new Date()
async function main() {
logger.info('Starting...')
@@ -33,8 +33,7 @@ async function createQueue() {
await api.channels.load().catch(console.error)
const files = await file.list(CHANNELS_PATH).catch(console.error)
- const utcDate = date.getUTC()
- const dates = Array.from({ length: options.days }, (_, i) => utcDate.add(i, 'd'))
+ const utcDate = date.getUTC(CURR_DATE)
for (const filepath of files) {
try {
const dir = file.dirname(filepath)
@@ -44,6 +43,8 @@ async function createQueue() {
const config = require(file.resolve(configPath))
if (config.skip) continue
const filename = file.basename(filepath)
+ const days = config.days || 1
+ const dates = Array.from({ length: days }, (_, i) => utcDate.add(i, 'd'))
for (const channel of channels) {
if (!channel.site || !channel.id) continue
const found = api.channels.find({ id: channel.id })
diff --git a/scripts/commands/readme/update.js b/scripts/commands/readme/update.js
index 157ed92d..fb9a8196 100644
--- a/scripts/commands/readme/update.js
+++ b/scripts/commands/readme/update.js
@@ -1,5 +1,6 @@
const { file, markdown, parser, logger, api, table } = require('../../core')
const { program } = require('commander')
+const langs = require('langs')
const _ = require('lodash')
const LOGS_DIR = process.env.LOGS_DIR || 'scripts/logs'
@@ -12,55 +13,70 @@ const options = program
async function main() {
await api.countries.load().catch(console.error)
const logPath = `${LOGS_DIR}/guides/update.log`
- let results = await parser.parseLogs(logPath)
- let files = results.reduce((acc, curr) => {
- if (acc[curr.filename]) {
- acc[curr.filename].channels++
- } else {
- acc[curr.filename] = {
- country: curr.country,
- channels: 1,
- filename: curr.filename
- }
- }
+ let log = await parser.parseLogs(logPath)
- return acc
- }, {})
-
- let data = []
- for (const filename in files) {
- const item = files[filename]
- const country = api.countries.find({ code: item.country })
- if (!country) continue
-
- data.push([
- country.name,
- `${country.flag} ${country.name}`,
- item.channels,
- `https://iptv-org.github.io/epg/guides/${filename}.xml
`
- ])
- }
-
- data = _.orderBy(
- data,
- [item => item[0], item => (item[3].includes('_en') ? Infinity : item[2])],
- ['asc', 'desc']
- )
- data = data.map(i => {
- i.shift()
- return i
- })
- data = Object.values(_.groupBy(data, item => item[0]))
-
- const output = table.create(data, ['Country', 'Channels', 'EPG'])
-
- await file.create('./.readme/_countries.md', output)
+ await createTable(log)
await updateReadme()
}
main()
+async function createTable(log) {
+ let files = log.reduce((acc, curr) => {
+ if (!acc[curr.filename]) {
+ acc[curr.filename] = {
+ site: curr.site,
+ lang: curr.lang,
+ channels: 0,
+ filename: curr.filename
+ }
+ }
+
+ acc[curr.filename].channels++
+
+ return acc
+ }, {})
+
+ let groups = {}
+ for (const filename in files) {
+ const item = files[filename]
+ const lang = langs.where('1', item.lang)
+
+ if (!lang) continue
+
+ if (!groups[lang.name]) groups[lang.name] = { lang: lang.name, data: [] }
+
+ groups[lang.name].data.push([
+ `${item.site}`,
+ item.channels,
+ `https://iptv-org.github.io/epg/guides/${filename}.xml
`,
+ `
`
+ ])
+ }
+
+ groups = _.sortBy(Object.values(groups), 'lang')
+
+ let guides = ''
+ for (let group of groups) {
+ let lang = group.lang
+ let data = group.data
+
+ data = _.orderBy(data, [item => item[0], item => item[1]], ['asc', 'desc'])
+ data = Object.values(_.groupBy(data, item => item[0]))
+
+ guides += `### ${lang}\r\n\r\n`
+ guides += table.create(data, [
+ 'Site',
+ 'Channels',
+ 'EPG',
+ 'Status '
+ ])
+ guides += `\r\n\r\n`
+ }
+ await file.create('./.readme/_guides.md', guides)
+}
+
async function updateReadme() {
logger.info('updating readme.md...')
diff --git a/scripts/commands/status/update.js b/scripts/commands/status/update.js
deleted file mode 100644
index b7db23d5..00000000
--- a/scripts/commands/status/update.js
+++ /dev/null
@@ -1,52 +0,0 @@
-const { file, markdown, logger, table } = require('../../core')
-const { program } = require('commander')
-const _ = require('lodash')
-
-const CONFIGS_PATH = process.env.CONFIGS_PATH || 'sites/**/*.config.js'
-
-const options = program
- .option('-c, --config ', 'Set path to config file', '.readme/status.json')
- .parse(process.argv)
- .opts()
-
-async function main() {
- let data = []
-
- const files = await file.list(CONFIGS_PATH).catch(console.error)
- for (const filepath of files) {
- try {
- const { site, skip } = require(file.resolve(filepath))
-
- if (skip) continue
-
- data.push([
- site,
- `
`
- ])
- } catch (err) {
- console.error(err)
- continue
- }
- }
-
- data = Object.values(_.groupBy(data, item => item[0]))
-
- const output = table.create(data, [
- 'Site',
- 'Status '
- ])
-
- await file.create('./.readme/_sites.md', output)
-
- await updateMarkdown()
-}
-
-main()
-
-async function updateMarkdown() {
- logger.info('updating status.md...')
-
- const config = require(file.resolve(options.config))
- await file.createDir(file.dirname(config.build))
- await markdown.compile(options.config)
-}
diff --git a/sites/9tv.co.il/9tv.co.il.config.js b/sites/9tv.co.il/9tv.co.il.config.js
index 32c77e37..418d3c55 100644
--- a/sites/9tv.co.il/9tv.co.il.config.js
+++ b/sites/9tv.co.il/9tv.co.il.config.js
@@ -10,6 +10,7 @@ dayjs.extend(customParseFormat)
module.exports = {
site: '9tv.co.il',
+ days: 2,
url: function ({ date }) {
return `https://www.9tv.co.il/BroadcastSchedule/getBrodcastSchedule?date=${date.format(
'DD/MM/YYYY 00:00:00'
diff --git a/sites/abc.net.au/abc.net.au.config.js b/sites/abc.net.au/abc.net.au.config.js
index a95f51a9..130b6b05 100644
--- a/sites/abc.net.au/abc.net.au.config.js
+++ b/sites/abc.net.au/abc.net.au.config.js
@@ -9,6 +9,7 @@ dayjs.extend(customParseFormat)
module.exports = {
site: 'abc.net.au',
+ days: 2,
request: {
cache: {
ttl: 60 * 60 * 1000 // 1 hour
diff --git a/sites/allente.se/allente.se.config.js b/sites/allente.se/allente.se.config.js
index 9cb6b02b..f2373b0f 100644
--- a/sites/allente.se/allente.se.config.js
+++ b/sites/allente.se/allente.se.config.js
@@ -3,6 +3,7 @@ const dayjs = require('dayjs')
module.exports = {
site: 'allente.se',
+ days: 2,
url({ date, channel }) {
const [country] = channel.site_id.split('#')
diff --git a/sites/andorradifusio.ad/andorradifusio.ad.config.js b/sites/andorradifusio.ad/andorradifusio.ad.config.js
index c0963966..7ab7664f 100644
--- a/sites/andorradifusio.ad/andorradifusio.ad.config.js
+++ b/sites/andorradifusio.ad/andorradifusio.ad.config.js
@@ -11,6 +11,7 @@ dayjs.extend(customParseFormat)
module.exports = {
site: 'andorradifusio.ad',
+ days: 2,
url({ channel }) {
return `https://www.andorradifusio.ad/programacio/${channel.site_id}`
},
diff --git a/sites/arianaafgtv.com/arianaafgtv.com.config.js b/sites/arianaafgtv.com/arianaafgtv.com.config.js
index c3eaab17..67e00e73 100644
--- a/sites/arianaafgtv.com/arianaafgtv.com.config.js
+++ b/sites/arianaafgtv.com/arianaafgtv.com.config.js
@@ -10,6 +10,7 @@ dayjs.extend(customParseFormat)
module.exports = {
site: 'arianaafgtv.com',
+ days: 2,
url() {
return `https://www.arianaafgtv.com/index.html`
},
diff --git a/sites/arianatelevision.com/arianatelevision.com.config.js b/sites/arianatelevision.com/arianatelevision.com.config.js
index bcd6bd00..ced078c4 100644
--- a/sites/arianatelevision.com/arianatelevision.com.config.js
+++ b/sites/arianatelevision.com/arianatelevision.com.config.js
@@ -10,6 +10,7 @@ dayjs.extend(customParseFormat)
module.exports = {
site: 'arianatelevision.com',
+ days: 2,
url: `https://www.arianatelevision.com/program-schedule/`,
parser({ content, date }) {
const programs = []
diff --git a/sites/artonline.tv/artonline.tv.config.js b/sites/artonline.tv/artonline.tv.config.js
index f5980dc8..3ea3eac6 100644
--- a/sites/artonline.tv/artonline.tv.config.js
+++ b/sites/artonline.tv/artonline.tv.config.js
@@ -9,6 +9,7 @@ dayjs.extend(utc)
module.exports = {
site: 'artonline.tv',
+ days: 2,
url: function ({ channel }) {
return `https://www.artonline.tv/Home/Tvlist${channel.site_id}`
},
diff --git a/sites/astro.com.my/astro.com.my.config.js b/sites/astro.com.my/astro.com.my.config.js
index 5e0d4920..a739f38b 100644
--- a/sites/astro.com.my/astro.com.my.config.js
+++ b/sites/astro.com.my/astro.com.my.config.js
@@ -8,6 +8,7 @@ const API_ENDPOINT = `https://contenthub-api.eco.astro.com.my`
module.exports = {
site: 'astro.com.my',
+ days: 2,
url: function ({ channel }) {
return `${API_ENDPOINT}/channel/${channel.site_id}.json`
},
diff --git a/sites/bein.com/bein.com.config.js b/sites/bein.com/bein.com.config.js
index aaa2949c..5131a645 100644
--- a/sites/bein.com/bein.com.config.js
+++ b/sites/bein.com/bein.com.config.js
@@ -10,6 +10,7 @@ dayjs.extend(customParseFormat)
module.exports = {
site: 'bein.com',
+ days: 2,
url: function ({ date, channel }) {
const [index] = channel.site_id.split('#')
diff --git a/sites/beinsports.com/beinsports.com.config.js b/sites/beinsports.com/beinsports.com.config.js
index 4d4d801b..deabaa1a 100644
--- a/sites/beinsports.com/beinsports.com.config.js
+++ b/sites/beinsports.com/beinsports.com.config.js
@@ -11,6 +11,7 @@ dayjs.extend(customParseFormat)
module.exports = {
site: 'beinsports.com',
+ days: 2,
request: {
cache: {
ttl: 60 * 60 * 1000, // 1h
diff --git a/sites/bt.com/bt.com.config.js b/sites/bt.com/bt.com.config.js
index 3154cd69..297bd80c 100644
--- a/sites/bt.com/bt.com.config.js
+++ b/sites/bt.com/bt.com.config.js
@@ -2,6 +2,7 @@ const dayjs = require('dayjs')
module.exports = {
site: 'bt.com',
+ days: 2,
url: function ({ date, channel }) {
return `https://voila.metabroadcast.com/4/schedules/${
channel.site_id
diff --git a/sites/cablego.com.pe/cablego.com.pe.config.js b/sites/cablego.com.pe/cablego.com.pe.config.js
index 3a270ef5..1bc9eba5 100644
--- a/sites/cablego.com.pe/cablego.com.pe.config.js
+++ b/sites/cablego.com.pe/cablego.com.pe.config.js
@@ -11,6 +11,7 @@ dayjs.extend(customParseFormat)
module.exports = {
site: 'cablego.com.pe',
+ days: 2,
request: {
method: 'POST',
headers: {
diff --git a/sites/canalplus-afrique.com/canalplus-afrique.com.config.js b/sites/canalplus-afrique.com/canalplus-afrique.com.config.js
index 7b31a2f0..afc50fff 100644
--- a/sites/canalplus-afrique.com/canalplus-afrique.com.config.js
+++ b/sites/canalplus-afrique.com/canalplus-afrique.com.config.js
@@ -7,6 +7,7 @@ dayjs.extend(utc)
module.exports = {
site: 'canalplus-afrique.com',
+ days: 2,
url: function ({ channel, date }) {
const diff = date.diff(dayjs.utc().startOf('d'), 'd')
diff --git a/sites/canalplus-caraibes.com/canalplus-caraibes.com.config.js b/sites/canalplus-caraibes.com/canalplus-caraibes.com.config.js
index e287d75e..7740f79b 100644
--- a/sites/canalplus-caraibes.com/canalplus-caraibes.com.config.js
+++ b/sites/canalplus-caraibes.com/canalplus-caraibes.com.config.js
@@ -7,6 +7,7 @@ dayjs.extend(utc)
module.exports = {
site: 'canalplus-caraibes.com',
+ days: 2,
url: function ({ channel, date }) {
const diff = date.diff(dayjs.utc().startOf('d'), 'd')
diff --git a/sites/canalplus-haiti.com/canalplus-haiti.com.config.js b/sites/canalplus-haiti.com/canalplus-haiti.com.config.js
index 93ab1a6b..89279868 100644
--- a/sites/canalplus-haiti.com/canalplus-haiti.com.config.js
+++ b/sites/canalplus-haiti.com/canalplus-haiti.com.config.js
@@ -7,6 +7,7 @@ dayjs.extend(utc)
module.exports = {
site: 'canalplus-haiti.com',
+ days: 2,
url: function ({ channel, date }) {
const diff = date.diff(dayjs.utc().startOf('d'), 'd')
diff --git a/sites/canalplus-reunion.com/canalplus-reunion.com.config.js b/sites/canalplus-reunion.com/canalplus-reunion.com.config.js
index faea08c4..218e8333 100644
--- a/sites/canalplus-reunion.com/canalplus-reunion.com.config.js
+++ b/sites/canalplus-reunion.com/canalplus-reunion.com.config.js
@@ -6,6 +6,7 @@ dayjs.extend(utc)
module.exports = {
site: 'canalplus-reunion.com',
+ days: 2,
url: function ({ channel, date }) {
const diff = date.diff(dayjs.utc().startOf('d'), 'd')
diff --git a/sites/canalplus.com/canalplus.com.config.js b/sites/canalplus.com/canalplus.com.config.js
index c920c7df..3123917e 100644
--- a/sites/canalplus.com/canalplus.com.config.js
+++ b/sites/canalplus.com/canalplus.com.config.js
@@ -9,6 +9,7 @@ const API_KEY = 'da2291af3b10e9900d1c55e1a65d3388' // 10.2022
module.exports = {
site: 'canalplus.com',
+ days: 2,
url: function ({ channel, date }) {
const diff = date.diff(dayjs.utc().startOf('d'), 'd')
diff --git a/sites/cgates.lt/cgates.lt.config.js b/sites/cgates.lt/cgates.lt.config.js
index c61916b4..6251a3cc 100644
--- a/sites/cgates.lt/cgates.lt.config.js
+++ b/sites/cgates.lt/cgates.lt.config.js
@@ -11,6 +11,7 @@ dayjs.extend(customParseFormat)
module.exports = {
site: 'cgates.lt',
+ days: 2,
url: function ({ channel }) {
return `https://www.cgates.lt/tv-kanalai/${channel.site_id}/`
},
diff --git a/sites/chaines-tv.orange.fr/chaines-tv.orange.fr.config.js b/sites/chaines-tv.orange.fr/chaines-tv.orange.fr.config.js
index be4ecc2f..7f8c46a2 100644
--- a/sites/chaines-tv.orange.fr/chaines-tv.orange.fr.config.js
+++ b/sites/chaines-tv.orange.fr/chaines-tv.orange.fr.config.js
@@ -2,6 +2,7 @@ const dayjs = require('dayjs')
module.exports = {
site: 'chaines-tv.orange.fr',
+ days: 2,
url({ channel, date }) {
return `https://rp-ott-mediation-tv.woopic.com/api-gw/live/v3/applications/STB4PC/programs?groupBy=channel&includeEmptyChannels=false&period=${date.valueOf()},${date
.add(1, 'd')
diff --git a/sites/clickthecity.com/clickthecity.com.config.js b/sites/clickthecity.com/clickthecity.com.config.js
index 366faa08..64cfc26b 100644
--- a/sites/clickthecity.com/clickthecity.com.config.js
+++ b/sites/clickthecity.com/clickthecity.com.config.js
@@ -11,6 +11,7 @@ dayjs.extend(customParseFormat)
module.exports = {
site: 'clickthecity.com',
+ days: 2,
url({ channel }) {
return `https://www.clickthecity.com/tv/network/${channel.site_id}`
},
diff --git a/sites/compulms.com/compulms.com.config.js b/sites/compulms.com/compulms.com.config.js
index 03d551b1..c6202a48 100644
--- a/sites/compulms.com/compulms.com.config.js
+++ b/sites/compulms.com/compulms.com.config.js
@@ -2,6 +2,7 @@ const parser = require('epg-parser')
module.exports = {
site: 'compulms.com',
+ days: 2,
request: {
cache: {
ttl: 60 * 60 * 1000 // 1 hour
diff --git a/sites/comteco.com.bo/comteco.com.bo.config.js b/sites/comteco.com.bo/comteco.com.bo.config.js
index 0807c578..04fbc5c8 100644
--- a/sites/comteco.com.bo/comteco.com.bo.config.js
+++ b/sites/comteco.com.bo/comteco.com.bo.config.js
@@ -10,6 +10,7 @@ dayjs.extend(customParseFormat)
module.exports = {
site: 'comteco.com.bo',
+ days: 2,
url: function ({ channel }) {
return `https://comteco.com.bo/pages/canales-y-programacion-tv/paquete-oro/${channel.site_id}`
},
diff --git a/sites/cosmote.gr/cosmote.gr.config.js b/sites/cosmote.gr/cosmote.gr.config.js
index 9b803ee0..bac80985 100644
--- a/sites/cosmote.gr/cosmote.gr.config.js
+++ b/sites/cosmote.gr/cosmote.gr.config.js
@@ -10,6 +10,7 @@ dayjs.extend(customParseFormat)
module.exports = {
site: 'cosmote.gr',
+ days: 2,
url: function ({ date, channel }) {
return `https://www.cosmote.gr/cosmotetv/residential/program/epg/programchannel?p_p_id=channelprogram_WAR_OTETVportlet&p_p_lifecycle=0&_channelprogram_WAR_OTETVportlet_platform=IPTV&_channelprogram_WAR_OTETVportlet_date=${date.format(
'DD-MM-YYYY'
diff --git a/sites/delta.nl/delta.nl.config.js b/sites/delta.nl/delta.nl.config.js
index 90cbfbf1..f37c26a9 100644
--- a/sites/delta.nl/delta.nl.config.js
+++ b/sites/delta.nl/delta.nl.config.js
@@ -3,6 +3,7 @@ const dayjs = require('dayjs')
module.exports = {
site: 'delta.nl',
+ days: 2,
url: function ({ channel, date }) {
return `https://clientapi.tv.delta.nl/guide/channels/list?start=${date.unix()}&end=${date
.add(1, 'd')
diff --git a/sites/digiturk.com.tr/digiturk.com.tr.config.js b/sites/digiturk.com.tr/digiturk.com.tr.config.js
index df7ddfab..0a8699b7 100644
--- a/sites/digiturk.com.tr/digiturk.com.tr.config.js
+++ b/sites/digiturk.com.tr/digiturk.com.tr.config.js
@@ -8,6 +8,7 @@ dayjs.extend(timezone)
module.exports = {
site: 'digiturk.com.tr',
+ days: 2,
url: function ({ date, channel }) {
return `https://www.digiturk.com.tr/yayin-akisi/api/program/kanal/${
channel.site_id
diff --git a/sites/directv.com.ar/directv.com.ar.config.js b/sites/directv.com.ar/directv.com.ar.config.js
index 27113b93..cec99860 100644
--- a/sites/directv.com.ar/directv.com.ar.config.js
+++ b/sites/directv.com.ar/directv.com.ar.config.js
@@ -11,6 +11,7 @@ dayjs.extend(customParseFormat)
module.exports = {
site: 'directv.com.ar',
+ days: 2,
url: `https://www.directv.com.ar/guia/ChannelDetail.aspx/GetProgramming`,
request: {
method: 'POST',
diff --git a/sites/directv.com.uy/directv.com.uy.config.js b/sites/directv.com.uy/directv.com.uy.config.js
index 591aa038..c03263a3 100644
--- a/sites/directv.com.uy/directv.com.uy.config.js
+++ b/sites/directv.com.uy/directv.com.uy.config.js
@@ -10,6 +10,7 @@ dayjs.extend(customParseFormat)
module.exports = {
site: 'directv.com.uy',
+ days: 2,
url: `https://www.directv.com.uy/guia/ChannelDetail.aspx/GetProgramming`,
request: {
method: 'POST',
diff --git a/sites/directv.com/directv.com.config.js b/sites/directv.com/directv.com.config.js
index eea5d45d..c07b3592 100644
--- a/sites/directv.com/directv.com.config.js
+++ b/sites/directv.com/directv.com.config.js
@@ -8,6 +8,7 @@ dayjs.extend(utc)
module.exports = {
site: 'directv.com',
+ days: 2,
url({ channel, date }) {
return `https://www.directv.com/json/channelschedule?channels=${
channel.site_id
diff --git a/sites/dishtv.in/dishtv.in.config.js b/sites/dishtv.in/dishtv.in.config.js
index fb2cb0d2..955ada01 100644
--- a/sites/dishtv.in/dishtv.in.config.js
+++ b/sites/dishtv.in/dishtv.in.config.js
@@ -10,6 +10,7 @@ dayjs.extend(customParseFormat)
module.exports = {
site: 'dishtv.in',
+ days: 2,
url: `https://www.dishtv.in/WhatsonIndiaWebService.asmx/LoadPagginResultDataForProgram`,
request: {
method: 'POST',
diff --git a/sites/dsmart.com.tr/dsmart.com.tr.config.js b/sites/dsmart.com.tr/dsmart.com.tr.config.js
index 397eaaa3..adc93726 100644
--- a/sites/dsmart.com.tr/dsmart.com.tr.config.js
+++ b/sites/dsmart.com.tr/dsmart.com.tr.config.js
@@ -5,6 +5,7 @@ dayjs.extend(utc)
module.exports = {
site: 'dsmart.com.tr',
+ days: 2,
url({ date, channel }) {
return `https://www.dsmart.com.tr/api/v1/public/epg/schedules?page=1&limit=500&day=${date.format(
'YYYY-MM-DD'
diff --git a/sites/dstv.com/dstv.com.config.js b/sites/dstv.com/dstv.com.config.js
index c3f1d13d..a53b6103 100644
--- a/sites/dstv.com/dstv.com.config.js
+++ b/sites/dstv.com/dstv.com.config.js
@@ -12,6 +12,7 @@ const API_ENDPOINT = 'https://www.dstv.com/umbraco/api/TvGuide'
module.exports = {
site: 'dstv.com',
+ days: 2,
request: {
cache: {
ttl: 3 * 60 * 60 * 1000, // 3h
diff --git a/sites/elcinema.com/elcinema.com.config.js b/sites/elcinema.com/elcinema.com.config.js
index 3a1639ca..878362f9 100644
--- a/sites/elcinema.com/elcinema.com.config.js
+++ b/sites/elcinema.com/elcinema.com.config.js
@@ -11,6 +11,7 @@ dayjs.extend(utc)
module.exports = {
site: 'elcinema.com',
+ days: 2,
url({ channel }) {
const lang = channel.lang === 'en' ? 'en/' : '/'
diff --git a/sites/epg.i-cable.com/epg.i-cable.com.config.js b/sites/epg.i-cable.com/epg.i-cable.com.config.js
index 36c11aa2..2dd92443 100644
--- a/sites/epg.i-cable.com/epg.i-cable.com.config.js
+++ b/sites/epg.i-cable.com/epg.i-cable.com.config.js
@@ -12,6 +12,7 @@ const API_ENDPOINT = 'http://epg.i-cable.com/ci/channel'
module.exports = {
site: 'epg.i-cable.com',
+ days: 2,
request: {
cache: {
ttl: 60 * 60 * 1000 // 1h
diff --git a/sites/foxsports.com.au/foxsports.com.au.config.js b/sites/foxsports.com.au/foxsports.com.au.config.js
index d55a572c..a5a84103 100644
--- a/sites/foxsports.com.au/foxsports.com.au.config.js
+++ b/sites/foxsports.com.au/foxsports.com.au.config.js
@@ -2,6 +2,7 @@ const dayjs = require('dayjs')
module.exports = {
site: 'foxsports.com.au',
+ days: 2,
request: {
cache: {
ttl: 60 * 60 * 1000 // 1 hour
diff --git a/sites/foxtel.com.au/foxtel.com.au.config.js b/sites/foxtel.com.au/foxtel.com.au.config.js
index 687c9b46..a93699b1 100644
--- a/sites/foxtel.com.au/foxtel.com.au.config.js
+++ b/sites/foxtel.com.au/foxtel.com.au.config.js
@@ -5,6 +5,7 @@ const cheerio = require('cheerio')
module.exports = {
skip: true, // returns "Access Denied" or nothing
site: 'foxtel.com.au',
+ days: 2,
url({ channel, date }) {
return `https://www.foxtel.com.au/tv-guide/channel/${channel.site_id}/${date.format(
'YYYY/MM/DD'
diff --git a/sites/frikanalen.no/frikanalen.no.config.js b/sites/frikanalen.no/frikanalen.no.config.js
index 46961c64..e66a6efe 100644
--- a/sites/frikanalen.no/frikanalen.no.config.js
+++ b/sites/frikanalen.no/frikanalen.no.config.js
@@ -2,6 +2,7 @@ const dayjs = require('dayjs')
module.exports = {
site: 'frikanalen.no',
+ days: 2,
url({ date }) {
return `https://frikanalen.no/api/scheduleitems/?date=${date.format(
'YYYY-MM-DD'
diff --git a/sites/gatotv.com/gatotv.com.config.js b/sites/gatotv.com/gatotv.com.config.js
index 212a33fd..2e8bb216 100644
--- a/sites/gatotv.com/gatotv.com.config.js
+++ b/sites/gatotv.com/gatotv.com.config.js
@@ -9,6 +9,7 @@ dayjs.extend(timezone)
module.exports = {
site: 'gatotv.com',
+ days: 2,
url: function ({ channel, date }) {
return `https://www.gatotv.com/canal/${channel.site_id}/${date.format('YYYY-MM-DD')}`
},
diff --git a/sites/getafteritmedia.com/getafteritmedia.com.config.js b/sites/getafteritmedia.com/getafteritmedia.com.config.js
index 5faffbb3..5fdcaed4 100644
--- a/sites/getafteritmedia.com/getafteritmedia.com.config.js
+++ b/sites/getafteritmedia.com/getafteritmedia.com.config.js
@@ -13,6 +13,7 @@ dayjs.extend(isoWeek)
module.exports = {
site: 'getafteritmedia.com',
+ days: 2,
url: 'https://docs.google.com/spreadsheets/d/e/2PACX-1vQcDmb9OnO0HpbjINfGaepqgGTp3VSmPs7hs654n3sRKrq4Q9y6uPSEvVvq9MwTLYG_n_V7vh0rFYP9/pubhtml',
parser({ content, channel, date }) {
const programs = []
diff --git a/sites/guidatv.sky.it/guidatv.sky.it.config.js b/sites/guidatv.sky.it/guidatv.sky.it.config.js
index a65741bd..d3f5dcf5 100644
--- a/sites/guidatv.sky.it/guidatv.sky.it.config.js
+++ b/sites/guidatv.sky.it/guidatv.sky.it.config.js
@@ -2,6 +2,7 @@ const dayjs = require('dayjs')
module.exports = {
site: 'guidatv.sky.it',
+ days: 2,
url: function ({ date, channel }) {
const [env, id] = channel.site_id.split('#')
return `https://apid.sky.it/gtv/v1/events?from=${date.format('YYYY-MM-DD')}T00:00:00Z&to=${date
diff --git a/sites/guide.dstv.com/guide.dstv.com.config.js b/sites/guide.dstv.com/guide.dstv.com.config.js
index e41a8c48..4c0642ce 100644
--- a/sites/guide.dstv.com/guide.dstv.com.config.js
+++ b/sites/guide.dstv.com/guide.dstv.com.config.js
@@ -9,6 +9,7 @@ dayjs.extend(customParseFormat)
module.exports = {
site: 'guide.dstv.com',
+ days: 2,
request: {
cache: {
ttl: 60 * 60 * 1000,
diff --git a/sites/hd-plus.de/hd-plus.de.config.js b/sites/hd-plus.de/hd-plus.de.config.js
index ad2b1fe7..9b960271 100644
--- a/sites/hd-plus.de/hd-plus.de.config.js
+++ b/sites/hd-plus.de/hd-plus.de.config.js
@@ -10,6 +10,7 @@ dayjs.extend(customParseFormat)
module.exports = {
site: 'hd-plus.de',
+ days: 2,
url({ date, channel }) {
const today = dayjs().utc().startOf('d')
const day = date.diff(today, 'd')
diff --git a/sites/horizon.tv/horizon.tv.config.js b/sites/horizon.tv/horizon.tv.config.js
index 95d40d80..9eb82a18 100644
--- a/sites/horizon.tv/horizon.tv.config.js
+++ b/sites/horizon.tv/horizon.tv.config.js
@@ -5,6 +5,7 @@ const API_ENDPOINT = `https://legacy-static.oesp.horizon.tv/oesp/v4`
module.exports = {
site: 'horizon.tv',
+ days: 2,
url: function ({ date, channel }) {
const [country, lang] = channel.site_id.split('#')
diff --git a/sites/i.mjh.nz/i.mjh.nz.config.js b/sites/i.mjh.nz/i.mjh.nz.config.js
index 6b6b7469..35180317 100644
--- a/sites/i.mjh.nz/i.mjh.nz.config.js
+++ b/sites/i.mjh.nz/i.mjh.nz.config.js
@@ -11,6 +11,7 @@ const API_ENDPOINT = 'https://raw.githubusercontent.com/matthuisman/i.mjh.nz/mas
module.exports = {
site: 'i.mjh.nz',
+ days: 2,
request: {
cache: {
ttl: 3 * 60 * 60 * 1000 // 3h
diff --git a/sites/i24news.tv/i24news.tv.config.js b/sites/i24news.tv/i24news.tv.config.js
index 7141e34d..3c590bc5 100644
--- a/sites/i24news.tv/i24news.tv.config.js
+++ b/sites/i24news.tv/i24news.tv.config.js
@@ -9,6 +9,7 @@ dayjs.extend(customParseFormat)
module.exports = {
site: 'i24news.tv',
+ days: 2,
url: function ({ channel }) {
const [lang] = channel.site_id.split('#')
diff --git a/sites/ionplustv.com/ionplustv.com.config.js b/sites/ionplustv.com/ionplustv.com.config.js
index ccd63973..d9c99696 100644
--- a/sites/ionplustv.com/ionplustv.com.config.js
+++ b/sites/ionplustv.com/ionplustv.com.config.js
@@ -11,6 +11,7 @@ dayjs.extend(customParseFormat)
module.exports = {
site: 'ionplustv.com',
+ days: 2,
url({ date }) {
return `https://ionplustv.com/schedule/${date.format('YYYY-MM-DD')}`
},
diff --git a/sites/ipko.com/ipko.com.config.js b/sites/ipko.com/ipko.com.config.js
index efe2665f..b2f2dfd3 100644
--- a/sites/ipko.com/ipko.com.config.js
+++ b/sites/ipko.com/ipko.com.config.js
@@ -5,6 +5,7 @@ dayjs.extend(utc)
module.exports = {
site: 'ipko.com',
+ days: 2,
url: function ({ date }) {
return `https://www.ipko.com/epg/admin/programs.php?date=${date.format('YYYY-MM-DD')}`
},
diff --git a/sites/kan.org.il/kan.org.il.config.js b/sites/kan.org.il/kan.org.il.config.js
index 65e8985c..cf114879 100644
--- a/sites/kan.org.il/kan.org.il.config.js
+++ b/sites/kan.org.il/kan.org.il.config.js
@@ -10,6 +10,7 @@ dayjs.extend(customParseFormat)
module.exports = {
skip: true, // INFO: Request failed with status code 403 (Access denied)
site: 'kan.org.il',
+ days: 2,
url: function ({ channel, date }) {
return `https://www.kan.org.il/tv-guide/tv_guidePrograms.ashx?stationID=${
channel.site_id
diff --git a/sites/knr.gl/knr.gl.config.js b/sites/knr.gl/knr.gl.config.js
index e9d8b532..c123d78d 100644
--- a/sites/knr.gl/knr.gl.config.js
+++ b/sites/knr.gl/knr.gl.config.js
@@ -10,6 +10,7 @@ dayjs.extend(customParseFormat)
module.exports = {
site: 'knr.gl',
+ days: 2,
url({ date }) {
return `https://knr.gl/admin/knr/TV/program/${date.format('YYYY-MM-DD')}/gl`
},
diff --git a/sites/kplus.vn/kplus.vn.config.js b/sites/kplus.vn/kplus.vn.config.js
index 31723697..a1bc59e8 100644
--- a/sites/kplus.vn/kplus.vn.config.js
+++ b/sites/kplus.vn/kplus.vn.config.js
@@ -10,6 +10,7 @@ const API_ENDPOINT = `https://www.kplus.vn/Schedule/getSchedule`
module.exports = {
site: 'kplus.vn',
+ days: 2,
skip: true, // channel list changes with each request
url: API_ENDPOINT,
request: {
diff --git a/sites/kvf.fo/kvf.fo.config.js b/sites/kvf.fo/kvf.fo.config.js
index 5b869781..f95a27b9 100644
--- a/sites/kvf.fo/kvf.fo.config.js
+++ b/sites/kvf.fo/kvf.fo.config.js
@@ -10,6 +10,7 @@ dayjs.extend(customParseFormat)
module.exports = {
site: 'kvf.fo',
+ days: 2,
url({ date }) {
return `https://kvf.fo/nskra/sv?date=${date.format('YYYY-MM-DD')}`
},
diff --git a/sites/m.tv.sms.cz/m.tv.sms.cz.config.js b/sites/m.tv.sms.cz/m.tv.sms.cz.config.js
index cee697c2..57d2c977 100644
--- a/sites/m.tv.sms.cz/m.tv.sms.cz.config.js
+++ b/sites/m.tv.sms.cz/m.tv.sms.cz.config.js
@@ -11,6 +11,7 @@ dayjs.extend(customParseFormat)
module.exports = {
site: 'm.tv.sms.cz',
+ days: 2,
url: function ({ date, channel }) {
return `https://m.tv.sms.cz/index.php?stanice=${channel.site_id}&cas=0&den=${date.format(
'YYYY-MM-DD'
diff --git a/sites/magentatv.at/magentatv.at.config.js b/sites/magentatv.at/magentatv.at.config.js
index db397d11..2295d91d 100644
--- a/sites/magentatv.at/magentatv.at.config.js
+++ b/sites/magentatv.at/magentatv.at.config.js
@@ -6,6 +6,7 @@ const API_PROD_ENDPOINT = 'https://prod.spark.magentatv.at/deu/web/linear-servic
module.exports = {
site: 'magentatv.at',
+ days: 2,
request: {
cache: {
ttl: 60 * 60 * 1000 // 1 hour
diff --git a/sites/magentatv.de/magentatv.de.config.js b/sites/magentatv.de/magentatv.de.config.js
index 355b3994..ce6ffab1 100644
--- a/sites/magentatv.de/magentatv.de.config.js
+++ b/sites/magentatv.de/magentatv.de.config.js
@@ -7,6 +7,7 @@ const COOKIE =
module.exports = {
site: 'magentatv.de',
+ days: 2,
skip: true, // the site uses a constantly updated session ID
url: `https://api.prod.sngtv.magentatv.de/EPG/JSON/PlayBillList`,
request: {
diff --git a/sites/magticom.ge/magticom.ge.config.js b/sites/magticom.ge/magticom.ge.config.js
index 5e0c44aa..661f54e9 100644
--- a/sites/magticom.ge/magticom.ge.config.js
+++ b/sites/magticom.ge/magticom.ge.config.js
@@ -11,6 +11,7 @@ dayjs.extend(customParseFormat)
module.exports = {
site: 'magticom.ge',
+ days: 2,
url: 'https://www.magticom.ge/request/channel-program.php',
request: {
method: 'POST',
diff --git a/sites/mako.co.il/mako.co.il.config.js b/sites/mako.co.il/mako.co.il.config.js
index ce6dc3e5..a0ee67ae 100644
--- a/sites/mako.co.il/mako.co.il.config.js
+++ b/sites/mako.co.il/mako.co.il.config.js
@@ -9,6 +9,7 @@ dayjs.extend(customParseFormat)
module.exports = {
site: 'mako.co.il',
+ days: 2,
url: 'https://www.mako.co.il/AjaxPage?jspName=EPGResponse.jsp',
parser: function ({ content, date }) {
let programs = []
diff --git a/sites/maxtv.hrvatskitelekom.hr/maxtv.hrvatskitelekom.hr.config.js b/sites/maxtv.hrvatskitelekom.hr/maxtv.hrvatskitelekom.hr.config.js
index e8cc2765..c3d29d5f 100644
--- a/sites/maxtv.hrvatskitelekom.hr/maxtv.hrvatskitelekom.hr.config.js
+++ b/sites/maxtv.hrvatskitelekom.hr/maxtv.hrvatskitelekom.hr.config.js
@@ -2,6 +2,7 @@ const dayjs = require('dayjs')
module.exports = {
site: 'maxtv.hrvatskitelekom.hr',
+ days: 2,
url: 'https://player.maxtvtogo.tportal.hr:8082/OTT4Proxy/proxy/epg/shows',
request: {
method: 'POST',
diff --git a/sites/maxtvgo.mk/maxtvgo.mk.config.js b/sites/maxtvgo.mk/maxtvgo.mk.config.js
index 38bed1ab..934d99fa 100644
--- a/sites/maxtvgo.mk/maxtvgo.mk.config.js
+++ b/sites/maxtvgo.mk/maxtvgo.mk.config.js
@@ -6,6 +6,7 @@ dayjs.extend(customParseFormat)
module.exports = {
site: 'maxtvgo.mk',
+ days: 2,
url: function ({ channel, date }) {
return `https://prd-static-mkt.spectar.tv/rev-1636968171/client_api.php/epg/list/instance_id/1/language/mk/channel_id/${
channel.site_id
diff --git a/sites/mbc.net/mbc.net.config.js b/sites/mbc.net/mbc.net.config.js
index 06fe5b60..f94d0e0a 100644
--- a/sites/mbc.net/mbc.net.config.js
+++ b/sites/mbc.net/mbc.net.config.js
@@ -2,6 +2,7 @@ const dayjs = require('dayjs')
module.exports = {
site: 'mbc.net',
+ days: 2,
skip: true, // NOTE: there is no program on the site
url({ date, channel }) {
return `https://www.mbc.net/.rest/api/channel/grids?from=${date.valueOf()}&to=${date
diff --git a/sites/mediaklikk.hu/mediaklikk.hu.config.js b/sites/mediaklikk.hu/mediaklikk.hu.config.js
index 5a9dfd96..7a024c15 100644
--- a/sites/mediaklikk.hu/mediaklikk.hu.config.js
+++ b/sites/mediaklikk.hu/mediaklikk.hu.config.js
@@ -8,6 +8,7 @@ dayjs.extend(customParseFormat)
module.exports = {
site: 'mediaklikk.hu',
+ days: 2,
url: 'https://mediaklikk.hu/wp-content/plugins/hms-global-widgets/widgets/programGuide/programGuideInterface.php',
request: {
method: 'POST',
diff --git a/sites/mediaset.it/mediaset.it.config.js b/sites/mediaset.it/mediaset.it.config.js
index b3616557..40a84876 100644
--- a/sites/mediaset.it/mediaset.it.config.js
+++ b/sites/mediaset.it/mediaset.it.config.js
@@ -7,6 +7,7 @@ dayjs.extend(customParseFormat)
module.exports = {
site: 'mediaset.it',
+ days: 2,
url: function ({ date, channel }) {
return `http://www.mediaset.it/guidatv/inc/canali/${date.format('YYYYMM')}/${date.format(
'YYYYMMDD'
diff --git a/sites/melita.com/melita.com.config.js b/sites/melita.com/melita.com.config.js
index 6735cd36..7fff861a 100644
--- a/sites/melita.com/melita.com.config.js
+++ b/sites/melita.com/melita.com.config.js
@@ -3,6 +3,7 @@ const dayjs = require('dayjs')
module.exports = {
site: 'melita.com',
+ days: 2,
url: function ({ channel, date }) {
return `https://androme.melitacable.com/api/epg/v1/schedule/channel/${
channel.site_id
diff --git a/sites/meo.pt/meo.pt.config.js b/sites/meo.pt/meo.pt.config.js
index 0a1ffa44..b4ae2d7a 100644
--- a/sites/meo.pt/meo.pt.config.js
+++ b/sites/meo.pt/meo.pt.config.js
@@ -9,6 +9,7 @@ dayjs.extend(timezone)
module.exports = {
site: 'meo.pt',
+ days: 2,
url: `https://www.meo.pt/_layouts/15/Ptsi.Isites.GridTv/GridTvMng.asmx/getProgramsFromChannels`,
request: {
method: 'POST',
diff --git a/sites/mewatch.sg/mewatch.sg.config.js b/sites/mewatch.sg/mewatch.sg.config.js
index ebfa4589..a8dc1363 100644
--- a/sites/mewatch.sg/mewatch.sg.config.js
+++ b/sites/mewatch.sg/mewatch.sg.config.js
@@ -2,6 +2,7 @@ const dayjs = require('dayjs')
module.exports = {
site: 'mewatch.sg',
+ days: 2,
url: function ({ channel, date }) {
return `https://cdn.mewatch.sg/api/schedules?channels=${channel.site_id}&date=${date.format(
'YYYY-MM-DD'
diff --git a/sites/mi.tv/mi.tv.config.js b/sites/mi.tv/mi.tv.config.js
index eeb37988..6de2b808 100644
--- a/sites/mi.tv/mi.tv.config.js
+++ b/sites/mi.tv/mi.tv.config.js
@@ -8,6 +8,7 @@ dayjs.extend(customParseFormat)
module.exports = {
site: 'mi.tv',
+ days: 2,
url({ date, channel }) {
const [country, id] = channel.site_id.split('#')
diff --git a/sites/mncvision.id/mncvision.id.config.js b/sites/mncvision.id/mncvision.id.config.js
index 0067336a..012dad43 100644
--- a/sites/mncvision.id/mncvision.id.config.js
+++ b/sites/mncvision.id/mncvision.id.config.js
@@ -12,6 +12,7 @@ dayjs.extend(customParseFormat)
module.exports = {
site: 'mncvision.id',
+ days: 2,
url: 'https://mncvision.id/schedule/table',
request: {
method: 'POST',
diff --git a/sites/movistarplus.es/movistarplus.es.config.js b/sites/movistarplus.es/movistarplus.es.config.js
index bf036873..c3c6c895 100644
--- a/sites/movistarplus.es/movistarplus.es.config.js
+++ b/sites/movistarplus.es/movistarplus.es.config.js
@@ -8,6 +8,7 @@ dayjs.extend(customParseFormat)
module.exports = {
site: 'movistarplus.es',
+ days: 2,
url: function ({ date }) {
return `https://www.movistarplus.es/programacion-tv/${date.format('YYYY-MM-DD')}?v=json`
},
diff --git a/sites/mtel.ba/mtel.ba.config.js b/sites/mtel.ba/mtel.ba.config.js
index 647936ed..7c50b8a2 100644
--- a/sites/mtel.ba/mtel.ba.config.js
+++ b/sites/mtel.ba/mtel.ba.config.js
@@ -5,6 +5,7 @@ dayjs.extend(timezone)
module.exports = {
site: 'mtel.ba',
+ days: 2,
url: function ({ channel, date }) {
const [position] = channel.site_id.split('#')
diff --git a/sites/mts.rs/mts.rs.config.js b/sites/mts.rs/mts.rs.config.js
index 65a19edb..89e488f4 100644
--- a/sites/mts.rs/mts.rs.config.js
+++ b/sites/mts.rs/mts.rs.config.js
@@ -7,6 +7,7 @@ dayjs.extend(timezone)
module.exports = {
site: 'mts.rs',
+ days: 2,
url({ date, channel }) {
const [position] = channel.site_id.split('#')
diff --git a/sites/mujtvprogram.cz/mujtvprogram.cz.config.js b/sites/mujtvprogram.cz/mujtvprogram.cz.config.js
index a7093716..8e9f0caa 100644
--- a/sites/mujtvprogram.cz/mujtvprogram.cz.config.js
+++ b/sites/mujtvprogram.cz/mujtvprogram.cz.config.js
@@ -10,6 +10,7 @@ dayjs.extend(customParseFormat)
module.exports = {
site: 'mujtvprogram.cz',
+ days: 2,
url({ channel, date }) {
const diff = date.diff(dayjs.utc().startOf('d'), 'd')
return `https://services.mujtvprogram.cz/tvprogram2services/services/tvprogrammelist_mobile.php?channel_cid=${channel.site_id}&day=${diff}`
diff --git a/sites/musor.tv/musor.tv.config.js b/sites/musor.tv/musor.tv.config.js
index 594e8602..a436b8af 100644
--- a/sites/musor.tv/musor.tv.config.js
+++ b/sites/musor.tv/musor.tv.config.js
@@ -9,6 +9,7 @@ dayjs.extend(customParseFormat)
module.exports = {
site: 'musor.tv',
+ days: 2,
url({ channel, date }) {
return dayjs.utc().isSame(date, 'd')
? `https://musor.tv/mai/tvmusor/${channel.site_id}`
diff --git a/sites/myafn.dodmedia.osd.mil/myafn.dodmedia.osd.mil.config.js b/sites/myafn.dodmedia.osd.mil/myafn.dodmedia.osd.mil.config.js
index 8770e0aa..024fc0c7 100644
--- a/sites/myafn.dodmedia.osd.mil/myafn.dodmedia.osd.mil.config.js
+++ b/sites/myafn.dodmedia.osd.mil/myafn.dodmedia.osd.mil.config.js
@@ -8,6 +8,7 @@ dayjs.extend(utc)
module.exports = {
site: 'myafn.dodmedia.osd.mil',
+ days: 2,
request: {
cache: {
ttl: 60 * 60 * 1000 // 1 hour
diff --git a/sites/mysky.com.ph/mysky.com.ph.config.js b/sites/mysky.com.ph/mysky.com.ph.config.js
index ecc6c46c..3735b0e0 100644
--- a/sites/mysky.com.ph/mysky.com.ph.config.js
+++ b/sites/mysky.com.ph/mysky.com.ph.config.js
@@ -10,6 +10,7 @@ dayjs.extend(customParseFormat)
module.exports = {
site: 'mysky.com.ph',
+ days: 2,
url: 'https://skyepg.mysky.com.ph/Main/getEventsbyType',
request: {
cache: {
diff --git a/sites/mytvsuper.com/mytvsuper.com.config.js b/sites/mytvsuper.com/mytvsuper.com.config.js
index 5883d07b..8a73c0e9 100644
--- a/sites/mytvsuper.com/mytvsuper.com.config.js
+++ b/sites/mytvsuper.com/mytvsuper.com.config.js
@@ -10,6 +10,7 @@ const API_ENDPOINT = 'https://content-api.mytvsuper.com/v1'
module.exports = {
site: 'mytvsuper.com',
+ days: 2,
request: {
cache: {
ttl: 60 * 60 * 1000 // 1h
diff --git a/sites/novacyprus.com/novacyprus.com.config.js b/sites/novacyprus.com/novacyprus.com.config.js
index cee97aaa..fc49bf01 100644
--- a/sites/novacyprus.com/novacyprus.com.config.js
+++ b/sites/novacyprus.com/novacyprus.com.config.js
@@ -10,6 +10,7 @@ dayjs.extend(customParseFormat)
module.exports = {
site: 'novacyprus.com',
+ days: 2,
url({ channel, date }) {
return `https://www.novacyprus.com/api/v1/tvprogram/from/${date.format('YYYYMMDD')}/to/${date
.add(1, 'd')
diff --git a/sites/novasports.gr/novasports.gr.config.js b/sites/novasports.gr/novasports.gr.config.js
index 653751b3..9fba886a 100644
--- a/sites/novasports.gr/novasports.gr.config.js
+++ b/sites/novasports.gr/novasports.gr.config.js
@@ -9,6 +9,7 @@ dayjs.extend(timezone)
module.exports = {
site: 'novasports.gr',
+ days: 2,
url: function ({ date, channel }) {
return `https://www.novasports.gr/wp-admin/admin-ajax.php?action=nova_get_template&template=tv-program/broadcast&dt=${date.format(
'YYYY-MM-DD'
diff --git a/sites/nowplayer.now.com/nowplayer.now.com.config.js b/sites/nowplayer.now.com/nowplayer.now.com.config.js
index 99ec1b86..0b63e9b2 100644
--- a/sites/nowplayer.now.com/nowplayer.now.com.config.js
+++ b/sites/nowplayer.now.com/nowplayer.now.com.config.js
@@ -7,6 +7,7 @@ dayjs.extend(utc)
module.exports = {
site: 'nowplayer.now.com',
+ days: 2,
url: function ({ channel, date }) {
const diff = date.diff(dayjs.utc().startOf('d'), 'd') + 1
diff --git a/sites/ontvtonight.com/ontvtonight.com.config.js b/sites/ontvtonight.com/ontvtonight.com.config.js
index a9d5e233..3c8c06fb 100644
--- a/sites/ontvtonight.com/ontvtonight.com.config.js
+++ b/sites/ontvtonight.com/ontvtonight.com.config.js
@@ -17,6 +17,7 @@ const tz = {
module.exports = {
site: 'ontvtonight.com',
+ days: 2,
url: function ({ date, channel }) {
const [region, id] = channel.site_id.split('#')
let url = `https://www.ontvtonight.com`
diff --git a/sites/osn.com/osn.com.config.js b/sites/osn.com/osn.com.config.js
index faa60ce3..4d60f7cb 100644
--- a/sites/osn.com/osn.com.config.js
+++ b/sites/osn.com/osn.com.config.js
@@ -7,6 +7,7 @@ dayjs.extend(timezone)
module.exports = {
site: 'osn.com',
+ days: 2,
url: `https://www.osn.com/CMSPages/TVScheduleWebService.asmx/GetTVChannelsProgramTimeTable`,
request: {
method: 'POST',
diff --git a/sites/pbsguam.org/pbsguam.org.config.js b/sites/pbsguam.org/pbsguam.org.config.js
index 59d1411a..e4392f0d 100644
--- a/sites/pbsguam.org/pbsguam.org.config.js
+++ b/sites/pbsguam.org/pbsguam.org.config.js
@@ -4,7 +4,8 @@ const isBetween = require('dayjs/plugin/isBetween')
dayjs.extend(isBetween)
module.exports = {
- site: 'pbsguam.org', // the program is only available Thursday through Sunday
+ site: 'pbsguam.org',
+ days: 2, // the program is only available Thursday through Sunday
url: 'https://pbsguam.org/calendar/',
parser: function ({ content, date }) {
let programs = []
diff --git a/sites/plex.tv/plex.tv.config.js b/sites/plex.tv/plex.tv.config.js
index fb8ec623..29c19a67 100644
--- a/sites/plex.tv/plex.tv.config.js
+++ b/sites/plex.tv/plex.tv.config.js
@@ -5,6 +5,7 @@ const API_ENDPOINT = 'https://epg.provider.plex.tv'
module.exports = {
site: 'plex.tv',
+ days: 2,
request: {
headers: {
'x-plex-provider-version': '5.1'
diff --git a/sites/programacion-tv.elpais.com/programacion-tv.elpais.com.config.js b/sites/programacion-tv.elpais.com/programacion-tv.elpais.com.config.js
index e369dd5d..8aadfb62 100644
--- a/sites/programacion-tv.elpais.com/programacion-tv.elpais.com.config.js
+++ b/sites/programacion-tv.elpais.com/programacion-tv.elpais.com.config.js
@@ -8,6 +8,7 @@ dayjs.extend(timezone)
module.exports = {
site: 'programacion-tv.elpais.com',
+ days: 2,
request: {
cache: {
ttl: 60 * 60 * 1000 // 1 hour
diff --git a/sites/programetv.ro/programetv.ro.config.js b/sites/programetv.ro/programetv.ro.config.js
index 4e07c26e..b93cbc80 100644
--- a/sites/programetv.ro/programetv.ro.config.js
+++ b/sites/programetv.ro/programetv.ro.config.js
@@ -5,6 +5,7 @@ dayjs.extend(utc)
module.exports = {
site: 'programetv.ro',
+ days: 2,
url: function ({ date, channel }) {
const daysOfWeek = {
0: 'duminica',
diff --git a/sites/programme-tv.net/programme-tv.net.config.js b/sites/programme-tv.net/programme-tv.net.config.js
index 181d89cc..a566e9c6 100644
--- a/sites/programme-tv.net/programme-tv.net.config.js
+++ b/sites/programme-tv.net/programme-tv.net.config.js
@@ -12,6 +12,7 @@ dayjs.extend(customParseFormat)
module.exports = {
site: 'programme-tv.net',
+ days: 2,
url: function ({ date, channel }) {
return `https://www.programme-tv.net/programme/chaine/${date.format('YYYY-MM-DD')}/programme-${
channel.site_id
diff --git a/sites/programme-tv.vini.pf/programme-tv.vini.pf.config.js b/sites/programme-tv.vini.pf/programme-tv.vini.pf.config.js
index 12eb7bf0..606a9bea 100644
--- a/sites/programme-tv.vini.pf/programme-tv.vini.pf.config.js
+++ b/sites/programme-tv.vini.pf/programme-tv.vini.pf.config.js
@@ -5,6 +5,7 @@ const apiUrl = `https://programme-tv.vini.pf/programmesJSON`
module.exports = {
site: 'programme-tv.vini.pf',
+ days: 2,
url: apiUrl,
request: {
method: 'POST',
diff --git a/sites/programme.tvb.com/programme.tvb.com.config.js b/sites/programme.tvb.com/programme.tvb.com.config.js
index a5b4d240..7fa1d4fe 100644
--- a/sites/programme.tvb.com/programme.tvb.com.config.js
+++ b/sites/programme.tvb.com/programme.tvb.com.config.js
@@ -10,6 +10,7 @@ dayjs.extend(customParseFormat)
module.exports = {
site: 'programme.tvb.com',
+ days: 2,
url: function ({ channel, date }) {
return `https://programme.tvb.com/ajax.php?action=channellist&code=${
channel.site_id
diff --git a/sites/programtv.onet.pl/programtv.onet.pl.config.js b/sites/programtv.onet.pl/programtv.onet.pl.config.js
index 352321f2..02757357 100644
--- a/sites/programtv.onet.pl/programtv.onet.pl.config.js
+++ b/sites/programtv.onet.pl/programtv.onet.pl.config.js
@@ -11,6 +11,7 @@ dayjs.extend(customParseFormat)
module.exports = {
delay: 5000,
site: 'programtv.onet.pl',
+ days: 2,
url: function ({ date, channel }) {
const currDate = dayjs.utc().startOf('d')
const day = date.diff(currDate, 'd')
diff --git a/sites/proximusmwc.be/proximusmwc.be.config.js b/sites/proximusmwc.be/proximusmwc.be.config.js
index f94f8ac5..dd60ecf0 100644
--- a/sites/proximusmwc.be/proximusmwc.be.config.js
+++ b/sites/proximusmwc.be/proximusmwc.be.config.js
@@ -3,6 +3,7 @@ const dayjs = require('dayjs')
module.exports = {
site: 'proximusmwc.be',
+ days: 2,
skip: true, // site is not working (https://github.com/iptv-org/epg/runs/5505070902?check_suite_focus=true)
url: 'https://api.proximusmwc.be/v2/graphql',
request: {
diff --git a/sites/raiplay.it/raiplay.it.config.js b/sites/raiplay.it/raiplay.it.config.js
index cc9d2e57..803c68b7 100644
--- a/sites/raiplay.it/raiplay.it.config.js
+++ b/sites/raiplay.it/raiplay.it.config.js
@@ -9,6 +9,7 @@ dayjs.extend(timezone)
module.exports = {
site: 'raiplay.it',
+ days: 2,
url: function ({ date, channel }) {
return `https://www.raiplay.it/palinsesto/app/${channel.site_id}/${date.format(
'DD-MM-YYYY'
diff --git a/sites/reportv.com.ar/reportv.com.ar.config.js b/sites/reportv.com.ar/reportv.com.ar.config.js
index 4836492d..70adb8e2 100644
--- a/sites/reportv.com.ar/reportv.com.ar.config.js
+++ b/sites/reportv.com.ar/reportv.com.ar.config.js
@@ -13,6 +13,7 @@ dayjs.extend(customParseFormat)
module.exports = {
site: 'reportv.com.ar',
+ days: 2,
request: {
cache: {
ttl: 60 * 60 * 1000 // 1 hour
diff --git a/sites/rev.bs/rev.bs.config.js b/sites/rev.bs/rev.bs.config.js
index 2298b946..a2997e04 100644
--- a/sites/rev.bs/rev.bs.config.js
+++ b/sites/rev.bs/rev.bs.config.js
@@ -9,6 +9,7 @@ dayjs.extend(timezone)
module.exports = {
site: 'rev.bs',
+ days: 2,
url: function ({ date }) {
return `https://www.rev.bs/wp-content/uploads/tv-guide/${date.format('YYYY-MM-DD')}_0.json`
},
diff --git a/sites/rotana.net/rotana.net.config.js b/sites/rotana.net/rotana.net.config.js
index 5208f61a..70ffe8c9 100644
--- a/sites/rotana.net/rotana.net.config.js
+++ b/sites/rotana.net/rotana.net.config.js
@@ -9,6 +9,7 @@ dayjs.extend(customParseFormat)
module.exports = {
site: 'rotana.net',
+ days: 2,
skip: true, // NOTE: there is no program for the current date on the site
url({ channel, date }) {
return `https://rotana.net/triAssets/uploads/2020/11/${channel.site_id}.csv`
diff --git a/sites/rtb.gov.bn/rtb.gov.bn.config.js b/sites/rtb.gov.bn/rtb.gov.bn.config.js
index f25cbcd2..e6071fbd 100644
--- a/sites/rtb.gov.bn/rtb.gov.bn.config.js
+++ b/sites/rtb.gov.bn/rtb.gov.bn.config.js
@@ -11,6 +11,7 @@ dayjs.extend(customParseFormat)
module.exports = {
skip: true, // INFO: guide is not available on the site
site: 'rtb.gov.bn',
+ days: 2,
url: function ({ channel, date }) {
const [position] = channel.site_id.split('#')
diff --git a/sites/rthk.hk/rthk.hk.config.js b/sites/rthk.hk/rthk.hk.config.js
index c39de94d..bc95b263 100644
--- a/sites/rthk.hk/rthk.hk.config.js
+++ b/sites/rthk.hk/rthk.hk.config.js
@@ -11,6 +11,7 @@ dayjs.extend(customParseFormat)
module.exports = {
site: 'rthk.hk',
+ days: 2,
request: {
headers({ channel }) {
return {
diff --git a/sites/rtmklik.rtm.gov.my/rtmklik.rtm.gov.my.config.js b/sites/rtmklik.rtm.gov.my/rtmklik.rtm.gov.my.config.js
index 9e07596d..d3cc83b6 100644
--- a/sites/rtmklik.rtm.gov.my/rtmklik.rtm.gov.my.config.js
+++ b/sites/rtmklik.rtm.gov.my/rtmklik.rtm.gov.my.config.js
@@ -9,6 +9,7 @@ dayjs.extend(customParseFormat)
module.exports = {
site: 'rtmklik.rtm.gov.my',
+ days: 2,
url: function ({ date, channel }) {
return `https://rtm.glueapi.io/v3/epg/${
channel.site_id
diff --git a/sites/rtp.pt/rtp.pt.config.js b/sites/rtp.pt/rtp.pt.config.js
index 3185274c..12e552cf 100644
--- a/sites/rtp.pt/rtp.pt.config.js
+++ b/sites/rtp.pt/rtp.pt.config.js
@@ -10,16 +10,19 @@ dayjs.extend(timezone)
dayjs.extend(customParseFormat)
const tz = {
- lis: 'Europe/Lisbon',
- per: 'Asia/Macau',
- rja: 'America/Sao_Paulo'
+ lis: 'Europe/Lisbon',
+ per: 'Asia/Macau',
+ rja: 'America/Sao_Paulo'
}
module.exports = {
site: 'rtp.pt',
+ days: 2,
url({ channel, date }) {
let [region, channelCode] = channel.site_id.split('#')
- return `https://www.rtp.pt/EPG/json/rtp-channels-page/list-grid/tv/${channelCode}/${date.format('D-M-YYYY')}/${region}`
+ return `https://www.rtp.pt/EPG/json/rtp-channels-page/list-grid/tv/${channelCode}/${date.format(
+ 'D-M-YYYY'
+ )}/${region}`
},
parser({ content, channel }) {
let programs = []
@@ -61,7 +64,7 @@ module.exports = {
function parseIcon(item) {
const last = item.image.pop()
- if(!last) return null
+ if (!last) return null
return last.src
}
diff --git a/sites/ruv.is/ruv.is.config.js b/sites/ruv.is/ruv.is.config.js
index 25d66391..2ef9125f 100644
--- a/sites/ruv.is/ruv.is.config.js
+++ b/sites/ruv.is/ruv.is.config.js
@@ -10,6 +10,7 @@ dayjs.extend(customParseFormat)
module.exports = {
site: 'ruv.is',
+ days: 2,
url({ channel, date }) {
return `https://www.ruv.is/sjonvarp/dagskra/${channel.site_id}/${date.format('YYYY-MM-DD')}`
},
diff --git a/sites/seezntv.com/seezntv.com.config.js b/sites/seezntv.com/seezntv.com.config.js
index c1470b45..5c023350 100644
--- a/sites/seezntv.com/seezntv.com.config.js
+++ b/sites/seezntv.com/seezntv.com.config.js
@@ -10,6 +10,7 @@ dayjs.extend(customParseFormat)
module.exports = {
site: 'seezntv.com',
+ days: 2,
url: function ({ channel }) {
return `https://api.seezntv.com/svc/menu/app6/api/epg_proglist?ch_no=${channel.site_id}&search_day=1`
},
diff --git a/sites/siba.com.co/siba.com.co.config.js b/sites/siba.com.co/siba.com.co.config.js
index fe81e892..d1ef37d2 100644
--- a/sites/siba.com.co/siba.com.co.config.js
+++ b/sites/siba.com.co/siba.com.co.config.js
@@ -2,6 +2,7 @@ const dayjs = require('dayjs')
module.exports = {
site: 'siba.com.co',
+ days: 2,
url: 'http://devportal.siba.com.co/index.php?action=grilla',
request: {
method: 'POST',
diff --git a/sites/sjonvarp.is/sjonvarp.is.config.js b/sites/sjonvarp.is/sjonvarp.is.config.js
index e4321b50..d9b15946 100644
--- a/sites/sjonvarp.is/sjonvarp.is.config.js
+++ b/sites/sjonvarp.is/sjonvarp.is.config.js
@@ -8,6 +8,7 @@ dayjs.extend(customParseFormat)
module.exports = {
site: 'sjonvarp.is',
+ days: 2,
url: function ({ channel, date }) {
return `http://www.sjonvarp.is/index.php?Tm=%3F&p=idag&c=${channel.site_id}&y=${date.format(
'YYYY'
diff --git a/sites/sky.com/sky.com.config.js b/sites/sky.com/sky.com.config.js
index bdd8b58e..1f9b6fdd 100644
--- a/sites/sky.com/sky.com.config.js
+++ b/sites/sky.com/sky.com.config.js
@@ -2,6 +2,7 @@ const dayjs = require('dayjs')
module.exports = {
site: 'sky.com',
+ days: 2,
url: function ({ date, channel }) {
return `https://epgservices.sky.com/5.2.2/api/2.0/channel/json/${
channel.site_id
diff --git a/sites/sky.de/sky.de.config.js b/sites/sky.de/sky.de.config.js
index aa24869d..6771dc7b 100644
--- a/sites/sky.de/sky.de.config.js
+++ b/sites/sky.de/sky.de.config.js
@@ -2,6 +2,7 @@ const dayjs = require('dayjs')
module.exports = {
site: 'sky.de',
+ days: 2,
skip: true, // server returns error 403 (https://github.com/iptv-org/epg/runs/5435899744?check_suite_focus=true)
url: `https://www.sky.de/sgtvg/service/getBroadcastsForGrid`,
request: {
diff --git a/sites/sportsnet.ca/sportsnet.ca.config.js b/sites/sportsnet.ca/sportsnet.ca.config.js
index 5a73609f..247902b1 100644
--- a/sites/sportsnet.ca/sportsnet.ca.config.js
+++ b/sites/sportsnet.ca/sportsnet.ca.config.js
@@ -5,6 +5,7 @@ dayjs.extend(utc)
module.exports = {
site: 'sportsnet.ca',
+ days: 2,
url: function ({ channel, date }) {
return `https://production-cdn.sportsnet.ca/api/schedules?channels=${
channel.site_id
diff --git a/sites/starhubtvplus.com/starhubtvplus.com.config.js b/sites/starhubtvplus.com/starhubtvplus.com.config.js
index 673256f7..b593afed 100644
--- a/sites/starhubtvplus.com/starhubtvplus.com.config.js
+++ b/sites/starhubtvplus.com/starhubtvplus.com.config.js
@@ -6,6 +6,7 @@ const SESSION_KEY = '01G2QG0N3RWDNCBA1S5MK1MD2K17CE4431A2'
module.exports = {
site: 'starhubtvplus.com',
+ days: 2,
request: {
headers: {
'x-application-key': APP_KEY,
diff --git a/sites/startimestv.com/startimestv.com.config.js b/sites/startimestv.com/startimestv.com.config.js
index 1a6f6a81..446a65c4 100644
--- a/sites/startimestv.com/startimestv.com.config.js
+++ b/sites/startimestv.com/startimestv.com.config.js
@@ -9,6 +9,7 @@ dayjs.extend(customParseFormat)
module.exports = {
site: 'startimestv.com',
+ days: 2,
url: function ({ channel, date }) {
return `https://www.startimestv.com/channeldetail/${channel.site_id}/${date.format(
'YYYY-MM-DD'
diff --git a/sites/startv.com/startv.com.config.js b/sites/startv.com/startv.com.config.js
index 32119e37..697d7230 100644
--- a/sites/startv.com/startv.com.config.js
+++ b/sites/startv.com/startv.com.config.js
@@ -12,6 +12,7 @@ const API_ENDPOINT = 'https://www.startv.com/umbraco/api/startvguideproxy'
module.exports = {
site: 'startv.com',
+ days: 2,
skip: true, // REASON: Request failed with status code 405
url: `${API_ENDPOINT}/GetTvGuideSchedule`,
request: {
diff --git a/sites/tapdmv.com/tapdmv.com.config.js b/sites/tapdmv.com/tapdmv.com.config.js
index 9d1c3c1f..569a86b6 100644
--- a/sites/tapdmv.com/tapdmv.com.config.js
+++ b/sites/tapdmv.com/tapdmv.com.config.js
@@ -3,6 +3,7 @@ const dayjs = require('dayjs')
module.exports = {
site: 'tapdmv.com',
+ days: 2,
url({ channel, date }) {
return `https://epg.tapdmv.com/calendar/${
channel.site_id
diff --git a/sites/telecablesat.fr/telecablesat.fr.config.js b/sites/telecablesat.fr/telecablesat.fr.config.js
index 1157c08b..abfa3dd0 100644
--- a/sites/telecablesat.fr/telecablesat.fr.config.js
+++ b/sites/telecablesat.fr/telecablesat.fr.config.js
@@ -14,6 +14,7 @@ const API_ENDPOINT = 'https://tv-programme.telecablesat.fr/chaine'
module.exports = {
site: 'telecablesat.fr',
+ days: 2,
url: function ({ channel, date }) {
return `${API_ENDPOINT}/${channel.site_id}/index.html?date=${date.format('YYYY-MM-DD')}`
},
diff --git a/sites/telenet.tv/telenet.tv.config.js b/sites/telenet.tv/telenet.tv.config.js
index d17288fd..e9dde5d3 100644
--- a/sites/telenet.tv/telenet.tv.config.js
+++ b/sites/telenet.tv/telenet.tv.config.js
@@ -6,6 +6,7 @@ const API_PROD_ENDPOINT = 'https://prod.spark.telenet.tv/eng/web/linear-service/
module.exports = {
site: 'telenet.tv',
+ days: 2,
request: {
cache: {
ttl: 60 * 60 * 1000 // 1 hour
diff --git a/sites/teliatv.ee/teliatv.ee.config.js b/sites/teliatv.ee/teliatv.ee.config.js
index 5bd4ab70..2f1569f2 100644
--- a/sites/teliatv.ee/teliatv.ee.config.js
+++ b/sites/teliatv.ee/teliatv.ee.config.js
@@ -3,6 +3,7 @@ const dayjs = require('dayjs')
module.exports = {
site: 'teliatv.ee',
+ days: 2,
url({ date, channel }) {
return `https://api.teliatv.ee/dtv-api/3.2/${channel.lang}/epg/guide?channelIds=${
channel.site_id
diff --git a/sites/telkku.com/telkku.com.config.js b/sites/telkku.com/telkku.com.config.js
index 78531ee9..37292ad6 100644
--- a/sites/telkku.com/telkku.com.config.js
+++ b/sites/telkku.com/telkku.com.config.js
@@ -3,6 +3,7 @@ const dayjs = require('dayjs')
module.exports = {
site: 'telkku.com',
+ days: 2,
url: function ({ channel, date }) {
const [group] = channel.site_id.split('#')
diff --git a/sites/telkussa.fi/telkussa.fi.config.js b/sites/telkussa.fi/telkussa.fi.config.js
index fa51a360..87baba16 100644
--- a/sites/telkussa.fi/telkussa.fi.config.js
+++ b/sites/telkussa.fi/telkussa.fi.config.js
@@ -2,6 +2,7 @@ const dayjs = require('dayjs')
module.exports = {
site: 'telkussa.fi',
+ days: 2,
url: function ({ date, channel }) {
return `https://telkussa.fi/API/Channel/${channel.site_id}/${date.format('YYYYMMDD')}`
},
diff --git a/sites/telsu.fi/telsu.fi.config.js b/sites/telsu.fi/telsu.fi.config.js
index 475e7e2f..8e80be70 100644
--- a/sites/telsu.fi/telsu.fi.config.js
+++ b/sites/telsu.fi/telsu.fi.config.js
@@ -9,6 +9,7 @@ dayjs.extend(timezone)
module.exports = {
site: 'telsu.fi',
+ days: 2,
url: function ({ date, channel }) {
return `https://www.telsu.fi/${date.format('YYYYMMDD')}/${channel.site_id}`
},
diff --git a/sites/tivu.tv/tivu.tv.config.js b/sites/tivu.tv/tivu.tv.config.js
index 1a758708..37ac9db3 100644
--- a/sites/tivu.tv/tivu.tv.config.js
+++ b/sites/tivu.tv/tivu.tv.config.js
@@ -10,6 +10,7 @@ dayjs.extend(customParseFormat)
module.exports = {
site: 'tivu.tv',
+ days: 2,
request: {
cache: {
ttl: 60 * 60 * 1000 // 1 hour
diff --git a/sites/toonamiaftermath.com/toonamiaftermath.com.config.js b/sites/toonamiaftermath.com/toonamiaftermath.com.config.js
index 2de581a2..bcb44a8a 100644
--- a/sites/toonamiaftermath.com/toonamiaftermath.com.config.js
+++ b/sites/toonamiaftermath.com/toonamiaftermath.com.config.js
@@ -7,6 +7,7 @@ const API_ENDPOINT = `https://api.toonamiaftermath.com`
module.exports = {
site: 'toonamiaftermath.com',
+ days: 2,
async url({ channel, date }) {
const playlists = await axios
.get(
diff --git a/sites/transvision.co.id/transvision.co.id.config.js b/sites/transvision.co.id/transvision.co.id.config.js
index bd642041..f49861d1 100644
--- a/sites/transvision.co.id/transvision.co.id.config.js
+++ b/sites/transvision.co.id/transvision.co.id.config.js
@@ -11,6 +11,7 @@ dayjs.extend(customParseFormat)
module.exports = {
site: 'transvision.co.id',
+ days: 2,
url: `https://www.transvision.co.id/jadwalacara/epg`,
request: {
method: 'POST',
diff --git a/sites/turksatkablo.com.tr/turksatkablo.com.tr.config.js b/sites/turksatkablo.com.tr/turksatkablo.com.tr.config.js
index a46edda1..025d4f06 100644
--- a/sites/turksatkablo.com.tr/turksatkablo.com.tr.config.js
+++ b/sites/turksatkablo.com.tr/turksatkablo.com.tr.config.js
@@ -10,6 +10,7 @@ dayjs.extend(customParseFormat)
module.exports = {
skip: true, // Error: Connection timeout
site: 'turksatkablo.com.tr',
+ days: 2,
url: function ({ date }) {
return `https://www.turksatkablo.com.tr/userUpload/EPG/y.json?_=${date.valueOf()}`
},
diff --git a/sites/tv.blue.ch/tv.blue.ch.config.js b/sites/tv.blue.ch/tv.blue.ch.config.js
index acf291dc..7fe5117a 100644
--- a/sites/tv.blue.ch/tv.blue.ch.config.js
+++ b/sites/tv.blue.ch/tv.blue.ch.config.js
@@ -7,6 +7,7 @@ dayjs.extend(utc)
module.exports = {
site: 'tv.blue.ch',
+ days: 2,
url: function ({ channel, date }) {
return `https://services.sg101.prd.sctv.ch/catalog/tv/channels/list/(ids=${
channel.site_id
diff --git a/sites/tv.cctv.com/tv.cctv.com.config.js b/sites/tv.cctv.com/tv.cctv.com.config.js
index 1d5cda3b..8f2aa3b4 100644
--- a/sites/tv.cctv.com/tv.cctv.com.config.js
+++ b/sites/tv.cctv.com/tv.cctv.com.config.js
@@ -2,6 +2,7 @@ const dayjs = require('dayjs')
module.exports = {
site: 'tv.cctv.com',
+ days: 2,
url({ channel, date }) {
return `https://api.cntv.cn/epg/getEpgInfoByChannelNew?serviceId=tvcctv&c=${
channel.site_id
diff --git a/sites/tv.dir.bg/tv.dir.bg.config.js b/sites/tv.dir.bg/tv.dir.bg.config.js
index c40096f7..0005e620 100644
--- a/sites/tv.dir.bg/tv.dir.bg.config.js
+++ b/sites/tv.dir.bg/tv.dir.bg.config.js
@@ -11,6 +11,7 @@ dayjs.extend(customParseFormat)
module.exports = {
site: 'tv.dir.bg',
+ days: 2,
url({ channel, date }) {
return `https://tv.dir.bg/tv_channel.php?id=${channel.site_id}&dd=${date.format('DD.MM')}`
},
diff --git a/sites/tv.lv/tv.lv.config.js b/sites/tv.lv/tv.lv.config.js
index feee6f9f..985c8270 100644
--- a/sites/tv.lv/tv.lv.config.js
+++ b/sites/tv.lv/tv.lv.config.js
@@ -2,6 +2,7 @@ const dayjs = require('dayjs')
module.exports = {
site: 'tv.lv',
+ days: 2,
url: function ({ date, channel }) {
return `https://www.tv.lv/programme/listing/none/${date.format(
'DD-MM-YYYY'
diff --git a/sites/tv.mail.ru/tv.mail.ru.config.js b/sites/tv.mail.ru/tv.mail.ru.config.js
index 4d86b928..e19b989f 100644
--- a/sites/tv.mail.ru/tv.mail.ru.config.js
+++ b/sites/tv.mail.ru/tv.mail.ru.config.js
@@ -9,6 +9,7 @@ dayjs.extend(customParseFormat)
module.exports = {
site: 'tv.mail.ru',
+ days: 2,
url({ channel, date }) {
return `https://tv.mail.ru/ajax/channel/?region_id=70&channel_id=${
channel.site_id
diff --git a/sites/tv.movistar.com.pe/tv.movistar.com.pe.config.js b/sites/tv.movistar.com.pe/tv.movistar.com.pe.config.js
index 2e3d52eb..039b891f 100644
--- a/sites/tv.movistar.com.pe/tv.movistar.com.pe.config.js
+++ b/sites/tv.movistar.com.pe/tv.movistar.com.pe.config.js
@@ -3,6 +3,7 @@ const axios = require('axios')
module.exports = {
site: 'tv.movistar.com.pe',
+ days: 2,
url({ channel, date }) {
return `https://contentapi-pe.cdn.telefonica.com/28/default/es-PE/schedules?fields=Pid,Title,Description,ChannelName,LiveChannelPid,Start,End,images.videoFrame,AgeRatingPid&orderBy=START_TIME%3Aa&filteravailability=false&starttime=${date.unix()}&endtime=${date
.add(1, 'd')
diff --git a/sites/tv.nu/tv.nu.config.js b/sites/tv.nu/tv.nu.config.js
index 5f2c06d6..2469fe22 100644
--- a/sites/tv.nu/tv.nu.config.js
+++ b/sites/tv.nu/tv.nu.config.js
@@ -2,6 +2,7 @@ const dayjs = require('dayjs')
module.exports = {
site: 'tv.nu',
+ days: 2,
url: function ({ channel, date }) {
return `https://web-api.tv.nu/channels/${channel.site_id}/schedule?date=${date.format(
'YYYY-MM-DD'
diff --git a/sites/tv.trueid.net/tv.trueid.net.config.js b/sites/tv.trueid.net/tv.trueid.net.config.js
index 68c623fa..a1dbbb5d 100644
--- a/sites/tv.trueid.net/tv.trueid.net.config.js
+++ b/sites/tv.trueid.net/tv.trueid.net.config.js
@@ -7,6 +7,7 @@ dayjs.extend(utc)
module.exports = {
delay: 5000,
site: 'tv.trueid.net',
+ days: 2,
url: function ({ channel, date }) {
return `https://tv.trueid.net/tvguide/all/${channel.site_id}/${date.format('YYYY-MM-DD')}`
},
diff --git a/sites/tv.yandex.ru/tv.yandex.ru.config.js b/sites/tv.yandex.ru/tv.yandex.ru.config.js
index 79603d4a..f76371d9 100644
--- a/sites/tv.yandex.ru/tv.yandex.ru.config.js
+++ b/sites/tv.yandex.ru/tv.yandex.ru.config.js
@@ -2,6 +2,7 @@ const dayjs = require('dayjs')
module.exports = {
site: 'tv.yandex.ru',
+ days: 2,
url: function ({ date, channel }) {
const [region, id] = channel.site_id.split('#')
diff --git a/sites/tv.yettel.hu/tv.yettel.hu.config.js b/sites/tv.yettel.hu/tv.yettel.hu.config.js
index 7d2447ec..cacbad45 100644
--- a/sites/tv.yettel.hu/tv.yettel.hu.config.js
+++ b/sites/tv.yettel.hu/tv.yettel.hu.config.js
@@ -3,6 +3,7 @@ const dayjs = require('dayjs')
module.exports = {
site: 'tv.yettel.hu',
+ days: 2,
url: function ({ channel, date }) {
return `https://dev.mytvback.com/api/19/default/hu-HU/schedules?livechannelpids=${
channel.site_id
diff --git a/sites/tv24.co.uk/tv24.co.uk.config.js b/sites/tv24.co.uk/tv24.co.uk.config.js
index 993ea2cf..2f01769e 100644
--- a/sites/tv24.co.uk/tv24.co.uk.config.js
+++ b/sites/tv24.co.uk/tv24.co.uk.config.js
@@ -9,6 +9,7 @@ dayjs.extend(customParseFormat)
module.exports = {
site: 'tv24.co.uk',
+ days: 2,
url: function ({ channel, date }) {
return `https://tv24.co.uk/x/channel/${channel.site_id}/0/${date.format('YYYY-MM-DD')}`
},
diff --git a/sites/tv24.se/tv24.se.config.js b/sites/tv24.se/tv24.se.config.js
index 495e8369..9b2c4f3f 100644
--- a/sites/tv24.se/tv24.se.config.js
+++ b/sites/tv24.se/tv24.se.config.js
@@ -9,6 +9,7 @@ dayjs.extend(customParseFormat)
module.exports = {
site: 'tv24.se',
+ days: 2,
url: function ({ channel, date }) {
return `https://tv24.se/x/channel/${channel.site_id}/0/${date.format('YYYY-MM-DD')}`
},
diff --git a/sites/tv2go.t-2.net/tv2go.t-2.net.config.js b/sites/tv2go.t-2.net/tv2go.t-2.net.config.js
index 10d7b035..53300e5f 100644
--- a/sites/tv2go.t-2.net/tv2go.t-2.net.config.js
+++ b/sites/tv2go.t-2.net/tv2go.t-2.net.config.js
@@ -12,6 +12,7 @@ const API = {
const config = {
site: 'tv2go.t-2.net',
+ days: 2,
url({ date, channel }) {
const data = config.request.data({ date, channel })
const endpoint = 'client/tv/getEpg'
diff --git a/sites/tva.tv/tva.tv.config.js b/sites/tva.tv/tva.tv.config.js
index ef341919..46850a48 100644
--- a/sites/tva.tv/tva.tv.config.js
+++ b/sites/tva.tv/tva.tv.config.js
@@ -3,6 +3,7 @@ const dayjs = require('dayjs')
module.exports = {
site: 'tva.tv',
+ days: 2,
url: function ({ date, channel }) {
return `https://api.ott.tva.tv/v2/epg/program_events.json?channel_id=${
channel.site_id
diff --git a/sites/tvarenasport.com/tvarenasport.com.config.js b/sites/tvarenasport.com/tvarenasport.com.config.js
index 8787a6f1..afc71981 100644
--- a/sites/tvarenasport.com/tvarenasport.com.config.js
+++ b/sites/tvarenasport.com/tvarenasport.com.config.js
@@ -3,6 +3,7 @@ const dayjs = require('dayjs')
module.exports = {
site: 'tvarenasport.com',
+ days: 2,
url: function ({ channel, date }) {
return `https://www.tvarenasport.com/api/schedule?date=${date.format('DD-MM-YYYY')}`
},
diff --git a/sites/tvarenasport.hr/tvarenasport.hr.config.js b/sites/tvarenasport.hr/tvarenasport.hr.config.js
index cfcdf83e..464cde62 100644
--- a/sites/tvarenasport.hr/tvarenasport.hr.config.js
+++ b/sites/tvarenasport.hr/tvarenasport.hr.config.js
@@ -3,6 +3,7 @@ const dayjs = require('dayjs')
module.exports = {
site: 'tvarenasport.hr',
+ days: 2,
skip: true, // there is no current program on the website
url: function ({ channel, date }) {
return `https://www.tvarenasport.hr/api/schedule?date=${date.format('DD-MM-YYYY')}`
diff --git a/sites/tvcubana.icrt.cu/tvcubana.icrt.cu.config.js b/sites/tvcubana.icrt.cu/tvcubana.icrt.cu.config.js
index 33a0d067..a420c5ca 100644
--- a/sites/tvcubana.icrt.cu/tvcubana.icrt.cu.config.js
+++ b/sites/tvcubana.icrt.cu/tvcubana.icrt.cu.config.js
@@ -5,6 +5,7 @@ dayjs.extend(timezone)
module.exports = {
site: 'tvcubana.icrt.cu',
+ days: 2,
url({ channel, date }) {
const daysOfWeek = ['domingo', 'lunes', 'martes', 'miercoles', 'jueves', 'viernes', 'sabado']
diff --git a/sites/tvgid.ua/tvgid.ua.config.js b/sites/tvgid.ua/tvgid.ua.config.js
index 70448136..a8e123d5 100644
--- a/sites/tvgid.ua/tvgid.ua.config.js
+++ b/sites/tvgid.ua/tvgid.ua.config.js
@@ -11,6 +11,7 @@ dayjs.extend(customParseFormat)
module.exports = {
site: 'tvgid.ua',
+ days: 2,
skip: true, // NOTE: the current program is not currently available on the website
url: function ({ date, channel }) {
return `https://tvgid.ua/channels/${channel.site_id}/${date.format('DDMMYYYY')}/tmall/`
diff --git a/sites/tvgids.nl/tvgids.nl.config.js b/sites/tvgids.nl/tvgids.nl.config.js
index ef1d18bf..3e5f1b8d 100644
--- a/sites/tvgids.nl/tvgids.nl.config.js
+++ b/sites/tvgids.nl/tvgids.nl.config.js
@@ -9,6 +9,7 @@ dayjs.extend(timezone)
module.exports = {
site: 'tvgids.nl',
+ days: 2,
url: function ({ date, channel }) {
const path = dayjs.utc().isSame(date, 'd') ? '' : `${date.format('DD-MM-YYYY')}/`
diff --git a/sites/tvguide.com/tvguide.com.config.js b/sites/tvguide.com/tvguide.com.config.js
index 271bac6e..25206b7d 100644
--- a/sites/tvguide.com/tvguide.com.config.js
+++ b/sites/tvguide.com/tvguide.com.config.js
@@ -8,6 +8,7 @@ dayjs.extend(timezone)
module.exports = {
site: 'tvguide.com',
+ days: 2,
url: function ({ date, channel }) {
const [providerId, channelSourceIds] = channel.site_id.split('#')
const url = `https://cmg-prod.apigee.net/v1/xapi/tvschedules/tvguide/${providerId}/web?start=${date
diff --git a/sites/tvguide.myjcom.jp/tvguide.myjcom.jp.config.js b/sites/tvguide.myjcom.jp/tvguide.myjcom.jp.config.js
index 94f0601c..ef0174d9 100644
--- a/sites/tvguide.myjcom.jp/tvguide.myjcom.jp.config.js
+++ b/sites/tvguide.myjcom.jp/tvguide.myjcom.jp.config.js
@@ -10,6 +10,7 @@ dayjs.extend(customParseFormat)
module.exports = {
site: 'tvguide.myjcom.jp',
+ days: 2,
url: function ({ date, channel }) {
const id = `${channel.site_id}_${date.format('YYYYMMDD')}`
diff --git a/sites/tvhebdo.com/tvhebdo.com.config.js b/sites/tvhebdo.com/tvhebdo.com.config.js
index f29d54af..19be5a76 100644
--- a/sites/tvhebdo.com/tvhebdo.com.config.js
+++ b/sites/tvhebdo.com/tvhebdo.com.config.js
@@ -11,6 +11,7 @@ dayjs.extend(customParseFormat)
module.exports = {
site: 'tvhebdo.com',
+ days: 2,
url: function ({ channel, date }) {
return `https://www.tvhebdo.com/horaire-tele/${channel.site_id}/date/${date.format(
'YYYY-MM-DD'
diff --git a/sites/tvheute.at/tvheute.at.config.js b/sites/tvheute.at/tvheute.at.config.js
index 17b30680..f9021b14 100644
--- a/sites/tvheute.at/tvheute.at.config.js
+++ b/sites/tvheute.at/tvheute.at.config.js
@@ -3,6 +3,7 @@ const dayjs = require('dayjs')
module.exports = {
site: 'tvheute.at',
+ days: 2,
url({ channel, date }) {
return `https://tvheute.at/part/channel-shows/partial/${channel.site_id}/${date.format(
'DD-MM-YYYY'
diff --git a/sites/tvim.tv/tvim.tv.config.js b/sites/tvim.tv/tvim.tv.config.js
index 8a8c0244..30f12a6a 100644
--- a/sites/tvim.tv/tvim.tv.config.js
+++ b/sites/tvim.tv/tvim.tv.config.js
@@ -2,6 +2,7 @@ const dayjs = require('dayjs')
module.exports = {
site: 'tvim.tv',
+ days: 2,
url: function ({ date, channel }) {
return `https://www.tvim.tv/script/program_epg?date=${date.format('DD.MM.YYYY')}&prog=${
channel.site_id
diff --git a/sites/tvmi.mt/tvmi.mt.config.js b/sites/tvmi.mt/tvmi.mt.config.js
index ce32316f..f527ccae 100644
--- a/sites/tvmi.mt/tvmi.mt.config.js
+++ b/sites/tvmi.mt/tvmi.mt.config.js
@@ -8,6 +8,7 @@ dayjs.extend(timezone)
module.exports = {
site: 'tvmi.mt',
+ days: 2,
url: function ({ date, channel }) {
return `https://tvmi.mt/schedule/${channel.site_id}/${date.format('YYYY-MM-DD')}`
},
diff --git a/sites/tvmusor.hu/tvmusor.hu.config.js b/sites/tvmusor.hu/tvmusor.hu.config.js
index a489dbdc..475e7b87 100644
--- a/sites/tvmusor.hu/tvmusor.hu.config.js
+++ b/sites/tvmusor.hu/tvmusor.hu.config.js
@@ -4,6 +4,7 @@ const _ = require('lodash')
module.exports = {
site: 'tvmusor.hu',
+ days: 2,
url: 'http://www.tvmusor.hu/a/get-events/',
request: {
method: 'POST',
diff --git a/sites/tvpassport.com/tvpassport.com.config.js b/sites/tvpassport.com/tvpassport.com.config.js
index 0ee8eb75..3bf9e5e1 100644
--- a/sites/tvpassport.com/tvpassport.com.config.js
+++ b/sites/tvpassport.com/tvpassport.com.config.js
@@ -11,6 +11,7 @@ dayjs.extend(customParseFormat)
module.exports = {
site: 'tvpassport.com',
+ days: 2,
url({ channel, date }) {
return `https://www.tvpassport.com/tv-listings/stations/${channel.site_id}/${date.format(
'YYYY-MM-DD'
diff --git a/sites/tvplus.com.tr/tvplus.com.tr.config.js b/sites/tvplus.com.tr/tvplus.com.tr.config.js
index c2e79709..39e78a75 100644
--- a/sites/tvplus.com.tr/tvplus.com.tr.config.js
+++ b/sites/tvplus.com.tr/tvplus.com.tr.config.js
@@ -8,6 +8,7 @@ dayjs.extend(customParseFormat)
module.exports = {
site: 'tvplus.com.tr',
+ days: 2,
url: 'https://izmottvsc23.tvplus.com.tr:33207/EPG/JSON/PlayBillList',
request: {
method: 'POST',
diff --git a/sites/tvprofil.com/tvprofil.com.config.js b/sites/tvprofil.com/tvprofil.com.config.js
index 0a65055d..41a4d9f6 100644
--- a/sites/tvprofil.com/tvprofil.com.config.js
+++ b/sites/tvprofil.com/tvprofil.com.config.js
@@ -3,6 +3,7 @@ const dayjs = require('dayjs')
module.exports = {
site: 'tvprofil.com',
+ days: 2,
skip: true, // NOTE: server is not stable
url: function ({ channel, date }) {
const parts = channel.site_id.split('#')
diff --git a/sites/tvtv.us/tvtv.us.config.js b/sites/tvtv.us/tvtv.us.config.js
index 9eeb500d..b89715d3 100644
--- a/sites/tvtv.us/tvtv.us.config.js
+++ b/sites/tvtv.us/tvtv.us.config.js
@@ -6,6 +6,7 @@ dayjs.extend(utc)
module.exports = {
skip: true, // NOTE: return an HTTP error 503 (Service Unavailable) on every request from GitHub server only (https://github.com/iptv-org/epg/issues/1172#issuecomment-1284261669)
site: 'tvtv.us',
+ days: 2,
url: function ({ date, channel }) {
return `https://www.tvtv.us/api/v1/lineup/USA-NY71652-DEFAULT/grid/${date.toJSON()}/${date
.add(1, 'd')
diff --git a/sites/useetv.com/useetv.com.config.js b/sites/useetv.com/useetv.com.config.js
index 26ab90b1..30c558ef 100644
--- a/sites/useetv.com/useetv.com.config.js
+++ b/sites/useetv.com/useetv.com.config.js
@@ -10,6 +10,7 @@ dayjs.extend(customParseFormat)
module.exports = {
site: 'useetv.com',
+ days: 2,
url({ channel }) {
return `https://www.useetv.com/tvod/${channel.site_id}`
},
diff --git a/sites/vidio.com/vidio.com.config.js b/sites/vidio.com/vidio.com.config.js
index 725a30cd..91984fdf 100644
--- a/sites/vidio.com/vidio.com.config.js
+++ b/sites/vidio.com/vidio.com.config.js
@@ -10,6 +10,7 @@ dayjs.extend(customParseFormat)
module.exports = {
site: 'vidio.com',
+ days: 2,
url({ channel }) {
return `https://www.vidio.com/live/${channel.site_id}/schedules`
},
diff --git a/sites/virginmedia.com/virginmedia.com.config.js b/sites/virginmedia.com/virginmedia.com.config.js
index 8d385a31..54aba9c3 100644
--- a/sites/virginmedia.com/virginmedia.com.config.js
+++ b/sites/virginmedia.com/virginmedia.com.config.js
@@ -5,6 +5,7 @@ const API_ENDPOINT = `https://prod.oesp.virginmedia.com/oesp/v4/GB/eng/web`
module.exports = {
site: 'virginmedia.com',
+ days: 2,
url: function ({ date }) {
return `${API_ENDPOINT}/programschedules/${date.format('YYYYMMDD')}/1`
},
diff --git a/sites/vivacom.bg/vivacom.bg.config.js b/sites/vivacom.bg/vivacom.bg.config.js
index c729d6aa..73c9f722 100644
--- a/sites/vivacom.bg/vivacom.bg.config.js
+++ b/sites/vivacom.bg/vivacom.bg.config.js
@@ -10,6 +10,7 @@ dayjs.extend(customParseFormat)
module.exports = {
site: 'vivacom.bg',
+ days: 2,
skip: true, // INFO: no longer available
url({ date, channel }) {
const [page] = channel.site_id.split('#')
diff --git a/sites/vtm.be/vtm.be.config.js b/sites/vtm.be/vtm.be.config.js
index bb9c0a1d..e9a0db80 100644
--- a/sites/vtm.be/vtm.be.config.js
+++ b/sites/vtm.be/vtm.be.config.js
@@ -5,6 +5,7 @@ dayjs.extend(isBetween)
module.exports = {
site: 'vtm.be',
+ days: 2,
url: function ({ channel }) {
return `https://vtm.be/tv-gids/${channel.site_id}`
},
diff --git a/sites/walesi.com.fj/walesi.com.fj.config.js b/sites/walesi.com.fj/walesi.com.fj.config.js
index 9e419eee..04609548 100644
--- a/sites/walesi.com.fj/walesi.com.fj.config.js
+++ b/sites/walesi.com.fj/walesi.com.fj.config.js
@@ -11,6 +11,7 @@ dayjs.extend(customParseFormat)
module.exports = {
site: 'walesi.com.fj',
+ days: 2,
skip: true, // the program is no longer available on the website
url: 'https://www.walesi.com.fj/wp-admin/admin-ajax.php',
request: {
diff --git a/sites/watchyour.tv/watchyour.tv.config.js b/sites/watchyour.tv/watchyour.tv.config.js
index 6a0afc29..378cf249 100644
--- a/sites/watchyour.tv/watchyour.tv.config.js
+++ b/sites/watchyour.tv/watchyour.tv.config.js
@@ -3,6 +3,7 @@ const axios = require('axios')
module.exports = {
site: 'watchyour.tv',
+ days: 2,
url: `https://www.watchyour.tv/guide.json`,
request: {
cache: {
diff --git a/sites/wavve.com/wavve.com.config.js b/sites/wavve.com/wavve.com.config.js
index e27e941c..ee5c769c 100644
--- a/sites/wavve.com/wavve.com.config.js
+++ b/sites/wavve.com/wavve.com.config.js
@@ -10,6 +10,7 @@ dayjs.extend(customParseFormat)
module.exports = {
site: 'wavve.com',
+ days: 2,
url: function ({ channel, date }) {
return `https://apis.pooq.co.kr/live/epgs/channels/${channel.site_id}?startdatetime=${date
.tz('Asia/Seoul')
diff --git a/sites/xumo.tv/xumo.tv.config.js b/sites/xumo.tv/xumo.tv.config.js
index e523770a..1c40304d 100644
--- a/sites/xumo.tv/xumo.tv.config.js
+++ b/sites/xumo.tv/xumo.tv.config.js
@@ -10,6 +10,7 @@ const client = axios.create({
module.exports = {
site: 'xumo.tv',
+ days: 2,
request: {
cache: {
ttl: 60 * 60 * 1000 // 1 hour
diff --git a/sites/zap.co.ao/zap.co.ao.config.js b/sites/zap.co.ao/zap.co.ao.config.js
index 54eb9e2a..3495e574 100644
--- a/sites/zap.co.ao/zap.co.ao.config.js
+++ b/sites/zap.co.ao/zap.co.ao.config.js
@@ -10,6 +10,7 @@ dayjs.extend(customParseFormat)
module.exports = {
skip: true, // NOTE: Connection timeout
site: 'zap.co.ao',
+ days: 2,
url: function ({ date, channel }) {
return `https://www.zap.co.ao/_api/channels/${date.format('YYYY-M-D')}/epg.json`
},
diff --git a/sites/ziggogo.tv/ziggogo.tv.config.js b/sites/ziggogo.tv/ziggogo.tv.config.js
index 2c5c92f6..99589e86 100644
--- a/sites/ziggogo.tv/ziggogo.tv.config.js
+++ b/sites/ziggogo.tv/ziggogo.tv.config.js
@@ -5,6 +5,7 @@ const API_ENDPOINT = `https://static.spark.ziggogo.tv/eng/web/epg-service-lite`
module.exports = {
site: 'ziggogo.tv',
+ days: 2,
request: {
cache: {
ttl: 60 * 60 * 1000 // 1 hour
diff --git a/sites/znbc.co.zm/znbc.co.zm.config.js b/sites/znbc.co.zm/znbc.co.zm.config.js
index 9973ce61..bde46b48 100644
--- a/sites/znbc.co.zm/znbc.co.zm.config.js
+++ b/sites/znbc.co.zm/znbc.co.zm.config.js
@@ -11,6 +11,7 @@ dayjs.extend(customParseFormat)
module.exports = {
site: 'znbc.co.zm',
+ days: 2,
url({ channel }) {
return `https://www.znbc.co.zm/${channel.site_id}/`
},
diff --git a/tests/__data__/expected/_readme.md b/tests/__data__/expected/_readme.md
index 0e754087..a0e36cfc 100644
--- a/tests/__data__/expected/_readme.md
+++ b/tests/__data__/expected/_readme.md
@@ -1,24 +1,53 @@
# EPG
+[](https://github.com/iptv-org/epg/actions/workflows/_update.yml)
+
EPG (Electronic Program Guide) for thousands of TV channels collected from different sources.
-## Usage
+## How to use?
To load a program guide, all you need to do is copy the link to one or more of the guides from the list below and paste it into your favorite player.
+## Guides
+
+All guides also have a compressed and JSON version. To load them just change the extension from `.xml` to `.xml.gz` or `.json` respectively.
+
+### Danish
+
- Country | Channels | EPG |
+ Site | Channels | EPG | Status |
- 🇨🇦 Canada | 2 | https://iptv-org.github.io/epg/guides/ca_en.xml |
- 5 | https://iptv-org.github.io/epg/guides/ca_fr.xml |
- 🇩🇰 Denmark | 1 | https://iptv-org.github.io/epg/guides/dk_da.xml |
+ allente.se | 1 | https://iptv-org.github.io/epg/guides/da/allente.se.xml |  |
-All guides also have a compressed and JSON version. To download them, simply change the extension from `.xml` to `.xml.gz` or `.json` respectively.
+### English
+
+
+
+ Site | Channels | EPG | Status |
+
+
+ sky.com | 1 | https://iptv-org.github.io/epg/guides/en/sky.com.xml |  |
+ virginmedia.com | 1 | https://iptv-org.github.io/epg/guides/en/virginmedia.com.xml |  |
+
+
+
+### French
+
+
+
+ Site | Channels | EPG | Status |
+
+
+ sky.com | 2 | https://iptv-org.github.io/epg/guides/fr/sky.com.xml |  |
+
+
+
+
## Contribution
diff --git a/tests/__data__/expected/_status.md b/tests/__data__/expected/_status.md
deleted file mode 100644
index 25e8e613..00000000
--- a/tests/__data__/expected/_status.md
+++ /dev/null
@@ -1,11 +0,0 @@
-# Status
-
-
-
-
- Site | Status |
-
-
- example.com |  |
-
-
diff --git a/tests/__data__/expected/api/guides.json b/tests/__data__/expected/api/guides.json
index a6fd2a2a..458eaf5e 100644
--- a/tests/__data__/expected/api/guides.json
+++ b/tests/__data__/expected/api/guides.json
@@ -1 +1 @@
-[{"channel":"6eren.dk","site":"allente.se","lang":"da","url":"https://iptv-org.github.io/epg/guides/dk_da.xml"},{"channel":"ABCSpark.ca","site":"tvhebdo.com","lang":"fr","url":"https://iptv-org.github.io/epg/guides/ca_fr.xml"},{"channel":"BBCEarthCanada.ca","site":"tvhebdo.com","lang":"fr","url":"https://iptv-org.github.io/epg/guides/ca_fr.xml"},{"channel":"CFMTDT.ca","site":"tvhebdo.com","lang":"fr","url":"https://iptv-org.github.io/epg/guides/ca_fr.xml"},{"channel":"CFMTDT.ca","site":"tvhebdo.com","lang":"en","url":"https://iptv-org.github.io/epg/guides/ca_en.xml"},{"channel":"CanalVie.ca","site":"tvhebdo.com","lang":"fr","url":"https://iptv-org.github.io/epg/guides/ca_fr.xml"},{"channel":"CanalVie.ca","site":"tvhebdo.com","lang":"en","url":"https://iptv-org.github.io/epg/guides/ca_en.xml"},{"channel":"beINSportsCanada.ca","site":"tvhebdo.com","lang":"fr","url":"https://iptv-org.github.io/epg/guides/ca_fr.xml"}]
\ No newline at end of file
+[{"channel":"6eren.dk","site":"allente.se","lang":"da","days":2,"url":"https://iptv-org.github.io/epg/guides/da/allente.se.xml"},{"channel":"BBCNews.uk","site":"virginmedia.com","lang":"en","days":2,"url":"https://iptv-org.github.io/epg/guides/en/virginmedia.com.xml"},{"channel":"BBCNews.uk","site":"sky.com","lang":"fr","days":2,"url":"https://iptv-org.github.io/epg/guides/fr/sky.com.xml"},{"channel":"BBCNews.uk","site":"sky.com","lang":"en","days":2,"url":"https://iptv-org.github.io/epg/guides/en/sky.com.xml"},{"channel":"CNN.us","site":"sky.com","lang":"fr","days":2,"url":"https://iptv-org.github.io/epg/guides/fr/sky.com.xml"}]
\ No newline at end of file
diff --git a/tests/__data__/expected/guides/bh/chaines-tv.orange.fr.epg.json b/tests/__data__/expected/guides/bh/chaines-tv.orange.fr.epg.json
deleted file mode 100644
index fb005c3c..00000000
--- a/tests/__data__/expected/guides/bh/chaines-tv.orange.fr.epg.json
+++ /dev/null
@@ -1 +0,0 @@
-{"channels":[{"id":"CNNInternationalEurope.us","name":"CNN International","site":"chaines-tv.orange.fr","site_id":"53","lang":"fr","logo":"https://i.imgur.com/2BXCg0x.jpg","url":"https://chaines-tv.orange.fr"}],"programs":[{"site":"chaines-tv.orange.fr","channel":"CNNInternationalEurope.us","titles":[{"value":"World Sport","lang":"fr"}],"sub_titles":[],"descriptions":[{"value":"Все о главных спортивных событиях мира. Обзоры самых важных спортивных событий, аналитика, мнения экспертов.","lang":"fr"}],"icon":{"src":""},"episodeNumbers":[],"date":null,"start":1641825900000,"stop":1641826800000,"urls":[],"ratings":[],"categories":[],"directors":[],"actors":[],"writers":[],"adapters":[],"producers":[],"composers":[],"editors":[],"presenters":[],"commentators":[],"guests":[]},{"site":"chaines-tv.orange.fr","channel":"CNNInternationalEurope.us","titles":[{"value":"Connecting Africa. 114-я серия","lang":"fr"}],"sub_titles":[],"descriptions":[{"value":"114-я серия. Проект, рассказывающий о людях и компаниях, которые совершают революцию в африканском бизнесе, и о тех, кто объединяет континент, выступая за свободную торговлю в Африке.","lang":"fr"}],"icon":{"src":""},"episodeNumbers":[],"date":null,"start":1641843900000,"stop":1641844800000,"urls":[],"ratings":[],"categories":[],"directors":[],"actors":[],"writers":[],"adapters":[],"producers":[],"composers":[],"editors":[],"presenters":[],"commentators":[],"guests":[]}]}
\ No newline at end of file
diff --git a/tests/__data__/expected/guides/bh/chaines-tv.orange.fr.epg.xml b/tests/__data__/expected/guides/bh/chaines-tv.orange.fr.epg.xml
deleted file mode 100644
index 61118187..00000000
--- a/tests/__data__/expected/guides/bh/chaines-tv.orange.fr.epg.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-CNN Internationalhttps://chaines-tv.orange.fr
-World SportВсе о главных спортивных событиях мира. Обзоры самых важных спортивных событий, аналитика, мнения экспертов.
-Connecting Africa. 114-я серия114-я серия. Проект, рассказывающий о людях и компаниях, которые совершают революцию в африканском бизнесе, и о тех, кто объединяет континент, выступая за свободную торговлю в Африке.
-
\ No newline at end of file
diff --git a/tests/__data__/expected/guides/bh/chaines-tv.orange.fr.epg.xml.gz b/tests/__data__/expected/guides/bh/chaines-tv.orange.fr.epg.xml.gz
deleted file mode 100644
index 5281d05c..00000000
Binary files a/tests/__data__/expected/guides/bh/chaines-tv.orange.fr.epg.xml.gz and /dev/null differ
diff --git a/tests/__data__/expected/guides/dk.json b/tests/__data__/expected/guides/da/allente.se.json
similarity index 97%
rename from tests/__data__/expected/guides/dk.json
rename to tests/__data__/expected/guides/da/allente.se.json
index 37dcb8ba..1b04e3f4 100644
--- a/tests/__data__/expected/guides/dk.json
+++ b/tests/__data__/expected/guides/da/allente.se.json
@@ -1 +1 @@
-{"channels":[{"id":"6eren.dk","name":"6'eren","site":"allente.se","lang":"da","logo":"https://upload.wikimedia.org/wikipedia/commons/6/64/6%27eren_2015.png","url":"https://allente.se"}],"programs":[{"site":"allente.se","channel":"6eren.dk","titles":[{"value":"Diners, Drive-Ins and Dives","lang":"da"}],"sub_titles":[],"descriptions":[{"value":"Underholdning","lang":"da"}],"icon":{"src":"https://viasatps.api.comspace.se/PS/channeldate/image/viasat.ps/487/2022-10-24/se.cs.6eren.event.B_0254194276971024040000.jpg?size=2560x1440"},"episodeNumbers":[{"system":"xmltv_ns","value":"23.5.0/1"},{"system":"onscreen","value":"S24E06"}],"date":null,"start":1666584000000,"stop":1666585500000,"urls":[],"ratings":[],"categories":[{"value":"series","lang":"da"}],"directors":[],"actors":[],"writers":[],"adapters":[],"producers":[],"composers":[],"editors":[],"presenters":[],"commentators":[],"guests":[]}]}
\ No newline at end of file
+{"channels":[{"id":"6eren.dk","name":"6'eren","site":"allente.se","lang":"da","logo":"https://upload.wikimedia.org/wikipedia/commons/6/64/6%27eren_2015.png","url":"https://allente.se"}],"programs":[{"site":"allente.se","channel":"6eren.dk","titles":[{"value":"Diners, Drive-Ins and Dives","lang":"da"}],"sub_titles":[],"descriptions":[{"value":"Underholdning","lang":"da"}],"icon":{"src":"https://viasatps.api.comspace.se/PS/channeldate/image/viasat.ps/487/2022-10-24/se.cs.6eren.event.B_0254194276971024040000.jpg?size=2560x1440"},"episodeNumbers":[{"system":"xmltv_ns","value":"23.5.0/1"},{"system":"onscreen","value":"S24E06"}],"date":null,"start":1666584000000,"stop":1666585500000,"urls":[],"ratings":[],"categories":[{"value":"series","lang":"da"}],"directors":[],"actors":[],"writers":[],"adapters":[],"producers":[],"composers":[],"editors":[],"presenters":[],"commentators":[],"guests":[]}],"date":"2022-10-20"}
\ No newline at end of file
diff --git a/tests/__data__/expected/guides/dk.xml b/tests/__data__/expected/guides/da/allente.se.xml
similarity index 100%
rename from tests/__data__/expected/guides/dk.xml
rename to tests/__data__/expected/guides/da/allente.se.xml
diff --git a/tests/__data__/expected/guides/dk.xml.gz b/tests/__data__/expected/guides/da/allente.se.xml.gz
similarity index 100%
rename from tests/__data__/expected/guides/dk.xml.gz
rename to tests/__data__/expected/guides/da/allente.se.xml.gz
diff --git a/tests/__data__/expected/guides/en/sky.com.json b/tests/__data__/expected/guides/en/sky.com.json
new file mode 100644
index 00000000..4a49b379
--- /dev/null
+++ b/tests/__data__/expected/guides/en/sky.com.json
@@ -0,0 +1 @@
+{"channels":[{"id":"BBCNews.uk","name":"BBC News","site":"sky.com","lang":"en","logo":"https://i.imgur.com/rPzH88J.png","url":"https://sky.com"}],"programs":[{"site":"sky.com","channel":"BBCNews.uk","titles":[{"value":"BBC News at One","lang":"en"}],"sub_titles":[],"descriptions":[{"value":"The latest national and international news from the BBC. [S,SL]","lang":"en"}],"icon":{"src":"http://epgstatic.sky.com/epgdata/1.0/paimage/46/1/lisa/5.2.2/linear/channel/ca247bc8-6be0-48f9-88d1-865f87f7680e/2011"},"episodeNumbers":[],"date":null,"start":1666872000000,"stop":1666873800000,"urls":[],"ratings":[],"categories":[],"directors":[],"actors":[],"writers":[],"adapters":[],"producers":[],"composers":[],"editors":[],"presenters":[],"commentators":[],"guests":[]}],"date":"2022-10-20"}
\ No newline at end of file
diff --git a/tests/__data__/expected/guides/en/sky.com.xml b/tests/__data__/expected/guides/en/sky.com.xml
new file mode 100644
index 00000000..1eeac223
--- /dev/null
+++ b/tests/__data__/expected/guides/en/sky.com.xml
@@ -0,0 +1,4 @@
+
+BBC Newshttps://sky.com
+BBC News at OneThe latest national and international news from the BBC. [S,SL]
+
\ No newline at end of file
diff --git a/tests/__data__/expected/guides/en/sky.com.xml.gz b/tests/__data__/expected/guides/en/sky.com.xml.gz
new file mode 100644
index 00000000..c3f1f279
Binary files /dev/null and b/tests/__data__/expected/guides/en/sky.com.xml.gz differ
diff --git a/tests/__data__/expected/guides/uk.json b/tests/__data__/expected/guides/en/virginmedia.com.json
similarity index 92%
rename from tests/__data__/expected/guides/uk.json
rename to tests/__data__/expected/guides/en/virginmedia.com.json
index 5ff6b490..85e4504f 100644
--- a/tests/__data__/expected/guides/uk.json
+++ b/tests/__data__/expected/guides/en/virginmedia.com.json
@@ -1 +1 @@
-{"channels":[{"id":"BBCNews.uk","name":"BBC News","site":"virginmedia.com","lang":"en","logo":"https://i.imgur.com/rPzH88J.png","url":"https://virginmedia.com"}],"programs":[{"site":"virginmedia.com","channel":"BBCNews.uk","titles":[{"value":"BBC News at One","lang":"en"}],"sub_titles":[],"descriptions":[{"value":"The latest national and international news, followed by weather.","lang":"en"}],"icon":{"src":""},"episodeNumbers":[{"system":"xmltv_ns","value":"96839999.145799123.0/1"},{"system":"onscreen","value":"S96840000E145799124"}],"date":null,"start":1666872000000,"stop":1666873800000,"urls":[],"ratings":[],"categories":[{"value":"News","lang":"en"}],"directors":[],"actors":[],"writers":[],"adapters":[],"producers":[],"composers":[],"editors":[],"presenters":[],"commentators":[],"guests":[]}]}
\ No newline at end of file
+{"channels":[{"id":"BBCNews.uk","name":"BBC News","site":"virginmedia.com","lang":"en","logo":"https://i.imgur.com/rPzH88J.png","url":"https://virginmedia.com"}],"programs":[{"site":"virginmedia.com","channel":"BBCNews.uk","titles":[{"value":"BBC News at One","lang":"en"}],"sub_titles":[],"descriptions":[{"value":"The latest national and international news, followed by weather.","lang":"en"}],"icon":{"src":""},"episodeNumbers":[{"system":"xmltv_ns","value":"96839999.145799123.0/1"},{"system":"onscreen","value":"S96840000E145799124"}],"date":null,"start":1666872000000,"stop":1666873800000,"urls":[],"ratings":[],"categories":[{"value":"News","lang":"en"}],"directors":[],"actors":[],"writers":[],"adapters":[],"producers":[],"composers":[],"editors":[],"presenters":[],"commentators":[],"guests":[]}],"date":"2022-10-20"}
\ No newline at end of file
diff --git a/tests/__data__/expected/guides/uk.xml b/tests/__data__/expected/guides/en/virginmedia.com.xml
similarity index 100%
rename from tests/__data__/expected/guides/uk.xml
rename to tests/__data__/expected/guides/en/virginmedia.com.xml
diff --git a/tests/__data__/expected/guides/uk.xml.gz b/tests/__data__/expected/guides/en/virginmedia.com.xml.gz
similarity index 100%
rename from tests/__data__/expected/guides/uk.xml.gz
rename to tests/__data__/expected/guides/en/virginmedia.com.xml.gz
diff --git a/tests/__data__/expected/guides/fr/chaines-tv.orange.fr.epg.json b/tests/__data__/expected/guides/fr/chaines-tv.orange.fr.epg.json
deleted file mode 100644
index fb005c3c..00000000
--- a/tests/__data__/expected/guides/fr/chaines-tv.orange.fr.epg.json
+++ /dev/null
@@ -1 +0,0 @@
-{"channels":[{"id":"CNNInternationalEurope.us","name":"CNN International","site":"chaines-tv.orange.fr","site_id":"53","lang":"fr","logo":"https://i.imgur.com/2BXCg0x.jpg","url":"https://chaines-tv.orange.fr"}],"programs":[{"site":"chaines-tv.orange.fr","channel":"CNNInternationalEurope.us","titles":[{"value":"World Sport","lang":"fr"}],"sub_titles":[],"descriptions":[{"value":"Все о главных спортивных событиях мира. Обзоры самых важных спортивных событий, аналитика, мнения экспертов.","lang":"fr"}],"icon":{"src":""},"episodeNumbers":[],"date":null,"start":1641825900000,"stop":1641826800000,"urls":[],"ratings":[],"categories":[],"directors":[],"actors":[],"writers":[],"adapters":[],"producers":[],"composers":[],"editors":[],"presenters":[],"commentators":[],"guests":[]},{"site":"chaines-tv.orange.fr","channel":"CNNInternationalEurope.us","titles":[{"value":"Connecting Africa. 114-я серия","lang":"fr"}],"sub_titles":[],"descriptions":[{"value":"114-я серия. Проект, рассказывающий о людях и компаниях, которые совершают революцию в африканском бизнесе, и о тех, кто объединяет континент, выступая за свободную торговлю в Африке.","lang":"fr"}],"icon":{"src":""},"episodeNumbers":[],"date":null,"start":1641843900000,"stop":1641844800000,"urls":[],"ratings":[],"categories":[],"directors":[],"actors":[],"writers":[],"adapters":[],"producers":[],"composers":[],"editors":[],"presenters":[],"commentators":[],"guests":[]}]}
\ No newline at end of file
diff --git a/tests/__data__/expected/guides/fr/chaines-tv.orange.fr.epg.xml b/tests/__data__/expected/guides/fr/chaines-tv.orange.fr.epg.xml
deleted file mode 100644
index 61118187..00000000
--- a/tests/__data__/expected/guides/fr/chaines-tv.orange.fr.epg.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-CNN Internationalhttps://chaines-tv.orange.fr
-World SportВсе о главных спортивных событиях мира. Обзоры самых важных спортивных событий, аналитика, мнения экспертов.
-Connecting Africa. 114-я серия114-я серия. Проект, рассказывающий о людях и компаниях, которые совершают революцию в африканском бизнесе, и о тех, кто объединяет континент, выступая за свободную торговлю в Африке.
-
\ No newline at end of file
diff --git a/tests/__data__/expected/guides/fr/chaines-tv.orange.fr.epg.xml.gz b/tests/__data__/expected/guides/fr/chaines-tv.orange.fr.epg.xml.gz
deleted file mode 100644
index 5281d05c..00000000
Binary files a/tests/__data__/expected/guides/fr/chaines-tv.orange.fr.epg.xml.gz and /dev/null differ
diff --git a/tests/__data__/expected/guides/fr/sky.com.json b/tests/__data__/expected/guides/fr/sky.com.json
new file mode 100644
index 00000000..e6e8888e
--- /dev/null
+++ b/tests/__data__/expected/guides/fr/sky.com.json
@@ -0,0 +1 @@
+{"channels":[{"id":"BBCNews.uk","name":"BBC News","site":"sky.com","lang":"fr","logo":"https://i.imgur.com/rPzH88J.png","url":"https://sky.com"},{"id":"CNN.us","name":"CNN","site":"sky.com","lang":"fr","logo":"https://www.directv.com/images/logos/channels/dark/large/579.png","url":"https://sky.com"}],"programs":[{"site":"sky.com","channel":"BBCNews.uk","titles":[{"value":"BBC News at One","lang":"fr"}],"sub_titles":[],"descriptions":[{"value":"Les dernières nouvelles nationales et internationales de la BBC. [S,SL]","lang":"fr"}],"icon":{"src":"http://epgstatic.sky.com/epgdata/1.0/paimage/46/1/lisa/5.2.2/linear/channel/ca247bc8-6be0-48f9-88d1-865f87f7680e/2011"},"episodeNumbers":[],"date":null,"start":1666872000000,"stop":1666873800000,"urls":[],"ratings":[],"categories":[],"directors":[],"actors":[],"writers":[],"adapters":[],"producers":[],"composers":[],"editors":[],"presenters":[],"commentators":[],"guests":[]},{"site":"sky.com","channel":"CNN.us","titles":[{"value":"French title","lang":"fr"}],"sub_titles":[],"descriptions":[],"icon":{"src":""},"episodeNumbers":[],"date":null,"start":1666872000000,"stop":1666873800000,"urls":[],"ratings":[],"categories":[],"directors":[],"actors":[],"writers":[],"adapters":[],"producers":[],"composers":[],"editors":[],"presenters":[],"commentators":[],"guests":[]}],"date":"2022-10-20"}
\ No newline at end of file
diff --git a/tests/__data__/expected/guides/fr/sky.com.xml b/tests/__data__/expected/guides/fr/sky.com.xml
new file mode 100644
index 00000000..d04dc456
--- /dev/null
+++ b/tests/__data__/expected/guides/fr/sky.com.xml
@@ -0,0 +1,6 @@
+
+BBC Newshttps://sky.com
+CNNhttps://sky.com
+BBC News at OneLes dernières nouvelles nationales et internationales de la BBC. [S,SL]
+French title
+
\ No newline at end of file
diff --git a/tests/__data__/expected/guides/fr/sky.com.xml.gz b/tests/__data__/expected/guides/fr/sky.com.xml.gz
new file mode 100644
index 00000000..ededb1dd
Binary files /dev/null and b/tests/__data__/expected/guides/fr/sky.com.xml.gz differ
diff --git a/tests/__data__/expected/guides/ge/magticom.ge.epg.json b/tests/__data__/expected/guides/ge/magticom.ge.epg.json
deleted file mode 100644
index a418f6d7..00000000
--- a/tests/__data__/expected/guides/ge/magticom.ge.epg.json
+++ /dev/null
@@ -1 +0,0 @@
-{"channels":[{"id":"CNNInternationalEurope.us","name":"CNN International","site":"magticom.ge","site_id":"140","lang":"ru","logo":"https://i.imgur.com/2BXCg0x.jpg","url":"https://magticom.ge"}],"programs":[]}
\ No newline at end of file
diff --git a/tests/__data__/expected/guides/ge/magticom.ge.epg.xml b/tests/__data__/expected/guides/ge/magticom.ge.epg.xml
deleted file mode 100644
index 9a4ed48e..00000000
--- a/tests/__data__/expected/guides/ge/magticom.ge.epg.xml
+++ /dev/null
@@ -1,3 +0,0 @@
-
-CNN Internationalhttps://magticom.ge
-
\ No newline at end of file
diff --git a/tests/__data__/expected/guides/ge/magticom.ge.epg.xml.gz b/tests/__data__/expected/guides/ge/magticom.ge.epg.xml.gz
deleted file mode 100644
index e51b3221..00000000
Binary files a/tests/__data__/expected/guides/ge/magticom.ge.epg.xml.gz and /dev/null differ
diff --git a/tests/__data__/expected/guides/ru/yandex.ru.epg.json b/tests/__data__/expected/guides/ru/yandex.ru.epg.json
deleted file mode 100644
index e74c7fac..00000000
--- a/tests/__data__/expected/guides/ru/yandex.ru.epg.json
+++ /dev/null
@@ -1 +0,0 @@
-{"channels":[],"programs":[]}
\ No newline at end of file
diff --git a/tests/__data__/expected/guides/ru/yandex.ru.epg.xml b/tests/__data__/expected/guides/ru/yandex.ru.epg.xml
deleted file mode 100644
index d396a1df..00000000
--- a/tests/__data__/expected/guides/ru/yandex.ru.epg.xml
+++ /dev/null
@@ -1,2 +0,0 @@
-
-
\ No newline at end of file
diff --git a/tests/__data__/expected/guides/ru/yandex.ru.epg.xml.gz b/tests/__data__/expected/guides/ru/yandex.ru.epg.xml.gz
deleted file mode 100644
index 53935329..00000000
Binary files a/tests/__data__/expected/guides/ru/yandex.ru.epg.xml.gz and /dev/null differ
diff --git a/tests/__data__/expected/guides/us/directv.com.epg.json b/tests/__data__/expected/guides/us/directv.com.epg.json
deleted file mode 100644
index e74c7fac..00000000
--- a/tests/__data__/expected/guides/us/directv.com.epg.json
+++ /dev/null
@@ -1 +0,0 @@
-{"channels":[],"programs":[]}
\ No newline at end of file
diff --git a/tests/__data__/expected/guides/us/directv.com.epg.xml b/tests/__data__/expected/guides/us/directv.com.epg.xml
deleted file mode 100644
index d396a1df..00000000
--- a/tests/__data__/expected/guides/us/directv.com.epg.xml
+++ /dev/null
@@ -1,2 +0,0 @@
-
-
\ No newline at end of file
diff --git a/tests/__data__/expected/guides/us/directv.com.epg.xml.gz b/tests/__data__/expected/guides/us/directv.com.epg.xml.gz
deleted file mode 100644
index 53935329..00000000
Binary files a/tests/__data__/expected/guides/us/directv.com.epg.xml.gz and /dev/null differ
diff --git a/tests/__data__/expected/guides/zw/dstv.com.epg.json b/tests/__data__/expected/guides/zw/dstv.com.epg.json
deleted file mode 100644
index e52810b4..00000000
--- a/tests/__data__/expected/guides/zw/dstv.com.epg.json
+++ /dev/null
@@ -1 +0,0 @@
-{"channels":[{"id":"MNetMovies2.za","name":"M-Net Movies 2","site":"dstv.com","site_id":"404a052b-3dea-4cac-a19c-de9a7d6f191d#MAP","lang":"en","logo":"https://rndcdn.dstv.com/dstvcms/2020/08/31/M-Net_Movies_2_Logo_4-3_lightbackground_xlrg.png","url":"https://dstv.com"}],"programs":[{"site":"dstv.com","channel":"MNetMovies2.za","titles":[{"value":"Robin Hood","lang":"en"}],"sub_titles":[],"descriptions":[],"icon":{"src":""},"episodeNumbers":[{"system":"xmltv_ns","value":"8.256.0/1"},{"system":"onscreen","value":"S09E257"}],"date":null,"start":1641822300000,"stop":1641829200000,"urls":[],"ratings":[],"categories":[],"directors":[],"actors":[],"writers":[],"adapters":[],"producers":[],"composers":[],"editors":[],"presenters":[],"commentators":[],"guests":[]}]}
\ No newline at end of file
diff --git a/tests/__data__/expected/guides/zw/dstv.com.epg.xml b/tests/__data__/expected/guides/zw/dstv.com.epg.xml
deleted file mode 100644
index efb0e0ab..00000000
--- a/tests/__data__/expected/guides/zw/dstv.com.epg.xml
+++ /dev/null
@@ -1,4 +0,0 @@
-
-M-Net Movies 2https://dstv.com
-Robin Hood8.256.0/1S09E257
-
\ No newline at end of file
diff --git a/tests/__data__/expected/guides/zw/dstv.com.epg.xml.gz b/tests/__data__/expected/guides/zw/dstv.com.epg.xml.gz
deleted file mode 100644
index 9b7c2064..00000000
Binary files a/tests/__data__/expected/guides/zw/dstv.com.epg.xml.gz and /dev/null differ
diff --git a/tests/__data__/expected/logs/guides/update.log b/tests/__data__/expected/logs/guides/update.log
index 701a3e2a..bf20652e 100644
--- a/tests/__data__/expected/logs/guides/update.log
+++ b/tests/__data__/expected/logs/guides/update.log
@@ -1,2 +1,5 @@
-{"country":"DK","lang":"da","site":"allente.se","channel":"6eren.dk","filename":"dk"}
-{"country":"UK","lang":"en","site":"virginmedia.com","channel":"BBCNews.uk","filename":"uk"}
\ No newline at end of file
+{"site":"allente.se","lang":"da","days":2,"channel":"6eren.dk","filename":"da/allente.se"}
+{"site":"virginmedia.com","lang":"en","days":2,"channel":"BBCNews.uk","filename":"en/virginmedia.com"}
+{"site":"sky.com","lang":"fr","days":2,"channel":"BBCNews.uk","filename":"fr/sky.com"}
+{"site":"sky.com","lang":"fr","days":2,"channel":"CNN.us","filename":"fr/sky.com"}
+{"site":"sky.com","lang":"en","days":2,"channel":"BBCNews.uk","filename":"en/sky.com"}
\ No newline at end of file
diff --git a/tests/__data__/input/database/update-guides/programs.db b/tests/__data__/input/database/update-guides/programs.db
index e72a3252..0bedb48e 100644
--- a/tests/__data__/input/database/update-guides/programs.db
+++ b/tests/__data__/input/database/update-guides/programs.db
@@ -2,4 +2,5 @@
{"site":"allente.se","channel":"6eren.dk","titles":[{"value":"Diners, Drive-Ins and Dives","lang":"da"}],"sub_titles":[],"descriptions":[{"value":"Underholdning","lang":"da"}],"icon":{"src":"https://viasatps.api.comspace.se/PS/channeldate/image/viasat.ps/487/2022-10-24/se.cs.6eren.event.B_0254194276971024040000.jpg?size=2560x1440"},"episodeNumbers":[{"system":"xmltv_ns","value":"23.5.0/1"},{"system":"onscreen","value":"S24E06"}],"date":null,"start":1666584000000,"stop":1666585500000,"urls":[],"ratings":[],"categories":[{"value":"series","lang":"da"}],"directors":[],"actors":[],"writers":[],"adapters":[],"producers":[],"composers":[],"editors":[],"presenters":[],"commentators":[],"guests":[],"_qid":"f6cxTM73LfZ8TdYz","_id":"HxsrBRTFj1z05TAK"}
{"site":"virginmedia.com","channel":"BBCNews.uk","titles":[{"value":"BBC News at One","lang":"en"}],"sub_titles":[],"descriptions":[{"value":"The latest national and international news, followed by weather.","lang":"en"}],"icon":{"src":""},"episodeNumbers":[{"system":"xmltv_ns","value":"96839999.145799123.0/1"},{"system":"onscreen","value":"S96840000E145799124"}],"date":null,"start":1666872000000,"stop":1666873800000,"urls":[],"ratings":[],"categories":[{"value":"News","lang":"en"}],"directors":[],"actors":[],"writers":[],"adapters":[],"producers":[],"composers":[],"editors":[],"presenters":[],"commentators":[],"guests":[],"_qid":"lNXh3lBnb4n1DBzs","_id":"quKCInjZV98xFUAf"}
{"site":"sky.com","channel":"BBCNews.uk","titles":[{"value":"BBC News at One","lang":"en"}],"sub_titles":[],"descriptions":[{"value":"The latest national and international news from the BBC. [S,SL]","lang":"en"}],"icon":{"src":"http://epgstatic.sky.com/epgdata/1.0/paimage/46/1/lisa/5.2.2/linear/channel/ca247bc8-6be0-48f9-88d1-865f87f7680e/2011"},"episodeNumbers":[],"date":null,"start":1666872000000,"stop":1666873800000,"urls":[],"ratings":[],"categories":[],"directors":[],"actors":[],"writers":[],"adapters":[],"producers":[],"composers":[],"editors":[],"presenters":[],"commentators":[],"guests":[],"_qid":"36duI92slofEXlSa","_id":"ryzed0Bqda1QtE7i"}
+{"site":"sky.com","channel":"BBCNews.uk","titles":[{"value":"BBC News at One","lang":"fr"}],"sub_titles":[],"descriptions":[{"value":"Les dernières nouvelles nationales et internationales de la BBC. [S,SL]","lang":"fr"}],"icon":{"src":"http://epgstatic.sky.com/epgdata/1.0/paimage/46/1/lisa/5.2.2/linear/channel/ca247bc8-6be0-48f9-88d1-865f87f7680e/2011"},"episodeNumbers":[],"date":null,"start":1666872000000,"stop":1666873800000,"urls":[],"ratings":[],"categories":[],"directors":[],"actors":[],"writers":[],"adapters":[],"producers":[],"composers":[],"editors":[],"presenters":[],"commentators":[],"guests":[],"_qid":"32duI92slofEXlSa","_id":"r5zed0Bqda1QtE7i"}
{"site":"sky.com","channel":"CNN.us","titles":[{"value":"French title","lang":"fr"}],"sub_titles":[],"descriptions":[],"icon":{},"episodeNumbers":[],"date":null,"start":1666872000000,"stop":1666873800000,"urls":[],"ratings":[],"categories":[],"directors":[],"actors":[],"writers":[],"adapters":[],"producers":[],"composers":[],"editors":[],"presenters":[],"commentators":[],"guests":[],"_qid":"37duI92slofEXlSa","_id":"rxzed0Bqda1QtE7i"}
\ No newline at end of file
diff --git a/tests/__data__/input/logs/guides/update.log b/tests/__data__/input/logs/guides/update.log
index 87eb14a2..bf20652e 100644
--- a/tests/__data__/input/logs/guides/update.log
+++ b/tests/__data__/input/logs/guides/update.log
@@ -1,8 +1,5 @@
-{"country":"DK","lang":"da","site":"allente.se","channel":"6eren.dk","filename":"dk_da"}
-{"country":"CA","lang":"fr","site":"tvhebdo.com","channel":"ABCSpark.ca","filename":"ca_fr"}
-{"country":"CA","lang":"fr","site":"tvhebdo.com","channel":"BBCEarthCanada.ca","filename":"ca_fr"}
-{"country":"CA","lang":"fr","site":"tvhebdo.com","channel":"beINSportsCanada.ca","filename":"ca_fr"}
-{"country":"CA","lang":"fr","site":"tvhebdo.com","channel":"CanalVie.ca","filename":"ca_fr"}
-{"country":"CA","lang":"fr","site":"tvhebdo.com","channel":"CFMTDT.ca","filename":"ca_fr"}
-{"country":"CA","lang":"en","site":"tvhebdo.com","channel":"CanalVie.ca","filename":"ca_en"}
-{"country":"CA","lang":"en","site":"tvhebdo.com","channel":"CFMTDT.ca","filename":"ca_en"}
\ No newline at end of file
+{"site":"allente.se","lang":"da","days":2,"channel":"6eren.dk","filename":"da/allente.se"}
+{"site":"virginmedia.com","lang":"en","days":2,"channel":"BBCNews.uk","filename":"en/virginmedia.com"}
+{"site":"sky.com","lang":"fr","days":2,"channel":"BBCNews.uk","filename":"fr/sky.com"}
+{"site":"sky.com","lang":"fr","days":2,"channel":"CNN.us","filename":"fr/sky.com"}
+{"site":"sky.com","lang":"en","days":2,"channel":"BBCNews.uk","filename":"en/sky.com"}
\ No newline at end of file
diff --git a/tests/__data__/input/sites/example.com.config.js b/tests/__data__/input/sites/example.com.config.js
index 20384029..e420f308 100644
--- a/tests/__data__/input/sites/example.com.config.js
+++ b/tests/__data__/input/sites/example.com.config.js
@@ -1,5 +1,6 @@
module.exports = {
site: 'example.com',
+ days: 2,
url() {
return `https://example.com`
},
diff --git a/tests/commands/guides/update.test.js b/tests/commands/guides/update.test.js
index eac2e69c..0f335c01 100644
--- a/tests/commands/guides/update.test.js
+++ b/tests/commands/guides/update.test.js
@@ -23,32 +23,28 @@ it('can generate /guides', () => {
> NODE_OPTIONS=--max-old-space-size=5120 node scripts/commands/guides/update.js
starting...
-loading data/countries.json...
loading data/channels.json...
-loading data/regions.json...
-loading data/subdivisions.json...
loading database/programs.db...
-found 5 programs
-creating tests/__data__/output/guides/dk.xml...
-creating tests/__data__/output/guides/dk.xml.gz...
-creating tests/__data__/output/guides/dk.json...
-creating tests/__data__/output/guides/uk.xml...
-creating tests/__data__/output/guides/uk.xml.gz...
-creating tests/__data__/output/guides/uk.json...
+found 6 programs
+creating tests/__data__/output/guides/da/allente.se.xml...
+creating tests/__data__/output/guides/da/allente.se.xml.gz...
+creating tests/__data__/output/guides/da/allente.se.json...
+creating tests/__data__/output/guides/en/virginmedia.com.xml...
+creating tests/__data__/output/guides/en/virginmedia.com.xml.gz...
+creating tests/__data__/output/guides/en/virginmedia.com.json...
+creating tests/__data__/output/guides/fr/sky.com.xml...
+creating tests/__data__/output/guides/fr/sky.com.xml.gz...
+creating tests/__data__/output/guides/fr/sky.com.json...
+creating tests/__data__/output/guides/en/sky.com.xml...
+creating tests/__data__/output/guides/en/sky.com.xml.gz...
+creating tests/__data__/output/guides/en/sky.com.json...
creating tests/__data__/output/logs/guides/update.log...
-
-report:
-┌─────────┬────────────┬───────────┬──────┬──────────┬────────────────┬───────────┐
-│ (index) │ type │ site │ lang │ channel │ broadcast_area │ languages │
-├─────────┼────────────┼───────────┼──────┼──────────┼────────────────┼───────────┤
-│ 0 │ 'no_guide' │ 'sky.com' │ 'fr' │ 'CNN.us' │ [ 'c/US' ] │ [ 'eng' ] │
-└─────────┴────────────┴───────────┴──────┴──────────┴────────────────┴───────────┘
-found 1 error(s)
+finished
`
)
const uncompressed = glob
- .sync('tests/__data__/expected/guides/*.xml')
+ .sync('tests/__data__/expected/guides/**/*.xml')
.map(f => f.replace('tests/__data__/expected/', ''))
uncompressed.forEach(filepath => {
@@ -56,7 +52,7 @@ found 1 error(s)
})
const compressed = glob
- .sync('tests/__data__/expected/guides/*.xml.gz')
+ .sync('tests/__data__/expected/guides/**/*.xml.gz')
.map(f => f.replace('tests/__data__/expected/', ''))
compressed.forEach(filepath => {
@@ -64,7 +60,7 @@ found 1 error(s)
})
const json = glob
- .sync('tests/__data__/expected/guides/*.json')
+ .sync('tests/__data__/expected/guides/**/*.json')
.map(f => f.replace('tests/__data__/expected/', ''))
json.forEach(filepath => {
diff --git a/tests/commands/queue/create.test.js b/tests/commands/queue/create.test.js
index 6376d5af..efaba63f 100644
--- a/tests/commands/queue/create.test.js
+++ b/tests/commands/queue/create.test.js
@@ -6,7 +6,7 @@ beforeEach(() => {
fs.emptyDirSync('tests/__data__/output')
const stdout = execSync(
- 'DB_DIR=tests/__data__/output/database CHANNELS_PATH=tests/__data__/input/sites/example.com_*.channels.xml DATA_DIR=tests/__data__/input/data npm run queue:create -- --max-clusters=1 --days=2',
+ 'DB_DIR=tests/__data__/output/database CHANNELS_PATH=tests/__data__/input/sites/example.com_*.channels.xml DATA_DIR=tests/__data__/input/data CURR_DATE=2022-12-29 npm run queue:create -- --max-clusters=1',
{ encoding: 'utf8' }
)
})
@@ -17,19 +17,19 @@ it('can create queue', () => {
output = output.map(i => {
i._id = null
- i.date = null
return i
})
expected = expected.map(i => {
i._id = null
- i.date = null
return i
})
expect(output).toEqual(
expect.arrayContaining([
expect.objectContaining(expected[0]),
- expect.objectContaining(expected[1])
+ expect.objectContaining(expected[1]),
+ expect.objectContaining(expected[2]),
+ expect.objectContaining(expected[3])
])
)
})
diff --git a/tests/commands/status/update.test.js b/tests/commands/status/update.test.js
deleted file mode 100644
index 568869b8..00000000
--- a/tests/commands/status/update.test.js
+++ /dev/null
@@ -1,26 +0,0 @@
-const { execSync } = require('child_process')
-const fs = require('fs-extra')
-const path = require('path')
-
-beforeEach(() => {
- fs.emptyDirSync('tests/__data__/output')
-
- const stdout = execSync(
- 'CONFIGS_PATH=tests/__data__/input/sites/example.com.config.js DATA_DIR=tests/__data__/input/data npm run status:update -- --config=tests/__data__/input/status.json',
- { encoding: 'utf8' }
- )
-})
-
-it('can update status.md', () => {
- expect(content('tests/__data__/output/status.md')).toBe(
- content('tests/__data__/expected/_status.md')
- )
-})
-
-function content(filepath) {
- const data = fs.readFileSync(path.resolve(filepath), {
- encoding: 'utf8'
- })
-
- return JSON.stringify(data)
-}
diff --git a/yarn.lock b/yarn.lock
index 596f336d..b9ff04ec 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -1631,10 +1631,10 @@
"resolved" "https://registry.npmjs.org/entities/-/entities-4.4.0.tgz"
"version" "4.4.0"
-"epg-grabber@^0.29.5":
- "integrity" "sha512-HJvziMNM7YDcJnfkIxWm5ulg76T5eH44mxsLL579dfold//QYZgaCKWMQKPNoGVuCW5SMIY7g90d08VC2rZe6w=="
- "resolved" "https://registry.npmjs.org/epg-grabber/-/epg-grabber-0.29.5.tgz"
- "version" "0.29.5"
+"epg-grabber@^0.29.7":
+ "integrity" "sha512-wvjevMnrJD/fr4TaJ0Wh4Y2Kyy0LLQtp+bOEsHFCsF8oe53jUnThOlUYsAT49Sx5v7A6K9GheGxDAXOpLXV67A=="
+ "resolved" "https://registry.npmjs.org/epg-grabber/-/epg-grabber-0.29.7.tgz"
+ "version" "0.29.7"
dependencies:
"axios" "^0.21.1"
"axios-cache-interceptor" "^0.10.3"