From 047df3c70782b210edd89b4fd53e523afb3278a5 Mon Sep 17 00:00:00 2001 From: freearhey <7253922+freearhey@users.noreply.github.com> Date: Mon, 2 Oct 2023 05:52:19 +0300 Subject: [PATCH 01/19] Update test data --- tests/__data__/expected/guide.xml | 14 +++++++++ tests/__data__/expected/guide.xml.gz | Bin 0 -> 297 bytes tests/__data__/expected/guide2.xml | 8 +++++ .../expected/guides/en/example.com.xml | 3 +- .../expected/guides/fr/example.com.xml | 3 +- .../channels-parse-clean.channels.xml | 5 ++++ .../channels-parse.channels.xml | 5 ++++ .../sites/parse-channels-clean.channels.xml | 7 ----- .../sites/parse-channels.channels.xml | 7 ----- .../channels-editor.channels.xml | 4 +++ .../channels-lint/channels-lint.channels.xml | 4 +++ .../channels-parse.channels.xml | 4 +++ .../channels-parse.config.js} | 4 +-- .../channels-validate/duplicate.channels.xml | 5 ++++ .../wrong_xmltv_id.channels.xml | 4 +++ .../input/epg-grab/custom.channels.xml | 9 ++++++ .../example.com/example.com.channels.xml | 6 ++++ .../sites/example.com/example.com.config.js | 28 ++++++++++++++++++ .../example2.com/example2.com.channels.xml | 6 ++++ .../sites/example2.com/example2.com.config.js | 23 ++++++++++++++ .../input/sites/duplicate.channels.xml | 7 ----- .../sites/epg-grab/epg-grab.channels.xml | 8 ----- .../input/sites/epg-grab/epg-grab.config.js | 21 ------------- .../input/sites/example.com.config.js | 10 ------- .../input/sites/example.com_en.channels.xml | 7 ----- .../input/sites/example.com_ru.channels.xml | 6 ---- .../input/sites/ignore.com.channels.xml | 6 ---- .../__data__/input/sites/ignore.com.config.js | 10 ------- tests/__data__/input/sites/lint.channels.xml | 6 ---- .../input/sites/parse-channels.channels.xml | 6 ---- .../input/sites/wrong_xmltv_id.channels.xml | 6 ---- .../input/{tmp => temp}/data/channels.json | 0 .../input/{tmp => temp}/data/countries.json | 0 .../input/{tmp => temp}/data/regions.json | 0 .../{tmp => temp}/data/subdivisions.json | 0 35 files changed, 130 insertions(+), 112 deletions(-) create mode 100644 tests/__data__/expected/guide.xml create mode 100644 tests/__data__/expected/guide.xml.gz create mode 100644 tests/__data__/expected/guide2.xml create mode 100644 tests/__data__/expected/sites/channels-parse/channels-parse-clean.channels.xml create mode 100644 tests/__data__/expected/sites/channels-parse/channels-parse.channels.xml delete mode 100644 tests/__data__/expected/sites/parse-channels-clean.channels.xml delete mode 100644 tests/__data__/expected/sites/parse-channels.channels.xml create mode 100644 tests/__data__/input/channels-editor/channels-editor.channels.xml create mode 100644 tests/__data__/input/channels-lint/channels-lint.channels.xml create mode 100644 tests/__data__/input/channels-parse/channels-parse.channels.xml rename tests/__data__/input/{sites/parse-channels.config.js => channels-parse/channels-parse.config.js} (84%) create mode 100644 tests/__data__/input/channels-validate/duplicate.channels.xml create mode 100644 tests/__data__/input/channels-validate/wrong_xmltv_id.channels.xml create mode 100644 tests/__data__/input/epg-grab/custom.channels.xml create mode 100644 tests/__data__/input/epg-grab/sites/example.com/example.com.channels.xml create mode 100644 tests/__data__/input/epg-grab/sites/example.com/example.com.config.js create mode 100644 tests/__data__/input/epg-grab/sites/example2.com/example2.com.channels.xml create mode 100644 tests/__data__/input/epg-grab/sites/example2.com/example2.com.config.js delete mode 100644 tests/__data__/input/sites/duplicate.channels.xml delete mode 100644 tests/__data__/input/sites/epg-grab/epg-grab.channels.xml delete mode 100644 tests/__data__/input/sites/epg-grab/epg-grab.config.js delete mode 100644 tests/__data__/input/sites/example.com.config.js delete mode 100644 tests/__data__/input/sites/example.com_en.channels.xml delete mode 100644 tests/__data__/input/sites/example.com_ru.channels.xml delete mode 100644 tests/__data__/input/sites/ignore.com.channels.xml delete mode 100644 tests/__data__/input/sites/ignore.com.config.js delete mode 100644 tests/__data__/input/sites/lint.channels.xml delete mode 100644 tests/__data__/input/sites/parse-channels.channels.xml delete mode 100644 tests/__data__/input/sites/wrong_xmltv_id.channels.xml rename tests/__data__/input/{tmp => temp}/data/channels.json (100%) rename tests/__data__/input/{tmp => temp}/data/countries.json (100%) rename tests/__data__/input/{tmp => temp}/data/regions.json (100%) rename tests/__data__/input/{tmp => temp}/data/subdivisions.json (100%) diff --git a/tests/__data__/expected/guide.xml b/tests/__data__/expected/guide.xml new file mode 100644 index 00000000..cb8791d4 --- /dev/null +++ b/tests/__data__/expected/guide.xml @@ -0,0 +1,14 @@ + +Channel 1https://example.com +Channel 1https://example2.com +Channel 2https://example.com +Channel 3https://example2.com +Channel 4https://example2.com +Program1 (example.com) +Programme1 (example.com) +Programme1 (example2.com) +Program1 (example.com) +Programme1 (example.com) +Program1 (example2.com) +Program1 (example2.com) + \ No newline at end of file diff --git a/tests/__data__/expected/guide.xml.gz b/tests/__data__/expected/guide.xml.gz new file mode 100644 index 0000000000000000000000000000000000000000..d6677245400ad71641eac6b6ed55bae730db2e12 GIT binary patch literal 297 zcmV+^0oMK>iwFP!000006UCC>O2aS|#_t8+A>>MtHGf*rjWoLuy!JvLAhgG=kfbHa z%6xk}S4R~rqs{atgnZ$AzjMAL)_bE-3(i-y%`r8~Ew>>wenklE zm1#62MQsE*2!izGFXY6}x8fsKJZe+vh*KK3scgh5n_< literal 0 HcmV?d00001 diff --git a/tests/__data__/expected/guide2.xml b/tests/__data__/expected/guide2.xml new file mode 100644 index 00000000..b358b044 --- /dev/null +++ b/tests/__data__/expected/guide2.xml @@ -0,0 +1,8 @@ + +Channel 1https://example.com +Channel 2https://example.com +Program1 (example.com) +Programme1 (example.com) +Program1 (example.com) +Programme1 (example.com) + \ No newline at end of file diff --git a/tests/__data__/expected/guides/en/example.com.xml b/tests/__data__/expected/guides/en/example.com.xml index e99bf680..2d958ef6 100644 --- a/tests/__data__/expected/guides/en/example.com.xml +++ b/tests/__data__/expected/guides/en/example.com.xml @@ -1,5 +1,6 @@ Channel 1https://example.com Channel 2https://example.com -Program1 +Program1 (example.com) +Program1 (example.com) \ No newline at end of file diff --git a/tests/__data__/expected/guides/fr/example.com.xml b/tests/__data__/expected/guides/fr/example.com.xml index b9653f35..59aafc38 100644 --- a/tests/__data__/expected/guides/fr/example.com.xml +++ b/tests/__data__/expected/guides/fr/example.com.xml @@ -1,4 +1,5 @@ Channel 1https://example.com -Program1 +Programme1 (example.com) +Programme1 (example.com) \ No newline at end of file diff --git a/tests/__data__/expected/sites/channels-parse/channels-parse-clean.channels.xml b/tests/__data__/expected/sites/channels-parse/channels-parse-clean.channels.xml new file mode 100644 index 00000000..ebf174d8 --- /dev/null +++ b/tests/__data__/expected/sites/channels-parse/channels-parse-clean.channels.xml @@ -0,0 +1,5 @@ + + + CNN International + BBC World News + diff --git a/tests/__data__/expected/sites/channels-parse/channels-parse.channels.xml b/tests/__data__/expected/sites/channels-parse/channels-parse.channels.xml new file mode 100644 index 00000000..57e699ea --- /dev/null +++ b/tests/__data__/expected/sites/channels-parse/channels-parse.channels.xml @@ -0,0 +1,5 @@ + + + BBC World News + CNN International + diff --git a/tests/__data__/expected/sites/parse-channels-clean.channels.xml b/tests/__data__/expected/sites/parse-channels-clean.channels.xml deleted file mode 100644 index 2b8e092f..00000000 --- a/tests/__data__/expected/sites/parse-channels-clean.channels.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - CNN International - BBC World News - - diff --git a/tests/__data__/expected/sites/parse-channels.channels.xml b/tests/__data__/expected/sites/parse-channels.channels.xml deleted file mode 100644 index e20ceef3..00000000 --- a/tests/__data__/expected/sites/parse-channels.channels.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - BBC World News - CNN International - - diff --git a/tests/__data__/input/channels-editor/channels-editor.channels.xml b/tests/__data__/input/channels-editor/channels-editor.channels.xml new file mode 100644 index 00000000..dd78c49c --- /dev/null +++ b/tests/__data__/input/channels-editor/channels-editor.channels.xml @@ -0,0 +1,4 @@ + + + CNN International + diff --git a/tests/__data__/input/channels-lint/channels-lint.channels.xml b/tests/__data__/input/channels-lint/channels-lint.channels.xml new file mode 100644 index 00000000..7983d18e --- /dev/null +++ b/tests/__data__/input/channels-lint/channels-lint.channels.xml @@ -0,0 +1,4 @@ + + + CNN International + diff --git a/tests/__data__/input/channels-parse/channels-parse.channels.xml b/tests/__data__/input/channels-parse/channels-parse.channels.xml new file mode 100644 index 00000000..a69639f9 --- /dev/null +++ b/tests/__data__/input/channels-parse/channels-parse.channels.xml @@ -0,0 +1,4 @@ + + + CNN International + diff --git a/tests/__data__/input/sites/parse-channels.config.js b/tests/__data__/input/channels-parse/channels-parse.config.js similarity index 84% rename from tests/__data__/input/sites/parse-channels.config.js rename to tests/__data__/input/channels-parse/channels-parse.config.js index e79ffa4e..4688835f 100644 --- a/tests/__data__/input/sites/parse-channels.config.js +++ b/tests/__data__/input/channels-parse/channels-parse.config.js @@ -1,8 +1,6 @@ module.exports = { site: 'parse-channels.com', - url() { - return `https://parse-channels.com` - }, + url: 'https://parse-channels.com', parser() { return [] }, diff --git a/tests/__data__/input/channels-validate/duplicate.channels.xml b/tests/__data__/input/channels-validate/duplicate.channels.xml new file mode 100644 index 00000000..dcb3635d --- /dev/null +++ b/tests/__data__/input/channels-validate/duplicate.channels.xml @@ -0,0 +1,5 @@ + + + Bravo + Bravo + \ No newline at end of file diff --git a/tests/__data__/input/channels-validate/wrong_xmltv_id.channels.xml b/tests/__data__/input/channels-validate/wrong_xmltv_id.channels.xml new file mode 100644 index 00000000..efbe406a --- /dev/null +++ b/tests/__data__/input/channels-validate/wrong_xmltv_id.channels.xml @@ -0,0 +1,4 @@ + + + CNN International + \ No newline at end of file diff --git a/tests/__data__/input/epg-grab/custom.channels.xml b/tests/__data__/input/epg-grab/custom.channels.xml new file mode 100644 index 00000000..f32419c6 --- /dev/null +++ b/tests/__data__/input/epg-grab/custom.channels.xml @@ -0,0 +1,9 @@ + + + Channel 1 + Channel 2 + Channel 1 + Channel 3 + Channel 4 + Channel 1 + \ No newline at end of file diff --git a/tests/__data__/input/epg-grab/sites/example.com/example.com.channels.xml b/tests/__data__/input/epg-grab/sites/example.com/example.com.channels.xml new file mode 100644 index 00000000..7f81064b --- /dev/null +++ b/tests/__data__/input/epg-grab/sites/example.com/example.com.channels.xml @@ -0,0 +1,6 @@ + + + Channel 1 + Channel 2 + Channel 1 + \ No newline at end of file diff --git a/tests/__data__/input/epg-grab/sites/example.com/example.com.config.js b/tests/__data__/input/epg-grab/sites/example.com/example.com.config.js new file mode 100644 index 00000000..51b43a62 --- /dev/null +++ b/tests/__data__/input/epg-grab/sites/example.com/example.com.config.js @@ -0,0 +1,28 @@ +module.exports = { + site: 'example.com', + days: 2, + request: { + timeout: 1000 + }, + url: 'https://example.com', + parser({ channel, date }) { + if (channel.xmltv_id === 'Channel2.us') return [] + else if (channel.xmltv_id === 'Channel1.us' && channel.lang === 'fr') { + return [ + { + title: 'Programme1 (example.com)', + start: `${date.format('YYYY-MM-DD')}T04:30:00.000Z`, + stop: `${date.format('YYYY-MM-DD')}T07:10:00.000Z` + } + ] + } + + return [ + { + title: 'Program1 (example.com)', + start: `${date.format('YYYY-MM-DD')}T04:30:00.000Z`, + stop: `${date.format('YYYY-MM-DD')}T07:10:00.000Z` + } + ] + } +} diff --git a/tests/__data__/input/epg-grab/sites/example2.com/example2.com.channels.xml b/tests/__data__/input/epg-grab/sites/example2.com/example2.com.channels.xml new file mode 100644 index 00000000..821bd29c --- /dev/null +++ b/tests/__data__/input/epg-grab/sites/example2.com/example2.com.channels.xml @@ -0,0 +1,6 @@ + + + Channel 3 + Channel 4 + Channel 1 + \ No newline at end of file diff --git a/tests/__data__/input/epg-grab/sites/example2.com/example2.com.config.js b/tests/__data__/input/epg-grab/sites/example2.com/example2.com.config.js new file mode 100644 index 00000000..68561cc8 --- /dev/null +++ b/tests/__data__/input/epg-grab/sites/example2.com/example2.com.config.js @@ -0,0 +1,23 @@ +module.exports = { + site: 'example2.com', + url: 'https://example2.com', + parser({ channel, date }) { + if (channel.lang === 'fr') { + return [ + { + title: 'Programme1 (example2.com)', + start: `${date.format('YYYY-MM-DD')}T04:40:00.000Z`, + stop: `${date.format('YYYY-MM-DD')}T07:10:00.000Z` + } + ] + } + + return [ + { + title: 'Program1 (example2.com)', + start: `${date.format('YYYY-MM-DD')}T04:30:00.000Z`, + stop: `${date.format('YYYY-MM-DD')}T07:10:00.000Z` + } + ] + } +} diff --git a/tests/__data__/input/sites/duplicate.channels.xml b/tests/__data__/input/sites/duplicate.channels.xml deleted file mode 100644 index deba9dac..00000000 --- a/tests/__data__/input/sites/duplicate.channels.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - Bravo - Bravo - - \ No newline at end of file diff --git a/tests/__data__/input/sites/epg-grab/epg-grab.channels.xml b/tests/__data__/input/sites/epg-grab/epg-grab.channels.xml deleted file mode 100644 index 75fa7c3c..00000000 --- a/tests/__data__/input/sites/epg-grab/epg-grab.channels.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - Channel 1 - Channel 2 - Channel 1 - - \ No newline at end of file diff --git a/tests/__data__/input/sites/epg-grab/epg-grab.config.js b/tests/__data__/input/sites/epg-grab/epg-grab.config.js deleted file mode 100644 index dca7aeea..00000000 --- a/tests/__data__/input/sites/epg-grab/epg-grab.config.js +++ /dev/null @@ -1,21 +0,0 @@ -module.exports = { - site: 'example.com', - days: 1, - request: { - timeout: 1000 - }, - url() { - return `https://example.com` - }, - parser({ channel }) { - if (channel.xmltv_id === 'Channel2.us') return [] - - return [ - { - title: 'Program1', - start: '2022-03-06T04:30:00.000Z', - stop: '2022-03-06T07:10:00.000Z' - } - ] - } -} diff --git a/tests/__data__/input/sites/example.com.config.js b/tests/__data__/input/sites/example.com.config.js deleted file mode 100644 index e420f308..00000000 --- a/tests/__data__/input/sites/example.com.config.js +++ /dev/null @@ -1,10 +0,0 @@ -module.exports = { - site: 'example.com', - days: 2, - url() { - return `https://example.com` - }, - parser() { - return [] - } -} diff --git a/tests/__data__/input/sites/example.com_en.channels.xml b/tests/__data__/input/sites/example.com_en.channels.xml deleted file mode 100644 index 44520703..00000000 --- a/tests/__data__/input/sites/example.com_en.channels.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - Channel 1 - Channel 2 - - \ No newline at end of file diff --git a/tests/__data__/input/sites/example.com_ru.channels.xml b/tests/__data__/input/sites/example.com_ru.channels.xml deleted file mode 100644 index fc21be06..00000000 --- a/tests/__data__/input/sites/example.com_ru.channels.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - Channel 1 - - \ No newline at end of file diff --git a/tests/__data__/input/sites/ignore.com.channels.xml b/tests/__data__/input/sites/ignore.com.channels.xml deleted file mode 100644 index ec8ad844..00000000 --- a/tests/__data__/input/sites/ignore.com.channels.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - 1+2 - - \ No newline at end of file diff --git a/tests/__data__/input/sites/ignore.com.config.js b/tests/__data__/input/sites/ignore.com.config.js deleted file mode 100644 index b0058dfc..00000000 --- a/tests/__data__/input/sites/ignore.com.config.js +++ /dev/null @@ -1,10 +0,0 @@ -module.exports = { - site: 'ignore.com', - ignore: true, - url() { - return `https://ignore.com` - }, - parser() { - return [] - } -} diff --git a/tests/__data__/input/sites/lint.channels.xml b/tests/__data__/input/sites/lint.channels.xml deleted file mode 100644 index b85e8b8d..00000000 --- a/tests/__data__/input/sites/lint.channels.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - CNN International - - \ No newline at end of file diff --git a/tests/__data__/input/sites/parse-channels.channels.xml b/tests/__data__/input/sites/parse-channels.channels.xml deleted file mode 100644 index 29f16d4b..00000000 --- a/tests/__data__/input/sites/parse-channels.channels.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - CNN International - - diff --git a/tests/__data__/input/sites/wrong_xmltv_id.channels.xml b/tests/__data__/input/sites/wrong_xmltv_id.channels.xml deleted file mode 100644 index 638ab301..00000000 --- a/tests/__data__/input/sites/wrong_xmltv_id.channels.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - CNN International - - \ No newline at end of file diff --git a/tests/__data__/input/tmp/data/channels.json b/tests/__data__/input/temp/data/channels.json similarity index 100% rename from tests/__data__/input/tmp/data/channels.json rename to tests/__data__/input/temp/data/channels.json diff --git a/tests/__data__/input/tmp/data/countries.json b/tests/__data__/input/temp/data/countries.json similarity index 100% rename from tests/__data__/input/tmp/data/countries.json rename to tests/__data__/input/temp/data/countries.json diff --git a/tests/__data__/input/tmp/data/regions.json b/tests/__data__/input/temp/data/regions.json similarity index 100% rename from tests/__data__/input/tmp/data/regions.json rename to tests/__data__/input/temp/data/regions.json diff --git a/tests/__data__/input/tmp/data/subdivisions.json b/tests/__data__/input/temp/data/subdivisions.json similarity index 100% rename from tests/__data__/input/tmp/data/subdivisions.json rename to tests/__data__/input/temp/data/subdivisions.json From 7df6b224d4ba710a11a8bd6aef34b101e8ae7b19 Mon Sep 17 00:00:00 2001 From: freearhey <7253922+freearhey@users.noreply.github.com> Date: Mon, 2 Oct 2023 05:52:53 +0300 Subject: [PATCH 02/19] Update tests --- tests/commands/channels/editor.test.ts | 27 +++++ tests/commands/channels/lint.test.js | 19 ---- tests/commands/channels/lint.test.ts | 28 ++++++ tests/commands/channels/parse.test.js | 39 -------- tests/commands/channels/parse.test.ts | 41 ++++++++ .../{validate.test.js => validate.test.ts} | 81 ++++++++------- tests/commands/epg/grab.test.js | 39 -------- tests/commands/epg/grab.test.ts | 98 +++++++++++++++++++ 8 files changed, 239 insertions(+), 133 deletions(-) create mode 100644 tests/commands/channels/editor.test.ts delete mode 100644 tests/commands/channels/lint.test.js create mode 100644 tests/commands/channels/lint.test.ts delete mode 100644 tests/commands/channels/parse.test.js create mode 100644 tests/commands/channels/parse.test.ts rename tests/commands/channels/{validate.test.js => validate.test.ts} (56%) delete mode 100644 tests/commands/epg/grab.test.js create mode 100644 tests/commands/epg/grab.test.ts diff --git a/tests/commands/channels/editor.test.ts b/tests/commands/channels/editor.test.ts new file mode 100644 index 00000000..8499eb03 --- /dev/null +++ b/tests/commands/channels/editor.test.ts @@ -0,0 +1,27 @@ +import fs from 'fs-extra' +import { execSync } from 'child_process' + +beforeEach(() => { + fs.emptyDirSync('tests/__data__/output') + fs.copySync( + 'tests/__data__/input/channels-editor/channels-editor.channels.xml', + 'tests/__data__/output/channels.xml' + ) +}) + +describe('channels:editor', () => { + it('shows list of options for a channel', () => { + const stdout = execSync( + 'DATA_DIR=tests/__data__/input/temp/data npm run channels:editor -- tests/__data__/output/channels.xml', + { + encoding: 'utf8' + } + ) + + expect(stdout).toContain('CNN International | CNNInternational.us [new]') + expect(stdout).toContain('CNN International Europe | CNNInternationalEurope.us [api]') + expect(stdout).toContain('Overwrite') + expect(stdout).toContain('Skip') + expect(stdout).toContain("File 'tests/__data__/output/channels.xml' successfully saved") + }) +}) diff --git a/tests/commands/channels/lint.test.js b/tests/commands/channels/lint.test.js deleted file mode 100644 index 2563ccfc..00000000 --- a/tests/commands/channels/lint.test.js +++ /dev/null @@ -1,19 +0,0 @@ -const { execSync } = require('child_process') - -it('will show a message if the file contains a syntax error', () => { - try { - const stdout = execSync( - 'npm run channels:lint -- tests/__data__/input/sites/lint.channels.xml', - { - encoding: 'utf8' - } - ) - console.log(stdout) - process.exit(1) - } catch (err) { - expect(err.status).toBe(1) - expect(err.stdout).toBe( - `\n> channels:lint\n> node scripts/commands/channels/lint.js tests/__data__/input/sites/lint.channels.xml\n\n\ntests/__data__/input/sites/lint.channels.xml\n 4:0 Element 'channel': The attribute 'lang' is required but missing.\n\n1 error(s)\n` - ) - } -}) diff --git a/tests/commands/channels/lint.test.ts b/tests/commands/channels/lint.test.ts new file mode 100644 index 00000000..2f9baed8 --- /dev/null +++ b/tests/commands/channels/lint.test.ts @@ -0,0 +1,28 @@ +import { execSync } from 'child_process' + +type ExecError = { + status: number + stdout: string +} + +describe('channels:lint', () => { + it('will show a message if the file contains a syntax error', () => { + try { + const stdout = execSync( + 'npm run channels:lint -- tests/__data__/input/channels-lint/channels-lint.channels.xml', + { + encoding: 'utf8' + } + ) + console.log(stdout) + process.exit(1) + } catch (error) { + expect((error as ExecError).status).toBe(1) + expect( + (error as ExecError).stdout.includes( + "tests/__data__/input/channels-lint/channels-lint.channels.xml\n\n\ntests/__data__/input/channels-lint/channels-lint.channels.xml\n 3:0 Element 'channel': The attribute 'lang' is required but missing.\n\n1 error(s)\n" + ) + ).toBe(true) + } + }) +}) diff --git a/tests/commands/channels/parse.test.js b/tests/commands/channels/parse.test.js deleted file mode 100644 index a9242a4f..00000000 --- a/tests/commands/channels/parse.test.js +++ /dev/null @@ -1,39 +0,0 @@ -const { execSync } = require('child_process') -const fs = require('fs-extra') -const path = require('path') - -beforeEach(() => { - fs.emptyDirSync('tests/__data__/output') - fs.copySync( - 'tests/__data__/input/sites/parse-channels.channels.xml', - 'tests/__data__/output/channels.xml' - ) -}) - -it('can parse channels', () => { - const stdout = execSync( - 'npm run channels:parse -- --config=tests/__data__/input/sites/parse-channels.config.js --output=tests/__data__/output/channels.xml', - { encoding: 'utf8' } - ) - - expect(content('tests/__data__/output/channels.xml')).toEqual( - content('tests/__data__/expected/sites/parse-channels.channels.xml') - ) -}) - -it('can parse channels with clean flag', () => { - const stdout = execSync( - 'npm run channels:parse -- --config=tests/__data__/input/sites/parse-channels.config.js --output=tests/__data__/output/channels.xml --clean', - { encoding: 'utf8' } - ) - - expect(content('tests/__data__/output/channels.xml')).toEqual( - content('tests/__data__/expected/sites/parse-channels-clean.channels.xml') - ) -}) - -function content(filepath) { - return fs.readFileSync(path.resolve(filepath), { - encoding: 'utf8' - }) -} diff --git a/tests/commands/channels/parse.test.ts b/tests/commands/channels/parse.test.ts new file mode 100644 index 00000000..3c1aa4e7 --- /dev/null +++ b/tests/commands/channels/parse.test.ts @@ -0,0 +1,41 @@ +import { execSync } from 'child_process' +import fs from 'fs-extra' +import path from 'path' + +beforeEach(() => { + fs.emptyDirSync('tests/__data__/output') + fs.copySync( + 'tests/__data__/input/channels-parse/channels-parse.channels.xml', + 'tests/__data__/output/channels.xml' + ) +}) + +describe('channels:parse', () => { + it('can parse channels', () => { + execSync( + 'npm run channels:parse -- --config=tests/__data__/input/channels-parse/channels-parse.config.js --output=tests/__data__/output/channels.xml', + { encoding: 'utf8' } + ) + + expect(content('tests/__data__/output/channels.xml')).toEqual( + content('tests/__data__/expected/sites/channels-parse/channels-parse.channels.xml') + ) + }) + + it('can parse channels with clean flag', () => { + execSync( + 'npm run channels:parse -- --config=tests/__data__/input/channels-parse/channels-parse.config.js --output=tests/__data__/output/channels.xml --clean', + { encoding: 'utf8' } + ) + + expect(content('tests/__data__/output/channels.xml')).toEqual( + content('tests/__data__/expected/sites/channels-parse/channels-parse-clean.channels.xml') + ) + }) +}) + +function content(filepath: string) { + return fs.readFileSync(path.resolve(filepath), { + encoding: 'utf8' + }) +} diff --git a/tests/commands/channels/validate.test.js b/tests/commands/channels/validate.test.ts similarity index 56% rename from tests/commands/channels/validate.test.js rename to tests/commands/channels/validate.test.ts index 337fff41..5b225499 100644 --- a/tests/commands/channels/validate.test.js +++ b/tests/commands/channels/validate.test.ts @@ -1,49 +1,58 @@ -const { execSync } = require('child_process') +import { execSync } from 'child_process' -it('will show a message if the file contains a duplicate', () => { - try { - const stdout = execSync( - 'DATA_DIR=tests/__data__/input/tmp/data npm run channels:validate -- tests/__data__/input/sites/duplicate.channels.xml', - { - encoding: 'utf8' - } - ) - console.log(stdout) - process.exit(1) - } catch (err) { - expect(err.status).toBe(1) - expect(err.stdout).toBe( - `\n> channels:validate\n> node scripts/commands/channels/validate.js tests/__data__/input/sites/duplicate.channels.xml\n\ntests/__data__/input/sites/duplicate.channels.xml +type ExecError = { + status: number + stdout: string +} + +describe('channels:validate', () => { + it('will show a message if the file contains a duplicate', () => { + try { + const stdout = execSync( + 'DATA_DIR=tests/__data__/input/temp/data npm run channels:validate -- tests/__data__/input/channels-validate/duplicate.channels.xml', + { + encoding: 'utf8' + } + ) + console.log(stdout) + process.exit(1) + } catch (error) { + expect((error as ExecError).status).toBe(1) + expect( + (error as ExecError).stdout + .includes(`tests/__data__/input/channels-validate/duplicate.channels.xml ┌─────────┬─────────────┬──────┬────────────────┬─────────┬─────────┐ │ (index) │ type │ lang │ xmltv_id │ site_id │ name │ ├─────────┼─────────────┼──────┼────────────────┼─────────┼─────────┤ │ 0 │ 'duplicate' │ 'en' │ 'BravoEast.us' │ '140' │ 'Bravo' │ └─────────┴─────────────┴──────┴────────────────┴─────────┴─────────┘ -\n1 error(s) in 1 file(s)\n` - ) - } -}) +\n1 error(s) in 1 file(s)\n`) + ).toBe(true) + } + }) -it('will show a message if the file contains a channel with wrong xmltv_id', () => { - try { - const stdout = execSync( - 'DATA_DIR=tests/__data__/input/tmp/data npm run channels:validate -- tests/__data__/input/sites/wrong_xmltv_id.channels.xml', - { - encoding: 'utf8' - } - ) - console.log(stdout) - process.exit(1) - } catch (err) { - expect(err.status).toBe(1) - expect(err.stdout).toBe( - `\n> channels:validate\n> node scripts/commands/channels/validate.js tests/__data__/input/sites/wrong_xmltv_id.channels.xml\n\ntests/__data__/input/sites/wrong_xmltv_id.channels.xml + it('will show a message if the file contains a channel with wrong xmltv_id', () => { + try { + const stdout = execSync( + 'DATA_DIR=tests/__data__/input/temp/data npm run channels:validate -- tests/__data__/input/channels-validate/wrong_xmltv_id.channels.xml', + { + encoding: 'utf8' + } + ) + console.log(stdout) + process.exit(1) + } catch (error) { + expect((error as ExecError).status).toBe(1) + expect( + (error as ExecError).stdout + .includes(`tests/__data__/input/channels-validate/wrong_xmltv_id.channels.xml ┌─────────┬──────────────────┬──────┬────────────────────┬─────────┬─────────────────────┐ │ (index) │ type │ lang │ xmltv_id │ site_id │ name │ ├─────────┼──────────────────┼──────┼────────────────────┼─────────┼─────────────────────┤ │ 0 │ 'wrong_xmltv_id' │ 'en' │ 'CNNInternational' │ '140' │ 'CNN International' │ └─────────┴──────────────────┴──────┴────────────────────┴─────────┴─────────────────────┘ -\n1 error(s) in 1 file(s)\n` - ) - } +\n1 error(s) in 1 file(s)\n`) + ).toBe(true) + } + }) }) diff --git a/tests/commands/epg/grab.test.js b/tests/commands/epg/grab.test.js deleted file mode 100644 index 0cb2a066..00000000 --- a/tests/commands/epg/grab.test.js +++ /dev/null @@ -1,39 +0,0 @@ -const { execSync } = require('child_process') -const fs = require('fs-extra') -const path = require('path') - -beforeEach(() => { - fs.emptyDirSync('tests/__data__/output') -}) - -it('can grab epg', () => { - const stdout = execSync( - 'BASE_DIR=tests/__data__/input CURR_DATE=2022-10-20 DATA_DIR=tests/__data__/input/tmp/data npm run grab -- --site=epg-grab --output=tests/__data__/output/{lang}/{site}.xml', - { encoding: 'utf8' } - ) - - expect(content('tests/__data__/output/en/example.com.xml')).toEqual( - content('tests/__data__/expected/guides/en/example.com.xml') - ) - - expect(content('tests/__data__/output/fr/example.com.xml')).toEqual( - content('tests/__data__/expected/guides/fr/example.com.xml') - ) -}) - -it('can grab epg with language filter enabled', () => { - const stdout = execSync( - 'BASE_DIR=tests/__data__/input CURR_DATE=2022-10-20 DATA_DIR=tests/__data__/input/tmp/data npm run grab -- --site=epg-grab --lang=fr --output=tests/__data__/output/fr/guide.xml', - { encoding: 'utf8' } - ) - - expect(content('tests/__data__/output/fr/guide.xml')).toEqual( - content('tests/__data__/expected/guides/fr/example.com.xml') - ) -}) - -function content(filepath) { - return fs.readFileSync(path.resolve(filepath), { - encoding: 'utf8' - }) -} diff --git a/tests/commands/epg/grab.test.ts b/tests/commands/epg/grab.test.ts new file mode 100644 index 00000000..70c029bc --- /dev/null +++ b/tests/commands/epg/grab.test.ts @@ -0,0 +1,98 @@ +import { execSync } from 'child_process' +import fs from 'fs-extra' +import path from 'path' + +beforeEach(() => { + fs.emptyDirSync('tests/__data__/output') +}) + +describe('epg:grab', () => { + it('can grab epg by site name', () => { + execSync( + 'SITES_DIR=tests/__data__/input/epg-grab/sites CURR_DATE=2022-10-20 DATA_DIR=tests/__data__/input/temp/data npm run grab -- --site=example.com --output=tests/__data__/output/guide.xml', + { encoding: 'utf8' } + ) + + expect(content('tests/__data__/output/guide.xml')).toEqual( + content('tests/__data__/expected/guide2.xml') + ) + }) + + it('can grab epg with multiple channels.xml files', () => { + execSync( + 'SITES_DIR=tests/__data__/input/epg-grab/sites CURR_DATE=2022-10-20 DATA_DIR=tests/__data__/input/temp/data npm run grab -- --channels=tests/__data__/input/epg-grab/sites/**/*.channels.xml --output=tests/__data__/output/guide.xml', + { encoding: 'utf8' } + ) + + expect(content('tests/__data__/output/guide.xml')).toEqual( + content('tests/__data__/expected/guide.xml') + ) + }) + + it('can grab epg with gzip option enabled', () => { + execSync( + 'SITES_DIR=tests/__data__/input/epg-grab/sites CURR_DATE=2022-10-20 DATA_DIR=tests/__data__/input/temp/data npm run grab -- --channels=tests/__data__/input/epg-grab/sites/**/*.channels.xml --output=tests/__data__/output/guide.xml --gzip', + { encoding: 'utf8' } + ) + + expect(content('tests/__data__/output/guide.xml')).toEqual( + content('tests/__data__/expected/guide.xml') + ) + + expect(content('tests/__data__/output/guide.xml.gz')).toEqual( + content('tests/__data__/expected/guide.xml.gz') + ) + }) + + it('can grab epg with wildcard as output', () => { + execSync( + 'SITES_DIR=tests/__data__/input/epg-grab/sites CURR_DATE=2022-10-20 DATA_DIR=tests/__data__/input/temp/data npm run grab -- --channels=tests/__data__/input/epg-grab/sites/example.com/example.com.channels.xml --output=tests/__data__/output/guides/{lang}/{site}.xml', + { encoding: 'utf8' } + ) + + expect(content('tests/__data__/output/guides/en/example.com.xml')).toEqual( + content('tests/__data__/expected/guides/en/example.com.xml') + ) + + expect(content('tests/__data__/output/guides/fr/example.com.xml')).toEqual( + content('tests/__data__/expected/guides/fr/example.com.xml') + ) + }) + + it('can grab epg then language filter enabled', () => { + execSync( + 'SITES_DIR=tests/__data__/input/epg-grab/sites CURR_DATE=2022-10-20 DATA_DIR=tests/__data__/input/temp/data npm run grab -- --channels=tests/__data__/input/epg-grab/sites/example.com/example.com.channels.xml --output=tests/__data__/output/guides/{lang}/{site}.xml --lang=fr', + { encoding: 'utf8' } + ) + + expect(content('tests/__data__/output/guides/fr/example.com.xml')).toEqual( + content('tests/__data__/expected/guides/fr/example.com.xml') + ) + }) + + it('can grab epg using custom channels list', () => { + execSync( + 'SITES_DIR=tests/__data__/input/epg-grab/sites CURR_DATE=2022-10-20 DATA_DIR=tests/__data__/input/temp/data npm run grab -- --channels=tests/__data__/input/epg-grab/custom.channels.xml --output=tests/__data__/output/guide.xml', + { encoding: 'utf8' } + ) + + expect(content('tests/__data__/output/guide.xml')).toEqual( + content('tests/__data__/expected/guide.xml') + ) + }) + + it('it will raise an error if the timeout is exceeded', () => { + const stdout = execSync( + 'SITES_DIR=tests/__data__/input/epg-grab/sites CURR_DATE=2022-10-20 DATA_DIR=tests/__data__/input/temp/data npm run grab -- --channels=tests/__data__/input/epg-grab/custom.channels.xml --output=tests/__data__/output/guide.xml --timeout=0', + { encoding: 'utf8' } + ) + + expect(stdout).toContain('ERR: Connection timeout') + }) +}) + +function content(filepath: string) { + return fs.readFileSync(path.resolve(filepath), { + encoding: 'utf8' + }) +} From b60a7b6a41753e751172020dc099711f4a63f4c9 Mon Sep 17 00:00:00 2001 From: freearhey <7253922+freearhey@users.noreply.github.com> Date: Mon, 2 Oct 2023 06:27:19 +0300 Subject: [PATCH 03/19] Update dependencies --- package-lock.json | 4137 ++++++++++++++++++++++++++++++++++----------- yarn.lock | 1575 ++++++++++++----- 2 files changed, 4254 insertions(+), 1458 deletions(-) diff --git a/package-lock.json b/package-lock.json index 6a863d63..d012a6f3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5,26 +5,41 @@ "packages": { "": { "name": "epg", + "hasInstallScript": true, "license": "MIT", "dependencies": { "@alex_neo/jest-expect-message": "^1.0.5", + "@freearhey/core": "^0.2.1", "@octokit/core": "^4.1.0", - "axios": "^0.21.1", + "@types/cli-progress": "^3.11.3", + "@types/fs-extra": "^11.0.2", + "@types/inquirer": "^9.0.3", + "@types/jest": "^29.5.5", + "@types/lodash": "^4.14.199", + "@types/node-cleanup": "^2.1.2", + "@types/numeral": "^2.0.3", + "@typescript-eslint/eslint-plugin": "^6.7.3", + "axios": "^1.5.1", + "axios-cookiejar-support": "^4.0.7", "chalk": "^4.1.2", "cheerio": "^1.0.0-rc.10", + "cli-progress": "^3.12.0", "commander": "^8.2.0", "consola": "^3.2.3", - "cron": "^2.3.1", + "cron": "^2.4.3", "csv-parser": "^3.0.0", + "cwait": "^1.1.2", "dayjs": "^1.11.7", - "epg-grabber": "^0.32.0", + "epg-grabber": "^0.34.0", "epg-parser": "^0.2.0", + "eslint": "^8.17.0", + "eslint-config-prettier": "^9.0.0", "form-data": "^4.0.0", "fs-extra": "^10.0.1", "glob": "^7.2.0", "iconv-lite": "^0.4.24", - "inquirer": "^8.2.0", - "jest": "^29.5.0", + "inquirer": "^8.2.6", + "jest": "^29.7.0", "langs": "^2.0.0", "libxmljs2": "^0.32.0", "lodash": "^4.17.21", @@ -34,6 +49,7 @@ "nedb-promises": "^6.0.3", "node-cleanup": "^2.1.2", "node-gzip": "^1.1.2", + "numeral": "^2.0.6", "parse-duration": "^1.0.0", "pdf-parse": "^1.1.1", "serve": "^14.2.0", @@ -41,19 +57,18 @@ "srcset": "^4.0.0", "table2array": "^0.0.2", "tabletojson": "^2.0.7", + "tough-cookie": "^4.1.3", "transliteration": "^2.2.0", + "ts-jest": "^29.1.1", + "ts-node": "^10.9.1", "unzipit": "^1.4.0", "wildcard-match": "^5.1.2" - }, - "devDependencies": { - "eslint": "^8.17.0" } }, "node_modules/@aashutoshrathi/word-wrap": { "version": "1.2.6", "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==", - "dev": true, "engines": { "node": ">=0.10.0" } @@ -128,17 +143,6 @@ "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==" }, - "node_modules/@babel/core/node_modules/json5": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/@babel/generator": { "version": "7.22.7", "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.22.7.tgz", @@ -600,6 +604,26 @@ "node": ">=0.1.90" } }, + "node_modules/@cspotcode/source-map-support": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", + "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", + "dependencies": { + "@jridgewell/trace-mapping": "0.3.9" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@cspotcode/source-map-support/node_modules/@jridgewell/trace-mapping": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", + "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", + "dependencies": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, "node_modules/@dabh/diagnostics": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/@dabh/diagnostics/-/diagnostics-2.0.3.tgz", @@ -610,11 +634,32 @@ "kuler": "^2.0.0" } }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", + "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", + "dependencies": { + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.8.2", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.8.2.tgz", + "integrity": "sha512-0MGxAVt1m/ZK+LTJp/j0qF7Hz97D9O/FH9Ms3ltnyIdDD57cbb1ACIQTkbHvNXtWDv5TPq7w5Kq56+cNukbo7g==", + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, "node_modules/@eslint/eslintrc": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.0.tgz", "integrity": "sha512-UWW0TMTmk2d7hLcWD1/e2g5HDM/HQ3csaLSqXCfqwh4uNDuNqlaKWXmEsL4Cs41Z0KnILNvwbHAah3C2yt06kw==", - "dev": true, "dependencies": { "ajv": "^6.12.4", "debug": "^4.3.2", @@ -633,14 +678,12 @@ "node_modules/@eslint/eslintrc/node_modules/argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" }, "node_modules/@eslint/eslintrc/node_modules/globals": { "version": "13.15.0", "resolved": "https://registry.npmjs.org/globals/-/globals-13.15.0.tgz", "integrity": "sha512-bpzcOlgDhMG070Av0Vy5Owklpv1I6+j96GhUI7Rh7IzDCKLzboflLrrfqMu8NquDbiR4EOQk7XzJwqVJxicxog==", - "dev": true, "dependencies": { "type-fest": "^0.20.2" }, @@ -655,7 +698,6 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, "dependencies": { "argparse": "^2.0.1" }, @@ -667,7 +709,6 @@ "version": "0.20.2", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true, "engines": { "node": ">=10" }, @@ -675,11 +716,93 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/@freearhey/core": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/@freearhey/core/-/core-0.2.1.tgz", + "integrity": "sha512-kEdIxZClykKhGpgyCSlkwuVuSCCAWr3J5YvOUMJQDPgVAYvT5VbD8MYKPm+OwNi9T4HFmF6qqY90qwKJPoOXCA==", + "dependencies": { + "@types/fs-extra": "^11.0.2", + "@types/lodash": "^4.14.198", + "@types/luxon": "^3.3.2", + "fs-extra": "^11.1.1", + "glob": "^10.3.4", + "lodash": "^4.17.21", + "luxon": "^3.4.3", + "natural-orderby": "^3.0.2", + "node-gzip": "^1.1.2", + "normalize-url": "^6.1.0", + "object-treeify": "^2.1.1", + "signale": "^1.4.0" + } + }, + "node_modules/@freearhey/core/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@freearhey/core/node_modules/fs-extra": { + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.1.tgz", + "integrity": "sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=14.14" + } + }, + "node_modules/@freearhey/core/node_modules/glob": { + "version": "10.3.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.5.tgz", + "integrity": "sha512-bYUpUD7XDEHI4Q2O5a7PXGvyw4deKR70kHiDxzQbe925wbZknhOzUt2xBgTkYL6RBcVeXYuD9iNYeqoWbBZQnA==", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^2.0.3", + "minimatch": "^9.0.1", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", + "path-scurry": "^1.10.1" + }, + "bin": { + "glob": "dist/cjs/src/bin.js" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@freearhey/core/node_modules/luxon": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/luxon/-/luxon-3.4.3.tgz", + "integrity": "sha512-tFWBiv3h7z+T/tDaoxA8rqTxy1CHV6gHS//QdaH4pulbq/JuBSGgQspQQqcgnwdAx6pNI7cmvz5Sv/addzHmUg==", + "engines": { + "node": ">=12" + } + }, + "node_modules/@freearhey/core/node_modules/minimatch": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/@humanwhocodes/config-array": { "version": "0.9.5", "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.5.tgz", "integrity": "sha512-ObyMyWxZiCu/yTisA7uzx81s40xR2fD5Cg/2Kq7G02ajkNubJf6BopgDTmDyc3U7sXpNKM8cYOw7s7Tyr+DnCw==", - "dev": true, "dependencies": { "@humanwhocodes/object-schema": "^1.2.1", "debug": "^4.1.1", @@ -692,8 +815,96 @@ "node_modules/@humanwhocodes/object-schema": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", - "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", - "dev": true + "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==" + }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" + }, + "node_modules/@isaacs/cliui/node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@isaacs/cliui/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } }, "node_modules/@istanbuljs/load-nyc-config": { "version": "1.1.0", @@ -719,15 +930,15 @@ } }, "node_modules/@jest/console": { - "version": "29.6.1", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.6.1.tgz", - "integrity": "sha512-Aj772AYgwTSr5w8qnyoJ0eDYvN6bMsH3ORH1ivMotrInHLKdUz6BDlaEXHdM6kODaBIkNIyQGzsMvRdOv7VG7Q==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.7.0.tgz", + "integrity": "sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==", "dependencies": { - "@jest/types": "^29.6.1", + "@jest/types": "^29.6.3", "@types/node": "*", "chalk": "^4.0.0", - "jest-message-util": "^29.6.1", - "jest-util": "^29.6.1", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", "slash": "^3.0.0" }, "engines": { @@ -735,36 +946,36 @@ } }, "node_modules/@jest/core": { - "version": "29.6.1", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.6.1.tgz", - "integrity": "sha512-CcowHypRSm5oYQ1obz1wfvkjZZ2qoQlrKKvlfPwh5jUXVU12TWr2qMeH8chLMuTFzHh5a1g2yaqlqDICbr+ukQ==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.7.0.tgz", + "integrity": "sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg==", "dependencies": { - "@jest/console": "^29.6.1", - "@jest/reporters": "^29.6.1", - "@jest/test-result": "^29.6.1", - "@jest/transform": "^29.6.1", - "@jest/types": "^29.6.1", + "@jest/console": "^29.7.0", + "@jest/reporters": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", "@types/node": "*", "ansi-escapes": "^4.2.1", "chalk": "^4.0.0", "ci-info": "^3.2.0", "exit": "^0.1.2", "graceful-fs": "^4.2.9", - "jest-changed-files": "^29.5.0", - "jest-config": "^29.6.1", - "jest-haste-map": "^29.6.1", - "jest-message-util": "^29.6.1", - "jest-regex-util": "^29.4.3", - "jest-resolve": "^29.6.1", - "jest-resolve-dependencies": "^29.6.1", - "jest-runner": "^29.6.1", - "jest-runtime": "^29.6.1", - "jest-snapshot": "^29.6.1", - "jest-util": "^29.6.1", - "jest-validate": "^29.6.1", - "jest-watcher": "^29.6.1", + "jest-changed-files": "^29.7.0", + "jest-config": "^29.7.0", + "jest-haste-map": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.7.0", + "jest-resolve-dependencies": "^29.7.0", + "jest-runner": "^29.7.0", + "jest-runtime": "^29.7.0", + "jest-snapshot": "^29.7.0", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "jest-watcher": "^29.7.0", "micromatch": "^4.0.4", - "pretty-format": "^29.6.1", + "pretty-format": "^29.7.0", "slash": "^3.0.0", "strip-ansi": "^6.0.0" }, @@ -781,82 +992,82 @@ } }, "node_modules/@jest/environment": { - "version": "29.6.1", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.6.1.tgz", - "integrity": "sha512-RMMXx4ws+Gbvw3DfLSuo2cfQlK7IwGbpuEWXCqyYDcqYTI+9Ju3a5hDnXaxjNsa6uKh9PQF2v+qg+RLe63tz5A==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.7.0.tgz", + "integrity": "sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==", "dependencies": { - "@jest/fake-timers": "^29.6.1", - "@jest/types": "^29.6.1", + "@jest/fake-timers": "^29.7.0", + "@jest/types": "^29.6.3", "@types/node": "*", - "jest-mock": "^29.6.1" + "jest-mock": "^29.7.0" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/@jest/expect": { - "version": "29.6.1", - "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.6.1.tgz", - "integrity": "sha512-N5xlPrAYaRNyFgVf2s9Uyyvr795jnB6rObuPx4QFvNJz8aAjpZUDfO4bh5G/xuplMID8PrnuF1+SfSyDxhsgYg==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.7.0.tgz", + "integrity": "sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==", "dependencies": { - "expect": "^29.6.1", - "jest-snapshot": "^29.6.1" + "expect": "^29.7.0", + "jest-snapshot": "^29.7.0" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/@jest/expect-utils": { - "version": "29.6.1", - "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.6.1.tgz", - "integrity": "sha512-o319vIf5pEMx0LmzSxxkYYxo4wrRLKHq9dP1yJU7FoPTB0LfAKSz8SWD6D/6U3v/O52t9cF5t+MeJiRsfk7zMw==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.7.0.tgz", + "integrity": "sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==", "dependencies": { - "jest-get-type": "^29.4.3" + "jest-get-type": "^29.6.3" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/@jest/fake-timers": { - "version": "29.6.1", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.6.1.tgz", - "integrity": "sha512-RdgHgbXyosCDMVYmj7lLpUwXA4c69vcNzhrt69dJJdf8azUrpRh3ckFCaTPNjsEeRi27Cig0oKDGxy5j7hOgHg==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.7.0.tgz", + "integrity": "sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==", "dependencies": { - "@jest/types": "^29.6.1", + "@jest/types": "^29.6.3", "@sinonjs/fake-timers": "^10.0.2", "@types/node": "*", - "jest-message-util": "^29.6.1", - "jest-mock": "^29.6.1", - "jest-util": "^29.6.1" + "jest-message-util": "^29.7.0", + "jest-mock": "^29.7.0", + "jest-util": "^29.7.0" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/@jest/globals": { - "version": "29.6.1", - "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.6.1.tgz", - "integrity": "sha512-2VjpaGy78JY9n9370H8zGRCFbYVWwjY6RdDMhoJHa1sYfwe6XM/azGN0SjY8kk7BOZApIejQ1BFPyH7FPG0w3A==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.7.0.tgz", + "integrity": "sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==", "dependencies": { - "@jest/environment": "^29.6.1", - "@jest/expect": "^29.6.1", - "@jest/types": "^29.6.1", - "jest-mock": "^29.6.1" + "@jest/environment": "^29.7.0", + "@jest/expect": "^29.7.0", + "@jest/types": "^29.6.3", + "jest-mock": "^29.7.0" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/@jest/reporters": { - "version": "29.6.1", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.6.1.tgz", - "integrity": "sha512-9zuaI9QKr9JnoZtFQlw4GREQbxgmNYXU6QuWtmuODvk5nvPUeBYapVR/VYMyi2WSx3jXTLJTJji8rN6+Cm4+FA==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.7.0.tgz", + "integrity": "sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg==", "dependencies": { "@bcoe/v8-coverage": "^0.2.3", - "@jest/console": "^29.6.1", - "@jest/test-result": "^29.6.1", - "@jest/transform": "^29.6.1", - "@jest/types": "^29.6.1", + "@jest/console": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", "@jridgewell/trace-mapping": "^0.3.18", "@types/node": "*", "chalk": "^4.0.0", @@ -865,13 +1076,13 @@ "glob": "^7.1.3", "graceful-fs": "^4.2.9", "istanbul-lib-coverage": "^3.0.0", - "istanbul-lib-instrument": "^5.1.0", + "istanbul-lib-instrument": "^6.0.0", "istanbul-lib-report": "^3.0.0", "istanbul-lib-source-maps": "^4.0.0", "istanbul-reports": "^3.1.3", - "jest-message-util": "^29.6.1", - "jest-util": "^29.6.1", - "jest-worker": "^29.6.1", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", + "jest-worker": "^29.7.0", "slash": "^3.0.0", "string-length": "^4.0.1", "strip-ansi": "^6.0.0", @@ -889,10 +1100,55 @@ } } }, + "node_modules/@jest/reporters/node_modules/istanbul-lib-instrument": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.0.tgz", + "integrity": "sha512-x58orMzEVfzPUKqlbLd1hXCnySCxKdDKa6Rjg97CwuLLRI4g3FHTdnExu1OqffVFay6zeMW+T6/DowFLndWnIw==", + "dependencies": { + "@babel/core": "^7.12.3", + "@babel/parser": "^7.14.7", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^7.5.4" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@jest/reporters/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@jest/reporters/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@jest/reporters/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + }, "node_modules/@jest/schemas": { - "version": "29.6.0", - "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.0.tgz", - "integrity": "sha512-rxLjXyJBTL4LQeJW3aKo0M/+GkCOXsO+8i9Iu7eDb6KwtP65ayoDsitrdPBtujxQ88k4wI2FNYfa6TOGwSn6cQ==", + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", + "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", "dependencies": { "@sinclair/typebox": "^0.27.8" }, @@ -901,9 +1157,9 @@ } }, "node_modules/@jest/source-map": { - "version": "29.6.0", - "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-29.6.0.tgz", - "integrity": "sha512-oA+I2SHHQGxDCZpbrsCQSoMLb3Bz547JnM+jUr9qEbuw0vQlWZfpPS7CO9J7XiwKicEz9OFn/IYoLkkiUD7bzA==", + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-29.6.3.tgz", + "integrity": "sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==", "dependencies": { "@jridgewell/trace-mapping": "^0.3.18", "callsites": "^3.0.0", @@ -914,12 +1170,12 @@ } }, "node_modules/@jest/test-result": { - "version": "29.6.1", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.6.1.tgz", - "integrity": "sha512-Ynr13ZRcpX6INak0TPUukU8GWRfm/vAytE3JbJNGAvINySWYdfE7dGZMbk36oVuK4CigpbhMn8eg1dixZ7ZJOw==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.7.0.tgz", + "integrity": "sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==", "dependencies": { - "@jest/console": "^29.6.1", - "@jest/types": "^29.6.1", + "@jest/console": "^29.7.0", + "@jest/types": "^29.6.3", "@types/istanbul-lib-coverage": "^2.0.0", "collect-v8-coverage": "^1.0.0" }, @@ -928,13 +1184,13 @@ } }, "node_modules/@jest/test-sequencer": { - "version": "29.6.1", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.6.1.tgz", - "integrity": "sha512-oBkC36PCDf/wb6dWeQIhaviU0l5u6VCsXa119yqdUosYAt7/FbQU2M2UoziO3igj/HBDEgp57ONQ3fm0v9uyyg==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.7.0.tgz", + "integrity": "sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==", "dependencies": { - "@jest/test-result": "^29.6.1", + "@jest/test-result": "^29.7.0", "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.6.1", + "jest-haste-map": "^29.7.0", "slash": "^3.0.0" }, "engines": { @@ -942,21 +1198,21 @@ } }, "node_modules/@jest/transform": { - "version": "29.6.1", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.6.1.tgz", - "integrity": "sha512-URnTneIU3ZjRSaf906cvf6Hpox3hIeJXRnz3VDSw5/X93gR8ycdfSIEy19FlVx8NFmpN7fe3Gb1xF+NjXaQLWg==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.7.0.tgz", + "integrity": "sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==", "dependencies": { "@babel/core": "^7.11.6", - "@jest/types": "^29.6.1", + "@jest/types": "^29.6.3", "@jridgewell/trace-mapping": "^0.3.18", "babel-plugin-istanbul": "^6.1.1", "chalk": "^4.0.0", "convert-source-map": "^2.0.0", "fast-json-stable-stringify": "^2.1.0", "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.6.1", - "jest-regex-util": "^29.4.3", - "jest-util": "^29.6.1", + "jest-haste-map": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-util": "^29.7.0", "micromatch": "^4.0.4", "pirates": "^4.0.4", "slash": "^3.0.0", @@ -967,11 +1223,11 @@ } }, "node_modules/@jest/types": { - "version": "29.6.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.1.tgz", - "integrity": "sha512-tPKQNMPuXgvdOn2/Lg9HNfUvjYVGolt04Hp03f5hAk878uwOLikN+JzeLY0HcVgKgFl9Hs3EIqpu3WX27XNhnw==", + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", + "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", "dependencies": { - "@jest/schemas": "^29.6.0", + "@jest/schemas": "^29.6.3", "@types/istanbul-lib-coverage": "^2.0.0", "@types/istanbul-reports": "^3.0.0", "@types/node": "*", @@ -1087,6 +1343,38 @@ "semver": "bin/semver.js" } }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, "node_modules/@octokit/auth-token": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-3.0.2.tgz", @@ -1183,6 +1471,15 @@ "@octokit/openapi-types": "^14.0.0" } }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "optional": true, + "engines": { + "node": ">=14" + } + }, "node_modules/@seald-io/binary-search-tree": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/@seald-io/binary-search-tree/-/binary-search-tree-1.0.2.tgz", @@ -1241,10 +1538,30 @@ "node": ">=10" } }, + "node_modules/@tsconfig/node10": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", + "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==" + }, + "node_modules/@tsconfig/node12": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", + "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==" + }, + "node_modules/@tsconfig/node14": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", + "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==" + }, + "node_modules/@tsconfig/node16": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", + "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==" + }, "node_modules/@types/babel__core": { - "version": "7.20.1", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.1.tgz", - "integrity": "sha512-aACu/U/omhdk15O4Nfb+fHgH/z3QsfQzpnvRZhYhThms83ZnAOZz7zZAWO7mn2yyNQaA4xTO8GLK3uqFU4bYYw==", + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.2.tgz", + "integrity": "sha512-pNpr1T1xLUc2l3xJKuPtsEky3ybxN3m4fJkknfIpTCTfIZCDW57oAg+EfCgIIp2rvCe0Wn++/FfodDS4YXxBwA==", "dependencies": { "@babel/parser": "^7.20.7", "@babel/types": "^7.20.7", @@ -1254,26 +1571,26 @@ } }, "node_modules/@types/babel__generator": { - "version": "7.6.4", - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.4.tgz", - "integrity": "sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==", + "version": "7.6.5", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.5.tgz", + "integrity": "sha512-h9yIuWbJKdOPLJTbmSpPzkF67e659PbQDba7ifWm5BJ8xTv+sDmS7rFmywkWOvXedGTivCdeGSIIX8WLcRTz8w==", "dependencies": { "@babel/types": "^7.0.0" } }, "node_modules/@types/babel__template": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.1.tgz", - "integrity": "sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==", + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.2.tgz", + "integrity": "sha512-/AVzPICMhMOMYoSx9MoKpGDKdBRsIXMNByh1PXSZoa+v6ZoLa8xxtsT/uLQ/NJm0XVAWl/BvId4MlDeXJaeIZQ==", "dependencies": { "@babel/parser": "^7.1.0", "@babel/types": "^7.0.0" } }, "node_modules/@types/babel__traverse": { - "version": "7.20.1", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.1.tgz", - "integrity": "sha512-MitHFXnhtgwsGZWtT68URpOvLN4EREih1u3QtQiN4VdAxWKRVvGCSvw/Qth0M0Qq3pJpnGOu5JaM/ydK7OGbqg==", + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.2.tgz", + "integrity": "sha512-ojlGK1Hsfce93J0+kn3H5R73elidKUaZonirN33GSmgTUMpzI/MIFfSpF3haANe3G1bEBS9/9/QEqwTzwqFsKw==", "dependencies": { "@babel/types": "^7.20.7" } @@ -1289,10 +1606,27 @@ "@types/responselike": "*" } }, + "node_modules/@types/cli-progress": { + "version": "3.11.3", + "resolved": "https://registry.npmjs.org/@types/cli-progress/-/cli-progress-3.11.3.tgz", + "integrity": "sha512-/+C9xAdVtc+g5yHHkGBThgAA8rYpi5B+2ve3wLtybYj0JHEBs57ivR4x/zGfSsplRnV+psE91Nfin1soNKqz5Q==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/fs-extra": { + "version": "11.0.2", + "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-11.0.2.tgz", + "integrity": "sha512-c0hrgAOVYr21EX8J0jBMXGLMgJqVf/v6yxi0dLaJboW9aQPh16Id+z6w2Tx1hm+piJOLv8xPfVKZCLfjPw/IMQ==", + "dependencies": { + "@types/jsonfile": "*", + "@types/node": "*" + } + }, "node_modules/@types/graceful-fs": { - "version": "4.1.6", - "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.6.tgz", - "integrity": "sha512-Sig0SNORX9fdW+bQuTEovKj3uHcUL6LQKbCrrqb1X7J6/ReAbhCXRAhc+SMejhLELFj2QcyuxmUooZ4bt5ReSw==", + "version": "4.1.7", + "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.7.tgz", + "integrity": "sha512-MhzcwU8aUygZroVwL2jeYk6JisJrPl/oov/gsgGCue9mkgl9wjGbzReYQClxiUgFDnib9FuHqTndccKeZKxTRw==", "dependencies": { "@types/node": "*" } @@ -1302,6 +1636,15 @@ "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.1.tgz", "integrity": "sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ==" }, + "node_modules/@types/inquirer": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/@types/inquirer/-/inquirer-9.0.3.tgz", + "integrity": "sha512-CzNkWqQftcmk2jaCWdBTf9Sm7xSw4rkI1zpU/Udw3HX5//adEZUIm9STtoRP1qgWj0CWQtJ9UTvqmO2NNjhMJw==", + "dependencies": { + "@types/through": "*", + "rxjs": "^7.2.0" + } + }, "node_modules/@types/istanbul-lib-coverage": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", @@ -1323,11 +1666,33 @@ "@types/istanbul-lib-report": "*" } }, + "node_modules/@types/jest": { + "version": "29.5.5", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.5.5.tgz", + "integrity": "sha512-ebylz2hnsWR9mYvmBFbXJXr+33UPc4+ZdxyDXh5w0FlPBTfCVN3wPL+kuOiQt3xvrK419v7XWeAs+AeOksafXg==", + "dependencies": { + "expect": "^29.0.0", + "pretty-format": "^29.0.0" + } + }, "node_modules/@types/json-buffer": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/@types/json-buffer/-/json-buffer-3.0.0.tgz", "integrity": "sha512-3YP80IxxFJB4b5tYC2SUPwkg0XQLiu0nWvhRgEatgjf+29IcWO9X1k8xRv5DGssJ/lCrjYTjQPcobJr2yWIVuQ==" }, + "node_modules/@types/json-schema": { + "version": "7.0.13", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.13.tgz", + "integrity": "sha512-RbSSoHliUbnXj3ny0CNFOoxrIDV6SUGyStHsvDqosw6CkdPV8TtWGlfecuK4ToyMEAql6pzNxgCFKanovUzlgQ==" + }, + "node_modules/@types/jsonfile": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/@types/jsonfile/-/jsonfile-6.1.2.tgz", + "integrity": "sha512-8t92P+oeW4d/CRQfJaSqEwXujrhH4OEeHRjGU3v1Q8mUS8GPF3yiX26sw4svv6faL2HfBtGTe2xWIoVgN3dy9w==", + "dependencies": { + "@types/node": "*" + } + }, "node_modules/@types/keyv": { "version": "3.1.4", "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.4.tgz", @@ -1336,15 +1701,30 @@ "@types/node": "*" } }, - "node_modules/@types/node": { - "version": "17.0.31", - "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.31.tgz", - "integrity": "sha512-AR0x5HbXGqkEx9CadRH3EBYx/VkiUgZIhP4wvPn/+5KIsgpNoyFaRlVe0Zlx9gRtg8fA06a9tskE2MSN7TcG4Q==" + "node_modules/@types/lodash": { + "version": "4.14.199", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.199.tgz", + "integrity": "sha512-Vrjz5N5Ia4SEzWWgIVwnHNEnb1UE1XMkvY5DGXrAeOGE9imk0hgTHh5GyDjLDJi9OTCn9oo9dXH1uToK1VRfrg==" }, - "node_modules/@types/prettier": { - "version": "2.7.3", - "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.7.3.tgz", - "integrity": "sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA==" + "node_modules/@types/luxon": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/@types/luxon/-/luxon-3.3.2.tgz", + "integrity": "sha512-l5cpE57br4BIjK+9BSkFBOsWtwv6J9bJpC7gdXIzZyI0vuKvNTk0wZZrkQxMGsUAuGW9+WMNWF2IJMD7br2yeQ==" + }, + "node_modules/@types/node": { + "version": "20.7.1", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.7.1.tgz", + "integrity": "sha512-LT+OIXpp2kj4E2S/p91BMe+VgGX2+lfO+XTpfXhh+bCk2LkQtHZSub8ewFBMGP5ClysPjTDFa4sMI8Q3n4T0wg==" + }, + "node_modules/@types/node-cleanup": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@types/node-cleanup/-/node-cleanup-2.1.2.tgz", + "integrity": "sha512-HTksao/sZs9nqxKD/vWOR3WxSrQsyJlBPEFFCgq9lMmhRsuQF+2p6hy+7FaCYn6lOeiDc3ywI8jDQ2bz5y6m8w==" + }, + "node_modules/@types/numeral": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/numeral/-/numeral-2.0.3.tgz", + "integrity": "sha512-37VDYvFbx/I+Ve1kwcDUq5+qvgNl+uy9YUZhBMJ6YWHBtr2+d6CAgdn4R81NqBlZbTpvLxJOTUhwbki7+90+qQ==" }, "node_modules/@types/responselike": { "version": "1.0.0", @@ -1354,15 +1734,28 @@ "@types/node": "*" } }, + "node_modules/@types/semver": { + "version": "7.5.3", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.3.tgz", + "integrity": "sha512-OxepLK9EuNEIPxWNME+C6WwbRAOOI2o2BaQEGzz5Lu2e4Z5eDnEo+/aVEDMIXywoJitJ7xWd641wrGLZdtwRyw==" + }, "node_modules/@types/stack-utils": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==" }, + "node_modules/@types/through": { + "version": "0.0.31", + "resolved": "https://registry.npmjs.org/@types/through/-/through-0.0.31.tgz", + "integrity": "sha512-LpKpmb7FGevYgXnBXYs6HWnmiFyVG07Pt1cnbgM1IhEacITTiUaBXXvOR3Y50ksaJWGSfhbEvQFivQEFGCC55w==", + "dependencies": { + "@types/node": "*" + } + }, "node_modules/@types/tough-cookie": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-4.0.2.tgz", - "integrity": "sha512-Q5vtl1W5ue16D+nIaW8JWebSSraJVlK+EthKn7e7UcD4KWsaSJ8BqGPXNaPghgtcn/fhvrN17Tv8ksUsQpiplw==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-4.0.3.tgz", + "integrity": "sha512-THo502dA5PzG/sfQH+42Lw3fvmYkceefOspdCwpHRul8ik2Jv1K8I5OZz1AT3/rs46kwgMCe9bSBmDLYkkOMGg==", "peer": true }, "node_modules/@types/yargs": { @@ -1378,6 +1771,278 @@ "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz", "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==" }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "6.7.3", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.7.3.tgz", + "integrity": "sha512-vntq452UHNltxsaaN+L9WyuMch8bMd9CqJ3zhzTPXXidwbf5mqqKCVXEuvRZUqLJSTLeWE65lQwyXsRGnXkCTA==", + "dependencies": { + "@eslint-community/regexpp": "^4.5.1", + "@typescript-eslint/scope-manager": "6.7.3", + "@typescript-eslint/type-utils": "6.7.3", + "@typescript-eslint/utils": "6.7.3", + "@typescript-eslint/visitor-keys": "6.7.3", + "debug": "^4.3.4", + "graphemer": "^1.4.0", + "ignore": "^5.2.4", + "natural-compare": "^1.4.0", + "semver": "^7.5.4", + "ts-api-utils": "^1.0.1" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^6.0.0 || ^6.0.0-alpha", + "eslint": "^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + }, + "node_modules/@typescript-eslint/parser": { + "version": "6.7.3", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.7.3.tgz", + "integrity": "sha512-TlutE+iep2o7R8Lf+yoer3zU6/0EAUc8QIBB3GYBc1KGz4c4TRm83xwXUZVPlZ6YCLss4r77jbu6j3sendJoiQ==", + "peer": true, + "dependencies": { + "@typescript-eslint/scope-manager": "6.7.3", + "@typescript-eslint/types": "6.7.3", + "@typescript-eslint/typescript-estree": "6.7.3", + "@typescript-eslint/visitor-keys": "6.7.3", + "debug": "^4.3.4" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "6.7.3", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.7.3.tgz", + "integrity": "sha512-wOlo0QnEou9cHO2TdkJmzF7DFGvAKEnB82PuPNHpT8ZKKaZu6Bm63ugOTn9fXNJtvuDPanBc78lGUGGytJoVzQ==", + "dependencies": { + "@typescript-eslint/types": "6.7.3", + "@typescript-eslint/visitor-keys": "6.7.3" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/type-utils": { + "version": "6.7.3", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.7.3.tgz", + "integrity": "sha512-Fc68K0aTDrKIBvLnKTZ5Pf3MXK495YErrbHb1R6aTpfK5OdSFj0rVN7ib6Tx6ePrZ2gsjLqr0s98NG7l96KSQw==", + "dependencies": { + "@typescript-eslint/typescript-estree": "6.7.3", + "@typescript-eslint/utils": "6.7.3", + "debug": "^4.3.4", + "ts-api-utils": "^1.0.1" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/types": { + "version": "6.7.3", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.7.3.tgz", + "integrity": "sha512-4g+de6roB2NFcfkZb439tigpAMnvEIg3rIjWQ+EM7IBaYt/CdJt6em9BJ4h4UpdgaBWdmx2iWsafHTrqmgIPNw==", + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "6.7.3", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.7.3.tgz", + "integrity": "sha512-YLQ3tJoS4VxLFYHTw21oe1/vIZPRqAO91z6Uv0Ss2BKm/Ag7/RVQBcXTGcXhgJMdA4U+HrKuY5gWlJlvoaKZ5g==", + "dependencies": { + "@typescript-eslint/types": "6.7.3", + "@typescript-eslint/visitor-keys": "6.7.3", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.5.4", + "ts-api-utils": "^1.0.1" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + }, + "node_modules/@typescript-eslint/utils": { + "version": "6.7.3", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.7.3.tgz", + "integrity": "sha512-vzLkVder21GpWRrmSR9JxGZ5+ibIUSudXlW52qeKpzUEQhRSmyZiVDDj3crAth7+5tmN1ulvgKaCU2f/bPRCzg==", + "dependencies": { + "@eslint-community/eslint-utils": "^4.4.0", + "@types/json-schema": "^7.0.12", + "@types/semver": "^7.5.0", + "@typescript-eslint/scope-manager": "6.7.3", + "@typescript-eslint/types": "6.7.3", + "@typescript-eslint/typescript-estree": "6.7.3", + "semver": "^7.5.4" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^7.0.0 || ^8.0.0" + } + }, + "node_modules/@typescript-eslint/utils/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/utils/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/utils/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "6.7.3", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.7.3.tgz", + "integrity": "sha512-HEVXkU9IB+nk9o63CeICMHxFWbHWr3E1mpilIQBe9+7L/lH97rleFLVtYsfnWB+JVMaiFnEaxvknvmIzX+CqVg==", + "dependencies": { + "@typescript-eslint/types": "6.7.3", + "eslint-visitor-keys": "^3.4.1" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, "node_modules/@zeit/schemas": { "version": "2.29.0", "resolved": "https://registry.npmjs.org/@zeit/schemas/-/schemas-2.29.0.tgz", @@ -1404,7 +2069,6 @@ "version": "8.7.1", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.1.tgz", "integrity": "sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A==", - "dev": true, "bin": { "acorn": "bin/acorn" }, @@ -1416,11 +2080,18 @@ "version": "5.3.2", "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true, "peerDependencies": { "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, + "node_modules/acorn-walk": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", + "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", + "engines": { + "node": ">=0.4.0" + } + }, "node_modules/agent-base": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", @@ -1436,7 +2107,6 @@ "version": "6.12.6", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -1553,6 +2223,14 @@ "sprintf-js": "~1.0.2" } }, + "node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "engines": { + "node": ">=8" + } + }, "node_modules/async": { "version": "0.2.10", "resolved": "https://registry.npmjs.org/async/-/async-0.2.10.tgz", @@ -1564,11 +2242,13 @@ "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" }, "node_modules/axios": { - "version": "0.21.4", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.4.tgz", - "integrity": "sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==", + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.5.1.tgz", + "integrity": "sha512-Q28iYCWzNHjAm+yEAot5QaAMxhMghWLFVf7rRdwhUI+c2jix2DUXjAHXVi+s1ibs3mjPO/cCgbA++3BjD0vP/A==", "dependencies": { - "follow-redirects": "^1.14.0" + "follow-redirects": "^1.15.0", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" } }, "node_modules/axios-cache-interceptor": { @@ -1585,20 +2265,21 @@ } }, "node_modules/axios-cookiejar-support": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/axios-cookiejar-support/-/axios-cookiejar-support-1.0.1.tgz", - "integrity": "sha512-IZJxnAJ99XxiLqNeMOqrPbfR7fRyIfaoSLdPUf4AMQEGkH8URs0ghJK/xtqBsD+KsSr3pKl4DEQjCn834pHMig==", + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/axios-cookiejar-support/-/axios-cookiejar-support-4.0.7.tgz", + "integrity": "sha512-9vpE3y/a2l2Vs2XEJE4L2z0GWnlpJ4Xj+kDaoCtrpPfS1J3oikXBrxRJX6H62/ZcelOGe+519yW7mqXCIoPXuw==", "dependencies": { - "is-redirect": "^1.0.0", - "pify": "^5.0.0" + "http-cookie-agent": "^5.0.4" }, "engines": { - "node": ">= 10.0.0" + "node": ">=14.18.0 <15.0.0 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/3846masa" }, "peerDependencies": { - "@types/tough-cookie": ">=2.3.3", - "axios": ">=0.16.2", - "tough-cookie": ">=2.3.3" + "axios": ">=0.20.0", + "tough-cookie": ">=4.0.0" } }, "node_modules/axios-mock-adapter": { @@ -1615,14 +2296,14 @@ } }, "node_modules/babel-jest": { - "version": "29.6.1", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.6.1.tgz", - "integrity": "sha512-qu+3bdPEQC6KZSPz+4Fyjbga5OODNcp49j6GKzG1EKbkfyJBxEYGVUmVGpwCSeGouG52R4EgYMLb6p9YeEEQ4A==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.7.0.tgz", + "integrity": "sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==", "dependencies": { - "@jest/transform": "^29.6.1", + "@jest/transform": "^29.7.0", "@types/babel__core": "^7.1.14", "babel-plugin-istanbul": "^6.1.1", - "babel-preset-jest": "^29.5.0", + "babel-preset-jest": "^29.6.3", "chalk": "^4.0.0", "graceful-fs": "^4.2.9", "slash": "^3.0.0" @@ -1650,9 +2331,9 @@ } }, "node_modules/babel-plugin-jest-hoist": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.5.0.tgz", - "integrity": "sha512-zSuuuAlTMT4mzLj2nPnUm6fsE6270vdOfnpbJ+RmruU75UhLFvL0N2NgI7xpeS7NaB6hGqmd5pVpGTDYvi4Q3w==", + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.6.3.tgz", + "integrity": "sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==", "dependencies": { "@babel/template": "^7.3.3", "@babel/types": "^7.3.3", @@ -1686,11 +2367,11 @@ } }, "node_modules/babel-preset-jest": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.5.0.tgz", - "integrity": "sha512-JOMloxOqdiBSxMAzjRaH023/vvcaSaec49zvg+2LmNsktC7ei39LTJGw02J+9uUtTZUq6xbLyJ4dxe9sSmIuAg==", + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz", + "integrity": "sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==", "dependencies": { - "babel-plugin-jest-hoist": "^29.5.0", + "babel-plugin-jest-hoist": "^29.6.3", "babel-preset-current-node-syntax": "^1.0.0" }, "engines": { @@ -1930,6 +2611,17 @@ "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" } }, + "node_modules/bs-logger": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/bs-logger/-/bs-logger-0.2.6.tgz", + "integrity": "sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==", + "dependencies": { + "fast-json-stable-stringify": "2.x" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/bser": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", @@ -2196,10 +2888,21 @@ "node": ">=8" } }, + "node_modules/cli-progress": { + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/cli-progress/-/cli-progress-3.12.0.tgz", + "integrity": "sha512-tRkV3HJ1ASwm19THiiLIXLO7Im7wlTuKnvkYaTkyoAPefqjNg7W7DHKUlGRxy9vxDvbyCYQkQozvptuMkGCg8A==", + "dependencies": { + "string-width": "^4.2.3" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/cli-spinners": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.6.1.tgz", - "integrity": "sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g==", + "version": "2.9.1", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.1.tgz", + "integrity": "sha512-jHgecW0pxkonBJdrKsqxgRX9AcG+u/5k0Q7WPDfi8AogLAdwxEkyYYNWwZ5GvVFoFx2uiY1eNcSK00fh+1+FyQ==", "engines": { "node": ">=6" }, @@ -2244,7 +2947,7 @@ "node_modules/clone": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", - "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=", + "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", "engines": { "node": ">=0.8" } @@ -2438,12 +3141,38 @@ "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==" }, - "node_modules/cron": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/cron/-/cron-2.3.1.tgz", - "integrity": "sha512-1eRRlIT0UfIqauwbG9pkg3J6CX9A6My2ytJWqAXoK0T9oJnUZTzGBNPxao0zjodIbPgf8UQWjE62BMb9eVllSQ==", + "node_modules/create-jest": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/create-jest/-/create-jest-29.7.0.tgz", + "integrity": "sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==", "dependencies": { - "luxon": "^3.2.1" + "@jest/types": "^29.6.3", + "chalk": "^4.0.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "jest-config": "^29.7.0", + "jest-util": "^29.7.0", + "prompts": "^2.0.1" + }, + "bin": { + "create-jest": "bin/create-jest.js" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/create-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==" + }, + "node_modules/cron": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/cron/-/cron-2.4.3.tgz", + "integrity": "sha512-YBvExkQYF7w0PxyeFLRyr817YVDhGxaCi5/uRRMqa4aWD3IFKRd+uNbpW1VWMdqQy8PZ7CElc+accXJcauPKzQ==", + "dependencies": { + "@types/luxon": "~3.3.0", + "luxon": "~3.3.0" } }, "node_modules/cross-spawn": { @@ -2567,9 +3296,17 @@ } }, "node_modules/dedent": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", - "integrity": "sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==" + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.5.1.tgz", + "integrity": "sha512-+LxW+KLWxu3HW3M2w2ympwtqPrqYRzU8fqi6Fhd18fBALe15blJPI/I4+UHveMVG6lJqB4JNd4UG0S5cnVHwIg==", + "peerDependencies": { + "babel-plugin-macros": "^3.1.0" + }, + "peerDependenciesMeta": { + "babel-plugin-macros": { + "optional": true + } + } }, "node_modules/deep-extend": { "version": "0.6.0", @@ -2582,8 +3319,7 @@ "node_modules/deep-is": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==" }, "node_modules/deepmerge": { "version": "4.3.1", @@ -2594,11 +3330,14 @@ } }, "node_modules/defaults": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", - "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", + "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", "dependencies": { "clone": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/defer-to-connect": { @@ -2643,19 +3382,37 @@ "node": ">=8" } }, + "node_modules/diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "engines": { + "node": ">=0.3.1" + } + }, "node_modules/diff-sequences": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.4.3.tgz", - "integrity": "sha512-ofrBgwpPhCD85kMKtE9RYFFq6OC1A89oW2vvgWZNCwxrUpRUILopY7lsYyMDSjc8g6U6aiO0Qubg6r4Wgt5ZnA==", + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", + "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==", "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/doctrine": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dev": true, "dependencies": { "esutils": "^2.0.2" }, @@ -2765,9 +3522,9 @@ } }, "node_modules/epg-grabber": { - "version": "0.32.0", - "resolved": "https://registry.npmjs.org/epg-grabber/-/epg-grabber-0.32.0.tgz", - "integrity": "sha512-B6Kfd8gTebUXF+mugpLDCHnza6bl7Ymq5OlOZY2SsdT6JnmDF5F/pOy0vulOLwd9QXE9fwatN/rcfN3GVtc7kQ==", + "version": "0.34.0", + "resolved": "https://registry.npmjs.org/epg-grabber/-/epg-grabber-0.34.0.tgz", + "integrity": "sha512-j/2uYRBeDg9IBL6VgjFc7rSTHaefd57e9NuX6TGoHYfr4whsZGmojBAKeaX6PkcGXvGjG2oCXoqiANeWuBisaw==", "dependencies": { "axios": "^0.21.1", "axios-cache-interceptor": "^0.10.3", @@ -2793,6 +3550,31 @@ "node": ">=10.0.0" } }, + "node_modules/epg-grabber/node_modules/axios": { + "version": "0.21.4", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.4.tgz", + "integrity": "sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==", + "dependencies": { + "follow-redirects": "^1.14.0" + } + }, + "node_modules/epg-grabber/node_modules/axios-cookiejar-support": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/axios-cookiejar-support/-/axios-cookiejar-support-1.0.1.tgz", + "integrity": "sha512-IZJxnAJ99XxiLqNeMOqrPbfR7fRyIfaoSLdPUf4AMQEGkH8URs0ghJK/xtqBsD+KsSr3pKl4DEQjCn834pHMig==", + "dependencies": { + "is-redirect": "^1.0.0", + "pify": "^5.0.0" + }, + "engines": { + "node": ">= 10.0.0" + }, + "peerDependencies": { + "@types/tough-cookie": ">=2.3.3", + "axios": ">=0.16.2", + "tough-cookie": ">=2.3.3" + } + }, "node_modules/epg-grabber/node_modules/commander": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", @@ -2859,7 +3641,6 @@ "version": "8.17.0", "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.17.0.tgz", "integrity": "sha512-gq0m0BTJfci60Fz4nczYxNAlED+sMcihltndR8t9t1evnU/azx53x3t2UHXC/uRjcbvRw/XctpaNygSTcQD+Iw==", - "dev": true, "dependencies": { "@eslint/eslintrc": "^1.3.0", "@humanwhocodes/config-array": "^0.9.2", @@ -2907,11 +3688,21 @@ "url": "https://opencollective.com/eslint" } }, + "node_modules/eslint-config-prettier": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-9.0.0.tgz", + "integrity": "sha512-IcJsTkJae2S35pRsRAwoCE+925rJJStOdkKnLVgtE+tEpqU0EVVM7OqrwxqgptKdX29NUwC82I5pXsGFIgSevw==", + "bin": { + "eslint-config-prettier": "bin/cli.js" + }, + "peerDependencies": { + "eslint": ">=7.0.0" + } + }, "node_modules/eslint-scope": { "version": "7.1.1", "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", - "dev": true, "dependencies": { "esrecurse": "^4.3.0", "estraverse": "^5.2.0" @@ -2924,7 +3715,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", - "dev": true, "dependencies": { "eslint-visitor-keys": "^2.0.0" }, @@ -2942,31 +3732,30 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", - "dev": true, "engines": { "node": ">=10" } }, "node_modules/eslint-visitor-keys": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", - "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", - "dev": true, + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, "node_modules/eslint/node_modules/argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" }, "node_modules/eslint/node_modules/escape-string-regexp": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true, "engines": { "node": ">=10" }, @@ -2978,7 +3767,6 @@ "version": "13.15.0", "resolved": "https://registry.npmjs.org/globals/-/globals-13.15.0.tgz", "integrity": "sha512-bpzcOlgDhMG070Av0Vy5Owklpv1I6+j96GhUI7Rh7IzDCKLzboflLrrfqMu8NquDbiR4EOQk7XzJwqVJxicxog==", - "dev": true, "dependencies": { "type-fest": "^0.20.2" }, @@ -2993,7 +3781,6 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, "dependencies": { "argparse": "^2.0.1" }, @@ -3005,7 +3792,6 @@ "version": "0.20.2", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true, "engines": { "node": ">=10" }, @@ -3017,7 +3803,6 @@ "version": "9.3.2", "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.2.tgz", "integrity": "sha512-D211tC7ZwouTIuY5x9XnS0E9sWNChB7IYKX/Xp5eQj3nFXhqmiUDB9q27y76oFl8jTg3pXcQx/bpxMfs3CIZbA==", - "dev": true, "dependencies": { "acorn": "^8.7.1", "acorn-jsx": "^5.3.2", @@ -3043,7 +3828,6 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", - "dev": true, "dependencies": { "estraverse": "^5.1.0" }, @@ -3055,7 +3839,6 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dev": true, "dependencies": { "estraverse": "^5.2.0" }, @@ -3067,7 +3850,6 @@ "version": "5.3.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, "engines": { "node": ">=4.0" } @@ -3076,7 +3858,6 @@ "version": "2.0.3", "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true, "engines": { "node": ">=0.10.0" } @@ -3112,16 +3893,15 @@ } }, "node_modules/expect": { - "version": "29.6.1", - "resolved": "https://registry.npmjs.org/expect/-/expect-29.6.1.tgz", - "integrity": "sha512-XEdDLonERCU1n9uR56/Stx9OqojaLAQtZf9PrCHH9Hl8YXiEIka3H4NXJ3NOIBmQJTg7+j7buh34PMHfJujc8g==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/expect/-/expect-29.7.0.tgz", + "integrity": "sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==", "dependencies": { - "@jest/expect-utils": "^29.6.1", - "@types/node": "*", - "jest-get-type": "^29.4.3", - "jest-matcher-utils": "^29.6.1", - "jest-message-util": "^29.6.1", - "jest-util": "^29.6.1" + "@jest/expect-utils": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" @@ -3150,6 +3930,32 @@ "resolved": "https://registry.npmjs.org/fast-defer/-/fast-defer-1.1.7.tgz", "integrity": "sha512-tJ01ulDWT2WhqxMKS20nXX6wyX2iInBYpbN3GO7yjKwXMY4qvkdBRxak9IFwBLlFDESox+SwSvqMCZDfe1tqeg==" }, + "node_modules/fast-glob": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz", + "integrity": "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==", + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/fast-json-stable-stringify": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", @@ -3158,8 +3964,7 @@ "node_modules/fast-levenshtein": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", - "dev": true + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=" }, "node_modules/fast-url-parser": { "version": "1.1.3", @@ -3174,6 +3979,14 @@ "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==" }, + "node_modules/fastq": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", + "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", + "dependencies": { + "reusify": "^1.0.4" + } + }, "node_modules/fb-watchman": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", @@ -3205,7 +4018,6 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", - "dev": true, "dependencies": { "flat-cache": "^3.0.4" }, @@ -3245,7 +4057,6 @@ "version": "3.0.4", "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", - "dev": true, "dependencies": { "flatted": "^3.1.0", "rimraf": "^3.0.2" @@ -3257,8 +4068,7 @@ "node_modules/flatted": { "version": "3.2.5", "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.5.tgz", - "integrity": "sha512-WIWGi2L3DyTUvUrwRKgGi9TwxQMUEqPOPQBVi71R96jZXJdFskXEmf54BoZaS1kknGODoIGASGEzBUYdyMCBJg==", - "dev": true + "integrity": "sha512-WIWGi2L3DyTUvUrwRKgGi9TwxQMUEqPOPQBVi71R96jZXJdFskXEmf54BoZaS1kknGODoIGASGEzBUYdyMCBJg==" }, "node_modules/fn.name": { "version": "1.1.0", @@ -3284,6 +4094,32 @@ } } }, + "node_modules/foreground-child": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", + "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", + "dependencies": { + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/foreground-child/node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/form-data": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", @@ -3343,9 +4179,9 @@ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" }, "node_modules/fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", "hasInstallScript": true, "optional": true, "os": [ @@ -3363,8 +4199,7 @@ "node_modules/functional-red-black-tree": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==", - "dev": true + "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==" }, "node_modules/gauge": { "version": "3.0.2", @@ -3443,7 +4278,6 @@ "version": "6.0.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dev": true, "dependencies": { "is-glob": "^4.0.3" }, @@ -3459,6 +4293,25 @@ "node": ">=4" } }, + "node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/got": { "version": "11.8.5", "resolved": "https://registry.npmjs.org/got/-/got-11.8.5.tgz", @@ -3488,6 +4341,11 @@ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==" }, + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==" + }, "node_modules/has": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", @@ -3540,6 +4398,44 @@ "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==" }, + "node_modules/http-cookie-agent": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/http-cookie-agent/-/http-cookie-agent-5.0.4.tgz", + "integrity": "sha512-OtvikW69RvfyP6Lsequ0fN5R49S+8QcS9zwd58k6VSr6r57T8G29BkPdyrBcSwLq6ExLs9V+rBlfxu7gDstJag==", + "dependencies": { + "agent-base": "^7.1.0" + }, + "engines": { + "node": ">=14.18.0 <15.0.0 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/3846masa" + }, + "peerDependencies": { + "deasync": "^0.1.26", + "tough-cookie": "^4.0.0", + "undici": "^5.11.0" + }, + "peerDependenciesMeta": { + "deasync": { + "optional": true + }, + "undici": { + "optional": true + } + } + }, + "node_modules/http-cookie-agent/node_modules/agent-base": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.0.tgz", + "integrity": "sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==", + "dependencies": { + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, "node_modules/http2-wrapper": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-1.0.3.tgz", @@ -3603,10 +4499,9 @@ ] }, "node_modules/ignore": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", - "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", - "dev": true, + "version": "5.2.4", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", + "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", "engines": { "node": ">= 4" } @@ -3620,7 +4515,6 @@ "version": "3.3.0", "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "dev": true, "dependencies": { "parent-module": "^1.0.0", "resolve-from": "^4.0.0" @@ -3636,7 +4530,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true, "engines": { "node": ">=4" } @@ -3687,9 +4580,9 @@ "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" }, "node_modules/inquirer": { - "version": "8.2.4", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.2.4.tgz", - "integrity": "sha512-nn4F01dxU8VeKfq192IjLsxu0/OmMZ4Lg3xKAns148rCaXP6ntAoEkVYZThWjwON8AlzdZZi6oqnhNbxUG9hVg==", + "version": "8.2.6", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.2.6.tgz", + "integrity": "sha512-M1WuAmb7pn9zdFRtQYk26ZBoY043Sse0wVDdk4Bppr+JOXyQYybdtvK+l9wUibhtjdjvtoiNy8tk+EgsYIUqKg==", "dependencies": { "ansi-escapes": "^4.2.1", "chalk": "^4.1.1", @@ -3705,12 +4598,25 @@ "string-width": "^4.1.0", "strip-ansi": "^6.0.0", "through": "^2.3.6", - "wrap-ansi": "^7.0.0" + "wrap-ansi": "^6.0.1" }, "engines": { "node": ">=12.0.0" } }, + "node_modules/inquirer/node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", @@ -3750,9 +4656,9 @@ } }, "node_modules/is-core-module": { - "version": "2.12.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.12.1.tgz", - "integrity": "sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg==", + "version": "2.13.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.0.tgz", + "integrity": "sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==", "dependencies": { "has": "^1.0.3" }, @@ -3778,7 +4684,6 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true, "engines": { "node": ">=0.10.0" } @@ -3803,7 +4708,6 @@ "version": "4.0.3", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, "dependencies": { "is-extglob": "^2.1.1" }, @@ -3849,7 +4753,7 @@ "node_modules/is-redirect": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-redirect/-/is-redirect-1.0.0.tgz", - "integrity": "sha1-HQPd7VO9jbDzDCbk+V02/HyH3CQ=", + "integrity": "sha512-cr/SlUEe5zOGmzvj9bUyC4LVvkNVAXu4GytXLNMr1pny+a65MpQ9IJzFHD5vi7FyJgb4qt27+eS3TuQnqB+RQw==", "engines": { "node": ">=0.10.0" } @@ -3865,17 +4769,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/is-unicode-supported": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", - "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/is-wsl": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", @@ -3916,18 +4809,62 @@ } }, "node_modules/istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", + "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", "dependencies": { "istanbul-lib-coverage": "^3.0.0", - "make-dir": "^3.0.0", + "make-dir": "^4.0.0", "supports-color": "^7.1.0" }, "engines": { - "node": ">=8" + "node": ">=10" } }, + "node_modules/istanbul-lib-report/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-report/node_modules/make-dir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", + "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", + "dependencies": { + "semver": "^7.5.3" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/istanbul-lib-report/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-report/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + }, "node_modules/istanbul-lib-source-maps": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", @@ -3942,9 +4879,9 @@ } }, "node_modules/istanbul-reports": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.5.tgz", - "integrity": "sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w==", + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.6.tgz", + "integrity": "sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg==", "dependencies": { "html-escaper": "^2.0.0", "istanbul-lib-report": "^3.0.0" @@ -3953,15 +4890,32 @@ "node": ">=8" } }, - "node_modules/jest": { - "version": "29.6.1", - "resolved": "https://registry.npmjs.org/jest/-/jest-29.6.1.tgz", - "integrity": "sha512-Nirw5B4nn69rVUZtemCQhwxOBhm0nsp3hmtF4rzCeWD7BkjAXRIji7xWQfnTNbz9g0aVsBX6aZK3n+23LM6uDw==", + "node_modules/jackspeak": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.3.tgz", + "integrity": "sha512-R2bUw+kVZFS/h1AZqBKrSgDmdmjApzgY0AlCPumopFiAlbUxE2gf+SCuBzQ0cP5hHmUmFYF5yw55T97Th5Kstg==", "dependencies": { - "@jest/core": "^29.6.1", - "@jest/types": "^29.6.1", + "@isaacs/cliui": "^8.0.2" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, + "node_modules/jest": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest/-/jest-29.7.0.tgz", + "integrity": "sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==", + "dependencies": { + "@jest/core": "^29.7.0", + "@jest/types": "^29.6.3", "import-local": "^3.0.2", - "jest-cli": "^29.6.1" + "jest-cli": "^29.7.0" }, "bin": { "jest": "bin/jest.js" @@ -3979,11 +4933,12 @@ } }, "node_modules/jest-changed-files": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.5.0.tgz", - "integrity": "sha512-IFG34IUMUaNBIxjQXF/iu7g6EcdMrGRRxaUSw92I/2g2YC6vCdTltl4nHvt7Ci5nSJwXIkCu8Ka1DKF+X7Z1Ag==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.7.0.tgz", + "integrity": "sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==", "dependencies": { "execa": "^5.0.0", + "jest-util": "^29.7.0", "p-limit": "^3.1.0" }, "engines": { @@ -3991,27 +4946,27 @@ } }, "node_modules/jest-circus": { - "version": "29.6.1", - "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.6.1.tgz", - "integrity": "sha512-tPbYLEiBU4MYAL2XoZme/bgfUeotpDBd81lgHLCbDZZFaGmECk0b+/xejPFtmiBP87GgP/y4jplcRpbH+fgCzQ==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.7.0.tgz", + "integrity": "sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==", "dependencies": { - "@jest/environment": "^29.6.1", - "@jest/expect": "^29.6.1", - "@jest/test-result": "^29.6.1", - "@jest/types": "^29.6.1", + "@jest/environment": "^29.7.0", + "@jest/expect": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/types": "^29.6.3", "@types/node": "*", "chalk": "^4.0.0", "co": "^4.6.0", - "dedent": "^0.7.0", + "dedent": "^1.0.0", "is-generator-fn": "^2.0.0", - "jest-each": "^29.6.1", - "jest-matcher-utils": "^29.6.1", - "jest-message-util": "^29.6.1", - "jest-runtime": "^29.6.1", - "jest-snapshot": "^29.6.1", - "jest-util": "^29.6.1", + "jest-each": "^29.7.0", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-runtime": "^29.7.0", + "jest-snapshot": "^29.7.0", + "jest-util": "^29.7.0", "p-limit": "^3.1.0", - "pretty-format": "^29.6.1", + "pretty-format": "^29.7.0", "pure-rand": "^6.0.0", "slash": "^3.0.0", "stack-utils": "^2.0.3" @@ -4021,21 +4976,20 @@ } }, "node_modules/jest-cli": { - "version": "29.6.1", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.6.1.tgz", - "integrity": "sha512-607dSgTA4ODIN6go9w6xY3EYkyPFGicx51a69H7yfvt7lN53xNswEVLovq+E77VsTRi5fWprLH0yl4DJgE8Ing==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.7.0.tgz", + "integrity": "sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==", "dependencies": { - "@jest/core": "^29.6.1", - "@jest/test-result": "^29.6.1", - "@jest/types": "^29.6.1", + "@jest/core": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/types": "^29.6.3", "chalk": "^4.0.0", + "create-jest": "^29.7.0", "exit": "^0.1.2", - "graceful-fs": "^4.2.9", "import-local": "^3.0.2", - "jest-config": "^29.6.1", - "jest-util": "^29.6.1", - "jest-validate": "^29.6.1", - "prompts": "^2.0.1", + "jest-config": "^29.7.0", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", "yargs": "^17.3.1" }, "bin": { @@ -4092,30 +5046,30 @@ } }, "node_modules/jest-config": { - "version": "29.6.1", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.6.1.tgz", - "integrity": "sha512-XdjYV2fy2xYixUiV2Wc54t3Z4oxYPAELUzWnV6+mcbq0rh742X2p52pii5A3oeRzYjLnQxCsZmp0qpI6klE2cQ==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.7.0.tgz", + "integrity": "sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==", "dependencies": { "@babel/core": "^7.11.6", - "@jest/test-sequencer": "^29.6.1", - "@jest/types": "^29.6.1", - "babel-jest": "^29.6.1", + "@jest/test-sequencer": "^29.7.0", + "@jest/types": "^29.6.3", + "babel-jest": "^29.7.0", "chalk": "^4.0.0", "ci-info": "^3.2.0", "deepmerge": "^4.2.2", "glob": "^7.1.3", "graceful-fs": "^4.2.9", - "jest-circus": "^29.6.1", - "jest-environment-node": "^29.6.1", - "jest-get-type": "^29.4.3", - "jest-regex-util": "^29.4.3", - "jest-resolve": "^29.6.1", - "jest-runner": "^29.6.1", - "jest-util": "^29.6.1", - "jest-validate": "^29.6.1", + "jest-circus": "^29.7.0", + "jest-environment-node": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.7.0", + "jest-runner": "^29.7.0", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", "micromatch": "^4.0.4", "parse-json": "^5.2.0", - "pretty-format": "^29.6.1", + "pretty-format": "^29.7.0", "slash": "^3.0.0", "strip-json-comments": "^3.1.1" }, @@ -4136,23 +5090,23 @@ } }, "node_modules/jest-diff": { - "version": "29.6.1", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.6.1.tgz", - "integrity": "sha512-FsNCvinvl8oVxpNLttNQX7FAq7vR+gMDGj90tiP7siWw1UdakWUGqrylpsYrpvj908IYckm5Y0Q7azNAozU1Kg==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.7.0.tgz", + "integrity": "sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==", "dependencies": { "chalk": "^4.0.0", - "diff-sequences": "^29.4.3", - "jest-get-type": "^29.4.3", - "pretty-format": "^29.6.1" + "diff-sequences": "^29.6.3", + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-docblock": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.4.3.tgz", - "integrity": "sha512-fzdTftThczeSD9nZ3fzA/4KkHtnmllawWrXO69vtI+L9WjEIuXWs4AmyME7lN5hU7dB0sHhuPfcKofRsUb/2Fg==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.7.0.tgz", + "integrity": "sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==", "dependencies": { "detect-newline": "^3.0.0" }, @@ -4161,58 +5115,58 @@ } }, "node_modules/jest-each": { - "version": "29.6.1", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.6.1.tgz", - "integrity": "sha512-n5eoj5eiTHpKQCAVcNTT7DRqeUmJ01hsAL0Q1SMiBHcBcvTKDELixQOGMCpqhbIuTcfC4kMfSnpmDqRgRJcLNQ==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.7.0.tgz", + "integrity": "sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==", "dependencies": { - "@jest/types": "^29.6.1", + "@jest/types": "^29.6.3", "chalk": "^4.0.0", - "jest-get-type": "^29.4.3", - "jest-util": "^29.6.1", - "pretty-format": "^29.6.1" + "jest-get-type": "^29.6.3", + "jest-util": "^29.7.0", + "pretty-format": "^29.7.0" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-environment-node": { - "version": "29.6.1", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.6.1.tgz", - "integrity": "sha512-ZNIfAiE+foBog24W+2caIldl4Irh8Lx1PUhg/GZ0odM1d/h2qORAsejiFc7zb+SEmYPn1yDZzEDSU5PmDkmVLQ==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.7.0.tgz", + "integrity": "sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==", "dependencies": { - "@jest/environment": "^29.6.1", - "@jest/fake-timers": "^29.6.1", - "@jest/types": "^29.6.1", + "@jest/environment": "^29.7.0", + "@jest/fake-timers": "^29.7.0", + "@jest/types": "^29.6.3", "@types/node": "*", - "jest-mock": "^29.6.1", - "jest-util": "^29.6.1" + "jest-mock": "^29.7.0", + "jest-util": "^29.7.0" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-get-type": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.4.3.tgz", - "integrity": "sha512-J5Xez4nRRMjk8emnTpWrlkyb9pfRQQanDrvWHhsR1+VUfbwxi30eVcZFlcdGInRibU4G5LwHXpI7IRHU0CY+gg==", + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", + "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-haste-map": { - "version": "29.6.1", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.6.1.tgz", - "integrity": "sha512-0m7f9PZXxOCk1gRACiVgX85knUKPKLPg4oRCjLoqIm9brTHXaorMA0JpmtmVkQiT8nmXyIVoZd/nnH1cfC33ig==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.7.0.tgz", + "integrity": "sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==", "dependencies": { - "@jest/types": "^29.6.1", + "@jest/types": "^29.6.3", "@types/graceful-fs": "^4.1.3", "@types/node": "*", "anymatch": "^3.0.3", "fb-watchman": "^2.0.0", "graceful-fs": "^4.2.9", - "jest-regex-util": "^29.4.3", - "jest-util": "^29.6.1", - "jest-worker": "^29.6.1", + "jest-regex-util": "^29.6.3", + "jest-util": "^29.7.0", + "jest-worker": "^29.7.0", "micromatch": "^4.0.4", "walker": "^1.0.8" }, @@ -4224,43 +5178,43 @@ } }, "node_modules/jest-leak-detector": { - "version": "29.6.1", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.6.1.tgz", - "integrity": "sha512-OrxMNyZirpOEwkF3UHnIkAiZbtkBWiye+hhBweCHkVbCgyEy71Mwbb5zgeTNYWJBi1qgDVfPC1IwO9dVEeTLwQ==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.7.0.tgz", + "integrity": "sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==", "dependencies": { - "jest-get-type": "^29.4.3", - "pretty-format": "^29.6.1" + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-matcher-utils": { - "version": "29.6.1", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.6.1.tgz", - "integrity": "sha512-SLaztw9d2mfQQKHmJXKM0HCbl2PPVld/t9Xa6P9sgiExijviSp7TnZZpw2Fpt+OI3nwUO/slJbOfzfUMKKC5QA==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz", + "integrity": "sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==", "dependencies": { "chalk": "^4.0.0", - "jest-diff": "^29.6.1", - "jest-get-type": "^29.4.3", - "pretty-format": "^29.6.1" + "jest-diff": "^29.7.0", + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-message-util": { - "version": "29.6.1", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.6.1.tgz", - "integrity": "sha512-KoAW2zAmNSd3Gk88uJ56qXUWbFk787QKmjjJVOjtGFmmGSZgDBrlIL4AfQw1xyMYPNVD7dNInfIbur9B2rd/wQ==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.7.0.tgz", + "integrity": "sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==", "dependencies": { "@babel/code-frame": "^7.12.13", - "@jest/types": "^29.6.1", + "@jest/types": "^29.6.3", "@types/stack-utils": "^2.0.0", "chalk": "^4.0.0", "graceful-fs": "^4.2.9", "micromatch": "^4.0.4", - "pretty-format": "^29.6.1", + "pretty-format": "^29.7.0", "slash": "^3.0.0", "stack-utils": "^2.0.3" }, @@ -4269,13 +5223,13 @@ } }, "node_modules/jest-mock": { - "version": "29.6.1", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.6.1.tgz", - "integrity": "sha512-brovyV9HBkjXAEdRooaTQK42n8usKoSRR3gihzUpYeV/vwqgSoNfrksO7UfSACnPmxasO/8TmHM3w9Hp3G1dgw==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.7.0.tgz", + "integrity": "sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==", "dependencies": { - "@jest/types": "^29.6.1", + "@jest/types": "^29.6.3", "@types/node": "*", - "jest-util": "^29.6.1" + "jest-util": "^29.7.0" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" @@ -4298,24 +5252,24 @@ } }, "node_modules/jest-regex-util": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.4.3.tgz", - "integrity": "sha512-O4FglZaMmWXbGHSQInfXewIsd1LMn9p3ZXB/6r4FOkyhX2/iP/soMG98jGvk/A3HAN78+5VWcBGO0BJAPRh4kg==", + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz", + "integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==", "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-resolve": { - "version": "29.6.1", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.6.1.tgz", - "integrity": "sha512-AeRkyS8g37UyJiP9w3mmI/VXU/q8l/IH52vj/cDAyScDcemRbSBhfX/NMYIGilQgSVwsjxrCHf3XJu4f+lxCMg==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.7.0.tgz", + "integrity": "sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==", "dependencies": { "chalk": "^4.0.0", "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.6.1", + "jest-haste-map": "^29.7.0", "jest-pnp-resolver": "^1.2.2", - "jest-util": "^29.6.1", - "jest-validate": "^29.6.1", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", "resolve": "^1.20.0", "resolve.exports": "^2.0.0", "slash": "^3.0.0" @@ -4325,41 +5279,41 @@ } }, "node_modules/jest-resolve-dependencies": { - "version": "29.6.1", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.6.1.tgz", - "integrity": "sha512-BbFvxLXtcldaFOhNMXmHRWx1nXQO5LoXiKSGQcA1LxxirYceZT6ch8KTE1bK3X31TNG/JbkI7OkS/ABexVahiw==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.7.0.tgz", + "integrity": "sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==", "dependencies": { - "jest-regex-util": "^29.4.3", - "jest-snapshot": "^29.6.1" + "jest-regex-util": "^29.6.3", + "jest-snapshot": "^29.7.0" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-runner": { - "version": "29.6.1", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.6.1.tgz", - "integrity": "sha512-tw0wb2Q9yhjAQ2w8rHRDxteryyIck7gIzQE4Reu3JuOBpGp96xWgF0nY8MDdejzrLCZKDcp8JlZrBN/EtkQvPQ==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.7.0.tgz", + "integrity": "sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==", "dependencies": { - "@jest/console": "^29.6.1", - "@jest/environment": "^29.6.1", - "@jest/test-result": "^29.6.1", - "@jest/transform": "^29.6.1", - "@jest/types": "^29.6.1", + "@jest/console": "^29.7.0", + "@jest/environment": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", "@types/node": "*", "chalk": "^4.0.0", "emittery": "^0.13.1", "graceful-fs": "^4.2.9", - "jest-docblock": "^29.4.3", - "jest-environment-node": "^29.6.1", - "jest-haste-map": "^29.6.1", - "jest-leak-detector": "^29.6.1", - "jest-message-util": "^29.6.1", - "jest-resolve": "^29.6.1", - "jest-runtime": "^29.6.1", - "jest-util": "^29.6.1", - "jest-watcher": "^29.6.1", - "jest-worker": "^29.6.1", + "jest-docblock": "^29.7.0", + "jest-environment-node": "^29.7.0", + "jest-haste-map": "^29.7.0", + "jest-leak-detector": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-resolve": "^29.7.0", + "jest-runtime": "^29.7.0", + "jest-util": "^29.7.0", + "jest-watcher": "^29.7.0", + "jest-worker": "^29.7.0", "p-limit": "^3.1.0", "source-map-support": "0.5.13" }, @@ -4368,30 +5322,30 @@ } }, "node_modules/jest-runtime": { - "version": "29.6.1", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.6.1.tgz", - "integrity": "sha512-D6/AYOA+Lhs5e5il8+5pSLemjtJezUr+8zx+Sn8xlmOux3XOqx4d8l/2udBea8CRPqqrzhsKUsN/gBDE/IcaPQ==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.7.0.tgz", + "integrity": "sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==", "dependencies": { - "@jest/environment": "^29.6.1", - "@jest/fake-timers": "^29.6.1", - "@jest/globals": "^29.6.1", - "@jest/source-map": "^29.6.0", - "@jest/test-result": "^29.6.1", - "@jest/transform": "^29.6.1", - "@jest/types": "^29.6.1", + "@jest/environment": "^29.7.0", + "@jest/fake-timers": "^29.7.0", + "@jest/globals": "^29.7.0", + "@jest/source-map": "^29.6.3", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", "@types/node": "*", "chalk": "^4.0.0", "cjs-module-lexer": "^1.0.0", "collect-v8-coverage": "^1.0.0", "glob": "^7.1.3", "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.6.1", - "jest-message-util": "^29.6.1", - "jest-mock": "^29.6.1", - "jest-regex-util": "^29.4.3", - "jest-resolve": "^29.6.1", - "jest-snapshot": "^29.6.1", - "jest-util": "^29.6.1", + "jest-haste-map": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-mock": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.7.0", + "jest-snapshot": "^29.7.0", + "jest-util": "^29.7.0", "slash": "^3.0.0", "strip-bom": "^4.0.0" }, @@ -4400,30 +5354,29 @@ } }, "node_modules/jest-snapshot": { - "version": "29.6.1", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.6.1.tgz", - "integrity": "sha512-G4UQE1QQ6OaCgfY+A0uR1W2AY0tGXUPQpoUClhWHq1Xdnx1H6JOrC2nH5lqnOEqaDgbHFgIwZ7bNq24HpB180A==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.7.0.tgz", + "integrity": "sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==", "dependencies": { "@babel/core": "^7.11.6", "@babel/generator": "^7.7.2", "@babel/plugin-syntax-jsx": "^7.7.2", "@babel/plugin-syntax-typescript": "^7.7.2", "@babel/types": "^7.3.3", - "@jest/expect-utils": "^29.6.1", - "@jest/transform": "^29.6.1", - "@jest/types": "^29.6.1", - "@types/prettier": "^2.1.5", + "@jest/expect-utils": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", "babel-preset-current-node-syntax": "^1.0.0", "chalk": "^4.0.0", - "expect": "^29.6.1", + "expect": "^29.7.0", "graceful-fs": "^4.2.9", - "jest-diff": "^29.6.1", - "jest-get-type": "^29.4.3", - "jest-matcher-utils": "^29.6.1", - "jest-message-util": "^29.6.1", - "jest-util": "^29.6.1", + "jest-diff": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", "natural-compare": "^1.4.0", - "pretty-format": "^29.6.1", + "pretty-format": "^29.7.0", "semver": "^7.5.3" }, "engines": { @@ -4461,11 +5414,11 @@ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" }, "node_modules/jest-util": { - "version": "29.6.1", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.6.1.tgz", - "integrity": "sha512-NRFCcjc+/uO3ijUVyNOQJluf8PtGCe/W6cix36+M3cTFgiYqFOOW5MgN4JOOcvbUhcKTYVd1CvHz/LWi8d16Mg==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", + "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", "dependencies": { - "@jest/types": "^29.6.1", + "@jest/types": "^29.6.3", "@types/node": "*", "chalk": "^4.0.0", "ci-info": "^3.2.0", @@ -4477,16 +5430,16 @@ } }, "node_modules/jest-validate": { - "version": "29.6.1", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.6.1.tgz", - "integrity": "sha512-r3Ds69/0KCN4vx4sYAbGL1EVpZ7MSS0vLmd3gV78O+NAx3PDQQukRU5hNHPXlyqCgFY8XUk7EuTMLugh0KzahA==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.7.0.tgz", + "integrity": "sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==", "dependencies": { - "@jest/types": "^29.6.1", + "@jest/types": "^29.6.3", "camelcase": "^6.2.0", "chalk": "^4.0.0", - "jest-get-type": "^29.4.3", + "jest-get-type": "^29.6.3", "leven": "^3.1.0", - "pretty-format": "^29.6.1" + "pretty-format": "^29.7.0" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" @@ -4504,17 +5457,17 @@ } }, "node_modules/jest-watcher": { - "version": "29.6.1", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.6.1.tgz", - "integrity": "sha512-d4wpjWTS7HEZPaaj8m36QiaP856JthRZkrgcIY/7ISoUWPIillrXM23WPboZVLbiwZBt4/qn2Jke84Sla6JhFA==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.7.0.tgz", + "integrity": "sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==", "dependencies": { - "@jest/test-result": "^29.6.1", - "@jest/types": "^29.6.1", + "@jest/test-result": "^29.7.0", + "@jest/types": "^29.6.3", "@types/node": "*", "ansi-escapes": "^4.2.1", "chalk": "^4.0.0", "emittery": "^0.13.1", - "jest-util": "^29.6.1", + "jest-util": "^29.7.0", "string-length": "^4.0.1" }, "engines": { @@ -4522,12 +5475,12 @@ } }, "node_modules/jest-worker": { - "version": "29.6.1", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.6.1.tgz", - "integrity": "sha512-U+Wrbca7S8ZAxAe9L6nb6g8kPdia5hj32Puu5iOqBCMTMWFHXuK6dOV2IFrpedbTV8fjMFLdWNttQTBL6u2MRA==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", + "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", "dependencies": { "@types/node": "*", - "jest-util": "^29.6.1", + "jest-util": "^29.7.0", "merge-stream": "^2.0.0", "supports-color": "^8.0.0" }, @@ -4595,14 +5548,23 @@ "node_modules/json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" }, "node_modules/json-stable-stringify-without-jsonify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", - "dev": true + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==" + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } }, "node_modules/jsonfile": { "version": "6.1.0", @@ -4654,7 +5616,6 @@ "version": "0.4.1", "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "dev": true, "dependencies": { "prelude-ls": "^1.2.1", "type-check": "~0.4.0" @@ -4756,11 +5717,15 @@ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" }, + "node_modules/lodash.memoize": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", + "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==" + }, "node_modules/lodash.merge": { "version": "4.6.2", "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==" }, "node_modules/log-symbols": { "version": "4.1.0", @@ -4777,6 +5742,17 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/log-symbols/node_modules/is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/logform": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/logform/-/logform-2.4.0.tgz", @@ -4827,6 +5803,11 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/make-error": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==" + }, "node_modules/makeerror": { "version": "1.0.12", "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", @@ -4851,6 +5832,14 @@ "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "engines": { + "node": ">= 8" + } + }, "node_modules/micromatch": { "version": "4.0.5", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", @@ -4986,6 +5975,14 @@ "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=" }, + "node_modules/natural-orderby": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/natural-orderby/-/natural-orderby-3.0.2.tgz", + "integrity": "sha512-x7ZdOwBxZCEm9MM7+eQCjkrNLrW3rkBKNHVr78zbtqnMGVNlnDi6C/eUEYgxHNrcbu0ymvjzcwIL/6H1iHri9g==", + "engines": { + "node": ">=18" + } + }, "node_modules/nedb-promises": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/nedb-promises/-/nedb-promises-6.0.3.tgz", @@ -5131,6 +6128,14 @@ "url": "https://github.com/fb55/nth-check?sponsor=1" } }, + "node_modules/numeral": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/numeral/-/numeral-2.0.6.tgz", + "integrity": "sha512-qaKRmtYPZ5qdw4jWJD6bxEf1FJEqllJrwxCLIm0sQU/A7v2/czigzOb+C2uSiFsa9lBUzeH7M1oK+Q+OLxL3kA==", + "engines": { + "node": "*" + } + }, "node_modules/object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", @@ -5144,6 +6149,14 @@ "resolved": "https://registry.npmjs.org/object-code/-/object-code-1.2.2.tgz", "integrity": "sha512-ZSbEQdei4ElzuDM4BmazKSwINacocBf3/8rte25aNqXzvT/8dSaNVY9egsjAaBL/UhW55JNxAvXOKPIsL2MwWQ==" }, + "node_modules/object-treeify": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/object-treeify/-/object-treeify-2.1.1.tgz", + "integrity": "sha512-ofXhazOvXTYWbbibExMiS+asaTbYG/ZWopVroXFFOdjmc8ehXMq9R2VUaTx/C3CnZkQbT52wAZT4DrBLK/nQfw==", + "engines": { + "node": ">= 12" + } + }, "node_modules/on-headers": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", @@ -5186,7 +6199,6 @@ "version": "0.9.3", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", - "dev": true, "dependencies": { "@aashutoshrathi/word-wrap": "^1.2.3", "deep-is": "^0.1.3", @@ -5221,10 +6233,21 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/ora/node_modules/is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/os-tmpdir": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", + "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", "engines": { "node": ">=0.10.0" } @@ -5288,7 +6311,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dev": true, "dependencies": { "callsites": "^3.0.0" }, @@ -5375,11 +6397,42 @@ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" }, + "node_modules/path-scurry": { + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.1.tgz", + "integrity": "sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==", + "dependencies": { + "lru-cache": "^9.1.1 || ^10.0.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/path-scurry/node_modules/lru-cache": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.0.1.tgz", + "integrity": "sha512-IJ4uwUTi2qCccrioU6g9g/5rvvVl13bsdczUUcqbciD9iLr095yj8DQKdObriEvuNSx325N1rV1O0sJFszx75g==", + "engines": { + "node": "14 || >=16.14" + } + }, "node_modules/path-to-regexp": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-2.2.1.tgz", "integrity": "sha512-gu9bD6Ta5bwGrrU8muHzVOBFFREpp2iRkVfhBJahwJ6p6Xw20SjT0MxLnwkjOibQmGSYhiUnf2FLe7k+jcFmGQ==" }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "engines": { + "node": ">=8" + } + }, "node_modules/pdf-parse": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/pdf-parse/-/pdf-parse-1.1.1.tgz", @@ -5523,17 +6576,16 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "dev": true, "engines": { "node": ">= 0.8.0" } }, "node_modules/pretty-format": { - "version": "29.6.1", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.6.1.tgz", - "integrity": "sha512-7jRj+yXO0W7e4/tSJKoR7HRIHLPPjtNaUGG2xxKQnGvPNRkgWcQ0AZX6P4KBRJN4FcTBWb3sa7DVUJmocYuoog==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", "dependencies": { - "@jest/schemas": "^29.6.0", + "@jest/schemas": "^29.6.3", "ansi-styles": "^5.0.0", "react-is": "^18.0.0" }, @@ -5564,6 +6616,11 @@ "node": ">= 6" } }, + "node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" + }, "node_modules/psl": { "version": "1.8.0", "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", @@ -5587,9 +6644,9 @@ } }, "node_modules/pure-rand": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.0.2.tgz", - "integrity": "sha512-6Yg0ekpKICSjPswYOuC5sku/TSWaRYlA0qsXqJgM/d/4pLPHPuTxK7Nbf7jFKzAeedUhR8C7K9Uv63FBsSo8xQ==", + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.0.4.tgz", + "integrity": "sha512-LA0Y9kxMYv47GIPJy6MI84fqTd2HmYZI83W/kM/SkKfDlajnZYfmXFTxkbY+xSBPkLJxltMa9hIkmdc29eguMA==", "funding": [ { "type": "individual", @@ -5615,6 +6672,25 @@ "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==" }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, "node_modules/quick-lru": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", @@ -5678,7 +6754,6 @@ "version": "3.2.0", "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", - "dev": true, "engines": { "node": ">=8" }, @@ -5728,11 +6803,11 @@ "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==" }, "node_modules/resolve": { - "version": "1.22.2", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.2.tgz", - "integrity": "sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==", + "version": "1.22.6", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.6.tgz", + "integrity": "sha512-njhxM7mV12JfufShqGy3Rz8j11RPdLy4xi15UurGJeoHLfJpVXKdh3ueuOqbYUcDZnffr6X739JBo5LzyahEsw==", "dependencies": { - "is-core-module": "^2.11.0", + "is-core-module": "^2.13.0", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, @@ -5795,6 +6870,15 @@ "node": ">=8" } }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, "node_modules/rimraf": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", @@ -5817,10 +6901,32 @@ "node": ">=0.12.0" } }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, "node_modules/rxjs": { - "version": "7.5.5", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.5.5.tgz", - "integrity": "sha512-sy+H0pQofO95VDmFLzyaw9xNJU4KTRSwQIGM6+iG3SypAtCiLDzpeG8sJrNCWn2Up9km+KhkvTdbkrdy+yzZdw==", + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", + "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", "dependencies": { "tslib": "^2.1.0" } @@ -6192,6 +7298,20 @@ "node": ">=8" } }, + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", @@ -6203,6 +7323,18 @@ "node": ">=8" } }, + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/strip-bom": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", @@ -6314,13 +7446,12 @@ "node_modules/text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", - "dev": true + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==" }, "node_modules/through": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=" + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==" }, "node_modules/tmp": { "version": "0.0.33", @@ -6399,16 +7530,153 @@ "resolved": "https://registry.npmjs.org/triple-beam/-/triple-beam-1.3.0.tgz", "integrity": "sha512-XrHUvV5HpdLmIj4uVMxHggLbFSZYIn7HEWsqePZcI50pco+MPqJ50wMGY794X7AOOhxOBAjbkqfAbEe/QMp2Lw==" }, + "node_modules/ts-api-utils": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.0.3.tgz", + "integrity": "sha512-wNMeqtMz5NtwpT/UZGY5alT+VoKdSsOOP/kqHFcUW1P/VRhH2wJ48+DN2WwUliNbQ976ETwDL0Ifd2VVvgonvg==", + "engines": { + "node": ">=16.13.0" + }, + "peerDependencies": { + "typescript": ">=4.2.0" + } + }, + "node_modules/ts-jest": { + "version": "29.1.1", + "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.1.1.tgz", + "integrity": "sha512-D6xjnnbP17cC85nliwGiL+tpoKN0StpgE0TeOjXQTU6MVCfsB4v7aW05CgQ/1OywGb0x/oy9hHFnN+sczTiRaA==", + "dependencies": { + "bs-logger": "0.x", + "fast-json-stable-stringify": "2.x", + "jest-util": "^29.0.0", + "json5": "^2.2.3", + "lodash.memoize": "4.x", + "make-error": "1.x", + "semver": "^7.5.3", + "yargs-parser": "^21.0.1" + }, + "bin": { + "ts-jest": "cli.js" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "@babel/core": ">=7.0.0-beta.0 <8", + "@jest/types": "^29.0.0", + "babel-jest": "^29.0.0", + "jest": "^29.0.0", + "typescript": ">=4.3 <6" + }, + "peerDependenciesMeta": { + "@babel/core": { + "optional": true + }, + "@jest/types": { + "optional": true + }, + "babel-jest": { + "optional": true + }, + "esbuild": { + "optional": true + } + } + }, + "node_modules/ts-jest/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/ts-jest/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/ts-jest/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + }, + "node_modules/ts-jest/node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "engines": { + "node": ">=12" + } + }, + "node_modules/ts-node": { + "version": "10.9.1", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz", + "integrity": "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==", + "dependencies": { + "@cspotcode/source-map-support": "^0.8.0", + "@tsconfig/node10": "^1.0.7", + "@tsconfig/node12": "^1.0.7", + "@tsconfig/node14": "^1.0.0", + "@tsconfig/node16": "^1.0.2", + "acorn": "^8.4.1", + "acorn-walk": "^8.1.1", + "arg": "^4.1.0", + "create-require": "^1.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "v8-compile-cache-lib": "^3.0.1", + "yn": "3.1.1" + }, + "bin": { + "ts-node": "dist/bin.js", + "ts-node-cwd": "dist/bin-cwd.js", + "ts-node-esm": "dist/bin-esm.js", + "ts-node-script": "dist/bin-script.js", + "ts-node-transpile-only": "dist/bin-transpile.js", + "ts-script": "dist/bin-script-deprecated.js" + }, + "peerDependencies": { + "@swc/core": ">=1.2.50", + "@swc/wasm": ">=1.2.50", + "@types/node": "*", + "typescript": ">=2.7" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "@swc/wasm": { + "optional": true + } + } + }, + "node_modules/ts-node/node_modules/arg": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==" + }, "node_modules/tslib": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", - "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==" + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" }, "node_modules/type-check": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "dev": true, "dependencies": { "prelude-ls": "^1.2.1" }, @@ -6435,6 +7703,19 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/typescript": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.2.2.tgz", + "integrity": "sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==", + "peer": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, "node_modules/universal-user-agent": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-6.0.0.tgz", @@ -6527,8 +7808,12 @@ "node_modules/v8-compile-cache": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", - "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", - "dev": true + "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==" + }, + "node_modules/v8-compile-cache-lib": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", + "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==" }, "node_modules/v8-to-istanbul": { "version": "9.1.0", @@ -6567,7 +7852,7 @@ "node_modules/wcwidth": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", - "integrity": "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=", + "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", "dependencies": { "defaults": "^1.0.3" } @@ -6713,6 +7998,23 @@ "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, + "node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", @@ -6779,6 +8081,14 @@ "node": ">=10" } }, + "node_modules/yn": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", + "engines": { + "node": ">=6" + } + }, "node_modules/yocto-queue": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", @@ -6795,8 +8105,7 @@ "@aashutoshrathi/word-wrap": { "version": "1.2.6", "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", - "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==", - "dev": true + "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==" }, "@alex_neo/jest-expect-message": { "version": "1.0.5", @@ -6851,11 +8160,6 @@ "version": "1.9.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==" - }, - "json5": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==" } } }, @@ -7193,6 +8497,25 @@ "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==" }, + "@cspotcode/source-map-support": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", + "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", + "requires": { + "@jridgewell/trace-mapping": "0.3.9" + }, + "dependencies": { + "@jridgewell/trace-mapping": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", + "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", + "requires": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + } + } + }, "@dabh/diagnostics": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/@dabh/diagnostics/-/diagnostics-2.0.3.tgz", @@ -7203,11 +8526,23 @@ "kuler": "^2.0.0" } }, + "@eslint-community/eslint-utils": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", + "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", + "requires": { + "eslint-visitor-keys": "^3.3.0" + } + }, + "@eslint-community/regexpp": { + "version": "4.8.2", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.8.2.tgz", + "integrity": "sha512-0MGxAVt1m/ZK+LTJp/j0qF7Hz97D9O/FH9Ms3ltnyIdDD57cbb1ACIQTkbHvNXtWDv5TPq7w5Kq56+cNukbo7g==" + }, "@eslint/eslintrc": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.0.tgz", "integrity": "sha512-UWW0TMTmk2d7hLcWD1/e2g5HDM/HQ3csaLSqXCfqwh4uNDuNqlaKWXmEsL4Cs41Z0KnILNvwbHAah3C2yt06kw==", - "dev": true, "requires": { "ajv": "^6.12.4", "debug": "^4.3.2", @@ -7223,14 +8558,12 @@ "argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" }, "globals": { "version": "13.15.0", "resolved": "https://registry.npmjs.org/globals/-/globals-13.15.0.tgz", "integrity": "sha512-bpzcOlgDhMG070Av0Vy5Owklpv1I6+j96GhUI7Rh7IzDCKLzboflLrrfqMu8NquDbiR4EOQk7XzJwqVJxicxog==", - "dev": true, "requires": { "type-fest": "^0.20.2" } @@ -7239,7 +8572,6 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, "requires": { "argparse": "^2.0.1" } @@ -7247,8 +8579,71 @@ "type-fest": { "version": "0.20.2", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==" + } + } + }, + "@freearhey/core": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/@freearhey/core/-/core-0.2.1.tgz", + "integrity": "sha512-kEdIxZClykKhGpgyCSlkwuVuSCCAWr3J5YvOUMJQDPgVAYvT5VbD8MYKPm+OwNi9T4HFmF6qqY90qwKJPoOXCA==", + "requires": { + "@types/fs-extra": "^11.0.2", + "@types/lodash": "^4.14.198", + "@types/luxon": "^3.3.2", + "fs-extra": "^11.1.1", + "glob": "^10.3.4", + "lodash": "^4.17.21", + "luxon": "^3.4.3", + "natural-orderby": "^3.0.2", + "node-gzip": "^1.1.2", + "normalize-url": "^6.1.0", + "object-treeify": "^2.1.1", + "signale": "^1.4.0" + }, + "dependencies": { + "brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "requires": { + "balanced-match": "^1.0.0" + } + }, + "fs-extra": { + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.1.tgz", + "integrity": "sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==", + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + }, + "glob": { + "version": "10.3.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.5.tgz", + "integrity": "sha512-bYUpUD7XDEHI4Q2O5a7PXGvyw4deKR70kHiDxzQbe925wbZknhOzUt2xBgTkYL6RBcVeXYuD9iNYeqoWbBZQnA==", + "requires": { + "foreground-child": "^3.1.0", + "jackspeak": "^2.0.3", + "minimatch": "^9.0.1", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", + "path-scurry": "^1.10.1" + } + }, + "luxon": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/luxon/-/luxon-3.4.3.tgz", + "integrity": "sha512-tFWBiv3h7z+T/tDaoxA8rqTxy1CHV6gHS//QdaH4pulbq/JuBSGgQspQQqcgnwdAx6pNI7cmvz5Sv/addzHmUg==" + }, + "minimatch": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "requires": { + "brace-expansion": "^2.0.1" + } } } }, @@ -7256,7 +8651,6 @@ "version": "0.9.5", "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.5.tgz", "integrity": "sha512-ObyMyWxZiCu/yTisA7uzx81s40xR2fD5Cg/2Kq7G02ajkNubJf6BopgDTmDyc3U7sXpNKM8cYOw7s7Tyr+DnCw==", - "dev": true, "requires": { "@humanwhocodes/object-schema": "^1.2.1", "debug": "^4.1.1", @@ -7266,8 +8660,65 @@ "@humanwhocodes/object-schema": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", - "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", - "dev": true + "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==" + }, + "@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "requires": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==" + }, + "ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==" + }, + "emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" + }, + "string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "requires": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + } + }, + "strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "requires": { + "ansi-regex": "^6.0.1" + } + }, + "wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "requires": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + } + } + } }, "@istanbuljs/load-nyc-config": { "version": "1.1.0", @@ -7287,115 +8738,115 @@ "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==" }, "@jest/console": { - "version": "29.6.1", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.6.1.tgz", - "integrity": "sha512-Aj772AYgwTSr5w8qnyoJ0eDYvN6bMsH3ORH1ivMotrInHLKdUz6BDlaEXHdM6kODaBIkNIyQGzsMvRdOv7VG7Q==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.7.0.tgz", + "integrity": "sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==", "requires": { - "@jest/types": "^29.6.1", + "@jest/types": "^29.6.3", "@types/node": "*", "chalk": "^4.0.0", - "jest-message-util": "^29.6.1", - "jest-util": "^29.6.1", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", "slash": "^3.0.0" } }, "@jest/core": { - "version": "29.6.1", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.6.1.tgz", - "integrity": "sha512-CcowHypRSm5oYQ1obz1wfvkjZZ2qoQlrKKvlfPwh5jUXVU12TWr2qMeH8chLMuTFzHh5a1g2yaqlqDICbr+ukQ==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.7.0.tgz", + "integrity": "sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg==", "requires": { - "@jest/console": "^29.6.1", - "@jest/reporters": "^29.6.1", - "@jest/test-result": "^29.6.1", - "@jest/transform": "^29.6.1", - "@jest/types": "^29.6.1", + "@jest/console": "^29.7.0", + "@jest/reporters": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", "@types/node": "*", "ansi-escapes": "^4.2.1", "chalk": "^4.0.0", "ci-info": "^3.2.0", "exit": "^0.1.2", "graceful-fs": "^4.2.9", - "jest-changed-files": "^29.5.0", - "jest-config": "^29.6.1", - "jest-haste-map": "^29.6.1", - "jest-message-util": "^29.6.1", - "jest-regex-util": "^29.4.3", - "jest-resolve": "^29.6.1", - "jest-resolve-dependencies": "^29.6.1", - "jest-runner": "^29.6.1", - "jest-runtime": "^29.6.1", - "jest-snapshot": "^29.6.1", - "jest-util": "^29.6.1", - "jest-validate": "^29.6.1", - "jest-watcher": "^29.6.1", + "jest-changed-files": "^29.7.0", + "jest-config": "^29.7.0", + "jest-haste-map": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.7.0", + "jest-resolve-dependencies": "^29.7.0", + "jest-runner": "^29.7.0", + "jest-runtime": "^29.7.0", + "jest-snapshot": "^29.7.0", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "jest-watcher": "^29.7.0", "micromatch": "^4.0.4", - "pretty-format": "^29.6.1", + "pretty-format": "^29.7.0", "slash": "^3.0.0", "strip-ansi": "^6.0.0" } }, "@jest/environment": { - "version": "29.6.1", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.6.1.tgz", - "integrity": "sha512-RMMXx4ws+Gbvw3DfLSuo2cfQlK7IwGbpuEWXCqyYDcqYTI+9Ju3a5hDnXaxjNsa6uKh9PQF2v+qg+RLe63tz5A==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.7.0.tgz", + "integrity": "sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==", "requires": { - "@jest/fake-timers": "^29.6.1", - "@jest/types": "^29.6.1", + "@jest/fake-timers": "^29.7.0", + "@jest/types": "^29.6.3", "@types/node": "*", - "jest-mock": "^29.6.1" + "jest-mock": "^29.7.0" } }, "@jest/expect": { - "version": "29.6.1", - "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.6.1.tgz", - "integrity": "sha512-N5xlPrAYaRNyFgVf2s9Uyyvr795jnB6rObuPx4QFvNJz8aAjpZUDfO4bh5G/xuplMID8PrnuF1+SfSyDxhsgYg==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.7.0.tgz", + "integrity": "sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==", "requires": { - "expect": "^29.6.1", - "jest-snapshot": "^29.6.1" + "expect": "^29.7.0", + "jest-snapshot": "^29.7.0" } }, "@jest/expect-utils": { - "version": "29.6.1", - "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.6.1.tgz", - "integrity": "sha512-o319vIf5pEMx0LmzSxxkYYxo4wrRLKHq9dP1yJU7FoPTB0LfAKSz8SWD6D/6U3v/O52t9cF5t+MeJiRsfk7zMw==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.7.0.tgz", + "integrity": "sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==", "requires": { - "jest-get-type": "^29.4.3" + "jest-get-type": "^29.6.3" } }, "@jest/fake-timers": { - "version": "29.6.1", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.6.1.tgz", - "integrity": "sha512-RdgHgbXyosCDMVYmj7lLpUwXA4c69vcNzhrt69dJJdf8azUrpRh3ckFCaTPNjsEeRi27Cig0oKDGxy5j7hOgHg==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.7.0.tgz", + "integrity": "sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==", "requires": { - "@jest/types": "^29.6.1", + "@jest/types": "^29.6.3", "@sinonjs/fake-timers": "^10.0.2", "@types/node": "*", - "jest-message-util": "^29.6.1", - "jest-mock": "^29.6.1", - "jest-util": "^29.6.1" + "jest-message-util": "^29.7.0", + "jest-mock": "^29.7.0", + "jest-util": "^29.7.0" } }, "@jest/globals": { - "version": "29.6.1", - "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.6.1.tgz", - "integrity": "sha512-2VjpaGy78JY9n9370H8zGRCFbYVWwjY6RdDMhoJHa1sYfwe6XM/azGN0SjY8kk7BOZApIejQ1BFPyH7FPG0w3A==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.7.0.tgz", + "integrity": "sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==", "requires": { - "@jest/environment": "^29.6.1", - "@jest/expect": "^29.6.1", - "@jest/types": "^29.6.1", - "jest-mock": "^29.6.1" + "@jest/environment": "^29.7.0", + "@jest/expect": "^29.7.0", + "@jest/types": "^29.6.3", + "jest-mock": "^29.7.0" } }, "@jest/reporters": { - "version": "29.6.1", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.6.1.tgz", - "integrity": "sha512-9zuaI9QKr9JnoZtFQlw4GREQbxgmNYXU6QuWtmuODvk5nvPUeBYapVR/VYMyi2WSx3jXTLJTJji8rN6+Cm4+FA==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.7.0.tgz", + "integrity": "sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg==", "requires": { "@bcoe/v8-coverage": "^0.2.3", - "@jest/console": "^29.6.1", - "@jest/test-result": "^29.6.1", - "@jest/transform": "^29.6.1", - "@jest/types": "^29.6.1", + "@jest/console": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", "@jridgewell/trace-mapping": "^0.3.18", "@types/node": "*", "chalk": "^4.0.0", @@ -7404,31 +8855,66 @@ "glob": "^7.1.3", "graceful-fs": "^4.2.9", "istanbul-lib-coverage": "^3.0.0", - "istanbul-lib-instrument": "^5.1.0", + "istanbul-lib-instrument": "^6.0.0", "istanbul-lib-report": "^3.0.0", "istanbul-lib-source-maps": "^4.0.0", "istanbul-reports": "^3.1.3", - "jest-message-util": "^29.6.1", - "jest-util": "^29.6.1", - "jest-worker": "^29.6.1", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", + "jest-worker": "^29.7.0", "slash": "^3.0.0", "string-length": "^4.0.1", "strip-ansi": "^6.0.0", "v8-to-istanbul": "^9.0.1" + }, + "dependencies": { + "istanbul-lib-instrument": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.0.tgz", + "integrity": "sha512-x58orMzEVfzPUKqlbLd1hXCnySCxKdDKa6Rjg97CwuLLRI4g3FHTdnExu1OqffVFay6zeMW+T6/DowFLndWnIw==", + "requires": { + "@babel/core": "^7.12.3", + "@babel/parser": "^7.14.7", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^7.5.4" + } + }, + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "requires": { + "yallist": "^4.0.0" + } + }, + "semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "requires": { + "lru-cache": "^6.0.0" + } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + } } }, "@jest/schemas": { - "version": "29.6.0", - "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.0.tgz", - "integrity": "sha512-rxLjXyJBTL4LQeJW3aKo0M/+GkCOXsO+8i9Iu7eDb6KwtP65ayoDsitrdPBtujxQ88k4wI2FNYfa6TOGwSn6cQ==", + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", + "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", "requires": { "@sinclair/typebox": "^0.27.8" } }, "@jest/source-map": { - "version": "29.6.0", - "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-29.6.0.tgz", - "integrity": "sha512-oA+I2SHHQGxDCZpbrsCQSoMLb3Bz547JnM+jUr9qEbuw0vQlWZfpPS7CO9J7XiwKicEz9OFn/IYoLkkiUD7bzA==", + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-29.6.3.tgz", + "integrity": "sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==", "requires": { "@jridgewell/trace-mapping": "^0.3.18", "callsites": "^3.0.0", @@ -7436,43 +8922,43 @@ } }, "@jest/test-result": { - "version": "29.6.1", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.6.1.tgz", - "integrity": "sha512-Ynr13ZRcpX6INak0TPUukU8GWRfm/vAytE3JbJNGAvINySWYdfE7dGZMbk36oVuK4CigpbhMn8eg1dixZ7ZJOw==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.7.0.tgz", + "integrity": "sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==", "requires": { - "@jest/console": "^29.6.1", - "@jest/types": "^29.6.1", + "@jest/console": "^29.7.0", + "@jest/types": "^29.6.3", "@types/istanbul-lib-coverage": "^2.0.0", "collect-v8-coverage": "^1.0.0" } }, "@jest/test-sequencer": { - "version": "29.6.1", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.6.1.tgz", - "integrity": "sha512-oBkC36PCDf/wb6dWeQIhaviU0l5u6VCsXa119yqdUosYAt7/FbQU2M2UoziO3igj/HBDEgp57ONQ3fm0v9uyyg==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.7.0.tgz", + "integrity": "sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==", "requires": { - "@jest/test-result": "^29.6.1", + "@jest/test-result": "^29.7.0", "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.6.1", + "jest-haste-map": "^29.7.0", "slash": "^3.0.0" } }, "@jest/transform": { - "version": "29.6.1", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.6.1.tgz", - "integrity": "sha512-URnTneIU3ZjRSaf906cvf6Hpox3hIeJXRnz3VDSw5/X93gR8ycdfSIEy19FlVx8NFmpN7fe3Gb1xF+NjXaQLWg==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.7.0.tgz", + "integrity": "sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==", "requires": { "@babel/core": "^7.11.6", - "@jest/types": "^29.6.1", + "@jest/types": "^29.6.3", "@jridgewell/trace-mapping": "^0.3.18", "babel-plugin-istanbul": "^6.1.1", "chalk": "^4.0.0", "convert-source-map": "^2.0.0", "fast-json-stable-stringify": "^2.1.0", "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.6.1", - "jest-regex-util": "^29.4.3", - "jest-util": "^29.6.1", + "jest-haste-map": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-util": "^29.7.0", "micromatch": "^4.0.4", "pirates": "^4.0.4", "slash": "^3.0.0", @@ -7480,11 +8966,11 @@ } }, "@jest/types": { - "version": "29.6.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.1.tgz", - "integrity": "sha512-tPKQNMPuXgvdOn2/Lg9HNfUvjYVGolt04Hp03f5hAk878uwOLikN+JzeLY0HcVgKgFl9Hs3EIqpu3WX27XNhnw==", + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", + "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", "requires": { - "@jest/schemas": "^29.6.0", + "@jest/schemas": "^29.6.3", "@types/istanbul-lib-coverage": "^2.0.0", "@types/istanbul-reports": "^3.0.0", "@types/node": "*", @@ -7577,6 +9063,29 @@ "resolved": "https://registry.npmjs.org/@nicolo-ribaudo/semver-v6/-/semver-v6-6.3.3.tgz", "integrity": "sha512-3Yc1fUTs69MG/uZbJlLSI3JISMn2UV2rg+1D/vROUqZyh3l6iYHCs7GMp+M40ZD7yOdDbYjJcU1oTJhrc+dGKg==" }, + "@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "requires": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + } + }, + "@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==" + }, + "@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "requires": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + } + }, "@octokit/auth-token": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-3.0.2.tgz", @@ -7655,6 +9164,12 @@ "@octokit/openapi-types": "^14.0.0" } }, + "@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "optional": true + }, "@seald-io/binary-search-tree": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/@seald-io/binary-search-tree/-/binary-search-tree-1.0.2.tgz", @@ -7704,10 +9219,30 @@ "defer-to-connect": "^2.0.0" } }, + "@tsconfig/node10": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", + "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==" + }, + "@tsconfig/node12": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", + "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==" + }, + "@tsconfig/node14": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", + "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==" + }, + "@tsconfig/node16": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", + "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==" + }, "@types/babel__core": { - "version": "7.20.1", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.1.tgz", - "integrity": "sha512-aACu/U/omhdk15O4Nfb+fHgH/z3QsfQzpnvRZhYhThms83ZnAOZz7zZAWO7mn2yyNQaA4xTO8GLK3uqFU4bYYw==", + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.2.tgz", + "integrity": "sha512-pNpr1T1xLUc2l3xJKuPtsEky3ybxN3m4fJkknfIpTCTfIZCDW57oAg+EfCgIIp2rvCe0Wn++/FfodDS4YXxBwA==", "requires": { "@babel/parser": "^7.20.7", "@babel/types": "^7.20.7", @@ -7717,26 +9252,26 @@ } }, "@types/babel__generator": { - "version": "7.6.4", - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.4.tgz", - "integrity": "sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==", + "version": "7.6.5", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.5.tgz", + "integrity": "sha512-h9yIuWbJKdOPLJTbmSpPzkF67e659PbQDba7ifWm5BJ8xTv+sDmS7rFmywkWOvXedGTivCdeGSIIX8WLcRTz8w==", "requires": { "@babel/types": "^7.0.0" } }, "@types/babel__template": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.1.tgz", - "integrity": "sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==", + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.2.tgz", + "integrity": "sha512-/AVzPICMhMOMYoSx9MoKpGDKdBRsIXMNByh1PXSZoa+v6ZoLa8xxtsT/uLQ/NJm0XVAWl/BvId4MlDeXJaeIZQ==", "requires": { "@babel/parser": "^7.1.0", "@babel/types": "^7.0.0" } }, "@types/babel__traverse": { - "version": "7.20.1", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.1.tgz", - "integrity": "sha512-MitHFXnhtgwsGZWtT68URpOvLN4EREih1u3QtQiN4VdAxWKRVvGCSvw/Qth0M0Qq3pJpnGOu5JaM/ydK7OGbqg==", + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.2.tgz", + "integrity": "sha512-ojlGK1Hsfce93J0+kn3H5R73elidKUaZonirN33GSmgTUMpzI/MIFfSpF3haANe3G1bEBS9/9/QEqwTzwqFsKw==", "requires": { "@babel/types": "^7.20.7" } @@ -7752,10 +9287,27 @@ "@types/responselike": "*" } }, + "@types/cli-progress": { + "version": "3.11.3", + "resolved": "https://registry.npmjs.org/@types/cli-progress/-/cli-progress-3.11.3.tgz", + "integrity": "sha512-/+C9xAdVtc+g5yHHkGBThgAA8rYpi5B+2ve3wLtybYj0JHEBs57ivR4x/zGfSsplRnV+psE91Nfin1soNKqz5Q==", + "requires": { + "@types/node": "*" + } + }, + "@types/fs-extra": { + "version": "11.0.2", + "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-11.0.2.tgz", + "integrity": "sha512-c0hrgAOVYr21EX8J0jBMXGLMgJqVf/v6yxi0dLaJboW9aQPh16Id+z6w2Tx1hm+piJOLv8xPfVKZCLfjPw/IMQ==", + "requires": { + "@types/jsonfile": "*", + "@types/node": "*" + } + }, "@types/graceful-fs": { - "version": "4.1.6", - "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.6.tgz", - "integrity": "sha512-Sig0SNORX9fdW+bQuTEovKj3uHcUL6LQKbCrrqb1X7J6/ReAbhCXRAhc+SMejhLELFj2QcyuxmUooZ4bt5ReSw==", + "version": "4.1.7", + "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.7.tgz", + "integrity": "sha512-MhzcwU8aUygZroVwL2jeYk6JisJrPl/oov/gsgGCue9mkgl9wjGbzReYQClxiUgFDnib9FuHqTndccKeZKxTRw==", "requires": { "@types/node": "*" } @@ -7765,6 +9317,15 @@ "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.1.tgz", "integrity": "sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ==" }, + "@types/inquirer": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/@types/inquirer/-/inquirer-9.0.3.tgz", + "integrity": "sha512-CzNkWqQftcmk2jaCWdBTf9Sm7xSw4rkI1zpU/Udw3HX5//adEZUIm9STtoRP1qgWj0CWQtJ9UTvqmO2NNjhMJw==", + "requires": { + "@types/through": "*", + "rxjs": "^7.2.0" + } + }, "@types/istanbul-lib-coverage": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", @@ -7786,11 +9347,33 @@ "@types/istanbul-lib-report": "*" } }, + "@types/jest": { + "version": "29.5.5", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.5.5.tgz", + "integrity": "sha512-ebylz2hnsWR9mYvmBFbXJXr+33UPc4+ZdxyDXh5w0FlPBTfCVN3wPL+kuOiQt3xvrK419v7XWeAs+AeOksafXg==", + "requires": { + "expect": "^29.0.0", + "pretty-format": "^29.0.0" + } + }, "@types/json-buffer": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/@types/json-buffer/-/json-buffer-3.0.0.tgz", "integrity": "sha512-3YP80IxxFJB4b5tYC2SUPwkg0XQLiu0nWvhRgEatgjf+29IcWO9X1k8xRv5DGssJ/lCrjYTjQPcobJr2yWIVuQ==" }, + "@types/json-schema": { + "version": "7.0.13", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.13.tgz", + "integrity": "sha512-RbSSoHliUbnXj3ny0CNFOoxrIDV6SUGyStHsvDqosw6CkdPV8TtWGlfecuK4ToyMEAql6pzNxgCFKanovUzlgQ==" + }, + "@types/jsonfile": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/@types/jsonfile/-/jsonfile-6.1.2.tgz", + "integrity": "sha512-8t92P+oeW4d/CRQfJaSqEwXujrhH4OEeHRjGU3v1Q8mUS8GPF3yiX26sw4svv6faL2HfBtGTe2xWIoVgN3dy9w==", + "requires": { + "@types/node": "*" + } + }, "@types/keyv": { "version": "3.1.4", "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.4.tgz", @@ -7799,15 +9382,30 @@ "@types/node": "*" } }, - "@types/node": { - "version": "17.0.31", - "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.31.tgz", - "integrity": "sha512-AR0x5HbXGqkEx9CadRH3EBYx/VkiUgZIhP4wvPn/+5KIsgpNoyFaRlVe0Zlx9gRtg8fA06a9tskE2MSN7TcG4Q==" + "@types/lodash": { + "version": "4.14.199", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.199.tgz", + "integrity": "sha512-Vrjz5N5Ia4SEzWWgIVwnHNEnb1UE1XMkvY5DGXrAeOGE9imk0hgTHh5GyDjLDJi9OTCn9oo9dXH1uToK1VRfrg==" }, - "@types/prettier": { - "version": "2.7.3", - "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.7.3.tgz", - "integrity": "sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA==" + "@types/luxon": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/@types/luxon/-/luxon-3.3.2.tgz", + "integrity": "sha512-l5cpE57br4BIjK+9BSkFBOsWtwv6J9bJpC7gdXIzZyI0vuKvNTk0wZZrkQxMGsUAuGW9+WMNWF2IJMD7br2yeQ==" + }, + "@types/node": { + "version": "20.7.1", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.7.1.tgz", + "integrity": "sha512-LT+OIXpp2kj4E2S/p91BMe+VgGX2+lfO+XTpfXhh+bCk2LkQtHZSub8ewFBMGP5ClysPjTDFa4sMI8Q3n4T0wg==" + }, + "@types/node-cleanup": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@types/node-cleanup/-/node-cleanup-2.1.2.tgz", + "integrity": "sha512-HTksao/sZs9nqxKD/vWOR3WxSrQsyJlBPEFFCgq9lMmhRsuQF+2p6hy+7FaCYn6lOeiDc3ywI8jDQ2bz5y6m8w==" + }, + "@types/numeral": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/numeral/-/numeral-2.0.3.tgz", + "integrity": "sha512-37VDYvFbx/I+Ve1kwcDUq5+qvgNl+uy9YUZhBMJ6YWHBtr2+d6CAgdn4R81NqBlZbTpvLxJOTUhwbki7+90+qQ==" }, "@types/responselike": { "version": "1.0.0", @@ -7817,15 +9415,28 @@ "@types/node": "*" } }, + "@types/semver": { + "version": "7.5.3", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.3.tgz", + "integrity": "sha512-OxepLK9EuNEIPxWNME+C6WwbRAOOI2o2BaQEGzz5Lu2e4Z5eDnEo+/aVEDMIXywoJitJ7xWd641wrGLZdtwRyw==" + }, "@types/stack-utils": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==" }, + "@types/through": { + "version": "0.0.31", + "resolved": "https://registry.npmjs.org/@types/through/-/through-0.0.31.tgz", + "integrity": "sha512-LpKpmb7FGevYgXnBXYs6HWnmiFyVG07Pt1cnbgM1IhEacITTiUaBXXvOR3Y50ksaJWGSfhbEvQFivQEFGCC55w==", + "requires": { + "@types/node": "*" + } + }, "@types/tough-cookie": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-4.0.2.tgz", - "integrity": "sha512-Q5vtl1W5ue16D+nIaW8JWebSSraJVlK+EthKn7e7UcD4KWsaSJ8BqGPXNaPghgtcn/fhvrN17Tv8ksUsQpiplw==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-4.0.3.tgz", + "integrity": "sha512-THo502dA5PzG/sfQH+42Lw3fvmYkceefOspdCwpHRul8ik2Jv1K8I5OZz1AT3/rs46kwgMCe9bSBmDLYkkOMGg==", "peer": true }, "@types/yargs": { @@ -7841,6 +9452,168 @@ "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz", "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==" }, + "@typescript-eslint/eslint-plugin": { + "version": "6.7.3", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.7.3.tgz", + "integrity": "sha512-vntq452UHNltxsaaN+L9WyuMch8bMd9CqJ3zhzTPXXidwbf5mqqKCVXEuvRZUqLJSTLeWE65lQwyXsRGnXkCTA==", + "requires": { + "@eslint-community/regexpp": "^4.5.1", + "@typescript-eslint/scope-manager": "6.7.3", + "@typescript-eslint/type-utils": "6.7.3", + "@typescript-eslint/utils": "6.7.3", + "@typescript-eslint/visitor-keys": "6.7.3", + "debug": "^4.3.4", + "graphemer": "^1.4.0", + "ignore": "^5.2.4", + "natural-compare": "^1.4.0", + "semver": "^7.5.4", + "ts-api-utils": "^1.0.1" + }, + "dependencies": { + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "requires": { + "yallist": "^4.0.0" + } + }, + "semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "requires": { + "lru-cache": "^6.0.0" + } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + } + } + }, + "@typescript-eslint/parser": { + "version": "6.7.3", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.7.3.tgz", + "integrity": "sha512-TlutE+iep2o7R8Lf+yoer3zU6/0EAUc8QIBB3GYBc1KGz4c4TRm83xwXUZVPlZ6YCLss4r77jbu6j3sendJoiQ==", + "peer": true, + "requires": { + "@typescript-eslint/scope-manager": "6.7.3", + "@typescript-eslint/types": "6.7.3", + "@typescript-eslint/typescript-estree": "6.7.3", + "@typescript-eslint/visitor-keys": "6.7.3", + "debug": "^4.3.4" + } + }, + "@typescript-eslint/scope-manager": { + "version": "6.7.3", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.7.3.tgz", + "integrity": "sha512-wOlo0QnEou9cHO2TdkJmzF7DFGvAKEnB82PuPNHpT8ZKKaZu6Bm63ugOTn9fXNJtvuDPanBc78lGUGGytJoVzQ==", + "requires": { + "@typescript-eslint/types": "6.7.3", + "@typescript-eslint/visitor-keys": "6.7.3" + } + }, + "@typescript-eslint/type-utils": { + "version": "6.7.3", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.7.3.tgz", + "integrity": "sha512-Fc68K0aTDrKIBvLnKTZ5Pf3MXK495YErrbHb1R6aTpfK5OdSFj0rVN7ib6Tx6ePrZ2gsjLqr0s98NG7l96KSQw==", + "requires": { + "@typescript-eslint/typescript-estree": "6.7.3", + "@typescript-eslint/utils": "6.7.3", + "debug": "^4.3.4", + "ts-api-utils": "^1.0.1" + } + }, + "@typescript-eslint/types": { + "version": "6.7.3", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.7.3.tgz", + "integrity": "sha512-4g+de6roB2NFcfkZb439tigpAMnvEIg3rIjWQ+EM7IBaYt/CdJt6em9BJ4h4UpdgaBWdmx2iWsafHTrqmgIPNw==" + }, + "@typescript-eslint/typescript-estree": { + "version": "6.7.3", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.7.3.tgz", + "integrity": "sha512-YLQ3tJoS4VxLFYHTw21oe1/vIZPRqAO91z6Uv0Ss2BKm/Ag7/RVQBcXTGcXhgJMdA4U+HrKuY5gWlJlvoaKZ5g==", + "requires": { + "@typescript-eslint/types": "6.7.3", + "@typescript-eslint/visitor-keys": "6.7.3", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.5.4", + "ts-api-utils": "^1.0.1" + }, + "dependencies": { + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "requires": { + "yallist": "^4.0.0" + } + }, + "semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "requires": { + "lru-cache": "^6.0.0" + } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + } + } + }, + "@typescript-eslint/utils": { + "version": "6.7.3", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.7.3.tgz", + "integrity": "sha512-vzLkVder21GpWRrmSR9JxGZ5+ibIUSudXlW52qeKpzUEQhRSmyZiVDDj3crAth7+5tmN1ulvgKaCU2f/bPRCzg==", + "requires": { + "@eslint-community/eslint-utils": "^4.4.0", + "@types/json-schema": "^7.0.12", + "@types/semver": "^7.5.0", + "@typescript-eslint/scope-manager": "6.7.3", + "@typescript-eslint/types": "6.7.3", + "@typescript-eslint/typescript-estree": "6.7.3", + "semver": "^7.5.4" + }, + "dependencies": { + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "requires": { + "yallist": "^4.0.0" + } + }, + "semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "requires": { + "lru-cache": "^6.0.0" + } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + } + } + }, + "@typescript-eslint/visitor-keys": { + "version": "6.7.3", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.7.3.tgz", + "integrity": "sha512-HEVXkU9IB+nk9o63CeICMHxFWbHWr3E1mpilIQBe9+7L/lH97rleFLVtYsfnWB+JVMaiFnEaxvknvmIzX+CqVg==", + "requires": { + "@typescript-eslint/types": "6.7.3", + "eslint-visitor-keys": "^3.4.1" + } + }, "@zeit/schemas": { "version": "2.29.0", "resolved": "https://registry.npmjs.org/@zeit/schemas/-/schemas-2.29.0.tgz", @@ -7863,16 +9636,19 @@ "acorn": { "version": "8.7.1", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.1.tgz", - "integrity": "sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A==", - "dev": true + "integrity": "sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A==" }, "acorn-jsx": { "version": "5.3.2", "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true, "requires": {} }, + "acorn-walk": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", + "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==" + }, "agent-base": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", @@ -7885,7 +9661,6 @@ "version": "6.12.6", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, "requires": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -7963,6 +9738,11 @@ "sprintf-js": "~1.0.2" } }, + "array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==" + }, "async": { "version": "0.2.10", "resolved": "https://registry.npmjs.org/async/-/async-0.2.10.tgz", @@ -7974,11 +9754,13 @@ "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" }, "axios": { - "version": "0.21.4", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.4.tgz", - "integrity": "sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==", + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.5.1.tgz", + "integrity": "sha512-Q28iYCWzNHjAm+yEAot5QaAMxhMghWLFVf7rRdwhUI+c2jix2DUXjAHXVi+s1ibs3mjPO/cCgbA++3BjD0vP/A==", "requires": { - "follow-redirects": "^1.14.0" + "follow-redirects": "^1.15.0", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" } }, "axios-cache-interceptor": { @@ -7992,12 +9774,11 @@ } }, "axios-cookiejar-support": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/axios-cookiejar-support/-/axios-cookiejar-support-1.0.1.tgz", - "integrity": "sha512-IZJxnAJ99XxiLqNeMOqrPbfR7fRyIfaoSLdPUf4AMQEGkH8URs0ghJK/xtqBsD+KsSr3pKl4DEQjCn834pHMig==", + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/axios-cookiejar-support/-/axios-cookiejar-support-4.0.7.tgz", + "integrity": "sha512-9vpE3y/a2l2Vs2XEJE4L2z0GWnlpJ4Xj+kDaoCtrpPfS1J3oikXBrxRJX6H62/ZcelOGe+519yW7mqXCIoPXuw==", "requires": { - "is-redirect": "^1.0.0", - "pify": "^5.0.0" + "http-cookie-agent": "^5.0.4" } }, "axios-mock-adapter": { @@ -8011,14 +9792,14 @@ } }, "babel-jest": { - "version": "29.6.1", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.6.1.tgz", - "integrity": "sha512-qu+3bdPEQC6KZSPz+4Fyjbga5OODNcp49j6GKzG1EKbkfyJBxEYGVUmVGpwCSeGouG52R4EgYMLb6p9YeEEQ4A==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.7.0.tgz", + "integrity": "sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==", "requires": { - "@jest/transform": "^29.6.1", + "@jest/transform": "^29.7.0", "@types/babel__core": "^7.1.14", "babel-plugin-istanbul": "^6.1.1", - "babel-preset-jest": "^29.5.0", + "babel-preset-jest": "^29.6.3", "chalk": "^4.0.0", "graceful-fs": "^4.2.9", "slash": "^3.0.0" @@ -8037,9 +9818,9 @@ } }, "babel-plugin-jest-hoist": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.5.0.tgz", - "integrity": "sha512-zSuuuAlTMT4mzLj2nPnUm6fsE6270vdOfnpbJ+RmruU75UhLFvL0N2NgI7xpeS7NaB6hGqmd5pVpGTDYvi4Q3w==", + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.6.3.tgz", + "integrity": "sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==", "requires": { "@babel/template": "^7.3.3", "@babel/types": "^7.3.3", @@ -8067,11 +9848,11 @@ } }, "babel-preset-jest": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.5.0.tgz", - "integrity": "sha512-JOMloxOqdiBSxMAzjRaH023/vvcaSaec49zvg+2LmNsktC7ei39LTJGw02J+9uUtTZUq6xbLyJ4dxe9sSmIuAg==", + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz", + "integrity": "sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==", "requires": { - "babel-plugin-jest-hoist": "^29.5.0", + "babel-plugin-jest-hoist": "^29.6.3", "babel-preset-current-node-syntax": "^1.0.0" } }, @@ -8216,6 +9997,14 @@ "update-browserslist-db": "^1.0.11" } }, + "bs-logger": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/bs-logger/-/bs-logger-0.2.6.tgz", + "integrity": "sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==", + "requires": { + "fast-json-stable-stringify": "2.x" + } + }, "bser": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", @@ -8389,10 +10178,18 @@ "restore-cursor": "^3.1.0" } }, + "cli-progress": { + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/cli-progress/-/cli-progress-3.12.0.tgz", + "integrity": "sha512-tRkV3HJ1ASwm19THiiLIXLO7Im7wlTuKnvkYaTkyoAPefqjNg7W7DHKUlGRxy9vxDvbyCYQkQozvptuMkGCg8A==", + "requires": { + "string-width": "^4.2.3" + } + }, "cli-spinners": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.6.1.tgz", - "integrity": "sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g==" + "version": "2.9.1", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.1.tgz", + "integrity": "sha512-jHgecW0pxkonBJdrKsqxgRX9AcG+u/5k0Q7WPDfi8AogLAdwxEkyYYNWwZ5GvVFoFx2uiY1eNcSK00fh+1+FyQ==" }, "cli-width": { "version": "3.0.0", @@ -8422,7 +10219,7 @@ "clone": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", - "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=" + "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==" }, "clone-response": { "version": "1.0.2", @@ -8586,12 +10383,32 @@ "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==" }, - "cron": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/cron/-/cron-2.3.1.tgz", - "integrity": "sha512-1eRRlIT0UfIqauwbG9pkg3J6CX9A6My2ytJWqAXoK0T9oJnUZTzGBNPxao0zjodIbPgf8UQWjE62BMb9eVllSQ==", + "create-jest": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/create-jest/-/create-jest-29.7.0.tgz", + "integrity": "sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==", "requires": { - "luxon": "^3.2.1" + "@jest/types": "^29.6.3", + "chalk": "^4.0.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "jest-config": "^29.7.0", + "jest-util": "^29.7.0", + "prompts": "^2.0.1" + } + }, + "create-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==" + }, + "cron": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/cron/-/cron-2.4.3.tgz", + "integrity": "sha512-YBvExkQYF7w0PxyeFLRyr817YVDhGxaCi5/uRRMqa4aWD3IFKRd+uNbpW1VWMdqQy8PZ7CElc+accXJcauPKzQ==", + "requires": { + "@types/luxon": "~3.3.0", + "luxon": "~3.3.0" } }, "cross-spawn": { @@ -8681,9 +10498,10 @@ } }, "dedent": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", - "integrity": "sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==" + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.5.1.tgz", + "integrity": "sha512-+LxW+KLWxu3HW3M2w2ympwtqPrqYRzU8fqi6Fhd18fBALe15blJPI/I4+UHveMVG6lJqB4JNd4UG0S5cnVHwIg==", + "requires": {} }, "deep-extend": { "version": "0.6.0", @@ -8693,8 +10511,7 @@ "deep-is": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==" }, "deepmerge": { "version": "4.3.1", @@ -8702,9 +10519,9 @@ "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==" }, "defaults": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", - "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", + "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", "requires": { "clone": "^1.0.2" } @@ -8739,16 +10556,28 @@ "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==" }, + "diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==" + }, "diff-sequences": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.4.3.tgz", - "integrity": "sha512-ofrBgwpPhCD85kMKtE9RYFFq6OC1A89oW2vvgWZNCwxrUpRUILopY7lsYyMDSjc8g6U6aiO0Qubg6r4Wgt5ZnA==" + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", + "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==" + }, + "dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "requires": { + "path-type": "^4.0.0" + } }, "doctrine": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dev": true, "requires": { "esutils": "^2.0.2" } @@ -8825,9 +10654,9 @@ "integrity": "sha512-oYp7156SP8LkeGD0GF85ad1X9Ai79WtRsZ2gxJqtBuzH+98YUV6jkHEKlZkMbcrjJjIVJNIDP/3WL9wQkoPbWA==" }, "epg-grabber": { - "version": "0.32.0", - "resolved": "https://registry.npmjs.org/epg-grabber/-/epg-grabber-0.32.0.tgz", - "integrity": "sha512-B6Kfd8gTebUXF+mugpLDCHnza6bl7Ymq5OlOZY2SsdT6JnmDF5F/pOy0vulOLwd9QXE9fwatN/rcfN3GVtc7kQ==", + "version": "0.34.0", + "resolved": "https://registry.npmjs.org/epg-grabber/-/epg-grabber-0.34.0.tgz", + "integrity": "sha512-j/2uYRBeDg9IBL6VgjFc7rSTHaefd57e9NuX6TGoHYfr4whsZGmojBAKeaX6PkcGXvGjG2oCXoqiANeWuBisaw==", "requires": { "axios": "^0.21.1", "axios-cache-interceptor": "^0.10.3", @@ -8847,6 +10676,23 @@ "xml-js": "^1.6.11" }, "dependencies": { + "axios": { + "version": "0.21.4", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.4.tgz", + "integrity": "sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==", + "requires": { + "follow-redirects": "^1.14.0" + } + }, + "axios-cookiejar-support": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/axios-cookiejar-support/-/axios-cookiejar-support-1.0.1.tgz", + "integrity": "sha512-IZJxnAJ99XxiLqNeMOqrPbfR7fRyIfaoSLdPUf4AMQEGkH8URs0ghJK/xtqBsD+KsSr3pKl4DEQjCn834pHMig==", + "requires": { + "is-redirect": "^1.0.0", + "pify": "^5.0.0" + } + }, "commander": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", @@ -8903,7 +10749,6 @@ "version": "8.17.0", "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.17.0.tgz", "integrity": "sha512-gq0m0BTJfci60Fz4nczYxNAlED+sMcihltndR8t9t1evnU/azx53x3t2UHXC/uRjcbvRw/XctpaNygSTcQD+Iw==", - "dev": true, "requires": { "@eslint/eslintrc": "^1.3.0", "@humanwhocodes/config-array": "^0.9.2", @@ -8945,20 +10790,17 @@ "argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" }, "escape-string-regexp": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==" }, "globals": { "version": "13.15.0", "resolved": "https://registry.npmjs.org/globals/-/globals-13.15.0.tgz", "integrity": "sha512-bpzcOlgDhMG070Av0Vy5Owklpv1I6+j96GhUI7Rh7IzDCKLzboflLrrfqMu8NquDbiR4EOQk7XzJwqVJxicxog==", - "dev": true, "requires": { "type-fest": "^0.20.2" } @@ -8967,7 +10809,6 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, "requires": { "argparse": "^2.0.1" } @@ -8975,16 +10816,20 @@ "type-fest": { "version": "0.20.2", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==" } } }, + "eslint-config-prettier": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-9.0.0.tgz", + "integrity": "sha512-IcJsTkJae2S35pRsRAwoCE+925rJJStOdkKnLVgtE+tEpqU0EVVM7OqrwxqgptKdX29NUwC82I5pXsGFIgSevw==", + "requires": {} + }, "eslint-scope": { "version": "7.1.1", "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", - "dev": true, "requires": { "esrecurse": "^4.3.0", "estraverse": "^5.2.0" @@ -8994,7 +10839,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", - "dev": true, "requires": { "eslint-visitor-keys": "^2.0.0" }, @@ -9002,22 +10846,19 @@ "eslint-visitor-keys": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", - "dev": true + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==" } } }, "eslint-visitor-keys": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", - "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", - "dev": true + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==" }, "espree": { "version": "9.3.2", "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.2.tgz", "integrity": "sha512-D211tC7ZwouTIuY5x9XnS0E9sWNChB7IYKX/Xp5eQj3nFXhqmiUDB9q27y76oFl8jTg3pXcQx/bpxMfs3CIZbA==", - "dev": true, "requires": { "acorn": "^8.7.1", "acorn-jsx": "^5.3.2", @@ -9033,7 +10874,6 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", - "dev": true, "requires": { "estraverse": "^5.1.0" } @@ -9042,7 +10882,6 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dev": true, "requires": { "estraverse": "^5.2.0" } @@ -9050,14 +10889,12 @@ "estraverse": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==" }, "esutils": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==" }, "execa": { "version": "5.1.1", @@ -9081,16 +10918,15 @@ "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==" }, "expect": { - "version": "29.6.1", - "resolved": "https://registry.npmjs.org/expect/-/expect-29.6.1.tgz", - "integrity": "sha512-XEdDLonERCU1n9uR56/Stx9OqojaLAQtZf9PrCHH9Hl8YXiEIka3H4NXJ3NOIBmQJTg7+j7buh34PMHfJujc8g==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/expect/-/expect-29.7.0.tgz", + "integrity": "sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==", "requires": { - "@jest/expect-utils": "^29.6.1", - "@types/node": "*", - "jest-get-type": "^29.4.3", - "jest-matcher-utils": "^29.6.1", - "jest-message-util": "^29.6.1", - "jest-util": "^29.6.1" + "@jest/expect-utils": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0" } }, "external-editor": { @@ -9113,6 +10949,28 @@ "resolved": "https://registry.npmjs.org/fast-defer/-/fast-defer-1.1.7.tgz", "integrity": "sha512-tJ01ulDWT2WhqxMKS20nXX6wyX2iInBYpbN3GO7yjKwXMY4qvkdBRxak9IFwBLlFDESox+SwSvqMCZDfe1tqeg==" }, + "fast-glob": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz", + "integrity": "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==", + "requires": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "dependencies": { + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "requires": { + "is-glob": "^4.0.1" + } + } + } + }, "fast-json-stable-stringify": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", @@ -9121,8 +10979,7 @@ "fast-levenshtein": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", - "dev": true + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=" }, "fast-url-parser": { "version": "1.1.3", @@ -9139,6 +10996,14 @@ } } }, + "fastq": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", + "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", + "requires": { + "reusify": "^1.0.4" + } + }, "fb-watchman": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", @@ -9164,7 +11029,6 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", - "dev": true, "requires": { "flat-cache": "^3.0.4" } @@ -9195,7 +11059,6 @@ "version": "3.0.4", "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", - "dev": true, "requires": { "flatted": "^3.1.0", "rimraf": "^3.0.2" @@ -9204,8 +11067,7 @@ "flatted": { "version": "3.2.5", "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.5.tgz", - "integrity": "sha512-WIWGi2L3DyTUvUrwRKgGi9TwxQMUEqPOPQBVi71R96jZXJdFskXEmf54BoZaS1kknGODoIGASGEzBUYdyMCBJg==", - "dev": true + "integrity": "sha512-WIWGi2L3DyTUvUrwRKgGi9TwxQMUEqPOPQBVi71R96jZXJdFskXEmf54BoZaS1kknGODoIGASGEzBUYdyMCBJg==" }, "fn.name": { "version": "1.1.0", @@ -9217,6 +11079,22 @@ "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.0.tgz", "integrity": "sha512-aExlJShTV4qOUOL7yF1U5tvLCB0xQuudbf6toyYA0E/acBNw71mvjFTnLaRp50aQaYocMR0a/RMMBIHeZnGyjQ==" }, + "foreground-child": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", + "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", + "requires": { + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + }, + "dependencies": { + "signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==" + } + } + }, "form-data": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", @@ -9266,9 +11144,9 @@ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" }, "fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", "optional": true }, "function-bind": { @@ -9279,8 +11157,7 @@ "functional-red-black-tree": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==", - "dev": true + "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==" }, "gauge": { "version": "3.0.2", @@ -9335,7 +11212,6 @@ "version": "6.0.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dev": true, "requires": { "is-glob": "^4.0.3" } @@ -9345,6 +11221,19 @@ "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==" }, + "globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "requires": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + } + }, "got": { "version": "11.8.5", "resolved": "https://registry.npmjs.org/got/-/got-11.8.5.tgz", @@ -9368,6 +11257,11 @@ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==" }, + "graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==" + }, "has": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", @@ -9407,6 +11301,24 @@ "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==" }, + "http-cookie-agent": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/http-cookie-agent/-/http-cookie-agent-5.0.4.tgz", + "integrity": "sha512-OtvikW69RvfyP6Lsequ0fN5R49S+8QcS9zwd58k6VSr6r57T8G29BkPdyrBcSwLq6ExLs9V+rBlfxu7gDstJag==", + "requires": { + "agent-base": "^7.1.0" + }, + "dependencies": { + "agent-base": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.0.tgz", + "integrity": "sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==", + "requires": { + "debug": "^4.3.4" + } + } + } + }, "http2-wrapper": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-1.0.3.tgz", @@ -9444,10 +11356,9 @@ "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==" }, "ignore": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", - "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", - "dev": true + "version": "5.2.4", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", + "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==" }, "immediate": { "version": "3.0.6", @@ -9458,7 +11369,6 @@ "version": "3.3.0", "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "dev": true, "requires": { "parent-module": "^1.0.0", "resolve-from": "^4.0.0" @@ -9467,8 +11377,7 @@ "resolve-from": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==" } } }, @@ -9506,9 +11415,9 @@ "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" }, "inquirer": { - "version": "8.2.4", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.2.4.tgz", - "integrity": "sha512-nn4F01dxU8VeKfq192IjLsxu0/OmMZ4Lg3xKAns148rCaXP6ntAoEkVYZThWjwON8AlzdZZi6oqnhNbxUG9hVg==", + "version": "8.2.6", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.2.6.tgz", + "integrity": "sha512-M1WuAmb7pn9zdFRtQYk26ZBoY043Sse0wVDdk4Bppr+JOXyQYybdtvK+l9wUibhtjdjvtoiNy8tk+EgsYIUqKg==", "requires": { "ansi-escapes": "^4.2.1", "chalk": "^4.1.1", @@ -9524,7 +11433,19 @@ "string-width": "^4.1.0", "strip-ansi": "^6.0.0", "through": "^2.3.6", - "wrap-ansi": "^7.0.0" + "wrap-ansi": "^6.0.1" + }, + "dependencies": { + "wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + } } }, "is-arrayish": { @@ -9543,9 +11464,9 @@ "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==" }, "is-core-module": { - "version": "2.12.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.12.1.tgz", - "integrity": "sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg==", + "version": "2.13.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.0.tgz", + "integrity": "sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==", "requires": { "has": "^1.0.3" } @@ -9558,8 +11479,7 @@ "is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==" }, "is-fullwidth-code-point": { "version": "3.0.0", @@ -9575,7 +11495,6 @@ "version": "4.0.3", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, "requires": { "is-extglob": "^2.1.1" } @@ -9603,18 +11522,13 @@ "is-redirect": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-redirect/-/is-redirect-1.0.0.tgz", - "integrity": "sha1-HQPd7VO9jbDzDCbk+V02/HyH3CQ=" + "integrity": "sha512-cr/SlUEe5zOGmzvj9bUyC4LVvkNVAXu4GytXLNMr1pny+a65MpQ9IJzFHD5vi7FyJgb4qt27+eS3TuQnqB+RQw==" }, "is-stream": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==" }, - "is-unicode-supported": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", - "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==" - }, "is-wsl": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", @@ -9646,13 +11560,44 @@ } }, "istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", + "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", "requires": { "istanbul-lib-coverage": "^3.0.0", - "make-dir": "^3.0.0", + "make-dir": "^4.0.0", "supports-color": "^7.1.0" + }, + "dependencies": { + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "requires": { + "yallist": "^4.0.0" + } + }, + "make-dir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", + "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", + "requires": { + "semver": "^7.5.3" + } + }, + "semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "requires": { + "lru-cache": "^6.0.0" + } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + } } }, "istanbul-lib-source-maps": { @@ -9666,77 +11611,86 @@ } }, "istanbul-reports": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.5.tgz", - "integrity": "sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w==", + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.6.tgz", + "integrity": "sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg==", "requires": { "html-escaper": "^2.0.0", "istanbul-lib-report": "^3.0.0" } }, - "jest": { - "version": "29.6.1", - "resolved": "https://registry.npmjs.org/jest/-/jest-29.6.1.tgz", - "integrity": "sha512-Nirw5B4nn69rVUZtemCQhwxOBhm0nsp3hmtF4rzCeWD7BkjAXRIji7xWQfnTNbz9g0aVsBX6aZK3n+23LM6uDw==", + "jackspeak": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.3.tgz", + "integrity": "sha512-R2bUw+kVZFS/h1AZqBKrSgDmdmjApzgY0AlCPumopFiAlbUxE2gf+SCuBzQ0cP5hHmUmFYF5yw55T97Th5Kstg==", "requires": { - "@jest/core": "^29.6.1", - "@jest/types": "^29.6.1", + "@isaacs/cliui": "^8.0.2", + "@pkgjs/parseargs": "^0.11.0" + } + }, + "jest": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest/-/jest-29.7.0.tgz", + "integrity": "sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==", + "requires": { + "@jest/core": "^29.7.0", + "@jest/types": "^29.6.3", "import-local": "^3.0.2", - "jest-cli": "^29.6.1" + "jest-cli": "^29.7.0" } }, "jest-changed-files": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.5.0.tgz", - "integrity": "sha512-IFG34IUMUaNBIxjQXF/iu7g6EcdMrGRRxaUSw92I/2g2YC6vCdTltl4nHvt7Ci5nSJwXIkCu8Ka1DKF+X7Z1Ag==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.7.0.tgz", + "integrity": "sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==", "requires": { "execa": "^5.0.0", + "jest-util": "^29.7.0", "p-limit": "^3.1.0" } }, "jest-circus": { - "version": "29.6.1", - "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.6.1.tgz", - "integrity": "sha512-tPbYLEiBU4MYAL2XoZme/bgfUeotpDBd81lgHLCbDZZFaGmECk0b+/xejPFtmiBP87GgP/y4jplcRpbH+fgCzQ==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.7.0.tgz", + "integrity": "sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==", "requires": { - "@jest/environment": "^29.6.1", - "@jest/expect": "^29.6.1", - "@jest/test-result": "^29.6.1", - "@jest/types": "^29.6.1", + "@jest/environment": "^29.7.0", + "@jest/expect": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/types": "^29.6.3", "@types/node": "*", "chalk": "^4.0.0", "co": "^4.6.0", - "dedent": "^0.7.0", + "dedent": "^1.0.0", "is-generator-fn": "^2.0.0", - "jest-each": "^29.6.1", - "jest-matcher-utils": "^29.6.1", - "jest-message-util": "^29.6.1", - "jest-runtime": "^29.6.1", - "jest-snapshot": "^29.6.1", - "jest-util": "^29.6.1", + "jest-each": "^29.7.0", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-runtime": "^29.7.0", + "jest-snapshot": "^29.7.0", + "jest-util": "^29.7.0", "p-limit": "^3.1.0", - "pretty-format": "^29.6.1", + "pretty-format": "^29.7.0", "pure-rand": "^6.0.0", "slash": "^3.0.0", "stack-utils": "^2.0.3" } }, "jest-cli": { - "version": "29.6.1", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.6.1.tgz", - "integrity": "sha512-607dSgTA4ODIN6go9w6xY3EYkyPFGicx51a69H7yfvt7lN53xNswEVLovq+E77VsTRi5fWprLH0yl4DJgE8Ing==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.7.0.tgz", + "integrity": "sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==", "requires": { - "@jest/core": "^29.6.1", - "@jest/test-result": "^29.6.1", - "@jest/types": "^29.6.1", + "@jest/core": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/types": "^29.6.3", "chalk": "^4.0.0", + "create-jest": "^29.7.0", "exit": "^0.1.2", - "graceful-fs": "^4.2.9", "import-local": "^3.0.2", - "jest-config": "^29.6.1", - "jest-util": "^29.6.1", - "jest-validate": "^29.6.1", - "prompts": "^2.0.1", + "jest-config": "^29.7.0", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", "yargs": "^17.3.1" }, "dependencies": { @@ -9772,146 +11726,146 @@ } }, "jest-config": { - "version": "29.6.1", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.6.1.tgz", - "integrity": "sha512-XdjYV2fy2xYixUiV2Wc54t3Z4oxYPAELUzWnV6+mcbq0rh742X2p52pii5A3oeRzYjLnQxCsZmp0qpI6klE2cQ==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.7.0.tgz", + "integrity": "sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==", "requires": { "@babel/core": "^7.11.6", - "@jest/test-sequencer": "^29.6.1", - "@jest/types": "^29.6.1", - "babel-jest": "^29.6.1", + "@jest/test-sequencer": "^29.7.0", + "@jest/types": "^29.6.3", + "babel-jest": "^29.7.0", "chalk": "^4.0.0", "ci-info": "^3.2.0", "deepmerge": "^4.2.2", "glob": "^7.1.3", "graceful-fs": "^4.2.9", - "jest-circus": "^29.6.1", - "jest-environment-node": "^29.6.1", - "jest-get-type": "^29.4.3", - "jest-regex-util": "^29.4.3", - "jest-resolve": "^29.6.1", - "jest-runner": "^29.6.1", - "jest-util": "^29.6.1", - "jest-validate": "^29.6.1", + "jest-circus": "^29.7.0", + "jest-environment-node": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.7.0", + "jest-runner": "^29.7.0", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", "micromatch": "^4.0.4", "parse-json": "^5.2.0", - "pretty-format": "^29.6.1", + "pretty-format": "^29.7.0", "slash": "^3.0.0", "strip-json-comments": "^3.1.1" } }, "jest-diff": { - "version": "29.6.1", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.6.1.tgz", - "integrity": "sha512-FsNCvinvl8oVxpNLttNQX7FAq7vR+gMDGj90tiP7siWw1UdakWUGqrylpsYrpvj908IYckm5Y0Q7azNAozU1Kg==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.7.0.tgz", + "integrity": "sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==", "requires": { "chalk": "^4.0.0", - "diff-sequences": "^29.4.3", - "jest-get-type": "^29.4.3", - "pretty-format": "^29.6.1" + "diff-sequences": "^29.6.3", + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" } }, "jest-docblock": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.4.3.tgz", - "integrity": "sha512-fzdTftThczeSD9nZ3fzA/4KkHtnmllawWrXO69vtI+L9WjEIuXWs4AmyME7lN5hU7dB0sHhuPfcKofRsUb/2Fg==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.7.0.tgz", + "integrity": "sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==", "requires": { "detect-newline": "^3.0.0" } }, "jest-each": { - "version": "29.6.1", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.6.1.tgz", - "integrity": "sha512-n5eoj5eiTHpKQCAVcNTT7DRqeUmJ01hsAL0Q1SMiBHcBcvTKDELixQOGMCpqhbIuTcfC4kMfSnpmDqRgRJcLNQ==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.7.0.tgz", + "integrity": "sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==", "requires": { - "@jest/types": "^29.6.1", + "@jest/types": "^29.6.3", "chalk": "^4.0.0", - "jest-get-type": "^29.4.3", - "jest-util": "^29.6.1", - "pretty-format": "^29.6.1" + "jest-get-type": "^29.6.3", + "jest-util": "^29.7.0", + "pretty-format": "^29.7.0" } }, "jest-environment-node": { - "version": "29.6.1", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.6.1.tgz", - "integrity": "sha512-ZNIfAiE+foBog24W+2caIldl4Irh8Lx1PUhg/GZ0odM1d/h2qORAsejiFc7zb+SEmYPn1yDZzEDSU5PmDkmVLQ==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.7.0.tgz", + "integrity": "sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==", "requires": { - "@jest/environment": "^29.6.1", - "@jest/fake-timers": "^29.6.1", - "@jest/types": "^29.6.1", + "@jest/environment": "^29.7.0", + "@jest/fake-timers": "^29.7.0", + "@jest/types": "^29.6.3", "@types/node": "*", - "jest-mock": "^29.6.1", - "jest-util": "^29.6.1" + "jest-mock": "^29.7.0", + "jest-util": "^29.7.0" } }, "jest-get-type": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.4.3.tgz", - "integrity": "sha512-J5Xez4nRRMjk8emnTpWrlkyb9pfRQQanDrvWHhsR1+VUfbwxi30eVcZFlcdGInRibU4G5LwHXpI7IRHU0CY+gg==" + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", + "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==" }, "jest-haste-map": { - "version": "29.6.1", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.6.1.tgz", - "integrity": "sha512-0m7f9PZXxOCk1gRACiVgX85knUKPKLPg4oRCjLoqIm9brTHXaorMA0JpmtmVkQiT8nmXyIVoZd/nnH1cfC33ig==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.7.0.tgz", + "integrity": "sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==", "requires": { - "@jest/types": "^29.6.1", + "@jest/types": "^29.6.3", "@types/graceful-fs": "^4.1.3", "@types/node": "*", "anymatch": "^3.0.3", "fb-watchman": "^2.0.0", "fsevents": "^2.3.2", "graceful-fs": "^4.2.9", - "jest-regex-util": "^29.4.3", - "jest-util": "^29.6.1", - "jest-worker": "^29.6.1", + "jest-regex-util": "^29.6.3", + "jest-util": "^29.7.0", + "jest-worker": "^29.7.0", "micromatch": "^4.0.4", "walker": "^1.0.8" } }, "jest-leak-detector": { - "version": "29.6.1", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.6.1.tgz", - "integrity": "sha512-OrxMNyZirpOEwkF3UHnIkAiZbtkBWiye+hhBweCHkVbCgyEy71Mwbb5zgeTNYWJBi1qgDVfPC1IwO9dVEeTLwQ==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.7.0.tgz", + "integrity": "sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==", "requires": { - "jest-get-type": "^29.4.3", - "pretty-format": "^29.6.1" + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" } }, "jest-matcher-utils": { - "version": "29.6.1", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.6.1.tgz", - "integrity": "sha512-SLaztw9d2mfQQKHmJXKM0HCbl2PPVld/t9Xa6P9sgiExijviSp7TnZZpw2Fpt+OI3nwUO/slJbOfzfUMKKC5QA==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz", + "integrity": "sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==", "requires": { "chalk": "^4.0.0", - "jest-diff": "^29.6.1", - "jest-get-type": "^29.4.3", - "pretty-format": "^29.6.1" + "jest-diff": "^29.7.0", + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" } }, "jest-message-util": { - "version": "29.6.1", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.6.1.tgz", - "integrity": "sha512-KoAW2zAmNSd3Gk88uJ56qXUWbFk787QKmjjJVOjtGFmmGSZgDBrlIL4AfQw1xyMYPNVD7dNInfIbur9B2rd/wQ==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.7.0.tgz", + "integrity": "sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==", "requires": { "@babel/code-frame": "^7.12.13", - "@jest/types": "^29.6.1", + "@jest/types": "^29.6.3", "@types/stack-utils": "^2.0.0", "chalk": "^4.0.0", "graceful-fs": "^4.2.9", "micromatch": "^4.0.4", - "pretty-format": "^29.6.1", + "pretty-format": "^29.7.0", "slash": "^3.0.0", "stack-utils": "^2.0.3" } }, "jest-mock": { - "version": "29.6.1", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.6.1.tgz", - "integrity": "sha512-brovyV9HBkjXAEdRooaTQK42n8usKoSRR3gihzUpYeV/vwqgSoNfrksO7UfSACnPmxasO/8TmHM3w9Hp3G1dgw==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.7.0.tgz", + "integrity": "sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==", "requires": { - "@jest/types": "^29.6.1", + "@jest/types": "^29.6.3", "@types/node": "*", - "jest-util": "^29.6.1" + "jest-util": "^29.7.0" } }, "jest-pnp-resolver": { @@ -9921,117 +11875,116 @@ "requires": {} }, "jest-regex-util": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.4.3.tgz", - "integrity": "sha512-O4FglZaMmWXbGHSQInfXewIsd1LMn9p3ZXB/6r4FOkyhX2/iP/soMG98jGvk/A3HAN78+5VWcBGO0BJAPRh4kg==" + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz", + "integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==" }, "jest-resolve": { - "version": "29.6.1", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.6.1.tgz", - "integrity": "sha512-AeRkyS8g37UyJiP9w3mmI/VXU/q8l/IH52vj/cDAyScDcemRbSBhfX/NMYIGilQgSVwsjxrCHf3XJu4f+lxCMg==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.7.0.tgz", + "integrity": "sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==", "requires": { "chalk": "^4.0.0", "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.6.1", + "jest-haste-map": "^29.7.0", "jest-pnp-resolver": "^1.2.2", - "jest-util": "^29.6.1", - "jest-validate": "^29.6.1", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", "resolve": "^1.20.0", "resolve.exports": "^2.0.0", "slash": "^3.0.0" } }, "jest-resolve-dependencies": { - "version": "29.6.1", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.6.1.tgz", - "integrity": "sha512-BbFvxLXtcldaFOhNMXmHRWx1nXQO5LoXiKSGQcA1LxxirYceZT6ch8KTE1bK3X31TNG/JbkI7OkS/ABexVahiw==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.7.0.tgz", + "integrity": "sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==", "requires": { - "jest-regex-util": "^29.4.3", - "jest-snapshot": "^29.6.1" + "jest-regex-util": "^29.6.3", + "jest-snapshot": "^29.7.0" } }, "jest-runner": { - "version": "29.6.1", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.6.1.tgz", - "integrity": "sha512-tw0wb2Q9yhjAQ2w8rHRDxteryyIck7gIzQE4Reu3JuOBpGp96xWgF0nY8MDdejzrLCZKDcp8JlZrBN/EtkQvPQ==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.7.0.tgz", + "integrity": "sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==", "requires": { - "@jest/console": "^29.6.1", - "@jest/environment": "^29.6.1", - "@jest/test-result": "^29.6.1", - "@jest/transform": "^29.6.1", - "@jest/types": "^29.6.1", + "@jest/console": "^29.7.0", + "@jest/environment": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", "@types/node": "*", "chalk": "^4.0.0", "emittery": "^0.13.1", "graceful-fs": "^4.2.9", - "jest-docblock": "^29.4.3", - "jest-environment-node": "^29.6.1", - "jest-haste-map": "^29.6.1", - "jest-leak-detector": "^29.6.1", - "jest-message-util": "^29.6.1", - "jest-resolve": "^29.6.1", - "jest-runtime": "^29.6.1", - "jest-util": "^29.6.1", - "jest-watcher": "^29.6.1", - "jest-worker": "^29.6.1", + "jest-docblock": "^29.7.0", + "jest-environment-node": "^29.7.0", + "jest-haste-map": "^29.7.0", + "jest-leak-detector": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-resolve": "^29.7.0", + "jest-runtime": "^29.7.0", + "jest-util": "^29.7.0", + "jest-watcher": "^29.7.0", + "jest-worker": "^29.7.0", "p-limit": "^3.1.0", "source-map-support": "0.5.13" } }, "jest-runtime": { - "version": "29.6.1", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.6.1.tgz", - "integrity": "sha512-D6/AYOA+Lhs5e5il8+5pSLemjtJezUr+8zx+Sn8xlmOux3XOqx4d8l/2udBea8CRPqqrzhsKUsN/gBDE/IcaPQ==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.7.0.tgz", + "integrity": "sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==", "requires": { - "@jest/environment": "^29.6.1", - "@jest/fake-timers": "^29.6.1", - "@jest/globals": "^29.6.1", - "@jest/source-map": "^29.6.0", - "@jest/test-result": "^29.6.1", - "@jest/transform": "^29.6.1", - "@jest/types": "^29.6.1", + "@jest/environment": "^29.7.0", + "@jest/fake-timers": "^29.7.0", + "@jest/globals": "^29.7.0", + "@jest/source-map": "^29.6.3", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", "@types/node": "*", "chalk": "^4.0.0", "cjs-module-lexer": "^1.0.0", "collect-v8-coverage": "^1.0.0", "glob": "^7.1.3", "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.6.1", - "jest-message-util": "^29.6.1", - "jest-mock": "^29.6.1", - "jest-regex-util": "^29.4.3", - "jest-resolve": "^29.6.1", - "jest-snapshot": "^29.6.1", - "jest-util": "^29.6.1", + "jest-haste-map": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-mock": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.7.0", + "jest-snapshot": "^29.7.0", + "jest-util": "^29.7.0", "slash": "^3.0.0", "strip-bom": "^4.0.0" } }, "jest-snapshot": { - "version": "29.6.1", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.6.1.tgz", - "integrity": "sha512-G4UQE1QQ6OaCgfY+A0uR1W2AY0tGXUPQpoUClhWHq1Xdnx1H6JOrC2nH5lqnOEqaDgbHFgIwZ7bNq24HpB180A==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.7.0.tgz", + "integrity": "sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==", "requires": { "@babel/core": "^7.11.6", "@babel/generator": "^7.7.2", "@babel/plugin-syntax-jsx": "^7.7.2", "@babel/plugin-syntax-typescript": "^7.7.2", "@babel/types": "^7.3.3", - "@jest/expect-utils": "^29.6.1", - "@jest/transform": "^29.6.1", - "@jest/types": "^29.6.1", - "@types/prettier": "^2.1.5", + "@jest/expect-utils": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", "babel-preset-current-node-syntax": "^1.0.0", "chalk": "^4.0.0", - "expect": "^29.6.1", + "expect": "^29.7.0", "graceful-fs": "^4.2.9", - "jest-diff": "^29.6.1", - "jest-get-type": "^29.4.3", - "jest-matcher-utils": "^29.6.1", - "jest-message-util": "^29.6.1", - "jest-util": "^29.6.1", + "jest-diff": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", "natural-compare": "^1.4.0", - "pretty-format": "^29.6.1", + "pretty-format": "^29.7.0", "semver": "^7.5.3" }, "dependencies": { @@ -10059,11 +12012,11 @@ } }, "jest-util": { - "version": "29.6.1", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.6.1.tgz", - "integrity": "sha512-NRFCcjc+/uO3ijUVyNOQJluf8PtGCe/W6cix36+M3cTFgiYqFOOW5MgN4JOOcvbUhcKTYVd1CvHz/LWi8d16Mg==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", + "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", "requires": { - "@jest/types": "^29.6.1", + "@jest/types": "^29.6.3", "@types/node": "*", "chalk": "^4.0.0", "ci-info": "^3.2.0", @@ -10072,16 +12025,16 @@ } }, "jest-validate": { - "version": "29.6.1", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.6.1.tgz", - "integrity": "sha512-r3Ds69/0KCN4vx4sYAbGL1EVpZ7MSS0vLmd3gV78O+NAx3PDQQukRU5hNHPXlyqCgFY8XUk7EuTMLugh0KzahA==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.7.0.tgz", + "integrity": "sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==", "requires": { - "@jest/types": "^29.6.1", + "@jest/types": "^29.6.3", "camelcase": "^6.2.0", "chalk": "^4.0.0", - "jest-get-type": "^29.4.3", + "jest-get-type": "^29.6.3", "leven": "^3.1.0", - "pretty-format": "^29.6.1" + "pretty-format": "^29.7.0" }, "dependencies": { "camelcase": { @@ -10092,27 +12045,27 @@ } }, "jest-watcher": { - "version": "29.6.1", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.6.1.tgz", - "integrity": "sha512-d4wpjWTS7HEZPaaj8m36QiaP856JthRZkrgcIY/7ISoUWPIillrXM23WPboZVLbiwZBt4/qn2Jke84Sla6JhFA==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.7.0.tgz", + "integrity": "sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==", "requires": { - "@jest/test-result": "^29.6.1", - "@jest/types": "^29.6.1", + "@jest/test-result": "^29.7.0", + "@jest/types": "^29.6.3", "@types/node": "*", "ansi-escapes": "^4.2.1", "chalk": "^4.0.0", "emittery": "^0.13.1", - "jest-util": "^29.6.1", + "jest-util": "^29.7.0", "string-length": "^4.0.1" } }, "jest-worker": { - "version": "29.6.1", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.6.1.tgz", - "integrity": "sha512-U+Wrbca7S8ZAxAe9L6nb6g8kPdia5hj32Puu5iOqBCMTMWFHXuK6dOV2IFrpedbTV8fjMFLdWNttQTBL6u2MRA==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", + "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", "requires": { "@types/node": "*", - "jest-util": "^29.6.1", + "jest-util": "^29.7.0", "merge-stream": "^2.0.0", "supports-color": "^8.0.0" }, @@ -10164,14 +12117,17 @@ "json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" }, "json-stable-stringify-without-jsonify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", - "dev": true + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==" + }, + "json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==" }, "jsonfile": { "version": "6.1.0", @@ -10215,7 +12171,6 @@ "version": "0.4.1", "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "dev": true, "requires": { "prelude-ls": "^1.2.1", "type-check": "~0.4.0" @@ -10297,11 +12252,15 @@ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" }, + "lodash.memoize": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", + "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==" + }, "lodash.merge": { "version": "4.6.2", "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==" }, "log-symbols": { "version": "4.1.0", @@ -10310,6 +12269,13 @@ "requires": { "chalk": "^4.1.0", "is-unicode-supported": "^0.1.0" + }, + "dependencies": { + "is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==" + } } }, "logform": { @@ -10350,6 +12316,11 @@ "semver": "^6.0.0" } }, + "make-error": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==" + }, "makeerror": { "version": "1.0.12", "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", @@ -10371,6 +12342,11 @@ "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" }, + "merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==" + }, "micromatch": { "version": "4.0.5", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", @@ -10475,6 +12451,11 @@ "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=" }, + "natural-orderby": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/natural-orderby/-/natural-orderby-3.0.2.tgz", + "integrity": "sha512-x7ZdOwBxZCEm9MM7+eQCjkrNLrW3rkBKNHVr78zbtqnMGVNlnDi6C/eUEYgxHNrcbu0ymvjzcwIL/6H1iHri9g==" + }, "nedb-promises": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/nedb-promises/-/nedb-promises-6.0.3.tgz", @@ -10587,6 +12568,11 @@ "boolbase": "^1.0.0" } }, + "numeral": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/numeral/-/numeral-2.0.6.tgz", + "integrity": "sha512-qaKRmtYPZ5qdw4jWJD6bxEf1FJEqllJrwxCLIm0sQU/A7v2/czigzOb+C2uSiFsa9lBUzeH7M1oK+Q+OLxL3kA==" + }, "object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", @@ -10597,6 +12583,11 @@ "resolved": "https://registry.npmjs.org/object-code/-/object-code-1.2.2.tgz", "integrity": "sha512-ZSbEQdei4ElzuDM4BmazKSwINacocBf3/8rte25aNqXzvT/8dSaNVY9egsjAaBL/UhW55JNxAvXOKPIsL2MwWQ==" }, + "object-treeify": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/object-treeify/-/object-treeify-2.1.1.tgz", + "integrity": "sha512-ofXhazOvXTYWbbibExMiS+asaTbYG/ZWopVroXFFOdjmc8ehXMq9R2VUaTx/C3CnZkQbT52wAZT4DrBLK/nQfw==" + }, "on-headers": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", @@ -10630,7 +12621,6 @@ "version": "0.9.3", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", - "dev": true, "requires": { "@aashutoshrathi/word-wrap": "^1.2.3", "deep-is": "^0.1.3", @@ -10654,12 +12644,19 @@ "log-symbols": "^4.1.0", "strip-ansi": "^6.0.0", "wcwidth": "^1.0.1" + }, + "dependencies": { + "is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==" + } } }, "os-tmpdir": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=" + "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==" }, "p-cancelable": { "version": "2.1.1", @@ -10701,7 +12698,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dev": true, "requires": { "callsites": "^3.0.0" } @@ -10766,11 +12762,32 @@ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" }, + "path-scurry": { + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.1.tgz", + "integrity": "sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==", + "requires": { + "lru-cache": "^9.1.1 || ^10.0.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "dependencies": { + "lru-cache": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.0.1.tgz", + "integrity": "sha512-IJ4uwUTi2qCccrioU6g9g/5rvvVl13bsdczUUcqbciD9iLr095yj8DQKdObriEvuNSx325N1rV1O0sJFszx75g==" + } + } + }, "path-to-regexp": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-2.2.1.tgz", "integrity": "sha512-gu9bD6Ta5bwGrrU8muHzVOBFFREpp2iRkVfhBJahwJ6p6Xw20SjT0MxLnwkjOibQmGSYhiUnf2FLe7k+jcFmGQ==" }, + "path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==" + }, "pdf-parse": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/pdf-parse/-/pdf-parse-1.1.1.tgz", @@ -10875,15 +12892,14 @@ "prelude-ls": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "dev": true + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==" }, "pretty-format": { - "version": "29.6.1", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.6.1.tgz", - "integrity": "sha512-7jRj+yXO0W7e4/tSJKoR7HRIHLPPjtNaUGG2xxKQnGvPNRkgWcQ0AZX6P4KBRJN4FcTBWb3sa7DVUJmocYuoog==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", "requires": { - "@jest/schemas": "^29.6.0", + "@jest/schemas": "^29.6.3", "ansi-styles": "^5.0.0", "react-is": "^18.0.0" }, @@ -10904,6 +12920,11 @@ "sisteransi": "^1.0.5" } }, + "proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" + }, "psl": { "version": "1.8.0", "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", @@ -10924,9 +12945,9 @@ "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" }, "pure-rand": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.0.2.tgz", - "integrity": "sha512-6Yg0ekpKICSjPswYOuC5sku/TSWaRYlA0qsXqJgM/d/4pLPHPuTxK7Nbf7jFKzAeedUhR8C7K9Uv63FBsSo8xQ==" + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.0.4.tgz", + "integrity": "sha512-LA0Y9kxMYv47GIPJy6MI84fqTd2HmYZI83W/kM/SkKfDlajnZYfmXFTxkbY+xSBPkLJxltMa9hIkmdc29eguMA==" }, "q": { "version": "1.5.1", @@ -10938,6 +12959,11 @@ "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==" }, + "queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==" + }, "quick-lru": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", @@ -10984,8 +13010,7 @@ "regexpp": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", - "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", - "dev": true + "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==" }, "registry-auth-token": { "version": "3.3.2", @@ -11020,11 +13045,11 @@ "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==" }, "resolve": { - "version": "1.22.2", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.2.tgz", - "integrity": "sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==", + "version": "1.22.6", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.6.tgz", + "integrity": "sha512-njhxM7mV12JfufShqGy3Rz8j11RPdLy4xi15UurGJeoHLfJpVXKdh3ueuOqbYUcDZnffr6X739JBo5LzyahEsw==", "requires": { - "is-core-module": "^2.11.0", + "is-core-module": "^2.13.0", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" } @@ -11069,6 +13094,11 @@ "signal-exit": "^3.0.2" } }, + "reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==" + }, "rimraf": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", @@ -11082,10 +13112,18 @@ "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==" }, + "run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "requires": { + "queue-microtask": "^1.2.2" + } + }, "rxjs": { - "version": "7.5.5", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.5.5.tgz", - "integrity": "sha512-sy+H0pQofO95VDmFLzyaw9xNJU4KTRSwQIGM6+iG3SypAtCiLDzpeG8sJrNCWn2Up9km+KhkvTdbkrdy+yzZdw==", + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", + "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", "requires": { "tslib": "^2.1.0" } @@ -11376,6 +13414,16 @@ "strip-ansi": "^6.0.1" } }, + "string-width-cjs": { + "version": "npm:string-width@4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, "strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", @@ -11384,6 +13432,14 @@ "ansi-regex": "^5.0.1" } }, + "strip-ansi-cjs": { + "version": "npm:strip-ansi@6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "requires": { + "ansi-regex": "^5.0.1" + } + }, "strip-bom": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", @@ -11467,13 +13523,12 @@ "text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", - "dev": true + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==" }, "through": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=" + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==" }, "tmp": { "version": "0.0.33", @@ -11532,16 +13587,91 @@ "resolved": "https://registry.npmjs.org/triple-beam/-/triple-beam-1.3.0.tgz", "integrity": "sha512-XrHUvV5HpdLmIj4uVMxHggLbFSZYIn7HEWsqePZcI50pco+MPqJ50wMGY794X7AOOhxOBAjbkqfAbEe/QMp2Lw==" }, + "ts-api-utils": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.0.3.tgz", + "integrity": "sha512-wNMeqtMz5NtwpT/UZGY5alT+VoKdSsOOP/kqHFcUW1P/VRhH2wJ48+DN2WwUliNbQ976ETwDL0Ifd2VVvgonvg==", + "requires": {} + }, + "ts-jest": { + "version": "29.1.1", + "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.1.1.tgz", + "integrity": "sha512-D6xjnnbP17cC85nliwGiL+tpoKN0StpgE0TeOjXQTU6MVCfsB4v7aW05CgQ/1OywGb0x/oy9hHFnN+sczTiRaA==", + "requires": { + "bs-logger": "0.x", + "fast-json-stable-stringify": "2.x", + "jest-util": "^29.0.0", + "json5": "^2.2.3", + "lodash.memoize": "4.x", + "make-error": "1.x", + "semver": "^7.5.3", + "yargs-parser": "^21.0.1" + }, + "dependencies": { + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "requires": { + "yallist": "^4.0.0" + } + }, + "semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "requires": { + "lru-cache": "^6.0.0" + } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + }, + "yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==" + } + } + }, + "ts-node": { + "version": "10.9.1", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz", + "integrity": "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==", + "requires": { + "@cspotcode/source-map-support": "^0.8.0", + "@tsconfig/node10": "^1.0.7", + "@tsconfig/node12": "^1.0.7", + "@tsconfig/node14": "^1.0.0", + "@tsconfig/node16": "^1.0.2", + "acorn": "^8.4.1", + "acorn-walk": "^8.1.1", + "arg": "^4.1.0", + "create-require": "^1.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "v8-compile-cache-lib": "^3.0.1", + "yn": "3.1.1" + }, + "dependencies": { + "arg": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==" + } + } + }, "tslib": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", - "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==" + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" }, "type-check": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "dev": true, "requires": { "prelude-ls": "^1.2.1" } @@ -11556,6 +13686,12 @@ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==" }, + "typescript": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.2.2.tgz", + "integrity": "sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==", + "peer": true + }, "universal-user-agent": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-6.0.0.tgz", @@ -11622,8 +13758,12 @@ "v8-compile-cache": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", - "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", - "dev": true + "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==" + }, + "v8-compile-cache-lib": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", + "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==" }, "v8-to-istanbul": { "version": "9.1.0", @@ -11658,7 +13798,7 @@ "wcwidth": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", - "integrity": "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=", + "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", "requires": { "defaults": "^1.0.3" } @@ -11766,6 +13906,16 @@ "strip-ansi": "^6.0.0" } }, + "wrap-ansi-cjs": { + "version": "npm:wrap-ansi@7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + }, "wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", @@ -11817,6 +13967,11 @@ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==" }, + "yn": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==" + }, "yocto-queue": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", diff --git a/yarn.lock b/yarn.lock index c36dc981..03faa80b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -32,7 +32,7 @@ resolved "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.22.6.tgz" integrity sha512-29tfsWTq2Ftu7MXmimyC0C5FDZv5DYxOZkh3XD3+QW4V/BYuv/LyEsjj3c0hqedEaDt6DBfDvexMKU8YevdqFg== -"@babel/core@^7.0.0", "@babel/core@^7.0.0-0", "@babel/core@^7.11.6", "@babel/core@^7.12.3", "@babel/core@^7.8.0": +"@babel/core@^7.0.0", "@babel/core@^7.0.0-0", "@babel/core@^7.11.6", "@babel/core@^7.12.3", "@babel/core@^7.8.0", "@babel/core@>=7.0.0-beta.0 <8": version "7.22.8" resolved "https://registry.npmjs.org/@babel/core/-/core-7.22.8.tgz" integrity sha512-75+KxFB4CZqYRXjx4NlR4J7yGvKumBuZTmV4NV6v09dVXXkuYVYLT68N6HCzLvfJ+fWCxQsntNzKwwIXL4bHnw== @@ -314,6 +314,13 @@ resolved "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz" integrity sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ== +"@cspotcode/source-map-support@^0.8.0": + version "0.8.1" + resolved "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz" + integrity sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw== + dependencies: + "@jridgewell/trace-mapping" "0.3.9" + "@dabh/diagnostics@^2.0.2": version "2.0.3" resolved "https://registry.npmjs.org/@dabh/diagnostics/-/diagnostics-2.0.3.tgz" @@ -323,6 +330,18 @@ enabled "2.0.x" kuler "^2.0.0" +"@eslint-community/eslint-utils@^4.4.0": + version "4.4.0" + resolved "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz" + integrity sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA== + dependencies: + eslint-visitor-keys "^3.3.0" + +"@eslint-community/regexpp@^4.5.1": + version "4.8.2" + resolved "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.8.2.tgz" + integrity sha512-0MGxAVt1m/ZK+LTJp/j0qF7Hz97D9O/FH9Ms3ltnyIdDD57cbb1ACIQTkbHvNXtWDv5TPq7w5Kq56+cNukbo7g== + "@eslint/eslintrc@^1.3.0": version "1.3.0" resolved "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.0.tgz" @@ -338,6 +357,24 @@ minimatch "^3.1.2" strip-json-comments "^3.1.1" +"@freearhey/core@^0.2.1": + version "0.2.1" + resolved "https://registry.npmjs.org/@freearhey/core/-/core-0.2.1.tgz" + integrity sha512-kEdIxZClykKhGpgyCSlkwuVuSCCAWr3J5YvOUMJQDPgVAYvT5VbD8MYKPm+OwNi9T4HFmF6qqY90qwKJPoOXCA== + dependencies: + "@types/fs-extra" "^11.0.2" + "@types/lodash" "^4.14.198" + "@types/luxon" "^3.3.2" + fs-extra "^11.1.1" + glob "^10.3.4" + lodash "^4.17.21" + luxon "^3.4.3" + natural-orderby "^3.0.2" + node-gzip "^1.1.2" + normalize-url "^6.1.0" + object-treeify "^2.1.1" + signale "^1.4.0" + "@humanwhocodes/config-array@^0.9.2": version "0.9.5" resolved "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.5.tgz" @@ -352,6 +389,18 @@ resolved "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz" integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== +"@isaacs/cliui@^8.0.2": + version "8.0.2" + resolved "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz" + integrity sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA== + dependencies: + string-width "^5.1.2" + string-width-cjs "npm:string-width@^4.2.0" + strip-ansi "^7.0.1" + strip-ansi-cjs "npm:strip-ansi@^6.0.1" + wrap-ansi "^8.1.0" + wrap-ansi-cjs "npm:wrap-ansi@^7.0.0" + "@istanbuljs/load-nyc-config@^1.0.0": version "1.1.0" resolved "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz" @@ -368,109 +417,109 @@ resolved "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz" integrity sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA== -"@jest/console@^29.6.1": - version "29.6.1" - resolved "https://registry.npmjs.org/@jest/console/-/console-29.6.1.tgz" - integrity sha512-Aj772AYgwTSr5w8qnyoJ0eDYvN6bMsH3ORH1ivMotrInHLKdUz6BDlaEXHdM6kODaBIkNIyQGzsMvRdOv7VG7Q== +"@jest/console@^29.7.0": + version "29.7.0" + resolved "https://registry.npmjs.org/@jest/console/-/console-29.7.0.tgz" + integrity sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg== dependencies: - "@jest/types" "^29.6.1" + "@jest/types" "^29.6.3" "@types/node" "*" chalk "^4.0.0" - jest-message-util "^29.6.1" - jest-util "^29.6.1" + jest-message-util "^29.7.0" + jest-util "^29.7.0" slash "^3.0.0" -"@jest/core@^29.6.1": - version "29.6.1" - resolved "https://registry.npmjs.org/@jest/core/-/core-29.6.1.tgz" - integrity sha512-CcowHypRSm5oYQ1obz1wfvkjZZ2qoQlrKKvlfPwh5jUXVU12TWr2qMeH8chLMuTFzHh5a1g2yaqlqDICbr+ukQ== +"@jest/core@^29.7.0": + version "29.7.0" + resolved "https://registry.npmjs.org/@jest/core/-/core-29.7.0.tgz" + integrity sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg== dependencies: - "@jest/console" "^29.6.1" - "@jest/reporters" "^29.6.1" - "@jest/test-result" "^29.6.1" - "@jest/transform" "^29.6.1" - "@jest/types" "^29.6.1" + "@jest/console" "^29.7.0" + "@jest/reporters" "^29.7.0" + "@jest/test-result" "^29.7.0" + "@jest/transform" "^29.7.0" + "@jest/types" "^29.6.3" "@types/node" "*" ansi-escapes "^4.2.1" chalk "^4.0.0" ci-info "^3.2.0" exit "^0.1.2" graceful-fs "^4.2.9" - jest-changed-files "^29.5.0" - jest-config "^29.6.1" - jest-haste-map "^29.6.1" - jest-message-util "^29.6.1" - jest-regex-util "^29.4.3" - jest-resolve "^29.6.1" - jest-resolve-dependencies "^29.6.1" - jest-runner "^29.6.1" - jest-runtime "^29.6.1" - jest-snapshot "^29.6.1" - jest-util "^29.6.1" - jest-validate "^29.6.1" - jest-watcher "^29.6.1" + jest-changed-files "^29.7.0" + jest-config "^29.7.0" + jest-haste-map "^29.7.0" + jest-message-util "^29.7.0" + jest-regex-util "^29.6.3" + jest-resolve "^29.7.0" + jest-resolve-dependencies "^29.7.0" + jest-runner "^29.7.0" + jest-runtime "^29.7.0" + jest-snapshot "^29.7.0" + jest-util "^29.7.0" + jest-validate "^29.7.0" + jest-watcher "^29.7.0" micromatch "^4.0.4" - pretty-format "^29.6.1" + pretty-format "^29.7.0" slash "^3.0.0" strip-ansi "^6.0.0" -"@jest/environment@^29.6.1": - version "29.6.1" - resolved "https://registry.npmjs.org/@jest/environment/-/environment-29.6.1.tgz" - integrity sha512-RMMXx4ws+Gbvw3DfLSuo2cfQlK7IwGbpuEWXCqyYDcqYTI+9Ju3a5hDnXaxjNsa6uKh9PQF2v+qg+RLe63tz5A== +"@jest/environment@^29.7.0": + version "29.7.0" + resolved "https://registry.npmjs.org/@jest/environment/-/environment-29.7.0.tgz" + integrity sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw== dependencies: - "@jest/fake-timers" "^29.6.1" - "@jest/types" "^29.6.1" + "@jest/fake-timers" "^29.7.0" + "@jest/types" "^29.6.3" "@types/node" "*" - jest-mock "^29.6.1" + jest-mock "^29.7.0" -"@jest/expect-utils@^29.6.1": - version "29.6.1" - resolved "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.6.1.tgz" - integrity sha512-o319vIf5pEMx0LmzSxxkYYxo4wrRLKHq9dP1yJU7FoPTB0LfAKSz8SWD6D/6U3v/O52t9cF5t+MeJiRsfk7zMw== +"@jest/expect-utils@^29.7.0": + version "29.7.0" + resolved "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.7.0.tgz" + integrity sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA== dependencies: - jest-get-type "^29.4.3" + jest-get-type "^29.6.3" -"@jest/expect@^29.6.1": - version "29.6.1" - resolved "https://registry.npmjs.org/@jest/expect/-/expect-29.6.1.tgz" - integrity sha512-N5xlPrAYaRNyFgVf2s9Uyyvr795jnB6rObuPx4QFvNJz8aAjpZUDfO4bh5G/xuplMID8PrnuF1+SfSyDxhsgYg== +"@jest/expect@^29.7.0": + version "29.7.0" + resolved "https://registry.npmjs.org/@jest/expect/-/expect-29.7.0.tgz" + integrity sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ== dependencies: - expect "^29.6.1" - jest-snapshot "^29.6.1" + expect "^29.7.0" + jest-snapshot "^29.7.0" -"@jest/fake-timers@^29.6.1": - version "29.6.1" - resolved "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.6.1.tgz" - integrity sha512-RdgHgbXyosCDMVYmj7lLpUwXA4c69vcNzhrt69dJJdf8azUrpRh3ckFCaTPNjsEeRi27Cig0oKDGxy5j7hOgHg== +"@jest/fake-timers@^29.7.0": + version "29.7.0" + resolved "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.7.0.tgz" + integrity sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ== dependencies: - "@jest/types" "^29.6.1" + "@jest/types" "^29.6.3" "@sinonjs/fake-timers" "^10.0.2" "@types/node" "*" - jest-message-util "^29.6.1" - jest-mock "^29.6.1" - jest-util "^29.6.1" + jest-message-util "^29.7.0" + jest-mock "^29.7.0" + jest-util "^29.7.0" -"@jest/globals@^29.6.1": - version "29.6.1" - resolved "https://registry.npmjs.org/@jest/globals/-/globals-29.6.1.tgz" - integrity sha512-2VjpaGy78JY9n9370H8zGRCFbYVWwjY6RdDMhoJHa1sYfwe6XM/azGN0SjY8kk7BOZApIejQ1BFPyH7FPG0w3A== +"@jest/globals@^29.7.0": + version "29.7.0" + resolved "https://registry.npmjs.org/@jest/globals/-/globals-29.7.0.tgz" + integrity sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ== dependencies: - "@jest/environment" "^29.6.1" - "@jest/expect" "^29.6.1" - "@jest/types" "^29.6.1" - jest-mock "^29.6.1" + "@jest/environment" "^29.7.0" + "@jest/expect" "^29.7.0" + "@jest/types" "^29.6.3" + jest-mock "^29.7.0" -"@jest/reporters@^29.6.1": - version "29.6.1" - resolved "https://registry.npmjs.org/@jest/reporters/-/reporters-29.6.1.tgz" - integrity sha512-9zuaI9QKr9JnoZtFQlw4GREQbxgmNYXU6QuWtmuODvk5nvPUeBYapVR/VYMyi2WSx3jXTLJTJji8rN6+Cm4+FA== +"@jest/reporters@^29.7.0": + version "29.7.0" + resolved "https://registry.npmjs.org/@jest/reporters/-/reporters-29.7.0.tgz" + integrity sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg== dependencies: "@bcoe/v8-coverage" "^0.2.3" - "@jest/console" "^29.6.1" - "@jest/test-result" "^29.6.1" - "@jest/transform" "^29.6.1" - "@jest/types" "^29.6.1" + "@jest/console" "^29.7.0" + "@jest/test-result" "^29.7.0" + "@jest/transform" "^29.7.0" + "@jest/types" "^29.6.3" "@jridgewell/trace-mapping" "^0.3.18" "@types/node" "*" chalk "^4.0.0" @@ -479,81 +528,81 @@ glob "^7.1.3" graceful-fs "^4.2.9" istanbul-lib-coverage "^3.0.0" - istanbul-lib-instrument "^5.1.0" + istanbul-lib-instrument "^6.0.0" istanbul-lib-report "^3.0.0" istanbul-lib-source-maps "^4.0.0" istanbul-reports "^3.1.3" - jest-message-util "^29.6.1" - jest-util "^29.6.1" - jest-worker "^29.6.1" + jest-message-util "^29.7.0" + jest-util "^29.7.0" + jest-worker "^29.7.0" slash "^3.0.0" string-length "^4.0.1" strip-ansi "^6.0.0" v8-to-istanbul "^9.0.1" -"@jest/schemas@^29.6.0": - version "29.6.0" - resolved "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.0.tgz" - integrity sha512-rxLjXyJBTL4LQeJW3aKo0M/+GkCOXsO+8i9Iu7eDb6KwtP65ayoDsitrdPBtujxQ88k4wI2FNYfa6TOGwSn6cQ== +"@jest/schemas@^29.6.3": + version "29.6.3" + resolved "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz" + integrity sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA== dependencies: "@sinclair/typebox" "^0.27.8" -"@jest/source-map@^29.6.0": - version "29.6.0" - resolved "https://registry.npmjs.org/@jest/source-map/-/source-map-29.6.0.tgz" - integrity sha512-oA+I2SHHQGxDCZpbrsCQSoMLb3Bz547JnM+jUr9qEbuw0vQlWZfpPS7CO9J7XiwKicEz9OFn/IYoLkkiUD7bzA== +"@jest/source-map@^29.6.3": + version "29.6.3" + resolved "https://registry.npmjs.org/@jest/source-map/-/source-map-29.6.3.tgz" + integrity sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw== dependencies: "@jridgewell/trace-mapping" "^0.3.18" callsites "^3.0.0" graceful-fs "^4.2.9" -"@jest/test-result@^29.6.1": - version "29.6.1" - resolved "https://registry.npmjs.org/@jest/test-result/-/test-result-29.6.1.tgz" - integrity sha512-Ynr13ZRcpX6INak0TPUukU8GWRfm/vAytE3JbJNGAvINySWYdfE7dGZMbk36oVuK4CigpbhMn8eg1dixZ7ZJOw== +"@jest/test-result@^29.7.0": + version "29.7.0" + resolved "https://registry.npmjs.org/@jest/test-result/-/test-result-29.7.0.tgz" + integrity sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA== dependencies: - "@jest/console" "^29.6.1" - "@jest/types" "^29.6.1" + "@jest/console" "^29.7.0" + "@jest/types" "^29.6.3" "@types/istanbul-lib-coverage" "^2.0.0" collect-v8-coverage "^1.0.0" -"@jest/test-sequencer@^29.6.1": - version "29.6.1" - resolved "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.6.1.tgz" - integrity sha512-oBkC36PCDf/wb6dWeQIhaviU0l5u6VCsXa119yqdUosYAt7/FbQU2M2UoziO3igj/HBDEgp57ONQ3fm0v9uyyg== +"@jest/test-sequencer@^29.7.0": + version "29.7.0" + resolved "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.7.0.tgz" + integrity sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw== dependencies: - "@jest/test-result" "^29.6.1" + "@jest/test-result" "^29.7.0" graceful-fs "^4.2.9" - jest-haste-map "^29.6.1" + jest-haste-map "^29.7.0" slash "^3.0.0" -"@jest/transform@^29.6.1": - version "29.6.1" - resolved "https://registry.npmjs.org/@jest/transform/-/transform-29.6.1.tgz" - integrity sha512-URnTneIU3ZjRSaf906cvf6Hpox3hIeJXRnz3VDSw5/X93gR8ycdfSIEy19FlVx8NFmpN7fe3Gb1xF+NjXaQLWg== +"@jest/transform@^29.7.0": + version "29.7.0" + resolved "https://registry.npmjs.org/@jest/transform/-/transform-29.7.0.tgz" + integrity sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw== dependencies: "@babel/core" "^7.11.6" - "@jest/types" "^29.6.1" + "@jest/types" "^29.6.3" "@jridgewell/trace-mapping" "^0.3.18" babel-plugin-istanbul "^6.1.1" chalk "^4.0.0" convert-source-map "^2.0.0" fast-json-stable-stringify "^2.1.0" graceful-fs "^4.2.9" - jest-haste-map "^29.6.1" - jest-regex-util "^29.4.3" - jest-util "^29.6.1" + jest-haste-map "^29.7.0" + jest-regex-util "^29.6.3" + jest-util "^29.7.0" micromatch "^4.0.4" pirates "^4.0.4" slash "^3.0.0" write-file-atomic "^4.0.2" -"@jest/types@^29.6.1": - version "29.6.1" - resolved "https://registry.npmjs.org/@jest/types/-/types-29.6.1.tgz" - integrity sha512-tPKQNMPuXgvdOn2/Lg9HNfUvjYVGolt04Hp03f5hAk878uwOLikN+JzeLY0HcVgKgFl9Hs3EIqpu3WX27XNhnw== +"@jest/types@^29.0.0", "@jest/types@^29.6.3": + version "29.6.3" + resolved "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz" + integrity sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw== dependencies: - "@jest/schemas" "^29.6.0" + "@jest/schemas" "^29.6.3" "@types/istanbul-lib-coverage" "^2.0.0" "@types/istanbul-reports" "^3.0.0" "@types/node" "*" @@ -569,7 +618,7 @@ "@jridgewell/sourcemap-codec" "^1.4.10" "@jridgewell/trace-mapping" "^0.3.9" -"@jridgewell/resolve-uri@3.1.0": +"@jridgewell/resolve-uri@^3.0.3", "@jridgewell/resolve-uri@3.1.0": version "3.1.0" resolved "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz" integrity sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w== @@ -597,6 +646,14 @@ "@jridgewell/resolve-uri" "3.1.0" "@jridgewell/sourcemap-codec" "1.4.14" +"@jridgewell/trace-mapping@0.3.9": + version "0.3.9" + resolved "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz" + integrity sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ== + dependencies: + "@jridgewell/resolve-uri" "^3.0.3" + "@jridgewell/sourcemap-codec" "^1.4.10" + "@mapbox/node-pre-gyp@^1.0.10": version "1.0.11" resolved "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.11.tgz" @@ -617,6 +674,27 @@ resolved "https://registry.npmjs.org/@nicolo-ribaudo/semver-v6/-/semver-v6-6.3.3.tgz" integrity sha512-3Yc1fUTs69MG/uZbJlLSI3JISMn2UV2rg+1D/vROUqZyh3l6iYHCs7GMp+M40ZD7yOdDbYjJcU1oTJhrc+dGKg== +"@nodelib/fs.scandir@2.1.5": + version "2.1.5" + resolved "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz" + integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== + dependencies: + "@nodelib/fs.stat" "2.0.5" + run-parallel "^1.1.9" + +"@nodelib/fs.stat@^2.0.2", "@nodelib/fs.stat@2.0.5": + version "2.0.5" + resolved "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz" + integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== + +"@nodelib/fs.walk@^1.2.3": + version "1.2.8" + resolved "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz" + integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== + dependencies: + "@nodelib/fs.scandir" "2.1.5" + fastq "^1.6.0" + "@octokit/auth-token@^3.0.0": version "3.0.2" resolved "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-3.0.2.tgz" @@ -688,6 +766,11 @@ dependencies: "@octokit/openapi-types" "^14.0.0" +"@pkgjs/parseargs@^0.11.0": + version "0.11.0" + resolved "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz" + integrity sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg== + "@seald-io/binary-search-tree@^1.0.2": version "1.0.2" resolved "https://registry.npmjs.org/@seald-io/binary-search-tree/-/binary-search-tree-1.0.2.tgz" @@ -733,10 +816,30 @@ dependencies: defer-to-connect "^2.0.0" +"@tsconfig/node10@^1.0.7": + version "1.0.9" + resolved "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz" + integrity sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA== + +"@tsconfig/node12@^1.0.7": + version "1.0.11" + resolved "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz" + integrity sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag== + +"@tsconfig/node14@^1.0.0": + version "1.0.3" + resolved "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz" + integrity sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow== + +"@tsconfig/node16@^1.0.2": + version "1.0.4" + resolved "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz" + integrity sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA== + "@types/babel__core@^7.1.14": - version "7.20.1" - resolved "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.1.tgz" - integrity sha512-aACu/U/omhdk15O4Nfb+fHgH/z3QsfQzpnvRZhYhThms83ZnAOZz7zZAWO7mn2yyNQaA4xTO8GLK3uqFU4bYYw== + version "7.20.2" + resolved "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.2.tgz" + integrity sha512-pNpr1T1xLUc2l3xJKuPtsEky3ybxN3m4fJkknfIpTCTfIZCDW57oAg+EfCgIIp2rvCe0Wn++/FfodDS4YXxBwA== dependencies: "@babel/parser" "^7.20.7" "@babel/types" "^7.20.7" @@ -745,24 +848,24 @@ "@types/babel__traverse" "*" "@types/babel__generator@*": - version "7.6.4" - resolved "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.4.tgz" - integrity sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg== + version "7.6.5" + resolved "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.5.tgz" + integrity sha512-h9yIuWbJKdOPLJTbmSpPzkF67e659PbQDba7ifWm5BJ8xTv+sDmS7rFmywkWOvXedGTivCdeGSIIX8WLcRTz8w== dependencies: "@babel/types" "^7.0.0" "@types/babel__template@*": - version "7.4.1" - resolved "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.1.tgz" - integrity sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g== + version "7.4.2" + resolved "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.2.tgz" + integrity sha512-/AVzPICMhMOMYoSx9MoKpGDKdBRsIXMNByh1PXSZoa+v6ZoLa8xxtsT/uLQ/NJm0XVAWl/BvId4MlDeXJaeIZQ== dependencies: "@babel/parser" "^7.1.0" "@babel/types" "^7.0.0" "@types/babel__traverse@*", "@types/babel__traverse@^7.0.6": - version "7.20.1" - resolved "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.1.tgz" - integrity sha512-MitHFXnhtgwsGZWtT68URpOvLN4EREih1u3QtQiN4VdAxWKRVvGCSvw/Qth0M0Qq3pJpnGOu5JaM/ydK7OGbqg== + version "7.20.2" + resolved "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.2.tgz" + integrity sha512-ojlGK1Hsfce93J0+kn3H5R73elidKUaZonirN33GSmgTUMpzI/MIFfSpF3haANe3G1bEBS9/9/QEqwTzwqFsKw== dependencies: "@babel/types" "^7.20.7" @@ -776,10 +879,25 @@ "@types/node" "*" "@types/responselike" "*" +"@types/cli-progress@^3.11.3": + version "3.11.3" + resolved "https://registry.npmjs.org/@types/cli-progress/-/cli-progress-3.11.3.tgz" + integrity sha512-/+C9xAdVtc+g5yHHkGBThgAA8rYpi5B+2ve3wLtybYj0JHEBs57ivR4x/zGfSsplRnV+psE91Nfin1soNKqz5Q== + dependencies: + "@types/node" "*" + +"@types/fs-extra@^11.0.2": + version "11.0.2" + resolved "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-11.0.2.tgz" + integrity sha512-c0hrgAOVYr21EX8J0jBMXGLMgJqVf/v6yxi0dLaJboW9aQPh16Id+z6w2Tx1hm+piJOLv8xPfVKZCLfjPw/IMQ== + dependencies: + "@types/jsonfile" "*" + "@types/node" "*" + "@types/graceful-fs@^4.1.3": - version "4.1.6" - resolved "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.6.tgz" - integrity sha512-Sig0SNORX9fdW+bQuTEovKj3uHcUL6LQKbCrrqb1X7J6/ReAbhCXRAhc+SMejhLELFj2QcyuxmUooZ4bt5ReSw== + version "4.1.7" + resolved "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.7.tgz" + integrity sha512-MhzcwU8aUygZroVwL2jeYk6JisJrPl/oov/gsgGCue9mkgl9wjGbzReYQClxiUgFDnib9FuHqTndccKeZKxTRw== dependencies: "@types/node" "*" @@ -788,6 +906,14 @@ resolved "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.1.tgz" integrity sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ== +"@types/inquirer@^9.0.3": + version "9.0.3" + resolved "https://registry.npmjs.org/@types/inquirer/-/inquirer-9.0.3.tgz" + integrity sha512-CzNkWqQftcmk2jaCWdBTf9Sm7xSw4rkI1zpU/Udw3HX5//adEZUIm9STtoRP1qgWj0CWQtJ9UTvqmO2NNjhMJw== + dependencies: + "@types/through" "*" + rxjs "^7.2.0" + "@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0", "@types/istanbul-lib-coverage@^2.0.1": version "2.0.4" resolved "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz" @@ -807,11 +933,31 @@ dependencies: "@types/istanbul-lib-report" "*" +"@types/jest@^29.5.5": + version "29.5.5" + resolved "https://registry.npmjs.org/@types/jest/-/jest-29.5.5.tgz" + integrity sha512-ebylz2hnsWR9mYvmBFbXJXr+33UPc4+ZdxyDXh5w0FlPBTfCVN3wPL+kuOiQt3xvrK419v7XWeAs+AeOksafXg== + dependencies: + expect "^29.0.0" + pretty-format "^29.0.0" + "@types/json-buffer@~3.0.0": version "3.0.0" resolved "https://registry.npmjs.org/@types/json-buffer/-/json-buffer-3.0.0.tgz" integrity sha512-3YP80IxxFJB4b5tYC2SUPwkg0XQLiu0nWvhRgEatgjf+29IcWO9X1k8xRv5DGssJ/lCrjYTjQPcobJr2yWIVuQ== +"@types/json-schema@^7.0.12": + version "7.0.13" + resolved "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.13.tgz" + integrity sha512-RbSSoHliUbnXj3ny0CNFOoxrIDV6SUGyStHsvDqosw6CkdPV8TtWGlfecuK4ToyMEAql6pzNxgCFKanovUzlgQ== + +"@types/jsonfile@*": + version "6.1.2" + resolved "https://registry.npmjs.org/@types/jsonfile/-/jsonfile-6.1.2.tgz" + integrity sha512-8t92P+oeW4d/CRQfJaSqEwXujrhH4OEeHRjGU3v1Q8mUS8GPF3yiX26sw4svv6faL2HfBtGTe2xWIoVgN3dy9w== + dependencies: + "@types/node" "*" + "@types/keyv@*": version "3.1.4" resolved "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.4.tgz" @@ -819,15 +965,30 @@ dependencies: "@types/node" "*" -"@types/node@*": - version "17.0.31" - resolved "https://registry.npmjs.org/@types/node/-/node-17.0.31.tgz" - integrity sha512-AR0x5HbXGqkEx9CadRH3EBYx/VkiUgZIhP4wvPn/+5KIsgpNoyFaRlVe0Zlx9gRtg8fA06a9tskE2MSN7TcG4Q== +"@types/lodash@^4.14.198", "@types/lodash@^4.14.199": + version "4.14.199" + resolved "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.199.tgz" + integrity sha512-Vrjz5N5Ia4SEzWWgIVwnHNEnb1UE1XMkvY5DGXrAeOGE9imk0hgTHh5GyDjLDJi9OTCn9oo9dXH1uToK1VRfrg== -"@types/prettier@^2.1.5": - version "2.7.3" - resolved "https://registry.npmjs.org/@types/prettier/-/prettier-2.7.3.tgz" - integrity sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA== +"@types/luxon@^3.3.2", "@types/luxon@~3.3.0": + version "3.3.2" + resolved "https://registry.npmjs.org/@types/luxon/-/luxon-3.3.2.tgz" + integrity sha512-l5cpE57br4BIjK+9BSkFBOsWtwv6J9bJpC7gdXIzZyI0vuKvNTk0wZZrkQxMGsUAuGW9+WMNWF2IJMD7br2yeQ== + +"@types/node-cleanup@^2.1.2": + version "2.1.2" + resolved "https://registry.npmjs.org/@types/node-cleanup/-/node-cleanup-2.1.2.tgz" + integrity sha512-HTksao/sZs9nqxKD/vWOR3WxSrQsyJlBPEFFCgq9lMmhRsuQF+2p6hy+7FaCYn6lOeiDc3ywI8jDQ2bz5y6m8w== + +"@types/node@*": + version "20.7.1" + resolved "https://registry.npmjs.org/@types/node/-/node-20.7.1.tgz" + integrity sha512-LT+OIXpp2kj4E2S/p91BMe+VgGX2+lfO+XTpfXhh+bCk2LkQtHZSub8ewFBMGP5ClysPjTDFa4sMI8Q3n4T0wg== + +"@types/numeral@^2.0.3": + version "2.0.3" + resolved "https://registry.npmjs.org/@types/numeral/-/numeral-2.0.3.tgz" + integrity sha512-37VDYvFbx/I+Ve1kwcDUq5+qvgNl+uy9YUZhBMJ6YWHBtr2+d6CAgdn4R81NqBlZbTpvLxJOTUhwbki7+90+qQ== "@types/responselike@*", "@types/responselike@^1.0.0": version "1.0.0" @@ -836,15 +997,27 @@ dependencies: "@types/node" "*" +"@types/semver@^7.5.0": + version "7.5.3" + resolved "https://registry.npmjs.org/@types/semver/-/semver-7.5.3.tgz" + integrity sha512-OxepLK9EuNEIPxWNME+C6WwbRAOOI2o2BaQEGzz5Lu2e4Z5eDnEo+/aVEDMIXywoJitJ7xWd641wrGLZdtwRyw== + "@types/stack-utils@^2.0.0": version "2.0.1" resolved "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz" integrity sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw== +"@types/through@*": + version "0.0.31" + resolved "https://registry.npmjs.org/@types/through/-/through-0.0.31.tgz" + integrity sha512-LpKpmb7FGevYgXnBXYs6HWnmiFyVG07Pt1cnbgM1IhEacITTiUaBXXvOR3Y50ksaJWGSfhbEvQFivQEFGCC55w== + dependencies: + "@types/node" "*" + "@types/tough-cookie@>=2.3.3": - version "4.0.2" - resolved "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-4.0.2.tgz" - integrity sha512-Q5vtl1W5ue16D+nIaW8JWebSSraJVlK+EthKn7e7UcD4KWsaSJ8BqGPXNaPghgtcn/fhvrN17Tv8ksUsQpiplw== + version "4.0.3" + resolved "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-4.0.3.tgz" + integrity sha512-THo502dA5PzG/sfQH+42Lw3fvmYkceefOspdCwpHRul8ik2Jv1K8I5OZz1AT3/rs46kwgMCe9bSBmDLYkkOMGg== "@types/yargs-parser@*": version "21.0.0" @@ -858,6 +1031,91 @@ dependencies: "@types/yargs-parser" "*" +"@typescript-eslint/eslint-plugin@^6.7.3": + version "6.7.3" + resolved "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.7.3.tgz" + integrity sha512-vntq452UHNltxsaaN+L9WyuMch8bMd9CqJ3zhzTPXXidwbf5mqqKCVXEuvRZUqLJSTLeWE65lQwyXsRGnXkCTA== + dependencies: + "@eslint-community/regexpp" "^4.5.1" + "@typescript-eslint/scope-manager" "6.7.3" + "@typescript-eslint/type-utils" "6.7.3" + "@typescript-eslint/utils" "6.7.3" + "@typescript-eslint/visitor-keys" "6.7.3" + debug "^4.3.4" + graphemer "^1.4.0" + ignore "^5.2.4" + natural-compare "^1.4.0" + semver "^7.5.4" + ts-api-utils "^1.0.1" + +"@typescript-eslint/parser@^6.0.0 || ^6.0.0-alpha": + version "6.7.3" + resolved "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.7.3.tgz" + integrity sha512-TlutE+iep2o7R8Lf+yoer3zU6/0EAUc8QIBB3GYBc1KGz4c4TRm83xwXUZVPlZ6YCLss4r77jbu6j3sendJoiQ== + dependencies: + "@typescript-eslint/scope-manager" "6.7.3" + "@typescript-eslint/types" "6.7.3" + "@typescript-eslint/typescript-estree" "6.7.3" + "@typescript-eslint/visitor-keys" "6.7.3" + debug "^4.3.4" + +"@typescript-eslint/scope-manager@6.7.3": + version "6.7.3" + resolved "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.7.3.tgz" + integrity sha512-wOlo0QnEou9cHO2TdkJmzF7DFGvAKEnB82PuPNHpT8ZKKaZu6Bm63ugOTn9fXNJtvuDPanBc78lGUGGytJoVzQ== + dependencies: + "@typescript-eslint/types" "6.7.3" + "@typescript-eslint/visitor-keys" "6.7.3" + +"@typescript-eslint/type-utils@6.7.3": + version "6.7.3" + resolved "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.7.3.tgz" + integrity sha512-Fc68K0aTDrKIBvLnKTZ5Pf3MXK495YErrbHb1R6aTpfK5OdSFj0rVN7ib6Tx6ePrZ2gsjLqr0s98NG7l96KSQw== + dependencies: + "@typescript-eslint/typescript-estree" "6.7.3" + "@typescript-eslint/utils" "6.7.3" + debug "^4.3.4" + ts-api-utils "^1.0.1" + +"@typescript-eslint/types@6.7.3": + version "6.7.3" + resolved "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.7.3.tgz" + integrity sha512-4g+de6roB2NFcfkZb439tigpAMnvEIg3rIjWQ+EM7IBaYt/CdJt6em9BJ4h4UpdgaBWdmx2iWsafHTrqmgIPNw== + +"@typescript-eslint/typescript-estree@6.7.3": + version "6.7.3" + resolved "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.7.3.tgz" + integrity sha512-YLQ3tJoS4VxLFYHTw21oe1/vIZPRqAO91z6Uv0Ss2BKm/Ag7/RVQBcXTGcXhgJMdA4U+HrKuY5gWlJlvoaKZ5g== + dependencies: + "@typescript-eslint/types" "6.7.3" + "@typescript-eslint/visitor-keys" "6.7.3" + debug "^4.3.4" + globby "^11.1.0" + is-glob "^4.0.3" + semver "^7.5.4" + ts-api-utils "^1.0.1" + +"@typescript-eslint/utils@6.7.3": + version "6.7.3" + resolved "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.7.3.tgz" + integrity sha512-vzLkVder21GpWRrmSR9JxGZ5+ibIUSudXlW52qeKpzUEQhRSmyZiVDDj3crAth7+5tmN1ulvgKaCU2f/bPRCzg== + dependencies: + "@eslint-community/eslint-utils" "^4.4.0" + "@types/json-schema" "^7.0.12" + "@types/semver" "^7.5.0" + "@typescript-eslint/scope-manager" "6.7.3" + "@typescript-eslint/types" "6.7.3" + "@typescript-eslint/typescript-estree" "6.7.3" + semver "^7.5.4" + +"@typescript-eslint/visitor-keys@6.7.3": + version "6.7.3" + resolved "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.7.3.tgz" + integrity sha512-HEVXkU9IB+nk9o63CeICMHxFWbHWr3E1mpilIQBe9+7L/lH97rleFLVtYsfnWB+JVMaiFnEaxvknvmIzX+CqVg== + dependencies: + "@typescript-eslint/types" "6.7.3" + eslint-visitor-keys "^3.4.1" + "@zeit/schemas@2.29.0": version "2.29.0" resolved "https://registry.npmjs.org/@zeit/schemas/-/schemas-2.29.0.tgz" @@ -881,11 +1139,23 @@ acorn-jsx@^5.3.2: resolved "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz" integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== -"acorn@^6.0.0 || ^7.0.0 || ^8.0.0", acorn@^8.7.1: +acorn-walk@^8.1.1: + version "8.2.0" + resolved "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz" + integrity sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA== + +"acorn@^6.0.0 || ^7.0.0 || ^8.0.0", acorn@^8.4.1, acorn@^8.7.1: version "8.7.1" resolved "https://registry.npmjs.org/acorn/-/acorn-8.7.1.tgz" integrity sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A== +agent-base@^7.1.0: + version "7.1.0" + resolved "https://registry.npmjs.org/agent-base/-/agent-base-7.1.0.tgz" + integrity sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg== + dependencies: + debug "^4.3.4" + agent-base@6: version "6.0.2" resolved "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz" @@ -987,6 +1257,11 @@ are-we-there-yet@^2.0.0: delegates "^1.0.0" readable-stream "^3.6.0" +arg@^4.1.0: + version "4.1.3" + resolved "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz" + integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA== + arg@5.0.2: version "5.0.2" resolved "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz" @@ -1004,6 +1279,11 @@ argparse@^2.0.1: resolved "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz" integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== +array-union@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz" + integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== + async@^3.2.3: version "3.2.3" resolved "https://registry.npmjs.org/async/-/async-3.2.3.tgz" @@ -1036,6 +1316,13 @@ axios-cookiejar-support@^1.0.1: is-redirect "^1.0.0" pify "^5.0.0" +axios-cookiejar-support@^4.0.7: + version "4.0.7" + resolved "https://registry.npmjs.org/axios-cookiejar-support/-/axios-cookiejar-support-4.0.7.tgz" + integrity sha512-9vpE3y/a2l2Vs2XEJE4L2z0GWnlpJ4Xj+kDaoCtrpPfS1J3oikXBrxRJX6H62/ZcelOGe+519yW7mqXCIoPXuw== + dependencies: + http-cookie-agent "^5.0.4" + axios-mock-adapter@^1.20.0: version "1.20.0" resolved "https://registry.npmjs.org/axios-mock-adapter/-/axios-mock-adapter-1.20.0.tgz" @@ -1045,22 +1332,31 @@ axios-mock-adapter@^1.20.0: is-blob "^2.1.0" is-buffer "^2.0.5" -axios@^0.21.1, "axios@>= 0.9.0", axios@>=0.16.2: +axios@^0.21.1, axios@>=0.16.2: version "0.21.4" resolved "https://registry.npmjs.org/axios/-/axios-0.21.4.tgz" integrity sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg== dependencies: follow-redirects "^1.14.0" -babel-jest@^29.6.1: - version "29.6.1" - resolved "https://registry.npmjs.org/babel-jest/-/babel-jest-29.6.1.tgz" - integrity sha512-qu+3bdPEQC6KZSPz+4Fyjbga5OODNcp49j6GKzG1EKbkfyJBxEYGVUmVGpwCSeGouG52R4EgYMLb6p9YeEEQ4A== +axios@^1.5.1, "axios@>= 0.9.0", axios@>=0.20.0: + version "1.5.1" + resolved "https://registry.npmjs.org/axios/-/axios-1.5.1.tgz" + integrity sha512-Q28iYCWzNHjAm+yEAot5QaAMxhMghWLFVf7rRdwhUI+c2jix2DUXjAHXVi+s1ibs3mjPO/cCgbA++3BjD0vP/A== dependencies: - "@jest/transform" "^29.6.1" + follow-redirects "^1.15.0" + form-data "^4.0.0" + proxy-from-env "^1.1.0" + +babel-jest@^29.0.0, babel-jest@^29.7.0: + version "29.7.0" + resolved "https://registry.npmjs.org/babel-jest/-/babel-jest-29.7.0.tgz" + integrity sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg== + dependencies: + "@jest/transform" "^29.7.0" "@types/babel__core" "^7.1.14" babel-plugin-istanbul "^6.1.1" - babel-preset-jest "^29.5.0" + babel-preset-jest "^29.6.3" chalk "^4.0.0" graceful-fs "^4.2.9" slash "^3.0.0" @@ -1076,10 +1372,10 @@ babel-plugin-istanbul@^6.1.1: istanbul-lib-instrument "^5.0.4" test-exclude "^6.0.0" -babel-plugin-jest-hoist@^29.5.0: - version "29.5.0" - resolved "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.5.0.tgz" - integrity sha512-zSuuuAlTMT4mzLj2nPnUm6fsE6270vdOfnpbJ+RmruU75UhLFvL0N2NgI7xpeS7NaB6hGqmd5pVpGTDYvi4Q3w== +babel-plugin-jest-hoist@^29.6.3: + version "29.6.3" + resolved "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.6.3.tgz" + integrity sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg== dependencies: "@babel/template" "^7.3.3" "@babel/types" "^7.3.3" @@ -1104,12 +1400,12 @@ babel-preset-current-node-syntax@^1.0.0: "@babel/plugin-syntax-optional-chaining" "^7.8.3" "@babel/plugin-syntax-top-level-await" "^7.8.3" -babel-preset-jest@^29.5.0: - version "29.5.0" - resolved "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.5.0.tgz" - integrity sha512-JOMloxOqdiBSxMAzjRaH023/vvcaSaec49zvg+2LmNsktC7ei39LTJGw02J+9uUtTZUq6xbLyJ4dxe9sSmIuAg== +babel-preset-jest@^29.6.3: + version "29.6.3" + resolved "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz" + integrity sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA== dependencies: - babel-plugin-jest-hoist "^29.5.0" + babel-plugin-jest-hoist "^29.6.3" babel-preset-current-node-syntax "^1.0.0" balanced-match@^1.0.0: @@ -1170,6 +1466,13 @@ brace-expansion@^1.1.7: balanced-match "^1.0.0" concat-map "0.0.1" +brace-expansion@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz" + integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== + dependencies: + balanced-match "^1.0.0" + braces@^3.0.2: version "3.0.2" resolved "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz" @@ -1187,6 +1490,13 @@ browserslist@^4.21.9, "browserslist@>= 4.21.0": node-releases "^2.0.12" update-browserslist-db "^1.0.11" +bs-logger@0.x: + version "0.2.6" + resolved "https://registry.npmjs.org/bs-logger/-/bs-logger-0.2.6.tgz" + integrity sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog== + dependencies: + fast-json-stable-stringify "2.x" + bser@2.1.1: version "2.1.1" resolved "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz" @@ -1370,10 +1680,17 @@ cli-cursor@^3.1.0: dependencies: restore-cursor "^3.1.0" +cli-progress@^3.12.0: + version "3.12.0" + resolved "https://registry.npmjs.org/cli-progress/-/cli-progress-3.12.0.tgz" + integrity sha512-tRkV3HJ1ASwm19THiiLIXLO7Im7wlTuKnvkYaTkyoAPefqjNg7W7DHKUlGRxy9vxDvbyCYQkQozvptuMkGCg8A== + dependencies: + string-width "^4.2.3" + cli-spinners@^2.5.0: - version "2.6.1" - resolved "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.6.1.tgz" - integrity sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g== + version "2.9.1" + resolved "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.1.tgz" + integrity sha512-jHgecW0pxkonBJdrKsqxgRX9AcG+u/5k0Q7WPDfi8AogLAdwxEkyYYNWwZ5GvVFoFx2uiY1eNcSK00fh+1+FyQ== cli-width@^3.0.0: version "3.0.0" @@ -1417,7 +1734,7 @@ clone-response@^1.0.2: clone@^1.0.2: version "1.0.4" resolved "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz" - integrity sha1-2jCcwmPfFZlMaIypAheco8fNfH4= + integrity sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg== co@^4.6.0: version "4.6.0" @@ -1569,14 +1886,33 @@ convert-source-map@^2.0.0: resolved "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz" integrity sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg== -cron@^2.3.1: - version "2.3.1" - resolved "https://registry.npmjs.org/cron/-/cron-2.3.1.tgz" - integrity sha512-1eRRlIT0UfIqauwbG9pkg3J6CX9A6My2ytJWqAXoK0T9oJnUZTzGBNPxao0zjodIbPgf8UQWjE62BMb9eVllSQ== +create-jest@^29.7.0: + version "29.7.0" + resolved "https://registry.npmjs.org/create-jest/-/create-jest-29.7.0.tgz" + integrity sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q== dependencies: - luxon "^3.2.1" + "@jest/types" "^29.6.3" + chalk "^4.0.0" + exit "^0.1.2" + graceful-fs "^4.2.9" + jest-config "^29.7.0" + jest-util "^29.7.0" + prompts "^2.0.1" -cross-spawn@^7.0.2, cross-spawn@^7.0.3: +create-require@^1.1.0: + version "1.1.1" + resolved "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz" + integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ== + +cron@^2.4.3: + version "2.4.3" + resolved "https://registry.npmjs.org/cron/-/cron-2.4.3.tgz" + integrity sha512-YBvExkQYF7w0PxyeFLRyr817YVDhGxaCi5/uRRMqa4aWD3IFKRd+uNbpW1VWMdqQy8PZ7CElc+accXJcauPKzQ== + dependencies: + "@types/luxon" "~3.3.0" + luxon "~3.3.0" + +cross-spawn@^7.0.0, cross-spawn@^7.0.2, cross-spawn@^7.0.3: version "7.0.3" resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz" integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== @@ -1634,7 +1970,7 @@ debug@^3.1.0: dependencies: ms "^2.1.1" -debug@^4.1.0, debug@^4.1.1, debug@^4.3.2, debug@4: +debug@^4.1.0, debug@^4.1.1, debug@^4.3.2, debug@^4.3.4, debug@4: version "4.3.4" resolved "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz" integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== @@ -1655,10 +1991,10 @@ decompress-response@^6.0.0: dependencies: mimic-response "^3.1.0" -dedent@^0.7.0: - version "0.7.0" - resolved "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz" - integrity sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA== +dedent@^1.0.0: + version "1.5.1" + resolved "https://registry.npmjs.org/dedent/-/dedent-1.5.1.tgz" + integrity sha512-+LxW+KLWxu3HW3M2w2ympwtqPrqYRzU8fqi6Fhd18fBALe15blJPI/I4+UHveMVG6lJqB4JNd4UG0S5cnVHwIg== deep-extend@^0.6.0: version "0.6.0" @@ -1676,9 +2012,9 @@ deepmerge@^4.2.2: integrity sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A== defaults@^1.0.3: - version "1.0.3" - resolved "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz" - integrity sha1-xlYFHpgX2f8I7YgUd/P+QBnz730= + version "1.0.4" + resolved "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz" + integrity sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A== dependencies: clone "^1.0.2" @@ -1712,10 +2048,22 @@ detect-newline@^3.0.0: resolved "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz" integrity sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA== -diff-sequences@^29.4.3: - version "29.4.3" - resolved "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.4.3.tgz" - integrity sha512-ofrBgwpPhCD85kMKtE9RYFFq6OC1A89oW2vvgWZNCwxrUpRUILopY7lsYyMDSjc8g6U6aiO0Qubg6r4Wgt5ZnA== +diff-sequences@^29.6.3: + version "29.6.3" + resolved "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz" + integrity sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q== + +diff@^4.0.1: + version "4.0.2" + resolved "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz" + integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== + +dir-glob@^3.0.1: + version "3.0.1" + resolved "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz" + integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== + dependencies: + path-type "^4.0.0" doctrine@^3.0.0: version "3.0.0" @@ -1796,10 +2144,10 @@ entities@^4.2.0, entities@^4.3.0, entities@^4.4.0: resolved "https://registry.npmjs.org/entities/-/entities-4.4.0.tgz" integrity sha512-oYp7156SP8LkeGD0GF85ad1X9Ai79WtRsZ2gxJqtBuzH+98YUV6jkHEKlZkMbcrjJjIVJNIDP/3WL9wQkoPbWA== -epg-grabber@^0.32.0: - version "0.32.0" - resolved "https://registry.npmjs.org/epg-grabber/-/epg-grabber-0.32.0.tgz" - integrity sha512-B6Kfd8gTebUXF+mugpLDCHnza6bl7Ymq5OlOZY2SsdT6JnmDF5F/pOy0vulOLwd9QXE9fwatN/rcfN3GVtc7kQ== +epg-grabber@^0.34.0: + version "0.34.0" + resolved "https://registry.npmjs.org/epg-grabber/-/epg-grabber-0.34.0.tgz" + integrity sha512-j/2uYRBeDg9IBL6VgjFc7rSTHaefd57e9NuX6TGoHYfr4whsZGmojBAKeaX6PkcGXvGjG2oCXoqiANeWuBisaw== dependencies: axios "^0.21.1" axios-cache-interceptor "^0.10.3" @@ -1860,6 +2208,11 @@ escape-string-regexp@^4.0.0: resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz" integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== +eslint-config-prettier@^9.0.0: + version "9.0.0" + resolved "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-9.0.0.tgz" + integrity sha512-IcJsTkJae2S35pRsRAwoCE+925rJJStOdkKnLVgtE+tEpqU0EVVM7OqrwxqgptKdX29NUwC82I5pXsGFIgSevw== + eslint-scope@^7.1.1: version "7.1.1" resolved "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz" @@ -1880,12 +2233,12 @@ eslint-visitor-keys@^2.0.0: resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz" integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw== -eslint-visitor-keys@^3.3.0: - version "3.3.0" - resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz" - integrity sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA== +eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.1: + version "3.4.3" + resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz" + integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag== -eslint@^8.17.0, eslint@>=5: +"eslint@^6.0.0 || ^7.0.0 || >=8.0.0", "eslint@^7.0.0 || ^8.0.0", eslint@^8.17.0, eslint@>=5, eslint@>=7.0.0: version "8.17.0" resolved "https://registry.npmjs.org/eslint/-/eslint-8.17.0.tgz" integrity sha512-gq0m0BTJfci60Fz4nczYxNAlED+sMcihltndR8t9t1evnU/azx53x3t2UHXC/uRjcbvRw/XctpaNygSTcQD+Iw== @@ -1984,17 +2337,16 @@ exit@^0.1.2: resolved "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz" integrity sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ== -expect@^29.6.1: - version "29.6.1" - resolved "https://registry.npmjs.org/expect/-/expect-29.6.1.tgz" - integrity sha512-XEdDLonERCU1n9uR56/Stx9OqojaLAQtZf9PrCHH9Hl8YXiEIka3H4NXJ3NOIBmQJTg7+j7buh34PMHfJujc8g== +expect@^29.0.0, expect@^29.7.0: + version "29.7.0" + resolved "https://registry.npmjs.org/expect/-/expect-29.7.0.tgz" + integrity sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw== dependencies: - "@jest/expect-utils" "^29.6.1" - "@types/node" "*" - jest-get-type "^29.4.3" - jest-matcher-utils "^29.6.1" - jest-message-util "^29.6.1" - jest-util "^29.6.1" + "@jest/expect-utils" "^29.7.0" + jest-get-type "^29.6.3" + jest-matcher-utils "^29.7.0" + jest-message-util "^29.7.0" + jest-util "^29.7.0" external-editor@^3.0.3: version "3.1.0" @@ -2015,7 +2367,18 @@ fast-defer@^1.1.7: resolved "https://registry.npmjs.org/fast-defer/-/fast-defer-1.1.7.tgz" integrity sha512-tJ01ulDWT2WhqxMKS20nXX6wyX2iInBYpbN3GO7yjKwXMY4qvkdBRxak9IFwBLlFDESox+SwSvqMCZDfe1tqeg== -fast-json-stable-stringify@^2.0.0, fast-json-stable-stringify@^2.1.0: +fast-glob@^3.2.9: + version "3.3.1" + resolved "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz" + integrity sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg== + dependencies: + "@nodelib/fs.stat" "^2.0.2" + "@nodelib/fs.walk" "^1.2.3" + glob-parent "^5.1.2" + merge2 "^1.3.0" + micromatch "^4.0.4" + +fast-json-stable-stringify@^2.0.0, fast-json-stable-stringify@^2.1.0, fast-json-stable-stringify@2.x: version "2.1.0" resolved "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz" integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== @@ -2032,6 +2395,13 @@ fast-url-parser@1.1.3: dependencies: punycode "^1.3.2" +fastq@^1.6.0: + version "1.15.0" + resolved "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz" + integrity sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw== + dependencies: + reusify "^1.0.4" + fb-watchman@^2.0.0: version "2.0.2" resolved "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz" @@ -2110,11 +2480,19 @@ fn.name@1.x.x: resolved "https://registry.npmjs.org/fn.name/-/fn.name-1.1.0.tgz" integrity sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw== -follow-redirects@^1.14.0: +follow-redirects@^1.14.0, follow-redirects@^1.15.0: version "1.15.0" resolved "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.0.tgz" integrity sha512-aExlJShTV4qOUOL7yF1U5tvLCB0xQuudbf6toyYA0E/acBNw71mvjFTnLaRp50aQaYocMR0a/RMMBIHeZnGyjQ== +foreground-child@^3.1.0: + version "3.1.1" + resolved "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz" + integrity sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg== + dependencies: + cross-spawn "^7.0.0" + signal-exit "^4.0.1" + form-data@^4.0.0: version "4.0.0" resolved "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz" @@ -2155,9 +2533,9 @@ fs.realpath@^1.0.0: integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= fsevents@^2.3.2: - version "2.3.2" - resolved "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz" - integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== + version "2.3.3" + resolved "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz" + integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== function-bind@^1.1.1: version "1.1.1" @@ -2211,6 +2589,13 @@ get-stream@^6.0.0: resolved "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz" integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== +glob-parent@^5.1.2: + version "5.1.2" + resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz" + integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== + dependencies: + is-glob "^4.0.1" + glob-parent@^6.0.1: version "6.0.2" resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz" @@ -2218,6 +2603,17 @@ glob-parent@^6.0.1: dependencies: is-glob "^4.0.3" +glob@^10.3.4: + version "10.3.5" + resolved "https://registry.npmjs.org/glob/-/glob-10.3.5.tgz" + integrity sha512-bYUpUD7XDEHI4Q2O5a7PXGvyw4deKR70kHiDxzQbe925wbZknhOzUt2xBgTkYL6RBcVeXYuD9iNYeqoWbBZQnA== + dependencies: + foreground-child "^3.1.0" + jackspeak "^2.0.3" + minimatch "^9.0.1" + minipass "^5.0.0 || ^6.0.2 || ^7.0.0" + path-scurry "^1.10.1" + glob@^7.1.3, glob@^7.1.4, glob@^7.1.6, glob@^7.2.0: version "7.2.0" resolved "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz" @@ -2242,6 +2638,18 @@ globals@^13.15.0: dependencies: type-fest "^0.20.2" +globby@^11.1.0: + version "11.1.0" + resolved "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz" + integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== + dependencies: + array-union "^2.1.0" + dir-glob "^3.0.1" + fast-glob "^3.2.9" + ignore "^5.2.0" + merge2 "^1.4.1" + slash "^3.0.0" + got@^11.8.2: version "11.8.5" resolved "https://registry.npmjs.org/got/-/got-11.8.5.tgz" @@ -2264,6 +2672,11 @@ graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.9: resolved "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz" integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== +graphemer@^1.4.0: + version "1.4.0" + resolved "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz" + integrity sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag== + has-flag@^3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz" @@ -2306,6 +2719,13 @@ http-cache-semantics@^4.0.0: resolved "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz" integrity sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ== +http-cookie-agent@^5.0.4: + version "5.0.4" + resolved "https://registry.npmjs.org/http-cookie-agent/-/http-cookie-agent-5.0.4.tgz" + integrity sha512-OtvikW69RvfyP6Lsequ0fN5R49S+8QcS9zwd58k6VSr6r57T8G29BkPdyrBcSwLq6ExLs9V+rBlfxu7gDstJag== + dependencies: + agent-base "^7.1.0" + http2-wrapper@^1.0.0-beta.5.2: version "1.0.3" resolved "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-1.0.3.tgz" @@ -2339,10 +2759,10 @@ ieee754@^1.1.13: resolved "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz" integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== -ignore@^5.2.0: - version "5.2.0" - resolved "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz" - integrity sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ== +ignore@^5.2.0, ignore@^5.2.4: + version "5.2.4" + resolved "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz" + integrity sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ== immediate@~3.0.5: version "3.0.6" @@ -2388,10 +2808,10 @@ ini@~1.3.0: resolved "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz" integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== -inquirer@^8.2.0: - version "8.2.4" - resolved "https://registry.npmjs.org/inquirer/-/inquirer-8.2.4.tgz" - integrity sha512-nn4F01dxU8VeKfq192IjLsxu0/OmMZ4Lg3xKAns148rCaXP6ntAoEkVYZThWjwON8AlzdZZi6oqnhNbxUG9hVg== +inquirer@^8.2.6: + version "8.2.6" + resolved "https://registry.npmjs.org/inquirer/-/inquirer-8.2.6.tgz" + integrity sha512-M1WuAmb7pn9zdFRtQYk26ZBoY043Sse0wVDdk4Bppr+JOXyQYybdtvK+l9wUibhtjdjvtoiNy8tk+EgsYIUqKg== dependencies: ansi-escapes "^4.2.1" chalk "^4.1.1" @@ -2407,7 +2827,7 @@ inquirer@^8.2.0: string-width "^4.1.0" strip-ansi "^6.0.0" through "^2.3.6" - wrap-ansi "^7.0.0" + wrap-ansi "^6.0.1" is-arrayish@^0.2.1: version "0.2.1" @@ -2429,10 +2849,10 @@ is-buffer@^2.0.5: resolved "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz" integrity sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ== -is-core-module@^2.11.0: - version "2.12.1" - resolved "https://registry.npmjs.org/is-core-module/-/is-core-module-2.12.1.tgz" - integrity sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg== +is-core-module@^2.13.0: + version "2.13.0" + resolved "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.0.tgz" + integrity sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ== dependencies: has "^1.0.3" @@ -2456,7 +2876,7 @@ is-generator-fn@^2.0.0: resolved "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz" integrity sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ== -is-glob@^4.0.0, is-glob@^4.0.3: +is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3: version "4.0.3" resolved "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz" integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== @@ -2486,7 +2906,7 @@ is-port-reachable@4.0.0: is-redirect@^1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/is-redirect/-/is-redirect-1.0.0.tgz" - integrity sha1-HQPd7VO9jbDzDCbk+V02/HyH3CQ= + integrity sha512-cr/SlUEe5zOGmzvj9bUyC4LVvkNVAXu4GytXLNMr1pny+a65MpQ9IJzFHD5vi7FyJgb4qt27+eS3TuQnqB+RQw== is-stream@^2.0.0: version "2.0.1" @@ -2515,7 +2935,7 @@ istanbul-lib-coverage@^3.0.0, istanbul-lib-coverage@^3.2.0: resolved "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz" integrity sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw== -istanbul-lib-instrument@^5.0.4, istanbul-lib-instrument@^5.1.0: +istanbul-lib-instrument@^5.0.4: version "5.2.1" resolved "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz" integrity sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg== @@ -2526,13 +2946,24 @@ istanbul-lib-instrument@^5.0.4, istanbul-lib-instrument@^5.1.0: istanbul-lib-coverage "^3.2.0" semver "^6.3.0" +istanbul-lib-instrument@^6.0.0: + version "6.0.0" + resolved "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.0.tgz" + integrity sha512-x58orMzEVfzPUKqlbLd1hXCnySCxKdDKa6Rjg97CwuLLRI4g3FHTdnExu1OqffVFay6zeMW+T6/DowFLndWnIw== + dependencies: + "@babel/core" "^7.12.3" + "@babel/parser" "^7.14.7" + "@istanbuljs/schema" "^0.1.2" + istanbul-lib-coverage "^3.2.0" + semver "^7.5.4" + istanbul-lib-report@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz" - integrity sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw== + version "3.0.1" + resolved "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz" + integrity sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw== dependencies: istanbul-lib-coverage "^3.0.0" - make-dir "^3.0.0" + make-dir "^4.0.0" supports-color "^7.1.0" istanbul-lib-source-maps@^4.0.0: @@ -2545,371 +2976,379 @@ istanbul-lib-source-maps@^4.0.0: source-map "^0.6.1" istanbul-reports@^3.1.3: - version "3.1.5" - resolved "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.5.tgz" - integrity sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w== + version "3.1.6" + resolved "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.6.tgz" + integrity sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg== dependencies: html-escaper "^2.0.0" istanbul-lib-report "^3.0.0" -jest-changed-files@^29.5.0: - version "29.5.0" - resolved "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.5.0.tgz" - integrity sha512-IFG34IUMUaNBIxjQXF/iu7g6EcdMrGRRxaUSw92I/2g2YC6vCdTltl4nHvt7Ci5nSJwXIkCu8Ka1DKF+X7Z1Ag== +jackspeak@^2.0.3: + version "2.3.3" + resolved "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.3.tgz" + integrity sha512-R2bUw+kVZFS/h1AZqBKrSgDmdmjApzgY0AlCPumopFiAlbUxE2gf+SCuBzQ0cP5hHmUmFYF5yw55T97Th5Kstg== + dependencies: + "@isaacs/cliui" "^8.0.2" + optionalDependencies: + "@pkgjs/parseargs" "^0.11.0" + +jest-changed-files@^29.7.0: + version "29.7.0" + resolved "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.7.0.tgz" + integrity sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w== dependencies: execa "^5.0.0" + jest-util "^29.7.0" p-limit "^3.1.0" -jest-circus@^29.6.1: - version "29.6.1" - resolved "https://registry.npmjs.org/jest-circus/-/jest-circus-29.6.1.tgz" - integrity sha512-tPbYLEiBU4MYAL2XoZme/bgfUeotpDBd81lgHLCbDZZFaGmECk0b+/xejPFtmiBP87GgP/y4jplcRpbH+fgCzQ== +jest-circus@^29.7.0: + version "29.7.0" + resolved "https://registry.npmjs.org/jest-circus/-/jest-circus-29.7.0.tgz" + integrity sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw== dependencies: - "@jest/environment" "^29.6.1" - "@jest/expect" "^29.6.1" - "@jest/test-result" "^29.6.1" - "@jest/types" "^29.6.1" + "@jest/environment" "^29.7.0" + "@jest/expect" "^29.7.0" + "@jest/test-result" "^29.7.0" + "@jest/types" "^29.6.3" "@types/node" "*" chalk "^4.0.0" co "^4.6.0" - dedent "^0.7.0" + dedent "^1.0.0" is-generator-fn "^2.0.0" - jest-each "^29.6.1" - jest-matcher-utils "^29.6.1" - jest-message-util "^29.6.1" - jest-runtime "^29.6.1" - jest-snapshot "^29.6.1" - jest-util "^29.6.1" + jest-each "^29.7.0" + jest-matcher-utils "^29.7.0" + jest-message-util "^29.7.0" + jest-runtime "^29.7.0" + jest-snapshot "^29.7.0" + jest-util "^29.7.0" p-limit "^3.1.0" - pretty-format "^29.6.1" + pretty-format "^29.7.0" pure-rand "^6.0.0" slash "^3.0.0" stack-utils "^2.0.3" -jest-cli@^29.6.1: - version "29.6.1" - resolved "https://registry.npmjs.org/jest-cli/-/jest-cli-29.6.1.tgz" - integrity sha512-607dSgTA4ODIN6go9w6xY3EYkyPFGicx51a69H7yfvt7lN53xNswEVLovq+E77VsTRi5fWprLH0yl4DJgE8Ing== +jest-cli@^29.7.0: + version "29.7.0" + resolved "https://registry.npmjs.org/jest-cli/-/jest-cli-29.7.0.tgz" + integrity sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg== dependencies: - "@jest/core" "^29.6.1" - "@jest/test-result" "^29.6.1" - "@jest/types" "^29.6.1" + "@jest/core" "^29.7.0" + "@jest/test-result" "^29.7.0" + "@jest/types" "^29.6.3" chalk "^4.0.0" + create-jest "^29.7.0" exit "^0.1.2" - graceful-fs "^4.2.9" import-local "^3.0.2" - jest-config "^29.6.1" - jest-util "^29.6.1" - jest-validate "^29.6.1" - prompts "^2.0.1" + jest-config "^29.7.0" + jest-util "^29.7.0" + jest-validate "^29.7.0" yargs "^17.3.1" -jest-config@^29.6.1: - version "29.6.1" - resolved "https://registry.npmjs.org/jest-config/-/jest-config-29.6.1.tgz" - integrity sha512-XdjYV2fy2xYixUiV2Wc54t3Z4oxYPAELUzWnV6+mcbq0rh742X2p52pii5A3oeRzYjLnQxCsZmp0qpI6klE2cQ== +jest-config@^29.7.0: + version "29.7.0" + resolved "https://registry.npmjs.org/jest-config/-/jest-config-29.7.0.tgz" + integrity sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ== dependencies: "@babel/core" "^7.11.6" - "@jest/test-sequencer" "^29.6.1" - "@jest/types" "^29.6.1" - babel-jest "^29.6.1" + "@jest/test-sequencer" "^29.7.0" + "@jest/types" "^29.6.3" + babel-jest "^29.7.0" chalk "^4.0.0" ci-info "^3.2.0" deepmerge "^4.2.2" glob "^7.1.3" graceful-fs "^4.2.9" - jest-circus "^29.6.1" - jest-environment-node "^29.6.1" - jest-get-type "^29.4.3" - jest-regex-util "^29.4.3" - jest-resolve "^29.6.1" - jest-runner "^29.6.1" - jest-util "^29.6.1" - jest-validate "^29.6.1" + jest-circus "^29.7.0" + jest-environment-node "^29.7.0" + jest-get-type "^29.6.3" + jest-regex-util "^29.6.3" + jest-resolve "^29.7.0" + jest-runner "^29.7.0" + jest-util "^29.7.0" + jest-validate "^29.7.0" micromatch "^4.0.4" parse-json "^5.2.0" - pretty-format "^29.6.1" + pretty-format "^29.7.0" slash "^3.0.0" strip-json-comments "^3.1.1" -jest-diff@^29.6.1: - version "29.6.1" - resolved "https://registry.npmjs.org/jest-diff/-/jest-diff-29.6.1.tgz" - integrity sha512-FsNCvinvl8oVxpNLttNQX7FAq7vR+gMDGj90tiP7siWw1UdakWUGqrylpsYrpvj908IYckm5Y0Q7azNAozU1Kg== +jest-diff@^29.7.0: + version "29.7.0" + resolved "https://registry.npmjs.org/jest-diff/-/jest-diff-29.7.0.tgz" + integrity sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw== dependencies: chalk "^4.0.0" - diff-sequences "^29.4.3" - jest-get-type "^29.4.3" - pretty-format "^29.6.1" + diff-sequences "^29.6.3" + jest-get-type "^29.6.3" + pretty-format "^29.7.0" -jest-docblock@^29.4.3: - version "29.4.3" - resolved "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.4.3.tgz" - integrity sha512-fzdTftThczeSD9nZ3fzA/4KkHtnmllawWrXO69vtI+L9WjEIuXWs4AmyME7lN5hU7dB0sHhuPfcKofRsUb/2Fg== +jest-docblock@^29.7.0: + version "29.7.0" + resolved "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.7.0.tgz" + integrity sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g== dependencies: detect-newline "^3.0.0" -jest-each@^29.6.1: - version "29.6.1" - resolved "https://registry.npmjs.org/jest-each/-/jest-each-29.6.1.tgz" - integrity sha512-n5eoj5eiTHpKQCAVcNTT7DRqeUmJ01hsAL0Q1SMiBHcBcvTKDELixQOGMCpqhbIuTcfC4kMfSnpmDqRgRJcLNQ== +jest-each@^29.7.0: + version "29.7.0" + resolved "https://registry.npmjs.org/jest-each/-/jest-each-29.7.0.tgz" + integrity sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ== dependencies: - "@jest/types" "^29.6.1" + "@jest/types" "^29.6.3" chalk "^4.0.0" - jest-get-type "^29.4.3" - jest-util "^29.6.1" - pretty-format "^29.6.1" + jest-get-type "^29.6.3" + jest-util "^29.7.0" + pretty-format "^29.7.0" -jest-environment-node@^29.6.1: - version "29.6.1" - resolved "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.6.1.tgz" - integrity sha512-ZNIfAiE+foBog24W+2caIldl4Irh8Lx1PUhg/GZ0odM1d/h2qORAsejiFc7zb+SEmYPn1yDZzEDSU5PmDkmVLQ== +jest-environment-node@^29.7.0: + version "29.7.0" + resolved "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.7.0.tgz" + integrity sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw== dependencies: - "@jest/environment" "^29.6.1" - "@jest/fake-timers" "^29.6.1" - "@jest/types" "^29.6.1" + "@jest/environment" "^29.7.0" + "@jest/fake-timers" "^29.7.0" + "@jest/types" "^29.6.3" "@types/node" "*" - jest-mock "^29.6.1" - jest-util "^29.6.1" + jest-mock "^29.7.0" + jest-util "^29.7.0" -jest-get-type@^29.4.3: - version "29.4.3" - resolved "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.4.3.tgz" - integrity sha512-J5Xez4nRRMjk8emnTpWrlkyb9pfRQQanDrvWHhsR1+VUfbwxi30eVcZFlcdGInRibU4G5LwHXpI7IRHU0CY+gg== +jest-get-type@^29.6.3: + version "29.6.3" + resolved "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz" + integrity sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw== -jest-haste-map@^29.6.1: - version "29.6.1" - resolved "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.6.1.tgz" - integrity sha512-0m7f9PZXxOCk1gRACiVgX85knUKPKLPg4oRCjLoqIm9brTHXaorMA0JpmtmVkQiT8nmXyIVoZd/nnH1cfC33ig== +jest-haste-map@^29.7.0: + version "29.7.0" + resolved "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.7.0.tgz" + integrity sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA== dependencies: - "@jest/types" "^29.6.1" + "@jest/types" "^29.6.3" "@types/graceful-fs" "^4.1.3" "@types/node" "*" anymatch "^3.0.3" fb-watchman "^2.0.0" graceful-fs "^4.2.9" - jest-regex-util "^29.4.3" - jest-util "^29.6.1" - jest-worker "^29.6.1" + jest-regex-util "^29.6.3" + jest-util "^29.7.0" + jest-worker "^29.7.0" micromatch "^4.0.4" walker "^1.0.8" optionalDependencies: fsevents "^2.3.2" -jest-leak-detector@^29.6.1: - version "29.6.1" - resolved "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.6.1.tgz" - integrity sha512-OrxMNyZirpOEwkF3UHnIkAiZbtkBWiye+hhBweCHkVbCgyEy71Mwbb5zgeTNYWJBi1qgDVfPC1IwO9dVEeTLwQ== +jest-leak-detector@^29.7.0: + version "29.7.0" + resolved "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.7.0.tgz" + integrity sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw== dependencies: - jest-get-type "^29.4.3" - pretty-format "^29.6.1" + jest-get-type "^29.6.3" + pretty-format "^29.7.0" -jest-matcher-utils@^29.6.1: - version "29.6.1" - resolved "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.6.1.tgz" - integrity sha512-SLaztw9d2mfQQKHmJXKM0HCbl2PPVld/t9Xa6P9sgiExijviSp7TnZZpw2Fpt+OI3nwUO/slJbOfzfUMKKC5QA== +jest-matcher-utils@^29.7.0: + version "29.7.0" + resolved "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz" + integrity sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g== dependencies: chalk "^4.0.0" - jest-diff "^29.6.1" - jest-get-type "^29.4.3" - pretty-format "^29.6.1" + jest-diff "^29.7.0" + jest-get-type "^29.6.3" + pretty-format "^29.7.0" -jest-message-util@^29.6.1: - version "29.6.1" - resolved "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.6.1.tgz" - integrity sha512-KoAW2zAmNSd3Gk88uJ56qXUWbFk787QKmjjJVOjtGFmmGSZgDBrlIL4AfQw1xyMYPNVD7dNInfIbur9B2rd/wQ== +jest-message-util@^29.7.0: + version "29.7.0" + resolved "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.7.0.tgz" + integrity sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w== dependencies: "@babel/code-frame" "^7.12.13" - "@jest/types" "^29.6.1" + "@jest/types" "^29.6.3" "@types/stack-utils" "^2.0.0" chalk "^4.0.0" graceful-fs "^4.2.9" micromatch "^4.0.4" - pretty-format "^29.6.1" + pretty-format "^29.7.0" slash "^3.0.0" stack-utils "^2.0.3" -jest-mock@^29.6.1: - version "29.6.1" - resolved "https://registry.npmjs.org/jest-mock/-/jest-mock-29.6.1.tgz" - integrity sha512-brovyV9HBkjXAEdRooaTQK42n8usKoSRR3gihzUpYeV/vwqgSoNfrksO7UfSACnPmxasO/8TmHM3w9Hp3G1dgw== +jest-mock@^29.7.0: + version "29.7.0" + resolved "https://registry.npmjs.org/jest-mock/-/jest-mock-29.7.0.tgz" + integrity sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw== dependencies: - "@jest/types" "^29.6.1" + "@jest/types" "^29.6.3" "@types/node" "*" - jest-util "^29.6.1" + jest-util "^29.7.0" jest-pnp-resolver@^1.2.2: version "1.2.3" resolved "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz" integrity sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w== -jest-regex-util@^29.4.3: - version "29.4.3" - resolved "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.4.3.tgz" - integrity sha512-O4FglZaMmWXbGHSQInfXewIsd1LMn9p3ZXB/6r4FOkyhX2/iP/soMG98jGvk/A3HAN78+5VWcBGO0BJAPRh4kg== +jest-regex-util@^29.6.3: + version "29.6.3" + resolved "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz" + integrity sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg== -jest-resolve-dependencies@^29.6.1: - version "29.6.1" - resolved "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.6.1.tgz" - integrity sha512-BbFvxLXtcldaFOhNMXmHRWx1nXQO5LoXiKSGQcA1LxxirYceZT6ch8KTE1bK3X31TNG/JbkI7OkS/ABexVahiw== +jest-resolve-dependencies@^29.7.0: + version "29.7.0" + resolved "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.7.0.tgz" + integrity sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA== dependencies: - jest-regex-util "^29.4.3" - jest-snapshot "^29.6.1" + jest-regex-util "^29.6.3" + jest-snapshot "^29.7.0" -jest-resolve@*, jest-resolve@^29.6.1: - version "29.6.1" - resolved "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.6.1.tgz" - integrity sha512-AeRkyS8g37UyJiP9w3mmI/VXU/q8l/IH52vj/cDAyScDcemRbSBhfX/NMYIGilQgSVwsjxrCHf3XJu4f+lxCMg== +jest-resolve@*, jest-resolve@^29.7.0: + version "29.7.0" + resolved "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.7.0.tgz" + integrity sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA== dependencies: chalk "^4.0.0" graceful-fs "^4.2.9" - jest-haste-map "^29.6.1" + jest-haste-map "^29.7.0" jest-pnp-resolver "^1.2.2" - jest-util "^29.6.1" - jest-validate "^29.6.1" + jest-util "^29.7.0" + jest-validate "^29.7.0" resolve "^1.20.0" resolve.exports "^2.0.0" slash "^3.0.0" -jest-runner@^29.6.1: - version "29.6.1" - resolved "https://registry.npmjs.org/jest-runner/-/jest-runner-29.6.1.tgz" - integrity sha512-tw0wb2Q9yhjAQ2w8rHRDxteryyIck7gIzQE4Reu3JuOBpGp96xWgF0nY8MDdejzrLCZKDcp8JlZrBN/EtkQvPQ== +jest-runner@^29.7.0: + version "29.7.0" + resolved "https://registry.npmjs.org/jest-runner/-/jest-runner-29.7.0.tgz" + integrity sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ== dependencies: - "@jest/console" "^29.6.1" - "@jest/environment" "^29.6.1" - "@jest/test-result" "^29.6.1" - "@jest/transform" "^29.6.1" - "@jest/types" "^29.6.1" + "@jest/console" "^29.7.0" + "@jest/environment" "^29.7.0" + "@jest/test-result" "^29.7.0" + "@jest/transform" "^29.7.0" + "@jest/types" "^29.6.3" "@types/node" "*" chalk "^4.0.0" emittery "^0.13.1" graceful-fs "^4.2.9" - jest-docblock "^29.4.3" - jest-environment-node "^29.6.1" - jest-haste-map "^29.6.1" - jest-leak-detector "^29.6.1" - jest-message-util "^29.6.1" - jest-resolve "^29.6.1" - jest-runtime "^29.6.1" - jest-util "^29.6.1" - jest-watcher "^29.6.1" - jest-worker "^29.6.1" + jest-docblock "^29.7.0" + jest-environment-node "^29.7.0" + jest-haste-map "^29.7.0" + jest-leak-detector "^29.7.0" + jest-message-util "^29.7.0" + jest-resolve "^29.7.0" + jest-runtime "^29.7.0" + jest-util "^29.7.0" + jest-watcher "^29.7.0" + jest-worker "^29.7.0" p-limit "^3.1.0" source-map-support "0.5.13" -jest-runtime@^29.6.1: - version "29.6.1" - resolved "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.6.1.tgz" - integrity sha512-D6/AYOA+Lhs5e5il8+5pSLemjtJezUr+8zx+Sn8xlmOux3XOqx4d8l/2udBea8CRPqqrzhsKUsN/gBDE/IcaPQ== +jest-runtime@^29.7.0: + version "29.7.0" + resolved "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.7.0.tgz" + integrity sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ== dependencies: - "@jest/environment" "^29.6.1" - "@jest/fake-timers" "^29.6.1" - "@jest/globals" "^29.6.1" - "@jest/source-map" "^29.6.0" - "@jest/test-result" "^29.6.1" - "@jest/transform" "^29.6.1" - "@jest/types" "^29.6.1" + "@jest/environment" "^29.7.0" + "@jest/fake-timers" "^29.7.0" + "@jest/globals" "^29.7.0" + "@jest/source-map" "^29.6.3" + "@jest/test-result" "^29.7.0" + "@jest/transform" "^29.7.0" + "@jest/types" "^29.6.3" "@types/node" "*" chalk "^4.0.0" cjs-module-lexer "^1.0.0" collect-v8-coverage "^1.0.0" glob "^7.1.3" graceful-fs "^4.2.9" - jest-haste-map "^29.6.1" - jest-message-util "^29.6.1" - jest-mock "^29.6.1" - jest-regex-util "^29.4.3" - jest-resolve "^29.6.1" - jest-snapshot "^29.6.1" - jest-util "^29.6.1" + jest-haste-map "^29.7.0" + jest-message-util "^29.7.0" + jest-mock "^29.7.0" + jest-regex-util "^29.6.3" + jest-resolve "^29.7.0" + jest-snapshot "^29.7.0" + jest-util "^29.7.0" slash "^3.0.0" strip-bom "^4.0.0" -jest-snapshot@^29.6.1: - version "29.6.1" - resolved "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.6.1.tgz" - integrity sha512-G4UQE1QQ6OaCgfY+A0uR1W2AY0tGXUPQpoUClhWHq1Xdnx1H6JOrC2nH5lqnOEqaDgbHFgIwZ7bNq24HpB180A== +jest-snapshot@^29.7.0: + version "29.7.0" + resolved "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.7.0.tgz" + integrity sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw== dependencies: "@babel/core" "^7.11.6" "@babel/generator" "^7.7.2" "@babel/plugin-syntax-jsx" "^7.7.2" "@babel/plugin-syntax-typescript" "^7.7.2" "@babel/types" "^7.3.3" - "@jest/expect-utils" "^29.6.1" - "@jest/transform" "^29.6.1" - "@jest/types" "^29.6.1" - "@types/prettier" "^2.1.5" + "@jest/expect-utils" "^29.7.0" + "@jest/transform" "^29.7.0" + "@jest/types" "^29.6.3" babel-preset-current-node-syntax "^1.0.0" chalk "^4.0.0" - expect "^29.6.1" + expect "^29.7.0" graceful-fs "^4.2.9" - jest-diff "^29.6.1" - jest-get-type "^29.4.3" - jest-matcher-utils "^29.6.1" - jest-message-util "^29.6.1" - jest-util "^29.6.1" + jest-diff "^29.7.0" + jest-get-type "^29.6.3" + jest-matcher-utils "^29.7.0" + jest-message-util "^29.7.0" + jest-util "^29.7.0" natural-compare "^1.4.0" - pretty-format "^29.6.1" + pretty-format "^29.7.0" semver "^7.5.3" -jest-util@^29.6.1: - version "29.6.1" - resolved "https://registry.npmjs.org/jest-util/-/jest-util-29.6.1.tgz" - integrity sha512-NRFCcjc+/uO3ijUVyNOQJluf8PtGCe/W6cix36+M3cTFgiYqFOOW5MgN4JOOcvbUhcKTYVd1CvHz/LWi8d16Mg== +jest-util@^29.0.0, jest-util@^29.7.0: + version "29.7.0" + resolved "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz" + integrity sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA== dependencies: - "@jest/types" "^29.6.1" + "@jest/types" "^29.6.3" "@types/node" "*" chalk "^4.0.0" ci-info "^3.2.0" graceful-fs "^4.2.9" picomatch "^2.2.3" -jest-validate@^29.6.1: - version "29.6.1" - resolved "https://registry.npmjs.org/jest-validate/-/jest-validate-29.6.1.tgz" - integrity sha512-r3Ds69/0KCN4vx4sYAbGL1EVpZ7MSS0vLmd3gV78O+NAx3PDQQukRU5hNHPXlyqCgFY8XUk7EuTMLugh0KzahA== +jest-validate@^29.7.0: + version "29.7.0" + resolved "https://registry.npmjs.org/jest-validate/-/jest-validate-29.7.0.tgz" + integrity sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw== dependencies: - "@jest/types" "^29.6.1" + "@jest/types" "^29.6.3" camelcase "^6.2.0" chalk "^4.0.0" - jest-get-type "^29.4.3" + jest-get-type "^29.6.3" leven "^3.1.0" - pretty-format "^29.6.1" + pretty-format "^29.7.0" -jest-watcher@^29.6.1: - version "29.6.1" - resolved "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.6.1.tgz" - integrity sha512-d4wpjWTS7HEZPaaj8m36QiaP856JthRZkrgcIY/7ISoUWPIillrXM23WPboZVLbiwZBt4/qn2Jke84Sla6JhFA== +jest-watcher@^29.7.0: + version "29.7.0" + resolved "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.7.0.tgz" + integrity sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g== dependencies: - "@jest/test-result" "^29.6.1" - "@jest/types" "^29.6.1" + "@jest/test-result" "^29.7.0" + "@jest/types" "^29.6.3" "@types/node" "*" ansi-escapes "^4.2.1" chalk "^4.0.0" emittery "^0.13.1" - jest-util "^29.6.1" + jest-util "^29.7.0" string-length "^4.0.1" -jest-worker@^29.6.1: - version "29.6.1" - resolved "https://registry.npmjs.org/jest-worker/-/jest-worker-29.6.1.tgz" - integrity sha512-U+Wrbca7S8ZAxAe9L6nb6g8kPdia5hj32Puu5iOqBCMTMWFHXuK6dOV2IFrpedbTV8fjMFLdWNttQTBL6u2MRA== +jest-worker@^29.7.0: + version "29.7.0" + resolved "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz" + integrity sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw== dependencies: "@types/node" "*" - jest-util "^29.6.1" + jest-util "^29.7.0" merge-stream "^2.0.0" supports-color "^8.0.0" -jest@^29.5.0: - version "29.6.1" - resolved "https://registry.npmjs.org/jest/-/jest-29.6.1.tgz" - integrity sha512-Nirw5B4nn69rVUZtemCQhwxOBhm0nsp3hmtF4rzCeWD7BkjAXRIji7xWQfnTNbz9g0aVsBX6aZK3n+23LM6uDw== +jest@^29.0.0, jest@^29.7.0: + version "29.7.0" + resolved "https://registry.npmjs.org/jest/-/jest-29.7.0.tgz" + integrity sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw== dependencies: - "@jest/core" "^29.6.1" - "@jest/types" "^29.6.1" + "@jest/core" "^29.7.0" + "@jest/types" "^29.6.3" import-local "^3.0.2" - jest-cli "^29.6.1" + jest-cli "^29.7.0" js-tokens@^4.0.0: version "4.0.0" @@ -2966,7 +3405,7 @@ json-stable-stringify-without-jsonify@^1.0.1: resolved "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz" integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== -json5@^2.2.2: +json5@^2.2.2, json5@^2.2.3: version "2.2.3" resolved "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz" integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== @@ -3069,6 +3508,11 @@ locate-path@^5.0.0: dependencies: p-locate "^4.1.0" +lodash.memoize@4.x: + version "4.1.2" + resolved "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz" + integrity sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag== + lodash.merge@^4.6.2: version "4.6.2" resolved "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz" @@ -3117,18 +3561,40 @@ lru-cache@^6.0.0: dependencies: yallist "^4.0.0" -luxon@^3.2.1, luxon@^3.3.0: +"lru-cache@^9.1.1 || ^10.0.0": + version "10.0.1" + resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-10.0.1.tgz" + integrity sha512-IJ4uwUTi2qCccrioU6g9g/5rvvVl13bsdczUUcqbciD9iLr095yj8DQKdObriEvuNSx325N1rV1O0sJFszx75g== + +luxon@^3.3.0, luxon@~3.3.0: version "3.3.0" resolved "https://registry.npmjs.org/luxon/-/luxon-3.3.0.tgz" integrity sha512-An0UCfG/rSiqtAIiBPO0Y9/zAnHUZxAMiCpTd5h2smgsj7GGmcenvrvww2cqNA8/4A5ZrD1gJpHN2mIHZQF+Mg== -make-dir@^3.0.0, make-dir@^3.1.0: +luxon@^3.4.3: + version "3.4.3" + resolved "https://registry.npmjs.org/luxon/-/luxon-3.4.3.tgz" + integrity sha512-tFWBiv3h7z+T/tDaoxA8rqTxy1CHV6gHS//QdaH4pulbq/JuBSGgQspQQqcgnwdAx6pNI7cmvz5Sv/addzHmUg== + +make-dir@^3.1.0: version "3.1.0" resolved "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz" integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== dependencies: semver "^6.0.0" +make-dir@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz" + integrity sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw== + dependencies: + semver "^7.5.3" + +make-error@^1.1.1, make-error@1.x: + version "1.3.6" + resolved "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz" + integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== + makeerror@1.0.12: version "1.0.12" resolved "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz" @@ -3148,6 +3614,11 @@ merge-stream@^2.0.0: resolved "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz" integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== +merge2@^1.3.0, merge2@^1.4.1: + version "1.4.1" + resolved "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz" + integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== + micromatch@^4.0.4: version "4.0.5" resolved "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz" @@ -3202,6 +3673,13 @@ minimatch@^3.0.4, minimatch@^3.1.2, minimatch@3.1.2: dependencies: brace-expansion "^1.1.7" +minimatch@^9.0.1: + version "9.0.3" + resolved "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz" + integrity sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg== + dependencies: + brace-expansion "^2.0.1" + minimist@^1.2.0: version "1.2.6" resolved "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz" @@ -3214,7 +3692,7 @@ minipass@^3.0.0: dependencies: yallist "^4.0.0" -minipass@^5.0.0: +minipass@^5.0.0, "minipass@^5.0.0 || ^6.0.2 || ^7.0.0": version "5.0.0" resolved "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz" integrity sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ== @@ -3267,6 +3745,11 @@ natural-compare@^1.4.0: resolved "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz" integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= +natural-orderby@^3.0.2: + version "3.0.2" + resolved "https://registry.npmjs.org/natural-orderby/-/natural-orderby-3.0.2.tgz" + integrity sha512-x7ZdOwBxZCEm9MM7+eQCjkrNLrW3rkBKNHVr78zbtqnMGVNlnDi6C/eUEYgxHNrcbu0ymvjzcwIL/6H1iHri9g== + nedb-promises@^6.0.3: version "6.0.3" resolved "https://registry.npmjs.org/nedb-promises/-/nedb-promises-6.0.3.tgz" @@ -3323,7 +3806,7 @@ normalize-path@^3.0.0: resolved "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz" integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== -normalize-url@^6.0.1: +normalize-url@^6.0.1, normalize-url@^6.1.0: version "6.1.0" resolved "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz" integrity sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A== @@ -3352,6 +3835,11 @@ nth-check@^2.0.1: dependencies: boolbase "^1.0.0" +numeral@^2.0.6: + version "2.0.6" + resolved "https://registry.npmjs.org/numeral/-/numeral-2.0.6.tgz" + integrity sha512-qaKRmtYPZ5qdw4jWJD6bxEf1FJEqllJrwxCLIm0sQU/A7v2/czigzOb+C2uSiFsa9lBUzeH7M1oK+Q+OLxL3kA== + object-assign@^4.1.1: version "4.1.1" resolved "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz" @@ -3362,6 +3850,11 @@ object-code@^1.2.2: resolved "https://registry.npmjs.org/object-code/-/object-code-1.2.2.tgz" integrity sha512-ZSbEQdei4ElzuDM4BmazKSwINacocBf3/8rte25aNqXzvT/8dSaNVY9egsjAaBL/UhW55JNxAvXOKPIsL2MwWQ== +object-treeify@^2.1.1: + version "2.1.1" + resolved "https://registry.npmjs.org/object-treeify/-/object-treeify-2.1.1.tgz" + integrity sha512-ofXhazOvXTYWbbibExMiS+asaTbYG/ZWopVroXFFOdjmc8ehXMq9R2VUaTx/C3CnZkQbT52wAZT4DrBLK/nQfw== + on-headers@~1.0.2: version "1.0.2" resolved "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz" @@ -3418,7 +3911,7 @@ ora@^5.4.1: os-tmpdir@~1.0.2: version "1.0.2" resolved "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz" - integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= + integrity sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g== p-cancelable@^2.0.0: version "2.1.1" @@ -3545,11 +4038,24 @@ path-parse@^1.0.7: resolved "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz" integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== +path-scurry@^1.10.1: + version "1.10.1" + resolved "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.1.tgz" + integrity sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ== + dependencies: + lru-cache "^9.1.1 || ^10.0.0" + minipass "^5.0.0 || ^6.0.2 || ^7.0.0" + path-to-regexp@2.2.1: version "2.2.1" resolved "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-2.2.1.tgz" integrity sha512-gu9bD6Ta5bwGrrU8muHzVOBFFREpp2iRkVfhBJahwJ6p6Xw20SjT0MxLnwkjOibQmGSYhiUnf2FLe7k+jcFmGQ== +path-type@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz" + integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== + pdf-parse@^1.1.1: version "1.1.1" resolved "https://registry.npmjs.org/pdf-parse/-/pdf-parse-1.1.1.tgz" @@ -3603,12 +4109,12 @@ prelude-ls@^1.2.1: resolved "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz" integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== -pretty-format@^29.6.1: - version "29.6.1" - resolved "https://registry.npmjs.org/pretty-format/-/pretty-format-29.6.1.tgz" - integrity sha512-7jRj+yXO0W7e4/tSJKoR7HRIHLPPjtNaUGG2xxKQnGvPNRkgWcQ0AZX6P4KBRJN4FcTBWb3sa7DVUJmocYuoog== +pretty-format@^29.0.0, pretty-format@^29.7.0: + version "29.7.0" + resolved "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz" + integrity sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ== dependencies: - "@jest/schemas" "^29.6.0" + "@jest/schemas" "^29.6.3" ansi-styles "^5.0.0" react-is "^18.0.0" @@ -3620,6 +4126,11 @@ prompts@^2.0.1: kleur "^3.0.3" sisteransi "^1.0.5" +proxy-from-env@^1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz" + integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== + psl@^1.1.33: version "1.8.0" resolved "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz" @@ -3644,9 +4155,9 @@ punycode@^2.1.0, punycode@^2.1.1: integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== pure-rand@^6.0.0: - version "6.0.2" - resolved "https://registry.npmjs.org/pure-rand/-/pure-rand-6.0.2.tgz" - integrity sha512-6Yg0ekpKICSjPswYOuC5sku/TSWaRYlA0qsXqJgM/d/4pLPHPuTxK7Nbf7jFKzAeedUhR8C7K9Uv63FBsSo8xQ== + version "6.0.4" + resolved "https://registry.npmjs.org/pure-rand/-/pure-rand-6.0.4.tgz" + integrity sha512-LA0Y9kxMYv47GIPJy6MI84fqTd2HmYZI83W/kM/SkKfDlajnZYfmXFTxkbY+xSBPkLJxltMa9hIkmdc29eguMA== q@^1.2.0: version "1.5.1" @@ -3658,6 +4169,11 @@ querystringify@^2.1.1: resolved "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz" integrity sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ== +queue-microtask@^1.2.2: + version "1.2.3" + resolved "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz" + integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== + quick-lru@^5.1.1: version "5.1.1" resolved "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz" @@ -3755,11 +4271,11 @@ resolve.exports@^2.0.0: integrity sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg== resolve@^1.20.0: - version "1.22.2" - resolved "https://registry.npmjs.org/resolve/-/resolve-1.22.2.tgz" - integrity sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g== + version "1.22.6" + resolved "https://registry.npmjs.org/resolve/-/resolve-1.22.6.tgz" + integrity sha512-njhxM7mV12JfufShqGy3Rz8j11RPdLy4xi15UurGJeoHLfJpVXKdh3ueuOqbYUcDZnffr6X739JBo5LzyahEsw== dependencies: - is-core-module "^2.11.0" + is-core-module "^2.13.0" path-parse "^1.0.7" supports-preserve-symlinks-flag "^1.0.0" @@ -3778,6 +4294,11 @@ restore-cursor@^3.1.0: onetime "^5.1.0" signal-exit "^3.0.2" +reusify@^1.0.4: + version "1.0.4" + resolved "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz" + integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== + rimraf@^3.0.2: version "3.0.2" resolved "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz" @@ -3790,10 +4311,17 @@ run-async@^2.4.0: resolved "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz" integrity sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ== -rxjs@^7.5.5: - version "7.5.5" - resolved "https://registry.npmjs.org/rxjs/-/rxjs-7.5.5.tgz" - integrity sha512-sy+H0pQofO95VDmFLzyaw9xNJU4KTRSwQIGM6+iG3SypAtCiLDzpeG8sJrNCWn2Up9km+KhkvTdbkrdy+yzZdw== +run-parallel@^1.1.9: + version "1.2.0" + resolved "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz" + integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== + dependencies: + queue-microtask "^1.2.2" + +rxjs@^7.2.0, rxjs@^7.5.5: + version "7.8.1" + resolved "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz" + integrity sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg== dependencies: tslib "^2.1.0" @@ -3841,6 +4369,13 @@ semver@^7.5.3: dependencies: lru-cache "^6.0.0" +semver@^7.5.4: + version "7.5.4" + resolved "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz" + integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA== + dependencies: + lru-cache "^6.0.0" + serve-handler@6.1.5: version "6.1.5" resolved "https://registry.npmjs.org/serve-handler/-/serve-handler-6.1.5.tgz" @@ -3894,6 +4429,11 @@ signal-exit@^3.0.0, signal-exit@^3.0.2, signal-exit@^3.0.3, signal-exit@^3.0.7: resolved "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz" integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== +signal-exit@^4.0.1: + version "4.1.0" + resolved "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz" + integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw== + signale@^1.4.0: version "1.4.0" resolved "https://registry.npmjs.org/signale/-/signale-1.4.0.tgz" @@ -3970,6 +4510,15 @@ string-length@^4.0.1: char-regex "^1.0.2" strip-ansi "^6.0.0" +"string-width-cjs@npm:string-width@^4.2.0": + version "4.2.3" + resolved "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz" + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.1" + "string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: version "4.2.3" resolved "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz" @@ -3988,6 +4537,13 @@ string-width@^5.0.1, string-width@^5.1.2: emoji-regex "^9.2.2" strip-ansi "^7.0.1" +"strip-ansi-cjs@npm:strip-ansi@^6.0.1": + version "6.0.1" + resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== + dependencies: + ansi-regex "^5.0.1" + strip-ansi@^6.0.0, strip-ansi@^6.0.1: version "6.0.1" resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz" @@ -3996,9 +4552,9 @@ strip-ansi@^6.0.0, strip-ansi@^6.0.1: ansi-regex "^5.0.1" strip-ansi@^7.0.1: - version "7.0.1" - resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz" - integrity sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw== + version "7.1.0" + resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz" + integrity sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ== dependencies: ansi-regex "^6.0.1" @@ -4102,7 +4658,7 @@ text-table@^0.2.0: through@^2.3.6: version "2.3.8" resolved "https://registry.npmjs.org/through/-/through-2.3.8.tgz" - integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= + integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg== tmp@^0.0.33: version "0.0.33" @@ -4128,7 +4684,7 @@ to-regex-range@^5.0.1: dependencies: is-number "^7.0.0" -tough-cookie@^4.0.0, tough-cookie@>=2.3.3: +tough-cookie@^4.0.0, tough-cookie@^4.1.3, tough-cookie@>=2.3.3, tough-cookie@>=4.0.0: version "4.1.3" resolved "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.3.tgz" integrity sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw== @@ -4155,10 +4711,48 @@ triple-beam@^1.3.0: resolved "https://registry.npmjs.org/triple-beam/-/triple-beam-1.3.0.tgz" integrity sha512-XrHUvV5HpdLmIj4uVMxHggLbFSZYIn7HEWsqePZcI50pco+MPqJ50wMGY794X7AOOhxOBAjbkqfAbEe/QMp2Lw== +ts-api-utils@^1.0.1: + version "1.0.3" + resolved "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.0.3.tgz" + integrity sha512-wNMeqtMz5NtwpT/UZGY5alT+VoKdSsOOP/kqHFcUW1P/VRhH2wJ48+DN2WwUliNbQ976ETwDL0Ifd2VVvgonvg== + +ts-jest@^29.1.1: + version "29.1.1" + resolved "https://registry.npmjs.org/ts-jest/-/ts-jest-29.1.1.tgz" + integrity sha512-D6xjnnbP17cC85nliwGiL+tpoKN0StpgE0TeOjXQTU6MVCfsB4v7aW05CgQ/1OywGb0x/oy9hHFnN+sczTiRaA== + dependencies: + bs-logger "0.x" + fast-json-stable-stringify "2.x" + jest-util "^29.0.0" + json5 "^2.2.3" + lodash.memoize "4.x" + make-error "1.x" + semver "^7.5.3" + yargs-parser "^21.0.1" + +ts-node@^10.9.1, ts-node@>=9.0.0: + version "10.9.1" + resolved "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz" + integrity sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw== + dependencies: + "@cspotcode/source-map-support" "^0.8.0" + "@tsconfig/node10" "^1.0.7" + "@tsconfig/node12" "^1.0.7" + "@tsconfig/node14" "^1.0.0" + "@tsconfig/node16" "^1.0.2" + acorn "^8.4.1" + acorn-walk "^8.1.1" + arg "^4.1.0" + create-require "^1.1.0" + diff "^4.0.1" + make-error "^1.1.1" + v8-compile-cache-lib "^3.0.1" + yn "3.1.1" + tslib@^2.1.0: - version "2.4.0" - resolved "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz" - integrity sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ== + version "2.6.2" + resolved "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz" + integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q== type-check@^0.4.0, type-check@~0.4.0: version "0.4.0" @@ -4187,6 +4781,11 @@ type-fest@^2.13.0: resolved "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz" integrity sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA== +typescript@>=2.7, typescript@>=4.2.0, "typescript@>=4.3 <6": + version "5.2.2" + resolved "https://registry.npmjs.org/typescript/-/typescript-5.2.2.tgz" + integrity sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w== + universal-user-agent@^6.0.0: version "6.0.0" resolved "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-6.0.0.tgz" @@ -4250,6 +4849,11 @@ uzip-module@^1.0.2: resolved "https://registry.npmjs.org/uzip-module/-/uzip-module-1.0.3.tgz" integrity sha512-AMqwWZaknLM77G+VPYNZLEruMGWGzyigPK3/Whg99B3S6vGHuqsyl5ZrOv1UUF3paGK1U6PM0cnayioaryg/fA== +v8-compile-cache-lib@^3.0.1: + version "3.0.1" + resolved "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz" + integrity sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg== + v8-compile-cache@^2.0.3: version "2.3.0" resolved "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz" @@ -4279,7 +4883,7 @@ walker@^1.0.8: wcwidth@^1.0.1: version "1.0.1" resolved "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz" - integrity sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g= + integrity sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg== dependencies: defaults "^1.0.3" @@ -4347,6 +4951,24 @@ winston@^3.3.3: triple-beam "^1.3.0" winston-transport "^4.5.0" +"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0": + version "7.0.0" + resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz" + integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + +wrap-ansi@^6.0.1: + version "6.2.0" + resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz" + integrity sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + wrap-ansi@^7.0.0: version "7.0.0" resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz" @@ -4365,6 +4987,15 @@ wrap-ansi@^8.0.1: string-width "^5.0.1" strip-ansi "^7.0.1" +wrap-ansi@^8.1.0: + version "8.1.0" + resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz" + integrity sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ== + dependencies: + ansi-styles "^6.1.0" + string-width "^5.0.1" + strip-ansi "^7.0.1" + wrappy@1: version "1.0.2" resolved "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz" @@ -4405,6 +5036,11 @@ yargs-parser@^20.2.2: resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz" integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== +yargs-parser@^21.0.1: + version "21.1.1" + resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz" + integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== + yargs-parser@^21.1.1: version "21.1.1" resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz" @@ -4436,6 +5072,11 @@ yargs@^17.3.1: y18n "^5.0.5" yargs-parser "^21.1.1" +yn@3.1.1: + version "3.1.1" + resolved "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz" + integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q== + yocto-queue@^0.1.0: version "0.1.0" resolved "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz" From 02edf164f7a56ab5f6b54e0bb1e6327a54f4c31e Mon Sep 17 00:00:00 2001 From: freearhey <7253922+freearhey@users.noreply.github.com> Date: Mon, 2 Oct 2023 06:27:44 +0300 Subject: [PATCH 04/19] Delete .eslintrc.js --- .eslintrc.js | 11 ----------- 1 file changed, 11 deletions(-) delete mode 100644 .eslintrc.js diff --git a/.eslintrc.js b/.eslintrc.js deleted file mode 100644 index d9f31254..00000000 --- a/.eslintrc.js +++ /dev/null @@ -1,11 +0,0 @@ -module.exports = { - env: { - browser: false, - node: true, - es6: true - }, - extends: 'eslint:recommended', - parserOptions: { - ecmaVersion: 12 - } -} From eceeb986e023bdd568780f0e5bd9ba1dffad62e0 Mon Sep 17 00:00:00 2001 From: freearhey <7253922+freearhey@users.noreply.github.com> Date: Mon, 2 Oct 2023 06:27:51 +0300 Subject: [PATCH 05/19] Create .eslintrc.json --- .eslintrc.json | 39 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 .eslintrc.json diff --git a/.eslintrc.json b/.eslintrc.json new file mode 100644 index 00000000..1841e40d --- /dev/null +++ b/.eslintrc.json @@ -0,0 +1,39 @@ +{ + "env": { + "node": true, + "es2021": true, + "jest": true + }, + "extends": [ + "eslint:recommended", + "plugin:@typescript-eslint/recommended", + "prettier" + ], + "parser": "@typescript-eslint/parser", + "parserOptions": { + "ecmaVersion": "latest", + "sourceType": "module" + }, + "plugins": [ + "@typescript-eslint" + ], + "rules": { + "@typescript-eslint/no-var-requires": "off", + "no-case-declarations": "off", + "linebreak-style": [ + "error", + "unix" + ], + "quotes": [ + "error", + "single", + { + "avoidEscape": true + } + ], + "semi": [ + "error", + "never" + ] + } +} \ No newline at end of file From 2b9a4da659ff1a8ae33f8ddddd58f935d569c465 Mon Sep 17 00:00:00 2001 From: freearhey <7253922+freearhey@users.noreply.github.com> Date: Mon, 2 Oct 2023 06:27:58 +0300 Subject: [PATCH 06/19] Delete .prettierignore --- .prettierignore | 3 --- 1 file changed, 3 deletions(-) delete mode 100644 .prettierignore diff --git a/.prettierignore b/.prettierignore deleted file mode 100644 index 934ca0a1..00000000 --- a/.prettierignore +++ /dev/null @@ -1,3 +0,0 @@ -* -!*.js -!*/ \ No newline at end of file From c21c082d42626c9116e9f07ef18b6594d46d4c84 Mon Sep 17 00:00:00 2001 From: freearhey <7253922+freearhey@users.noreply.github.com> Date: Mon, 2 Oct 2023 06:28:05 +0300 Subject: [PATCH 07/19] Update .prettierrc.js --- .prettierrc.js | 2 -- 1 file changed, 2 deletions(-) diff --git a/.prettierrc.js b/.prettierrc.js index 887a12b7..56f939b5 100644 --- a/.prettierrc.js +++ b/.prettierrc.js @@ -6,7 +6,5 @@ module.exports = { singleQuote: true, printWidth: 100, trailingComma: 'none', - bracketSpacing: true, - singleAttributePerLine: false, arrowParens: 'avoid' } From 64c2aba7d9e9e1c6df0c24df669b010da21545b4 Mon Sep 17 00:00:00 2001 From: freearhey <7253922+freearhey@users.noreply.github.com> Date: Mon, 2 Oct 2023 06:28:18 +0300 Subject: [PATCH 08/19] Create tsconfig.json --- tsconfig.json | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 tsconfig.json diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 00000000..24e7b3d5 --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,19 @@ +{ + "compilerOptions": { + "strict": true, + "module": "commonjs", + "moduleResolution": "node", + "target": "es2020", + "esModuleInterop": true, + "declaration": true, + "typeRoots": [ + "./node_modules/@types", + "./src/types" + ], + "allowJs": true + }, + "ts-node": { + "esm": true, + "transpileOnly": true + } +} \ No newline at end of file From b5bd428ea6ac01c6e09718f6b480de23ff014a53 Mon Sep 17 00:00:00 2001 From: freearhey <7253922+freearhey@users.noreply.github.com> Date: Mon, 2 Oct 2023 06:29:52 +0300 Subject: [PATCH 09/19] Update .gitignore --- .gitignore | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/.gitignore b/.gitignore index 0538272b..03241fd4 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,5 @@ /node_modules/ -/logs/ +/temp/ +/channels.xml /guide.xml -/guide.xml.gz -/.jenkins/ -/guides/ \ No newline at end of file +/guide.xml.gz \ No newline at end of file From ab533e348e81f8eaca4b8f958afb82d02fff9403 Mon Sep 17 00:00:00 2001 From: freearhey <7253922+freearhey@users.noreply.github.com> Date: Mon, 2 Oct 2023 06:30:39 +0300 Subject: [PATCH 10/19] Update package.json --- package.json | 61 ++++++++++++++++++++++++++++++---------------------- 1 file changed, 35 insertions(+), 26 deletions(-) diff --git a/package.json b/package.json index 4c3aca8c..8d1f97d4 100644 --- a/package.json +++ b/package.json @@ -1,51 +1,59 @@ { "name": "epg", "scripts": { - "channels:validate": "node scripts/commands/channels/validate.js", - "channels:lint": "node scripts/commands/channels/lint.js", - "channels:parse": "node scripts/commands/channels/parse.js", - "channels:editor": "node scripts/commands/channels/editor.js", - "api:load": "./scripts/commands/api/load.sh", - "lint": "npx eslint ./scripts/**/*.js", - "test": "TZ=Pacific/Nauru npx jest --runInBand", - "test:commands": "npx jest --runInBand -- commands", - "test:sites": "TZ=Pacific/Nauru npx jest --runInBand -- sites", - "check": "npm run api:load && npm run channels:lint sites/**/*.js && npm run channels:validate sites/**/*.xml", - "grab": "node scripts/commands/epg/grab.js", + "api:load": "ts-node scripts/commands/api/load.ts", + "channels:lint": "ts-node scripts/commands/channels/lint.ts", + "channels:parse": "ts-node scripts/commands/channels/parse.ts", + "channels:editor": "ts-node scripts/commands/channels/editor.ts", + "channels:validate": "ts-node scripts/commands/channels/validate.ts", + "grab": "ts-node scripts/commands/epg/grab.ts", "serve": "npx serve", + "lint": "npx eslint ./scripts/**/*.ts ./sites/**/*.js ./tests/**/*.ts ./tests/**/*.js", + "test": "TZ=Pacific/Nauru npx jest --runInBand", "postinstall": "npm run api:load" }, "private": true, "author": "Arhey", "license": "MIT", "jest": { - "modulePathIgnorePatterns": [ - "/.jenkins/" - ], - "testRegex": "(sites|tests)/(.*?/)?.*test.js$", - "setupFilesAfterEnv": [ - "@alex_neo/jest-expect-message" - ] + "transform": { + "^.+\\.(ts|js)$": "ts-jest" + }, + "testRegex": "(tests|sites)/(.*?/)?.*test.(js|ts)$" }, "dependencies": { "@alex_neo/jest-expect-message": "^1.0.5", + "@freearhey/core": "^0.2.1", "@octokit/core": "^4.1.0", - "axios": "^0.21.1", + "@types/cli-progress": "^3.11.3", + "@types/fs-extra": "^11.0.2", + "@types/inquirer": "^9.0.3", + "@types/jest": "^29.5.5", + "@types/lodash": "^4.14.199", + "@types/node-cleanup": "^2.1.2", + "@types/numeral": "^2.0.3", + "@typescript-eslint/eslint-plugin": "^6.7.3", + "axios": "^1.5.1", + "axios-cookiejar-support": "^4.0.7", "chalk": "^4.1.2", "cheerio": "^1.0.0-rc.10", + "cli-progress": "^3.12.0", "commander": "^8.2.0", "consola": "^3.2.3", - "cron": "^2.3.1", + "cron": "^2.4.3", "csv-parser": "^3.0.0", + "cwait": "^1.1.2", "dayjs": "^1.11.7", - "epg-grabber": "^0.32.0", + "epg-grabber": "^0.34.0", "epg-parser": "^0.2.0", + "eslint": "^8.17.0", + "eslint-config-prettier": "^9.0.0", "form-data": "^4.0.0", "fs-extra": "^10.0.1", "glob": "^7.2.0", "iconv-lite": "^0.4.24", - "inquirer": "^8.2.0", - "jest": "^29.5.0", + "inquirer": "^8.2.6", + "jest": "^29.7.0", "langs": "^2.0.0", "libxmljs2": "^0.32.0", "lodash": "^4.17.21", @@ -55,6 +63,7 @@ "nedb-promises": "^6.0.3", "node-cleanup": "^2.1.2", "node-gzip": "^1.1.2", + "numeral": "^2.0.6", "parse-duration": "^1.0.0", "pdf-parse": "^1.1.1", "serve": "^14.2.0", @@ -62,11 +71,11 @@ "srcset": "^4.0.0", "table2array": "^0.0.2", "tabletojson": "^2.0.7", + "tough-cookie": "^4.1.3", "transliteration": "^2.2.0", + "ts-jest": "^29.1.1", + "ts-node": "^10.9.1", "unzipit": "^1.4.0", "wildcard-match": "^5.1.2" - }, - "devDependencies": { - "eslint": "^8.17.0" } } From b7214db4fb42762d6b65062cdfc96dd5a88dae6c Mon Sep 17 00:00:00 2001 From: freearhey <7253922+freearhey@users.noreply.github.com> Date: Mon, 2 Oct 2023 06:30:53 +0300 Subject: [PATCH 11/19] Update tests --- tests/commands/channels/lint.test.ts | 10 ++++------ tests/commands/channels/validate.test.ts | 4 ++-- 2 files changed, 6 insertions(+), 8 deletions(-) diff --git a/tests/commands/channels/lint.test.ts b/tests/commands/channels/lint.test.ts index 2f9baed8..794cad23 100644 --- a/tests/commands/channels/lint.test.ts +++ b/tests/commands/channels/lint.test.ts @@ -9,7 +9,7 @@ describe('channels:lint', () => { it('will show a message if the file contains a syntax error', () => { try { const stdout = execSync( - 'npm run channels:lint -- tests/__data__/input/channels-lint/channels-lint.channels.xml', + 'npm run channels:lint -- --channels=tests/__data__/input/channels-lint/channels-lint.channels.xml', { encoding: 'utf8' } @@ -18,11 +18,9 @@ describe('channels:lint', () => { process.exit(1) } catch (error) { expect((error as ExecError).status).toBe(1) - expect( - (error as ExecError).stdout.includes( - "tests/__data__/input/channels-lint/channels-lint.channels.xml\n\n\ntests/__data__/input/channels-lint/channels-lint.channels.xml\n 3:0 Element 'channel': The attribute 'lang' is required but missing.\n\n1 error(s)\n" - ) - ).toBe(true) + expect((error as ExecError).stdout).toContain( + "tests/__data__/input/channels-lint/channels-lint.channels.xml\n 3:0 Element 'channel': The attribute 'lang' is required but missing.\n\n1 error(s)\n" + ) } }) }) diff --git a/tests/commands/channels/validate.test.ts b/tests/commands/channels/validate.test.ts index 5b225499..635e6164 100644 --- a/tests/commands/channels/validate.test.ts +++ b/tests/commands/channels/validate.test.ts @@ -9,7 +9,7 @@ describe('channels:validate', () => { it('will show a message if the file contains a duplicate', () => { try { const stdout = execSync( - 'DATA_DIR=tests/__data__/input/temp/data npm run channels:validate -- tests/__data__/input/channels-validate/duplicate.channels.xml', + 'DATA_DIR=tests/__data__/input/temp/data npm run channels:validate -- --channels=tests/__data__/input/channels-validate/duplicate.channels.xml', { encoding: 'utf8' } @@ -34,7 +34,7 @@ describe('channels:validate', () => { it('will show a message if the file contains a channel with wrong xmltv_id', () => { try { const stdout = execSync( - 'DATA_DIR=tests/__data__/input/temp/data npm run channels:validate -- tests/__data__/input/channels-validate/wrong_xmltv_id.channels.xml', + 'DATA_DIR=tests/__data__/input/temp/data npm run channels:validate -- --channels=tests/__data__/input/channels-validate/wrong_xmltv_id.channels.xml', { encoding: 'utf8' } From ca254a6df0a1daf80884e2b2fefb19708c459218 Mon Sep 17 00:00:00 2001 From: freearhey <7253922+freearhey@users.noreply.github.com> Date: Mon, 2 Oct 2023 06:31:57 +0300 Subject: [PATCH 12/19] Update scripts --- scripts/commands/api/load.sh | 7 - scripts/commands/api/load.ts | 18 ++ scripts/commands/channels/.gitignore | 1 + scripts/commands/channels/editor.js | 160 ------------- scripts/commands/channels/editor.ts | 181 ++++++++++++++ .../commands/channels/{lint.js => lint.ts} | 62 ++--- scripts/commands/channels/parse.js | 65 ------ scripts/commands/channels/parse.ts | 76 ++++++ scripts/commands/channels/validate.js | 68 ------ scripts/commands/channels/validate.ts | 95 ++++++++ scripts/commands/epg/grab.js | 220 ------------------ scripts/commands/epg/grab.ts | 115 +++++++++ scripts/constants.ts | 4 + scripts/core/api.js | 32 --- scripts/core/apiChannel.ts | 79 +++++++ scripts/core/apiClient.ts | 59 +++++ scripts/core/channelsParser.ts | 24 ++ scripts/core/configLoader.ts | 19 ++ scripts/core/db.js | 76 ------ scripts/core/file.js | 93 -------- scripts/core/grabber.ts | 75 ++++++ scripts/core/guide.ts | 55 +++++ scripts/core/guideManager.ts | 61 +++++ scripts/core/index.js | 11 - scripts/core/index.ts | 11 + scripts/core/job.ts | 34 +++ scripts/core/logger.js | 3 - scripts/core/markdown.js | 10 - scripts/core/parser.js | 29 --- scripts/core/queue.ts | 94 ++++++++ scripts/core/table.js | 47 ---- scripts/core/timer.js | 29 --- scripts/core/{xml.js => xml.ts} | 49 ++-- scripts/core/xmltv.ts | 28 +++ scripts/core/zip.js | 13 -- scripts/tmp/.gitignore | 2 - scripts/types/langs.d.ts | 1 + 37 files changed, 1091 insertions(+), 915 deletions(-) delete mode 100755 scripts/commands/api/load.sh create mode 100644 scripts/commands/api/load.ts create mode 100644 scripts/commands/channels/.gitignore delete mode 100644 scripts/commands/channels/editor.js create mode 100644 scripts/commands/channels/editor.ts rename scripts/commands/channels/{lint.js => lint.ts} (53%) delete mode 100644 scripts/commands/channels/parse.js create mode 100644 scripts/commands/channels/parse.ts delete mode 100644 scripts/commands/channels/validate.js create mode 100644 scripts/commands/channels/validate.ts delete mode 100644 scripts/commands/epg/grab.js create mode 100644 scripts/commands/epg/grab.ts create mode 100644 scripts/constants.ts delete mode 100644 scripts/core/api.js create mode 100644 scripts/core/apiChannel.ts create mode 100644 scripts/core/apiClient.ts create mode 100644 scripts/core/channelsParser.ts create mode 100644 scripts/core/configLoader.ts delete mode 100644 scripts/core/db.js delete mode 100644 scripts/core/file.js create mode 100644 scripts/core/grabber.ts create mode 100644 scripts/core/guide.ts create mode 100644 scripts/core/guideManager.ts delete mode 100644 scripts/core/index.js create mode 100644 scripts/core/index.ts create mode 100644 scripts/core/job.ts delete mode 100644 scripts/core/logger.js delete mode 100644 scripts/core/markdown.js delete mode 100644 scripts/core/parser.js create mode 100644 scripts/core/queue.ts delete mode 100644 scripts/core/table.js delete mode 100644 scripts/core/timer.js rename scripts/core/{xml.js => xml.ts} (53%) create mode 100644 scripts/core/xmltv.ts delete mode 100644 scripts/core/zip.js delete mode 100644 scripts/tmp/.gitignore create mode 100644 scripts/types/langs.d.ts diff --git a/scripts/commands/api/load.sh b/scripts/commands/api/load.sh deleted file mode 100755 index 614bc110..00000000 --- a/scripts/commands/api/load.sh +++ /dev/null @@ -1,7 +0,0 @@ -#!/bin/bash - -mkdir -p scripts/tmp/data -curl -L -o scripts/tmp/data/channels.json https://iptv-org.github.io/api/channels.json -curl -L -o scripts/tmp/data/countries.json https://iptv-org.github.io/api/countries.json -curl -L -o scripts/tmp/data/regions.json https://iptv-org.github.io/api/regions.json -curl -L -o scripts/tmp/data/subdivisions.json https://iptv-org.github.io/api/subdivisions.json \ No newline at end of file diff --git a/scripts/commands/api/load.ts b/scripts/commands/api/load.ts new file mode 100644 index 00000000..845b6c89 --- /dev/null +++ b/scripts/commands/api/load.ts @@ -0,0 +1,18 @@ +import { Logger } from '@freearhey/core' +import { ApiClient } from '../../core' + +async function main() { + const logger = new Logger() + const client = new ApiClient({ logger }) + + const requests = [ + client.download('channels.json'), + client.download('countries.json'), + client.download('regions.json'), + client.download('subdivisions.json') + ] + + await Promise.all(requests) +} + +main() diff --git a/scripts/commands/channels/.gitignore b/scripts/commands/channels/.gitignore new file mode 100644 index 00000000..c7b0476d --- /dev/null +++ b/scripts/commands/channels/.gitignore @@ -0,0 +1 @@ +/replace.ts \ No newline at end of file diff --git a/scripts/commands/channels/editor.js b/scripts/commands/channels/editor.js deleted file mode 100644 index 531f2d96..00000000 --- a/scripts/commands/channels/editor.js +++ /dev/null @@ -1,160 +0,0 @@ -const { api, parser, xml, file, logger } = require('../../core') -const { transliterate } = require('transliteration') -const nodeCleanup = require('node-cleanup') -const { program } = require('commander') -const inquirer = require('inquirer') - -program - .argument('', 'Path to *.channels.xml file to edit') - .option('-c, --country ', 'Source country', 'us') - .parse(process.argv) - -const filepath = program.args[0] -const options = program.opts() -const defaultCountry = options.country -const newLabel = ` [new]` - -let site -let channels = [] - -async function main() { - if (!(await file.exists(filepath))) { - throw new Error(`File "${filepath}" does not exists`) - return - } - - let result = await parser.parseChannels(filepath) - site = result.site - channels = result.channels - channels = channels.map(c => { - c.xmltv_id = c.xmltv_id - return c - }) - await api.channels.load() - const buffer = [] - for (const channel of channels) { - if (channel.xmltv_id) { - if (channel.xmltv_id !== '-') { - buffer.push(`${channel.xmltv_id}/${channel.lang}`) - } - continue - } - let choices = await getOptions(channel) - const question = { - name: 'option', - message: `Choose an option:`, - type: 'list', - choices, - pageSize: 10 - } - await inquirer.prompt(question).then(async selected => { - switch (selected.option) { - case 'Overwrite': - const input = await getInput(channel) - channel.xmltv_id = input.xmltv_id - break - case 'Skip': - channel.xmltv_id = '-' - break - default: - const [name, xmltv_id] = selected.option - .replace(/ \[.*\]/, '') - .split('|') - .map(i => i.trim().replace(newLabel, '')) - channel.xmltv_id = xmltv_id - break - } - - const found = buffer.includes(`${channel.xmltv_id}/${channel.lang}`) - if (found) { - const question = { - name: 'option', - message: `"${channel.xmltv_id}" already on the list. Choose an option:`, - type: 'list', - choices: ['Skip', 'Add', 'Delete'], - pageSize: 5 - } - await inquirer.prompt(question).then(async selected => { - switch (selected.option) { - case 'Skip': - channel.xmltv_id = '-' - break - case 'Delete': - channel.delete = true - break - default: - break - } - }) - } else { - if (channel.xmltv_id !== '-') { - buffer.push(`${channel.xmltv_id}/${channel.lang}`) - } - } - }) - } -} - -main() - -function save() { - if (!file.existsSync(filepath)) return - - channels = channels.filter(c => !c.delete) - - const output = xml.create(channels, site) - - file.writeSync(filepath, output) - - logger.info(`\nFile '${filepath}' successfully saved`) -} - -nodeCleanup(() => { - save() -}) - -async function getInput(channel) { - const name = channel.name.trim() - const input = await inquirer.prompt([ - { - name: 'xmltv_id', - message: ' ID:', - type: 'input', - default: generateCode(name, defaultCountry) - } - ]) - - return { name, xmltv_id: input['xmltv_id'] } -} - -async function getOptions(channel) { - const channels = await api.channels.all() - const channelId = generateCode(channel.name, defaultCountry) - const similar = await getSimilar(channels, channelId) - let variants = [] - variants.push(`${channel.name.trim()} | ${channelId}${newLabel}`) - similar.forEach(i => { - let alt_names = i.alt_names.length ? ` (${i.alt_names.join(',')})` : '' - let closed = i.closed ? `[closed:${i.closed}]` : `` - let replaced_by = i.replaced_by ? `[replaced_by:${i.replaced_by}]` : '' - variants.push(`${i.name}${alt_names} | ${i.id} ${closed}${replaced_by}[api]`) - }) - variants.push(`Overwrite`) - variants.push(`Skip`) - - return variants -} - -async function getSimilar(list, channelId) { - const normChannelId = channelId.split('.')[0].slice(0, 8).toLowerCase() - return list.filter(i => i.id.split('.')[0].toLowerCase().startsWith(normChannelId)) -} - -function generateCode(name, country) { - const id = transliterate(name) - .replace(/\+/gi, 'Plus') - .replace(/^\&/gi, 'And') - .replace(/[^a-z\d]+/gi, '') - - return `${id}.${country}` -} diff --git a/scripts/commands/channels/editor.ts b/scripts/commands/channels/editor.ts new file mode 100644 index 00000000..48682ff8 --- /dev/null +++ b/scripts/commands/channels/editor.ts @@ -0,0 +1,181 @@ +import { DATA_DIR } from '../../constants' +import { Storage, Collection, Dictionary, Logger } from '@freearhey/core' +import { ChannelsParser, XML, ApiChannel } from '../../core' +import { Channel } from 'epg-grabber' +import { transliterate } from 'transliteration' +import nodeCleanup from 'node-cleanup' +import { program } from 'commander' +import inquirer, { QuestionCollection } from 'inquirer' + +program + .argument('', 'Path to *.channels.xml file to edit') + .option('-c, --country ', 'Source country', 'us') + .parse(process.argv) + +const filepath = program.args[0] +const programOptions = program.opts() +const defaultCountry = programOptions.country +const newLabel = ` [new]` + +let site: string +let options = new Collection() + +async function main() { + const storage = new Storage() + + if (!(await storage.exists(filepath))) { + throw new Error(`File "${filepath}" does not exists`) + } + + const parser = new ChannelsParser({ storage }) + + const parsedChannels = await parser.parse(filepath) + options = parsedChannels.map((channel: Channel) => { + return { + channel, + delete: false + } + }) + + const dataStorage = new Storage(DATA_DIR) + const channelsContent = await dataStorage.json('channels.json') + const channels = new Collection(channelsContent).map(data => new ApiChannel(data)) + + const buffer = new Dictionary() + options.forEach(async (option: { channel: Channel; delete: boolean }) => { + const channel = option.channel + if (channel.xmltv_id) { + if (channel.xmltv_id !== '-') { + buffer.set(`${channel.xmltv_id}/${channel.lang}`, true) + } + return + } + let choices = getOptions(channels, channel) + const question: QuestionCollection = { + name: 'option', + message: `Choose an option:`, + type: 'list', + choices, + pageSize: 10 + } + + await inquirer.prompt(question).then(async selected => { + switch (selected.option) { + case 'Overwrite': + const input = await getInput(channel) + channel.xmltv_id = input.xmltv_id + break + case 'Skip': + channel.xmltv_id = '-' + break + default: + const [, xmltv_id] = selected.option + .replace(/ \[.*\]/, '') + .split('|') + .map((i: string) => i.trim().replace(newLabel, '')) + channel.xmltv_id = xmltv_id + break + } + + const found = buffer.has(`${channel.xmltv_id}/${channel.lang}`) + if (found) { + const question: QuestionCollection = { + name: 'option', + message: `"${channel.xmltv_id}" already on the list. Choose an option:`, + type: 'list', + choices: ['Skip', 'Add', 'Delete'], + pageSize: 5 + } + await inquirer.prompt(question).then(async selected => { + switch (selected.option) { + case 'Skip': + channel.xmltv_id = '-' + break + case 'Delete': + option.delete = true + break + default: + break + } + }) + } else { + if (channel.xmltv_id !== '-') { + buffer.set(`${channel.xmltv_id}/${channel.lang}`, true) + } + } + }) + }) +} + +main() + +function save() { + const logger = new Logger() + const storage = new Storage() + + if (!storage.existsSync(filepath)) return + + const channels = options + .filter((option: { channel: Channel; delete: boolean }) => !option.delete) + .map((option: { channel: Channel; delete: boolean }) => option.channel) + + const xml = new XML(channels, site) + + storage.saveSync(filepath, xml.toString()) + + logger.info(`\nFile '${filepath}' successfully saved`) +} + +nodeCleanup(() => { + save() +}) + +async function getInput(channel: Channel) { + const name = channel.name.trim() + const input = await inquirer.prompt([ + { + name: 'xmltv_id', + message: ' ID:', + type: 'input', + default: generateCode(name, defaultCountry) + } + ]) + + return { name, xmltv_id: input['xmltv_id'] } +} + +function getOptions(channels: Collection, channel: Channel) { + const channelId = generateCode(channel.name, defaultCountry) + const similar = getSimilar(channels, channelId) + + const variants = new Collection() + variants.add(`${channel.name.trim()} | ${channelId}${newLabel}`) + similar.forEach((_channel: ApiChannel) => { + const altNames = _channel.altNames.notEmpty() ? ` (${_channel.altNames.join(',')})` : '' + const closed = _channel.closed ? `[closed:${_channel.closed}]` : `` + const replacedBy = _channel.replacedBy ? `[replaced_by:${_channel.replacedBy}]` : '' + + variants.add(`${_channel.name}${altNames} | ${_channel.id} ${closed}${replacedBy}[api]`) + }) + variants.add(`Overwrite`) + variants.add(`Skip`) + + return variants.all() +} + +function getSimilar(channels: Collection, channelId: string) { + const normChannelId = channelId.split('.')[0].slice(0, 8).toLowerCase() + + return channels.filter((channel: ApiChannel) => + channel.id.split('.')[0].toLowerCase().startsWith(normChannelId) + ) +} + +function generateCode(name: string, country: string) { + const channelId: string = transliterate(name) + .replace(/\+/gi, 'Plus') + .replace(/^\&/gi, 'And') + .replace(/[^a-z\d]+/gi, '') + + return `${channelId}.${country}` +} diff --git a/scripts/commands/channels/lint.js b/scripts/commands/channels/lint.ts similarity index 53% rename from scripts/commands/channels/lint.js rename to scripts/commands/channels/lint.ts index 28ad4eeb..e486f9d1 100644 --- a/scripts/commands/channels/lint.js +++ b/scripts/commands/channels/lint.ts @@ -1,18 +1,10 @@ -const chalk = require('chalk') -const libxml = require('libxmljs2') -const { program } = require('commander') -const { logger, file } = require('../../core') +import chalk from 'chalk' +import libxml, { ValidationError } from 'libxmljs2' +import { program } from 'commander' +import { Logger, Storage, File } from '@freearhey/core' const xsd = ` - - - - - - - - @@ -22,43 +14,53 @@ const xsd = ` + + ` -program.argument('', 'Path to file to validate').parse(process.argv) +program + .option( + '-c, --channels ', + 'Path to channels.xml file to validate', + 'sites/**/*.channels.xml' + ) + .parse(process.argv) + +const options = program.opts() async function main() { - if (!program.args.length) { - logger.error('required argument "filepath" not specified') - } + const logger = new Logger() + const storage = new Storage() - let errors = [] + logger.info('options:') + logger.tree(options) - for (const filepath of program.args) { - if (!filepath.endsWith('.xml')) continue + let errors: ValidationError[] = [] - const xml = await file.read(filepath) + let files: string[] = await storage.list(options.channels) + for (const filepath of files) { + const file = new File(filepath) + if (file.extension() !== 'xml') continue - let localErrors = [] + const xml = await storage.load(filepath) - try { - const xsdDoc = libxml.parseXml(xsd) - const doc = libxml.parseXml(xml) + let localErrors: ValidationError[] = [] - if (!doc.validate(xsdDoc)) { - localErrors = doc.validationErrors - } - } catch (error) { - localErrors.push(error) + const xsdDoc = libxml.parseXml(xsd) + const doc = libxml.parseXml(xml) + + if (!doc.validate(xsdDoc)) { + localErrors = doc.validationErrors } if (localErrors.length) { console.log(`\n${chalk.underline(filepath)}`) - localErrors.forEach(error => { + localErrors.forEach((error: ValidationError) => { const position = `${error.line}:${error.column}` console.log(` ${chalk.gray(position.padEnd(4, ' '))} ${error.message.trim()}`) }) diff --git a/scripts/commands/channels/parse.js b/scripts/commands/channels/parse.js deleted file mode 100644 index c0f4e24e..00000000 --- a/scripts/commands/channels/parse.js +++ /dev/null @@ -1,65 +0,0 @@ -const { logger, file, xml, parser } = require('../../core') -const { Command } = require('commander') -const path = require('path') -const _ = require('lodash') - -const program = new Command() -program - .requiredOption('-c, --config ', 'Config file') - .option('-s, --set [args...]', 'Set custom arguments', []) - .option('-o, --output ', 'Output file') - .option('--clean', 'Delete the previous *.channels.xml if exists') - .parse(process.argv) - -const options = program.opts() - -async function main() { - const config = require(path.resolve(options.config)) - const dir = file.dirname(options.config) - const outputFilepath = options.output || `${dir}/${config.site}.channels.xml` - - let channels = [] - if (!options.clean && (await file.exists(outputFilepath))) { - let result = await parser.parseChannels(outputFilepath) - - channels = result.channels - } - - const args = {} - options.set.forEach(arg => { - const [key, value] = arg.split(':') - args[key] = value - }) - - let parsedChannels = config.channels(args) - if (isPromise(parsedChannels)) { - parsedChannels = await parsedChannels - } - parsedChannels = parsedChannels.map(c => { - c.lang = c.lang || 'en' - - return c - }) - - channels = channels.concat(parsedChannels) - - channels = _.uniqBy(channels, c => c.site_id + c.lang) - - channels = _.sortBy(channels, [ - 'lang', - c => (c.xmltv_id ? c.xmltv_id.toLowerCase() : '_'), - 'site_id' - ]) - - const output = xml.create(channels, config.site) - - await file.write(outputFilepath, output) - - logger.info(`File '${outputFilepath}' successfully saved`) -} - -main() - -function isPromise(promise) { - return !!promise && typeof promise.then === 'function' -} diff --git a/scripts/commands/channels/parse.ts b/scripts/commands/channels/parse.ts new file mode 100644 index 00000000..63223673 --- /dev/null +++ b/scripts/commands/channels/parse.ts @@ -0,0 +1,76 @@ +import { Logger, File, Collection, Storage } from '@freearhey/core' +import { ChannelsParser, XML } from '../../core' +import { Channel } from 'epg-grabber' +import { Command, OptionValues } from 'commander' +import path from 'path' + +const program = new Command() +program + .requiredOption('-c, --config ', 'Config file') + .option('-s, --set [args...]', 'Set custom arguments') + .option('-o, --output ', 'Output file') + .option('--clean', 'Delete the previous *.channels.xml if exists') + .parse(process.argv) + +type ParseOptions = { + config: string + set?: string + output?: string + clean?: boolean +} + +const options: ParseOptions = program.opts() + +async function main() { + const storage = new Storage() + const parser = new ChannelsParser({ storage }) + const logger = new Logger() + const file = new File(options.config) + const dir = file.dirname() + const config = require(path.resolve(options.config)) + const outputFilepath = options.output || `${dir}/${config.site}.channels.xml` + + let channels = new Collection() + if (!options.clean && (await storage.exists(outputFilepath))) { + channels = await parser.parse(outputFilepath) + } + + const args: { + [key: string]: any + } = {} + + if (Array.isArray(options.set)) { + options.set.forEach((arg: string) => { + const [key, value] = arg.split(':') + args[key] = value + }) + } + + let parsedChannels = config.channels(args) + if (isPromise(parsedChannels)) { + parsedChannels = await parsedChannels + } + + channels = channels + .mergeBy( + new Collection(parsedChannels), + (channel: Channel) => channel.site_id.toString() + channel.lang + ) + .orderBy([ + (channel: Channel) => channel.lang, + (channel: Channel) => (channel.xmltv_id ? channel.xmltv_id.toLowerCase() : '_'), + (channel: Channel) => channel.site_id + ]) + + const xml = new XML(channels, config.site) + + await storage.save(outputFilepath, xml.toString()) + + logger.info(`File '${outputFilepath}' successfully saved`) +} + +main() + +function isPromise(promise: any) { + return !!promise && typeof promise.then === 'function' +} diff --git a/scripts/commands/channels/validate.js b/scripts/commands/channels/validate.js deleted file mode 100644 index 23ebed10..00000000 --- a/scripts/commands/channels/validate.js +++ /dev/null @@ -1,68 +0,0 @@ -const { parser, logger, api } = require('../../core') -const { program } = require('commander') -const chalk = require('chalk') -const langs = require('langs') - -program.argument('', 'Path to file to validate').parse(process.argv) - -async function main() { - await api.channels.load() - - const stats = { - files: 0, - errors: 0 - } - - if (!program.args.length) { - logger.error('required argument "filepath" not specified') - } - - for (const filepath of program.args) { - if (!filepath.endsWith('.xml')) continue - - const { site, channels } = await parser.parseChannels(filepath) - - const bufferById = {} - const bufferBySiteId = {} - const errors = [] - for (const channel of channels) { - if (!bufferById[channel.xmltv_id + channel.lang]) { - bufferById[channel.xmltv_id + channel.lang] = channel - } else { - errors.push({ type: 'duplicate', ...channel }) - stats.errors++ - } - - if (!bufferBySiteId[channel.site_id + channel.lang]) { - bufferBySiteId[channel.site_id + channel.lang] = channel - } else { - errors.push({ type: 'duplicate', ...channel }) - stats.errors++ - } - - if (!api.channels.find({ id: channel.xmltv_id })) { - errors.push({ type: 'wrong_xmltv_id', ...channel }) - stats.errors++ - } - - if (!langs.where('1', channel.lang)) { - errors.push({ type: 'wrong_lang', ...channel }) - stats.errors++ - } - } - - if (errors.length) { - console.log(chalk.underline(filepath)) - console.table(errors, ['type', 'lang', 'xmltv_id', 'site_id', 'name']) - console.log() - stats.files++ - } - } - - if (stats.errors > 0) { - console.log(chalk.red(`${stats.errors} error(s) in ${stats.files} file(s)`)) - process.exit(1) - } -} - -main() diff --git a/scripts/commands/channels/validate.ts b/scripts/commands/channels/validate.ts new file mode 100644 index 00000000..acda8863 --- /dev/null +++ b/scripts/commands/channels/validate.ts @@ -0,0 +1,95 @@ +import { Storage, Collection, Dictionary, File, Logger } from '@freearhey/core' +import { ChannelsParser, ApiChannel } from '../../core' +import { program } from 'commander' +import chalk from 'chalk' +import langs from 'langs' +import { DATA_DIR } from '../../constants' +import { Channel } from 'epg-grabber' + +program + .option( + '-c, --channels ', + 'Path to channels.xml file to validate', + 'sites/**/*.channels.xml' + ) + .parse(process.argv) + +const options = program.opts() + +type ValidationError = { + type: 'duplicate' | 'wrong_xmltv_id' | 'wrong_lang' + name: string + lang?: string + xmltv_id?: string + site_id?: string + logo?: string +} + +async function main() { + const logger = new Logger() + + logger.info('options:') + logger.tree(options) + + const parser = new ChannelsParser({ storage: new Storage() }) + + const dataStorage = new Storage(DATA_DIR) + const channelsContent = await dataStorage.json('channels.json') + const channels = new Collection(channelsContent).map(data => new ApiChannel(data)) + + let totalFiles = 0 + let totalErrors = 0 + const storage = new Storage() + let files: string[] = await storage.list(options.channels) + for (const filepath of files) { + const file = new File(filepath) + if (file.extension() !== 'xml') continue + + const parsedChannels = await parser.parse(filepath) + + const bufferById = new Dictionary() + const bufferBySiteId = new Dictionary() + const errors: ValidationError[] = [] + parsedChannels.forEach((channel: Channel) => { + const bufferId: string = `${channel.xmltv_id}:${channel.lang}` + if (bufferById.missing(bufferId)) { + bufferById.set(bufferId, true) + } else { + errors.push({ type: 'duplicate', ...channel }) + totalErrors++ + } + + const bufferSiteId: string = `${channel.site_id}:${channel.lang}` + if (bufferBySiteId.missing(bufferSiteId)) { + bufferBySiteId.set(bufferSiteId, true) + } else { + errors.push({ type: 'duplicate', ...channel }) + totalErrors++ + } + + if (channels.missing((_channel: ApiChannel) => _channel.id === channel.xmltv_id)) { + errors.push({ type: 'wrong_xmltv_id', ...channel }) + totalErrors++ + } + + if (!langs.where('1', channel.lang)) { + errors.push({ type: 'wrong_lang', ...channel }) + totalErrors++ + } + }) + + if (errors.length) { + console.log(chalk.underline(filepath)) + console.table(errors, ['type', 'lang', 'xmltv_id', 'site_id', 'name']) + console.log() + totalFiles++ + } + } + + if (totalErrors > 0) { + console.log(chalk.red(`${totalErrors} error(s) in ${totalFiles} file(s)`)) + process.exit(1) + } +} + +main() diff --git a/scripts/commands/epg/grab.js b/scripts/commands/epg/grab.js deleted file mode 100644 index 25d365ed..00000000 --- a/scripts/commands/epg/grab.js +++ /dev/null @@ -1,220 +0,0 @@ -const { program } = require('commander') -const _ = require('lodash') -const { EPGGrabber, generateXMLTV, Channel, Program } = require('epg-grabber') -const { db, logger, date, timer, file, parser, api, zip } = require('../../core') -const path = require('path') -const dayjs = require('dayjs') -const utc = require('dayjs/plugin/utc') -const CronJob = require('cron').CronJob - -dayjs.extend(utc) - -const BASE_DIR = process.env.BASE_DIR || '.' -const CURR_DATE = process.env.CURR_DATE || new Date() - -program - .requiredOption('-s, --site ', 'Name of the site to parse') - .option('-l, --lang ', 'Filter channels by language (ISO 639-2 code)') - .option('-o, --output ', 'Path to output file') - .option('--days ', 'Override the number of days for which the program will be loaded') - .option('--cron ', 'Schedule a script run') - .option('--gzip', 'Create a compressed version of the guide as well', false) - .parse(process.argv) - -const options = program.opts() - -options.output = options.output || file.resolve(`${BASE_DIR}/guides/{lang}/{site}.xml`) -options.config = file.resolve(`${BASE_DIR}/sites/${options.site}/${options.site}.config.js`) -options.channels = file.resolve(`${BASE_DIR}/sites/${options.site}/${options.site}*.channels.xml`) - -let channels = [] -let programs = [] -let runIndex = 0 - -async function main() { - logger.start('staring...') - - logger.info('settings:') - for (let prop in options) { - logger.info(` ${prop}: ${options[prop]}`) - } - - const config = await loadConfig(options.config) - const queue = await createQueue(options.channels, config) - const outputPath = options.output - - if (options.cron) { - const job = new CronJob(options.cron, function () { - runJob(config, queue, outputPath) - }) - job.start() - } else { - await runJob(config, queue, outputPath) - } -} - -async function loadConfig(configPath) { - let config = require(file.resolve(configPath)) - config = _.merge(config, {}) - config.days = config.days || 1 - - logger.info('config:') - logConfig(config) - - return config -} - -function logConfig(config, level = 1) { - let padLeft = ' '.repeat(level) - for (let prop in config) { - if (typeof config[prop] === 'string' || typeof config[prop] === 'number') { - logger.info(`${padLeft}${prop}: ${config[prop]}`) - } else if (typeof config[prop] === 'object') { - level++ - logger.info(`${padLeft}${prop}:`) - logConfig(config[prop], level) - } - } -} - -async function runJob(config, queue, outputPath) { - runIndex++ - logger.info(`run #${runIndex}:`) - - timer.start() - - await grab(queue, config) - - await save(outputPath, channels, programs) - - logger.success(` done in ${timer.format('HH[h] mm[m] ss[s]')}`) -} - -async function grab(queue, config) { - const grabber = new EPGGrabber(config) - const total = queue.length - - let i = 1 - for (const item of queue) { - let channel = item.channel - let date = item.date - channels.push(item.channel) - await grabber - .grab(channel, date, (data, err) => { - logger.info( - ` [${i}/${total}] ${channel.site} (${channel.lang}) - ${channel.xmltv_id} - ${dayjs - .utc(data.date) - .format('MMM D, YYYY')} (${data.programs.length} programs)` - ) - if (i < total) i++ - - if (err) { - logger.info(` ERR: ${err.message}`) - } - }) - .then(results => { - programs = programs.concat(results) - }) - } -} - -async function createQueue(channelsPath, config) { - logger.info('creating queue...') - let queue = {} - await api.channels.load().catch(logger.error) - const files = await file.list(channelsPath).catch(logger.error) - const utcDate = date.getUTC(CURR_DATE) - const days = options.days ? parseInt(options.days) : config.days - for (const filepath of files) { - logger.info(` loading "${filepath}"...`) - try { - const dir = file.dirname(filepath) - const { channels } = await parser.parseChannels(filepath) - const filename = file.basename(filepath) - const dates = Array.from({ length: days }, (_, i) => utcDate.add(i, 'd')) - for (const channel of channels) { - if (!channel.site || !channel.xmltv_id) continue - if (options.lang && channel.lang !== options.lang) continue - const found = api.channels.find({ id: channel.xmltv_id }) - if (found) { - channel.logo = found.logo - } - for (const d of dates) { - const dateString = d.toJSON() - const key = `${channel.site}:${channel.lang}:${channel.xmltv_id}:${dateString}` - if (!queue[key]) { - queue[key] = { - channel, - date: dateString, - config, - error: null - } - } - } - } - } catch (err) { - logger.error(err) - continue - } - } - - queue = Object.values(queue) - - logger.info(` added ${queue.length} items`) - - return queue -} - -async function save(template, parsedChannels, programs = []) { - const variables = file.templateVariables(template) - - const groups = _.groupBy(parsedChannels, channel => { - let groupId = '' - for (let key in channel) { - if (variables.includes(key)) { - groupId += channel[key] - } - } - - return groupId - }) - - for (let groupId in groups) { - const channels = groups[groupId] - - let output = { - channels, - programs: [], - date: CURR_DATE - } - - for (let program of programs) { - let programLang = program.titles[0].lang - let channel = channels.find(c => c.xmltv_id === program.channel && c.lang === programLang) - if (!channel) continue - - output.programs.push(new Program(program, channel)) - } - - output.channels = _.sortBy(output.channels, 'xmltv_id') - output.channels = _.uniqBy(output.channels, 'xmltv_id') - - output.programs = _.sortBy(output.programs, ['channel', 'start']) - output.programs = _.uniqBy(output.programs, p => p.channel + p.start) - - const outputPath = file.templateFormat(template, output.channels[0]) - const xmlFilepath = outputPath - const xmltv = generateXMLTV(output) - logger.info(` saving to "${xmlFilepath}"...`) - await file.create(xmlFilepath, xmltv) - - if (options.gzip) { - const gzFilepath = `${outputPath}.gz` - const compressed = await zip.compress(xmltv) - logger.info(` saving to "${gzFilepath}"...`) - await file.create(gzFilepath, compressed) - } - } -} - -main() diff --git a/scripts/commands/epg/grab.ts b/scripts/commands/epg/grab.ts new file mode 100644 index 00000000..97875867 --- /dev/null +++ b/scripts/commands/epg/grab.ts @@ -0,0 +1,115 @@ +import { Logger, Timer, Storage, Collection } from '@freearhey/core' +import { program } from 'commander' +import { CronJob } from 'cron' +import { Queue, Job, ChannelsParser } from '../../core' +import { Channel } from 'epg-grabber' +import path from 'path' +import { SITES_DIR } from '../../constants' + +program + .option('-s, --site ', 'Name of the site to parse') + .option( + '-c, --channels ', + 'Path to *.channels.xml file (required if the "--site" attribute is not specified)' + ) + .option('-o, --output ', 'Path to output file', 'guide.xml') + .option('-l, --lang ', 'Filter channels by language (ISO 639-2 code)') + .option('-t, --timeout ', 'Override the default timeout for each request') + .option( + '--days ', + 'Override the number of days for which the program will be loaded (defaults to the value from the site config)', + value => parseInt(value) + ) + .option( + '--maxConnections ', + 'Limit on the number of concurrent requests', + value => parseInt(value), + 1 + ) + .option('--cron ', 'Schedule a script run (example: "0 0 * * *")') + .option('--gzip', 'Create a compressed version of the guide as well', false) + .parse(process.argv) + +export type GrabOptions = { + site?: string + channels?: string + output: string + gzip: boolean + maxConnections: number + timeout?: string + lang?: string + days?: number + cron?: string +} + +const options: GrabOptions = program.opts() + +async function main() { + if (!options.site && !options.channels) + throw new Error('One of the arguments must be presented: `--site` or `--channels`') + + const logger = new Logger() + + logger.start('staring...') + + logger.info('config:') + logger.tree(options) + + logger.info(`loading channels...`) + const storage = new Storage() + const parser = new ChannelsParser({ storage }) + + let files: string[] = [] + if (options.site) { + files = await storage.list(path.join(SITES_DIR, `${options.site}/*.channels.xml`)) + } else if (options.channels) { + files = await storage.list(options.channels) + } + + let parsedChannels = new Collection() + for (let filepath of files) { + parsedChannels = parsedChannels.concat(await parser.parse(filepath)) + } + if (options.lang) { + parsedChannels = parsedChannels.filter((channel: Channel) => channel.lang === options.lang) + } + logger.info(` found ${parsedChannels.count()} channels`) + + logger.info('creating queue...') + const queue = new Queue({ + parsedChannels, + logger, + options + }) + await queue.create() + logger.info(` added ${queue.size()} items`) + + const job = new Job({ + queue, + logger, + options + }) + + let runIndex = 1 + if (options.cron) { + const cronJob = new CronJob(options.cron, async () => { + logger.info(`run #${runIndex}:`) + const timer = new Timer() + timer.start() + await job.run() + runIndex++ + logger.success(` done in ${timer.format('HH[h] mm[m] ss[s]')}`) + }) + cronJob.start() + } else { + logger.info(`run #${runIndex}:`) + const timer = new Timer() + timer.start() + await job.run() + logger.success(` done in ${timer.format('HH[h] mm[m] ss[s]')}`) + } + + logger.info('finished') +} + +main() diff --git a/scripts/constants.ts b/scripts/constants.ts new file mode 100644 index 00000000..7b6c00d0 --- /dev/null +++ b/scripts/constants.ts @@ -0,0 +1,4 @@ +export const SITES_DIR = process.env.SITES_DIR || './sites' +export const GUIDES_DIR = process.env.GUIDES_DIR || './guides' +export const DATA_DIR = process.env.DATA_DIR || './temp/data' +export const CURR_DATE = process.env.CURR_DATE || new Date().toISOString() diff --git a/scripts/core/api.js b/scripts/core/api.js deleted file mode 100644 index 18c4f144..00000000 --- a/scripts/core/api.js +++ /dev/null @@ -1,32 +0,0 @@ -const _ = require('lodash') -const file = require('./file') - -const DATA_DIR = process.env.DATA_DIR || './scripts/tmp/data' - -class API { - constructor(filepath) { - this.filepath = file.resolve(filepath) - } - - async load() { - const data = await file.read(this.filepath) - this.collection = JSON.parse(data) - } - - find(query) { - return _.find(this.collection, query) - } - - all() { - return this.collection - } -} - -const api = {} - -api.channels = new API(`${DATA_DIR}/channels.json`) -api.regions = new API(`${DATA_DIR}/regions.json`) -api.countries = new API(`${DATA_DIR}/countries.json`) -api.subdivisions = new API(`${DATA_DIR}/subdivisions.json`) - -module.exports = api diff --git a/scripts/core/apiChannel.ts b/scripts/core/apiChannel.ts new file mode 100644 index 00000000..3ddd1a91 --- /dev/null +++ b/scripts/core/apiChannel.ts @@ -0,0 +1,79 @@ +import { Collection } from '@freearhey/core' + +type ApiChannelProps = { + id: string + name: string + alt_names: string[] + network: string + owners: string[] + country: string + subdivision: string + city: string + broadcast_area: string[] + languages: string[] + categories: string[] + is_nsfw: boolean + launched: string + closed: string + replaced_by: string + website: string + logo: string +} + +export class ApiChannel { + id: string + name: string + altNames: Collection + network: string + owners: Collection + country: string + subdivision: string + city: string + broadcastArea: Collection + languages: Collection + categories: Collection + isNSFW: boolean + launched: string + closed: string + replacedBy: string + website: string + logo: string + + constructor({ + id, + name, + alt_names, + network, + owners, + country, + subdivision, + city, + broadcast_area, + languages, + categories, + is_nsfw, + launched, + closed, + replaced_by, + website, + logo + }: ApiChannelProps) { + this.id = id + this.name = name + this.altNames = new Collection(alt_names) + this.network = network + this.owners = new Collection(owners) + this.country = country + this.subdivision = subdivision + this.city = city + this.broadcastArea = new Collection(broadcast_area) + this.languages = new Collection(languages) + this.categories = new Collection(categories) + this.isNSFW = is_nsfw + this.launched = launched + this.closed = closed + this.replacedBy = replaced_by + this.website = website + this.logo = logo + } +} diff --git a/scripts/core/apiClient.ts b/scripts/core/apiClient.ts new file mode 100644 index 00000000..66fa28a8 --- /dev/null +++ b/scripts/core/apiClient.ts @@ -0,0 +1,59 @@ +import { Logger, Storage } from '@freearhey/core' +import axios, { AxiosInstance, AxiosResponse, AxiosProgressEvent } from 'axios' +import cliProgress, { MultiBar } from 'cli-progress' +import numeral from 'numeral' + +export class ApiClient { + progressBar: MultiBar + client: AxiosInstance + storage: Storage + logger: Logger + + constructor({ logger }: { logger: Logger }) { + this.logger = logger + this.client = axios.create({ + responseType: 'stream' + }) + this.storage = new Storage() + this.progressBar = new cliProgress.MultiBar({ + stopOnComplete: true, + hideCursor: true, + forceRedraw: true, + barsize: 36, + format(options, params, payload) { + const filename = payload.filename.padEnd(18, ' ') + const barsize = options.barsize || 40 + const percent = (params.progress * 100).toFixed(2) + const speed = payload.speed ? numeral(payload.speed).format('0.0 b') + '/s' : 'N/A' + const total = numeral(params.total).format('0.0 b') + const completeSize = Math.round(params.progress * barsize) + const incompleteSize = barsize - completeSize + const bar = + options.barCompleteString && options.barIncompleteString + ? options.barCompleteString.substr(0, completeSize) + + options.barGlue + + options.barIncompleteString.substr(0, incompleteSize) + : '-'.repeat(barsize) + + return `${filename} [${bar}] ${percent}% | ETA: ${params.eta}s | ${total} | ${speed}` + } + }) + } + + async download(filename: string) { + const stream = await this.storage.createStream(`/temp/data/${filename}`) + + const bar = this.progressBar.create(0, 0, { filename }) + + this.client + .get(`https://iptv-org.github.io/api/${filename}`, { + onDownloadProgress({ total, loaded, rate }: AxiosProgressEvent) { + if (total) bar.setTotal(total) + bar.update(loaded, { speed: rate }) + } + }) + .then((response: AxiosResponse) => { + response.data.pipe(stream) + }) + } +} diff --git a/scripts/core/channelsParser.ts b/scripts/core/channelsParser.ts new file mode 100644 index 00000000..990422b4 --- /dev/null +++ b/scripts/core/channelsParser.ts @@ -0,0 +1,24 @@ +import { parseChannels } from 'epg-grabber' +import { Storage, Collection } from '@freearhey/core' + +type ChannelsParserProps = { + storage: Storage +} + +export class ChannelsParser { + storage: Storage + + constructor({ storage }: ChannelsParserProps) { + this.storage = storage + } + + async parse(filepath: string) { + let parsedChannels = new Collection() + + const content = await this.storage.load(filepath) + const channels = parseChannels(content) + parsedChannels = parsedChannels.concat(new Collection(channels)) + + return parsedChannels + } +} diff --git a/scripts/core/configLoader.ts b/scripts/core/configLoader.ts new file mode 100644 index 00000000..0fd429ad --- /dev/null +++ b/scripts/core/configLoader.ts @@ -0,0 +1,19 @@ +import { SiteConfig } from 'epg-grabber' +import _ from 'lodash' + +export class ConfigLoader { + async load(filepath: string): Promise { + const config = (await import(filepath)).default + + return _.merge( + { + delay: 0, + maxConnections: 1, + request: { + timeout: 30000 + } + }, + config + ) + } +} diff --git a/scripts/core/db.js b/scripts/core/db.js deleted file mode 100644 index 1870346f..00000000 --- a/scripts/core/db.js +++ /dev/null @@ -1,76 +0,0 @@ -const nedb = require('nedb-promises') -const file = require('./file') - -const DB_DIR = process.env.DB_DIR || './scripts/tmp/database' - -class Database { - constructor(filepath) { - this.filepath = filepath - } - - load() { - this.db = nedb.create({ - filename: file.resolve(this.filepath), - autoload: true, - onload: err => { - if (err) console.error(err) - }, - compareStrings: (a, b) => { - a = a.replace(/\s/g, '_') - b = b.replace(/\s/g, '_') - - return a.localeCompare(b, undefined, { - sensitivity: 'accent', - numeric: true - }) - } - }) - } - - removeIndex(field) { - return this.db.removeIndex(field) - } - - addIndex(options) { - return this.db.ensureIndex(options) - } - - compact() { - return this.db.persistence.compactDatafile() - } - - stopAutocompact() { - return this.db.persistence.stopAutocompaction() - } - - reset() { - return file.clear(this.filepath) - } - - count(query) { - return this.db.count(query) - } - - insert(doc) { - return this.db.insert(doc) - } - - update(query, update) { - return this.db.update(query, update) - } - - find(query) { - return this.db.find(query) - } - - remove(query, options) { - return this.db.remove(query, options) - } -} - -const db = {} - -db.queue = new Database(`${DB_DIR}/queue.db`) -db.programs = new Database(`${DB_DIR}/programs.db`) - -module.exports = db diff --git a/scripts/core/file.js b/scripts/core/file.js deleted file mode 100644 index 8a2f7eab..00000000 --- a/scripts/core/file.js +++ /dev/null @@ -1,93 +0,0 @@ -const path = require('path') -const glob = require('glob') -const fs = require('fs-extra') - -const file = {} - -file.templateVariables = function (template) { - const match = template.match(/{[^}]+}/g) - - return Array.isArray(match) ? match.map(s => s.substring(1, s.length - 1)) : [] -} - -file.templateFormat = function (template, obj) { - let output = template - for (let key in obj) { - const regex = new RegExp(`{${key}}`, 'g') - const value = obj[key] || undefined - output = output.replace(regex, value) - } - - return output -} - -file.list = function (pattern) { - return new Promise(resolve => { - glob(pattern, function (err, files) { - resolve(files) - }) - }) -} - -file.getFilename = function (filepath) { - return path.parse(filepath).name -} - -file.createDir = async function (dir) { - if (await file.exists(dir)) return - - return fs.mkdir(dir, { recursive: true }).catch(console.error) -} - -file.exists = function (filepath) { - return fs.exists(path.resolve(filepath)) -} - -file.existsSync = function (filepath) { - return fs.existsSync(path.resolve(filepath)) -} - -file.read = function (filepath) { - return fs.readFile(path.resolve(filepath), { encoding: 'utf8' }).catch(console.error) -} - -file.append = function (filepath, data) { - return fs.appendFile(path.resolve(filepath), data).catch(console.error) -} - -file.create = function (filepath, data = '') { - filepath = path.resolve(filepath) - const dir = path.dirname(filepath) - - return file - .createDir(dir) - .then(() => file.write(filepath, data)) - .catch(console.error) -} - -file.write = function (filepath, data = '') { - return fs.writeFile(path.resolve(filepath), data, { encoding: 'utf8' }).catch(console.error) -} - -file.writeSync = function (filepath, data = '') { - return fs.writeFileSync(path.resolve(filepath), data, { encoding: 'utf8' }) -} - -file.clear = async function (filepath) { - if (await file.exists(filepath)) return file.write(filepath, '') - return true -} - -file.resolve = function (filepath) { - return path.resolve(filepath) -} - -file.dirname = function (filepath) { - return path.dirname(filepath) -} - -file.basename = function (filepath) { - return path.basename(filepath) -} - -module.exports = file diff --git a/scripts/core/grabber.ts b/scripts/core/grabber.ts new file mode 100644 index 00000000..783e3f14 --- /dev/null +++ b/scripts/core/grabber.ts @@ -0,0 +1,75 @@ +import { EPGGrabber, GrabCallbackData, EPGGrabberMock, SiteConfig, Channel } from 'epg-grabber' +import { Logger, Collection } from '@freearhey/core' +import { Queue } from './' +import { GrabOptions } from '../commands/epg/grab' +import { TaskQueue, PromisyClass } from 'cwait' + +type GrabberProps = { + logger: Logger + queue: Queue + options: GrabOptions +} + +export class Grabber { + logger: Logger + queue: Queue + options: GrabOptions + + constructor({ logger, queue, options }: GrabberProps) { + this.logger = logger + this.queue = queue + this.options = options + } + + async grab(): Promise<{ channels: Collection; programs: Collection }> { + const taskQueue = new TaskQueue(Promise as PromisyClass, this.options.maxConnections) + + const total = this.queue.size() + + const channels = new Collection() + let programs = new Collection() + let i = 1 + + await Promise.all( + this.queue.items().map( + taskQueue.wrap( + async (queueItem: { channel: Channel; config: SiteConfig; date: string }) => { + const { channel, config, date } = queueItem + + channels.add(channel) + + if (this.options.timeout !== undefined) { + const timeout = parseInt(this.options.timeout) + config.request = { ...config.request, ...{ timeout } } + } + + const grabber = + process.env.NODE_ENV === 'test' ? new EPGGrabberMock(config) : new EPGGrabber(config) + const _programs = await grabber.grab( + channel, + date, + (data: GrabCallbackData, error: Error | null) => { + const { programs, date } = data + + this.logger.info( + ` [${i}/${total}] ${channel.site} (${channel.lang}) - ${ + channel.xmltv_id + } - ${date.format('MMM D, YYYY')} (${programs.length} programs)` + ) + if (i < total) i++ + + if (error) { + this.logger.info(` ERR: ${error.message}`) + } + } + ) + + programs = programs.concat(new Collection(_programs)) + } + ) + ) + ) + + return { channels, programs } + } +} diff --git a/scripts/core/guide.ts b/scripts/core/guide.ts new file mode 100644 index 00000000..2b73f05e --- /dev/null +++ b/scripts/core/guide.ts @@ -0,0 +1,55 @@ +import { Collection, Logger, DateTime, Storage, Zip } from '@freearhey/core' +import { Channel } from 'epg-grabber' +import { XMLTV } from '../core' +import { CURR_DATE } from '../constants' + +type GuideProps = { + channels: Collection + programs: Collection + logger: Logger + filepath: string + gzip: boolean +} + +export class Guide { + channels: Collection + programs: Collection + logger: Logger + storage: Storage + filepath: string + gzip: boolean + + constructor({ channels, programs, logger, filepath, gzip }: GuideProps) { + this.channels = channels + this.programs = programs + this.logger = logger + this.storage = new Storage() + this.filepath = filepath + this.gzip = gzip || false + } + + async save() { + const channels = this.channels.uniqBy( + (channel: Channel) => `${channel.xmltv_id}:${channel.site}` + ) + const programs = this.programs + + const xmltv = new XMLTV({ + channels, + programs, + date: new DateTime(CURR_DATE, { zone: 'UTC' }) + }) + + const xmlFilepath = this.filepath + this.logger.info(` saving to "${xmlFilepath}"...`) + await this.storage.save(xmlFilepath, xmltv.toString()) + + if (this.gzip) { + const zip = new Zip() + const compressed = await zip.compress(xmltv.toString()) + const gzFilepath = `${this.filepath}.gz` + this.logger.info(` saving to "${gzFilepath}"...`) + await this.storage.save(gzFilepath, compressed) + } + } +} diff --git a/scripts/core/guideManager.ts b/scripts/core/guideManager.ts new file mode 100644 index 00000000..22b80552 --- /dev/null +++ b/scripts/core/guideManager.ts @@ -0,0 +1,61 @@ +import { Collection, Logger, Storage, StringTemplate } from '@freearhey/core' +import { OptionValues } from 'commander' +import { Channel, Program } from 'epg-grabber' +import { Guide } from '.' + +type GuideManagerProps = { + options: OptionValues + logger: Logger + channels: Collection + programs: Collection +} + +export class GuideManager { + options: OptionValues + storage: Storage + logger: Logger + channels: Collection + programs: Collection + + constructor({ channels, programs, logger, options }: GuideManagerProps) { + this.options = options + this.logger = logger + this.channels = channels + this.programs = programs + this.storage = new Storage() + } + + async createGuides() { + const pathTemplate = new StringTemplate(this.options.output) + + const groupedChannels = this.channels + .orderBy([(channel: Channel) => channel.xmltv_id]) + .uniqBy((channel: Channel) => `${channel.xmltv_id}:${channel.site}:${channel.lang}`) + .groupBy((channel: Channel) => { + return pathTemplate.format({ lang: channel.lang || 'en', site: channel.site || '' }) + }) + + const groupedPrograms = this.programs + .orderBy([(program: Program) => program.channel, (program: Program) => program.start]) + .groupBy((program: Program) => { + const lang = + program.titles && program.titles.length && program.titles[0].lang + ? program.titles[0].lang + : 'en' + + return pathTemplate.format({ lang, site: program.site || '' }) + }) + + for (const groupKey of groupedPrograms.keys()) { + const guide = new Guide({ + filepath: groupKey, + gzip: this.options.gzip, + channels: new Collection(groupedChannels.get(groupKey)), + programs: new Collection(groupedPrograms.get(groupKey)), + logger: this.logger + }) + + await guide.save() + } + } +} diff --git a/scripts/core/index.js b/scripts/core/index.js deleted file mode 100644 index c6c607a5..00000000 --- a/scripts/core/index.js +++ /dev/null @@ -1,11 +0,0 @@ -exports.db = require('./db') -exports.logger = require('./logger') -exports.file = require('./file') -exports.parser = require('./parser') -exports.timer = require('./timer') -exports.markdown = require('./markdown') -exports.api = require('./api') -exports.date = require('./date') -exports.table = require('./table') -exports.xml = require('./xml') -exports.zip = require('./zip') diff --git a/scripts/core/index.ts b/scripts/core/index.ts new file mode 100644 index 00000000..6ab0d340 --- /dev/null +++ b/scripts/core/index.ts @@ -0,0 +1,11 @@ +export * from './xml' +export * from './channelsParser' +export * from './xmltv' +export * from './configLoader' +export * from './grabber' +export * from './job' +export * from './queue' +export * from './guideManager' +export * from './guide' +export * from './apiChannel' +export * from './apiClient' diff --git a/scripts/core/job.ts b/scripts/core/job.ts new file mode 100644 index 00000000..d23b59f6 --- /dev/null +++ b/scripts/core/job.ts @@ -0,0 +1,34 @@ +import { Logger } from '@freearhey/core' +import { Queue, Grabber, GuideManager } from '.' +import { GrabOptions } from '../commands/epg/grab' + +type JobProps = { + options: GrabOptions + logger: Logger + queue: Queue +} + +export class Job { + options: GrabOptions + logger: Logger + grabber: Grabber + + constructor({ queue, logger, options }: JobProps) { + this.options = options + this.logger = logger + this.grabber = new Grabber({ logger, queue, options }) + } + + async run() { + const { channels, programs } = await this.grabber.grab() + + const manager = new GuideManager({ + channels, + programs, + options: this.options, + logger: this.logger + }) + + await manager.createGuides() + } +} diff --git a/scripts/core/logger.js b/scripts/core/logger.js deleted file mode 100644 index effb0cb1..00000000 --- a/scripts/core/logger.js +++ /dev/null @@ -1,3 +0,0 @@ -const { consola } = require('consola') - -module.exports = consola diff --git a/scripts/core/markdown.js b/scripts/core/markdown.js deleted file mode 100644 index 2729f0b7..00000000 --- a/scripts/core/markdown.js +++ /dev/null @@ -1,10 +0,0 @@ -const markdownInclude = require('markdown-include') -const file = require('./file') - -const markdown = {} - -markdown.compile = function (filepath) { - markdownInclude.compileFiles(file.resolve(filepath)) -} - -module.exports = markdown diff --git a/scripts/core/parser.js b/scripts/core/parser.js deleted file mode 100644 index 73be3763..00000000 --- a/scripts/core/parser.js +++ /dev/null @@ -1,29 +0,0 @@ -const file = require('./file') -const grabber = require('epg-grabber') - -const parser = {} - -parser.parseChannels = async function (filepath) { - const content = await file.read(filepath) - - return grabber.parseChannels(content) -} - -parser.parseLogs = async function (filepath) { - const content = await file.read(filepath) - if (!content) return [] - const lines = content.split('\n') - - return lines.map(line => (line ? JSON.parse(line) : null)).filter(l => l) -} - -parser.parseNumber = function (string) { - const parsed = parseInt(string) - if (isNaN(parsed)) { - throw new Error('scripts/core/parser.js:parseNumber() Input value is not a number') - } - - return parsed -} - -module.exports = parser diff --git a/scripts/core/queue.ts b/scripts/core/queue.ts new file mode 100644 index 00000000..c197da65 --- /dev/null +++ b/scripts/core/queue.ts @@ -0,0 +1,94 @@ +import { Storage, Collection, DateTime, Logger, Dictionary } from '@freearhey/core' +import { ChannelsParser, ConfigLoader, ApiChannel } from './' +import { SITES_DIR, DATA_DIR, CURR_DATE } from '../constants' +import { Channel, SiteConfig } from 'epg-grabber' +import path from 'path' +import { GrabOptions } from '../commands/epg/grab' + +export type QueueItem = { + channel: Channel + date: string + config: SiteConfig + error: string | null +} + +type QueueProps = { + logger: Logger + options: GrabOptions + parsedChannels: Collection +} + +export class Queue { + configLoader: ConfigLoader + logger: Logger + sitesStorage: Storage + dataStorage: Storage + parser: ChannelsParser + parsedChannels: Collection + options: GrabOptions + date: DateTime + _items: QueueItem[] = [] + + constructor({ parsedChannels, logger, options }: QueueProps) { + this.parsedChannels = parsedChannels + this.logger = logger + this.sitesStorage = new Storage() + this.dataStorage = new Storage(DATA_DIR) + this.parser = new ChannelsParser({ storage: new Storage() }) + this.date = new DateTime(CURR_DATE) + this.options = options + this.configLoader = new ConfigLoader() + } + + async create() { + const channelsContent = await this.dataStorage.json('channels.json') + const channels = new Collection(channelsContent).map(data => new ApiChannel(data)) + + const queue = new Dictionary() + + for (const channel of this.parsedChannels.all()) { + if (!channel.site || !channel.xmltv_id) continue + if (this.options.lang && channel.lang !== this.options.lang) continue + + const configPath = path.resolve(SITES_DIR, `${channel.site}/${channel.site}.config.js`) + const config: SiteConfig = await this.configLoader.load(configPath) + + const found: ApiChannel = channels.first( + (_channel: ApiChannel) => _channel.id === channel.xmltv_id + ) + if (found) { + channel.logo = found.logo + } + + const days = this.options.days || config.days || 1 + const dates = Array.from({ length: days }, (_, day) => this.date.add(day, 'd')) + dates.forEach((date: DateTime) => { + const dateString = date.toJSON() + const key = `${channel.site}:${channel.lang}:${channel.xmltv_id}:${dateString}` + + if (queue.missing(key)) { + queue.set(key, { + channel, + date: dateString, + config, + error: null + }) + } + }) + } + + this._items = Object.values(queue.data()) + } + + size(): number { + return this._items.length + } + + items(): QueueItem[] { + return this._items + } + + isEmpty(): boolean { + return this._items.length === 0 + } +} diff --git a/scripts/core/table.js b/scripts/core/table.js deleted file mode 100644 index 0c5d363f..00000000 --- a/scripts/core/table.js +++ /dev/null @@ -1,47 +0,0 @@ -const table = {} - -table.create = function (data, cols) { - let output = '\r\n' - - output += ' \r\n ' - for (let column of cols) { - output += `${column}` - } - output += '\r\n \r\n' - - output += ' \r\n' - output += getHTMLRows(data) - output += ' \r\n' - - output += '' - - return output -} - -function getHTMLRows(data) { - let output = '' - for (let group of data) { - let rowspan = group.length - for (let [j, row] of group.entries()) { - output += ' ' - for (let [i, value] of row.entries()) { - if (i === 0 && j === 0) { - output += `${value}` - } else if (i > 0) { - if (typeof value === 'number') { - output += `${value}` - } else { - output += `${value}` - } - } - } - output += '\r\n' - } - } - - return output -} - -function getSpan() {} - -module.exports = table diff --git a/scripts/core/timer.js b/scripts/core/timer.js deleted file mode 100644 index 6e5f381d..00000000 --- a/scripts/core/timer.js +++ /dev/null @@ -1,29 +0,0 @@ -const { performance } = require('perf_hooks') -const dayjs = require('dayjs') -const duration = require('dayjs/plugin/duration') -const relativeTime = require('dayjs/plugin/relativeTime') - -dayjs.extend(relativeTime) -dayjs.extend(duration) - -const timer = {} - -let t0 = 0 - -timer.start = function () { - t0 = performance.now() -} - -timer.format = function (f) { - let t1 = performance.now() - - return dayjs.duration(t1 - t0).format(f) -} - -timer.humanize = function (suffix = true) { - let t1 = performance.now() - - return dayjs.duration(t1 - t0).humanize(suffix) -} - -module.exports = timer diff --git a/scripts/core/xml.js b/scripts/core/xml.ts similarity index 53% rename from scripts/core/xml.js rename to scripts/core/xml.ts index 5cd6c3f6..1d7710b1 100644 --- a/scripts/core/xml.js +++ b/scripts/core/xml.ts @@ -1,25 +1,36 @@ -const xml = {} +import { Collection } from '@freearhey/core' +import { Channel } from 'epg-grabber' -xml.create = function (items, site) { - let output = `\r\n\r\n \r\n` +export class XML { + items: Collection + site: string - items.forEach(channel => { - const logo = channel.logo ? ` logo="${channel.logo}"` : '' - const xmltv_id = channel.xmltv_id || '' - const lang = channel.lang || '' - const site_id = channel.site_id || '' - output += ` ${escapeString(channel.name)}\r\n` - }) + constructor(items: Collection, site: string) { + this.items = items + this.site = site + } - output += ` \r\n\r\n` + toString() { + let output = '\r\n\r\n' - return output + this.items.forEach((channel: Channel) => { + const logo = channel.logo ? ` logo="${channel.logo}"` : '' + const xmltv_id = channel.xmltv_id || '' + const lang = channel.lang || '' + const site_id = channel.site_id || '' + output += ` ${escapeString(channel.name)}\r\n` + }) + + output += '\r\n' + + return output + } } -function escapeString(string, defaultValue = '') { - if (!string) return defaultValue +function escapeString(value: string, defaultValue: string = '') { + if (!value) return defaultValue const regex = new RegExp( '((?:[\0-\x08\x0B\f\x0E-\x1F\uFFFD\uFFFE\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]))|([\\x7F-\\x84]|[\\x86-\\x9F]|[\\uFDD0-\\uFDEF]|(?:\\uD83F[\\uDFFE\\uDFFF])|(?:\\uD87F[\\uDF' + @@ -33,9 +44,9 @@ function escapeString(string, defaultValue = '') { 'g' ) - string = String(string || '').replace(regex, '') + value = String(value || '').replace(regex, '') - return string + return value .replace(/&/g, '&') .replace(//g, '>') @@ -45,5 +56,3 @@ function escapeString(string, defaultValue = '') { .replace(/ +/g, ' ') .trim() } - -module.exports = xml diff --git a/scripts/core/xmltv.ts b/scripts/core/xmltv.ts new file mode 100644 index 00000000..eebd5424 --- /dev/null +++ b/scripts/core/xmltv.ts @@ -0,0 +1,28 @@ +import { DateTime, Collection } from '@freearhey/core' +import { generateXMLTV } from 'epg-grabber' + +type XMLTVProps = { + channels: Collection + programs: Collection + date: DateTime +} + +export class XMLTV { + channels: Collection + programs: Collection + date: DateTime + + constructor({ channels, programs, date }: XMLTVProps) { + this.channels = channels + this.programs = programs + this.date = date + } + + toString() { + return generateXMLTV({ + channels: this.channels.all(), + programs: this.programs.all(), + date: this.date.toJSON() + }) + } +} diff --git a/scripts/core/zip.js b/scripts/core/zip.js deleted file mode 100644 index f6c8140c..00000000 --- a/scripts/core/zip.js +++ /dev/null @@ -1,13 +0,0 @@ -const { gzip, ungzip } = require('node-gzip') - -const zip = {} - -zip.compress = async function (string) { - return gzip(string) -} - -zip.decompress = async function (string) { - return ungzip(string) -} - -module.exports = zip diff --git a/scripts/tmp/.gitignore b/scripts/tmp/.gitignore deleted file mode 100644 index c96a04f0..00000000 --- a/scripts/tmp/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -* -!.gitignore \ No newline at end of file diff --git a/scripts/types/langs.d.ts b/scripts/types/langs.d.ts new file mode 100644 index 00000000..60fb498a --- /dev/null +++ b/scripts/types/langs.d.ts @@ -0,0 +1 @@ +declare module 'langs' From c0cfcf7a478613324e1242deb28e3badd3b1dc83 Mon Sep 17 00:00:00 2001 From: freearhey <7253922+freearhey@users.noreply.github.com> Date: Mon, 2 Oct 2023 06:35:33 +0300 Subject: [PATCH 13/19] Update /sites --- sites/9tv.co.il/9tv.co.il.channels.xml | 8 +- sites/9tv.co.il/9tv.co.il.config.js | 2 +- sites/9tv.co.il/9tv.co.il.test.js | 11 +- sites/abc.net.au/abc.net.au.channels.xml | 70 +- sites/abc.net.au/abc.net.au.test.js | 11 +- sites/allente.se/allente.se.config.js | 2 +- sites/allente.se/allente.se.test.js | 20 +- sites/allente.se/allente.se_dk.channels.xml | 128 +- sites/allente.se/allente.se_fi.channels.xml | 76 +- sites/allente.se/allente.se_no.channels.xml | 146 +- sites/allente.se/allente.se_se.channels.xml | 224 +- .../andorradifusio.ad.channels.xml | 8 +- .../andorradifusio.ad.config.js | 4 +- .../andorradifusio.ad.test.js | 8 +- .../arianaafgtv.com.channels.xml | 8 +- .../arianaafgtv.com/arianaafgtv.com.config.js | 4 +- .../arianatelevision.com.channels.xml | 8 +- .../arianatelevision.com.config.js | 4 +- .../arianatelevision.com.test.js | 16 +- sites/arirang.com/arirang.com.channels.xml | 12 +- sites/arirang.com/arirang.com.config.js | 214 +- sites/arirang.com/arirang.com.test.js | 83 +- sites/artonline.tv/artonline.tv.channels.xml | 16 +- sites/artonline.tv/artonline.tv.config.js | 4 +- sites/artonline.tv/artonline.tv.test.js | 5 +- sites/astro.com.my/astro.com.my.channels.xml | 282 +- sites/astro.com.my/astro.com.my.config.js | 8 +- sites/astro.com.my/astro.com.my.test.js | 2 +- sites/bein.com/bein.com.channels.xml | 162 - sites/bein.com/bein.com.config.js | 5 +- sites/bein.com/bein.com.test.js | 2 +- sites/bein.com/bein.com_ar.channels.xml | 79 + sites/bein.com/bein.com_en.channels.xml | 80 + sites/beinsports.com/beinsports.com.config.js | 14 +- sites/beinsports.com/beinsports.com.test.js | 4 +- .../beinsports.com_au.channels.xml | 12 +- .../beinsports.com_fr.channels.xml | 26 +- .../beinsports.com_hk.channels.xml | 10 +- .../beinsports.com_id.channels.xml | 10 +- .../beinsports.com_my.channels.xml | 8 +- .../beinsports.com_ph.channels.xml | 10 +- .../beinsports.com_qa-ar.channels.xml | 56 +- .../beinsports.com_qa-en.channels.xml | 44 +- .../beinsports.com_th.channels.xml | 10 +- .../beinsports.com_us-en.channels.xml | 26 +- .../beinsports.com_us-es.channels.xml | 26 +- .../berrymedia.co.kr.channels.xml | 18 +- .../berrymedia.co.kr.config.js | 2 +- .../berrymedia.co.kr/berrymedia.co.kr.test.js | 6 +- sites/bt.com/bt.com.channels.xml | 336 +- sites/bt.com/bt.com.config.js | 3 - sites/bt.com/bt.com.test.js | 12 +- .../cablego.com.pe.channels.xml | 198 +- sites/cablego.com.pe/cablego.com.pe.test.js | 2 +- .../cableplus.com.uy.channels.xml | 322 +- .../cableplus.com.uy.config.js | 6 +- .../cableplus.com.uy/cableplus.com.uy.test.js | 6 +- .../canalplus-caraibes.com.channels.xml | 260 +- .../canalplus-caraibes.com.config.js | 5 +- .../canalplus-caraibes.com.test.js | 8 +- .../canalplus-haiti.com.channels.xml | 230 +- .../canalplus-haiti.com.config.js | 4 +- .../canalplus-haiti.com.test.js | 7 +- .../canalplus-reunion.com.channels.xml | 242 +- .../canalplus-reunion.com.test.js | 5 +- .../canalplus.com/canalplus.com.channels.xml | 648 ++- sites/canalplus.com/canalplus.com.config.js | 1 - sites/canalplus.com/canalplus.com.test.js | 8 +- sites/cgates.lt/cgates.lt.channels.xml | 244 +- sites/cgates.lt/cgates.lt.config.js | 4 +- sites/cgates.lt/cgates.lt.test.js | 2 +- .../chaines-tv.orange.fr.channels.xml | 394 +- .../chaines-tv.orange.fr.test.js | 13 +- .../clickthecity.com.channels.xml | 72 +- .../clickthecity.com.config.js | 10 +- .../clickthecity.com/clickthecity.com.test.js | 9 +- sites/compulms.com/compulms.com.channels.xml | 14 +- sites/compulms.com/compulms.com.test.js | 2 +- .../comteco.com.bo.channels.xml | 156 +- sites/comteco.com.bo/comteco.com.bo.test.js | 13 +- sites/cosmote.gr/cosmote.gr.channels.xml | 176 +- sites/cosmote.gr/cosmote.gr.config.js | 5 +- sites/cosmote.gr/cosmote.gr.test.js | 12 +- sites/delta.nl/delta.nl.channels.xml | 452 +- sites/delta.nl/delta.nl.test.js | 13 +- .../digiturk.com.tr.channels.xml | 266 +- .../digiturk.com.tr/digiturk.com.tr.config.js | 11 +- sites/digiturk.com.tr/digiturk.com.tr.test.js | 8 +- .../directv.com.ar.channels.xml | 832 ++- sites/directv.com.ar/directv.com.ar.config.js | 16 +- sites/directv.com.ar/directv.com.ar.test.js | 7 +- .../directv.com.uy.channels.xml | 292 +- sites/directv.com.uy/directv.com.uy.config.js | 3 +- sites/directv.com.uy/directv.com.uy.test.js | 4 +- sites/directv.com/directv.com.channels.xml | 2092 ++++---- sites/directv.com/directv.com.config.js | 16 +- sites/directv.com/directv.com.test.js | 2 +- sites/dishtv.in/dishtv.in.channels.xml | 916 ++-- sites/dishtv.in/dishtv.in.config.js | 14 +- sites/dishtv.in/dishtv.in.test.js | 7 +- .../dsmart.com.tr/dsmart.com.tr.channels.xml | 410 +- sites/dsmart.com.tr/dsmart.com.tr.config.js | 5 +- sites/dsmart.com.tr/dsmart.com.tr.test.js | 11 +- sites/dstv.com/dstv.com.channels.xml | 422 +- sites/dstv.com/dstv.com.config.js | 4 +- sites/dstv.com/dstv.com.test.js | 4 +- sites/elcinema.com/elcinema.com.channels.xml | 472 +- sites/elcinema.com/elcinema.com.config.js | 1 - sites/elcinema.com/elcinema.com.test.js | 6 +- .../ena.skylifetv.co.kr.channels.xml | 18 +- .../ena.skylifetv.co.kr.config.js | 2 +- .../ena.skylifetv.co.kr.test.js | 6 +- .../entertainment.ie.channels.xml | 222 +- .../entertainment.ie.config.js | 6 +- .../entertainment.ie/entertainment.ie.test.js | 2 +- .../epg.i-cable.com.channels.xml | 332 +- .../epg.i-cable.com/epg.i-cable.com.config.js | 6 +- sites/epg.i-cable.com/epg.i-cable.com.test.js | 4 +- .../firstmedia.com.channels.xml | 374 +- sites/firstmedia.com/firstmedia.com.config.js | 50 +- sites/firstmedia.com/firstmedia.com.test.js | 32 +- sites/flixed.io/flixed.io.channels.xml | 992 ++-- sites/flixed.io/flixed.io.config.js | 2 +- sites/flixed.io/flixed.io.test.js | 6 +- .../foxsports.com.au.channels.xml | 38 +- .../foxsports.com.au/foxsports.com.au.test.js | 10 +- .../foxtel.com.au/foxtel.com.au.channels.xml | 390 +- sites/foxtel.com.au/foxtel.com.au.config.js | 21 +- sites/foxtel.com.au/foxtel.com.au.test.js | 2 +- .../frikanalen.no/frikanalen.no.channels.xml | 8 +- sites/frikanalen.no/frikanalen.no.test.js | 11 +- sites/gatotv.com/gatotv.com.channels.xml | 980 ++-- sites/gatotv.com/gatotv.com.config.js | 3 +- sites/gatotv.com/gatotv.com.test.js | 4 +- .../getafteritmedia.com.channels.xml | 16 +- .../getafteritmedia.com.test.js | 6 +- .../guidatv.sky.it.channels.xml | 332 +- sites/guidatv.sky.it/guidatv.sky.it.test.js | 7 +- .../guide.dstv.com.channels.xml | 648 ++- sites/guide.dstv.com/guide.dstv.com.config.js | 12 +- sites/guide.dstv.com/guide.dstv.com.test.js | 9 +- sites/hd-plus.de/hd-plus.de.channels.xml | 246 +- sites/hd-plus.de/hd-plus.de.test.js | 13 +- sites/horizon.tv/horizon.tv.channels.xml | 374 +- sites/horizon.tv/horizon.tv.config.js | 6 +- sites/horizon.tv/horizon.tv.test.js | 229 +- sites/i.mjh.nz/i.mjh.nz.config.js | 5 +- sites/i.mjh.nz/i.mjh.nz.test.js | 4 +- sites/i.mjh.nz/i.mjh.nz_foxtel.channels.xml | 172 +- sites/i.mjh.nz/i.mjh.nz_plex.channels.xml | 660 ++- sites/i.mjh.nz/i.mjh.nz_pluto.channels.xml | 666 ++- sites/i.mjh.nz/i.mjh.nz_samsung.channels.xml | 454 +- sites/i.mjh.nz/i.mjh.nz_skygo.channels.xml | 204 +- sites/i.mjh.nz/i.mjh.nz_stirr.channels.xml | 218 +- sites/i24news.tv/i24news.tv.channels.xml | 12 +- sites/i24news.tv/i24news.tv.test.js | 7 +- .../indihometv.com.channels.xml | 305 +- sites/indihometv.com/indihometv.com.config.js | 4 +- sites/indihometv.com/indihometv.com.test.js | 9 +- .../ionplustv.com/ionplustv.com.channels.xml | 8 +- sites/ionplustv.com/ionplustv.com.config.js | 7 +- sites/ionplustv.com/ionplustv.com.test.js | 9 +- sites/ipko.com/ipko.com.channels.xml | 76 +- sites/ipko.com/ipko.com.test.js | 10 +- sites/kan.org.il/kan.org.il.channels.xml | 12 +- sites/kan.org.il/kan.org.il.config.js | 1 - sites/kan.org.il/kan.org.il.test.js | 7 +- sites/knr.gl/knr.gl.channels.xml | 8 +- sites/knr.gl/knr.gl.config.js | 2 +- sites/knr.gl/knr.gl.test.js | 11 +- sites/kplus.vn/kplus.vn.channels.xml | 58 +- sites/kplus.vn/kplus.vn.config.js | 3 +- sites/kplus.vn/kplus.vn.test.js | 7 +- sites/kvf.fo/kvf.fo.channels.xml | 8 +- sites/kvf.fo/kvf.fo.test.js | 6 +- sites/m.tv.sms.cz/m.tv.sms.cz.channels.xml | 1058 ++-- sites/m.tv.sms.cz/m.tv.sms.cz.config.js | 2 +- sites/m.tv.sms.cz/m.tv.sms.cz.test.js | 8 +- sites/magentatv.at/magentatv.at.channels.xml | 434 +- sites/magentatv.at/magentatv.at.config.js | 12 +- sites/magentatv.at/magentatv.at.test.js | 4 +- sites/magentatv.de/magentatv.de.channels.xml | 522 +- sites/magentatv.de/magentatv.de.config.js | 5 +- sites/magentatv.de/magentatv.de.test.js | 7 +- sites/magticom.ge/magticom.ge.channels.xml | 234 +- sites/magticom.ge/magticom.ge.config.js | 8 +- sites/magticom.ge/magticom.ge.test.js | 14 +- sites/mako.co.il/mako.co.il.channels.xml | 8 +- sites/mako.co.il/mako.co.il.config.js | 6 - sites/mako.co.il/mako.co.il.test.js | 11 +- .../maxtv.hrvatskitelekom.hr.channels.xml | 326 +- .../maxtv.hrvatskitelekom.hr.test.js | 8 +- sites/maxtvgo.mk/maxtvgo.mk.channels.xml | 108 +- sites/maxtvgo.mk/maxtvgo.mk.config.js | 6 +- sites/maxtvgo.mk/maxtvgo.mk.test.js | 12 +- sites/mbc.net/mbc.net.channels.xml | 40 +- sites/mbc.net/mbc.net.config.js | 3 +- sites/mbc.net/mbc.net.test.js | 7 +- .../mediagenie.co.kr.channels.xml | 16 +- .../mediagenie.co.kr.config.js | 7 +- .../mediagenie.co.kr/mediagenie.co.kr.test.js | 6 +- .../mediaklikk.hu/mediaklikk.hu.channels.xml | 22 +- sites/mediaklikk.hu/mediaklikk.hu.config.js | 2 +- sites/mediaklikk.hu/mediaklikk.hu.test.js | 8 +- sites/mediaset.it/mediaset.it.channels.xml | 36 +- sites/melita.com/melita.com.channels.xml | 242 +- sites/melita.com/melita.com.test.js | 7 +- sites/meo.pt/meo.pt.channels.xml | 408 +- sites/meo.pt/meo.pt.config.js | 2 +- sites/meo.pt/meo.pt.test.js | 2 +- sites/mewatch.sg/mewatch.sg.channels.xml | 40 +- sites/mewatch.sg/mewatch.sg.config.js | 2 +- sites/mewatch.sg/mewatch.sg.test.js | 10 +- sites/mi.tv/mi.tv.config.js | 2 +- sites/mi.tv/mi.tv.test.js | 19 +- sites/mi.tv/mi.tv_ar.channels.xml | 324 +- sites/mi.tv/mi.tv_br.channels.xml | 516 +- sites/mi.tv/mi.tv_cl.channels.xml | 164 +- sites/mi.tv/mi.tv_co.channels.xml | 88 +- sites/mi.tv/mi.tv_gt.channels.xml | 42 +- sites/mi.tv/mi.tv_hn.channels.xml | 50 +- sites/mi.tv/mi.tv_mx.channels.xml | 58 +- sites/mi.tv/mi.tv_pe.channels.xml | 44 +- sites/mi.tv/mi.tv_sv.channels.xml | 30 +- sites/mncvision.id/mncvision.id.channels.xml | 394 +- sites/mncvision.id/mncvision.id.config.js | 8 +- sites/mncvision.id/mncvision.id.test.js | 4 +- sites/moji.id/moji.id.channels.xml | 9 +- sites/moji.id/moji.id.config.js | 158 +- sites/moji.id/moji.id.test.js | 41 +- .../mon-programme-tv.be.channels.xml | 228 +- .../mon-programme-tv.be.config.js | 2 +- .../mon-programme-tv.be.test.js | 2 +- .../movistarplus.es.channels.xml | 370 +- .../movistarplus.es/movistarplus.es.config.js | 8 +- sites/movistarplus.es/movistarplus.es.test.js | 15 +- sites/mtel.ba/mtel.ba.channels.xml | 342 +- sites/mtel.ba/mtel.ba.config.js | 2 +- sites/mtel.ba/mtel.ba.test.js | 11 +- sites/mts.rs/mts.rs.channels.xml | 702 ++- sites/mts.rs/mts.rs.config.js | 12 +- sites/mts.rs/mts.rs.test.js | 10 +- .../mujtvprogram.cz.channels.xml | 544 +- sites/mujtvprogram.cz/mujtvprogram.cz.test.js | 7 +- sites/musor.tv/musor.tv.channels.xml | 344 +- sites/musor.tv/musor.tv.config.js | 2 +- sites/musor.tv/musor.tv.test.js | 8 +- .../myafn.dodmedia.osd.mil.channels.xml | 22 +- .../myafn.dodmedia.osd.mil.config.js | 4 +- .../myafn.dodmedia.osd.mil.test.js | 5 +- sites/mysky.com.ph/mysky.com.ph.channels.xml | 246 +- sites/mysky.com.ph/mysky.com.ph.config.js | 2 +- sites/mysky.com.ph/mysky.com.ph.test.js | 7 +- .../mytvsuper.com/mytvsuper.com.channels.xml | 214 +- sites/mytvsuper.com/mytvsuper.com.test.js | 3 +- sites/nhk.or.jp/nhk.or.jp.channels.xml | 10 +- sites/nhk.or.jp/nhk.or.jp.config.js | 99 +- sites/nhk.or.jp/nhk.or.jp.test.js | 43 +- .../nhkworldpremium.com.test.js | 7 +- .../nhkworldpremium.com_en.channels.xml | 8 +- .../nhkworldpremium.com_ja.channels.xml | 8 +- sites/nos.pt/nos.pt.channels.xml | 414 +- sites/nos.pt/nos.pt.config.js | 7 +- sites/nos.pt/nos.pt.test.js | 6 +- .../novacyprus.com.channels.xml | 64 +- sites/novacyprus.com/novacyprus.com.config.js | 6 +- sites/novacyprus.com/novacyprus.com.test.js | 9 +- .../novasports.gr/novasports.gr.channels.xml | 38 +- sites/novasports.gr/novasports.gr.config.js | 6 +- sites/novasports.gr/novasports.gr.test.js | 2 +- .../nowplayer.now.com.channels.xml | 492 +- .../nowplayer.now.com.config.js | 2 +- .../nowplayer.now.com.test.js | 9 +- .../nuevosiglo.com.uy.channels.xml | 354 +- .../nuevosiglo.com.uy.config.js | 2 - .../nuevosiglo.com.uy.test.js | 8 +- .../ontvtonight.com/ontvtonight.com.config.js | 6 +- sites/ontvtonight.com/ontvtonight.com.test.js | 15 +- .../ontvtonight.com_au.channels.xml | 106 +- .../ontvtonight.com_ie.channels.xml | 12 +- .../ontvtonight.com_uk.channels.xml | 202 +- .../ontvtonight.com_us.channels.xml | 78 +- sites/osn.com/osn.com.channels.xml | 213 - sites/osn.com/osn.com.config.js | 5 +- sites/osn.com/osn.com_ar.channels.xml | 104 + sites/osn.com/osn.com_en.channels.xml | 104 + sites/pbsguam.org/pbsguam.org.channels.xml | 8 +- sites/pbsguam.org/pbsguam.org.config.js | 11 +- sites/pbsguam.org/pbsguam.org.test.js | 6 +- sites/plex.tv/plex.tv.channels.xml | 686 ++- sites/plex.tv/plex.tv.config.js | 6 +- sites/plex.tv/plex.tv.test.js | 3 +- .../programacion-tv.elpais.com.channels.xml | 402 +- .../programacion-tv.elpais.com.config.js | 2 +- .../programacion-tv.elpais.com.test.js | 4 +- .../programacion.tcc.com.uy.channels.xml | 304 +- .../programacion.tcc.com.uy.test.js | 4 +- .../programetv.ro/programetv.ro.channels.xml | 462 +- sites/programetv.ro/programetv.ro.config.js | 4 +- sites/programetv.ro/programetv.ro.test.js | 9 +- .../programme-tv.net.channels.xml | 428 +- .../programme-tv.vini.pf.channels.xml | 10 +- .../programme-tv.vini.pf.config.js | 7 +- .../programme-tv.vini.pf.test.js | 29 +- .../programme.tvb.com.channels.xml | 24 +- .../programme.tvb.com.test.js | 2 +- .../programtv.onet.pl.channels.xml | 682 ++- .../programtv.onet.pl.test.js | 16 +- .../proximusmwc.be.channels.xml | 420 +- sites/proximusmwc.be/proximusmwc.be.config.js | 5 +- sites/proximusmwc.be/proximusmwc.be.test.js | 9 +- sites/raiplay.it/raiplay.it.channels.xml | 34 +- sites/raiplay.it/raiplay.it.test.js | 7 +- .../reportv.com.ar.channels.xml | 328 +- sites/reportv.com.ar/reportv.com.ar.config.js | 12 +- sites/reportv.com.ar/reportv.com.ar.test.js | 2 +- sites/rev.bs/rev.bs.channels.xml | 366 +- sites/rev.bs/rev.bs.config.js | 5 +- sites/rev.bs/rev.bs.test.js | 17 +- sites/rotana.net/rotana.net.channels.xml | 28 +- sites/rotana.net/rotana.net.config.js | 7 +- sites/rotana.net/rotana.net.test.js | 8 +- sites/rtb.gov.bn/rtb.gov.bn.channels.xml | 12 +- sites/rtb.gov.bn/rtb.gov.bn.config.js | 13 +- sites/rtb.gov.bn/rtb.gov.bn.test.js | 2 +- sites/rthk.hk/rthk.hk.channels.xml | 22 +- sites/rthk.hk/rthk.hk.config.js | 7 +- sites/rthk.hk/rthk.hk.test.js | 3 +- .../rtmklik.rtm.gov.my.channels.xml | 22 +- .../rtmklik.rtm.gov.my.test.js | 7 +- sites/rtp.pt/rtp.pt.channels.xml | 26 +- sites/rtp.pt/rtp.pt.test.js | 2 +- sites/ruv.is/ruv.is.channels.xml | 10 +- sites/ruv.is/ruv.is.config.js | 3 +- sites/ruv.is/ruv.is.test.js | 4 +- sites/sat.tv/sat.tv.channels.xml | 1122 ++-- sites/sat.tv/sat.tv.config.js | 5 +- sites/sat.tv/sat.tv.test.js | 2 +- sites/siba.com.co/siba.com.co.channels.xml | 202 +- sites/siba.com.co/siba.com.co.test.js | 7 +- sites/singtel.com/singtel.com.channels.xml | 310 +- sites/singtel.com/singtel.com.config.js | 8 +- sites/singtel.com/singtel.com.test.js | 14 +- sites/sjonvarp.is/sjonvarp.is.channels.xml | 40 +- sites/sjonvarp.is/sjonvarp.is.config.js | 1 - sites/sjonvarp.is/sjonvarp.is.test.js | 2 +- sites/sky.co.nz/sky.co.nz.channels.xml | 229 +- sites/sky.co.nz/sky.co.nz.config.js | 4 +- sites/sky.co.nz/sky.co.nz.test.js | 10 +- sites/sky.com/sky.com.channels.xml | 808 ++- sites/sky.com/sky.com.config.js | 2 +- sites/sky.com/sky.com.test.js | 7 +- sites/sky.de/sky.de.channels.xml | 195 +- sites/sky.de/sky.de.config.js | 12 +- sites/sky.de/sky.de.test.js | 9 +- sites/sportsnet.ca/sportsnet.ca.channels.xml | 22 +- sites/sportsnet.ca/sportsnet.ca.test.js | 8 +- .../starhubtvplus.com.channels.xml | 264 +- .../starhubtvplus.com.config.js | 7 +- .../starhubtvplus.com.test.js | 8 +- .../startimestv.com.channels.xml | 684 ++- .../startimestv.com/startimestv.com.config.js | 12 +- sites/startimestv.com/startimestv.com.test.js | 8 +- sites/startv.com/startv.com.channels.xml | 88 +- sites/startv.com/startv.com.config.js | 1 - sites/startv.com/startv.com.test.js | 7 +- .../streamingtvguides.com.channels.xml | 8 +- .../streamingtvguides.com.config.js | 4 +- .../streamingtvguides.com.test.js | 6 +- .../superguidatv.it.channels.xml | 362 +- .../superguidatv.it/superguidatv.it.config.js | 6 +- sites/superguidatv.it/superguidatv.it.test.js | 6 +- .../taiwanplus.com.channels.xml | 9 +- sites/taiwanplus.com/taiwanplus.com.config.js | 109 +- sites/taiwanplus.com/taiwanplus.com.test.js | 43 +- sites/tapdmv.com/tapdmv.com.channels.xml | 64 +- sites/tapdmv.com/tapdmv.com.config.js | 4 +- sites/tapdmv.com/tapdmv.com.test.js | 7 +- .../telecablesat.fr.channels.xml | 566 +- .../telecablesat.fr/telecablesat.fr.config.js | 13 +- sites/telecablesat.fr/telecablesat.fr.test.js | 8 +- sites/telenet.tv/telenet.tv.channels.xml | 226 +- sites/telenet.tv/telenet.tv.test.js | 4 +- sites/teliatv.ee/teliatv.ee.channels.xml | 341 -- sites/teliatv.ee/teliatv.ee.config.js | 4 +- sites/teliatv.ee/teliatv.ee.test.js | 11 +- sites/teliatv.ee/teliatv.ee_en.channels.xml | 96 + sites/teliatv.ee/teliatv.ee_et.channels.xml | 73 + sites/teliatv.ee/teliatv.ee_ru.channels.xml | 86 + sites/telkku.com/telkku.com.channels.xml | 198 +- sites/telkku.com/telkku.com.config.js | 4 +- sites/telkku.com/telkku.com.test.js | 2 +- sites/telkussa.fi/telkussa.fi.channels.xml | 92 +- sites/telkussa.fi/telkussa.fi.config.js | 2 +- sites/telsu.fi/telsu.fi.channels.xml | 56 +- sites/telsu.fi/telsu.fi.config.js | 6 +- sites/telsu.fi/telsu.fi.test.js | 2 +- sites/tivu.tv/tivu.tv.channels.xml | 148 +- sites/tivu.tv/tivu.tv.config.js | 7 +- sites/tivu.tv/tivu.tv.test.js | 7 +- .../toonamiaftermath.com.channels.xml | 8 +- .../toonamiaftermath.com.config.js | 19 +- .../toonamiaftermath.com.test.js | 6 +- .../transvision.co.id.channels.xml | 162 +- .../transvision.co.id.config.js | 12 +- .../transvision.co.id.test.js | 7 +- .../turksatkablo.com.tr.channels.xml | 302 +- .../turksatkablo.com.tr.config.js | 4 +- .../turksatkablo.com.tr.test.js | 7 +- sites/tv.blue.ch/tv.blue.ch.channels.xml | 1626 +++--- sites/tv.blue.ch/tv.blue.ch.config.js | 3 +- sites/tv.blue.ch/tv.blue.ch.test.js | 14 +- sites/tv.cctv.com/tv.cctv.com.channels.xml | 194 +- sites/tv.dir.bg/tv.dir.bg.channels.xml | 206 +- sites/tv.dir.bg/tv.dir.bg.config.js | 4 +- sites/tv.dir.bg/tv.dir.bg.test.js | 14 +- sites/tv.lv/tv.lv.channels.xml | 46 +- sites/tv.mail.ru/tv.mail.ru.channels.xml | 88 +- sites/tv.mail.ru/tv.mail.ru.config.js | 1 + sites/tv.mail.ru/tv.mail.ru.test.js | 16 +- .../tv.movistar.com.pe.channels.xml | 482 +- .../tv.movistar.com.pe.config.js | 4 +- .../tv.movistar.com.pe.test.js | 4 +- sites/tv.nu/tv.nu.channels.xml | 362 +- sites/tv.nu/tv.nu.test.js | 7 +- sites/tv.post.lu/tv.post.lu.channels.xml | 678 ++- sites/tv.post.lu/tv.post.lu.config.js | 2 +- sites/tv.post.lu/tv.post.lu.test.js | 7 +- .../tv.trueid.net/tv.trueid.net.channels.xml | 186 +- sites/tv.trueid.net/tv.trueid.net.test.js | 5 +- .../tv.vera.com.uy.channels.xml | 112 +- sites/tv.vera.com.uy/tv.vera.com.uy.config.js | 2 +- sites/tv.vera.com.uy/tv.vera.com.uy.test.js | 4 +- sites/tv.yandex.ru/tv.yandex.ru.channels.xml | 582 ++- sites/tv.yandex.ru/tv.yandex.ru.config.js | 2 +- sites/tv.yandex.ru/tv.yandex.ru.test.js | 9 +- sites/tv.yettel.hu/tv.yettel.hu.channels.xml | 154 +- sites/tv.yettel.hu/tv.yettel.hu.config.js | 2 +- sites/tv.yettel.hu/tv.yettel.hu.test.js | 4 +- sites/tv24.co.uk/tv24.co.uk.channels.xml | 216 +- sites/tv24.co.uk/tv24.co.uk.config.js | 6 +- sites/tv24.co.uk/tv24.co.uk.test.js | 2 +- sites/tv24.se/tv24.se.channels.xml | 610 ++- sites/tv24.se/tv24.se.config.js | 14 +- sites/tv24.se/tv24.se.test.js | 4 +- .../tv2go.t-2.net/tv2go.t-2.net.channels.xml | 558 +- sites/tv2go.t-2.net/tv2go.t-2.net.test.js | 14 +- sites/tva.tv/tva.tv.channels.xml | 62 +- sites/tva.tv/tva.tv.config.js | 7 +- sites/tva.tv/tva.tv.test.js | 12 +- .../tvarenasport.com.channels.xml | 30 +- .../tvarenasport.com.config.js | 4 +- .../tvarenasport.com/tvarenasport.com.test.js | 9 +- .../tvarenasport.hr.channels.xml | 26 +- .../tvarenasport.hr/tvarenasport.hr.config.js | 7 +- sites/tvarenasport.hr/tvarenasport.hr.test.js | 9 +- .../tvcubana.icrt.cu.channels.xml | 26 +- .../tvcubana.icrt.cu.config.js | 6 +- .../tvcubana.icrt.cu/tvcubana.icrt.cu.test.js | 12 +- sites/tvgids.nl/tvgids.nl.channels.xml | 240 +- sites/tvgids.nl/tvgids.nl.config.js | 2 +- sites/tvgids.nl/tvgids.nl.test.js | 4 +- sites/tvguide.com/tvguide.com.channels.xml | 176 +- sites/tvguide.com/tvguide.com.config.js | 2 +- sites/tvguide.com/tvguide.com.test.js | 2 +- .../tvguide.myjcom.jp.channels.xml | 274 +- .../tvguide.myjcom.jp.config.js | 13 +- .../tvguide.myjcom.jp.test.js | 12 +- sites/tvhebdo.com/tvhebdo.com.channels.xml | 470 +- sites/tvhebdo.com/tvhebdo.com.config.js | 3 +- sites/tvhebdo.com/tvhebdo.com.test.js | 2 +- sites/tvheute.at/tvheute.at.channels.xml | 110 +- sites/tvheute.at/tvheute.at.config.js | 2 +- sites/tvheute.at/tvheute.at.test.js | 4 +- sites/tvim.tv/tvim.tv.channels.xml | 66 +- sites/tvim.tv/tvim.tv.config.js | 4 +- sites/tvim.tv/tvim.tv.test.js | 9 +- sites/tving.com/tving.com.channels.xml | 66 +- sites/tving.com/tving.com.config.js | 8 +- sites/tving.com/tving.com.test.js | 6 +- sites/tvmi.mt/tvmi.mt.channels.xml | 12 +- sites/tvmi.mt/tvmi.mt.config.js | 2 +- sites/tvmi.mt/tvmi.mt.test.js | 4 +- sites/tvmusor.hu/tvmusor.hu.channels.xml | 186 +- sites/tvmusor.hu/tvmusor.hu.config.js | 4 +- sites/tvmusor.hu/tvmusor.hu.test.js | 8 +- .../tvpassport.com.channels.xml | 1832 ++++--- sites/tvpassport.com/tvpassport.com.config.js | 4 +- sites/tvpassport.com/tvpassport.com.test.js | 2 +- .../tvplus.com.tr/tvplus.com.tr.channels.xml | 296 +- sites/tvplus.com.tr/tvplus.com.tr.test.js | 11 +- sites/tvprofil.com/tvprofil.com.channels.xml | 1138 ++-- sites/tvprofil.com/tvprofil.com.config.js | 2 +- sites/tvprofil.com/tvprofil.com.test.js | 4 +- sites/tvtv.us/tvtv.us.channels.xml | 4598 ++++++++--------- sites/tvtv.us/tvtv.us.test.js | 11 +- sites/unifi.com.my/unifi.com.my.channels.xml | 140 +- sites/unifi.com.my/unifi.com.my.config.js | 2 +- sites/unifi.com.my/unifi.com.my.test.js | 4 +- sites/vidio.com/vidio.com.channels.xml | 140 +- sites/vidio.com/vidio.com.config.js | 4 +- sites/vidio.com/vidio.com.test.js | 13 +- .../virginmedia.com.channels.xml | 394 +- .../virginmedia.com/virginmedia.com.config.js | 2 +- sites/virginmedia.com/virginmedia.com.test.js | 21 +- .../virginmediatelevision.ie.channels.xml | 16 +- .../virginmediatelevision.ie.test.js | 9 +- .../visionplus.id/visionplus.id.channels.xml | 264 +- sites/visionplus.id/visionplus.id.config.js | 2 +- sites/visionplus.id/visionplus.id.test.js | 5 +- sites/vivacom.bg/vivacom.bg.channels.xml | 316 +- sites/vivacom.bg/vivacom.bg.config.js | 11 +- sites/vivacom.bg/vivacom.bg.test.js | 10 +- sites/vtm.be/vtm.be.channels.xml | 20 +- sites/vtm.be/vtm.be.config.js | 2 +- sites/vtm.be/vtm.be.test.js | 7 +- .../walesi.com.fj/walesi.com.fj.channels.xml | 22 +- sites/walesi.com.fj/walesi.com.fj.config.js | 5 +- sites/walesi.com.fj/walesi.com.fj.test.js | 13 +- sites/watchyour.tv/watchyour.tv.channels.xml | 84 +- sites/watchyour.tv/watchyour.tv.config.js | 4 +- sites/watchyour.tv/watchyour.tv.test.js | 7 +- sites/wavve.com/wavve.com.channels.xml | 160 +- sites/wavve.com/wavve.com.config.js | 5 +- sites/wavve.com/wavve.com.test.js | 7 +- .../worldfishingnetwork.com.channels.xml | 8 +- .../worldfishingnetwork.com.config.js | 4 +- .../worldfishingnetwork.com.test.js | 10 +- sites/xumo.tv/xumo.tv.channels.xml | 620 ++- sites/xumo.tv/xumo.tv.config.js | 6 +- sites/xumo.tv/xumo.tv.test.js | 4 +- sites/zap.co.ao/zap.co.ao.channels.xml | 232 +- sites/zap.co.ao/zap.co.ao.config.js | 3 +- sites/zap.co.ao/zap.co.ao.test.js | 6 +- sites/ziggogo.tv/ziggogo.tv.channels.xml | 290 +- sites/ziggogo.tv/ziggogo.tv.config.js | 4 +- sites/ziggogo.tv/ziggogo.tv.test.js | 4 +- sites/znbc.co.zm/znbc.co.zm.channels.xml | 14 +- sites/znbc.co.zm/znbc.co.zm.config.js | 2 +- sites/znbc.co.zm/znbc.co.zm.test.js | 13 +- sites/zuragt.mn/zuragt.mn.channels.xml | 78 +- sites/zuragt.mn/zuragt.mn.config.js | 4 +- sites/zuragt.mn/zuragt.mn.test.js | 3 +- 543 files changed, 30781 insertions(+), 31187 deletions(-) delete mode 100644 sites/bein.com/bein.com.channels.xml create mode 100644 sites/bein.com/bein.com_ar.channels.xml create mode 100644 sites/bein.com/bein.com_en.channels.xml delete mode 100644 sites/osn.com/osn.com.channels.xml create mode 100644 sites/osn.com/osn.com_ar.channels.xml create mode 100644 sites/osn.com/osn.com_en.channels.xml delete mode 100644 sites/teliatv.ee/teliatv.ee.channels.xml create mode 100644 sites/teliatv.ee/teliatv.ee_en.channels.xml create mode 100644 sites/teliatv.ee/teliatv.ee_et.channels.xml create mode 100644 sites/teliatv.ee/teliatv.ee_ru.channels.xml diff --git a/sites/9tv.co.il/9tv.co.il.channels.xml b/sites/9tv.co.il/9tv.co.il.channels.xml index 509a2f5e..b1ac4ae5 100644 --- a/sites/9tv.co.il/9tv.co.il.channels.xml +++ b/sites/9tv.co.il/9tv.co.il.channels.xml @@ -1,6 +1,4 @@ - - - 9 канал - - + + 9 канал + diff --git a/sites/9tv.co.il/9tv.co.il.config.js b/sites/9tv.co.il/9tv.co.il.config.js index 418d3c55..fcc1c312 100644 --- a/sites/9tv.co.il/9tv.co.il.config.js +++ b/sites/9tv.co.il/9tv.co.il.config.js @@ -49,7 +49,7 @@ function parseIcon($item) { 'background-image' ) if (!backgroundImage) return null - const [_, relativePath] = backgroundImage.match(/url\((.*)\)/) || [null, null] + const [, relativePath] = backgroundImage.match(/url\((.*)\)/) || [null, null] return relativePath ? `https://www.9tv.co.il${relativePath}` : null } diff --git a/sites/9tv.co.il/9tv.co.il.test.js b/sites/9tv.co.il/9tv.co.il.test.js index 3a2a65bb..fce629ca 100644 --- a/sites/9tv.co.il/9tv.co.il.test.js +++ b/sites/9tv.co.il/9tv.co.il.test.js @@ -1,4 +1,4 @@ -// npx epg-grabber --config=sites/9tv.co.il/9tv.co.il.config.js --channels=sites/9tv.co.il/9tv.co.il.channels.xml --output=guide.xml --days=2 +// npm run grab -- --site=9tv.co.il const { parser, url } = require('./9tv.co.il.config.js') const dayjs = require('dayjs') @@ -20,7 +20,8 @@ it('can generate valid url', () => { }) it('can parse response', () => { - const content = ` 06:30 Слепая Она не очень любит говорить о себе или о том, кто и зачем к ней обращается. Живет уединенно, в глуши. Но тех, кто приходит -принимает. Она видит судьбы. 09:10 Орел и решка. Морской сезон Орел и решка. Морской сезон. Ведущие -Алина Астровская и Коля Серга.` + const content = + ' 06:30 Слепая Она не очень любит говорить о себе или о том, кто и зачем к ней обращается. Живет уединенно, в глуши. Но тех, кто приходит -принимает. Она видит судьбы. 09:10 Орел и решка. Морской сезон Орел и решка. Морской сезон. Ведущие -Алина Астровская и Коля Серга.' const result = parser({ content, date }).map(p => { p.start = p.start.toJSON() p.stop = p.stop.toJSON() @@ -31,7 +32,7 @@ it('can parse response', () => { { start: '2022-03-06T04:30:00.000Z', stop: '2022-03-06T07:10:00.000Z', - title: `Слепая`, + title: 'Слепая', icon: 'https://www.9tv.co.il/download/pictures/img_id=8484.jpg', description: 'Она не очень любит говорить о себе или о том, кто и зачем к ней обращается. Живет уединенно, в глуши. Но тех, кто приходит -принимает. Она видит судьбы.' @@ -40,7 +41,7 @@ it('can parse response', () => { start: '2022-03-06T07:10:00.000Z', stop: '2022-03-06T08:10:00.000Z', icon: 'https://www.9tv.co.il/download/pictures/img_id=23694.jpg', - title: `Орел и решка. Морской сезон`, + title: 'Орел и решка. Морской сезон', description: 'Орел и решка. Морской сезон. Ведущие -Алина Астровская и Коля Серга.' } ]) @@ -50,7 +51,7 @@ it('can handle empty guide', () => { const result = parser({ date, channel, - content: `` + content: '' }) expect(result).toMatchObject([]) }) diff --git a/sites/abc.net.au/abc.net.au.channels.xml b/sites/abc.net.au/abc.net.au.channels.xml index ab4dfc52..11b270df 100644 --- a/sites/abc.net.au/abc.net.au.channels.xml +++ b/sites/abc.net.au/abc.net.au.channels.xml @@ -1,37 +1,35 @@ - - - 10 Bold - 10 Peach - 10 Shake - 7flix - 7mate - 7two - 9 Gem - 9 Go! - 9 Life - 9 Rush - ABC Kids - ABC ME - ABC News - ABC TV - ABC TV Plus - Channel 10 - Channel 7 - Channel 9 - NITV - Racing.com - SBS One - SBS Food - SBS Viceland - SBS World Movies - SBS World Watch - Spree TV - TSVN - - - - - - - + + + + + + + 10 Bold + 10 Peach + 10 Shake + 7flix + 7mate + 7two + 9 Gem + 9 Go! + 9 Life + 9 Rush + ABC Kids + ABC ME + ABC News + ABC TV + ABC TV Plus + Channel 10 + Channel 7 + Channel 9 + NITV + Racing.com + SBS One + SBS Food + SBS Viceland + SBS World Movies + SBS World Watch + Spree TV + TSVN + diff --git a/sites/abc.net.au/abc.net.au.test.js b/sites/abc.net.au/abc.net.au.test.js index 44434f0d..29e720c8 100644 --- a/sites/abc.net.au/abc.net.au.test.js +++ b/sites/abc.net.au/abc.net.au.test.js @@ -1,4 +1,4 @@ -// npx epg-grabber --config=sites/abc.net.au/abc.net.au.config.js --channels=sites/abc.net.au/abc.net.au.channels.xml --output=guide.xml --days=2 +// npm run grab -- --site=abc.net.au const { parser, url } = require('./abc.net.au.config.js') const dayjs = require('dayjs') @@ -15,7 +15,8 @@ it('can generate valid url', () => { }) it('can parse response', () => { - const content = `{"date":"2022-12-22","region":"Sydney","schedule":[{"channel":"ABC1","listing":[{"consumer_advice":"Adult Themes, Drug Use, Violence","rating":"M","show_id":912747,"repeat":true,"description":"When tragedy strikes close to home, it puts head teacher Noah Taylor on a collision course with the criminals responsible. Can the Lyell team help him stop the cycle of violence?","title":"Silent Witness","crid":"ZW2178A004S00","start_time":"2022-12-22T00:46:00","series-crid":"ZW2178A","live":false,"captioning":true,"show_type":"Episode","series_num":22,"episode_title":"Lift Up Your Hearts (part Two)","length":58,"onair_title":"Silent Witness","end_time":"2022-12-22T01:44:00","genres":["Entertainment"],"image_file":"ZW2178A004S00_460.jpg","prog_slug":"silent-witness","episode_num":4}]}]}` + const content = + '{"date":"2022-12-22","region":"Sydney","schedule":[{"channel":"ABC1","listing":[{"consumer_advice":"Adult Themes, Drug Use, Violence","rating":"M","show_id":912747,"repeat":true,"description":"When tragedy strikes close to home, it puts head teacher Noah Taylor on a collision course with the criminals responsible. Can the Lyell team help him stop the cycle of violence?","title":"Silent Witness","crid":"ZW2178A004S00","start_time":"2022-12-22T00:46:00","series-crid":"ZW2178A","live":false,"captioning":true,"show_type":"Episode","series_num":22,"episode_title":"Lift Up Your Hearts (part Two)","length":58,"onair_title":"Silent Witness","end_time":"2022-12-22T01:44:00","genres":["Entertainment"],"image_file":"ZW2178A004S00_460.jpg","prog_slug":"silent-witness","episode_num":4}]}]}' const result = parser({ content, channel }).map(p => { p.start = p.start.toJSON() @@ -27,7 +28,8 @@ it('can parse response', () => { { title: 'Silent Witness', sub_title: 'Lift Up Your Hearts (part Two)', - description: `When tragedy strikes close to home, it puts head teacher Noah Taylor on a collision course with the criminals responsible. Can the Lyell team help him stop the cycle of violence?`, + description: + 'When tragedy strikes close to home, it puts head teacher Noah Taylor on a collision course with the criminals responsible. Can the Lyell team help him stop the cycle of violence?', category: ['Entertainment'], rating: { system: 'ACB', @@ -45,7 +47,8 @@ it('can parse response', () => { it('can handle empty guide', () => { const result = parser( { - content: `NoSuchKeyThe specified key does not exist.processed/Sydney_2023-01-17.json6MRHX5TJ12X39B3Y59rH6XRMrmkFywg8Kv58iqpI6O1fuOCuEbKa1HRRYa4buByXMBTvAhz8zuAK7X5D+ZN9ZuWxyGs=` + content: + 'NoSuchKeyThe specified key does not exist.processed/Sydney_2023-01-17.json6MRHX5TJ12X39B3Y59rH6XRMrmkFywg8Kv58iqpI6O1fuOCuEbKa1HRRYa4buByXMBTvAhz8zuAK7X5D+ZN9ZuWxyGs=' }, channel ) diff --git a/sites/allente.se/allente.se.config.js b/sites/allente.se/allente.se.config.js index f2373b0f..f941be0b 100644 --- a/sites/allente.se/allente.se.config.js +++ b/sites/allente.se/allente.se.config.js @@ -47,7 +47,7 @@ module.exports = { } function parseItems(content, channel) { - const [_, channelId] = channel.site_id.split('#') + const [, channelId] = channel.site_id.split('#') const data = JSON.parse(content) if (!data || !Array.isArray(data.channels)) return [] const channelData = data.channels.find(i => i.id === channelId) diff --git a/sites/allente.se/allente.se.test.js b/sites/allente.se/allente.se.test.js index 6d6eab1c..6492b5e7 100644 --- a/sites/allente.se/allente.se.test.js +++ b/sites/allente.se/allente.se.test.js @@ -1,8 +1,8 @@ -// node ./scripts/channels.js --config=./sites/allente.se/allente.se.config.js --output=./sites/allente.se/allente.se_se.channels.xml --set=country:se --set=lang:sv -// node ./scripts/channels.js --config=./sites/allente.se/allente.se.config.js --output=./sites/allente.se/allente.se_fi.channels.xml --set=country:fi --set=lang:fi -// node ./scripts/channels.js --config=./sites/allente.se/allente.se.config.js --output=./sites/allente.se/allente.se_no.channels.xml --set=country:no --set=lang:no -// node ./scripts/channels.js --config=./sites/allente.se/allente.se.config.js --output=./sites/allente.se/allente.se_dk.channels.xml --set=country:dk --set=lang:da -// npx epg-grabber --config=sites/allente.se/allente.se.config.js --channels=sites/allente.se/allente.se_se.channels.xml --output=guide.xml --days=2 +// npm run channels:parse -- --config=./sites/allente.se/allente.se.config.js --output=./sites/allente.se/allente.se_se.channels.xml --set=country:se --set=lang:sv +// npm run channels:parse -- --config=./sites/allente.se/allente.se.config.js --output=./sites/allente.se/allente.se_fi.channels.xml --set=country:fi --set=lang:fi +// npm run channels:parse -- --config=./sites/allente.se/allente.se.config.js --output=./sites/allente.se/allente.se_no.channels.xml --set=country:no --set=lang:no +// npm run channels:parse -- --config=./sites/allente.se/allente.se.config.js --output=./sites/allente.se/allente.se_dk.channels.xml --set=country:dk --set=lang:da +// npm run grab -- --site=allente.se const { parser, url } = require('./allente.se.config.js') const dayjs = require('dayjs') @@ -29,7 +29,8 @@ it('can generate valid url for different country', () => { }) it('can parse response', () => { - const content = `{"channels":[{"id":"0148","icon":"//images.ctfassets.net/989y85n5kcxs/5uT9g9pdQWRZeDPQXVI9g6/9cc44da567f591822ed645c99ecdcb64/SVT_1_black_new__2_.png","name":"SVT1 HD (T)","events":[{"id":"0086202208220710","live":false,"time":"2022-08-22T07:10:00Z","title":"Hemmagympa med Sofia","details":{"title":"Hemmagympa med Sofia","image":"https://viasatps.api.comspace.se/PS/channeldate/image/viasat.ps/21/2022-08-22/se.cs.svt1.event.A_41214031600.jpg?size=2560x1440","description":"Svenskt träningsprogram från 2021. Styrka. Sofia Åhman leder SVT:s hemmagympapass. Denna gång fokuserar vi på styrka.","season":4,"episode":1,"categories":["other"],"duration":"20"}}]}]}` + const content = + '{"channels":[{"id":"0148","icon":"//images.ctfassets.net/989y85n5kcxs/5uT9g9pdQWRZeDPQXVI9g6/9cc44da567f591822ed645c99ecdcb64/SVT_1_black_new__2_.png","name":"SVT1 HD (T)","events":[{"id":"0086202208220710","live":false,"time":"2022-08-22T07:10:00Z","title":"Hemmagympa med Sofia","details":{"title":"Hemmagympa med Sofia","image":"https://viasatps.api.comspace.se/PS/channeldate/image/viasat.ps/21/2022-08-22/se.cs.svt1.event.A_41214031600.jpg?size=2560x1440","description":"Svenskt träningsprogram från 2021. Styrka. Sofia Åhman leder SVT:s hemmagympapass. Denna gång fokuserar vi på styrka.","season":4,"episode":1,"categories":["other"],"duration":"20"}}]}]}' const result = parser({ content, channel }).map(p => { p.start = p.start.toJSON() p.stop = p.stop.toJSON() @@ -40,9 +41,10 @@ it('can parse response', () => { { start: '2022-08-22T07:10:00.000Z', stop: '2022-08-22T07:30:00.000Z', - title: `Hemmagympa med Sofia`, + title: 'Hemmagympa med Sofia', category: ['other'], - description: `Svenskt träningsprogram från 2021. Styrka. Sofia Åhman leder SVT:s hemmagympapass. Denna gång fokuserar vi på styrka.`, + description: + 'Svenskt träningsprogram från 2021. Styrka. Sofia Åhman leder SVT:s hemmagympapass. Denna gång fokuserar vi på styrka.', icon: 'https://viasatps.api.comspace.se/PS/channeldate/image/viasat.ps/21/2022-08-22/se.cs.svt1.event.A_41214031600.jpg?size=2560x1440', season: 4, episode: 1 @@ -54,7 +56,7 @@ it('can handle empty guide', () => { const result = parser({ date, channel, - content: `{"date":"2001-11-17","categories":[],"channels":[]}` + content: '{"date":"2001-11-17","categories":[],"channels":[]}' }) expect(result).toMatchObject([]) }) diff --git a/sites/allente.se/allente.se_dk.channels.xml b/sites/allente.se/allente.se_dk.channels.xml index d0022b5b..91b7aab3 100644 --- a/sites/allente.se/allente.se_dk.channels.xml +++ b/sites/allente.se/allente.se_dk.channels.xml @@ -1,66 +1,64 @@ - - - 6'eren - Boomerang Nordic - Canal 9 - Cartoon Network Nordic - C More First - C More Hits - C More Series - C More Stars - Disney Channel Scandinavia - Disney Junior Scandinavia - DK 4 - DR 1 - DR 2 - DR Ramasjang - E! Europe - EuroNews English - Eurosport 2 Danmark - God TV Scandinavia - Kanal 4 - Kanal 5 - MTV 00s - MTV 80s - MTV Nordic - MTV Hits Europe - National Geographic Danmark - National Geographic Wild Europe - Nickelodeon Danmark - Nick Jr Scandinavia - Nicktoons Scandinavia - NRK1 - Paramount Network Danmark - SF-kanalen - Sky News International - SVT 1 - TV 2 - TV 2 Charlie - TV 2 Fri - TV 2 News - TV 2 Sport - TV 2 Zulu - TV 3 Danmark - TV 3 Max - TV3+ - TV 3 Puls - TV 3 Sport - TV 4 - V Film Action - V Film Family - V Film Hits - V Film Premiere - Viasat Explore - Viasat History HD - Viasat Nature - V Series - V Sport Golf - V Sport Ultra HD - Xee - Aljazeera English - BBC World News Europe - CNBC Europe - CNN International Europe - - + + 6'eren + Boomerang Nordic + Canal 9 + Cartoon Network Nordic + C More First + C More Hits + C More Series + C More Stars + Disney Channel Scandinavia + Disney Junior Scandinavia + DK 4 + DR 1 + DR 2 + DR Ramasjang + E! Europe + EuroNews English + Eurosport 2 Danmark + God TV Scandinavia + Kanal 4 + Kanal 5 + MTV 00s + MTV 80s + MTV Nordic + MTV Hits Europe + National Geographic Danmark + National Geographic Wild Europe + Nickelodeon Danmark + Nick Jr Scandinavia + Nicktoons Scandinavia + NRK1 + Paramount Network Danmark + SF-kanalen + Sky News International + SVT 1 + TV 2 + TV 2 Charlie + TV 2 Fri + TV 2 News + TV 2 Sport + TV 2 Zulu + TV 3 Danmark + TV 3 Max + TV3+ + TV 3 Puls + TV 3 Sport + TV 4 + V Film Action + V Film Family + V Film Hits + V Film Premiere + Viasat Explore + Viasat History HD + Viasat Nature + V Series + V Sport Golf + V Sport Ultra HD + Xee + Aljazeera English + BBC World News Europe + CNBC Europe + CNN International Europe + diff --git a/sites/allente.se/allente.se_fi.channels.xml b/sites/allente.se/allente.se_fi.channels.xml index adbb6657..8320b89f 100644 --- a/sites/allente.se/allente.se_fi.channels.xml +++ b/sites/allente.se/allente.se_fi.channels.xml @@ -1,40 +1,38 @@ - - - Boomerang - Cartoon Network - CNBC - CNN - Disney Channel - Disney Junior - E! - MTV 00s - MTV - National Geographic - National Geographic Wild - Nick Jr - TV 3 Sverige - TV 6 Sverige - V Film Action - V Film Family - V Film Hits - V Film Premiere - Viasat Explore - Viasat History HD - Viasat Nature - V Sport 1 Suomi - V Sport 1 Sverige - V Sport 2 Suomi - V Sport Football - V Sport Golf - V Sport Live 1 - V Sport Live 2 - V Sport Live 3 - V Sport Live 4 - V Sport Live 5 - V Sport + Suomi - V Sport Premium - V Sport Ultra HD - V Sport Vinter - - \ No newline at end of file + + Boomerang + Cartoon Network + CNBC + CNN + Disney Channel + Disney Junior + E! + MTV 00s + MTV + National Geographic + National Geographic Wild + Nick Jr + TV 3 Sverige + TV 6 Sverige + V Film Action + V Film Family + V Film Hits + V Film Premiere + Viasat Explore + Viasat History HD + Viasat Nature + V Sport 1 Suomi + V Sport 1 Sverige + V Sport 2 Suomi + V Sport Football + V Sport Golf + V Sport Live 1 + V Sport Live 2 + V Sport Live 3 + V Sport Live 4 + V Sport Live 5 + V Sport + Suomi + V Sport Premium + V Sport Ultra HD + V Sport Vinter + \ No newline at end of file diff --git a/sites/allente.se/allente.se_no.channels.xml b/sites/allente.se/allente.se_no.channels.xml index 3bfeb483..bc0e0003 100644 --- a/sites/allente.se/allente.se_no.channels.xml +++ b/sites/allente.se/allente.se_no.channels.xml @@ -1,75 +1,73 @@ - - - Aljazeera - BBC World News - Cartoon Network - CNBC - CNN - Discovery Channel - Disney Channel - Disney Junior - DR 2 - E! - EuroNews - Eurosport 1 - Eurosport - FEM - Kunskapskanalen - Matkanalen - Max - MTV 00s - MTV 80s - MTV Hits - MTV Nordic - National Geographic - National Geographic Wild - NFL Network - Nickelodeon - Nick Jr - Nicktoons - NRK1 - NRK2 - NRK3 - Sky News International - SVT 1 - SVT 2 - SVT 24 - SVT Barn - TV 2 - TV 2 - TV 2 Livsstil - TV 2 Nyhetskanalen - TV 2 Sport 1 - TV 2 Sport 2 - TV 2 Sport Premium - TV 2 Zebra - TV 3 Danmark - TV 3 Norge - TV 3 Sverige - TV 6 Norge - TV 6 Sverige - TV Norge - V 4 - V Film Action - V Film Family - V Film Hits - V Film Premiere - Viasat Explore - Viasat History HD - Viasat Nature - Vox - V Series - V Sport 1 - V Sport 2 - V Sport 3 - V Sport Golf - V Sport Live 1 - V Sport Live 2 - V Sport Live 3 - V Sport Live 4 - V Sport Live 5 - V Sport + - V Sport Ultra HD - - \ No newline at end of file + + Aljazeera + BBC World News + Cartoon Network + CNBC + CNN + Discovery Channel + Disney Channel + Disney Junior + DR 2 + E! + EuroNews + Eurosport 1 + Eurosport + FEM + Kunskapskanalen + Matkanalen + Max + MTV 00s + MTV 80s + MTV Hits + MTV Nordic + National Geographic + National Geographic Wild + NFL Network + Nickelodeon + Nick Jr + Nicktoons + NRK1 + NRK2 + NRK3 + Sky News International + SVT 1 + SVT 2 + SVT 24 + SVT Barn + TV 2 + TV 2 + TV 2 Livsstil + TV 2 Nyhetskanalen + TV 2 Sport 1 + TV 2 Sport 2 + TV 2 Sport Premium + TV 2 Zebra + TV 3 Danmark + TV 3 Norge + TV 3 Sverige + TV 6 Norge + TV 6 Sverige + TV Norge + V 4 + V Film Action + V Film Family + V Film Hits + V Film Premiere + Viasat Explore + Viasat History HD + Viasat Nature + Vox + V Series + V Sport 1 + V Sport 2 + V Sport 3 + V Sport Golf + V Sport Live 1 + V Sport Live 2 + V Sport Live 3 + V Sport Live 4 + V Sport Live 5 + V Sport + + V Sport Ultra HD + \ No newline at end of file diff --git a/sites/allente.se/allente.se_se.channels.xml b/sites/allente.se/allente.se_se.channels.xml index cc4d7f66..3461dac9 100644 --- a/sites/allente.se/allente.se_se.channels.xml +++ b/sites/allente.se/allente.se_se.channels.xml @@ -1,114 +1,112 @@ - - - Aljazeera - Animal Planet Sverige - ATG Live - BBC Earth HD - BBC Brit HD - BBC World News - Bloomberg TV - Boomerang - Cartoon Network - C More First - C More Fotboll - C More Hits - C More Hockey - C More Live - C More Live 2 - C More Live 3 - C More Live 4 - C More Live 5 - C More Mix - C More Series - C More Stars - CNBC - CNN - Discovery Channel Sverige - Discovery Science Sverige - Disney Channel - Disney Junior - Discovery+ Extra 1 - Discovery+ Extra 2 - Discovery+ Extra 3 - Discovery+ Extra 4 - Discovery+ Extra 5 - Discovery+ Extra 6 - Discovery+ Extra 7 - Discovery+ Extra 8 - DR 1 - DR 2 - DR Ramasjang - E! - EuroNews - Eurosport 1 - Eurosport 2 - Godare - God TV - History - H2 - Horse & Country TV - Investigation Discovery Sverige - Kanal 5 - Kanal 9 - Kanal 11 - Kunskapskanalen - MTV 00s - MTV 80s - MTV Hits - MTV Nordic - Motorvision - National Geographic - National Geographic Wild - NFL Network - Nickelodeon - Nick Jr - Nicktoons - NRK1 - NRK2 - NRK3 - Paramount Network - Paramount+ Movies - Paramount+ Series - SF-kanalen - Sjuan - Sky News International - Sportkanalen - SVT 1 - SVT 2 - SVT 24 - SVT Barn - TLC Sverige - TV 2 - TV 3 - TV 4 - TV 4 Fakta - TV 4 Film - TV 4 Guld - TV 6 - TV 8 - TV 10 - TV 12 - V Film Action - V Film Family - V Film Hits - V Film Premiere - Viasat Explore - Viasat History HD - Viasat Nature - V Series - V Sport 1 - V Sport Extra - V Sport Football - V Sport Golf - V Sport Live 1 - V Sport Live 2 - V Sport Live 3 - V Sport Live 4 - V Sport Live 5 - V Sport Motor - V Sport Premium - V Sport Ultra HD - V Sport Vinter - - + + Aljazeera + Animal Planet Sverige + ATG Live + BBC Earth HD + BBC Brit HD + BBC World News + Bloomberg TV + Boomerang + Cartoon Network + C More First + C More Fotboll + C More Hits + C More Hockey + C More Live + C More Live 2 + C More Live 3 + C More Live 4 + C More Live 5 + C More Mix + C More Series + C More Stars + CNBC + CNN + Discovery Channel Sverige + Discovery Science Sverige + Disney Channel + Disney Junior + Discovery+ Extra 1 + Discovery+ Extra 2 + Discovery+ Extra 3 + Discovery+ Extra 4 + Discovery+ Extra 5 + Discovery+ Extra 6 + Discovery+ Extra 7 + Discovery+ Extra 8 + DR 1 + DR 2 + DR Ramasjang + E! + EuroNews + Eurosport 1 + Eurosport 2 + Godare + God TV + History + H2 + Horse & Country TV + Investigation Discovery Sverige + Kanal 5 + Kanal 9 + Kanal 11 + Kunskapskanalen + MTV 00s + MTV 80s + MTV Hits + MTV Nordic + Motorvision + National Geographic + National Geographic Wild + NFL Network + Nickelodeon + Nick Jr + Nicktoons + NRK1 + NRK2 + NRK3 + Paramount Network + Paramount+ Movies + Paramount+ Series + SF-kanalen + Sjuan + Sky News International + Sportkanalen + SVT 1 + SVT 2 + SVT 24 + SVT Barn + TLC Sverige + TV 2 + TV 3 + TV 4 + TV 4 Fakta + TV 4 Film + TV 4 Guld + TV 6 + TV 8 + TV 10 + TV 12 + V Film Action + V Film Family + V Film Hits + V Film Premiere + Viasat Explore + Viasat History HD + Viasat Nature + V Series + V Sport 1 + V Sport Extra + V Sport Football + V Sport Golf + V Sport Live 1 + V Sport Live 2 + V Sport Live 3 + V Sport Live 4 + V Sport Live 5 + V Sport Motor + V Sport Premium + V Sport Ultra HD + V Sport Vinter + diff --git a/sites/andorradifusio.ad/andorradifusio.ad.channels.xml b/sites/andorradifusio.ad/andorradifusio.ad.channels.xml index 63556d68..5b24834c 100644 --- a/sites/andorradifusio.ad/andorradifusio.ad.channels.xml +++ b/sites/andorradifusio.ad/andorradifusio.ad.channels.xml @@ -1,6 +1,4 @@ - - - Andorra TV - - \ No newline at end of file + + Andorra TV + \ No newline at end of file diff --git a/sites/andorradifusio.ad/andorradifusio.ad.config.js b/sites/andorradifusio.ad/andorradifusio.ad.config.js index b0f7a33d..c20b2900 100644 --- a/sites/andorradifusio.ad/andorradifusio.ad.config.js +++ b/sites/andorradifusio.ad/andorradifusio.ad.config.js @@ -47,8 +47,8 @@ function parseItems(content, date) { .parent() .parent() const items = [] - const titles = column.find(`p`).toArray() - column.find(`h4`).each((i, time) => { + const titles = column.find('p').toArray() + column.find('h4').each((i, time) => { items.push({ time: $(time).text(), title: $(titles[i]).text() diff --git a/sites/andorradifusio.ad/andorradifusio.ad.test.js b/sites/andorradifusio.ad/andorradifusio.ad.test.js index 4abbf7a7..1e54024b 100644 --- a/sites/andorradifusio.ad/andorradifusio.ad.test.js +++ b/sites/andorradifusio.ad/andorradifusio.ad.test.js @@ -1,4 +1,4 @@ -// npx epg-grabber --config=sites/andorradifusio.ad/andorradifusio.ad.config.js --channels=sites/andorradifusio.ad/andorradifusio.ad.channels.xml --output=guide.xml +// npm run grab -- --site=andorradifusio.ad const { parser, url } = require('./andorradifusio.ad.config.js') const fs = require('fs') @@ -30,20 +30,20 @@ it('can parse response', () => { expect(results[0]).toMatchObject({ start: '2023-06-07T05:00:00.000Z', stop: '2023-06-07T06:00:00.000Z', - title: `Club Piolet` + title: 'Club Piolet' }) expect(results[20]).toMatchObject({ start: '2023-06-07T23:00:00.000Z', stop: '2023-06-08T00:00:00.000Z', - title: `Àrea Andorra Difusió` + title: 'Àrea Andorra Difusió' }) }) it('can handle empty guide', () => { const result = parser({ date, - content: `` + content: '' }) expect(result).toMatchObject([]) }) diff --git a/sites/arianaafgtv.com/arianaafgtv.com.channels.xml b/sites/arianaafgtv.com/arianaafgtv.com.channels.xml index 61f57c4d..41ee1df1 100644 --- a/sites/arianaafgtv.com/arianaafgtv.com.channels.xml +++ b/sites/arianaafgtv.com/arianaafgtv.com.channels.xml @@ -1,6 +1,4 @@ - - - Ariana Afghanistan International TV - - \ No newline at end of file + + Ariana Afghanistan International TV + \ No newline at end of file diff --git a/sites/arianaafgtv.com/arianaafgtv.com.config.js b/sites/arianaafgtv.com/arianaafgtv.com.config.js index 67e00e73..69a20807 100644 --- a/sites/arianaafgtv.com/arianaafgtv.com.config.js +++ b/sites/arianaafgtv.com/arianaafgtv.com.config.js @@ -11,9 +11,7 @@ dayjs.extend(customParseFormat) module.exports = { site: 'arianaafgtv.com', days: 2, - url() { - return `https://www.arianaafgtv.com/index.html` - }, + url: 'https://www.arianaafgtv.com/index.html', parser({ content, date }) { const programs = [] const items = parseItems(content, date) diff --git a/sites/arianatelevision.com/arianatelevision.com.channels.xml b/sites/arianatelevision.com/arianatelevision.com.channels.xml index 0caeebd5..99d2ffee 100644 --- a/sites/arianatelevision.com/arianatelevision.com.channels.xml +++ b/sites/arianatelevision.com/arianatelevision.com.channels.xml @@ -1,6 +1,4 @@ - - - Ariana TV National - - \ No newline at end of file + + Ariana TV National + \ No newline at end of file diff --git a/sites/arianatelevision.com/arianatelevision.com.config.js b/sites/arianatelevision.com/arianatelevision.com.config.js index 63091dc9..40bc9b79 100644 --- a/sites/arianatelevision.com/arianatelevision.com.config.js +++ b/sites/arianatelevision.com/arianatelevision.com.config.js @@ -4,7 +4,7 @@ const { DateTime } = require('luxon') module.exports = { site: 'arianatelevision.com', days: 2, - url: `https://www.arianatelevision.com/program-schedule/`, + url: 'https://www.arianatelevision.com/program-schedule/', parser({ content, date }) { const programs = [] const items = parseItems(content, date) @@ -37,8 +37,6 @@ function parseStart(item, date) { } function parseItems(content, date) { - const items = [] - const col = date.day() const $ = cheerio.load(content) const settings = $('#jtrt_table_settings_508').text() if (!settings) return [] diff --git a/sites/arianatelevision.com/arianatelevision.com.test.js b/sites/arianatelevision.com/arianatelevision.com.test.js index 829f0632..d6ff3722 100644 --- a/sites/arianatelevision.com/arianatelevision.com.test.js +++ b/sites/arianatelevision.com/arianatelevision.com.test.js @@ -1,4 +1,4 @@ -// npx epg-grabber --config=sites/arianatelevision.com/arianatelevision.com.config.js --channels=sites/arianatelevision.com/arianatelevision.com.channels.xml --output=guide.xml +// npm run grab -- --site=arianatelevision.com const { parser, url } = require('./arianatelevision.com.config.js') const dayjs = require('dayjs') @@ -18,7 +18,8 @@ it('can generate valid url', () => { }) it('can parse response', () => { - const content = `[[["Start","Saturday","Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","",""],["7:00","City Report","ICC T20 Highlights","ICC T20 Highlights","ICC T20 Highlights","ICC T20 Highlights","ICC T20 Highlights","ICC T20 Highlights","",""],["7:30","ICC T20 Highlights","Sport ","Sport ","Sport ","Sport ","Sport ","Sport ","",""],["15:00","ICC T20 World Cup","ICC T20 World Cup","ICC T20 World Cup","ICC T20 World Cup","ICC T20 World Cup","ICC T20 World Cup","ICC T20 World Cup","",""],["6:30","Quran and Hadis ","Falah","Falah","Falah","Falah","Falah","Falah","",""],["","\\n","","","","","","","",""]]]` + const content = + '[[["Start","Saturday","Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","",""],["7:00","City Report","ICC T20 Highlights","ICC T20 Highlights","ICC T20 Highlights","ICC T20 Highlights","ICC T20 Highlights","ICC T20 Highlights","",""],["7:30","ICC T20 Highlights","Sport ","Sport ","Sport ","Sport ","Sport ","Sport ","",""],["15:00","ICC T20 World Cup","ICC T20 World Cup","ICC T20 World Cup","ICC T20 World Cup","ICC T20 World Cup","ICC T20 World Cup","ICC T20 World Cup","",""],["6:30","Quran and Hadis ","Falah","Falah","Falah","Falah","Falah","Falah","",""],["","\\n","","","","","","","",""]]]' const result = parser({ content, date }).map(p => { p.start = p.start.toJSON() p.stop = p.stop.toJSON() @@ -29,22 +30,22 @@ it('can parse response', () => { { start: '2021-11-27T02:30:00.000Z', stop: '2021-11-27T03:00:00.000Z', - title: `City Report` + title: 'City Report' }, { start: '2021-11-27T03:00:00.000Z', stop: '2021-11-27T10:30:00.000Z', - title: `ICC T20 Highlights` + title: 'ICC T20 Highlights' }, { start: '2021-11-27T10:30:00.000Z', stop: '2021-11-28T02:00:00.000Z', - title: `ICC T20 World Cup` + title: 'ICC T20 World Cup' }, { start: '2021-11-28T02:00:00.000Z', stop: '2021-11-28T02:30:00.000Z', - title: `Quran and Hadis` + title: 'Quran and Hadis' } ]) }) @@ -53,7 +54,8 @@ it('can handle empty guide', () => { const result = parser({ date, channel, - content: `` + content: + '' }) expect(result).toMatchObject([]) }) diff --git a/sites/arirang.com/arirang.com.channels.xml b/sites/arirang.com/arirang.com.channels.xml index 140ab525..6d60a18b 100644 --- a/sites/arirang.com/arirang.com.channels.xml +++ b/sites/arirang.com/arirang.com.channels.xml @@ -1,8 +1,6 @@ - - - Arirang TV - Arirang UN - Arirang World - - \ No newline at end of file + + Arirang TV + Arirang UN + Arirang World + \ No newline at end of file diff --git a/sites/arirang.com/arirang.com.config.js b/sites/arirang.com/arirang.com.config.js index d0c133d5..2ee402c7 100644 --- a/sites/arirang.com/arirang.com.config.js +++ b/sites/arirang.com/arirang.com.config.js @@ -8,132 +8,146 @@ dayjs.extend(timezone) dayjs.extend(customParseFormat) module.exports = { - site: 'arirang.com', - output: 'arirang.com.guide.xml', - channels: 'arirang.com.channels.xml', - lang: 'en', - days: 7, - delay: 5000, - url: 'https://www.arirang.com/v1.0/open/external/proxy', + site: 'arirang.com', + output: 'arirang.com.guide.xml', + channels: 'arirang.com.channels.xml', + lang: 'en', + days: 7, + delay: 5000, + url: 'https://www.arirang.com/v1.0/open/external/proxy', - request: { + request: { + method: 'POST', + timeout: 5000, + cache: { ttl: 60 * 60 * 1000 }, + headers: { + Accept: 'application/json, text/plain, */*', + 'Content-Type': 'application/json', + Origin: 'https://www.arirang.com', + Referer: 'https://www.arirang.com/schedule', + 'User-Agent': + 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36' + }, + data: function (context) { + const { channel, date } = context + return { + address: 'https://script.arirang.com/api/v1/bis/listScheduleV3.do', method: 'POST', - timeout: 5000, - cache: { ttl: 60 * 60 * 1000 }, - headers: { - 'Accept': 'application/json, text/plain, */*', - 'Content-Type': 'application/json', - 'Origin': 'https://www.arirang.com', - 'Referer': 'https://www.arirang.com/schedule', - 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36' - }, - data: function (context) { - const { channel, date } = context - return { - 'address': 'https://script.arirang.com/api/v1/bis/listScheduleV3.do', - 'method': 'POST', - 'headers': {}, - 'body': { - 'data': { - 'dmParam': { - 'chanId': channel.site_id, - 'broadYmd': dayjs.tz(date, 'Asia/Seoul').format('YYYYMMDD'), - 'planNo': '1' - } - } - } + headers: {}, + body: { + data: { + dmParam: { + chanId: channel.site_id, + broadYmd: dayjs.tz(date, 'Asia/Seoul').format('YYYYMMDD'), + planNo: '1' } + } } - }, - - logo: function (context) { - return context.channel.logo - }, - - async parser(context) { - const programs = [] - const items = parseItems(context.content) - - for (let item of items) { - const programDetail = await parseProgramDetail(item) - - programs.push({ - title: item.displayNm, - start: parseStart(item), - stop: parseStop(item), - icon: parseIcon(programDetail), - category: parseCategory(programDetail), - description: parseDescription(programDetail) - }) - } - - return programs + } } + }, + + logo: function (context) { + return context.channel.logo + }, + + async parser(context) { + const programs = [] + const items = parseItems(context.content) + + for (let item of items) { + const programDetail = await parseProgramDetail(item) + + programs.push({ + title: item.displayNm, + start: parseStart(item), + stop: parseStop(item), + icon: parseIcon(programDetail), + category: parseCategory(programDetail), + description: parseDescription(programDetail) + }) + } + + return programs + } } function parseItems(content) { - if (content != '') { - const data = JSON.parse(content) - return (!data || !data.responseBody || !Array.isArray(data.responseBody.dsSchWeek)) ? [] : data.responseBody.dsSchWeek - } else { - return [] - } + if (content != '') { + const data = JSON.parse(content) + return !data || !data.responseBody || !Array.isArray(data.responseBody.dsSchWeek) + ? [] + : data.responseBody.dsSchWeek + } else { + return [] + } } function parseStart(item) { - return dayjs.tz(item.broadYmd + ' ' + item.broadHm, 'YYYYMMDD HHmm', 'Asia/Seoul') + return dayjs.tz(item.broadYmd + ' ' + item.broadHm, 'YYYYMMDD HHmm', 'Asia/Seoul') } function parseStop(item) { - return dayjs.tz(item.broadYmd + ' ' + item.broadHm, 'YYYYMMDD HHmm', 'Asia/Seoul').add(item.broadRun, 'minute') + return dayjs + .tz(item.broadYmd + ' ' + item.broadHm, 'YYYYMMDD HHmm', 'Asia/Seoul') + .add(item.broadRun, 'minute') } async function parseProgramDetail(item) { - return axios.post( - 'https://www.arirang.com/v1.0/open/program/detail', - { - 'bis_program_code': item.pgmCd + return axios + .post( + 'https://www.arirang.com/v1.0/open/program/detail', + { + bis_program_code: item.pgmCd + }, + { + headers: { + Accept: 'application/json, text/plain, */*', + 'Content-Type': 'application/json', + Origin: 'https://www.arirang.com', + Referer: 'https://www.arirang.com/schedule', + 'User-Agent': + 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36' }, - { - headers: { - 'Accept': 'application/json, text/plain, */*', - 'Content-Type': 'application/json', - 'Origin': 'https://www.arirang.com', - 'Referer': 'https://www.arirang.com/schedule', - 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36' - }, - timeout: 5000, - cache: { ttl: 60 * 1000 }, - } - ).then(function (response) { - return response.data - }).catch(function (error) { - // console.log(error) + timeout: 5000, + cache: { ttl: 60 * 1000 } + } + ) + .then(response => { + return response.data + }) + .catch(error => { + console.log(error) }) } function parseIcon(programDetail) { - if (programDetail && programDetail.image && programDetail.image[0].url) { - return programDetail.image[0].url - } else { - return '' - } + if (programDetail && programDetail.image && programDetail.image[0].url) { + return programDetail.image[0].url + } else { + return '' + } } function parseCategory(programDetail) { - if (programDetail && programDetail.category_Info && programDetail.category_Info[0].title) { - return programDetail.category_Info[0].title - } else { - return '' - } + if (programDetail && programDetail.category_Info && programDetail.category_Info[0].title) { + return programDetail.category_Info[0].title + } else { + return '' + } } function parseDescription(programDetail) { - if (programDetail && programDetail.content && programDetail.content[0] && programDetail.content[0].text) { - let description = programDetail.content[0].text - let regex = /(<([^>]+)>)/ig - return description.replace(regex, '') - } else { - return '' - } + if ( + programDetail && + programDetail.content && + programDetail.content[0] && + programDetail.content[0].text + ) { + let description = programDetail.content[0].text + let regex = /(<([^>]+)>)/gi + return description.replace(regex, '') + } else { + return '' + } } diff --git a/sites/arirang.com/arirang.com.test.js b/sites/arirang.com/arirang.com.test.js index f0d4d165..31d1b61b 100644 --- a/sites/arirang.com/arirang.com.test.js +++ b/sites/arirang.com/arirang.com.test.js @@ -1,4 +1,4 @@ -// npx epg-grabber --config=sites/arirang.com/arirang.com.config.js --channels=sites/arirang.com/arirang.com.channels.xml --output=guide.xml --days=2 +// npm run grab -- --site=arirang.com // npx jest arirang.com.test.js const { url, parser } = require('./arirang.com.config.js') @@ -7,53 +7,68 @@ const path = require('path') const axios = require('axios') const dayjs = require('dayjs') const utc = require('dayjs/plugin/utc') -const { program } = require('commander') dayjs.extend(utc) jest.mock('axios') const date = dayjs.tz('2023-08-25', 'Asia/Seoul').startOf('d') -const channel = { xmltv_id: 'ArirangWorld.kr', site_id: 'CH_W', name: 'Arirang World', lang: 'en', logo: 'https://i.imgur.com/5Aoithj.png' } +const channel = { + xmltv_id: 'ArirangWorld.kr', + site_id: 'CH_W', + name: 'Arirang World', + lang: 'en', + logo: 'https://i.imgur.com/5Aoithj.png' +} const content = fs.readFileSync(path.resolve(__dirname, '__data__/schedule.json'), 'utf8') const programDetail = fs.readFileSync(path.resolve(__dirname, '__data__/detail.json'), 'utf8') -const context = { 'channel': channel, 'content': content, 'date': date } +const context = { channel: channel, content: content, date: date } it('can generate valid url', () => { - expect(url).toBe('https://www.arirang.com/v1.0/open/external/proxy') + expect(url).toBe('https://www.arirang.com/v1.0/open/external/proxy') }) it('can handle empty guide', async () => { - const results = await parser({ 'channel': channel, 'content': '', 'date': date }) - expect(results).toMatchObject([]) + const results = await parser({ channel: channel, content: '', date: date }) + expect(results).toMatchObject([]) }) it('can parse response', async () => { - axios.post.mockImplementation((url, data) => { - if (url === 'https://www.arirang.com/v1.0/open/external/proxy' && JSON.stringify(data) === JSON.stringify({ "address": "https://script.arirang.com/api/v1/bis/listScheduleV3.do", "method": "POST", "headers": {}, "body": { "data": { "dmParam": { "chanId": "CH_W", "broadYmd": "20230825", "planNo": "1" } } } })) { - return Promise.resolve({ - data: JSON.parse(content) - }) - } else if (url === 'https://www.arirang.com/v1.0/open/program/detail' && JSON.stringify(data) === JSON.stringify({ "bis_program_code": "2023004T" })) { - return Promise.resolve({ - data: JSON.parse(programDetail) - }) - } else { - return Promise.resolve({ - data: '' - }) - } - }) + axios.post.mockImplementation((url, data) => { + if ( + url === 'https://www.arirang.com/v1.0/open/external/proxy' && + JSON.stringify(data) === + JSON.stringify({ + address: 'https://script.arirang.com/api/v1/bis/listScheduleV3.do', + method: 'POST', + headers: {}, + body: { data: { dmParam: { chanId: 'CH_W', broadYmd: '20230825', planNo: '1' } } } + }) + ) { + return Promise.resolve({ + data: JSON.parse(content) + }) + } else if ( + url === 'https://www.arirang.com/v1.0/open/program/detail' && + JSON.stringify(data) === JSON.stringify({ bis_program_code: '2023004T' }) + ) { + return Promise.resolve({ + data: JSON.parse(programDetail) + }) + } else { + return Promise.resolve({ + data: '' + }) + } + }) - const results = await parser(context) + const results = await parser(context) - expect(results[0]).toMatchObject( - { - title: "WITHIN THE FRAME [R]", - start: dayjs.tz(date, 'Asia/Seoul'), - stop: dayjs.tz(date, 'Asia/Seoul').add(30, 'minute'), - icon: "https://img.arirang.com/v1/AUTH_d52449c16d3b4bbca17d4fffd9fc44af/public/images/202308/2080840096998752900.png", - description: "NEWS", - category: "Current Affairs" - } - ) -}) \ No newline at end of file + expect(results[0]).toMatchObject({ + title: 'WITHIN THE FRAME [R]', + start: dayjs.tz(date, 'Asia/Seoul'), + stop: dayjs.tz(date, 'Asia/Seoul').add(30, 'minute'), + icon: 'https://img.arirang.com/v1/AUTH_d52449c16d3b4bbca17d4fffd9fc44af/public/images/202308/2080840096998752900.png', + description: 'NEWS', + category: 'Current Affairs' + }) +}) diff --git a/sites/artonline.tv/artonline.tv.channels.xml b/sites/artonline.tv/artonline.tv.channels.xml index abd0989f..ea81dc68 100644 --- a/sites/artonline.tv/artonline.tv.channels.xml +++ b/sites/artonline.tv/artonline.tv.channels.xml @@ -1,10 +1,8 @@ - - - ART Aflam 1 - ART Aflam 2 - ART Cinema - ART Hekayat - ART Hekayat 2 - - \ No newline at end of file + + ART Aflam 1 + ART Aflam 2 + ART Cinema + ART Hekayat + ART Hekayat 2 + \ No newline at end of file diff --git a/sites/artonline.tv/artonline.tv.config.js b/sites/artonline.tv/artonline.tv.config.js index 4edfdabc..54d5652a 100644 --- a/sites/artonline.tv/artonline.tv.config.js +++ b/sites/artonline.tv/artonline.tv.config.js @@ -51,14 +51,14 @@ module.exports = { } function parseStart(item) { - const [_, M, D, YYYY] = item.adddate.match(/(\d+)\/(\d+)\/(\d+) /) + const [, M, D, YYYY] = item.adddate.match(/(\d+)\/(\d+)\/(\d+) /) const [HH, mm] = item.start_Time.split(':') return dayjs.tz(`${YYYY}-${M}-${D}T${HH}:${mm}:00`, 'YYYY-M-DTHH:mm:ss', 'Asia/Riyadh') } function parseDuration(item) { - const [__, HH, mm, ss] = item.duration.match(/(\d+):(\d+):(\d+)/) + const [, HH, mm, ss] = item.duration.match(/(\d+):(\d+):(\d+)/) return parseInt(HH) * 3600 + parseInt(mm) * 60 + parseInt(ss) } diff --git a/sites/artonline.tv/artonline.tv.test.js b/sites/artonline.tv/artonline.tv.test.js index 60065a0b..17ab430c 100644 --- a/sites/artonline.tv/artonline.tv.test.js +++ b/sites/artonline.tv/artonline.tv.test.js @@ -1,4 +1,4 @@ -// npx epg-grabber --config=sites/artonline.tv/artonline.tv.config.js --channels=sites/artonline.tv/artonline.tv.channels.xml --output=guide.xml --days=2 +// npm run grab -- --site=artonline.tv const { parser, url, request } = require('./artonline.tv.config.js') const dayjs = require('dayjs') @@ -39,7 +39,8 @@ it('can generate valid request data for tomorrow', () => { }) it('can parse response', () => { - const content = `[{"id":158963,"eventid":null,"duration":"01:34:00","lang":"Arabic","title":"الراقصه و السياسي","description":"تقرر الراقصه سونيا انشاء دار حضانه للأطفال اليتامى و عندما تتقدم بمشورعها للمسئول يرفض فتتحداه ، تلجأ للوزير عبد الحميد رأفت تربطه بها علاقة قديمة ، يخشى على مركزه و يرفض مساعدتها فتقرر كتابة مذكراتها بمساعدة أحد الصحفيين ، يتخوف عبد الحميد و المسئولين ثم يفاجأ عبد الحميد بحصول سونيا على الموافقه للمشورع و البدء في تنفيذه و ذلك لعلاقتها بأحد كبار المسئولين .","thumbnail":"/UploadImages/Channel/ARTAFLAM1/03/AlRaqesaWaAlSeyasi.jpg","image":"0","start_Time":"00:30","adddate":"3/4/2022 12:00:00 AM","repeat1":null,"iD_genre":0,"iD_Show_Type":0,"iD_Channel":77,"iD_country":0,"iD_rating":0,"end_time":"02:04","season_Number":0,"epoisode_Number":0,"hasCatchup":0,"cmsid":0,"containerID":0,"imagePath":"../../UploadImages/Channel/ARTAFLAM1/3/","youtube":"0","published_at":"0","directed_by":"0","composition":"0","cast":"0","timeShow":null,"short_description":"تقرر الراقصه سونيا انشاء دار حضانه للأطفال اليتامى و عندما تتقدم بمشورعها للمسئول يرفض فتتحداه ، تلجأ للوزير عبد الحميد رأفت تربطه بها علاقة قديمة ، يخشى على مركزه و يرفض مساعدتها فتقرر كتابة مذكراتها بمساعدة أحد الصحفيين ، يتخوف عبد الحميد و المسئولين ثم يفاجأ عبد الحميد بحصول سونيا على الموافقه للمشورع و البدء في تنفيذه و ذلك لعلاقتها بأحد كبار المسئولين .","seOdescription":null,"tagseo":null,"channel_name":null,"pathimage":null,"pathThumbnail":null}]` + const content = + '[{"id":158963,"eventid":null,"duration":"01:34:00","lang":"Arabic","title":"الراقصه و السياسي","description":"تقرر الراقصه سونيا انشاء دار حضانه للأطفال اليتامى و عندما تتقدم بمشورعها للمسئول يرفض فتتحداه ، تلجأ للوزير عبد الحميد رأفت تربطه بها علاقة قديمة ، يخشى على مركزه و يرفض مساعدتها فتقرر كتابة مذكراتها بمساعدة أحد الصحفيين ، يتخوف عبد الحميد و المسئولين ثم يفاجأ عبد الحميد بحصول سونيا على الموافقه للمشورع و البدء في تنفيذه و ذلك لعلاقتها بأحد كبار المسئولين .","thumbnail":"/UploadImages/Channel/ARTAFLAM1/03/AlRaqesaWaAlSeyasi.jpg","image":"0","start_Time":"00:30","adddate":"3/4/2022 12:00:00 AM","repeat1":null,"iD_genre":0,"iD_Show_Type":0,"iD_Channel":77,"iD_country":0,"iD_rating":0,"end_time":"02:04","season_Number":0,"epoisode_Number":0,"hasCatchup":0,"cmsid":0,"containerID":0,"imagePath":"../../UploadImages/Channel/ARTAFLAM1/3/","youtube":"0","published_at":"0","directed_by":"0","composition":"0","cast":"0","timeShow":null,"short_description":"تقرر الراقصه سونيا انشاء دار حضانه للأطفال اليتامى و عندما تتقدم بمشورعها للمسئول يرفض فتتحداه ، تلجأ للوزير عبد الحميد رأفت تربطه بها علاقة قديمة ، يخشى على مركزه و يرفض مساعدتها فتقرر كتابة مذكراتها بمساعدة أحد الصحفيين ، يتخوف عبد الحميد و المسئولين ثم يفاجأ عبد الحميد بحصول سونيا على الموافقه للمشورع و البدء في تنفيذه و ذلك لعلاقتها بأحد كبار المسئولين .","seOdescription":null,"tagseo":null,"channel_name":null,"pathimage":null,"pathThumbnail":null}]' const result = parser({ content }).map(p => { p.start = p.start.toJSON() p.stop = p.stop.toJSON() diff --git a/sites/astro.com.my/astro.com.my.channels.xml b/sites/astro.com.my/astro.com.my.channels.xml index 72bca740..0b2b431c 100644 --- a/sites/astro.com.my/astro.com.my.channels.xml +++ b/sites/astro.com.my/astro.com.my.channels.xml @@ -1,143 +1,141 @@ - - - 8TV - - Adithya TV - Aljazeera - Animal Planet - Asian Food Network - Astro AEC - Astro AOD 311 - Astro AOD 352 - Astro AOD 353 - Astro AOD 354 - Astro AOD 355 - Astro Arena - Astro Arena 2 - Astro Aura - Astro Awani - Astro BollyOne HD - Astro Box Office Tayangan Hebat - Astro Box Office Thangathirai - Astro Ceria - Gemilang - Astro Citra - Astro Cricket - Astro Hua Hee Dai - Astro Oasis - Astro Prima - Astro Quan Jia HD - Astro Rania - Astro Ria - Astro Shuang Xing - Astro SuperSport - Astro SuperSport 2 - Astro SuperSport 3 - Astro SuperSport 4 - Astro SuperSport 5 - Astro Tutor TV PT3 - Astro Tutor TV SPM - Astro Tutor TV UPSR - Astro UHD - Astro Vaanavil - Astro Vellithirai - Astro Vinmeen HD - Astro Wah Lai Toi - Astro Warna - Astro Xiao Tai Yang - Awesome TV - AXN - BBC Earth - BBC First - BBC Lifestyle - BBC World News - beIN Sports HD - beIN Sports 2 - beIN Sports 3 - Bernama TV - Bloomberg TV - Boo - Boomerang - Cartoon Network HD - CCTV 4 - Celestial Classic Movies - Celestial Movies - CGTN - Chutti TV - Cinemax - CNA - CNBC Asia-Pacific - CNN - Colors - Colors Tamil - Crime + Investigation - CTI TV - Discovery Asia - Discovery Channel - DMAX - DW English - Egg Network - Eurosport - Food Network - France 24 English - Golf Channel - Go Shop Chinese - Go Shop Malay 111 - Go Shop Malay 118 - Go Shop Malay 120 - HBO - HBO Family - HBO Hits - HGTV - History - Hits - Hits Movies - Iqiyi - KBS World - Kix - K+ - Lifetime - Moonbug Kids - MTV - Nat Geo People - National Geographic - National Geographic Wild - NHK World Premium - Nickelodeon - Nick Jr - Njoi TV - NTV 7 - One - Paramount Network - Phoenix Chinese Channel - Phoenix InfoNews Channel - Premier Sports - PRIMEtime - RTM TV 1 - RTM TV2 - RTM TV Okey - Showcase Movies - Sky News UK - SPOTV - Star Vijay - Sun Music - Sun TV - Ta-Daa! - TLC - TV 3 - TV 9 - TV Alhijrah - TVB Classic - TVB Entertainment News - TVB Jade - TVBS Asia - TVB Xing He - TVN HD - TVN Movies - TVS - Warner TV - WWE Network - Zee Tamil - - + + + 8TV + Adithya TV + Aljazeera + Animal Planet + Asian Food Network + Astro AEC + Astro AOD 311 + Astro AOD 352 + Astro AOD 353 + Astro AOD 354 + Astro AOD 355 + Astro Arena + Astro Arena 2 + Astro Aura + Astro Awani + Astro BollyOne HD + Astro Box Office Tayangan Hebat + Astro Box Office Thangathirai + Astro Ceria + Gemilang + Astro Citra + Astro Cricket + Astro Hua Hee Dai + Astro Oasis + Astro Prima + Astro Quan Jia HD + Astro Rania + Astro Ria + Astro Shuang Xing + Astro SuperSport + Astro SuperSport 2 + Astro SuperSport 3 + Astro SuperSport 4 + Astro SuperSport 5 + Astro Tutor TV PT3 + Astro Tutor TV SPM + Astro Tutor TV UPSR + Astro UHD + Astro Vaanavil + Astro Vellithirai + Astro Vinmeen HD + Astro Wah Lai Toi + Astro Warna + Astro Xiao Tai Yang + Awesome TV + AXN + BBC Earth + BBC First + BBC Lifestyle + BBC World News + beIN Sports HD + beIN Sports 2 + beIN Sports 3 + Bernama TV + Bloomberg TV + Boo + Boomerang + Cartoon Network HD + Celestial Classic Movies + CCTV 4 + Celestial Movies + CGTN + Chutti TV + Cinemax + CNA + CNBC Asia-Pacific + CNN + Colors + Colors Tamil + Crime + Investigation + CTI TV + Discovery Asia + Discovery Channel + DMAX + DW English + Egg Network + TVB Entertainment News + Eurosport + Food Network + France 24 English + Golf Channel + Go Shop Chinese + Go Shop Malay 111 + Go Shop Malay 118 + Go Shop Malay 120 + HBO + HBO Family + HBO Hits + HGTV + History + Hits + Hits Movies + Iqiyi + TVB Jade + KBS World + Kix + K+ + Lifetime + Moonbug Kids + MTV + Nat Geo People + National Geographic + National Geographic Wild + NHK World Premium + Nickelodeon + Nick Jr + Njoi TV + NTV 7 + RTM TV Okey + One + Paramount Network + Phoenix Chinese Channel + Phoenix InfoNews Channel + Premier Sports + PRIMEtime + Showcase Movies + Sky News UK + SPOTV + Star Vijay + Sun Music + Sun TV + Ta-Daa! + TLC + RTM TV 1 + RTM TV2 + TV 3 + TV 9 + TV Alhijrah + TVB Classic + TVBS Asia + TVB Xing He + TVN HD + TVN Movies + TVS + Warner TV + WWE Network + Zee Tamil + diff --git a/sites/astro.com.my/astro.com.my.config.js b/sites/astro.com.my/astro.com.my.config.js index 628a4b47..2711880a 100644 --- a/sites/astro.com.my/astro.com.my.config.js +++ b/sites/astro.com.my/astro.com.my.config.js @@ -4,7 +4,7 @@ const utc = require('dayjs/plugin/utc') dayjs.extend(utc) -const API_ENDPOINT = `https://contenthub-api.eco.astro.com.my` +const API_ENDPOINT = 'https://contenthub-api.eco.astro.com.my' module.exports = { site: 'astro.com.my', @@ -41,13 +41,13 @@ module.exports = { } function parseEpisode(item) { - const [_, number] = item.title.match(/Ep(\d+)$/) || [null, null] + const [, number] = item.title.match(/Ep(\d+)$/) || [null, null] return number ? parseInt(number) : null } function parseSeason(details) { - const [_, season] = details.title ? details.title.match(/ S(\d+)/) || [null, null] : [null, null] + const [, season] = details.title ? details.title.match(/ S(\d+)/) || [null, null] : [null, null] return season ? parseInt(season) : null } @@ -116,7 +116,7 @@ async function loadProgramDetails(item) { const data = await axios .get(url) .then(r => r.data) - .catch(err => {}) + .catch(error => console.log(error.message)) if (!data) return {} return data.response || {} diff --git a/sites/astro.com.my/astro.com.my.test.js b/sites/astro.com.my/astro.com.my.test.js index 88a58265..5c615f51 100644 --- a/sites/astro.com.my/astro.com.my.test.js +++ b/sites/astro.com.my/astro.com.my.test.js @@ -1,4 +1,4 @@ -// npx epg-grabber --config=sites/astro.com.my/astro.com.my.config.js --channels=sites/astro.com.my/astro.com.my.channels.xml --output=guide.xml --timeout=30000 --days=2 +// npm run grab -- --site=astro.com.my const { parser, url } = require('./astro.com.my.config.js') const fs = require('fs') diff --git a/sites/bein.com/bein.com.channels.xml b/sites/bein.com/bein.com.channels.xml deleted file mode 100644 index 677ac1e0..00000000 --- a/sites/bein.com/bein.com.channels.xml +++ /dev/null @@ -1,162 +0,0 @@ - - - - - BeIn Sports News - BeIn Sports - BeIn Sports 1 - BeIn Sports 2 - BeIn Sports 3 - BeIn Sports 4 - BeIn Sports 5 - BeIn Sports 6 - BeIn Sports 7 - BeIn Sports Premium 1 - BeIn Sports Premium 2 - BeIn Sports Premium 3 - BeIn Sports Xtra 1 - BeIn Sports Xtra 2 - BeIn 4K - BeIN Sports AFC - BeIN Sports AFC 1 - BeIN Sports AFC 2 - BeIN Sports AFC 3 - BeIn Sports English 1 - BeIn Sports English 2 - BeIn Sports English 3 - BeIn NBA - BeIn Sports French 1 - BeIn Sports French 2 - BeIn Sports French 3 - beIN Sports Max 1 - beIN Sports Max 2 - beIN Sports Max 3 - beIN Sports Max 4 - beIN Sports Max 5 - beIN Sports Max 6 - Alkass One - Alkass Two - Alkass Three - Alkass Four - Alkass Five - Alkass Six - Alkass Seven - Alkass Eight - - BeIn Sports News - BeIn Sports - BeIn Sports 1 - BeIn Sports 2 - BeIn Sports 3 - BeIn Sports 4 - BeIn Sports 5 - BeIn Sports 6 - BeIn Sports 7 - BeIn Sports Premium 1 - BeIn Sports Premium 2 - BeIn Sports Premium 3 - BeIn Sports Xtra 1 - BeIn Sports Xtra 2 - BeIn 4K - BeIN Sports AFC - BeIN Sports AFC 1 - BeIN Sports AFC 2 - BeIN Sports AFC 3 - BeIn Sports English 1 - BeIn Sports English 2 - BeIn Sports English 3 - BeIn NBA - BeIn Sports French 1 - BeIn Sports French 2 - BeIn Sports French 3 - beIN Sports Max 1 - beIN Sports Max 2 - beIN Sports Max 3 - beIN Sports Max 4 - beIN Sports Max 5 - beIN Sports Max 6 - Alkass Three - Alkass One - Alkass Two - Alkass Four - Alkass Five - Alkass Six - Alkass Seven - Alkass Eight - - beIN Movies Premiere - beIN Movies Action - bein Movies Drama - beIN Movies Family - FOX Movies - FOX Action Movies - Star Movies - beIN Series 1 - beIN Series 2 - beIN Drama 1 - beIN Gourmet - Travel Channel - FOX - Food Network - HGTV - Star World - Fatafeat - FOX Life - MTV 80s - MTV 90s - Club MTV - Bloomberg TV - National Geographic - National Geographic Wild - BBC Earth - CNN - EuroNews - Discovery - be Junior - Jeem - Baraem - Cartoon Network - Cartoon Network Arabic - Cartoon Network Hindi - Baby TV - CBeebies - DreamWorks - - beIN Movies Premiere - beIN Movies Action - bein Movies Drama - beIN Movies Family - FOX Movies - FOX Action Movies - Star Movies - beIN Series 1 - beIN Series 2 - beIN Drama 1 - beIN Gourmet - Travel Channel - FOX - Food Network - HGTV - Star World - Fatafeat - MTV 80s - MTV 90s - Club MTV - be Junior - Bloomberg TV - National Geographic - National Geographic Wild - BBC Earth - Al Jazeera Documentary - CNN - EuroNews - Jeem - Baraem - CBeebies - Baby TV - Cartoon Network - Cartoon Network Arabic - Cartoon Network Hindi - DreamWorks - - diff --git a/sites/bein.com/bein.com.config.js b/sites/bein.com/bein.com.config.js index 6b895eaa..8c1552ec 100644 --- a/sites/bein.com/bein.com.config.js +++ b/sites/bein.com/bein.com.config.js @@ -4,7 +4,6 @@ const { DateTime } = require('luxon') module.exports = { site: 'bein.com', days: 2, - timeout: 30000, // 30 seconds request: { cache: { ttl: 60 * 60 * 1000 // 1 hour @@ -63,7 +62,7 @@ function parseCategory($item) { } function parseTime($item, date) { - let [_, time] = $item('.time') + let [, time] = $item('.time') .text() .match(/^(\d{2}:\d{2})/) || [null, null] if (!time) return null @@ -73,7 +72,7 @@ function parseTime($item, date) { } function parseItems(content, channel) { - const [_, channelId] = channel.site_id.split('#') + const [, channelId] = channel.site_id.split('#') const $ = cheerio.load(content) return $(`#channels_${channelId} .slider > ul:first-child > li`).toArray() diff --git a/sites/bein.com/bein.com.test.js b/sites/bein.com/bein.com.test.js index acb0bff1..73174712 100644 --- a/sites/bein.com/bein.com.test.js +++ b/sites/bein.com/bein.com.test.js @@ -1,4 +1,4 @@ -// npx epg-grabber --config=sites/bein.com/bein.com.config.js --channels=sites/bein.com/bein.com.channels.xml --output=guide.xml +// npm run grab -- --site=bein.com const fs = require('fs') const path = require('path') diff --git a/sites/bein.com/bein.com_ar.channels.xml b/sites/bein.com/bein.com_ar.channels.xml new file mode 100644 index 00000000..95a0d070 --- /dev/null +++ b/sites/bein.com/bein.com_ar.channels.xml @@ -0,0 +1,79 @@ + + + Al Jazeera Documentary + Alkass Eight + Alkass Five + Alkass Four + Alkass One + Alkass Seven + Alkass Six + Alkass Three + Alkass Two + Baby TV + Baraem + BBC Earth + BeIn 4K + beIN Drama 1 + beIN Gourmet + beIN Movies Premiere + beIN Movies Action + bein Movies Drama + beIN Movies Family + beIN Series 1 + beIN Series 2 + BeIn Sports + BeIn Sports 1 + BeIn Sports 2 + BeIn Sports 3 + BeIn Sports 4 + BeIn Sports 5 + BeIn Sports 6 + BeIn Sports 7 + BeIN Sports AFC + BeIN Sports AFC 1 + BeIN Sports AFC 2 + BeIN Sports AFC 3 + BeIn Sports English 1 + BeIn Sports English 2 + BeIn Sports English 3 + BeIn Sports French 1 + BeIn Sports French 2 + BeIn Sports French 3 + beIN Sports Max 1 + beIN Sports Max 2 + beIN Sports Max 3 + beIN Sports Max 4 + beIN Sports Max 5 + beIN Sports Max 6 + BeIn NBA + BeIn Sports News + BeIn Sports Premium 1 + BeIn Sports Premium 2 + BeIn Sports Premium 3 + BeIn Sports Xtra 1 + BeIn Sports Xtra 2 + be Junior + Bloomberg TV + Cartoon Network Arabic + Cartoon Network Hindi + Cartoon Network + CBeebies + Club MTV + CNN + DreamWorks + EuroNews + Fatafeat + Food Network + FOX Action Movies + FOX + FOX Movies + HGTV + Jeem + MTV 80s + MTV 90s + National Geographic + National Geographic Wild + Star Movies + Star World + Travel Channel + \ No newline at end of file diff --git a/sites/bein.com/bein.com_en.channels.xml b/sites/bein.com/bein.com_en.channels.xml new file mode 100644 index 00000000..29561d50 --- /dev/null +++ b/sites/bein.com/bein.com_en.channels.xml @@ -0,0 +1,80 @@ + + + Alkass Eight + Alkass Five + Alkass Four + Alkass One + Alkass Seven + Alkass Six + Alkass Three + Alkass Two + Baby TV + Baraem + BBC Earth + BeIn 4K + beIN Drama 1 + beIN Gourmet + beIN Movies Premiere + beIN Movies Action + bein Movies Drama + beIN Movies Family + beIN Series 1 + beIN Series 2 + BeIn Sports + BeIn Sports 1 + BeIn Sports 2 + BeIn Sports 3 + BeIn Sports 4 + BeIn Sports 5 + BeIn Sports 6 + BeIn Sports 7 + BeIN Sports AFC + BeIN Sports AFC 1 + BeIN Sports AFC 2 + BeIN Sports AFC 3 + BeIn Sports English 1 + BeIn Sports English 2 + BeIn Sports English 3 + BeIn Sports French 1 + BeIn Sports French 2 + BeIn Sports French 3 + beIN Sports Max 1 + beIN Sports Max 2 + beIN Sports Max 3 + beIN Sports Max 4 + beIN Sports Max 5 + beIN Sports Max 6 + BeIn NBA + BeIn Sports News + BeIn Sports Premium 1 + BeIn Sports Premium 2 + BeIn Sports Premium 3 + BeIn Sports Xtra 1 + BeIn Sports Xtra 2 + be Junior + Bloomberg TV + Cartoon Network Arabic + Cartoon Network Hindi + Cartoon Network + CBeebies + Club MTV + CNN + Discovery + DreamWorks + EuroNews + Fatafeat + Food Network + FOX Action Movies + FOX + FOX Life + FOX Movies + HGTV + Jeem + MTV 80s + MTV 90s + National Geographic + National Geographic Wild + Star Movies + Star World + Travel Channel + diff --git a/sites/beinsports.com/beinsports.com.config.js b/sites/beinsports.com/beinsports.com.config.js index deabaa1a..35e4783d 100644 --- a/sites/beinsports.com/beinsports.com.config.js +++ b/sites/beinsports.com/beinsports.com.config.js @@ -26,7 +26,7 @@ module.exports = { 'YYYY-MM-DD' )}` }, - parser: function ({ content, channel, date, cached }) { + parser: function ({ content, channel, date }) { let programs = [] const items = parseItems(content, channel) let i = 0 @@ -68,15 +68,15 @@ module.exports = { .then(r => r.data) .catch(console.log) const $ = cheerio.load(content) - const items = $(`.container > div, #epg_div > div`).toArray() + const items = $('.container > div, #epg_div > div').toArray() return items .map(item => { const $item = cheerio.load(item) const id = $item('*').attr('id') - if (!/^channels\_[0-9]+$/.test(id)) return null + if (!/^channels_[0-9]+$/.test(id)) return null const channelId = id.replace('channels_', '') const imgSrc = $item('img').attr('src') - const [_, __, name] = imgSrc.match(/(\/|)([a-z0-9-_.]+)(.png|.svg)$/i) || [null, null, ''] + const [, , name] = imgSrc.match(/(\/|)([a-z0-9-_.]+)(.png|.svg)$/i) || [null, null, ''] return { lang, @@ -103,7 +103,7 @@ function parseCategory($item) { function parseStart($item, date) { let time = $item('.time').text() if (!time) return null - let [_, start, period] = time.match(/^(\d{2}:\d{2})( AM| PM|)/) || [null, null, null] + let [, start, period] = time.match(/^(\d{2}:\d{2})( AM| PM|)/) || [null, null, null] if (!start) return null start = `${date.format('YYYY-MM-DD')} ${start}${period}` const format = period ? 'YYYY-MM-DD hh:mm A' : 'YYYY-MM-DD HH:mm' @@ -114,7 +114,7 @@ function parseStart($item, date) { function parseStop($item, date) { let time = $item('.time').text() if (!time) return null - let [_, stop, period] = time.match(/(\d{2}:\d{2})( AM| PM|)$/) || [null, null, null] + let [, stop, period] = time.match(/(\d{2}:\d{2})( AM| PM|)$/) || [null, null, null] if (!stop) return null stop = `${date.format('YYYY-MM-DD')} ${stop}${period}` const format = period ? 'YYYY-MM-DD hh:mm A' : 'YYYY-MM-DD HH:mm' @@ -123,7 +123,7 @@ function parseStop($item, date) { } function parseItems(content, channel) { - const [_, channelId] = channel.site_id.split('#') + const [, channelId] = channel.site_id.split('#') const $ = cheerio.load(content) return $(`#channels_${channelId} .slider > ul:first-child > li`).toArray() diff --git a/sites/beinsports.com/beinsports.com.test.js b/sites/beinsports.com/beinsports.com.test.js index db0d033c..a26de067 100644 --- a/sites/beinsports.com/beinsports.com.test.js +++ b/sites/beinsports.com/beinsports.com.test.js @@ -1,6 +1,6 @@ // npm run channels:parse -- --config=./sites/beinsports.com/beinsports.com.config.js --output=./sites/beinsports.com/beinsports.com_qa-ar.channels.xml --set=lang:ar --set=region:ar -// npx epg-grabber --config=sites/beinsports.com/beinsports.com.config.js --channels=sites/beinsports.com/beinsports.com_qa-en.channels.xml --output=guide.xml --timeout=30000 --days=2 -// npx epg-grabber --config=sites/beinsports.com/beinsports.com.config.js --channels=sites/beinsports.com/beinsports.com_us-en.channels.xml --output=guide.xml --timeout=30000 --days=2 +// npm run grab -- --site=beinsports.com +// npm run grab -- --site=beinsports.com const { parser, url } = require('./beinsports.com.config.js') const fs = require('fs') diff --git a/sites/beinsports.com/beinsports.com_au.channels.xml b/sites/beinsports.com/beinsports.com_au.channels.xml index 408f553f..6467c6a7 100644 --- a/sites/beinsports.com/beinsports.com_au.channels.xml +++ b/sites/beinsports.com/beinsports.com_au.channels.xml @@ -1,8 +1,6 @@ - - - BeIn Sports 1 Australia - BeIn Sports 2 Australia - BeIn Sports 3 Australia - - \ No newline at end of file + + BeIn Sports 1 Australia + BeIn Sports 2 Australia + BeIn Sports 3 Australia + \ No newline at end of file diff --git a/sites/beinsports.com/beinsports.com_fr.channels.xml b/sites/beinsports.com/beinsports.com_fr.channels.xml index 6bd42713..50516c43 100644 --- a/sites/beinsports.com/beinsports.com_fr.channels.xml +++ b/sites/beinsports.com/beinsports.com_fr.channels.xml @@ -1,15 +1,13 @@ - - - BeIN Sports 1 HD France - BeIN Sports 2 HD France - BeIN Sports 3 France - BeIN Sports Max 4 France - BeIN Sports Max 5 France - BeIN Sports Max 6 France - BeIN Sports Max 7 France - BeIN Sports Max 8 France - BeIN Sports Max 9 France - BeIN Sports Max 10 France - - + + BeIN Sports 1 HD France + BeIN Sports 2 HD France + BeIN Sports 3 France + BeIN Sports Max 4 France + BeIN Sports Max 5 France + BeIN Sports Max 6 France + BeIN Sports Max 7 France + BeIN Sports Max 8 France + BeIN Sports Max 9 France + BeIN Sports Max 10 France + diff --git a/sites/beinsports.com/beinsports.com_hk.channels.xml b/sites/beinsports.com/beinsports.com_hk.channels.xml index c98a4b95..ae0372bf 100644 --- a/sites/beinsports.com/beinsports.com_hk.channels.xml +++ b/sites/beinsports.com/beinsports.com_hk.channels.xml @@ -1,7 +1,5 @@ - - - BeIN Sports 1 Hong Kong - BeIN Sports 2 Hong Kong - - + + BeIN Sports 1 Hong Kong + BeIN Sports 2 Hong Kong + diff --git a/sites/beinsports.com/beinsports.com_id.channels.xml b/sites/beinsports.com/beinsports.com_id.channels.xml index cfbae1f5..31383e71 100644 --- a/sites/beinsports.com/beinsports.com_id.channels.xml +++ b/sites/beinsports.com/beinsports.com_id.channels.xml @@ -1,7 +1,5 @@ - - - BeIN Sports 1 Indonesia - BeIN Sports 3 Indonesia - - + + BeIN Sports 1 Indonesia + BeIN Sports 3 Indonesia + diff --git a/sites/beinsports.com/beinsports.com_my.channels.xml b/sites/beinsports.com/beinsports.com_my.channels.xml index 2646f46a..a5ee6c88 100644 --- a/sites/beinsports.com/beinsports.com_my.channels.xml +++ b/sites/beinsports.com/beinsports.com_my.channels.xml @@ -1,6 +1,4 @@ - - - BeIN Sports 1 Malaysia & Singapore - - + + BeIN Sports 1 Malaysia & Singapore + diff --git a/sites/beinsports.com/beinsports.com_ph.channels.xml b/sites/beinsports.com/beinsports.com_ph.channels.xml index fff70637..f73ff0e6 100644 --- a/sites/beinsports.com/beinsports.com_ph.channels.xml +++ b/sites/beinsports.com/beinsports.com_ph.channels.xml @@ -1,7 +1,5 @@ - - - BeIN Sports 1 Philippines - BeIN Sports 3 Philippines - - + + BeIN Sports 1 Philippines + BeIN Sports 3 Philippines + diff --git a/sites/beinsports.com/beinsports.com_qa-ar.channels.xml b/sites/beinsports.com/beinsports.com_qa-ar.channels.xml index 6f9a70f5..66437c45 100644 --- a/sites/beinsports.com/beinsports.com_qa-ar.channels.xml +++ b/sites/beinsports.com/beinsports.com_qa-ar.channels.xml @@ -1,30 +1,28 @@ - - - beIN SPORTS FTA - beIN SPORTS News - beIN SPORTS2 - beIN SPORTS3 - beIN SPORTS4 - beIN SPORTS5 - beIN SPORTS6 - beIN SPORTS7 - beIN SPORTS3 PREMIUM - beIN SPORTS XTRA1 - beIN SPORTS XTRA2 - beIN 4k - beIN SPORTS AFC - beIN SPORTS AFC1 - beIN SPORTS AFC2 - beIN SPORTS AFC3 - beIN SPORTS NBA - beIN SPORTS1 ENGLISH - beIN SPORTS2 ENGLISH - beIN SPORTS3 ENGLISH - beIN SPORTS1 FRENCH - beIN SPORTS2 FRENCH - beIN SPORTS3 FRENCH - beIN SPORTS MAX 1 - beIN SPORTS MAX 2 - - + + beIN SPORTS FTA + beIN SPORTS News + beIN SPORTS2 + beIN SPORTS3 + beIN SPORTS4 + beIN SPORTS5 + beIN SPORTS6 + beIN SPORTS7 + beIN SPORTS3 PREMIUM + beIN SPORTS XTRA1 + beIN SPORTS XTRA2 + beIN 4k + beIN SPORTS AFC + beIN SPORTS AFC1 + beIN SPORTS AFC2 + beIN SPORTS AFC3 + beIN SPORTS NBA + beIN SPORTS1 ENGLISH + beIN SPORTS2 ENGLISH + beIN SPORTS3 ENGLISH + beIN SPORTS1 FRENCH + beIN SPORTS2 FRENCH + beIN SPORTS3 FRENCH + beIN SPORTS MAX 1 + beIN SPORTS MAX 2 + diff --git a/sites/beinsports.com/beinsports.com_qa-en.channels.xml b/sites/beinsports.com/beinsports.com_qa-en.channels.xml index 36aac1b2..c90af9d9 100644 --- a/sites/beinsports.com/beinsports.com_qa-en.channels.xml +++ b/sites/beinsports.com/beinsports.com_qa-en.channels.xml @@ -1,24 +1,22 @@ - - - BeIn Sports - BeIn Sports News - BeIn Sports 2 - BeIn Sports 3 - BeIn Sports 4 - BeIn Sports 5 - BeIn Sports 6 - BeIn Sports 7 - BeIn Sports Premium 3 - BeIn Sports Xtra 1 - BeIn Sports Xtra 2 - BeIn 4K - BeIn NBA - BeIn Sports English 1 - BeIn Sports English 2 - BeIn Sports English 3 - BeIn Sports French 1 - BeIn Sports French 2 - BeIn Sports French 3 - - + + BeIn Sports + BeIn Sports News + BeIn Sports 2 + BeIn Sports 3 + BeIn Sports 4 + BeIn Sports 5 + BeIn Sports 6 + BeIn Sports 7 + BeIn Sports Premium 3 + BeIn Sports Xtra 1 + BeIn Sports Xtra 2 + BeIn 4K + BeIn NBA + BeIn Sports English 1 + BeIn Sports English 2 + BeIn Sports English 3 + BeIn Sports French 1 + BeIn Sports French 2 + BeIn Sports French 3 + diff --git a/sites/beinsports.com/beinsports.com_th.channels.xml b/sites/beinsports.com/beinsports.com_th.channels.xml index 9f251358..55b802cb 100644 --- a/sites/beinsports.com/beinsports.com_th.channels.xml +++ b/sites/beinsports.com/beinsports.com_th.channels.xml @@ -1,7 +1,5 @@ - - - BeIN Sports 1 Thailand - BeIN Sports 3 Thailand - - + + BeIN Sports 1 Thailand + BeIN Sports 3 Thailand + diff --git a/sites/beinsports.com/beinsports.com_us-en.channels.xml b/sites/beinsports.com/beinsports.com_us-en.channels.xml index 03c30bbc..b3009565 100644 --- a/sites/beinsports.com/beinsports.com_us-en.channels.xml +++ b/sites/beinsports.com/beinsports.com_us-en.channels.xml @@ -1,15 +1,13 @@ - - - BeIN Sports USA - BeIN Sports en Español - BeIN Sports Xtra USA - BeIN Sports Xtra en Español - BeIN Sports 3 USA - BeIN Sports 4 USA - BeIN Sports 5 USA - BeIN Sports 6 USA - BeIN Sports 7 USA - BeIN Sports 8 USA - - + + BeIN Sports USA + BeIN Sports en Español + BeIN Sports Xtra USA + BeIN Sports Xtra en Español + BeIN Sports 3 USA + BeIN Sports 4 USA + BeIN Sports 5 USA + BeIN Sports 6 USA + BeIN Sports 7 USA + BeIN Sports 8 USA + diff --git a/sites/beinsports.com/beinsports.com_us-es.channels.xml b/sites/beinsports.com/beinsports.com_us-es.channels.xml index f556373d..3feee0b6 100644 --- a/sites/beinsports.com/beinsports.com_us-es.channels.xml +++ b/sites/beinsports.com/beinsports.com_us-es.channels.xml @@ -1,15 +1,13 @@ - - - BeIN Sports USA - BeIN Sports en Español - BeIN Sports Xtra USA - BeIN Sports Xtra en Español - BeIN Sports 3 USA - BeIN Sports 4 USA - BeIN Sports 5 USA - BeIN Sports 6 USA - BeIN Sports 7 USA - BeIN Sports 8 USA - - + + BeIN Sports USA + BeIN Sports en Español + BeIN Sports Xtra USA + BeIN Sports Xtra en Español + BeIN Sports 3 USA + BeIN Sports 4 USA + BeIN Sports 5 USA + BeIN Sports 6 USA + BeIN Sports 7 USA + BeIN Sports 8 USA + diff --git a/sites/berrymedia.co.kr/berrymedia.co.kr.channels.xml b/sites/berrymedia.co.kr/berrymedia.co.kr.channels.xml index 8d09501d..fa4a0c7a 100644 --- a/sites/berrymedia.co.kr/berrymedia.co.kr.channels.xml +++ b/sites/berrymedia.co.kr/berrymedia.co.kr.channels.xml @@ -1,11 +1,9 @@ - - - BallTV - CookTV - GMTV - GTV - 생활체육TV - UHDDreamTV - - + + BallTV + CookTV + GMTV + GTV + 생활체육TV + UHDDreamTV + diff --git a/sites/berrymedia.co.kr/berrymedia.co.kr.config.js b/sites/berrymedia.co.kr/berrymedia.co.kr.config.js index f8b8f2a4..773de12d 100644 --- a/sites/berrymedia.co.kr/berrymedia.co.kr.config.js +++ b/sites/berrymedia.co.kr/berrymedia.co.kr.config.js @@ -86,7 +86,7 @@ function parseRating($item) { : null } -function parseItems(content, channel, date) { +function parseItems(content) { const $ = cheerio.load(content) return $('.sc_time dd').toArray() diff --git a/sites/berrymedia.co.kr/berrymedia.co.kr.test.js b/sites/berrymedia.co.kr/berrymedia.co.kr.test.js index 7396aafc..88f98a75 100644 --- a/sites/berrymedia.co.kr/berrymedia.co.kr.test.js +++ b/sites/berrymedia.co.kr/berrymedia.co.kr.test.js @@ -1,4 +1,4 @@ -// npx epg-grabber --config=sites/berrymedia.co.kr/berrymedia.co.kr.config.js --channels=sites/berrymedia.co.kr/berrymedia.co.kr.channels.xml --output=guide.xml --days=2 +// npm run grab -- --site=berrymedia.co.kr const { parser, url, request } = require('./berrymedia.co.kr.config.js') const fs = require('fs') @@ -49,7 +49,7 @@ it('can parse response', () => { expect(results[0]).toMatchObject({ start: '2023-01-25T15:00:00.000Z', stop: '2023-01-25T16:00:00.000Z', - title: `더트롯쇼`, + title: '더트롯쇼', category: '연예/오락', rating: { system: 'KMRB', @@ -60,7 +60,7 @@ it('can parse response', () => { expect(results[17]).toMatchObject({ start: '2023-01-26T13:50:00.000Z', stop: '2023-01-26T14:20:00.000Z', - title: `나는 자연인이다`, + title: '나는 자연인이다', category: '교양', rating: { system: 'KMRB', diff --git a/sites/bt.com/bt.com.channels.xml b/sites/bt.com/bt.com.channels.xml index 7181c220..91ead431 100644 --- a/sites/bt.com/bt.com.channels.xml +++ b/sites/bt.com/bt.com.channels.xml @@ -1,170 +1,168 @@ - - - - - 4seven - 5 Action - 5 Select - 5 Star - 5 USA - Al Jazeera English - BBC Alba - BBC Four - BBC News - BBC One Cambridgeshire - BBC One Channel Islands - BBC One East Midlands - BBC One HD - BBC One London - BBC One North East & Cumbria - BBC One North West - BBC One Oxford - BBC One Scotland - BBC One South - BBC One South East - BBC One South West - BBC One Wales - BBC One West - BBC One West Midlands - BBC One Yorks - BBC Parliament - BBC Scotland - BBC Two England - BBC Two Wales - Blaze UK - Boomerang UK - Cartoonito UK - Cartoon Network UK - CBBC - CBeebies UK - CBS Drama UK - CBS Justice UK - CBS Reality UK - Challenge UK - Channel 4 - Channel 5 - Channel 5 +1 - CITV - Clubland TV - Comedy Central UK - Create and Craft - Dave UK - Dave ja vu - DMAX UK - Drama UK - E4 UK - E4 Extra - E4+1 - Eurosport 1 UK - Eurosport 2 UK - Film 4 UK - Film 4 UK +1 - Food Network UK - GB News - Gems TV - Gold HD - Great! Movies - Great! Movies Action - Great! Movies Action + 1 - Great! Movies Classic - Great! Movies Classic +1 - Great! TV - Great! TV +1 - HGTV UK - Ideal World - ITV - ITV 2 - ITV 2 +1 - ITV 3 - ITV 3 +1 - ITV 4 - ITV 4 +1 - ITV Be - Jewellery Maker - Horror Channel UK - LFC TV - More 4 UK - More4+1 - MTV UK - National Geographic UK - Nickelodeon - Nick Jr UK - NickToons UK - Now 70's - Now 80's - Now 90's - PBS America - Pick UK - Pop - Pop Max - Quest Red UK - Quest Red UK +1 - Quest - Quest UK +1 - QVC UK Beauty - QVC Style UK - QVC UK - Really UK - S4C - Sky Arts HD - Sky Cinema Action HD - Sky Cinema Animation HD - Sky Cinema Comedy HD - Sky Cinema Drama HD - Sky Cinema Family HD - Sky Cinema Greats HD - Sky Cinema Hits HD - Sky Cinema Premiere HD - Sky Cinema Sci-Fi Horror HD - Sky Cinema Select - Sky Cinema Thriller HD - Sky Comedy - Sky Crime - Sky Documentaries - Sky History HD - Sky Max HD - Sky Nature - Sky News HD - Sky Sci-Fi - Sky Showcase HD - Sky Sports Action - Sky Sports Arena - Sky Sports Box Office - Sky Sports Cricket - Sky Sports F1 - Sky Sports Football - Sky Sports Golf - Sky Sports Main Event - Sky Sports Mix - Sky Sports News UK - Sky Sports Premier League - Sky Sports Racing - Sky Witness - Smithsonian Channel UK - STV - STV+1 - Talking Pictures TV - TBN UK - Tiny Pop - TJC - TNT Sports 1 - TNT Sports 10 - TNT Sports 2 - TNT Sports 3 - TNT Sports 4 - TNT Sports 5 - TNT Sports 6 - TNT Sports 7 - TNT Sports 8 - TNT Sports 9 - TNT Sports Box Office UK - TNT Sports Box Office 2 UK - TNT Sports Ultimate - Together TV - Viaplay Xtra - Xpanded TV - Yesterday - Yesterday+1 - - + + + + 4seven + 5 Action + 5 Select + 5 Star + 5 USA + Al Jazeera English + BBC Alba + BBC Four + BBC News + BBC One Cambridgeshire + BBC One Channel Islands + BBC One East Midlands + BBC One HD + BBC One London + BBC One North East & Cumbria + BBC One North West + BBC One Oxford + BBC One Scotland + BBC One South + BBC One South East + BBC One South West + BBC One Wales + BBC One West + BBC One West Midlands + BBC One Yorks + BBC Parliament + BBC Scotland + BBC Two England + BBC Two Wales + Blaze UK + Boomerang UK + Cartoonito UK + Cartoon Network UK + CBBC + CBeebies UK + CBS Drama UK + CBS Justice UK + CBS Reality UK + Challenge UK + Channel 4 + Channel 5 + Channel 5 +1 + CITV + Clubland TV + Comedy Central UK + Create and Craft + Dave UK + Dave ja vu + DMAX UK + Drama UK + E4 UK + E4 Extra + E4+1 + Eurosport 1 UK + Eurosport 2 UK + Film 4 UK + Film 4 UK +1 + Food Network UK + GB News + Gems TV + Gold HD + Great! Movies + Great! Movies Action + Great! Movies Action + 1 + Great! Movies Classic + Great! Movies Classic +1 + Great! TV + Great! TV +1 + HGTV UK + Ideal World + ITV + ITV 2 + ITV 2 +1 + ITV 3 + ITV 3 +1 + ITV 4 + ITV 4 +1 + ITV Be + Jewellery Maker + Horror Channel UK + LFC TV + More 4 UK + More4+1 + MTV UK + National Geographic UK + Nickelodeon + Nick Jr UK + NickToons UK + Now 70's + Now 80's + Now 90's + PBS America + Pick UK + Pop + Pop Max + Quest Red UK + Quest Red UK +1 + Quest + Quest UK +1 + QVC UK Beauty + QVC Style UK + QVC UK + Really UK + S4C + Sky Arts HD + Sky Cinema Action HD + Sky Cinema Animation HD + Sky Cinema Comedy HD + Sky Cinema Drama HD + Sky Cinema Family HD + Sky Cinema Greats HD + Sky Cinema Hits HD + Sky Cinema Premiere HD + Sky Cinema Sci-Fi Horror HD + Sky Cinema Select + Sky Cinema Thriller HD + Sky Comedy + Sky Crime + Sky Documentaries + Sky History HD + Sky Max HD + Sky Nature + Sky News HD + Sky Sci-Fi + Sky Showcase HD + Sky Sports Action + Sky Sports Arena + Sky Sports Box Office + Sky Sports Cricket + Sky Sports F1 + Sky Sports Football + Sky Sports Golf + Sky Sports Main Event + Sky Sports Mix + Sky Sports News UK + Sky Sports Premier League + Sky Sports Racing + Sky Witness + Smithsonian Channel UK + STV + STV+1 + Talking Pictures TV + TBN UK + Tiny Pop + TJC + TNT Sports 1 + TNT Sports 10 + TNT Sports 2 + TNT Sports 3 + TNT Sports 4 + TNT Sports 5 + TNT Sports 6 + TNT Sports 7 + TNT Sports 8 + TNT Sports 9 + TNT Sports Box Office UK + TNT Sports Box Office 2 UK + TNT Sports Ultimate + Together TV + Viaplay Xtra + Xpanded TV + Yesterday + Yesterday+1 + diff --git a/sites/bt.com/bt.com.config.js b/sites/bt.com/bt.com.config.js index e6120719..297bd80c 100644 --- a/sites/bt.com/bt.com.config.js +++ b/sites/bt.com/bt.com.config.js @@ -3,9 +3,6 @@ const dayjs = require('dayjs') module.exports = { site: 'bt.com', days: 2, - request: { - timeout: 30000 - }, url: function ({ date, channel }) { return `https://voila.metabroadcast.com/4/schedules/${ channel.site_id diff --git a/sites/bt.com/bt.com.test.js b/sites/bt.com/bt.com.test.js index 2b2e108f..c7f93d65 100644 --- a/sites/bt.com/bt.com.test.js +++ b/sites/bt.com/bt.com.test.js @@ -1,7 +1,6 @@ -// npx epg-grabber --config=sites/bt.com/bt.com.config.js --channels=sites/bt.com/bt.com.channels.xml --output=guide.xml --days=2 +// npm run grab -- --site=bt.com const { parser, url } = require('./bt.com.config.js') -const axios = require('axios') const dayjs = require('dayjs') const utc = require('dayjs/plugin/utc') const customParseFormat = require('dayjs/plugin/customParseFormat') @@ -21,7 +20,8 @@ it('can generate valid url', () => { }) it('can parse response', () => { - const content = `{"schedule":{"channel":{"title":"BBC One HD","id":"hsxv","uri":"http://api.youview.tv/channels/dvb://233a..4484","images":[{"uri":"https://images.metabroadcast.com?source=http%3A%2F%2Fimages-live.youview.tv%2Fimages%2Fentity%2F8c4c0357-d7ee-5d8a-8bc4-b177b6875128%2Fident%2F1_1024x532.png%3Fdefaultimg%3D0&ETag=r5vyecG6of%2BhCbHeEClx0Q%3D%3D","mime_type":"image/png","type":null,"color":"monochrome","theme":"light_monochrome","aspect_ratio":null,"availability_start":null,"availability_end":null,"width":1024,"height":532,"hasTitleArt":null,"source":null}],"available_from":[{"key":"api.youview.tv","name":"YouView JSON","country":"GB"}],"source":{"key":"api.youview.tv","name":"YouView JSON","country":"GB"},"same_as":[],"media_type":"video","broadcaster":null,"aliases":[{"namespace":"youview:serviceLocator","value":"dvb://233a..4484"},{"namespace":"youview:channel:id","value":"8c4c0357-d7ee-5d8a-8bc4-b177b6875128"}],"genres":[],"high_definition":true,"timeshifted":null,"regional":null,"related_links":[],"start_date":null,"advertised_from":null,"advertised_to":null,"short_description":null,"medium_description":null,"long_description":null,"region":null,"target_regions":[],"channel_type":"CHANNEL","interactive":false,"transmission_types":["DTT"],"quality":"HD","hdr":false},"source":"api.youview.tv","entries":[{"broadcast":{"aliases":[{"namespace":"api.youview.tv:slot","value":"dvb://233a..4484;76bc"},{"namespace":"dvb:event-locator","value":"dvb://233a..4484;76bc"},{"namespace":"dvb:pcrid","value":"crid://fp.bbc.co.uk/b/3Q30S2"},{"namespace":"youview:schedule_event:id","value":"79d318f3-b41a-582d-b089-7b0172538b42"}],"transmission_time":"2022-03-19T23:30:00.000Z","transmission_end_time":"2022-03-20T01:20:00.000Z","broadcast_duration":6600,"broadcast_on":"hsxv","schedule_date":null,"repeat":null,"subtitled":true,"signed":null,"audio_described":false,"high_definition":null,"widescreen":null,"surround":null,"live":null,"premiere":null,"continuation":null,"new_series":null,"new_episode":null,"new_one_off":null,"revised_repeat":null,"blackout_restriction":{"all":false}},"item":{"id":"n72nsw","type":"item","display_title":{"title":"The Finest Hours (2016)","subtitle":null},"year":null,"media_type":"video","specialization":"tv","source":{"key":"api.youview.tv","name":"YouView JSON","country":"GB"},"title":"The Finest Hours (2016)","description":"Drama based on a true story, recounting one of history's most daring coastguard rescue attempts. Stranded on a sinking oil tanker along with 30 other sailors, engineer Ray Sybert battles to buy his crew more time as Captain Bernie Webber and three of his colleagues tackle gigantic waves and gale-force winds in their astonishing bid to save the seamen.","image":"https://images.metabroadcast.com?source=http%3A%2F%2Fimages-live.youview.tv%2Fimages%2Fentity%2F52172983%2Fprimary%2F1_1024x576.jpg%3Fdefaultimg%3D0&ETag=z7ucT5kdAq7HuNQf%2FGTEJg%3D%3D","thumbnail":null,"duration":null,"container":null}}]},"terms_and_conditions":{"text":"Specific terms and conditions in your agreement with MetaBroadcast, and with any data provider, apply to your use of this data, and associated systems."},"results":1,"request":{"path":"/4/schedules/hsxv.json","parameters":{"annotations":"content.description","from":"2022-03-20T00:00:00Z","to":"2022-03-21T00:00:00Z","source":"api.youview.tv","key":"b4d2edb68da14dfb9e47b5465e99b1b1"}}}` + const content = + '{"schedule":{"channel":{"title":"BBC One HD","id":"hsxv","uri":"http://api.youview.tv/channels/dvb://233a..4484","images":[{"uri":"https://images.metabroadcast.com?source=http%3A%2F%2Fimages-live.youview.tv%2Fimages%2Fentity%2F8c4c0357-d7ee-5d8a-8bc4-b177b6875128%2Fident%2F1_1024x532.png%3Fdefaultimg%3D0&ETag=r5vyecG6of%2BhCbHeEClx0Q%3D%3D","mime_type":"image/png","type":null,"color":"monochrome","theme":"light_monochrome","aspect_ratio":null,"availability_start":null,"availability_end":null,"width":1024,"height":532,"hasTitleArt":null,"source":null}],"available_from":[{"key":"api.youview.tv","name":"YouView JSON","country":"GB"}],"source":{"key":"api.youview.tv","name":"YouView JSON","country":"GB"},"same_as":[],"media_type":"video","broadcaster":null,"aliases":[{"namespace":"youview:serviceLocator","value":"dvb://233a..4484"},{"namespace":"youview:channel:id","value":"8c4c0357-d7ee-5d8a-8bc4-b177b6875128"}],"genres":[],"high_definition":true,"timeshifted":null,"regional":null,"related_links":[],"start_date":null,"advertised_from":null,"advertised_to":null,"short_description":null,"medium_description":null,"long_description":null,"region":null,"target_regions":[],"channel_type":"CHANNEL","interactive":false,"transmission_types":["DTT"],"quality":"HD","hdr":false},"source":"api.youview.tv","entries":[{"broadcast":{"aliases":[{"namespace":"api.youview.tv:slot","value":"dvb://233a..4484;76bc"},{"namespace":"dvb:event-locator","value":"dvb://233a..4484;76bc"},{"namespace":"dvb:pcrid","value":"crid://fp.bbc.co.uk/b/3Q30S2"},{"namespace":"youview:schedule_event:id","value":"79d318f3-b41a-582d-b089-7b0172538b42"}],"transmission_time":"2022-03-19T23:30:00.000Z","transmission_end_time":"2022-03-20T01:20:00.000Z","broadcast_duration":6600,"broadcast_on":"hsxv","schedule_date":null,"repeat":null,"subtitled":true,"signed":null,"audio_described":false,"high_definition":null,"widescreen":null,"surround":null,"live":null,"premiere":null,"continuation":null,"new_series":null,"new_episode":null,"new_one_off":null,"revised_repeat":null,"blackout_restriction":{"all":false}},"item":{"id":"n72nsw","type":"item","display_title":{"title":"The Finest Hours (2016)","subtitle":null},"year":null,"media_type":"video","specialization":"tv","source":{"key":"api.youview.tv","name":"YouView JSON","country":"GB"},"title":"The Finest Hours (2016)","description":"Drama based on a true story, recounting one of history\'s most daring coastguard rescue attempts. Stranded on a sinking oil tanker along with 30 other sailors, engineer Ray Sybert battles to buy his crew more time as Captain Bernie Webber and three of his colleagues tackle gigantic waves and gale-force winds in their astonishing bid to save the seamen.","image":"https://images.metabroadcast.com?source=http%3A%2F%2Fimages-live.youview.tv%2Fimages%2Fentity%2F52172983%2Fprimary%2F1_1024x576.jpg%3Fdefaultimg%3D0&ETag=z7ucT5kdAq7HuNQf%2FGTEJg%3D%3D","thumbnail":null,"duration":null,"container":null}}]},"terms_and_conditions":{"text":"Specific terms and conditions in your agreement with MetaBroadcast, and with any data provider, apply to your use of this data, and associated systems."},"results":1,"request":{"path":"/4/schedules/hsxv.json","parameters":{"annotations":"content.description","from":"2022-03-20T00:00:00Z","to":"2022-03-21T00:00:00Z","source":"api.youview.tv","key":"b4d2edb68da14dfb9e47b5465e99b1b1"}}}' const result = parser({ content }).map(p => { p.start = p.start.toJSON() @@ -32,7 +32,8 @@ it('can parse response', () => { expect(result).toMatchObject([ { title: 'The Finest Hours (2016)', - description: `Drama based on a true story, recounting one of history's most daring coastguard rescue attempts. Stranded on a sinking oil tanker along with 30 other sailors, engineer Ray Sybert battles to buy his crew more time as Captain Bernie Webber and three of his colleagues tackle gigantic waves and gale-force winds in their astonishing bid to save the seamen.`, + description: + "Drama based on a true story, recounting one of history's most daring coastguard rescue attempts. Stranded on a sinking oil tanker along with 30 other sailors, engineer Ray Sybert battles to buy his crew more time as Captain Bernie Webber and three of his colleagues tackle gigantic waves and gale-force winds in their astonishing bid to save the seamen.", icon: 'https://images.metabroadcast.com?source=http%3A%2F%2Fimages-live.youview.tv%2Fimages%2Fentity%2F52172983%2Fprimary%2F1_1024x576.jpg%3Fdefaultimg%3D0&ETag=z7ucT5kdAq7HuNQf%2FGTEJg%3D%3D', season: null, episode: null, @@ -44,7 +45,8 @@ it('can parse response', () => { it('can handle empty guide', () => { const result = parser({ - content: `{"schedule":{"channel":{"title":"BBC One HD","id":"hsxv","uri":"http://api.youview.tv/channels/dvb://233a..4484","images":[{"uri":"https://images.metabroadcast.com?source=http%3A%2F%2Fimages-live.youview.tv%2Fimages%2Fentity%2F8c4c0357-d7ee-5d8a-8bc4-b177b6875128%2Fident%2F1_1024x532.png%3Fdefaultimg%3D0&ETag=r5vyecG6of%2BhCbHeEClx0Q%3D%3D","mime_type":"image/png","type":null,"color":"monochrome","theme":"light_monochrome","aspect_ratio":null,"availability_start":null,"availability_end":null,"width":1024,"height":532,"hasTitleArt":null,"source":null}],"available_from":[{"key":"api.youview.tv","name":"YouView JSON","country":"GB"}],"source":{"key":"api.youview.tv","name":"YouView JSON","country":"GB"},"same_as":[],"media_type":"video","broadcaster":null,"aliases":[{"namespace":"youview:serviceLocator","value":"dvb://233a..4484"},{"namespace":"youview:channel:id","value":"8c4c0357-d7ee-5d8a-8bc4-b177b6875128"}],"genres":[],"high_definition":true,"timeshifted":null,"regional":null,"related_links":[],"start_date":null,"advertised_from":null,"advertised_to":null,"short_description":null,"medium_description":null,"long_description":null,"region":null,"target_regions":[],"channel_type":"CHANNEL","interactive":false,"transmission_types":["DTT"],"quality":"HD","hdr":false},"source":"api.youview.tv","entries":[]},"terms_and_conditions":{"text":"Specific terms and conditions in your agreement with MetaBroadcast, and with any data provider, apply to your use of this data, and associated systems."},"results":1,"request":{"path":"/4/schedules/hsxv.json","parameters":{"annotations":"content.description","from":"2022-03-20T00:00:00Z","to":"2022-03-21T00:00:00Z","source":"api.youview.tv","key":"b4d2edb68da14dfb9e47b5465e99b1b1"}}}` + content: + '{"schedule":{"channel":{"title":"BBC One HD","id":"hsxv","uri":"http://api.youview.tv/channels/dvb://233a..4484","images":[{"uri":"https://images.metabroadcast.com?source=http%3A%2F%2Fimages-live.youview.tv%2Fimages%2Fentity%2F8c4c0357-d7ee-5d8a-8bc4-b177b6875128%2Fident%2F1_1024x532.png%3Fdefaultimg%3D0&ETag=r5vyecG6of%2BhCbHeEClx0Q%3D%3D","mime_type":"image/png","type":null,"color":"monochrome","theme":"light_monochrome","aspect_ratio":null,"availability_start":null,"availability_end":null,"width":1024,"height":532,"hasTitleArt":null,"source":null}],"available_from":[{"key":"api.youview.tv","name":"YouView JSON","country":"GB"}],"source":{"key":"api.youview.tv","name":"YouView JSON","country":"GB"},"same_as":[],"media_type":"video","broadcaster":null,"aliases":[{"namespace":"youview:serviceLocator","value":"dvb://233a..4484"},{"namespace":"youview:channel:id","value":"8c4c0357-d7ee-5d8a-8bc4-b177b6875128"}],"genres":[],"high_definition":true,"timeshifted":null,"regional":null,"related_links":[],"start_date":null,"advertised_from":null,"advertised_to":null,"short_description":null,"medium_description":null,"long_description":null,"region":null,"target_regions":[],"channel_type":"CHANNEL","interactive":false,"transmission_types":["DTT"],"quality":"HD","hdr":false},"source":"api.youview.tv","entries":[]},"terms_and_conditions":{"text":"Specific terms and conditions in your agreement with MetaBroadcast, and with any data provider, apply to your use of this data, and associated systems."},"results":1,"request":{"path":"/4/schedules/hsxv.json","parameters":{"annotations":"content.description","from":"2022-03-20T00:00:00Z","to":"2022-03-21T00:00:00Z","source":"api.youview.tv","key":"b4d2edb68da14dfb9e47b5465e99b1b1"}}}' }) expect(result).toMatchObject([]) }) diff --git a/sites/cablego.com.pe/cablego.com.pe.channels.xml b/sites/cablego.com.pe/cablego.com.pe.channels.xml index 0ceeaa32..71f22746 100644 --- a/sites/cablego.com.pe/cablego.com.pe.channels.xml +++ b/sites/cablego.com.pe/cablego.com.pe.channels.xml @@ -1,101 +1,99 @@ - - - AMERICA TV - ATV - ATV+ - BHTV - CONECTA2 TV - CONGRESO TV - DE PELICULA - DISTRITO COMEDIA - ECUADOR TV - EUROPA EUROPA - EXITOSA TV - GLOBAL - GOLDEN EDGE - KARIBEÑA - LATINA - NATIVA - OVACION - PANAMERICANA TV - PASIONES - PBO - TV PERU - USMP TV - VENUS - WILLAX - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AMERICA TV + ATV + ATV+ + BHTV + CONECTA2 TV + CONGRESO TV + DE PELICULA + DISTRITO COMEDIA + ECUADOR TV + EUROPA EUROPA + EXITOSA TV + GLOBAL + GOLDEN EDGE + KARIBEÑA + LATINA + NATIVA + OVACION + PANAMERICANA TV + PASIONES + PBO + TV PERU + USMP TV + VENUS + WILLAX + diff --git a/sites/cablego.com.pe/cablego.com.pe.test.js b/sites/cablego.com.pe/cablego.com.pe.test.js index e8846702..c1da93e9 100644 --- a/sites/cablego.com.pe/cablego.com.pe.test.js +++ b/sites/cablego.com.pe/cablego.com.pe.test.js @@ -1,5 +1,5 @@ // npm run channels:parse -- --config=./sites/cablego.com.pe/cablego.com.pe.config.js --output=./sites/cablego.com.pe/cablego.com.pe.channels.xml -// npx epg-grabber --config=sites/cablego.com.pe/cablego.com.pe.config.js --channels=sites/cablego.com.pe/cablego.com.pe.channels.xml --output=guide.xml --days=2 +// npm run grab -- --site=cablego.com.pe const { parser, url, request } = require('./cablego.com.pe.config.js') const fs = require('fs') diff --git a/sites/cableplus.com.uy/cableplus.com.uy.channels.xml b/sites/cableplus.com.uy/cableplus.com.uy.channels.xml index dd233e7a..a2c7e3b5 100644 --- a/sites/cableplus.com.uy/cableplus.com.uy.channels.xml +++ b/sites/cableplus.com.uy/cableplus.com.uy.channels.xml @@ -1,163 +1,161 @@ - - - 360 TV - A24 - AMERICA SPORTS - A+V - ARGENTINISIMA - BBC WORLD - BYUTV - SAETA - CANAL 26 - TV NACIONAL - CANAL 7 PUNTA DEL ESTE - CANAL RURAL - CARDINAL TV - CHARRUA TV - CLAN HD - CNN EN ESPAÑOL - CRONICA - DEUTSCHE WELLE (DEUTSCH+) - DW ESPAÑOL - CANAL DE LA REGIÓN - EL GARAGE - CANAL VASCO - FRANCE 24 ESPAÑOL - FRANCE 24 FRANCES - GALICIA TV - GOL TV - HBO MUNDI - HBO POP - HBO SIGNATURE - LA NACION + - MAROÑAS - PX SPORTS HD - RAI - RT TV - SIEMPRE CINE - SUN CHANNEL HD - TELEDOCE - TOONCAST - TRU TV - TEVECIUDAD - TVN CHILE - TV PUBLICA ARG - UCL - VTV - VTV + - WOBI TV - ZOOMOO - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 360 TV + A24 + AMERICA SPORTS + A+V + ARGENTINISIMA + BBC WORLD + BYUTV + SAETA + CANAL 26 + TV NACIONAL + CANAL 7 PUNTA DEL ESTE + CANAL RURAL + CARDINAL TV + CHARRUA TV + CLAN HD + CNN EN ESPAÑOL + CRONICA + DEUTSCHE WELLE (DEUTSCH+) + DW ESPAÑOL + CANAL DE LA REGIÓN + EL GARAGE + CANAL VASCO + FRANCE 24 ESPAÑOL + FRANCE 24 FRANCES + GALICIA TV + GOL TV + HBO MUNDI + HBO POP + HBO SIGNATURE + LA NACION + + MAROÑAS + PX SPORTS HD + RAI + RT TV + SIEMPRE CINE + SUN CHANNEL HD + TELEDOCE + TOONCAST + TRU TV + TEVECIUDAD + TVN CHILE + TV PUBLICA ARG + UCL + VTV + VTV + + WOBI TV + ZOOMOO + diff --git a/sites/cableplus.com.uy/cableplus.com.uy.config.js b/sites/cableplus.com.uy/cableplus.com.uy.config.js index 1b7df7fd..a47a7bbc 100644 --- a/sites/cableplus.com.uy/cableplus.com.uy.config.js +++ b/sites/cableplus.com.uy/cableplus.com.uy.config.js @@ -115,14 +115,14 @@ function parseItems(content, date) { let featuredItems = $('.vista-pc > .programacion-fila > .channel-programa') .filter(function () { - return $(this).find(`.grid_fecha_hora`).text().indexOf(date.format('DD-MM')) > -1 + return $(this).find('.grid_fecha_hora').text().indexOf(date.format('DD-MM')) > -1 }) .toArray() - let otherItems = $(`#owl-pc > .item-program`) + let otherItems = $('#owl-pc > .item-program') .filter(function () { return ( $(this) - .find(`.evento_titulo > .horario > p.fechaHora`) + .find('.evento_titulo > .horario > p.fechaHora') .text() .indexOf(date.format('DD/MM')) > -1 ) diff --git a/sites/cableplus.com.uy/cableplus.com.uy.test.js b/sites/cableplus.com.uy/cableplus.com.uy.test.js index 06459f4c..1608509d 100644 --- a/sites/cableplus.com.uy/cableplus.com.uy.test.js +++ b/sites/cableplus.com.uy/cableplus.com.uy.test.js @@ -1,5 +1,5 @@ // npm run channels:parse -- --config=./sites/cableplus.com.uy/cableplus.com.uy.config.js --output=./sites/cableplus.com.uy/cableplus.com.uy.channels.xml -// npx epg-grabber --config=sites/cableplus.com.uy/cableplus.com.uy.config.js --channels=sites/cableplus.com.uy/cableplus.com.uy.channels.xml --output=guide.xml --days=2 +// npm run grab -- --site=cableplus.com.uy const { parser, url, request } = require('./cableplus.com.uy.config.js') const fs = require('fs') @@ -53,7 +53,7 @@ it('can parse response', () => { expect(results[0]).toMatchObject({ start: '2023-02-12T09:30:00.000Z', stop: '2023-02-12T10:30:00.000Z', - title: `Revista agropecuaria`, + title: 'Revista agropecuaria', icon: 'https://www.reportv.com.ar/buscador/img/Programas/2797844.jpg', categories: [] }) @@ -61,7 +61,7 @@ it('can parse response', () => { expect(results[4]).toMatchObject({ start: '2023-02-12T12:30:00.000Z', stop: '2023-02-12T13:30:00.000Z', - title: `De pago en pago`, + title: 'De pago en pago', icon: 'https://www.reportv.com.ar/buscador/img/Programas/3772835.jpg', categories: ['Cultural'] }) diff --git a/sites/canalplus-caraibes.com/canalplus-caraibes.com.channels.xml b/sites/canalplus-caraibes.com/canalplus-caraibes.com.channels.xml index 070d6b35..0b820b01 100644 --- a/sites/canalplus-caraibes.com/canalplus-caraibes.com.channels.xml +++ b/sites/canalplus-caraibes.com/canalplus-caraibes.com.channels.xml @@ -1,132 +1,130 @@ - - - 6ter - 13ème Rue - Action - Alizés - A+ - ARTE Français - Automoto la chaîne - BBC World News Americas - Bblack! Caribbean - BeIn Sports 1 France - BeIn Sports 2 France - BeIn Sports 3 France - BeIn Sports Max 4 France - BeIn Sports Max 5 France - C8 - Canal 10 - Canal J - Canal + Caraïbes - Canal + Cinéma France - Canal + Kids - Canal + Séries France - Canal + Sport France - Cine + Classic - Cine + Club - Cine + Émotion - Cine + Famiz - Cine + Frisson - Cine + Premier - C News - CNN International Latin America - Comédie + - C Star - Discovery Channel France - Discovery Science France - Disney Channel France - Disney Junior France - Dorcel TV - E! France - English Club TV - Equidia - ES1 - ESPN 2 Caribbean - ESPN Caribbean - ETV - Eurosport 1 - Eurosport 2 - France 2 - France 3 - France 4 - France 5 - France 24 Français - Franceinfo: - Game One - Globo News - Golf + - Graphé TV - Guadeloupe 1ère - Gulli - Guyane 1ère - HBO Xtreme Latinoamérica - InfoSport + - IOTV - KMT - KTO - KTV Guyane - LCI - LCP Public Sénat - L'Équipe - Ludikids - M6 - Martinique 1ère - MCM France - Metropole - MTV France - MTV Hits France - National Geographic France - National Geographic Wild France - Nickelodeon France - Nick Jr Africa - Nollywood TV - Novelas TV - NRJ 12 - OCS choc - OCS City - OCS geants - OCS max - Paramount Channel France - Paris Première - Penthouse Black - Pink TV - Piwi + - Planète + - Planète + A&E - Planète + CI - RTL 9 - Seasons - - STVS 8.1 - Syfy France - Télé 20 - Telemicro Internacional - Telemundo - Tele Pacific - Tele Soleil - TéléToon + - Téva - TF 1 - TF 1 Séries Films - TFX - TMC - TNH - Toute l'Histoire - Trace Ayiti - Trace Caribbean - Trace Gospel - Trace Latina - Trace Urban - TV5Monde Amérique Latine - TV Breizh - Ushuaïa TV - ViàATV - Vixen - W9 - Wataaa TV - XXL - Zitata TV - Zouk TV - - \ No newline at end of file + + + 13ème Rue + 6ter + Action + Alizés + A+ + ARTE Français + Automoto la chaîne + BBC World News Americas + Bblack! Caribbean + BeIn Sports 1 France + BeIn Sports 2 France + BeIn Sports 3 France + BeIn Sports Max 4 France + BeIn Sports Max 5 France + C8 + Canal 10 + Canal J + Canal + Caraïbes + Canal + Cinéma France + Canal + Kids + Canal + Séries France + Canal + Sport France + Cine + Classic + Cine + Club + Cine + Émotion + Cine + Famiz + Cine + Frisson + Cine + Premier + C News + CNN International Latin America + Comédie + + C Star + Discovery Channel France + Discovery Science France + Disney Channel France + Disney Junior France + Dorcel TV + E! France + English Club TV + Equidia + ESPN 2 Caribbean + ESPN Caribbean + ETV + Eurosport 1 + Eurosport 2 + France 2 + France 24 Français + France 3 + France 4 + France 5 + Franceinfo: + Game One + Globo News + Golf + + Graphé TV + Guadeloupe 1ère + Gulli + Guyane 1ère + HBO Xtreme Latinoamérica + InfoSport + + IOTV + KMT + KTO + KTV Guyane + LCI + L'Équipe + Ludikids + M6 + Martinique 1ère + MCM France + Metropole + ES1 + MTV France + MTV Hits France + National Geographic France + National Geographic Wild France + Nickelodeon France + Nick Jr Africa + Nollywood TV + Novelas TV + NRJ 12 + OCS choc + OCS City + OCS geants + OCS max + Paramount Channel France + Paris Première + Penthouse Black + Pink TV + Piwi + + Planète + + Planète + A&E + Planète + CI + LCP Public Sénat + RTL 9 + Seasons + STVS 8.1 + Syfy France + Télé 20 + Telemicro Internacional + Telemundo + Tele Pacific + Tele Soleil + TéléToon + + Téva + TF 1 + TF 1 Séries Films + TFX + TMC + TNH + Toute l'Histoire + Trace Ayiti + Trace Caribbean + Trace Gospel + Trace Latina + Trace Urban + TV5Monde Amérique Latine + TV Breizh + Ushuaïa TV + ViàATV + Vixen + W9 + Wataaa TV + XXL + Zitata TV + Zouk TV + \ No newline at end of file diff --git a/sites/canalplus-caraibes.com/canalplus-caraibes.com.config.js b/sites/canalplus-caraibes.com/canalplus-caraibes.com.config.js index e229fa0b..33595d2f 100644 --- a/sites/canalplus-caraibes.com/canalplus-caraibes.com.config.js +++ b/sites/canalplus-caraibes.com/canalplus-caraibes.com.config.js @@ -2,7 +2,6 @@ const axios = require('axios') const cheerio = require('cheerio') const dayjs = require('dayjs') const utc = require('dayjs/plugin/utc') -const timezone = require('dayjs/plugin/timezone') dayjs.extend(utc) @@ -34,13 +33,13 @@ module.exports = { }, async channels() { const html = await axios - .get(`https://www.canalplus-caraibes.com/bl/guide-tv-ce-soir`) + .get('https://www.canalplus-caraibes.com/bl/guide-tv-ce-soir') .then(r => r.data) .catch(console.log) const $ = cheerio.load(html) const script = $('body > script:nth-child(2)').html() - const [_, json] = script.match(/window.APP_STATE=(.*);/) || [null, null] + const [, json] = script.match(/window.APP_STATE=(.*);/) || [null, null] const data = JSON.parse(json) const items = data.tvGuide.channels.byZapNumber diff --git a/sites/canalplus-caraibes.com/canalplus-caraibes.com.test.js b/sites/canalplus-caraibes.com/canalplus-caraibes.com.test.js index 1286336b..d2041367 100644 --- a/sites/canalplus-caraibes.com/canalplus-caraibes.com.test.js +++ b/sites/canalplus-caraibes.com/canalplus-caraibes.com.test.js @@ -1,5 +1,5 @@ // [Geo-blocked] node ./scripts/channels.js --config=./sites/canalplus-caraibes.com/canalplus-caraibes.com.config.js --output=./sites/canalplus-caraibes.com/canalplus-caraibes.com.channels.xml -// npx epg-grabber --config=sites/canalplus-caraibes.com/canalplus-caraibes.com.config.js --channels=sites/canalplus-caraibes.com/canalplus-caraibes.com.channels.xml --output=guide.xml --days=2 +// npm run grab -- --site=canalplus-caraibes.com const { parser, url } = require('./canalplus-caraibes.com.config.js') const axios = require('axios') @@ -31,7 +31,8 @@ it('can generate valid url for tomorrow', () => { }) it('can parse response', done => { - const content = `{"timeSlices":[{"contents":[{"title":"Rugby - Leinster / La Rochelle","subtitle":"Rugby","thirdTitle":"BEIN SPORTS 1 HD","startTime":1660815000,"endTime":1660816800,"onClick":{"displayTemplate":"miniDetail","displayName":"Rugby - Leinster / La Rochelle","URLPage":"https://service.canal-overseas.com/ott-frontend/vector/53001/event/140377765","URLVitrine":"https://service.canal-overseas.com/ott-frontend/vector/53001/program/224515801/recommendations"},"programID":224515801,"diffusionID":"140377765","URLImageDefault":"https://service.canal-overseas.com/image-api/v1/image/75fca4586fdc3458930dd1ab6fc2e643","URLImage":"https://service.canal-overseas.com/image-api/v1/image/7854e20fb6efecd398598653c57cc771"}],"timeSlice":"4"}]}` + const content = + '{"timeSlices":[{"contents":[{"title":"Rugby - Leinster / La Rochelle","subtitle":"Rugby","thirdTitle":"BEIN SPORTS 1 HD","startTime":1660815000,"endTime":1660816800,"onClick":{"displayTemplate":"miniDetail","displayName":"Rugby - Leinster / La Rochelle","URLPage":"https://service.canal-overseas.com/ott-frontend/vector/53001/event/140377765","URLVitrine":"https://service.canal-overseas.com/ott-frontend/vector/53001/program/224515801/recommendations"},"programID":224515801,"diffusionID":"140377765","URLImageDefault":"https://service.canal-overseas.com/image-api/v1/image/75fca4586fdc3458930dd1ab6fc2e643","URLImage":"https://service.canal-overseas.com/image-api/v1/image/7854e20fb6efecd398598653c57cc771"}],"timeSlice":"4"}]}' axios.get.mockImplementation(url => { if (url === 'https://service.canal-overseas.com/ott-frontend/vector/53001/event/140377765') { return Promise.resolve({ @@ -125,7 +126,8 @@ it('can parse response', done => { it('can handle empty guide', done => { parser({ - content: `{"currentPage":{"displayTemplate":"error","BOName":"Page introuvable"},"title":"Page introuvable","text":"La page que vous demandez est introuvable. Si le problème persiste, vous pouvez contacter l'assistance de CANAL+/CANALSAT.","code":404}` + content: + '{"currentPage":{"displayTemplate":"error","BOName":"Page introuvable"},"title":"Page introuvable","text":"La page que vous demandez est introuvable. Si le problème persiste, vous pouvez contacter l\'assistance de CANAL+/CANALSAT.","code":404}' }) .then(result => { expect(result).toMatchObject([]) diff --git a/sites/canalplus-haiti.com/canalplus-haiti.com.channels.xml b/sites/canalplus-haiti.com/canalplus-haiti.com.channels.xml index c17e7664..0216e59c 100644 --- a/sites/canalplus-haiti.com/canalplus-haiti.com.channels.xml +++ b/sites/canalplus-haiti.com/canalplus-haiti.com.channels.xml @@ -1,117 +1,115 @@ - - - 6ter - 13ème Rue - Action - Alizés - A+ - Automoto la chaîne - BBC World News Americas - Bblack! Caribbean - C8 - Canal 10 - Canal + Cinéma France - Canal + Haïti - Canal + Kids - Canal + Sport France - Cine + Classic - Cine + Club - Cine + Émotion - Cine + Famiz - Cine + Frisson - Cine + Premier - C News - CNN International Latin America - Comédie + - C Star - Cuisines - Discovery Channel France - Discovery Science France - Disney Channel France - Disney Junior France - Dorcel TV Africa - E! France - English Club TV - ES1 - ESPN 2 Caribbean - ESPN Caribbean - ETV - Eurosport 1 - Eurosport 2 - France 2 - France 3 - France 5 - France 24 Français - Franceinfo: - Game One - Globo News - Graphé TV - Guadeloupe 1ère - Guyane 1ère - Haiti Sports TV 1 - Haiti Sports TV 2 - HBO Xtreme Latinoamérica - InfoSport + - IOTV - KMT - KTO - KTV Guyane - LCI - LCP Public Sénat - L'Équipe - Ludikids - M6 - Martinique 1ère - MCM France - Metropole - MTV France - MTV Hits France - Nathan TV - National Geographic France - National Geographic Wild France - Nickelodeon France - Nick Jr Africa - Nollywood TV - Novelas TV - NRJ 12 - Paramount Channel France - Paris Première - Penthouse Black - Piwi + - Planète + - Planète + A&E - Planète + CI - RTL 9 - Seasons - - Studiocanal - STVS 8.1 - Syfy France - Télé 20 - Telemicro Internacional - Telemundo - Tele Pacific - Tele Soleil - TéléToon + - TF 1 - TF 1 Séries Films - TFX - TNH - Toute l'Histoire - Trace Ayiti - Trace Caribbean - Trace Gospel - Trace Latina - Trace Urban - TV5Monde Amérique Latine - TV Caraïbes - Ushuaïa TV - ViàATV - Vixen - Wataaa TV - XXL - Zitata TV - Zouk TV - - \ No newline at end of file + + + 13ème Rue + 6ter + Action + Alizés + A+ + Automoto la chaîne + BBC World News Americas + Bblack! Caribbean + C8 + Canal 10 + Canal + Cinéma France + Canal + Haïti + Canal + Kids + Canal + Sport France + Cine + Classic + Cine + Club + Cine + Émotion + Cine + Famiz + Cine + Frisson + Cine + Premier + C News + CNN International Latin America + Comédie + + C Star + Cuisines + Discovery Channel France + Discovery Science France + Disney Channel France + Disney Junior France + Dorcel TV Africa + E! France + English Club TV + ESPN 2 Caribbean + ESPN Caribbean + ETV + Eurosport 1 + Eurosport 2 + France 2 + France 24 Français + France 3 + France 5 + Franceinfo: + Game One + Globo News + Graphé TV + Guadeloupe 1ère + Guyane 1ère + Haiti Sports TV 1 + Haiti Sports TV 2 + HBO Xtreme Latinoamérica + InfoSport + + IOTV + KMT + KTO + KTV Guyane + LCI + L'Équipe + Ludikids + M6 + Martinique 1ère + MCM France + Metropole + ES1 + MTV France + MTV Hits France + Nathan TV + National Geographic France + National Geographic Wild France + Nickelodeon France + Nick Jr Africa + Nollywood TV + Novelas TV + NRJ 12 + Paramount Channel France + Paris Première + Penthouse Black + Piwi + + Planète + + Planète + A&E + Planète + CI + LCP Public Sénat + RTL 9 + Seasons + Studiocanal + STVS 8.1 + Syfy France + Télé 20 + Telemicro Internacional + Telemundo + Tele Pacific + Tele Soleil + TéléToon + + TF 1 + TF 1 Séries Films + TFX + TNH + Toute l'Histoire + Trace Ayiti + Trace Caribbean + Trace Gospel + Trace Latina + Trace Urban + TV5Monde Amérique Latine + TV Caraïbes + Ushuaïa TV + ViàATV + Vixen + Wataaa TV + XXL + Zitata TV + Zouk TV + \ No newline at end of file diff --git a/sites/canalplus-haiti.com/canalplus-haiti.com.config.js b/sites/canalplus-haiti.com/canalplus-haiti.com.config.js index 89279868..86b1aff5 100644 --- a/sites/canalplus-haiti.com/canalplus-haiti.com.config.js +++ b/sites/canalplus-haiti.com/canalplus-haiti.com.config.js @@ -33,13 +33,13 @@ module.exports = { }, async channels() { const html = await axios - .get(`https://www.canalplus-haiti.com/guide-tv-ce-soir`) + .get('https://www.canalplus-haiti.com/guide-tv-ce-soir') .then(r => r.data) .catch(console.log) const $ = cheerio.load(html) const script = $('body > script:nth-child(2)').html() - const [_, json] = script.match(/window.APP_STATE=(.*);/) || [null, null] + const [, json] = script.match(/window.APP_STATE=(.*);/) || [null, null] const data = JSON.parse(json) const items = data.tvGuide.channels.byZapNumber diff --git a/sites/canalplus-haiti.com/canalplus-haiti.com.test.js b/sites/canalplus-haiti.com/canalplus-haiti.com.test.js index f24e77b5..16d1d1d6 100644 --- a/sites/canalplus-haiti.com/canalplus-haiti.com.test.js +++ b/sites/canalplus-haiti.com/canalplus-haiti.com.test.js @@ -1,5 +1,5 @@ -// [Geo-blocked] npm run channels:parse --config=./sites/canalplus-haiti.com/canalplus-haiti.com.config.js --output=./sites/canalplus-haiti.com/canalplus-haiti.com.channels.xml -// npx epg-grabber --config=sites/canalplus-haiti.com/canalplus-haiti.com.config.js --channels=sites/canalplus-haiti.com/canalplus-haiti.com.channels.xml --output=guide.xml --days=2 +// [Geo-blocked] npm run channels:parse -- --config=./sites/canalplus-haiti.com/canalplus-haiti.com.config.js --output=./sites/canalplus-haiti.com/canalplus-haiti.com.channels.xml +// npm run grab -- --site=canalplus-haiti.com const { parser, url } = require('./canalplus-haiti.com.config.js') const axios = require('axios') @@ -165,7 +165,8 @@ it('can parse response', done => { it('can handle empty guide', done => { parser({ - content: `{"currentPage":{"displayTemplate":"error","BOName":"Page introuvable"},"title":"Page introuvable","text":"La page que vous demandez est introuvable. Si le problème persiste, vous pouvez contacter l'assistance de CANAL+/CANALSAT.","code":404}` + content: + '{"currentPage":{"displayTemplate":"error","BOName":"Page introuvable"},"title":"Page introuvable","text":"La page que vous demandez est introuvable. Si le problème persiste, vous pouvez contacter l\'assistance de CANAL+/CANALSAT.","code":404}' }) .then(result => { expect(result).toMatchObject([]) diff --git a/sites/canalplus-reunion.com/canalplus-reunion.com.channels.xml b/sites/canalplus-reunion.com/canalplus-reunion.com.channels.xml index 7e1653c7..f434f958 100644 --- a/sites/canalplus-reunion.com/canalplus-reunion.com.channels.xml +++ b/sites/canalplus-reunion.com/canalplus-reunion.com.channels.xml @@ -1,123 +1,121 @@ - - - 6ter - 13ème Rue - Action - Antenne Réunion TV - A+ - ARTE Français - Automoto la chaîne - BBC World News Africa - BeIn Sports 1 France - BeIn Sports 2 France - BeIn Sports 3 France - C8 - Canal + Cinéma Réunion - Canal + Décalé - Canal + Kids - Canal + Réunion - Canal + Séries Réunion - Canal + Sport Réunion - CGTN Français - Cine + Classic - Cine + Club - Cine + Émotion - Cine + Famiz - Cine + Frisson - Cine + Premier - C News - Colmax TV - Colors - Comédie + - C Star - Discovery Channel France - Discovery Science France - Disney Channel France - Disney Junior France - Dorcel TV Africa - E! France - English Club TV - Equidia - Eurosport 1 France - Eurosport 2 France - France 2 - France 3 - France 4 - France 5 - France 24 Français - Franceinfo: - Game One - Golf + - Gulli - Histoire TV - InfoSport + - Iqraa Africa & Europe - Kanal Austral TV - Kolo TV - KTO - Kwezi TV - LCI - LCP Assemblée Nationale - L'Équipe - Ludikids - M6 - Mayotte 1ère - MBS - Mezzo - MTV France - MTV Hits France - MTV India - National Geographic France - National Geographic Wild France - Nickelodeon France - Nickelodeon Junior France - Nollywood TV - Novegasy - Novelas TV - NRJ 12 - OCS choc - OCS City - OCS geants - OCS max - ORTC TV - Paramount Channel France - Paris Première - Penthouse Black - Piwi + - Planète + - Planète + A&E - Planète + CI - Réunion 1ère - RFM TV - RTA - RTL 9 - Seasons - Série Club - Syfy France - Télé Kréol - TéléToon + - Téva - TF 1 - TF 1 Séries Films - TFX - TMC - Trace Caribbean - Trace Urban Afrique - Trace Vanilla Islands - Trek - TV5Monde Afrique - TV Breizh - TV Malagasy - TV Plus Madagascar - TV Record Madagascar - Ushuaïa TV - Vixen - W9 - Wataaa TV - XXL - Zee Cinema Africa - Zee TV Africa - Zing UK - - \ No newline at end of file + + 13ème Rue + 6ter + Action + Antenne Réunion TV + A+ + ARTE Français + Automoto la chaîne + BBC World News Africa + BeIn Sports 1 France + BeIn Sports 2 France + BeIn Sports 3 France + C8 + Canal + Cinéma Réunion + Canal + Décalé + Canal + Kids + Canal + Réunion + Canal + Séries Réunion + Canal + Sport Réunion + CGTN Français + Cine + Classic + Cine + Club + Cine + Émotion + Cine + Famiz + Cine + Frisson + Cine + Premier + C News + Colmax TV + Colors + Comédie + + C Star + Discovery Channel France + Discovery Science France + Disney Channel France + Disney Junior France + Dorcel TV Africa + E! France + English Club TV + Equidia + Eurosport 1 France + Eurosport 2 France + France 2 + France 24 Français + France 3 + France 4 + France 5 + Franceinfo: + Game One + Golf + + Gulli + Histoire TV + InfoSport + + Iqraa Africa & Europe + Kanal Austral TV + Kolo TV + KTO + Kwezi TV + LCI + LCP Assemblée Nationale + L'Équipe + Ludikids + M6 + Mayotte 1ère + MBS + Mezzo + MTV France + MTV Hits France + MTV India + National Geographic France + National Geographic Wild France + Nickelodeon France + Nickelodeon Junior France + Nollywood TV + Novegasy + Novelas TV + NRJ 12 + OCS choc + OCS City + OCS geants + OCS max + ORTC TV + Paramount Channel France + Paris Première + Penthouse Black + Piwi + + Planète + + Planète + A&E + Planète + CI + Réunion 1ère + RFM TV + RTA + RTL 9 + Seasons + Série Club + Syfy France + Télé Kréol + TéléToon + + Téva + TF 1 + TF 1 Séries Films + TFX + TMC + Trace Caribbean + Trace Urban Afrique + Trace Vanilla Islands + Trek + TV5Monde Afrique + TV Breizh + TV Malagasy + TV Plus Madagascar + TV Record Madagascar + Ushuaïa TV + Vixen + W9 + Wataaa TV + XXL + Zee Cinema Africa + Zee TV Africa + Zing UK + \ No newline at end of file diff --git a/sites/canalplus-reunion.com/canalplus-reunion.com.test.js b/sites/canalplus-reunion.com/canalplus-reunion.com.test.js index 52772577..c6b2cb39 100644 --- a/sites/canalplus-reunion.com/canalplus-reunion.com.test.js +++ b/sites/canalplus-reunion.com/canalplus-reunion.com.test.js @@ -1,4 +1,4 @@ -// npx epg-grabber --config=sites/canalplus-reunion.com/canalplus-reunion.com.config.js --channels=sites/canalplus-reunion.com/canalplus-reunion.com.channels.xml --output=guide.xml --days=2 +// npm run grab -- --site=canalplus-reunion.com const { parser, url } = require('./canalplus-reunion.com.config.js') const axios = require('axios') @@ -149,7 +149,8 @@ it('can parse response', done => { it('can handle empty guide', done => { parser({ - content: `{"currentPage":{"displayTemplate":"error","BOName":"Page introuvable"},"title":"Page introuvable","text":"La page que vous demandez est introuvable. Si le problème persiste, vous pouvez contacter l'assistance de CANAL+/CANALSAT.","code":404}` + content: + '{"currentPage":{"displayTemplate":"error","BOName":"Page introuvable"},"title":"Page introuvable","text":"La page que vous demandez est introuvable. Si le problème persiste, vous pouvez contacter l\'assistance de CANAL+/CANALSAT.","code":404}' }) .then(result => { expect(result).toMatchObject([]) diff --git a/sites/canalplus.com/canalplus.com.channels.xml b/sites/canalplus.com/canalplus.com.channels.xml index f704a374..45e12803 100644 --- a/sites/canalplus.com/canalplus.com.channels.xml +++ b/sites/canalplus.com/canalplus.com.channels.xml @@ -1,326 +1,324 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - AL JAZEERA ENG - BBC WORLD NEWS - CNN INT. - FRANCE 24 ENG - NHK WORLD-JAPAN - 2STV - 6TER - AB1 - ACTION - AL JAZEERA ENG - ALTICE STUDIO - ANIMAUX - ARIRANG TV - ARTE - ASTROCENTER TV - AUTOMOTO LA CHAINE - BEIN SPORTS 1 - BEIN SPORTS 2 - BEIN SPORTS 3 - BEIN SPORTS MAX 10 - BEIN SPORTS MAX 4 - BEIN SPORTS MAX 5 - BEIN SPORTS MAX 6 - BEIN SPORTS MAX 7 - BEIN SPORTS MAX 8 - BEIN SPORTS MAX 9 - BET - BFM BUSINESS - BFM TV - BLOOMBERG TV - BLUE ZOOM - BOING - BOOMERANG - BSMART TV - C8 - CANAL ALPHA NE - CANAL J - CANAL+CINEMA - CANAL+DOCS - CANAL+FOOT - CANAL+FORMULA1 - CANAL+ - CANAL+GRAND ECRAN - CANAL+KIDS - CANAL+MOTOGP - CANAL+PREMIER LEAGUE - CANAL+SERIES - CANAL+ SPORT 2 (CH) - CANAL+SPORT360 - CANAL+SPORT - CANAL+TOP14 - CARTOON NETWORK - CHASSE ET PECHE - CHERIE 25 - CINE+ CLASSIC - CINE+ CLUB - CINE+ EMOTION - CINE+ FAMIZ - CINE+ FRISSON - CINE+ PREMIER - CLIQUE TV - CNBC - CNEWS - COLMAX TV - COMEDIE+ - COMEDY CENTRAL - CSTAR - CSTAR HITS FRANCE - ARD DAS ERSTE - DISNEY CHANNEL - DISNEY CHANNEL+1 - DISNEY JUNIOR - DORA TV - DORCEL TV - DORCEL XXX - EQUIDIA - EURONEWS - EUROSPORT 1 - EUROSPORT 2 - EUROSPORT 3 - EUROSPORT 360 1 - EUROSPORT 360 2 - EUROSPORT 360 3 - EUROSPORT 360 4 - EUROSPORT 360 5 - EUROSPORT 360 6 - EUROSPORT 360 7 - EUROSPORT 360 8 - EUROSPORT 4 - EUROSPORT 5 - EUROSPORT 6 - EUROSPORT 7 - EUROSPORT 8 - EUROSPORT 9 - FOOT+ 24/24 - FRANCE 2 - FRANCE 24 ENG - FRANCE 24 - FRANCE 3 - F3 ALPES - F3 ALSACE - F3 AQUITAINE - F3 AUVERGNE - F3 BNORMANDIE - F3 BOURGOGNE - F3 BRETAGNE - F3 CENTRE - F3 CHAMP ARDENNE - F3 CORSEVIASTELLA - F3 COTE D'AZUR - F3 FRANCHE COMTE - F3 HNORMANDIE - F3 LANGUEDOCROU - F3 LIMOUSIN - F3 LORRAINE - F3 MIDI PYRENEES - F3 NORD PDC - F3 NOUVELLE AQUITAINE - F3 PARIS IDF - F3 PAYS DE LA LOIRE - F3 PICARDIE - F3 POITOUCHAR - F3 PROV ALPES - F3 RHONE ALPES - FRANCE 4 - FRANCE 5 - FRANCEINFO: - GAME ONE - GOLF+ - GULLI - HISTOIRE TV - I24 NEWS - INFOSPORT+ - JACQUIE & MICHEL TV - J-ONE - LA CHAINE METEO - LA TELE - LCI - LCP - LEMAN BLEU - L'EQUIPE - LFM TV - M6 - M6 MUSIC - MANGAS - MAN X - MCM - MELODY - MEZZO - MEZZO LIVE - MGG TV - MTV - MTV HITS - MULTISPORTS 1 - MULTISPORTS 2 - MULTISPORTS 3 - MULTISPORTS 4 - MULTISPORTS 5 - MULTISPORTS 6 - MUSEUM - MY ZEN TV - NATIONAL GEO - NATIONAL GEOGRAPHIC WILD - NHK WORLD-JAPAN - NICKELODEON - NICKELODEON JUNIOR - NICKELODEON TEEN - NOLLYWOOD TV - NON STOP PEOPLE - NOVELAS TV - NRJ 12 - NRJ HITS - OCS CHOC - OCS CITY - OCS GEANTS - OCS MAX - OLYMPIA TV - ONE TV - ORF 1 - PARAMOUNT CHANNEL - PARIS PREMIERE - PENTHOUSE BLACK - PENTHOUSE - PINK X - PIWI+ - PLANETE+ - PLANETE+AVENTURE - PLANETE+CRIME - POLAR+ - RAI UNO - RFM TV - RMC DECOUVERTE - RMC SPORT 1 - RMC SPORT 2 - RMC SPORT 3 - RMC SPORT 4 - RMC SPORT LIVE 10 - RMC SPORT LIVE 11 - RMC SPORT LIVE 12 - RMC SPORT LIVE 13 - RMC SPORT LIVE 14 - RMC SPORT LIVE 5 - RMC SPORT LIVE 6 - RMC SPORT LIVE 7 - RMC SPORT LIVE 8 - RMC SPORT LIVE 9 - RMC STORY - ROUGE TV - RT FRANCE - RTL9 - SCIENCE ET VIE TV - SEASONS - SERIE CLUB - SRF 1 - CLASSICA - DJAZZ - TCM CINEMA - TELEBIELINGUE - TELETOON+ - TELETOON+1 - TEVA - TF1 - TF1 SERIES FILMS - TFX - TIJI - TMC - TOONAMI - TOUTE L'HISTOIRE - TRACE AFRICA - TRACE LATINA - TRACE URBAN - TV5 MONDE - TV BREIZH - USHUAIA TV - VICE TV - VIXEN - W9 - WARNER TV - XXL - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AL JAZEERA ENG + BBC WORLD NEWS + CNN INT. + FRANCE 24 ENG + NHK WORLD-JAPAN + 2STV + 6TER + AB1 + ACTION + AL JAZEERA ENG + ALTICE STUDIO + ANIMAUX + ARIRANG TV + ARTE + ASTROCENTER TV + AUTOMOTO LA CHAINE + BEIN SPORTS 1 + BEIN SPORTS 2 + BEIN SPORTS 3 + BEIN SPORTS MAX 10 + BEIN SPORTS MAX 4 + BEIN SPORTS MAX 5 + BEIN SPORTS MAX 6 + BEIN SPORTS MAX 7 + BEIN SPORTS MAX 8 + BEIN SPORTS MAX 9 + BET + BFM BUSINESS + BFM TV + BLOOMBERG TV + BLUE ZOOM + BOING + BOOMERANG + BSMART TV + C8 + CANAL ALPHA NE + CANAL J + CANAL+CINEMA + CANAL+DOCS + CANAL+FOOT + CANAL+FORMULA1 + CANAL+ + CANAL+GRAND ECRAN + CANAL+KIDS + CANAL+MOTOGP + CANAL+PREMIER LEAGUE + CANAL+SERIES + CANAL+ SPORT 2 (CH) + CANAL+SPORT360 + CANAL+SPORT + CANAL+TOP14 + CARTOON NETWORK + CHASSE ET PECHE + CHERIE 25 + CINE+ CLASSIC + CINE+ CLUB + CINE+ EMOTION + CINE+ FAMIZ + CINE+ FRISSON + CINE+ PREMIER + CLIQUE TV + CNBC + CNEWS + COLMAX TV + COMEDIE+ + COMEDY CENTRAL + CSTAR + CSTAR HITS FRANCE + ARD DAS ERSTE + DISNEY CHANNEL + DISNEY CHANNEL+1 + DISNEY JUNIOR + DORA TV + DORCEL TV + DORCEL XXX + EQUIDIA + EURONEWS + EUROSPORT 1 + EUROSPORT 2 + EUROSPORT 3 + EUROSPORT 360 1 + EUROSPORT 360 2 + EUROSPORT 360 3 + EUROSPORT 360 4 + EUROSPORT 360 5 + EUROSPORT 360 6 + EUROSPORT 360 7 + EUROSPORT 360 8 + EUROSPORT 4 + EUROSPORT 5 + EUROSPORT 6 + EUROSPORT 7 + EUROSPORT 8 + EUROSPORT 9 + FOOT+ 24/24 + FRANCE 2 + FRANCE 24 ENG + FRANCE 24 + FRANCE 3 + F3 ALPES + F3 ALSACE + F3 AQUITAINE + F3 AUVERGNE + F3 BNORMANDIE + F3 BOURGOGNE + F3 BRETAGNE + F3 CENTRE + F3 CHAMP ARDENNE + F3 CORSEVIASTELLA + F3 COTE D'AZUR + F3 FRANCHE COMTE + F3 HNORMANDIE + F3 LANGUEDOCROU + F3 LIMOUSIN + F3 LORRAINE + F3 MIDI PYRENEES + F3 NORD PDC + F3 NOUVELLE AQUITAINE + F3 PARIS IDF + F3 PAYS DE LA LOIRE + F3 PICARDIE + F3 POITOUCHAR + F3 PROV ALPES + F3 RHONE ALPES + FRANCE 4 + FRANCE 5 + FRANCEINFO: + GAME ONE + GOLF+ + GULLI + HISTOIRE TV + I24 NEWS + INFOSPORT+ + JACQUIE & MICHEL TV + J-ONE + LA CHAINE METEO + LA TELE + LCI + LCP + LEMAN BLEU + L'EQUIPE + LFM TV + M6 + M6 MUSIC + MANGAS + MAN X + MCM + MELODY + MEZZO + MEZZO LIVE + MGG TV + MTV + MTV HITS + MULTISPORTS 1 + MULTISPORTS 2 + MULTISPORTS 3 + MULTISPORTS 4 + MULTISPORTS 5 + MULTISPORTS 6 + MUSEUM + MY ZEN TV + NATIONAL GEO + NATIONAL GEOGRAPHIC WILD + NHK WORLD-JAPAN + NICKELODEON + NICKELODEON JUNIOR + NICKELODEON TEEN + NOLLYWOOD TV + NON STOP PEOPLE + NOVELAS TV + NRJ 12 + NRJ HITS + OCS CHOC + OCS CITY + OCS GEANTS + OCS MAX + OLYMPIA TV + ONE TV + ORF 1 + PARAMOUNT CHANNEL + PARIS PREMIERE + PENTHOUSE BLACK + PENTHOUSE + PINK X + PIWI+ + PLANETE+ + PLANETE+AVENTURE + PLANETE+CRIME + POLAR+ + RAI UNO + RFM TV + RMC DECOUVERTE + RMC SPORT 1 + RMC SPORT 2 + RMC SPORT 3 + RMC SPORT 4 + RMC SPORT LIVE 10 + RMC SPORT LIVE 11 + RMC SPORT LIVE 12 + RMC SPORT LIVE 13 + RMC SPORT LIVE 14 + RMC SPORT LIVE 5 + RMC SPORT LIVE 6 + RMC SPORT LIVE 7 + RMC SPORT LIVE 8 + RMC SPORT LIVE 9 + RMC STORY + ROUGE TV + RT FRANCE + RTL9 + SCIENCE ET VIE TV + SEASONS + SERIE CLUB + SRF 1 + CLASSICA + DJAZZ + TCM CINEMA + TELEBIELINGUE + TELETOON+ + TELETOON+1 + TEVA + TF1 + TF1 SERIES FILMS + TFX + TIJI + TMC + TOONAMI + TOUTE L'HISTOIRE + TRACE AFRICA + TRACE LATINA + TRACE URBAN + TV5 MONDE + TV BREIZH + USHUAIA TV + VICE TV + VIXEN + W9 + WARNER TV + XXL + diff --git a/sites/canalplus.com/canalplus.com.config.js b/sites/canalplus.com/canalplus.com.config.js index 0b38a6ef..1d719e26 100644 --- a/sites/canalplus.com/canalplus.com.config.js +++ b/sites/canalplus.com/canalplus.com.config.js @@ -66,7 +66,6 @@ module.exports = { gm: 'https://secure-webtv-static.canal-plus.com/metadata/cpafr/gm/all/v2.2/globalchannels.json', gn: 'https://secure-webtv-static.canal-plus.com/metadata/cpafr/gn/all/v2.2/globalchannels.json', gp: 'https://secure-webtv-static.canal-plus.com/metadata/cpafr/gp/all/v2.2/globalchannels.json', - gp: 'https://secure-webtv-static.canal-plus.com/metadata/cpant/gp/all/v2.2/globalchannels.json', gw: 'https://secure-webtv-static.canal-plus.com/metadata/cpafr/gw/all/v2.2/globalchannels.json', mf: 'https://secure-webtv-static.canal-plus.com/metadata/cpant/mf/all/v2.2/globalchannels.json', mg: 'https://secure-webtv-static.canal-plus.com/metadata/cpafr/mg/all/v2.2/globalchannels.json', diff --git a/sites/canalplus.com/canalplus.com.test.js b/sites/canalplus.com/canalplus.com.test.js index b6c35b71..7b905e5b 100644 --- a/sites/canalplus.com/canalplus.com.test.js +++ b/sites/canalplus.com/canalplus.com.test.js @@ -1,5 +1,5 @@ // npm run channels:parse -- --config=./sites/canalplus.com/canalplus.com.config.js --output=./sites/canalplus.com/canalplus.com.channels.xml -// npx epg-grabber --config=sites/canalplus.com/canalplus.com.config.js --channels=sites/canalplus.com/canalplus.com.channels.xml --output=guide.xml +// npm run grab -- --site=canalplus.com const { parser, url } = require('./canalplus.com.config.js') const fs = require('fs') @@ -97,7 +97,8 @@ it('can parse response', done => { start: '2023-01-12T06:28:00.000Z', stop: '2023-01-12T12:06:00.000Z', title: 'Le cercle', - description: `Tant qu'il y aura du cinéma, LE CERCLE sera là. C'est la seule émission télévisée de débats critiques 100% consacrée au cinéma et elle rentre dans sa 18e saison. Chaque semaine, elle offre des joutes enflammées, joyeuses et sans condescendance, sur les films à l'affiche ; et invite avec \"Le questionnaire du CERCLE\" les réalisatrices et réalisateurs à venir partager leur passion cinéphile.`, + description: + "Tant qu'il y aura du cinéma, LE CERCLE sera là. C'est la seule émission télévisée de débats critiques 100% consacrée au cinéma et elle rentre dans sa 18e saison. Chaque semaine, elle offre des joutes enflammées, joyeuses et sans condescendance, sur les films à l'affiche ; et invite avec \"Le questionnaire du CERCLE\" les réalisatrices et réalisateurs à venir partager leur passion cinéphile.", icon: 'https://thumb.canalplus.pro/http/unsafe/{resolutionXY}/filters:quality({imageQualityPercentage})/img-hapi.canalplus.pro:80/ServiceImage/ImageID/107297573', presenter: ['Lily Bloom'], rating: { @@ -109,7 +110,8 @@ it('can parse response', done => { start: '2023-01-12T12:06:00.000Z', stop: '2023-01-12T13:06:00.000Z', title: 'Illusions perdues', - description: `Pendant la Restauration, Lucien de Rubempré, jeune provincial d'Angoulême, se rêve poète. Il débarque à Paris en quête de gloire. Il a le soutien de Louise de Bargeton, une aristocrate qui croit en son talent. Pour gagner sa vie, Lucien trouve un emploi dans le journal dirigé par le peu scrupuleux Etienne Lousteau...`, + description: + "Pendant la Restauration, Lucien de Rubempré, jeune provincial d'Angoulême, se rêve poète. Il débarque à Paris en quête de gloire. Il a le soutien de Louise de Bargeton, une aristocrate qui croit en son talent. Pour gagner sa vie, Lucien trouve un emploi dans le journal dirigé par le peu scrupuleux Etienne Lousteau...", icon: 'https://thumb.canalplus.pro/http/unsafe/{resolutionXY}/filters:quality({imageQualityPercentage})/img-hapi.canalplus.pro:80/ServiceImage/ImageID/107356485', director: ['Xavier Giannoli'], actors: [ diff --git a/sites/cgates.lt/cgates.lt.channels.xml b/sites/cgates.lt/cgates.lt.channels.xml index 1200dd34..663bf1a2 100644 --- a/sites/cgates.lt/cgates.lt.channels.xml +++ b/sites/cgates.lt/cgates.lt.channels.xml @@ -1,124 +1,122 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Baby TV - BBC World News - Bloomberg Television - CBS Reality - CNBC Europe - CNN International - Discovery Channel HD - DocuBox HD - Duo 3 HD - Duo 6 HD - Epic Drama HD - Eurochannel - Euronews RU - Extreme Sports - Fashion TV - Fast&Fun Box HD - Fight Sports HD - FilmBox ArtHouse - FilmZone - France 24 - Game Toon HD - Jim Jam - KidZone Mini HD - KidZone TV - Luxe.TV HD - Mezzo - MTV 00s - MTV Hits - Playboy TV - Setanta Sports 1 HD - Smartzone HD - TV 1000 Action - TV 1000 - TV 1000 World Kino - TV3 Sport HD - TV3 Sport 2 HD - TV3 Sport Open HD - Vivid Touch - 1+1 - 1+2 - 2TV - 36.6 TV - Arirang TV - Balticum Auksinis - Balticum Platinum HD - Balticum TV - Blue Hustler - BTV HD - Nastojashcheje Vremya - Dacha - Delfi TV HD - Kanal 7 - Dzūkijos TV - Film UA Drama - FilmZone+ HD - TV3 Film HD - Gulli Girl - Info TV HD - Inter+ - Kus-Kus - Lietuvos ryto TV HD - LNK HD - LRT Lituanica - LRT Plius HD - LRT Televizija HD - Marijampolės TV - Šiaulių televizija - Sport 1 HD - Star Cinema - Star Family - Tiji - TV1 HD - TV3 HD - TV3 Plus HD - TV6 HD - TV8 HD - Bolt - TVP Info - TVP Polonia - ViP Comedy - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Baby TV + BBC World News + Bloomberg Television + CBS Reality + CNBC Europe + CNN International + Discovery Channel HD + DocuBox HD + Duo 3 HD + Duo 6 HD + Epic Drama HD + Eurochannel + Euronews RU + Extreme Sports + Fashion TV + Fast&Fun Box HD + Fight Sports HD + FilmBox ArtHouse + FilmZone + France 24 + Game Toon HD + Jim Jam + KidZone Mini HD + KidZone TV + Luxe.TV HD + Mezzo + MTV 00s + MTV Hits + Playboy TV + Setanta Sports 1 HD + Smartzone HD + TV 1000 Action + TV 1000 + TV 1000 World Kino + TV3 Sport HD + TV3 Sport 2 HD + TV3 Sport Open HD + Vivid Touch + 1+1 + 1+2 + 2TV + 36.6 TV + Arirang TV + Balticum Auksinis + Balticum Platinum HD + Balticum TV + Blue Hustler + BTV HD + Nastojashcheje Vremya + Dacha + Delfi TV HD + Kanal 7 + Dzūkijos TV + Film UA Drama + FilmZone+ HD + TV3 Film HD + Gulli Girl + Info TV HD + Inter+ + Kus-Kus + Lietuvos ryto TV HD + LNK HD + LRT Lituanica + LRT Plius HD + LRT Televizija HD + Marijampolės TV + Šiaulių televizija + Sport 1 HD + Star Cinema + Star Family + Tiji + TV1 HD + TV3 HD + TV3 Plus HD + TV6 HD + TV8 HD + Bolt + TVP Info + TVP Polonia + ViP Comedy + diff --git a/sites/cgates.lt/cgates.lt.config.js b/sites/cgates.lt/cgates.lt.config.js index 6251a3cc..efdc3ca2 100644 --- a/sites/cgates.lt/cgates.lt.config.js +++ b/sites/cgates.lt/cgates.lt.config.js @@ -42,7 +42,7 @@ module.exports = { }, async channels() { let html = await axios - .get(`https://www.cgates.lt/televizija/tv-programa-savaitei/`) + .get('https://www.cgates.lt/televizija/tv-programa-savaitei/') .then(r => r.data) .catch(console.log) let $ = cheerio.load(html) @@ -51,7 +51,7 @@ module.exports = { return items.map(item => { const name = $(item).find('h6').text().trim() const link = $(item).find('a').attr('href') - const [_, site_id] = link.match(/\/tv-kanalai\/(.*)\//) || [null, null] + const [, site_id] = link.match(/\/tv-kanalai\/(.*)\//) || [null, null] return { lang: 'lt', diff --git a/sites/cgates.lt/cgates.lt.test.js b/sites/cgates.lt/cgates.lt.test.js index 4a0390b1..ac1abbec 100644 --- a/sites/cgates.lt/cgates.lt.test.js +++ b/sites/cgates.lt/cgates.lt.test.js @@ -1,5 +1,5 @@ // npm run channels:parse -- --config=./sites/cgates.lt/cgates.lt.config.js --output=./sites/cgates.lt/cgates.lt.channels.xml -// npx epg-grabber --config=sites/cgates.lt/cgates.lt.config.js --channels=sites/cgates.lt/cgates.lt.channels.xml --output=guide.xml --days=2 +// npm run grab -- --site=cgates.lt const { parser, url } = require('./cgates.lt.config.js') const fs = require('fs') diff --git a/sites/chaines-tv.orange.fr/chaines-tv.orange.fr.channels.xml b/sites/chaines-tv.orange.fr/chaines-tv.orange.fr.channels.xml index 81c009e2..74b4e4ee 100644 --- a/sites/chaines-tv.orange.fr/chaines-tv.orange.fr.channels.xml +++ b/sites/chaines-tv.orange.fr/chaines-tv.orange.fr.channels.xml @@ -1,199 +1,197 @@ - - - 01 TV - 2M Monde - 3sat - 6ter - AB 1 - Action - Aljazeera English - Animaux - A+ Kids TV - ARTE Français - Automoto la chaîne - BBC Entertainment Europe - BBC World News Europe - BeIn Sports 1 France - BeIn Sports 2 France - BeIn Sports 3 France - BeIn Sports Max 4 France - BeIn Sports Max 5 France - BeIn Sports Max 6 France - BeIn Sports Max 7 France - BeIn Sports Max 8 France - BeIn Sports Max 9 France - BeIn Sports Max 10 France - BET France - BFM Business - BFM TV - Bloomberg TV Europe - Boing France - Boomerang France - Boomerang France +1 - C8 - Canal J - Canal + Cinéma France - Canal + Décalé - Canal + Docs - Canal + France - Canal + Grand Ecran - Canal + Kids - Canal + Séries - Canal + Sport - Canal Q - Cartoon Network France - Chasse & Pêche - Chérie 25 - Cine + Classic - Cine + Club - Cine + Émotion - Cine + Famiz - Cine + Frisson - Cine + Premier - Clique TV - Clubbing TV - CNBC Europe - C News - CNN International Europe - Comédie + - Comedy Central France - Crime District - C Star - Das Erste - Demain TV - Disney Channel France - Disney Channel France +1 - Disney Junior France - DW English - Equidia - ES1 - Eurochannel - EuroNews Français - FashionTV Europe - France 2 - France 3 - France 3 Alpes - France 3 Alsace - France 3 Aquitaine - France 3 Auvergne - France 3 Bourgogne - France 3 Bretagne - France 3 Centre-Val de Loire - France 3 Champagne-Ardenne - France 3 Corse Via Stella - France 3 Côte d'Azur - France 3 Franche-Comté - France 3 Languedoc-Roussillon - France 3 Limousin - France 3 Lorraine - France 3 Midi-Pyrénées - France 3 Nord Pas-de-Calais - France 3 Paris Ile-de-France - France 3 Pays de la Loire - France 3 Picardie - France 3 Poitou-Charentes - France 3 Provence-Alpes - France 3 Rhône-Alpes - France 4 - France 5 - France 24 English - France 24 Français - Franceinfo: - Game One - Game One +1 - Golf Channel France - Gulli - Histoire TV - I24 News Français - J-One - KTO - LCI - LCP Assemblée Nationale - LCP Public Sénat - L'Équipe - Lucky Jack.tv - Luxe TV - M6 - M6 Music - Maison & Travaux TV - Mangas - MCM France - Melody - Melody d'Afrique - Mezzo - Mezzo Live HD - MTV France - MTV Hits France - Museum - MyZen TV - National Geographic France - National Geographic Wild France - NHK World Japan - Nickelodeon France - Nickelodeon France +1 - Nickelodeon Junior France - Nickelodeon Teen - Nitro Deutschland - Nollywood TV - Novelas TV - NRJ 12 - NRJ Hits - OCS choc - OCS City - OCS geants - OCS max - Olympia TV - One - Paramount Channel Décalé - Paramount Channel France - Paris Première - Piwi + - Planète + - Planète + A&E - Planète + CI - Polar + - ProSieben Deutschland - Rai 1 - Rai 2 - Rai 3 - Rai News 24 - RMC Découverte - RMC Story - RTL 9 - RTL Zwei Deutschland - RTP Internacional Europa - Science & Vie TV - Série Club - Sport en France - Stingray Classica - Sunu Yeuf - Super RTL Deutschland - TCM Cinéma - TéléToon + - TéléToon + 1 - Téva - TF 1 - TF 1 +1 - TF 1 Séries Films - TFX - The Israeli Network - Tiji - TMC - TMC +1 - Toonami France - Toute l'Histoire - TV5Monde France Belgique Suisse - TV Breizh - TVE Internacional Europa - TV Pitchoun - Ultra Nature - Ushuaïa TV - Voxafrica Afrique - Vox Deutschland - W9 - Warner TV France - ZDF - ZDF Neo - - + + 01 TV + 2M Monde + 3sat + 6ter + AB 1 + Action + Aljazeera English + Animaux + A+ Kids TV + ARTE Français + Automoto la chaîne + BBC Entertainment Europe + BBC World News Europe + BeIn Sports 1 France + BeIn Sports 2 France + BeIn Sports 3 France + BeIn Sports Max 10 France + BeIn Sports Max 4 France + BeIn Sports Max 5 France + BeIn Sports Max 6 France + BeIn Sports Max 7 France + BeIn Sports Max 8 France + BeIn Sports Max 9 France + BET France + BFM Business + BFM TV + Bloomberg TV Europe + Boing France + Boomerang France + Boomerang France +1 + C8 + Canal J + Canal + Cinéma France + Canal + Décalé + Canal + Docs + Canal + France + Canal + Grand Ecran + Canal + Kids + Canal + Séries + Canal + Sport + Canal Q + Cartoon Network France + Chasse & Pêche + Chérie 25 + Cine + Classic + Cine + Club + Cine + Émotion + Cine + Famiz + Cine + Frisson + Cine + Premier + Clique TV + Clubbing TV + CNBC Europe + C News + CNN International Europe + Comédie + + Comedy Central France + Crime District + C Star + Das Erste + Demain TV + Disney Channel France + Disney Channel France +1 + Disney Junior France + DW English + Equidia + Eurochannel + EuroNews Français + FashionTV Europe + France 2 + France 24 English + France 24 Français + France 3 + France 3 Alpes + France 3 Alsace + France 3 Aquitaine + France 3 Auvergne + France 3 Bourgogne + France 3 Bretagne + France 3 Centre-Val de Loire + France 3 Champagne-Ardenne + France 3 Corse Via Stella + France 3 Côte d'Azur + France 3 Franche-Comté + France 3 Languedoc-Roussillon + France 3 Limousin + France 3 Lorraine + France 3 Midi-Pyrénées + France 3 Nord Pas-de-Calais + France 3 Paris Ile-de-France + France 3 Pays de la Loire + France 3 Picardie + France 3 Poitou-Charentes + France 3 Provence-Alpes + France 3 Rhône-Alpes + France 4 + France 5 + Franceinfo: + Game One + Game One +1 + Golf Channel France + Gulli + Histoire TV + I24 News Français + J-One + KTO + LCI + LCP Assemblée Nationale + L'Équipe + Lucky Jack.tv + Luxe TV + M6 + M6 Music + Maison & Travaux TV + Mangas + MCM France + Melody + Melody d'Afrique + Mezzo + Mezzo Live HD + ES1 + MTV France + MTV Hits France + Museum + MyZen TV + National Geographic France + National Geographic Wild France + NHK World Japan + Nickelodeon France + Nickelodeon France +1 + Nickelodeon Junior France + Nickelodeon Teen + Nitro Deutschland + Nollywood TV + Novelas TV + NRJ 12 + NRJ Hits + OCS choc + OCS City + OCS geants + OCS max + Olympia TV + One + Paramount Channel France + Paramount Channel Décalé + Paris Première + Piwi + + Planète + + Planète + A&E + Planète + CI + Polar + + ProSieben Deutschland + LCP Public Sénat + Rai 1 + Rai 2 + Rai 3 + Rai News 24 + RMC Découverte + RMC Story + RTL 9 + RTL Zwei Deutschland + RTP Internacional Europa + Science & Vie TV + Série Club + Sport en France + Stingray Classica + Sunu Yeuf + Super RTL Deutschland + TCM Cinéma + TéléToon + + TéléToon + 1 + Téva + TF 1 + TF 1 +1 + TF 1 Séries Films + TFX + The Israeli Network + Tiji + TMC + TMC +1 + Toonami France + Toute l'Histoire + TV5Monde France Belgique Suisse + TV Breizh + TVE Internacional Europa + TV Pitchoun + Ultra Nature + Ushuaïa TV + Voxafrica Afrique + Vox Deutschland + W9 + Warner TV France + ZDF + ZDF Neo + diff --git a/sites/chaines-tv.orange.fr/chaines-tv.orange.fr.test.js b/sites/chaines-tv.orange.fr/chaines-tv.orange.fr.test.js index dff67824..ff1ec431 100644 --- a/sites/chaines-tv.orange.fr/chaines-tv.orange.fr.test.js +++ b/sites/chaines-tv.orange.fr/chaines-tv.orange.fr.test.js @@ -1,6 +1,6 @@ -// npx epg-grabber --config=sites/chaines-tv.orange.fr/chaines-tv.orange.fr.config.js --channels=sites/chaines-tv.orange.fr/chaines-tv.orange.fr.channels.xml --output=guide.xml --days=2 +// npm run grab -- --site=chaines-tv.orange.fr -const { parser, url, request } = require('./chaines-tv.orange.fr.config.js') +const { parser, url } = require('./chaines-tv.orange.fr.config.js') const dayjs = require('dayjs') const utc = require('dayjs/plugin/utc') const customParseFormat = require('dayjs/plugin/customParseFormat') @@ -12,7 +12,8 @@ const channel = { site_id: '192', xmltv_id: 'TF1.fr' } -const content = `{"192":[{"id":1635062528017,"programType":"EPISODE","title":"Tête de liste","channelId":"192","channelZappingNumber":11,"covers":[{"format":"RATIO_16_9","url":"https://proxymedia.woopic.com/340/p/169_EMI_9697669.jpg"},{"format":"RATIO_4_3","url":"https://proxymedia.woopic.com/340/p/43_EMI_9697669.jpg"}],"diffusionDate":1636328100,"duration":2700,"csa":2,"synopsis":"Un tueur en série prend un plaisir pervers à prévenir les autorités de Tallahassee avant chaque nouveau meurtre. Rossi apprend le décès d'un de ses vieux amis.","languageVersion":"VM","hearingImpaired":true,"audioDescription":false,"season":{"number":10,"episodesCount":23,"serie":{"title":"Esprits criminels"}},"episodeNumber":12,"definition":"SD","links":[{"rel":"SELF","href":"https://rp-live.orange.fr/live-webapp/v3/applications/STB4PC/programs/1635062528017"}],"dayPart":"OTHER","catchupId":null,"genre":"Série","genreDetailed":"Série Suspense"}]}` +const content = + '{"192":[{"id":1635062528017,"programType":"EPISODE","title":"Tête de liste","channelId":"192","channelZappingNumber":11,"covers":[{"format":"RATIO_16_9","url":"https://proxymedia.woopic.com/340/p/169_EMI_9697669.jpg"},{"format":"RATIO_4_3","url":"https://proxymedia.woopic.com/340/p/43_EMI_9697669.jpg"}],"diffusionDate":1636328100,"duration":2700,"csa":2,"synopsis":"Un tueur en série prend un plaisir pervers à prévenir les autorités de Tallahassee avant chaque nouveau meurtre. Rossi apprend le décès d\'un de ses vieux amis.","languageVersion":"VM","hearingImpaired":true,"audioDescription":false,"season":{"number":10,"episodesCount":23,"serie":{"title":"Esprits criminels"}},"episodeNumber":12,"definition":"SD","links":[{"rel":"SELF","href":"https://rp-live.orange.fr/live-webapp/v3/applications/STB4PC/programs/1635062528017"}],"dayPart":"OTHER","catchupId":null,"genre":"Série","genreDetailed":"Série Suspense"}]}' it('can generate valid url', () => { const result = url({ channel, date }) @@ -28,7 +29,8 @@ it('can parse response', () => { start: '2021-11-07T23:35:00.000Z', stop: '2021-11-08T00:20:00.000Z', title: 'Tête de liste', - description: `Un tueur en série prend un plaisir pervers à prévenir les autorités de Tallahassee avant chaque nouveau meurtre. Rossi apprend le décès d'un de ses vieux amis.`, + description: + "Un tueur en série prend un plaisir pervers à prévenir les autorités de Tallahassee avant chaque nouveau meurtre. Rossi apprend le décès d'un de ses vieux amis.", category: 'Série Suspense', icon: 'https://proxymedia.woopic.com/340/p/169_EMI_9697669.jpg' } @@ -39,7 +41,8 @@ it('can handle empty guide', () => { const result = parser({ date, channel, - content: `{"code":60,"message":"Resource not found","param":{},"description":"L'URI demandé ou la ressource demandée n'existe pas.","stackTrace":null}` + content: + '{"code":60,"message":"Resource not found","param":{},"description":"L\'URI demandé ou la ressource demandée n\'existe pas.","stackTrace":null}' }) expect(result).toMatchObject([]) }) diff --git a/sites/clickthecity.com/clickthecity.com.channels.xml b/sites/clickthecity.com/clickthecity.com.channels.xml index f87b3679..2c355954 100644 --- a/sites/clickthecity.com/clickthecity.com.channels.xml +++ b/sites/clickthecity.com/clickthecity.com.channels.xml @@ -1,38 +1,36 @@ - - - - - a2z Channel 11 - ANC - Animax - AXN - Celestial Movies Pinoy - Cinema One - Cinemax - CNN Philippines - GEM - GMA - GTV - HBO - History - IBC TV 13 - Jeepney TV - Kapamilya Channel - K-Movies Pinoy - Liga - Metro Channel - MYX - National Geographic - Net 25 - Nickelodeon - PBO - PTV - Rock Entertainment - Rock Extreme - Tagalized Movie Channel - Telenovela Channel - TV5 - VIVA Cinema - - + + + + a2z Channel 11 + ANC + Animax + AXN + Celestial Movies Pinoy + Cinema One + Cinemax + CNN Philippines + GEM + GMA + GTV + HBO + History + IBC TV 13 + Jeepney TV + Kapamilya Channel + K-Movies Pinoy + Liga + Metro Channel + MYX + National Geographic + Net 25 + Nickelodeon + PBO + PTV + Rock Entertainment + Rock Extreme + Tagalized Movie Channel + Telenovela Channel + TV5 + VIVA Cinema + diff --git a/sites/clickthecity.com/clickthecity.com.config.js b/sites/clickthecity.com/clickthecity.com.config.js index 6846fe80..917495ea 100644 --- a/sites/clickthecity.com/clickthecity.com.config.js +++ b/sites/clickthecity.com/clickthecity.com.config.js @@ -47,7 +47,7 @@ module.exports = { }, async channels() { const html = await axios - .get(`https://www.clickthecity.com/tv/channels/`) + .get('https://www.clickthecity.com/tv/channels/') .then(r => r.data) .catch(console.log) const $ = cheerio.load(html) @@ -56,7 +56,7 @@ module.exports = { return items.map(item => { const name = $(item).find('.card-body').text().trim() const url = $(item).find('a').attr('href') - const [_, site_id] = url.match(/netid=(\d+)/) || [null, null] + const [, site_id] = url.match(/netid=(\d+)/) || [null, null] return { site_id, @@ -72,7 +72,7 @@ function parseTitle($item) { function parseStart($item, date) { const url = $item('td.cPrg > a').attr('href') || '' - let [_, time] = url.match(/starttime=(\d{1,2}%3A\d{2}\+(AM|PM))/) || [null, null] + let [, time] = url.match(/starttime=(\d{1,2}%3A\d{2}\+(AM|PM))/) || [null, null] if (!time) return null time = `${date.format('YYYY-MM-DD')} ${time.replace('%3A', ':').replace('+', ' ')}` @@ -81,7 +81,7 @@ function parseStart($item, date) { function parseStop($item, date) { const url = $item('td.cPrg > a').attr('href') || '' - let [_, time] = url.match(/endtime=(\d{1,2}%3A\d{2}\+(AM|PM))/) || [null, null] + let [, time] = url.match(/endtime=(\d{1,2}%3A\d{2}\+(AM|PM))/) || [null, null] if (!time) return null time = `${date.format('YYYY-MM-DD')} ${time.replace('%3A', ':').replace('+', ' ')}` @@ -91,7 +91,7 @@ function parseStop($item, date) { function parseItems(content) { const $ = cheerio.load(content) - return $(`#tvlistings > tbody > tr`) + return $('#tvlistings > tbody > tr') .filter(function () { return $(this).find('td.cPrg').length }) diff --git a/sites/clickthecity.com/clickthecity.com.test.js b/sites/clickthecity.com/clickthecity.com.test.js index b48453ba..33ae1deb 100644 --- a/sites/clickthecity.com/clickthecity.com.test.js +++ b/sites/clickthecity.com/clickthecity.com.test.js @@ -1,5 +1,5 @@ // npm run channels:parse -- --config=./sites/clickthecity.com/clickthecity.com.config.js --output=./sites/clickthecity.com/clickthecity.com.channels.xml -// npx epg-grabber --config=sites/clickthecity.com/clickthecity.com.config.js --channels=sites/clickthecity.com/clickthecity.com.channels.xml --output=guide.xml +// npm run grab -- --site=clickthecity.com const { parser, url, request } = require('./clickthecity.com.config.js') const fs = require('fs') @@ -49,13 +49,13 @@ it('can parse response', () => { expect(results[0]).toMatchObject({ start: '2023-06-11T21:00:00.000Z', stop: '2023-06-11T22:00:00.000Z', - title: `Word Of God` + title: 'Word Of God' }) expect(results[19]).toMatchObject({ start: '2023-06-12T15:30:00.000Z', stop: '2023-06-12T16:00:00.000Z', - title: `La Suerte De Loli` + title: 'La Suerte De Loli' }) }) @@ -63,7 +63,8 @@ it('can handle empty guide', () => { const result = parser({ date, channel, - content: `` + content: + '' }) expect(result).toMatchObject([]) }) diff --git a/sites/compulms.com/compulms.com.channels.xml b/sites/compulms.com/compulms.com.channels.xml index bc308e3c..9d9e6cd3 100644 --- a/sites/compulms.com/compulms.com.channels.xml +++ b/sites/compulms.com/compulms.com.channels.xml @@ -1,9 +1,7 @@ - - - EnerGeek Animate - EnerGeek Retro - EnerGeek Radio TV - EnerGeek Fanpop - - + + EnerGeek Animate + EnerGeek Retro + EnerGeek Radio TV + EnerGeek Fanpop + diff --git a/sites/compulms.com/compulms.com.test.js b/sites/compulms.com/compulms.com.test.js index 9e79ab92..92c1fae5 100644 --- a/sites/compulms.com/compulms.com.test.js +++ b/sites/compulms.com/compulms.com.test.js @@ -1,4 +1,4 @@ -// npx epg-grabber --config=sites/compulms.com/compulms.com.config.js --channels=sites/compulms.com/compulms.com.channels.xml --output=guide.xml --days=2 +// npm run grab -- --site=compulms.com const { parser, url } = require('./compulms.com.config.js') const fs = require('fs') diff --git a/sites/comteco.com.bo/comteco.com.bo.channels.xml b/sites/comteco.com.bo/comteco.com.bo.channels.xml index d2399342..e627a5f8 100644 --- a/sites/comteco.com.bo/comteco.com.bo.channels.xml +++ b/sites/comteco.com.bo/comteco.com.bo.channels.xml @@ -1,80 +1,78 @@ - - - - - - Abya Yala TV - A&E - AMC - Animal Planet - AXN - Az Mundo - Bolivia TV - Bolivia TV 7.2 Deportes - Bolivisión - Cadena A - Canal 24 Horas - Caracol TV - Cartoon Network - Cinecanal Este - Cinemax - CNN - Cubavisión - De Película - Discovery Channel - Discovery Home & Health Latinoamérica - Discovery Kids América Latina - Disney Channel - Disney Junior España - El Gourmet - El Trece - E! - EuroNews Español - Europa Europa - EWTN - Fox Sports 2 - Fox Sports 3 - Fox Sports Latin America - FXM - FX - HBO - History - HTV - Investigation Discovery - María+Visión - Más Chic - MTV Latino Norte - Nat Geo Kids - National Geographic - Nickelodeon - Record TV - Red Uno - RTP - SBT - Space México - Star Channel - Star Life - Studio Universal - TBS - TCM - Telefe Internacional - Telemundo - Telesur - TLC - Tlnovelas - TNT - TNT Series - Tooncast - TV Chile - TV Culturas - TVE - TV Globo Internacional - TV Perú - TyC Sports - Unitel Santa Cruz - Universal TV - VH1 East - Warner Channel - - \ No newline at end of file + + + + + Abya Yala TV + A&E + AMC + Animal Planet + AXN + Az Mundo + Bolivia TV + Bolivia TV 7.2 Deportes + Bolivisión + Cadena A + Canal 24 Horas + Caracol TV + Cartoon Network + Cinecanal Este + Cinemax + CNN + Cubavisión + De Película + Discovery Channel + Discovery Home & Health Latinoamérica + Discovery Kids América Latina + Disney Channel + Disney Junior España + El Gourmet + El Trece + E! + EuroNews Español + Europa Europa + EWTN + Fox Sports 2 + Fox Sports 3 + Fox Sports Latin America + FXM + FX + HBO + History + HTV + Investigation Discovery + María+Visión + Más Chic + MTV Latino Norte + Nat Geo Kids + National Geographic + Nickelodeon + Record TV + Red Uno + RTP + SBT + Space México + Star Channel + Star Life + Studio Universal + TBS + TCM + Telefe Internacional + Telemundo + Telesur + TLC + Tlnovelas + TNT + TNT Series + Tooncast + TV Chile + TV Culturas + TVE + TV Globo Internacional + TV Perú + TyC Sports + Unitel Santa Cruz + Universal TV + VH1 East + Warner Channel + \ No newline at end of file diff --git a/sites/comteco.com.bo/comteco.com.bo.test.js b/sites/comteco.com.bo/comteco.com.bo.test.js index d8701454..c0514bf4 100644 --- a/sites/comteco.com.bo/comteco.com.bo.test.js +++ b/sites/comteco.com.bo/comteco.com.bo.test.js @@ -1,4 +1,4 @@ -// npx epg-grabber --config=sites/comteco.com.bo/comteco.com.bo.config.js --channels=sites/comteco.com.bo/comteco.com.bo.channels.xml --output=guide.xml --days=2 +// npm run grab -- --site=comteco.com.bo const { parser, url, request } = require('./comteco.com.bo.config.js') const dayjs = require('dayjs') @@ -12,7 +12,8 @@ const channel = { site_id: 'ABYA YALA', xmltv_id: 'AbyaYalaTV.bo' } -const content = ` Canal Analógico: 48 ABYA YALA 00:00:00 Abya Yala noticias - 3ra edición 01:00:00 Cierre de emisión 23:00:00 Referentes Regresar a canales ` +const content = + ' Canal Analógico: 48 ABYA YALA 00:00:00 Abya Yala noticias - 3ra edición 01:00:00 Cierre de emisión 23:00:00 Referentes Regresar a canales ' it('can generate valid url', () => { expect(url({ channel })).toBe( @@ -48,17 +49,17 @@ it('can parse response', () => { { start: '2021-11-25T04:00:00.000Z', stop: '2021-11-25T05:00:00.000Z', - title: `Abya Yala noticias - 3ra edición` + title: 'Abya Yala noticias - 3ra edición' }, { start: '2021-11-25T05:00:00.000Z', stop: '2021-11-26T03:00:00.000Z', - title: `Cierre de emisión` + title: 'Cierre de emisión' }, { start: '2021-11-26T03:00:00.000Z', stop: '2021-11-26T03:30:00.000Z', - title: `Referentes` + title: 'Referentes' } ]) }) @@ -67,7 +68,7 @@ it('can handle empty guide', () => { const result = parser({ date, channel, - content: `` + content: '' }) expect(result).toMatchObject([]) }) diff --git a/sites/cosmote.gr/cosmote.gr.channels.xml b/sites/cosmote.gr/cosmote.gr.channels.xml index 2f8c7776..eaf51292 100644 --- a/sites/cosmote.gr/cosmote.gr.channels.xml +++ b/sites/cosmote.gr/cosmote.gr.channels.xml @@ -1,90 +1,88 @@ - - - 4E - Action 24 - Aigaio TV - Alarabiya - Aljazeera - Alpha TV - Ant1 - Baby TV - BBC Earth HD - BBC World News - Bloomberg TV - Blue Hustler - Body in Balance - CBS Reality - CNBC - CNN - Cosmote Cinema 1 - Cosmote Cinema 2 - Cosmote Cinema 3 - Cosmote History - Cosmote Series - Cosmote Series Marathon - Cosmote Sport 1 - Cosmote Sport 2 - Cosmote Sport 3 - Cosmote Sport 4 - Cosmote Sport 5 - Cosmote Sport 6 - Cosmote Sport 7 - Cosmote Sport 8 - Cosmote Sport 9 - Cosmote Sport Highlights - Crime + Investigation - Disney Channel Middle East - DW - Edge Sport HD - E! HD - Ena Channel - Epsilon TV - ERT 1 - ERT 2 - ERT 3 - ERT World - EuroNews English - EuroNews - FashionTV - Fox HD - Fox Life HD - France 24 English - France 24 Français - Ginx eSports TV - Vouli TV - Hustler HD - Kriti TV - Luxe TV HD - Mad TV - Mad Viral - Makedonia TV - Mega TV HD - Mezzo Live HD - Motorvision TV HD - MTV Global - MTV Live HD - National Geographic - National Geographic Wild HD - Nautical Channel - Nea TV - One Channel - Open Beyond TV - Penthouse Gold - Private TV - RT News - Sirina TV - SKAI - Smile TV - Star Channel - Star Kentrikis Elladas - Stingray CMusic - Stingray IConcerts - Vergina TV - VH1 Europe - Viasat Explore - Viasat History - Viasat Nature - Village Cinemas HD - - + + 4E + Action 24 + Aigaio TV + Alarabiya + Aljazeera + Alpha TV + Ant1 + Baby TV + BBC Earth HD + BBC World News + Bloomberg TV + Blue Hustler + Body in Balance + CBS Reality + CNBC + CNN + Cosmote Cinema 1 + Cosmote Cinema 2 + Cosmote Cinema 3 + Cosmote History + Cosmote Series + Cosmote Series Marathon + Cosmote Sport 1 + Cosmote Sport 2 + Cosmote Sport 3 + Cosmote Sport 4 + Cosmote Sport 5 + Cosmote Sport 6 + Cosmote Sport 7 + Cosmote Sport 8 + Cosmote Sport 9 + Cosmote Sport Highlights + Crime + Investigation + Disney Channel Middle East + DW + Edge Sport HD + E! HD + Ena Channel + Epsilon TV + ERT 1 + ERT 2 + ERT 3 + ERT World + EuroNews English + EuroNews + FashionTV + Fox HD + Fox Life HD + France 24 English + France 24 Français + Ginx eSports TV + Vouli TV + Hustler HD + Kriti TV + Luxe TV HD + Mad TV + Mad Viral + Makedonia TV + Mega TV HD + Mezzo Live HD + Motorvision TV HD + MTV Global + MTV Live HD + National Geographic + National Geographic Wild HD + Nautical Channel + Nea TV + One Channel + Open Beyond TV + Penthouse Gold + Private TV + RT News + Sirina TV + SKAI + Smile TV + Star Channel + Star Kentrikis Elladas + Stingray CMusic + Stingray IConcerts + Vergina TV + VH1 Europe + Viasat Explore + Viasat History + Viasat Nature + Village Cinemas HD + diff --git a/sites/cosmote.gr/cosmote.gr.config.js b/sites/cosmote.gr/cosmote.gr.config.js index 829f2eab..29ce29c4 100644 --- a/sites/cosmote.gr/cosmote.gr.config.js +++ b/sites/cosmote.gr/cosmote.gr.config.js @@ -4,9 +4,6 @@ const { DateTime } = require('luxon') module.exports = { site: 'cosmote.gr', days: 2, - request: { - timeout: 30000 // 30 seconds - }, url: function ({ date, channel }) { return `https://www.cosmotetv.gr/portal/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' @@ -55,7 +52,7 @@ function parseCategory($item) { .end() .text() .trim() - const [_, category] = typeString.match(/\| (.*)/) || [null, null] + const [, category] = typeString.match(/\| (.*)/) || [null, null] return category } diff --git a/sites/cosmote.gr/cosmote.gr.test.js b/sites/cosmote.gr/cosmote.gr.test.js index 882d6b7a..5b818650 100644 --- a/sites/cosmote.gr/cosmote.gr.test.js +++ b/sites/cosmote.gr/cosmote.gr.test.js @@ -1,4 +1,4 @@ -// npx epg-grabber --config=sites/cosmote.gr/cosmote.gr.config.js --channels=sites/cosmote.gr/cosmote.gr.channels.xml --output=guide.xml +// npm run grab -- --site=cosmote.gr const { parser, url } = require('./cosmote.gr.config.js') const fs = require('fs') @@ -35,14 +35,14 @@ it('can parse response', () => { expect(results[0]).toMatchObject({ start: '2023-06-07T20:30:00.000Z', stop: '2023-06-07T21:45:00.000Z', - title: `Τηλεφημερίδα`, + title: 'Τηλεφημερίδα', category: 'Εκπομπή - Μαγκαζίνο' }) expect(results[30]).toMatchObject({ start: '2023-06-08T19:45:00.000Z', stop: '2023-06-08T20:30:00.000Z', - title: `Μικρό Απόδειπνο`, + title: 'Μικρό Απόδειπνο', category: 'Special' }) }) @@ -58,14 +58,14 @@ it('can parse response when the guide starting before midnight', () => { expect(results[0]).toMatchObject({ start: '2023-06-07T21:30:00.000Z', stop: '2023-06-07T22:30:00.000Z', - title: `Καλύτερα Αργά`, + title: 'Καλύτερα Αργά', category: 'Ψυχαγωγική Εκπομπή' }) expect(results[22]).toMatchObject({ start: '2023-06-08T19:00:00.000Z', stop: '2023-06-08T21:30:00.000Z', - title: `Πίσω Από Τις Γραμμές`, + title: 'Πίσω Από Τις Γραμμές', category: 'Εκπομπή - Μαγκαζίνο' }) }) @@ -73,7 +73,7 @@ it('can parse response when the guide starting before midnight', () => { it('can handle empty guide', () => { const result = parser({ date, - content: `` + content: '' }) expect(result).toMatchObject([]) }) diff --git a/sites/delta.nl/delta.nl.channels.xml b/sites/delta.nl/delta.nl.channels.xml index add393a8..5af0b1e3 100644 --- a/sites/delta.nl/delta.nl.channels.xml +++ b/sites/delta.nl/delta.nl.channels.xml @@ -1,228 +1,226 @@ - - - 100% NL TV - 192 TV - 24 Kitchen - 3sat - AAVISIE - Albrandswaard TV - Aljazeera English - Altena TV - Animal Planet Europe - ARTE Deutsch - Assen TV - AT5 - ATOS TV - Babes TV - Baby TV Europe - BBC Entertainment Europe - BBC First Nederland - BBC One - BBC Two - BBC World News Europe - Beek TV - Bloomberg TV Europe - Boomerang Central & Eastern Europe - BR6 TV - Brazzers TV Europe - BredaNu TV - Canvas - Cartoon Network Nederland - Castricum TV - - Centraal TV - CGTN - CNN International Europe - Comedy Central Extra UK - Comedy Central Nederland - Crime + Investigation UK - Das Erste - Delta TV - Den Haag TV - Discovery Channel Nederland - Discovery Science - Disney Channel Nederland - DRTV - DTV Oss & Bernheze - Dusk - Één - E! Europe - ESPN 2 Nederland - ESPN 3 Nederland - ESPN Nederland - EuroNews English - Eurosport 1 - Eurosport 2 - Extreme Sports Channel - Family 7 - FashionTV Europe - Feel Good TV - Film 1 Action - Film 1 Drama - Film 1 Family - Film 1 Premiere - FilmBox Nederland - Fox NL - France 2 - France 24 Français - France 3 - Gemeente Westland TV - GL8 - GO-TV - Gouwestad TV - History Benelux - Hofstreek TV - HOi TV - Horse & Country TV - Hustler TV Europe - Ideaal TV - Ijsselmond TV - Insight TV - Investigation Discovery Europe - JenZ - Kabel Eins Deutschland - Ketnet - KIKA - Kontakt TV - L1 TV - Lansingerland TV - Loco TV - LOE TV - LOK TV - LON TV - LOS TV - Meiden van Holland Hard - Meppel TV - Mezzo - ML5 TV - MLA TV - MTV 00s - MTV 80s - MTV Hits Europe - MTV Live HD - MTV NL - National Geographic Nederland - National Geographic Wild Europe - Nautical Channel - NDR Fernsehen Hamburg - Net 5 - NHK World Japan - NH TV - Nickelodeon - Nick Jr - NickMusic - Nicktoons - NOOS TV - NPO 1 - NPO 1 Extra - NPO 2 - NPO 2 Extra - NPO 3 - NPO Nieuws - NPO Politiek - NPO Zappelin Extra - N-TV - Omroep Brabant TV - Omroep Flevoland TV - Omroep Hulst TV - Omroep Meierijstad TV - Omroep Tilburg TV - Omroep Venlo TV - Omroep Zeeland TV - Omrop Fryslân TV - ONS - Ons West Brabant TV - OPEN Rotterdam TV - Out TV - Passie XXX - Pebble TV - Phoenix CNE - Playboy TV Europe - P&M TV - ProSieben Deutschland - Pure Babes - Radio Aalsmeer TV - Rai 1 - Regio8 TV - Regio90 TV - RN7 - Ronde Venen TV - RTBF La Une - RTL 4 - RTL 5 - RTL 7 - RTL 8 - RTL Crime Nederland - RTL Deutschland - RTL Lounge - RTL Telekids - RTL Z - RTV 1 - RTV Arnhem TV - RTV Focus TV - RTV Horizon - RTV Oost - RTV Purmerend - RTV Rijnstreek TV - RTV Scheldemond - RTV Slingeland - RTV SLOS - RTV Utrecht - RTV Veluwezoom TV - Samen1 TV - Sat. 1 Deutschland - SBS 6 - SBS 9 - Schie TV - Schlager TV - Shorts TV - Siris TV - Slam! - SLOGO TV - SLOS TV - Slotstad TV - Spike Nederland - Stingray Classica - Stingray Djazz - Stingray IConcerts - Stingray Lite TV - StreekTV - Studio Alphen TV - SWR Fernsehen Baden-Württemberg - Tholen TV - Tipik - TLC Nederland - Trace Sport Stars - Trace Urban - TRT Türk - TV 538 - TV5Monde Europe - TV Berghem - TV Drenthe - TVE Internacional Europa - TV Gelderland - TV Krimpenerwaard - TV Noord - TV Nunspeet - TV Oranje - TV Rijnmond - TV Stichtse Vecht - TV West - Twente TV - Vechtdal TV - - Vox Deutschland - WDR Fernsehen Köln - WOS - ZDF - Ziggo Sport Docu - Ziggo Sport Golf - Ziggo Sport Racing - Ziggo Sport Select - Ziggo Sport Tennis - Ziggo Sport Voetbal - ZuidWest TV - ZVT-AVS - - + + + + Das Erste + Aljazeera English + Babes TV + BBC World News Europe + Bloomberg TV Europe + Brazzers TV Europe + CGTN + CNN International Europe + EuroNews English + Extreme Sports Channel + FashionTV Europe + MTV 00s + MTV 80s + MTV Live HD + Nautical Channel + NHK World Japan + Playboy TV Europe + Shorts TV + Trace Sport Stars + Trace Urban + France 24 Français + France 3 + RTBF La Une + 100% NL TV + 192 TV + 24 Kitchen + 3sat + AAVISIE + Albrandswaard TV + Altena TV + Animal Planet Europe + ARTE Deutsch + Assen TV + AT5 + ATOS TV + Baby TV Europe + BBC Entertainment Europe + BBC First Nederland + BBC One + BBC Two + Beek TV + Boomerang Central & Eastern Europe + BR6 TV + BredaNu TV + Canvas + Cartoon Network Nederland + Castricum TV + Centraal TV + Comedy Central Extra UK + Comedy Central Nederland + Crime + Investigation UK + Delta TV + Den Haag TV + Discovery Channel Nederland + Discovery Science + Disney Channel Nederland + DRTV + DTV Oss & Bernheze + Dusk + Één + E! Europe + ESPN 2 Nederland + ESPN 3 Nederland + ESPN Nederland + Eurosport 1 + Eurosport 2 + Family 7 + Feel Good TV + Film 1 Action + Film 1 Drama + Film 1 Family + Film 1 Premiere + FilmBox Nederland + Fox NL + France 2 + Gemeente Westland TV + GL8 + GO-TV + Gouwestad TV + History Benelux + Hofstreek TV + HOi TV + Horse & Country TV + Hustler TV Europe + Ideaal TV + Ijsselmond TV + Insight TV + Investigation Discovery Europe + JenZ + Kabel Eins Deutschland + Ketnet + KIKA + Kontakt TV + L1 TV + Lansingerland TV + Loco TV + LOE TV + LOK TV + LON TV + LOS TV + Meiden van Holland Hard + Meppel TV + Mezzo + ML5 TV + MLA TV + MTV Hits Europe + MTV NL + National Geographic Nederland + National Geographic Wild Europe + NDR Fernsehen Hamburg + Net 5 + NH TV + Nickelodeon + Nick Jr + NickMusic + Nicktoons + NOOS TV + NPO 1 + NPO 1 Extra + NPO 2 + NPO 2 Extra + NPO 3 + NPO Nieuws + NPO Politiek + NPO Zappelin Extra + N-TV + Omroep Brabant TV + Omroep Flevoland TV + Omroep Hulst TV + Omroep Meierijstad TV + Ons West Brabant TV + Omroep Tilburg TV + Omroep Venlo TV + Omroep Zeeland TV + Omrop Fryslân TV + ONS + OPEN Rotterdam TV + Out TV + Passie XXX + Pebble TV + Phoenix CNE + P&M TV + ProSieben Deutschland + Pure Babes + Radio Aalsmeer TV + Rai 1 + Regio8 TV + Regio90 TV + RN7 + Ronde Venen TV + RTL 4 + RTL 5 + RTL 7 + RTL 8 + RTL Crime Nederland + RTL Deutschland + RTL Lounge + RTL Telekids + RTL Z + RTV 1 + RTV Arnhem TV + TV Drenthe + RTV Focus TV + RTV Horizon + RTV Oost + RTV Purmerend + RTV Rijnstreek TV + RTV Scheldemond + RTV Slingeland + RTV SLOS + RTV Utrecht + RTV Veluwezoom TV + Samen1 TV + Sat. 1 Deutschland + SBS 6 + SBS 9 + Schie TV + Schlager TV + Siris TV + Slam! + SLOGO TV + SLOS TV + Slotstad TV + Spike Nederland + Stingray Classica + Stingray Djazz + Stingray IConcerts + Stingray Lite TV + StreekTV + Studio Alphen TV + SWR Fernsehen Baden-Württemberg + Tholen TV + Tipik + TLC Nederland + TRT Türk + TV 538 + TV5Monde Europe + TV Berghem + TVE Internacional Europa + TV Gelderland + TV Krimpenerwaard + TV Noord + TV Nunspeet + TV Oranje + TV Rijnmond + TV Stichtse Vecht + TV West + Twente TV + Vechtdal TV + Vox Deutschland + WDR Fernsehen Köln + WOS + ZDF + Ziggo Sport Docu + Ziggo Sport Golf + Ziggo Sport Racing + Ziggo Sport Select + Ziggo Sport Tennis + Ziggo Sport Voetbal + ZuidWest TV + ZVT-AVS + diff --git a/sites/delta.nl/delta.nl.test.js b/sites/delta.nl/delta.nl.test.js index 95fe631e..c4a49af9 100644 --- a/sites/delta.nl/delta.nl.test.js +++ b/sites/delta.nl/delta.nl.test.js @@ -1,7 +1,7 @@ -// npm run channels:parse --config=./sites/delta.nl/delta.nl.config.js --output=./sites/delta.nl/delta.nl.channels.xml -// npx epg-grabber --config=sites/delta.nl/delta.nl.config.js --channels=sites/delta.nl/delta.nl.channels.xml --output=guide.xml --days=2 +// npm run channels:parse -- --config=./sites/delta.nl/delta.nl.config.js --output=./sites/delta.nl/delta.nl.channels.xml +// npm run grab -- --site=delta.nl -const { parser, url, request } = require('./delta.nl.config.js') +const { parser, url } = require('./delta.nl.config.js') const axios = require('axios') const dayjs = require('dayjs') const utc = require('dayjs/plugin/utc') @@ -27,12 +27,13 @@ it('can parse response', done => { axios.get.mockImplementation(() => Promise.resolve({ data: JSON.parse( - `{"ID":"P~945cb98e-3d19-11ec-8456-953363d7a344","seriesID":"S~d37c4626-b691-11ea-ba69-255835135f02","channelID":"1","start":1636674960,"end":1636676520,"catchupAvailableUntil":1637279760,"title":"Eigen Huis & Tuin: Lekker Leven","description":"Nederlands lifestyleprogramma uit 2022 (ook in HD) met dagelijkse inspiratie voor een lekker leven in en om het huis.\\nPresentatrice Froukje de Both, kok Hugo Kennis en een team van experts, onder wie tuinman Tom Groot, geven praktische tips op het gebied van wonen, lifestyle, tuinieren en koken. Daarmee kun je zelf direct aan de slag om je leven leuker én gezonder te maken. Afl. 15 van seizoen 4.","images":{"thumbnail":{"url":"https://cdn.gvidi.tv/img/booxmedia/b291/561946.jpg"}},"additionalInformation":{"metadataID":"M~c512c206-95e5-11ec-87d8-494f70130311","externalMetadataID":"E~RTL4-89d99356_6599_4b65_a7a0_a93f39019645"},"parentalGuidance":{"kijkwijzer":["AL"]},"restrictions":{"startoverDisabled":false,"catchupDisabled":false,"recordingDisabled":false},"isFiller":false}` + '{"ID":"P~945cb98e-3d19-11ec-8456-953363d7a344","seriesID":"S~d37c4626-b691-11ea-ba69-255835135f02","channelID":"1","start":1636674960,"end":1636676520,"catchupAvailableUntil":1637279760,"title":"Eigen Huis & Tuin: Lekker Leven","description":"Nederlands lifestyleprogramma uit 2022 (ook in HD) met dagelijkse inspiratie voor een lekker leven in en om het huis.\\nPresentatrice Froukje de Both, kok Hugo Kennis en een team van experts, onder wie tuinman Tom Groot, geven praktische tips op het gebied van wonen, lifestyle, tuinieren en koken. Daarmee kun je zelf direct aan de slag om je leven leuker én gezonder te maken. Afl. 15 van seizoen 4.","images":{"thumbnail":{"url":"https://cdn.gvidi.tv/img/booxmedia/b291/561946.jpg"}},"additionalInformation":{"metadataID":"M~c512c206-95e5-11ec-87d8-494f70130311","externalMetadataID":"E~RTL4-89d99356_6599_4b65_a7a0_a93f39019645"},"parentalGuidance":{"kijkwijzer":["AL"]},"restrictions":{"startoverDisabled":false,"catchupDisabled":false,"recordingDisabled":false},"isFiller":false}' ) }) ) - const content = `{"1":[{"ID":"P~945cb98e-3d19-11ec-8456-953363d7a344","seriesID":"S~d37c4626-b691-11ea-ba69-255835135f02","channelID":"1","start":1636674960,"end":1636676520,"catchupAvailableUntil":1637279760,"title":"NOS Journaal","images":{"thumbnail":{"url":"https://cdn.gvidi.tv/img/booxmedia/e19c/static/NOS%20Journaal5.jpg"}},"additionalInformation":{"metadataID":"M~944f3c6e-3d19-11ec-9faf-2735f2e98d2a","externalMetadataID":"E~TV01-2026117420668"},"parentalGuidance":{"kijkwijzer":["AL"]},"restrictions":{"startoverDisabled":false,"catchupDisabled":false,"recordingDisabled":false},"isFiller":false}]}` + const content = + '{"1":[{"ID":"P~945cb98e-3d19-11ec-8456-953363d7a344","seriesID":"S~d37c4626-b691-11ea-ba69-255835135f02","channelID":"1","start":1636674960,"end":1636676520,"catchupAvailableUntil":1637279760,"title":"NOS Journaal","images":{"thumbnail":{"url":"https://cdn.gvidi.tv/img/booxmedia/e19c/static/NOS%20Journaal5.jpg"}},"additionalInformation":{"metadataID":"M~944f3c6e-3d19-11ec-9faf-2735f2e98d2a","externalMetadataID":"E~TV01-2026117420668"},"parentalGuidance":{"kijkwijzer":["AL"]},"restrictions":{"startoverDisabled":false,"catchupDisabled":false,"recordingDisabled":false},"isFiller":false}]}' parser({ date, channel, content }) .then(result => { @@ -57,7 +58,7 @@ it('can handle empty guide', done => { parser({ date, channel, - content: `{"code":500,"message":"Error retrieving guide"}` + content: '{"code":500,"message":"Error retrieving guide"}' }) .then(result => { expect(result).toMatchObject([]) diff --git a/sites/digiturk.com.tr/digiturk.com.tr.channels.xml b/sites/digiturk.com.tr/digiturk.com.tr.channels.xml index 568a9799..0954f4a5 100644 --- a/sites/digiturk.com.tr/digiturk.com.tr.channels.xml +++ b/sites/digiturk.com.tr/digiturk.com.tr.channels.xml @@ -1,135 +1,133 @@ - - - 360 HD - - A Haber HD - A News HD - A Para HD - A Spor HD - A2 HD - AL JAZEERA ENGLISH HD - Al Quran Al Kareem TV HD - Al Sunnah Al Nabawiyah TV HD - - ATV - - Baby TV - BBC EARTH HD - BBC Entertainment - BBC First - BBC World News HD - - beIN BOX OFFICE 1 - beIN GURME - beIN HOME & ENTERTAINMENT - beIN İZ HD - beIN MOVIES ACTION - beIN MOVIES ACTION 2 - beIN MOVIES FAMILY - beIN MOVIES PREMIERE - beIN MOVIES PREMIERE 2 - beIN MOVIES STARS - beIN MOVIES TURK - beIN SERIES COMEDY - beIN SERIES DRAMA - beIN SERIES SCI-FI - beIN SERIES VICE - beIN SPORTS 1 - beIN SPORTS 2 - beIN SPORTS 3 - beIN SPORTS 4 - beIN SPORTS 5 - beIN SPORTS HABER - beIN SPORTS MAX HD 1 - beIN SPORTS MAX HD 2 - BEYAZ TV HD - BLOOMBERG HD - Bloomberg HT HD - BOOMERANG HD - Cartoon Network - CBEEBIES HD - CGTN DOCUMENTARY HD - CGTN HD - CNN INTERNATIONAL - CNN TÜRK HD - Da Vinci - Digiturk 4K - Discovery Channel HD - Discovery Science HD - Disney Junior - Diyanet TV HD - DMAX HD - EKOTÜRK TV HD - EURONEWS - Eurosport 1 HD - Eurosport 2 HD - Fashion TV HD - FB TV HD - Flash Haber TV - FOX HD - France 24 HD - GS TV HD - HABER GLOBAL HD - HABERTURK HD - Halk TV - - - - KANAL 7 HD - Kanal D HD - - - KRT TV HD - - MCM Top HD - Mezzo HD - MinikaGO - MTV 00s - MTV Hits - MTV Live HD - Nat Geo Wild HD - National Geographic HD - Nick Jr. - Nickelodeon HD - NTV HD - - RAI UNO - - Show TV HD - - Star TV HD - - - TELE 1 HD - Teve2 HD - TGRT Haber HD - TJK TV - TLC HD - TRT 1 HD - TRT 2 HD - TRT 3 - TRT Spor - TRT Arabi - TRT AVAZ - TRT Belgesel HD - TRT Çocuk - TRT EBATV İLKOKUL HD - TRT EBATV LİSE HD - TRT EBATV ORTAOKUL HD - TRT Haber HD - TRT Kurdi - TRT Müzik - TRT SPOR HD - TRT SPOR YILDIZ - TRT TURK - TRT World HD - TV 100 HD - TV5 Monde Europe - TV8 HD - TVNET HD - Ülke TV HD - ULUSAL TV - VAV TV - Yaban TV - - \ No newline at end of file + + + + + + + + + + + + + + + + + AL JAZEERA ENGLISH HD + Baby TV + BBC Entertainment + BBC World News HD + BLOOMBERG HD + CGTN HD + CGTN DOCUMENTARY HD + CNN INTERNATIONAL + EURONEWS + Fashion TV HD + France 24 HD + TV5 Monde Europe + 360 HD + A2 HD + A Haber HD + Al Quran Al Kareem TV HD + Al Sunnah Al Nabawiyah TV HD + A News HD + A Para HD + A Spor HD + ATV + BBC EARTH HD + BBC First + beIN BOX OFFICE 1 + beIN GURME + beIN HOME & ENTERTAINMENT + beIN İZ HD + beIN MOVIES PREMIERE + beIN MOVIES ACTION + beIN MOVIES FAMILY + beIN MOVIES ACTION 2 + beIN MOVIES PREMIERE 2 + beIN MOVIES STARS + beIN MOVIES TURK + beIN SERIES COMEDY + beIN SERIES DRAMA + beIN SERIES SCI-FI + beIN SERIES VICE + beIN SPORTS 1 + beIN SPORTS 2 + beIN SPORTS 3 + beIN SPORTS 4 + beIN SPORTS 5 + beIN SPORTS HABER + beIN SPORTS MAX HD 1 + beIN SPORTS MAX HD 2 + BEYAZ TV HD + Bloomberg HT HD + BOOMERANG HD + Cartoon Network + CBEEBIES HD + CNN TÜRK HD + Da Vinci + Digiturk 4K + Discovery Channel HD + Discovery Science HD + Disney Junior + Diyanet TV HD + DMAX HD + EKOTÜRK TV HD + Eurosport 1 HD + Eurosport 2 HD + FB TV HD + Flash Haber TV + FOX HD + GS TV HD + HABER GLOBAL HD + HABERTURK HD + Halk TV + KANAL 7 HD + Kanal D HD + KRT TV HD + MCM Top HD + Mezzo HD + MinikaGO + MTV 00s + MTV Hits + MTV Live HD + Nat Geo Wild HD + National Geographic HD + Nickelodeon HD + Nick Jr. + NTV HD + RAI UNO + Show TV HD + Star TV HD + TELE 1 HD + Teve2 HD + TGRT Haber HD + TJK TV + TLC HD + TRT 1 HD + TRT 2 HD + TRT 3 - TRT Spor + TRT Arabi + TRT AVAZ + TRT Belgesel HD + TRT Çocuk + TRT EBATV İLKOKUL HD + TRT EBATV LİSE HD + TRT EBATV ORTAOKUL HD + TRT Haber HD + TRT Kurdi + TRT Müzik + TRT SPOR HD + TRT SPOR YILDIZ + TRT TURK + TRT World HD + TV 100 HD + TV8 HD + TVNET HD + Ülke TV HD + ULUSAL TV + VAV TV + Yaban TV + \ No newline at end of file diff --git a/sites/digiturk.com.tr/digiturk.com.tr.config.js b/sites/digiturk.com.tr/digiturk.com.tr.config.js index 253ad5dc..670fb569 100644 --- a/sites/digiturk.com.tr/digiturk.com.tr.config.js +++ b/sites/digiturk.com.tr/digiturk.com.tr.config.js @@ -32,7 +32,9 @@ module.exports = { site: 'digiturk.com.tr', days: 2, url: function ({ date, channel }) { - return `https://www.digiturk.com.tr/_Ajax/getBroadcast.aspx?channelNo=${channel.site_id}&date=${date.format('DD.MM.YYYY')}&tomorrow=false&primetime=false` + return `https://www.digiturk.com.tr/_Ajax/getBroadcast.aspx?channelNo=${ + channel.site_id + }&date=${date.format('DD.MM.YYYY')}&tomorrow=false&primetime=false` }, request: { method: 'GET', @@ -48,7 +50,7 @@ module.exports = { title: item.PName, // description: item.LongDescription, // category: parseCategory(item), - start :parseTime(item.PStartTime), + start: parseTime(item.PStartTime), stop: parseTime(item.PEndTime) }) }) @@ -59,8 +61,7 @@ module.exports = { } } - -function parseTime(time){ +function parseTime(time) { let timestamp = parseInt(time.replace('/Date(', '').replace('+0300)/', '')) return dayjs(timestamp) } @@ -72,5 +73,5 @@ function parseTime(time){ function parseItems(content) { if (!content) return [] const data = JSON.parse(content) - return (data && data.BChannels && data.BChannels[0].CPrograms) ? data.BChannels[0].CPrograms : [] + return data && data.BChannels && data.BChannels[0].CPrograms ? data.BChannels[0].CPrograms : [] } diff --git a/sites/digiturk.com.tr/digiturk.com.tr.test.js b/sites/digiturk.com.tr/digiturk.com.tr.test.js index 70329ac6..61f6c06f 100644 --- a/sites/digiturk.com.tr/digiturk.com.tr.test.js +++ b/sites/digiturk.com.tr/digiturk.com.tr.test.js @@ -1,4 +1,4 @@ -// npx epg-grabber --config=sites/digiturk.com.tr/digiturk.com.tr.config.js --channels=sites/digiturk.com.tr/digiturk.com.tr.channels.xml --output=guide.xml --days=2 +// npm run grab -- --site=digiturk.com.tr const { parser, url } = require('./digiturk.com.tr.config.js') const fs = require('fs') @@ -17,7 +17,9 @@ const channel = { it('can generate valid url', () => { const result = url({ date, channel }) - expect(result).toBe('https://www.digiturk.com.tr/_Ajax/getBroadcast.aspx?channelNo=14&date=19.01.2023&tomorrow=false&primetime=false') + expect(result).toBe( + 'https://www.digiturk.com.tr/_Ajax/getBroadcast.aspx?channelNo=14&date=19.01.2023&tomorrow=false&primetime=false' + ) }) it('can parse response', () => { @@ -42,6 +44,6 @@ it('can parse response', () => { }) it('can handle empty guide', () => { - const result = parser({ content: `` }) + const result = parser({ content: '' }) expect(result).toMatchObject([]) }) diff --git a/sites/directv.com.ar/directv.com.ar.channels.xml b/sites/directv.com.ar/directv.com.ar.channels.xml index 57b3a5da..20366efc 100644 --- a/sites/directv.com.ar/directv.com.ar.channels.xml +++ b/sites/directv.com.ar/directv.com.ar.channels.xml @@ -1,418 +1,416 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 24 Horas - A24 - A&E - AMC - América TV (ARG) - Animal Planet - Antena 3 Internacional - A3Cine HD - Atres Series - AXN - Baby TV HD - BBC World News - Bloomberg Television - Bravo TV - C5N Canal 5 Noticias (ARG) - Cable Noticias de Colombia - Canal 26 (ARG). - Televisión Pública Pampeana - EL TRES Rosario - Canal 7 de Jujuy - CANAL 9 - Canal A HD - Canal de la ciudad - Canal LUZ (ARG) - Canal 21 (ARG) - Canal Rural - Caracol Internacional - Cartoonito - Cartoon Network (Sur) - CGTN-Español - CINE.AR (ARG) - Cinecanal (ARG) - Cinelatino - Cinemax Sur - Magazine - CNN Chile - CNN en español - CNN International - Comedy Central - Crónica TV (ARG) - De Película - DeporTV - DHE - DSPORTS 2 - DSPORTS (ARG) - DSPORTS Fight - DSPORTS + - Discovery Channel (Sur) - Discovery Home & Health - Discovery Kids (Sur) - Discovery Theater HD - Discovery Turbo - Discovery World HD - Disney Channel (Sur) - Disney Junior Sur - DNews - Deutsche Welle - El Doce CANAL 12 DE CORDOBA - El Gourmet - Canal 9 (ARG) - EL SIETE - El Tiempo - El Trece (ARG) - Encuentro (ARG) - Encuentro Internacional - Enlace - E! Entertainment - ESPN 2 Latin Sur - ESPN 3 Sur - ESPN Argentina SD - ESPN Extra HD - ESPN Premium (SD) - Europa Europa HD - Eternal Word TV Network - Film & Arts - Food Network - FOX Sports 2 Argentina - FOX Sports 2 - FOX Sports 3 Argentina - FX - Glitz - Golden Edge - Golden TV - Golden HD - Golf Channel - HBO2 - HBO Family (Este) - HBO (Este) - HBO Mundi - HBO Plus (Este) - HBO Pop - HBO Signature - HBO Xtreme - Home & Garden TV HD - History 2 - History (Sur) - Hola TV - HTV - HustlerTV - Investigation Discovery - I-SAT - IVC Internacional - La Nacion + - Canal de las Estrellas - Lifetime - MÁS CHIC - MLB Extra Innings - MLB Extra Innings 2 - MTV Latino - Music Top HD - National Geographic (Sur) - NBA TV HD - NET TV (ARG) - NHK World TV - Nickelodeon - NICK JR - NTN 24 - Nuestra Tele noticias 24HS - OnDIRECTV (Sur) - PAKA PAKA (ARG) - Paramount Network - Pasiones - Playboy TV - PX Sports HD - Quiero Música en mi Idioma - RAI International - RCN Nuestra Tele - RTP Internacional - Sony Movies - Space (Sur) - STAR Channel - Studio Universal - SyFy - TBS Very Funny - Turner Classic Movies - Telediario Television - Telefe (ARG) - Canal 5 de Rosario - Telemax - Telemundo Internacional - Tierra Mia HD - TLC - Travel & Living Channel - TLNovelas - TN Todo Noticias - TNT Series - TNT (SUR) - TNT Sports - TRUTV - TV Chile - Tv Ciudad - TV Cortos HD - Globo Internacional - TV Perú - TV Perú Noticias HD - La TV Pública (ARG) - TyC Sports - Universal Cinema - Universal Comedy - Universal Crime Este - UNIVERSAL Cinema West - Universal Premiere Este - Universal Premiere Oeste - Universal Reality - Universal - Univision - Venus - VePLUS HD - Volver - VTV PLUS - Warner Channel - Warner Channel HD - ZEE TV - ZooMoo - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 24 Horas + A24 + A&E + AMC + América TV (ARG) + Animal Planet + Antena 3 Internacional + A3Cine HD + Atres Series + AXN + Baby TV HD + BBC World News + Bloomberg Television + Bravo TV + C5N Canal 5 Noticias (ARG) + Cable Noticias de Colombia + Canal 26 (ARG). + Televisión Pública Pampeana + EL TRES Rosario + Canal 7 de Jujuy + CANAL 9 + Canal A HD + Canal de la ciudad + Canal LUZ (ARG) + Canal 21 (ARG) + Canal Rural + Caracol Internacional + Cartoonito + Cartoon Network (Sur) + CGTN-Español + CINE.AR (ARG) + Cinecanal (ARG) + Cinelatino + Cinemax Sur + Magazine + CNN Chile + CNN en español + CNN International + Comedy Central + Crónica TV (ARG) + De Película + DeporTV + DHE + DSPORTS 2 + DSPORTS (ARG) + DSPORTS Fight + DSPORTS + + Discovery Channel (Sur) + Discovery Home & Health + Discovery Kids (Sur) + Discovery Theater HD + Discovery Turbo + Discovery World HD + Disney Channel (Sur) + Disney Junior Sur + DNews + Deutsche Welle + El Doce CANAL 12 DE CORDOBA + El Gourmet + Canal 9 (ARG) + EL SIETE + El Tiempo + El Trece (ARG) + Encuentro (ARG) + Encuentro Internacional + Enlace + E! Entertainment + ESPN 2 Latin Sur + ESPN 3 Sur + ESPN Argentina SD + ESPN Extra HD + ESPN Premium (SD) + Europa Europa HD + Eternal Word TV Network + Film & Arts + Food Network + FOX Sports 2 Argentina + FOX Sports 2 + FOX Sports 3 Argentina + FX + Glitz + Golden Edge + Golden TV + Golden HD + Golf Channel + HBO2 + HBO Family (Este) + HBO (Este) + HBO Mundi + HBO Plus (Este) + HBO Pop + HBO Signature + HBO Xtreme + Home & Garden TV HD + History 2 + History (Sur) + Hola TV + HTV + HustlerTV + Investigation Discovery + I-SAT + IVC Internacional + La Nacion + + Canal de las Estrellas + Lifetime + MÁS CHIC + MLB Extra Innings + MLB Extra Innings 2 + MTV Latino + Music Top HD + National Geographic (Sur) + NBA TV HD + NET TV (ARG) + NHK World TV + Nickelodeon + NICK JR + NTN 24 - Nuestra Tele noticias 24HS + OnDIRECTV (Sur) + PAKA PAKA (ARG) + Paramount Network + Pasiones + Playboy TV + PX Sports HD + Quiero Música en mi Idioma + RAI International + RCN Nuestra Tele + RTP Internacional + Sony Movies + Space (Sur) + STAR Channel + Studio Universal + SyFy + TBS Very Funny + Turner Classic Movies + Telediario Television + Telefe (ARG) + Canal 5 de Rosario + Telemax + Telemundo Internacional + Tierra Mia HD + TLC - Travel & Living Channel + TLNovelas + TN Todo Noticias + TNT Series + TNT (SUR) + TNT Sports + TRUTV + TV Chile + Tv Ciudad + TV Cortos HD + Globo Internacional + TV Perú + TV Perú Noticias HD + La TV Pública (ARG) + TyC Sports + Universal Cinema + Universal Comedy + Universal Crime Este + UNIVERSAL Cinema West + Universal Premiere Este + Universal Premiere Oeste + Universal Reality + Universal + Univision + Venus + VePLUS HD + Volver + VTV PLUS + Warner Channel + Warner Channel HD + ZEE TV + ZooMoo + diff --git a/sites/directv.com.ar/directv.com.ar.config.js b/sites/directv.com.ar/directv.com.ar.config.js index 380d4f60..9918e291 100644 --- a/sites/directv.com.ar/directv.com.ar.config.js +++ b/sites/directv.com.ar/directv.com.ar.config.js @@ -1,5 +1,4 @@ process.env['NODE_TLS_REJECT_UNAUTHORIZED'] = 0 -const axios = require('axios') const dayjs = require('dayjs') const utc = require('dayjs/plugin/utc') const timezone = require('dayjs/plugin/timezone') @@ -12,21 +11,22 @@ dayjs.extend(customParseFormat) module.exports = { site: 'directv.com.ar', days: 2, - url: `https://www.directv.com.ar/guia/ChannelDetail.aspx/GetProgramming`, + url: 'https://www.directv.com.ar/guia/ChannelDetail.aspx/GetProgramming', request: { method: 'POST', headers: { - 'Cookie': 'PGCSS=16; PGLang=S; PGCulture=es-AR;', - 'Accept': '*/*', + Cookie: 'PGCSS=16; PGLang=S; PGCulture=es-AR;', + Accept: '*/*', 'Accept-Language': 'es-419,es;q=0.9', - 'Connection': 'keep-alive', + Connection: 'keep-alive', 'Content-Type': 'application/json; charset=UTF-8', - 'Origin': 'https://www.directv.com.ar', - 'Referer': 'https://www.directv.com.ar/guia/ChannelDetail.aspx?id=1740&name=TLCHD', + Origin: 'https://www.directv.com.ar', + Referer: 'https://www.directv.com.ar/guia/ChannelDetail.aspx?id=1740&name=TLCHD', 'Sec-Fetch-Dest': 'empty', 'Sec-Fetch-Mode': 'cors', 'Sec-Fetch-Site': 'same-origin', - 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36', + 'User-Agent': + 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36', 'sec-ch-ua': '"Not.A/Brand";v="8", "Chromium";v="114", "Google Chrome";v="114"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"Windows"' diff --git a/sites/directv.com.ar/directv.com.ar.test.js b/sites/directv.com.ar/directv.com.ar.test.js index aea46225..95aa923b 100644 --- a/sites/directv.com.ar/directv.com.ar.test.js +++ b/sites/directv.com.ar/directv.com.ar.test.js @@ -1,4 +1,4 @@ -// npx epg-grabber --config=sites/directv.com.ar/directv.com.ar.config.js --channels=sites/directv.com.ar/directv.com.ar.channels.xml --output=guide.xml --days=2 +// npm run grab -- --site=directv.com.ar const { parser, url, request } = require('./directv.com.ar.config.js') const dayjs = require('dayjs') @@ -47,7 +47,8 @@ it('can generate valid request data', () => { }) it('can parse response', () => { - const content = `{"d":[{"ChannelSection":"","ChannelFullName":"A&E HD","IsFavorite":false,"ChannelName":"A&EHD","ChannelNumber":207,"ProgramList":[{"_channelSection":"","eventId":"120289890767","titleId":"SH0110397700000001","title":"Chicas guapas","programId":null,"description":"Un espacio destinado a la belleza y los distintos estilos de vida, que muestra el trabajo inspiracional de la moda latinoamericana.","episodeTitle":null,"channelNumber":120,"channelName":"AME2","channelFullName":"América TV (ARG)","channelSection":"","contentChannelID":120,"startTime":"/Date(-62135578800000)/","endTime":"/Date(-62135578800000)/","GMTstartTime":"/Date(-62135578800000)/","GMTendTime":"/Date(-62135578800000)/","css":16,"language":null,"tmsId":"SH0110397700000001","rating":"NR","categoryId":"Tipos de Programas","categoryName":0,"subCategoryId":0,"subCategoryName":"Series","serviceExpiration":"/Date(-62135578800000)/","crId":null,"promoUrl1":null,"promoUrl2":null,"price":0,"isPurchasable":"N","videoUrl":"","imageUrl":"https://dnqt2wx2urq99.cloudfront.net/ondirectv/LOGOS/Canales/AR/120.png","titleSecond":"Chicas guapas","isHD":"N","DetailsURL":null,"BuyURL":null,"ProgramServiceId":null,"SearchDateTime":null,"startTimeString":"6/19/2022 12:00:00 AM","endTimeString":"6/19/2022 12:15:00 AM","DurationInMinutes":null,"castDetails":null,"scheduleDetails":null,"seriesDetails":null,"processedSeasonDetails":null}]}]}` + const content = + '{"d":[{"ChannelSection":"","ChannelFullName":"A&E HD","IsFavorite":false,"ChannelName":"A&EHD","ChannelNumber":207,"ProgramList":[{"_channelSection":"","eventId":"120289890767","titleId":"SH0110397700000001","title":"Chicas guapas","programId":null,"description":"Un espacio destinado a la belleza y los distintos estilos de vida, que muestra el trabajo inspiracional de la moda latinoamericana.","episodeTitle":null,"channelNumber":120,"channelName":"AME2","channelFullName":"América TV (ARG)","channelSection":"","contentChannelID":120,"startTime":"/Date(-62135578800000)/","endTime":"/Date(-62135578800000)/","GMTstartTime":"/Date(-62135578800000)/","GMTendTime":"/Date(-62135578800000)/","css":16,"language":null,"tmsId":"SH0110397700000001","rating":"NR","categoryId":"Tipos de Programas","categoryName":0,"subCategoryId":0,"subCategoryName":"Series","serviceExpiration":"/Date(-62135578800000)/","crId":null,"promoUrl1":null,"promoUrl2":null,"price":0,"isPurchasable":"N","videoUrl":"","imageUrl":"https://dnqt2wx2urq99.cloudfront.net/ondirectv/LOGOS/Canales/AR/120.png","titleSecond":"Chicas guapas","isHD":"N","DetailsURL":null,"BuyURL":null,"ProgramServiceId":null,"SearchDateTime":null,"startTimeString":"6/19/2022 12:00:00 AM","endTimeString":"6/19/2022 12:15:00 AM","DurationInMinutes":null,"castDetails":null,"scheduleDetails":null,"seriesDetails":null,"processedSeasonDetails":null}]}]}' const result = parser({ content, channel }).map(p => { p.start = p.start.toJSON() p.stop = p.stop.toJSON() @@ -71,7 +72,7 @@ it('can parse response', () => { it('can handle empty guide', () => { const result = parser({ - content: ``, + content: '', channel }) expect(result).toMatchObject([]) diff --git a/sites/directv.com.uy/directv.com.uy.channels.xml b/sites/directv.com.uy/directv.com.uy.channels.xml index 01869235..94169e9e 100644 --- a/sites/directv.com.uy/directv.com.uy.channels.xml +++ b/sites/directv.com.uy/directv.com.uy.channels.xml @@ -1,148 +1,146 @@ - - - 24 Horas - AMC - Animal Planet - Antena 3 Internacional - A3Cine HD - Atres Series - AXN - Baby TV HD - BBC World News - Bloomberg Television - Canal 4 (URU) - Canal 5 (URU) - Canal 12 (URU) - Canal 10 (URU) - Cable Noticias de Colombia - Canal 26 (ARG). - Canal LUZ (ARG) - Canal 21 (ARG) - Caracol Internacional - Cartoonito - Cartoon Network (Sur) - CGTN-Español - Cinecanal (COL) - Cinelatino - Cinemax Sur - Magazine - CNN Chile - CNN en español - CNN International - Comedy Central - Crónica TV (ARG) - De Película - DHE - DIRECTV Sports 2 - DIRECTV Sports (URU) - DIRECTV Sports Fight - DIRECTV Sports + - Discovery Channel (Sur) - Discovery Kids (Sur) - Discovery Theater HD - Discovery Turbo - Discovery World HD - Disney Channel (Sur) - Disney Junior Sur - Deutsche Welle - El Gourmet - El Tiempo - Encuentro Internacional - Enlace - E! Entertainment - ESPN 2 Sur - ESPN - ESPN Extra HD - Europa Europa HD - Eternal Word TV Network - Food Network - FOX Sports 2 - FOX Sports 3 - FX - Glitz - Golden Edge - Golden TV - Golden HD - Golf Channel - HBO2 - HBO Family (Este) - HBO (Este) - HBO Mundi - HBO Plus (Este) - HBO Pop - HBO Signature - HBO Xtreme - Home & Garden TV HD - History 2 - History (Sur) - Hola TV - HTV - HustlerTV - Investigation Discovery - I-SAT - IVC Internacional - La Nacion + - Canal de las Estrellas - Lifetime - MÁS CHIC - MLB Extra Innings - MLB Extra Innings - MTV Latino - Music Top HD - National Geographic (Sur) - NBA TV HD - NHK World TV - Nickelodeon - NICK JR - NTN 24 - Nuestra Tele noticias 24HS - OnDIRECTV (Sur) - Paramount Network - Pasiones - Playboy TV - PX Sports HD - Quiero Música en mi Idioma - RAI International - RCN Nuestra Tele - RTP Internacional - Smithsonian Channel HD - - Space (Sur) - STAR Channel - Studio Universal - Sun Channel - SyFy - TBS Very Funny - Turner Classic Movies - Telemundo Internacional - Tierra Mia HD - TLC - Travel & Living Channel - TLNovelas - TN Todo Noticias - TNT Series - TNT Latin America - TRUTV - Tv Ciudad (URU) - TV Chile - TV Cortos HD - Globo Internacional - TV Perú - TV Perú Noticias HD - TYC International - Universal Cinema - Universal Comedy - Universal Crime Este - UNIVERSAL Cinema West - Universal Premiere Este - Universal Premiere Oeste - Universal Reality - Universal - Univision - Venus - VTV (URU) - VTV Plus (URU) - Warner Channel - ZEE TV - ZooMoo - - + + + 24 Horas + AMC + Animal Planet + Antena 3 Internacional + A3Cine HD + Atres Series + AXN + Baby TV HD + BBC World News + Bloomberg Television + Cable Noticias de Colombia + Canal 10 (URU) + Canal 26 (ARG). + Canal 4 (URU) + Canal 5 (URU) + Canal LUZ (ARG) + Canal 21 (ARG) + Caracol Internacional + Cartoonito + Cartoon Network (Sur) + CGTN-Español + Cinecanal (COL) + Cinelatino + Cinemax Sur + Magazine + CNN Chile + CNN en español + CNN International + Comedy Central + Crónica TV (ARG) + De Película + DHE + DIRECTV Sports 2 + DIRECTV Sports Fight + DIRECTV Sports + + DIRECTV Sports (URU) + Discovery Channel (Sur) + Discovery Kids (Sur) + Discovery Theater HD + Discovery Turbo + Discovery World HD + Disney Channel (Sur) + Disney Junior Sur + Deutsche Welle + El Gourmet + El Tiempo + Encuentro Internacional + Enlace + E! Entertainment + ESPN 2 Sur + ESPN + ESPN Extra HD + Europa Europa HD + Eternal Word TV Network + Food Network + FOX Sports 2 + FOX Sports 3 + FX + Glitz + Golden Edge + Golden TV + Golden HD + Golf Channel + HBO2 + HBO Family (Este) + HBO (Este) + HBO Mundi + HBO Plus (Este) + HBO Pop + HBO Signature + HBO Xtreme + Home & Garden TV HD + History 2 + History (Sur) + Hola TV + HTV + HustlerTV + Investigation Discovery + I-SAT + IVC Internacional + La Nacion + + Canal de las Estrellas + Lifetime + MÁS CHIC + MLB Extra Innings + MLB Extra Innings + MTV Latino + Music Top HD + National Geographic (Sur) + NBA TV HD + NHK World TV + Nickelodeon + NICK JR + NTN 24 - Nuestra Tele noticias 24HS + OnDIRECTV (Sur) + Paramount Network + Pasiones + Playboy TV + PX Sports HD + Quiero Música en mi Idioma + RAI International + RCN Nuestra Tele + RTP Internacional + Smithsonian Channel HD + Space (Sur) + STAR Channel + Studio Universal + Sun Channel + SyFy + TBS Very Funny + Turner Classic Movies + Canal 12 (URU) + Telemundo Internacional + Tierra Mia HD + TLC - Travel & Living Channel + TLNovelas + TN Todo Noticias + TNT Series + TNT Latin America + TRUTV + TV Chile + Tv Ciudad (URU) + TV Cortos HD + Globo Internacional + TV Perú + TV Perú Noticias HD + TYC International + Universal Cinema + Universal Comedy + Universal Crime Este + UNIVERSAL Cinema West + Universal Premiere Este + Universal Premiere Oeste + Universal Reality + Universal + Univision + Venus + VTV (URU) + VTV Plus (URU) + Warner Channel + ZEE TV + ZooMoo + diff --git a/sites/directv.com.uy/directv.com.uy.config.js b/sites/directv.com.uy/directv.com.uy.config.js index c03263a3..f1a828ac 100644 --- a/sites/directv.com.uy/directv.com.uy.config.js +++ b/sites/directv.com.uy/directv.com.uy.config.js @@ -1,4 +1,3 @@ -const axios = require('axios') const dayjs = require('dayjs') const utc = require('dayjs/plugin/utc') const timezone = require('dayjs/plugin/timezone') @@ -11,7 +10,7 @@ dayjs.extend(customParseFormat) module.exports = { site: 'directv.com.uy', days: 2, - url: `https://www.directv.com.uy/guia/ChannelDetail.aspx/GetProgramming`, + url: 'https://www.directv.com.uy/guia/ChannelDetail.aspx/GetProgramming', request: { method: 'POST', headers: { diff --git a/sites/directv.com.uy/directv.com.uy.test.js b/sites/directv.com.uy/directv.com.uy.test.js index f1a88ea7..146748e2 100644 --- a/sites/directv.com.uy/directv.com.uy.test.js +++ b/sites/directv.com.uy/directv.com.uy.test.js @@ -1,4 +1,4 @@ -// npx epg-grabber --config=sites/directv.com.uy/directv.com.uy.config.js --channels=sites/directv.com.uy/directv.com.uy.channels.xml --output=guide.xml --days=2 +// npm run grab -- --site=directv.com.uy const { parser, url, request } = require('./directv.com.uy.config.js') const fs = require('fs') @@ -71,7 +71,7 @@ it('can parse response', () => { it('can handle empty guide', () => { const result = parser({ - content: ``, + content: '', channel }) expect(result).toMatchObject([]) diff --git a/sites/directv.com/directv.com.channels.xml b/sites/directv.com/directv.com.channels.xml index bf11dbc3..a5b4d974 100644 --- a/sites/directv.com/directv.com.channels.xml +++ b/sites/directv.com/directv.com.channels.xml @@ -1,1048 +1,1046 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 5StarMAX HD - 88 Films - 88 TV - ACC Network - AccuWeather HD - ActionMax HD - A&E - Altitude Sports - AMC - AMC+ HD - American Heroes Channel - AVC (Infomercial) - Animal Planet - Antena 3 - Arirang TV - ASPIRE (HD) - Atreseries - AT&T SportsNet Pittsburgh - AT&T SportsNet Pittsburgh (Alternate) - AT&T SportsNet Rocky Mountain - AT&T SportsNet Rocky Mountain West - AT&T SportsNet Southwest - AT&T SportsNet Southwest (Alternate) - AXS TV HD - BabyFirst - BabyTV - Bally Sports Arizona - Bally Sports Arizona Extra - Bally Sports Arizona Extra 2 - Bally Sports Detroit - Bally Sports Florida - Bally Sports Great Lakes - Bally Sports Kansas City - Bally Sports Midwest - Bally Sports Midwest Extra - Bally Sports North - Bally Sports Ohio - Bally Sports Cincinnati - Bally Sports Ohio Extra - Bally Sports Oklahoma HD - Bally Sports San Diego - Bally Sports San Diego Extra - Bally Sports SoCal - Bally Sports SoCal Extra - Bally Sports South - Bally Sports Southeast - Bally Sports Southeast Extra - Bally Sports Southwest - Bally Sports Sun - Bally Sports Sun Extra - Bally Sports West - Bally Sports West Extra - Bally Sports Wisconsin HD - Bally Sports Wisconsin Extra - Bang U - BBC America - BBC World News HD - BET - BET Her - BET West HD - Bloomberg TV - Boomerang - BounceTV - Bravo - BYUtv - Multimedios - Caracol TV - Cartoon Network - Cartoon Network West - CBS Sports Network - CCTV4 - CGTN 2053 (99R) - Channel NECO International - Charming China 2055 - Cheddar News - Cinelatino - Cinemax - Cinemax West - Cleo TV - CMT - CNBC - CNBC World - CNN - Comedy Central - Comedy Central West HD - Comedy TV HD - Cooking Channel - Crime & Investigation HD - CSPAN - CSPAN 2 - Christian Television Net - CW Plus - Daystar - Destination America - Discovery - Discovery Family Channel - Discovery Life - Disney Channel (East) - Disney Channel (West) - Disney Junior - Disney XD - Dog TV - Ecuador TV - Ecuavisa Internacional - E! - Enlace - ESPN - ESPN2 - ESPN College Extra 793 HD - ESPN College Extra 794 HD - ESPN College Extra 795 HD - ESPN College Extra 796 HD - ESPN College Extra 797 HD - ESPN College Extra 798 HD - ESPNews - ESPNU - Estrella News - Estrella TV - EWTN - Family Entertainment Television - Flix - FM HD - Food Network - FOROtv - Fox Business Network - FOX News Channel - FOX Soccer Plus - FOX Sports 1 - FOX Sports 2 - Freeform - Free Speech TV - Fuse HD - FX - FX Movie - FXX - FYI - Game Show Network - GEM Shopping Network - Golf Channel - GolTV - Great American Family - GRIT - Hallmark - Hallmark Drama HD - Hallmark Movies & Mysteries HD - HBO 2 East - HBO 2 West - HBO Comedy HD - HBO East - HBO Family East - HBO Family West - HBO Signature - HBO West - HBO Zone HD - HDNET MOVIES - HGTV - History - History en Espanol - HLN - Hope Channel - Home Shopping Network - Hustler TV - IFC - IMPACT TV - INSP - Investigation Discovery - ION Television East HD - JBS - Jewelry Television (72) - Nippon TV HD - Justice Central HD - KABC (Los Angeles) ABC West - KBS Korea - KCBS (Los Angeles) CBS West - KTLA CW West - KTTV (Los Angeles) FOX West - Lifetime - LMN - LinkTV - Logo - Longhorn Network HD - Magnolia Network - Marquee Sports Network - MASN - MAVTV HD - MGM+ HD - MGM+ Hits East - MGM+ Marquee HD - MLB Network - MLB Network Alt. 213-1 - MoreMAX - MotorTrend HD - MovieMAX - MSNBC - MTV2 - MTV Classic - MTV - MTV Live HD - MTV West HD - Music Choice '70s - Music Choice '80s - Music Choice '90s - Music Choice Adult Alternative - Music Choice Alternative - Music Choice Blues - Music Choice Classic Country - Music Choice Classic Rock - Music Choice Contemporary Christian - Music Choice Country Hits - Music Choice Dance/EDM - Music Choice Easy Listening - Music Choice Gospel - Music Choice Hip-Hop And R&B - Music Choice Hit List - Music Choice Indie - Music Choice Jazz - Music Choice Kids Only! - Music Choice Light Classical - Music Choice Love Songs - Music Choice Max - Music Choice Metal - Music Choice Mexicana - Music Choice Musica Urbana - Music Choice Party Favorites - Music Choice Pop & Country - Music Choice Pop Hits - Music Choice Pop Latino - Music Choice Rap - Music Choice R&B Classics - Music Choice R&B Soul - Music Choice Reggae - Music Choice Rock - Music Choice Rock Hits - Music Choice Romances - Music Choice Singers & Swing - Music Choice Smooth Jazz - Music Choice Soft Rock - Music Choice Soundscapes - Music Choice Sounds of the Seasons - Music Choice Teen Beats - Music Choice Throwback Jamz - Music Choice Today's Country - Music Choice Toddler Tunes - Music Choice Tropicales - Music Choice Y2K - NASA TV - National Geographic - Nat Geo WILD - NBA League Pass 747 - NBA League Pass 748 - NBA League Pass 749 - NBA League Pass 750 - NBA League Pass 765 - NBA League Pass 766 - NBA League Pass 767 - NBA League Pass 768 - NBA TV - NBC Sports Bay Area - NBC Sports Bay Area Plus (Alternate 2) - NBC Sports Boston - NBC Sports California - NBC Sports Chicago - NBC Sports Chicago Plus 2 - NBC Sports Washington - NBC Sports Washington (Alternate) - NESN - Newsmax TV - NewsNation - NFL Network - NFL Red Zone 703 HD - NFL Sunday Ticket 705 - NFL Sunday Ticket 714 - NFL Sunday Ticket 715 - NFL Sunday Ticket 716 - NFL Sunday Ticket 717 - NFL Sunday Ticket 718 - NFL Sunday Ticket 706 - NFL Sunday Ticket 707 - NFL Sunday Ticket 708 - NFL Sunday Ticket 709 - NFL Sunday Ticket 710 - NFL Sunday Ticket 711 - NFL Sunday Ticket 712 - NFL Sunday Ticket 713 - NHL Center Ice 769 - NHL Center Ice 780 - NHL Center Ice 781 - NHL Center Ice 782 - NHL Center Ice 783 - NHL Center Ice 784 - NHL Center Ice 785 - NHL Center Ice 786 - NHL Center Ice 787 - NHL Center Ice 788 - NHL Center Ice 789 - NHL Center Ice 771 - NHL Center Ice 790 - NHL Center Ice 791 - NHL Center Ice 792 - NHL Center Ice 793 - NHL Center Ice 773 - NHL Center Ice 774 - NHL Center Ice 775 - NHL Center Ice 776 - NHL Center Ice 777 - NHL Center Ice 778 - NHL Center Ice 779 - NHL Network - NHL Network Alternate - Nickelodeon East - Nickelodeon West - Nick Jr. - Nicktoons - NRB - OPM TV - Outdoor Channel - Ovation - OWN - OWN West - Oxygen True Crime - Paramount Network - PBSNET - PBS Kids - Penthouse TV - Penthouse TV Monthly Offer - Peru Magico - Playboy TV HD - Playboy TV Monthly Offer - POP - Pursuit Channel - QVC - QVC2 - QVC3 - Reality Kings - ReelzChannel - Revolt HD - ROOT SPORTS Northwest - ROOT Sports Northwest Plus 2 - ROOT SPORTS Northwest Plus - Son Life Broadcasting HD - Science - Scientology Network - SEC Network - SEC Network Alternate - Shop HQ - Shop LC - SHOWTIME 2 - Showtime (E) - Showtime Extreme - Showtime FamilyZone - Showtime Next HD - Showtime Showcase HD - Showtime (W) - SHOxBET - Smithsonian Channel HD - Sony Movies - So Yummy - Spectrum SportsNet - Spectrum SportsNet LA - Sportsman Channel - SportsNet New York - Stadium College Sports Atlantic - Stadium College Sports Central - Stadium College Sports Pacific - STARZ Cinema HD - STARZ Comedy HD - STARZ East - STARZ Edge - STARZ Encore Action - STARZ Encore Black - STARZ Encore Classic - STARZ Encore - STARZ Encore Family - STARZ Encore Suspense - STARZ Encore West - STARZ Encore Westerns - STARZ in Black - STARZ Kids & Family HD - STARZ West - SundanceTV HD - SUR Peru - SYFY - Tastemade - TBS - TBS West HD - TCM - TCT Network - TeenNick - TeleCentro - Telefe - Tennis Channel - Cowboy Channel - TFC - The Filipino Channel (99R) - The Movie Channel East - The Movie Channel West - The Movie Channel Xtra HD - The Weather Channel - The WORD Network - ThrillerMAX HD - TLC - TNT - TNT West HD - Travel Channel - truTV - TV Chile - TVE - TV Land - TV One HD - Universal Kids - Living Faith Network - UPTV - USA Network - VePlus - VH1 - VICE - Videorola - Vivid TV - Vivid TV Monthly Offer - A3 Parkersburg 65 PBS (Virt) - WABC (New York) ABC East - WCBS (New York) CBS East - Parkersburg, WV WCHS ABC 8 SD - WE tv - Parkersburg, WV WIYE CBS 47 A3 HD - WNBC (New York) NBC East - WNYW (New York) FOX East - World Harvest Television - Parkersburg, WV WOVA FOX 22 A3 HD - Parkersburg, WV WTAP NBC 15 A3 HD - Parkersburg, WV WTAPDT2 MNT 17 A3 SD - Once Mexico - Yankee Ent. & Sports (YES) - Azteca America - Bandamax - Canal 22 Internacional - Centroamerica TV - Cine Estelar - Cine Mexicano - Cine Nostalgia - Sony Cine - CNN en Espanol - De Pelicula Clasico - De Pelicula - Discovery en Espanol - Discovery Familia - ESPN Deportes - FOX Deportes - Galavision - God TV - HBO Latino - HITN - Hola TV - Cinemax Latino HD - megaTV - Tr3S - Nat Geo Mundo - Universo - NTN 24 - Pasiones - Nuestra Tele - Starz Encore en Espanol - Telemundo East - Telemundo West - TUDN - TyC Sports - UniMas SD West - Univision East - Univision telenovelas - Univision West - Viendo Movies - WAPA America - ZooMoo - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5StarMAX HD + 88 Films + 88 TV + ACC Network + AccuWeather HD + ActionMax HD + A&E + Altitude Sports + AMC + AMC+ HD + American Heroes Channel + AVC (Infomercial) + Animal Planet + Antena 3 + Arirang TV + ASPIRE (HD) + Atreseries + AT&T SportsNet Pittsburgh + AT&T SportsNet Pittsburgh (Alternate) + AT&T SportsNet Rocky Mountain + AT&T SportsNet Rocky Mountain West + AT&T SportsNet Southwest + AT&T SportsNet Southwest (Alternate) + AXS TV HD + BabyFirst + BabyTV + Bally Sports Arizona + Bally Sports Arizona Extra + Bally Sports Arizona Extra 2 + Bally Sports Detroit + Bally Sports Florida + Bally Sports Great Lakes + Bally Sports Kansas City + Bally Sports Midwest + Bally Sports Midwest Extra + Bally Sports North + Bally Sports Ohio + Bally Sports Cincinnati + Bally Sports Ohio Extra + Bally Sports Oklahoma HD + Bally Sports San Diego + Bally Sports San Diego Extra + Bally Sports SoCal + Bally Sports SoCal Extra + Bally Sports South + Bally Sports Southeast + Bally Sports Southeast Extra + Bally Sports Southwest + Bally Sports Sun + Bally Sports Sun Extra + Bally Sports West + Bally Sports West Extra + Bally Sports Wisconsin HD + Bally Sports Wisconsin Extra + Bang U + BBC America + BBC World News HD + BET + BET Her + BET West HD + Bloomberg TV + Boomerang + BounceTV + Bravo + BYUtv + Multimedios + Caracol TV + Cartoon Network + Cartoon Network West + CBS Sports Network + CCTV4 + CGTN 2053 (99R) + Channel NECO International + Charming China 2055 + Cheddar News + Cinelatino + Cinemax + Cinemax West + Cleo TV + CMT + CNBC + CNBC World + CNN + Comedy Central + Comedy Central West HD + Comedy TV HD + Cooking Channel + Crime & Investigation HD + CSPAN + CSPAN 2 + Christian Television Net + CW Plus + Daystar + Destination America + Discovery + Discovery Family Channel + Discovery Life + Disney Channel (East) + Disney Channel (West) + Disney Junior + Disney XD + Dog TV + Ecuador TV + Ecuavisa Internacional + E! + Enlace + ESPN + ESPN2 + ESPN College Extra 793 HD + ESPN College Extra 794 HD + ESPN College Extra 795 HD + ESPN College Extra 796 HD + ESPN College Extra 797 HD + ESPN College Extra 798 HD + ESPNews + ESPNU + Estrella News + Estrella TV + EWTN + Family Entertainment Television + Flix + FM HD + Food Network + FOROtv + Fox Business Network + FOX News Channel + FOX Soccer Plus + FOX Sports 1 + FOX Sports 2 + Freeform + Free Speech TV + Fuse HD + FX + FX Movie + FXX + FYI + Game Show Network + GEM Shopping Network + Golf Channel + GolTV + Great American Family + GRIT + Hallmark + Hallmark Drama HD + Hallmark Movies & Mysteries HD + HBO 2 East + HBO 2 West + HBO Comedy HD + HBO East + HBO Family East + HBO Family West + HBO Signature + HBO West + HBO Zone HD + HDNET MOVIES + HGTV + History + History en Espanol + HLN + Hope Channel + Home Shopping Network + Hustler TV + IFC + IMPACT TV + INSP + Investigation Discovery + ION Television East HD + JBS + Jewelry Television (72) + Nippon TV HD + Justice Central HD + KABC (Los Angeles) ABC West + KBS Korea + KCBS (Los Angeles) CBS West + KTLA CW West + KTTV (Los Angeles) FOX West + Lifetime + LMN + LinkTV + Logo + Longhorn Network HD + Magnolia Network + Marquee Sports Network + MASN + MAVTV HD + MGM+ HD + MGM+ Hits East + MGM+ Marquee HD + MLB Network + MLB Network Alt. 213-1 + MoreMAX + MotorTrend HD + MovieMAX + MSNBC + MTV2 + MTV Classic + MTV + MTV Live HD + MTV West HD + Music Choice '70s + Music Choice '80s + Music Choice '90s + Music Choice Adult Alternative + Music Choice Alternative + Music Choice Blues + Music Choice Classic Country + Music Choice Classic Rock + Music Choice Contemporary Christian + Music Choice Country Hits + Music Choice Dance/EDM + Music Choice Easy Listening + Music Choice Gospel + Music Choice Hip-Hop And R&B + Music Choice Hit List + Music Choice Indie + Music Choice Jazz + Music Choice Kids Only! + Music Choice Light Classical + Music Choice Love Songs + Music Choice Max + Music Choice Metal + Music Choice Mexicana + Music Choice Musica Urbana + Music Choice Party Favorites + Music Choice Pop & Country + Music Choice Pop Hits + Music Choice Pop Latino + Music Choice Rap + Music Choice R&B Classics + Music Choice R&B Soul + Music Choice Reggae + Music Choice Rock + Music Choice Rock Hits + Music Choice Romances + Music Choice Singers & Swing + Music Choice Smooth Jazz + Music Choice Soft Rock + Music Choice Soundscapes + Music Choice Sounds of the Seasons + Music Choice Teen Beats + Music Choice Throwback Jamz + Music Choice Today's Country + Music Choice Toddler Tunes + Music Choice Tropicales + Music Choice Y2K + NASA TV + National Geographic + Nat Geo WILD + NBA League Pass 747 + NBA League Pass 748 + NBA League Pass 749 + NBA League Pass 750 + NBA League Pass 765 + NBA League Pass 766 + NBA League Pass 767 + NBA League Pass 768 + NBA TV + NBC Sports Bay Area + NBC Sports Bay Area Plus (Alternate 2) + NBC Sports Boston + NBC Sports California + NBC Sports Chicago + NBC Sports Chicago Plus 2 + NBC Sports Washington + NBC Sports Washington (Alternate) + NESN + Newsmax TV + NewsNation + NFL Network + NFL Red Zone 703 HD + NFL Sunday Ticket 705 + NFL Sunday Ticket 714 + NFL Sunday Ticket 715 + NFL Sunday Ticket 716 + NFL Sunday Ticket 717 + NFL Sunday Ticket 718 + NFL Sunday Ticket 706 + NFL Sunday Ticket 707 + NFL Sunday Ticket 708 + NFL Sunday Ticket 709 + NFL Sunday Ticket 710 + NFL Sunday Ticket 711 + NFL Sunday Ticket 712 + NFL Sunday Ticket 713 + NHL Center Ice 769 + NHL Center Ice 780 + NHL Center Ice 781 + NHL Center Ice 782 + NHL Center Ice 783 + NHL Center Ice 784 + NHL Center Ice 785 + NHL Center Ice 786 + NHL Center Ice 787 + NHL Center Ice 788 + NHL Center Ice 789 + NHL Center Ice 771 + NHL Center Ice 790 + NHL Center Ice 791 + NHL Center Ice 792 + NHL Center Ice 793 + NHL Center Ice 773 + NHL Center Ice 774 + NHL Center Ice 775 + NHL Center Ice 776 + NHL Center Ice 777 + NHL Center Ice 778 + NHL Center Ice 779 + NHL Network + NHL Network Alternate + Nickelodeon East + Nickelodeon West + Nick Jr. + Nicktoons + NRB + OPM TV + Outdoor Channel + Ovation + OWN + OWN West + Oxygen True Crime + Paramount Network + PBSNET + PBS Kids + Penthouse TV + Penthouse TV Monthly Offer + Peru Magico + Playboy TV HD + Playboy TV Monthly Offer + POP + Pursuit Channel + QVC + QVC2 + QVC3 + Reality Kings + ReelzChannel + Revolt HD + ROOT SPORTS Northwest + ROOT Sports Northwest Plus 2 + ROOT SPORTS Northwest Plus + Son Life Broadcasting HD + Science + Scientology Network + SEC Network + SEC Network Alternate + Shop HQ + Shop LC + SHOWTIME 2 + Showtime (E) + Showtime Extreme + Showtime FamilyZone + Showtime Next HD + Showtime Showcase HD + Showtime (W) + SHOxBET + Smithsonian Channel HD + Sony Movies + So Yummy + Spectrum SportsNet + Spectrum SportsNet LA + Sportsman Channel + SportsNet New York + Stadium College Sports Atlantic + Stadium College Sports Central + Stadium College Sports Pacific + STARZ Cinema HD + STARZ Comedy HD + STARZ East + STARZ Edge + STARZ Encore Action + STARZ Encore Black + STARZ Encore Classic + STARZ Encore + STARZ Encore Family + STARZ Encore Suspense + STARZ Encore West + STARZ Encore Westerns + STARZ in Black + STARZ Kids & Family HD + STARZ West + SundanceTV HD + SUR Peru + SYFY + Tastemade + TBS + TBS West HD + TCM + TCT Network + TeenNick + TeleCentro + Telefe + Tennis Channel + Cowboy Channel + TFC - The Filipino Channel (99R) + The Movie Channel East + The Movie Channel West + The Movie Channel Xtra HD + The Weather Channel + The WORD Network + ThrillerMAX HD + TLC + TNT + TNT West HD + Travel Channel + truTV + TV Chile + TVE + TV Land + TV One HD + Universal Kids + Living Faith Network + UPTV + USA Network + VePlus + VH1 + VICE + Videorola + Vivid TV + Vivid TV Monthly Offer + A3 Parkersburg 65 PBS (Virt) + WABC (New York) ABC East + WCBS (New York) CBS East + Parkersburg, WV WCHS ABC 8 SD + WE tv + Parkersburg, WV WIYE CBS 47 A3 HD + WNBC (New York) NBC East + WNYW (New York) FOX East + World Harvest Television + Parkersburg, WV WOVA FOX 22 A3 HD + Parkersburg, WV WTAP NBC 15 A3 HD + Parkersburg, WV WTAPDT2 MNT 17 A3 SD + Once Mexico + Yankee Ent. & Sports (YES) + Azteca America + Bandamax + Canal 22 Internacional + Centroamerica TV + Cine Estelar + Cine Mexicano + Cine Nostalgia + Sony Cine + CNN en Espanol + De Pelicula Clasico + De Pelicula + Discovery en Espanol + Discovery Familia + ESPN Deportes + FOX Deportes + Galavision + God TV + HBO Latino + HITN + Hola TV + Cinemax Latino HD + megaTV + Tr3S + Nat Geo Mundo + Universo + NTN 24 + Pasiones + Nuestra Tele + Starz Encore en Espanol + Telemundo East + Telemundo West + TUDN + TyC Sports + UniMas SD West + Univision East + Univision telenovelas + Univision West + Viendo Movies + WAPA America + ZooMoo + diff --git a/sites/directv.com/directv.com.config.js b/sites/directv.com/directv.com.config.js index f8b805db..3346a06c 100644 --- a/sites/directv.com/directv.com.config.js +++ b/sites/directv.com/directv.com.config.js @@ -13,17 +13,13 @@ module.exports = { ttl: 60 * 60 * 1000 // 1 hour }, headers: { - 'Accept-Language':'en-US,en;q=0.5', - 'Connection':'keep-alive', - }, + 'Accept-Language': 'en-US,en;q=0.5', + Connection: 'keep-alive' + } }, url({ date, channel }) { const [channelId, childId] = channel.site_id.split('#') - return `https://www.directv.com/json/channelschedule?channels=${ - channelId - }&startTime=${date.format()}&hours=24&chId=${ - childId - }` + return `https://www.directv.com/json/channelschedule?channels=${channelId}&startTime=${date.format()}&hours=24&chId=${childId}` }, async parser({ content, channel }) { const programs = [] @@ -52,7 +48,7 @@ module.exports = { }, async channels({ zip }) { const html = await axios - .get(`https://www.directv.com/guide`, { + .get('https://www.directv.com/guide', { headers: { cookie: `dtve-prospect-zip=${zip}` } @@ -62,7 +58,7 @@ module.exports = { const $ = cheerio.load(html) const script = $('#dtvClientData').html() - const [_, json] = script.match(/var dtvClientData = (.*);/) || [null, null] + const [, json] = script.match(/var dtvClientData = (.*);/) || [null, null] const data = JSON.parse(json) let items = data.guideData.channels diff --git a/sites/directv.com/directv.com.test.js b/sites/directv.com/directv.com.test.js index 1ea8c375..d84d8029 100644 --- a/sites/directv.com/directv.com.test.js +++ b/sites/directv.com/directv.com.test.js @@ -1,5 +1,5 @@ // node ./scripts/commands/parse-channels.js --config=./sites/directv.com/directv.com.config.js --output=./sites/directv.com/directv.com.channels.xml --set=zip:10001 -// npx epg-grabber --config=sites/directv.com/directv.com.config.js --channels=sites/directv.com/directv.com.channels.xml --output=guide.xml --days=2 +// npm run grab -- --site=directv.com const { parser, url } = require('./directv.com.config.js') const fs = require('fs') diff --git a/sites/dishtv.in/dishtv.in.channels.xml b/sites/dishtv.in/dishtv.in.channels.xml index 92af0391..ccc25b10 100644 --- a/sites/dishtv.in/dishtv.in.channels.xml +++ b/sites/dishtv.in/dishtv.in.channels.xml @@ -1,460 +1,458 @@ - - - 1 Sports - 9X Jhakaas - 9XM - 9X Tashan - Aaj Tak - Aakaash Aath - Aastha India - Aastha Bhajan - ABP Ananda - ABP Asmita - ABP Ganga - ABP Majha - ABP News India - ABZY COOL - Alankar TV - Aljazeera English - &FLIX - &Pictures - & privé HD - &Tv - Animal Planet India - Argus News - Arihant TV - Asianet - Asianet News - Assam Talks - B4U Bhojpuri - B4U Kadak - B4U Movies India - B4U Music India - Baby TV Asia - Balle Balle - BBC World News South Asia - Bflix Movies - Bhojpuri Cinema - Big Ganga - Big Magic - Bindass - Box Cinema - Cartoon Network India - Channel Divya - Channel WIN - Chardikla Time TV - Cinema TV - CNBC Awaaz - CNBC Bajar - CNBC TV18 - CNN International South Asia - CNN News 18 - Colors - Colors Bangla - Colors Bangla Cinema - COLORS CINEPLEX - Colors Cineplex Bollywood - Colors Gujarati - Colors Gujarati Cinema - Colors Infinity - Colors Marathi - Colors Odia - Colors Rishtey Asia - Comedy Central - CTVN AKD Plus - Dangal TV - DD Arun Prabha - DD Assam - DD Bangla - DD Bharati - DD Bihar - DD Chandana - DD Chhattisgarh - DD Girnar - DD Himachal Pradesh - DD Hissar - DD India - DD Jharkhand - DD Kashir - DD Kisan - DD Madhya Pradesh - DD Malayalam - DD Manipur - DD Meghalaya - DD Mizoram - DD Nagaland - DD National - DD News - DD Odia - DD Podhigai - DD Punjabi - DD Rajasthan - DD Retro - DD Sahyadri - DD Saptagiri - DD Sports - DD Tripura - DD Urdu - DD Uttarakhand - DD Uttar Pradesh - DD Yadagiri - Dhinchaak - Dhinchaak 2 - Dhoom Music - Digi Shala - Discovery Channel India - Discovery Kids India - Discovery Science - Discovery Turbo India - Dish Buzz - Dish Buzz 2 - Disney Channel India - Disney International HD - Disney Junior India - Dr Shuddhi - DY 36 - ENTER 10 BANGLA - Enterr10 Movies - Epic TV - ET Now - ET NOW SWADESH - ETV Telugu - Eurosport India - E-Vidya 6 - EZMall - Fakt Marathi - Filamchi - Flowers TV - Fox life - Gemini TV - GOOD NEWS TODAY - Gubbare - GULISTAN NEWS - Gyandarshan - Hare Krsna TV - History tv 18 - Hungama TV - IBC 24 - ILove - India News - India News Haryana - India News Uttar Pradesh - India Today - India TV - Indradhanu - Investigation Discovery India - Ishara TV - ISHWAR BHAKTI' - Jalsha Movies - Jinvani Channel - Jonack - Jyotish Duniya - Kalinga TV - Kanak News - KBS World - Khushboo TV Bangla - Kolkata TV - Lok Sabha TV - Lokshahi News - Maiboli - Manjari TV - Manoranjan Grand - Manoranjan Movies - Manoranjan TV - Marvel HQ - Mastiii - Mazhavil Manorama - MBC TV - Mh 1 Music - Mirror Now - MNX - Movie Plus - Movies Now - Movies Now + - MTV Beats - MTV India - Music India - Naaptol Tamil - Nandighosha TV - National Geographic Channel - National Geographic Wild - Naxatra News - NDTV 24x7 - NDTV India - Nepal 1 - News 18 Assam & North-East - News 18 Bengali - News 18 Bihar & Jharkhand - News 18 Gujarati - News 18 India - News 18 Lokmat - News 18 Madhya Pradesh & Chhattisgarh - News 18 Odia - News 18 Punjab & Haryana & Himachal Pradesh - News 18 Rajasthan - News 18 Urdu - News 18 Uttar Pradesh & Uttarakhand - News 24 - News Daily 24 - News India 24x7 - News Live - News Nation - News State UP & UK - NewsTime Bangla - News X - Nickelodeon India - Sonic Nickelodeon - Nick HD+ - Nick Jr India - NK TV24X7 - NORTH EAST LIVE - Odisha TV - Paras Gold - Peace of Mind TV - Pitaara - Pogo - Prag News - Prameya News 7 - Prarthana TV - Pratidin Time - Ptc Chakde - PTC Music - PTC News - PTC Punjabi - PTC Punjabi Gold - PTC Simran - Punjabi Hits - Rajya Sabha TV - RAMDHENU - Rang - Rengoni - Republic Bangla - Republic Bharat - Republic TV - Rishtey Cineplex - Romedy Now - Rongeen TV - R Plus - RT News - Rupasi Bangla - Saam TV - Sadhna TV - Sandesh News - Sangeet Bangla - Sangeet Bhojpuri - SANSAD TV HD - Sanskar TV - Santvani Channel - Satsang TV - Shemaroo Marathi Bana - Shemaroo TV - SHOWBOX - Shubh TV - SIDHARTH BHAKTI - Songdew TV - Sony Aath - Sony BBC Earth - SET India - Sony Marathi - Sony Max 2 - Sony Pal - SONY PIX - SONY SAB - SONY SPORTS TEN 1 - SONY SPORTS TEN 2 - SONY SPORTS TEN 3 - SONY SPORTS TEN 5 - Sony Wah - Sony Yay! - SPORTS18 1 - STAR BHARAT - Star Gold - Star Gold 2 - STAR GOLD SELECT - Star Jalsha - Star Maa - Star Maa Movies - Star Movies - STAR MOVIES SELECT - Star Plus - Star Pravah - Star Sports 1 - STAR SPORTS 1 HINDI - Star sports 2 - Star Sports 3 - Star Sports First - STAR SPORTS SELECT 1 - STAR SPORTS SELECT 2 - Star Utsav - Star Utsav Movies - Star World HD India - Star World Premiere HD - Sudarshan News - Sun Bangla - SUN MARATHI - Sun TV - Surya TV - SWADESH NEWS - Swayam Prabha 1 - Swayam Prabha 10 - Swayam Prabha 11 - Swayam Prabha 12 - Swayam Prabha 13 - Swayam Prabha 14 - Swayam Prabha 15 - Swayam Prabha 16 - Swayam Prabha 17 - Swayam Prabha 18 - Swayam Prabha 19 - Swayam Prabha 2 - Swayam Prabha 20 - Swayam Prabha 21 - Swayam Prabha 22 - Swayam Prabha 3 - Swayam Prabha 4 - Swayam Prabha 5 - Swayam Prabha 6 - Swayam Prabha 7 - Swayam Prabha 8 - Swayam Prabha 9 - Tarang Music - Tarang TV - The Q India - Times Now - Times Now World - TLC - Topper TV - Travel XP HD - TV 9 Bangla - TV9 Bharatvash - TV 9 Gujarati - TV 9 Kannada - TV 9 Marathi - Udaya TV - VANDE Gujarat 1 - VANDE Gujarat 10 - VANDE Gujarat 11 - VANDE Gujarat 12 - VANDE Gujarat 13 - VANDE Gujarat 14 - VANDE Gujarat 15 - VANDE Gujarat 16 - VANDE Gujarat 2 - VANDE Gujarat 3 - VANDE Gujarat 4 - VANDE Gujarat 5 - VANDE Gujarat 6 - VANDE Gujarat 7 - VANDE Gujarat 8 - VANDE Gujarat 9 - VEDIC - VH1 India - Vijay TV - VIP NEWS - VTV News - WION - Wow Cinema One - Zee 24 Ghanta - Zee 24 Kalak - Zee 24 Taas - Zee Action - Zee Anmol - Zee Anmol Cinema - ZEE Bangla - Zee Bangla Cinema - Zee Bihar Jharkhand - Zee Biskope - Zee Bollywood - Zee Business - Zee Cafe - Zee Chitramandir - Zee Cinema - Zee Cinema Asia - ZEE CINEMALU - Zee Classic - ZEE DELHI NCR HARYANA - Zee Hindustan - Zee Kannada - Zee Keralam - Zee Madhya Pradesh Chhattisgarh - ZEE Marathi - Zee News - Zee Odisha - Zee Punjab Haryana Himachal - Zee Punjabi - Zee Rajasthan - Zee Salaam - Zee Sarthak - ZEE TALKIES - Zee Tamil - Zee Telugu - Zee TV - Zee Uttar Pradesh Uttarakhand - Zee Vajwa - Zee Yuva - Zee Zest - Zing Asia - Zing Home - Zoom - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1 Sports + 9X Jhakaas + 9XM + 9X Tashan + Aaj Tak + Aakaash Aath + Aastha India + Aastha Bhajan + ABP Ananda + ABP Asmita + ABP Ganga + ABP Majha + ABP News India + ABZY COOL + Alankar TV + Aljazeera English + &FLIX + &Pictures + & privé HD + &Tv + Animal Planet India + Argus News + Arihant TV + Asianet + Asianet News + Assam Talks + B4U Bhojpuri + B4U Kadak + B4U Movies India + B4U Music India + Baby TV Asia + Balle Balle + BBC World News South Asia + Bflix Movies + Bhojpuri Cinema + Big Ganga + Big Magic + Bindass + Box Cinema + Cartoon Network India + Channel Divya + Channel WIN + Chardikla Time TV + Cinema TV + CNBC Awaaz + CNBC Bajar + CNBC TV18 + CNN International South Asia + CNN News 18 + Colors + Colors Bangla + Colors Bangla Cinema + COLORS CINEPLEX + Colors Cineplex Bollywood + Colors Gujarati + Colors Gujarati Cinema + Colors Infinity + Colors Marathi + Colors Odia + Colors Rishtey Asia + Comedy Central + CTVN AKD Plus + Dangal TV + DD Arun Prabha + DD Assam + DD Bangla + DD Bharati + DD Bihar + DD Chandana + DD Chhattisgarh + DD Girnar + DD Himachal Pradesh + DD Hissar + DD India + DD Jharkhand + DD Kashir + DD Kisan + DD Madhya Pradesh + DD Malayalam + DD Manipur + DD Meghalaya + DD Mizoram + DD Nagaland + DD National + DD News + DD Odia + DD Podhigai + DD Punjabi + DD Rajasthan + DD Retro + DD Sahyadri + DD Saptagiri + DD Sports + DD Tripura + DD Urdu + DD Uttarakhand + DD Uttar Pradesh + DD Yadagiri + Dhinchaak + Dhinchaak 2 + Dhoom Music + Digi Shala + Discovery Channel India + Discovery Kids India + Discovery Science + Discovery Turbo India + Dish Buzz + Dish Buzz 2 + Disney Channel India + Disney International HD + Disney Junior India + Dr Shuddhi + DY 36 + ENTER 10 BANGLA + Enterr10 Movies + Epic TV + ET Now + ET NOW SWADESH + ETV Telugu + Eurosport India + E-Vidya 6 + EZMall + Fakt Marathi + Filamchi + Flowers TV + Fox life + Gemini TV + GOOD NEWS TODAY + Gubbare + GULISTAN NEWS + Gyandarshan + Hare Krsna TV + History tv 18 + Hungama TV + IBC 24 + ILove + India News + India News Haryana + India News Uttar Pradesh + India Today + India TV + Indradhanu + Investigation Discovery India + Ishara TV + ISHWAR BHAKTI' + Jalsha Movies + Jinvani Channel + Jonack + Jyotish Duniya + Kalinga TV + Kanak News + KBS World + Khushboo TV Bangla + Kolkata TV + Lok Sabha TV + Lokshahi News + Maiboli + Manjari TV + Manoranjan Grand + Manoranjan Movies + Manoranjan TV + Marvel HQ + Mastiii + Mazhavil Manorama + MBC TV + Mh 1 Music + Mirror Now + MNX + Movie Plus + Movies Now + Movies Now + + MTV Beats + MTV India + Music India + Naaptol Tamil + Nandighosha TV + National Geographic Channel + National Geographic Wild + Naxatra News + NDTV 24x7 + NDTV India + Nepal 1 + News 18 Assam & North-East + News 18 Bengali + News 18 Bihar & Jharkhand + News 18 Gujarati + News 18 India + News 18 Lokmat + News 18 Madhya Pradesh & Chhattisgarh + News 18 Odia + News 18 Punjab & Haryana & Himachal Pradesh + News 18 Rajasthan + News 18 Urdu + News 18 Uttar Pradesh & Uttarakhand + News 24 + News Daily 24 + News India 24x7 + News Live + News Nation + News State UP & UK + NewsTime Bangla + News X + Nickelodeon India + Sonic Nickelodeon + Nick HD+ + Nick Jr India + NK TV24X7 + NORTH EAST LIVE + Odisha TV + Paras Gold + Peace of Mind TV + Pitaara + Pogo + Prag News + Prameya News 7 + Prarthana TV + Pratidin Time + Ptc Chakde + PTC Music + PTC News + PTC Punjabi + PTC Punjabi Gold + PTC Simran + Punjabi Hits + Rajya Sabha TV + RAMDHENU + Rang + Rengoni + Republic Bangla + Republic Bharat + Republic TV + Rishtey Cineplex + Romedy Now + Rongeen TV + R Plus + RT News + Rupasi Bangla + Saam TV + Sadhna TV + Sandesh News + Sangeet Bangla + Sangeet Bhojpuri + SANSAD TV HD + Sanskar TV + Santvani Channel + Satsang TV + Shemaroo Marathi Bana + Shemaroo TV + SHOWBOX + Shubh TV + SIDHARTH BHAKTI + Songdew TV + Sony Aath + Sony BBC Earth + SET India + Sony Marathi + Sony Max 2 + Sony Pal + SONY PIX + SONY SAB + SONY SPORTS TEN 1 + SONY SPORTS TEN 2 + SONY SPORTS TEN 3 + SONY SPORTS TEN 5 + Sony Wah + Sony Yay! + SPORTS18 1 + STAR BHARAT + Star Gold + Star Gold 2 + STAR GOLD SELECT + Star Jalsha + Star Maa + Star Maa Movies + Star Movies + STAR MOVIES SELECT + Star Plus + Star Pravah + Star Sports 1 + STAR SPORTS 1 HINDI + Star sports 2 + Star Sports 3 + Star Sports First + STAR SPORTS SELECT 1 + STAR SPORTS SELECT 2 + Star Utsav + Star Utsav Movies + Star World HD India + Star World Premiere HD + Sudarshan News + Sun Bangla + SUN MARATHI + Sun TV + Surya TV + SWADESH NEWS + Swayam Prabha 1 + Swayam Prabha 10 + Swayam Prabha 11 + Swayam Prabha 12 + Swayam Prabha 13 + Swayam Prabha 14 + Swayam Prabha 15 + Swayam Prabha 16 + Swayam Prabha 17 + Swayam Prabha 18 + Swayam Prabha 19 + Swayam Prabha 2 + Swayam Prabha 20 + Swayam Prabha 21 + Swayam Prabha 22 + Swayam Prabha 3 + Swayam Prabha 4 + Swayam Prabha 5 + Swayam Prabha 6 + Swayam Prabha 7 + Swayam Prabha 8 + Swayam Prabha 9 + Tarang Music + Tarang TV + The Q India + Times Now + Times Now World + TLC + Topper TV + Travel XP HD + TV 9 Bangla + TV9 Bharatvash + TV 9 Gujarati + TV 9 Kannada + TV 9 Marathi + Udaya TV + VANDE Gujarat 1 + VANDE Gujarat 10 + VANDE Gujarat 11 + VANDE Gujarat 12 + VANDE Gujarat 13 + VANDE Gujarat 14 + VANDE Gujarat 15 + VANDE Gujarat 16 + VANDE Gujarat 2 + VANDE Gujarat 3 + VANDE Gujarat 4 + VANDE Gujarat 5 + VANDE Gujarat 6 + VANDE Gujarat 7 + VANDE Gujarat 8 + VANDE Gujarat 9 + VEDIC + VH1 India + Vijay TV + VIP NEWS + VTV News + WION + Wow Cinema One + Zee 24 Ghanta + Zee 24 Kalak + Zee 24 Taas + Zee Action + Zee Anmol + Zee Anmol Cinema + ZEE Bangla + Zee Bangla Cinema + Zee Bihar Jharkhand + Zee Biskope + Zee Bollywood + Zee Business + Zee Cafe + Zee Chitramandir + Zee Cinema + Zee Cinema Asia + ZEE CINEMALU + Zee Classic + ZEE DELHI NCR HARYANA + Zee Hindustan + Zee Kannada + Zee Keralam + Zee Madhya Pradesh Chhattisgarh + ZEE Marathi + Zee News + Zee Odisha + Zee Punjab Haryana Himachal + Zee Punjabi + Zee Rajasthan + Zee Salaam + Zee Sarthak + ZEE TALKIES + Zee Tamil + Zee Telugu + Zee TV + Zee Uttar Pradesh Uttarakhand + Zee Vajwa + Zee Yuva + Zee Zest + Zing Asia + Zing Home + Zoom + diff --git a/sites/dishtv.in/dishtv.in.config.js b/sites/dishtv.in/dishtv.in.config.js index 82ce05bc..1df15998 100644 --- a/sites/dishtv.in/dishtv.in.config.js +++ b/sites/dishtv.in/dishtv.in.config.js @@ -12,7 +12,7 @@ dayjs.extend(customParseFormat) module.exports = { site: 'dishtv.in', days: 2, - url: `https://www.dishtv.in/WhatsonIndiaWebService.asmx/LoadPagginResultDataForProgram`, + url: 'https://www.dishtv.in/WhatsonIndiaWebService.asmx/LoadPagginResultDataForProgram', request: { method: 'POST', data({ channel, date }) { @@ -23,7 +23,7 @@ module.exports = { } } }, - parser: function ({ content, channel, date }) { + parser: function ({ content, date }) { let programs = [] const data = parseContent(content) const items = parseItems(data) @@ -44,7 +44,7 @@ module.exports = { }, async channels() { const channelguide = await axios - .get(`https://www.dishtv.in/channelguide/`) + .get('https://www.dishtv.in/channelguide/') .then(r => r.data) .catch(console.log) const $channelguide = cheerio.load(channelguide) @@ -60,7 +60,7 @@ module.exports = { const channels = {} const channelList = await axios - .post(`https://www.dishtv.in/WebServiceMethod.aspx/GetChannelListFromMobileAPI`, { + .post('https://www.dishtv.in/WebServiceMethod.aspx/GetChannelListFromMobileAPI', { strChannel: '' }) .then(r => r.data) @@ -82,7 +82,7 @@ module.exports = { for (let id of ids) { const promise = axios .post( - `https://www.dishtv.in/WhatsonIndiaWebService.asmx/LoadPagginResultDataForProgram`, + 'https://www.dishtv.in/WhatsonIndiaWebService.asmx/LoadPagginResultDataForProgram', { Channelarr: id, fromdate: date.format('YYYYMMDD[0000]'), @@ -117,10 +117,10 @@ function parseTitle(item) { return $('a').text() } -function parseStart(item, date) { +function parseStart(item) { const $ = cheerio.load(item) const onclick = $('i.fa-circle').attr('onclick') - const [_, time] = onclick.match(/RecordingEnteryOpen\('.*','.*','(.*)','.*',.*\)/) + const [, time] = onclick.match(/RecordingEnteryOpen\('.*','.*','(.*)','.*',.*\)/) return dayjs.tz(time, 'YYYYMMDDHHmm', 'Asia/Kolkata') } diff --git a/sites/dishtv.in/dishtv.in.test.js b/sites/dishtv.in/dishtv.in.test.js index a54bc646..124ffd56 100644 --- a/sites/dishtv.in/dishtv.in.test.js +++ b/sites/dishtv.in/dishtv.in.test.js @@ -1,5 +1,5 @@ // npm run channels:parse -- --config=./sites/dishtv.in/dishtv.in.config.js --output=./sites/dishtv.in/dishtv.in.channels.xml -// npx epg-grabber --config=sites/dishtv.in/dishtv.in.config.js --channels=sites/dishtv.in/dishtv.in.channels.xml --output=guide.xml +// npm run grab -- --site=dishtv.in const { parser, url, request } = require('./dishtv.in.config.js') const dayjs = require('dayjs') @@ -10,7 +10,8 @@ dayjs.extend(utc) const date = dayjs.utc('2021-11-05', 'YYYY-MM-DD').startOf('d') const channel = { site_id: '10000000075992337', xmltv_id: 'WomensActive.in' } -const content = `{"d":"\\u003cdiv class=\\"pgrid\\"\\u003e\\u003cdiv class=\\"img sm-30 grid\\"\\u003e\\u003cimg class=\\"chnl-logo\\" src=\\"http://imagesdishtvd2h.whatsonindia.com/dasimages/channel/landscape/360x270/hiyj8ndf.png\\" onclick=\\"ShowChannelGuid(\\u0027womens-active\\u0027,\\u002710000000075992337\\u0027);\\" /\\u003e\\u003cdiv class=\\"cnl-fav\\"\\u003e\\u003ca href=\\"javascript:;\\"\\u003e\\u003cem\\u003ech. no\\u003c/em\\u003e\\u003cspan\\u003e117\\u003c/span\\u003e\\u003c/a\\u003e\\u003c/div\\u003e\\u003ci class=\\"fa fa-heart Set_Favourite_Channel\\" aria-hidden=\\"true\\" title=\\"Set womens active channel as your favourite channel\\" onclick=\\"SetFavouriteChannel();\\"\\u003e\\u003c/i\\u003e\\u003c/div\\u003e\\u003cdiv class=\\"grid-wrap\\"\\u003e\\u003cdiv class=\\"sm-30 grid datatime\\" data-time=\\"24\\" data-starttime=\\"12:00 AM\\" data-endttime=\\"12:24 AM\\" data-reamintime=\\"0\\"\\u003e\\u003ca title=\\"Event Name: Cynthia Williams - Diwali Look Part 01\\r\\nStart Time: 12:00 AM\\r\\nDuration: 24min\\r\\nSynopsis: Learn diwali look by cynthia williams p1\\r\\n\\" href=\\"javascript:;\\" onclick=\\"ShowCurrentTime(\\u002730000000550913679\\u0027,\\u002710000000075992337\\u0027,\\u0027202111051200\\u0027)\\"\\u003eCynthia Williams - Diwali Look Part 01\\u003c/a\\u003e\\u003cdiv class=\\"cnlSerialIcon\\"\\u003e\\u003ci class=\\"fa fa-heart\\" aria-hidden=\\"true\\" title=\\"Set Favourite Serial\\" onclick=\\"SetFavouriteShow();\\"\\u003e\\u003c/i\\u003e\\u003ci class=\\"fa fa-clock-o\\" aria-hidden=\\"true\\" title=\\"Reminder Serial\\" onclick=\\"ReminderEnteryOpen(\\u002730000000550913679\\u0027,\\u002710000000075992337\\u0027,\\u0027202111050000\\u0027,\\u0027117\\u0027)\\"\\u003e\\u003c/i\\u003e\\u003ci class=\\"fa fa-circle\\" aria-hidden=\\"true\\" title=\\"Record Serial\\" onclick=\\"RecordingEnteryOpen(\\u002730000000550913679\\u0027,\\u002710000000075992337\\u0027,\\u0027202111050000\\u0027,\\u0027117\\u0027,30000000550913679)\\"\\u003e\\u003c/i\\u003e\\u003c/div\\u003e\\u003c/div\\u003e\\u003c/div\\u003e\\u003c/div\\u003e"}` +const content = + '{"d":"\\u003cdiv class=\\"pgrid\\"\\u003e\\u003cdiv class=\\"img sm-30 grid\\"\\u003e\\u003cimg class=\\"chnl-logo\\" src=\\"http://imagesdishtvd2h.whatsonindia.com/dasimages/channel/landscape/360x270/hiyj8ndf.png\\" onclick=\\"ShowChannelGuid(\\u0027womens-active\\u0027,\\u002710000000075992337\\u0027);\\" /\\u003e\\u003cdiv class=\\"cnl-fav\\"\\u003e\\u003ca href=\\"javascript:;\\"\\u003e\\u003cem\\u003ech. no\\u003c/em\\u003e\\u003cspan\\u003e117\\u003c/span\\u003e\\u003c/a\\u003e\\u003c/div\\u003e\\u003ci class=\\"fa fa-heart Set_Favourite_Channel\\" aria-hidden=\\"true\\" title=\\"Set womens active channel as your favourite channel\\" onclick=\\"SetFavouriteChannel();\\"\\u003e\\u003c/i\\u003e\\u003c/div\\u003e\\u003cdiv class=\\"grid-wrap\\"\\u003e\\u003cdiv class=\\"sm-30 grid datatime\\" data-time=\\"24\\" data-starttime=\\"12:00 AM\\" data-endttime=\\"12:24 AM\\" data-reamintime=\\"0\\"\\u003e\\u003ca title=\\"Event Name: Cynthia Williams - Diwali Look Part 01\\r\\nStart Time: 12:00 AM\\r\\nDuration: 24min\\r\\nSynopsis: Learn diwali look by cynthia williams p1\\r\\n\\" href=\\"javascript:;\\" onclick=\\"ShowCurrentTime(\\u002730000000550913679\\u0027,\\u002710000000075992337\\u0027,\\u0027202111051200\\u0027)\\"\\u003eCynthia Williams - Diwali Look Part 01\\u003c/a\\u003e\\u003cdiv class=\\"cnlSerialIcon\\"\\u003e\\u003ci class=\\"fa fa-heart\\" aria-hidden=\\"true\\" title=\\"Set Favourite Serial\\" onclick=\\"SetFavouriteShow();\\"\\u003e\\u003c/i\\u003e\\u003ci class=\\"fa fa-clock-o\\" aria-hidden=\\"true\\" title=\\"Reminder Serial\\" onclick=\\"ReminderEnteryOpen(\\u002730000000550913679\\u0027,\\u002710000000075992337\\u0027,\\u0027202111050000\\u0027,\\u0027117\\u0027)\\"\\u003e\\u003c/i\\u003e\\u003ci class=\\"fa fa-circle\\" aria-hidden=\\"true\\" title=\\"Record Serial\\" onclick=\\"RecordingEnteryOpen(\\u002730000000550913679\\u0027,\\u002710000000075992337\\u0027,\\u0027202111050000\\u0027,\\u0027117\\u0027,30000000550913679)\\"\\u003e\\u003c/i\\u003e\\u003c/div\\u003e\\u003c/div\\u003e\\u003c/div\\u003e\\u003c/div\\u003e"}' it('can generate valid url', () => { expect(url).toBe( @@ -39,6 +40,6 @@ it('can parse response', () => { }) it('can handle empty guide', () => { - const result = parser({ date, channel, content: `{"d":""}` }) + const result = parser({ date, channel, content: '{"d":""}' }) expect(result).toMatchObject([]) }) diff --git a/sites/dsmart.com.tr/dsmart.com.tr.channels.xml b/sites/dsmart.com.tr/dsmart.com.tr.channels.xml index e0cc7b8d..a43880e6 100644 --- a/sites/dsmart.com.tr/dsmart.com.tr.channels.xml +++ b/sites/dsmart.com.tr/dsmart.com.tr.channels.xml @@ -1,207 +1,205 @@ - - - a News - Baby TV - BBC World News - CNN International - Fashion TV - NBA TV - Trace Urban - 24Kitchen - 24 - 360 - a Haber - a Spor - ATV - BBC Earth - BBN Türk - Beyaz TV - Bloomberg HT - Boomerang - Cartoon Network - CNN Türk SD - Çocuk Smart - Da Vinci Learning - Discovery - Discovery Science - Disney Channel - Diyanet Tv - Dizi Smart Max - Dizi Smart Premium - DMAX - DocuBox - Euro D - Eurosport - Eurosport 2 - Fast & Fun - FB TV - FightBox - FilmBox - Flash Haber - FOXCRIME - FOX - FX - Haber Global - Haber Türk - Halk TV - Insight TV - Kanal 7 - Kanal D - Lider Tv - Love Nature - MovieSmart Classic - MovieSmart Premium - MovieSmart Premium 2 - MovieSmart Türk - National Geographic - National Geographic WILD - NTV - NR1 Türk - NR1 - Power TV - Show TV - Sinema TV 1001 - Sinema TV 1002 - Sinema TV 2 - Sinema TV Aile - Sinema TV Aile 2 - Sinema TV Aksiyon - Sinema TV Aksiyon 2 - Sinema TV Comedy - Sinema TV Comedy 2 - Sinema TV - Spor Smart - SPOR SMART 2 - S Sport - S Sport 2 - Star - Nature Escape - TAY TV - Tele 1 - teve2 - TGRT Haber - TLC - TMB - TRT 1 - trt 2 - TRT 3 Spor - TRT 4K - TRT Avaz - TRT Belgesel - TRT Çocuk - TRT Haber - TRT Kurdi - TRT Müzik - TRT Spor - Trt Spor Yıldız - TRT Türk - Tv 100 - TV4 - TV8 - TV 8,5 - TV Net - Uçankuş TV - Ülke TV - Vav Tv - Viasat History - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + a News + Baby TV + BBC World News + CNN International + Fashion TV + NBA TV + Trace Urban + 24Kitchen + 24 + 360 + a Haber + a Spor + ATV + BBC Earth + BBN Türk + Beyaz TV + Bloomberg HT + Boomerang + Cartoon Network + CNN Türk SD + Çocuk Smart + Da Vinci Learning + Discovery + Discovery Science + Disney Channel + Diyanet Tv + Dizi Smart Max + Dizi Smart Premium + DMAX + DocuBox + Euro D + Eurosport + Eurosport 2 + Fast & Fun + FB TV + FightBox + FilmBox + Flash Haber + FOXCRIME + FOX + FX + Haber Global + Haber Türk + Halk TV + Insight TV + Kanal 7 + Kanal D + Lider Tv + Love Nature + MovieSmart Classic + MovieSmart Premium + MovieSmart Premium 2 + MovieSmart Türk + National Geographic + National Geographic WILD + NTV + NR1 Türk + NR1 + Power TV + Show TV + Sinema TV 1001 + Sinema TV 1002 + Sinema TV 2 + Sinema TV Aile + Sinema TV Aile 2 + Sinema TV Aksiyon + Sinema TV Aksiyon 2 + Sinema TV Comedy + Sinema TV Comedy 2 + Sinema TV + Spor Smart + SPOR SMART 2 + S Sport + S Sport 2 + Star + Nature Escape + TAY TV + Tele 1 + teve2 + TGRT Haber + TLC + TMB + TRT 1 + trt 2 + TRT 3 Spor + TRT 4K + TRT Avaz + TRT Belgesel + TRT Çocuk + TRT Haber + TRT Kurdi + TRT Müzik + TRT Spor + Trt Spor Yıldız + TRT Türk + Tv 100 + TV4 + TV8 + TV 8,5 + TV Net + Uçankuş TV + Ülke TV + Vav Tv + Viasat History + diff --git a/sites/dsmart.com.tr/dsmart.com.tr.config.js b/sites/dsmart.com.tr/dsmart.com.tr.config.js index 353aa561..d545e226 100644 --- a/sites/dsmart.com.tr/dsmart.com.tr.config.js +++ b/sites/dsmart.com.tr/dsmart.com.tr.config.js @@ -17,10 +17,9 @@ module.exports = { return `${API_ENDPOINT}?page=${page}&limit=1&day=${date.format('YYYY-MM-DD')}` }, parser: function ({ content, channel }) { - let offset = -1 let programs = [] const items = parseItems(content, channel) - items.forEach((item, i) => { + items.forEach(item => { const prev = programs[programs.length - 1] let start if (prev) { @@ -90,7 +89,7 @@ function parseStart(item, date) { } function parseDuration(item) { - const [_, H, mm, ss] = item.duration.match(/(\d+):(\d+):(\d+)$/) + const [, H, mm, ss] = item.duration.match(/(\d+):(\d+):(\d+)$/) return parseInt(H) * 3600 + parseInt(mm) * 60 + parseInt(ss) } diff --git a/sites/dsmart.com.tr/dsmart.com.tr.test.js b/sites/dsmart.com.tr/dsmart.com.tr.test.js index 34e1b067..0b2cf669 100644 --- a/sites/dsmart.com.tr/dsmart.com.tr.test.js +++ b/sites/dsmart.com.tr/dsmart.com.tr.test.js @@ -1,5 +1,5 @@ // npm run channels:parse -- --config=./sites/dsmart.com.tr/dsmart.com.tr.config.js --output=./sites/dsmart.com.tr/dsmart.com.tr.channels.xml -// npx epg-grabber --config=sites/dsmart.com.tr/dsmart.com.tr.config.js --channels=sites/dsmart.com.tr/dsmart.com.tr.channels.xml --output=guide.xml --timeout=30000 --days=2 +// npm run grab -- --site=dsmart.com.tr const { parser, url } = require('./dsmart.com.tr.config.js') const dayjs = require('dayjs') @@ -35,7 +35,8 @@ it('can parse response', () => { stop: '2023-01-15T23:45:00.000Z', title: 'Bizi Ayıran Her Şey', category: 'sinema/genel', - description: `Issızlığın ortasında yer alan orta sınıf bir evde bir anne kız yaşamaktadır. Çevrelerindeki taşları insanlarla yaşadıkları çatışmalar, anne-kızın hayatını olumsuz yönde etkilemektedir. Kızının ansızın ortadan kaybolması, bu çatışmaların seviyesini artıracak ve anne, kızını bulmak için her türlü yola başvuracaktır.` + description: + 'Issızlığın ortasında yer alan orta sınıf bir evde bir anne kız yaşamaktadır. Çevrelerindeki taşları insanlarla yaşadıkları çatışmalar, anne-kızın hayatını olumsuz yönde etkilemektedir. Kızının ansızın ortadan kaybolması, bu çatışmaların seviyesini artıracak ve anne, kızını bulmak için her türlü yola başvuracaktır.' }) expect(results[1]).toMatchObject({ @@ -43,7 +44,8 @@ it('can parse response', () => { stop: '2023-01-16T01:30:00.000Z', title: 'Pixie', category: 'sinema/genel', - description: `Annesinin intikamını almak isteyen Pixie, dahiyane bir soygun planlar. Fakat işler planladığı gibi gitmeyince kendini İrlanda’nın vahşi gangsterleri tarafından kovalanan iki adamla birlikte kaçarken bulur.` + description: + 'Annesinin intikamını almak isteyen Pixie, dahiyane bir soygun planlar. Fakat işler planladığı gibi gitmeyince kendini İrlanda’nın vahşi gangsterleri tarafından kovalanan iki adamla birlikte kaçarken bulur.' }) expect(results[12]).toMatchObject({ @@ -51,7 +53,8 @@ it('can parse response', () => { stop: '2023-01-16T22:30:00.000Z', title: 'Seberg', category: 'sinema/genel', - description: `Başrolünde ünlü yıldız Kristen Stewart’ın yer aldığı politik gerilim, 1960’ların sonunda insan hakları aktivisti Hakim Jamal ile yaşadığı politik ve romantik ilişki sebebiyle FBI tarafından hedef alınan, Fransız Yeni Dalgası’nın sevilen yüzü ve Serseri Aşıklar’ın yıldızı Jean Seberg’ün çarpıcı hikayesini anlatıyor.` + description: + 'Başrolünde ünlü yıldız Kristen Stewart’ın yer aldığı politik gerilim, 1960’ların sonunda insan hakları aktivisti Hakim Jamal ile yaşadığı politik ve romantik ilişki sebebiyle FBI tarafından hedef alınan, Fransız Yeni Dalgası’nın sevilen yüzü ve Serseri Aşıklar’ın yıldızı Jean Seberg’ün çarpıcı hikayesini anlatıyor.' }) }) diff --git a/sites/dstv.com/dstv.com.channels.xml b/sites/dstv.com/dstv.com.channels.xml index 0340c9ad..ee6ab2f2 100644 --- a/sites/dstv.com/dstv.com.channels.xml +++ b/sites/dstv.com/dstv.com.channels.xml @@ -1,213 +1,211 @@ - - - 1 KZN - 1 Magic - Africa Magic Epic - Africa Magic Family - Africa Magic Hausa - Africa Magic Igbo - Africa Magic Showcase HD - Africa Magic Urban - Africa Magic Yoruba - Africanews - AFRO Music English - AIT - Al Jazeera - Arewa 24 - Arise News - B4U Movies - Bay TV - BBC Brit - BBC Earth HD - BBC Lifestyle - BBC World News - BET - Big Brother Mzansi HD - Bloomberg Television - Boomerang - Business Day - Cape Town TV - Cartoon Network - Cbeebies - CBS Justice - CBS Reality - CCTV 4 - CCTV Entertainment – Mandarin Entertainment Channel - CGTN News - CGTN Documentary - Channel O HD - China Movie Channel - Citi TV - CNBC Africa - CNN International - Comedy Central - Curiosity Channel - Da Vinci Kids - Day Star - Discovery Channel HD - Discovery Family HD - Disney Channel - Disney Junior - Dominion TV - Dove TV - Dumisa - Deutsche Welle - E! Entertainment - eTV Extra HD - Emmanuel TV - eMovies HD - eMovies Extra HD - eNews Channel Africa - ESPN 2 HD - ESPN - eToonz - e.TV HD - eTV Africa - EuroNews - EuroNews French - EuroNews German - Eternal Word Television Network - FAITH - Fashion One - FliekNet HD - Food Network - FOX Life - FOX HD - Galaxy TV - GauTV - Ginx eSports HD - Home and Garden TV HD - HIP TV - The History Channel - Honey - IGNITION - TV Mundial (P) - Discovery ID - ISLAM CHANNEL - Jim Jam - Joy News - K24 - KIX - Kyk NET HD - Kyk NET & Kie HD - KyKNet Nou - LAGOS TV - Lifetime Entertainment - Lumen Christi - Maisha Magic Bongo - Maisha Magic Plus HD - ME Channel - Mindset - MiTV - M-Net Movies 1 West HD - M Movies 1 - M-Net Movies 2 - M-Net Movies 3 - M-Net Movies 4 - M-Net Movies Men of Action HD - M-Net West HD - Moja Love HD - MovieRoom - MTV - MTV base - Mzansi Bioskop - Mzansi Magic HD - Mzansi Music - Mzansi Wethu HD - National Geographic Channel - NatGeo Wild - NDTV 24x7 - Newzroom Afrika - NHK - Nickelodeon - NickJr - NickTOONS - NTA 2 - NTA I - NTA News 24 - NTA Parliament - OGTV - One Gospel - ONMAX - Parliamentary Service - PBS Kids - Peoples Weather - Phoenix News and Entertainment - Cloud Plus - Plus TV Africa - POP Central - RAI International - Real Time - ROK - ROK 2 - ROK GH - Russia Today - SABC 1 HD - SABC 2 HD - SABC 3 HD - SABC News - SBN - SILVERBIRD - Sky News - Sound City - Soweto TV - Spice TV - Star Life - Studio Universal HD - Sunna TV - ACTION - SS Blitz Nigeria - CRICKET - SS Football Nigeria - SS Football Plus Nigeria - GOLF - SS Grandstand Nigeria - SS LaLiga Nigeria - SS Maximo 1 (P) - SS Maximo 2 (P) - MOTORSPORT - SS Premier League Nigeria - PSL - RUGBY - SS Tennis Nigeria - SS Variety 1 Nigeria - SS Variety 2 Nigeria - SS Variety 3 Nigeria - SS Variety 4 Nigeria - TBN - TeleMundo - Televista - TellyTrack - The Home Channel - Discovery TLC HD - TLNovelas - TNT Africa - TRACE Africa - Trace Gospel - Trace Jama - TRACE Muzika - TRACE Mziki - TRACE Naija - TRACE URBAN HD - Travel Channel - Trybe - Tshwane TV - TV5 Monde Afrique - TVC News Nigeria - Lesotho TV - Universal TV - URBAN TV - VIA HD - VUZU HD - WAP TV - Wasafi TV - Wazobia Max - WildEarth - WWE Channel - Zee World - Zhejiang TV - CGTN French - RTPi (P) - - + + 1 KZN + 1 Magic + Africa Magic Epic + Africa Magic Family + Africa Magic Hausa + Africa Magic Igbo + Africa Magic Showcase HD + Africa Magic Urban + Africa Magic Yoruba + Africanews + AFRO Music English + AIT + Al Jazeera + Arewa 24 + Arise News + B4U Movies + Bay TV + BBC Brit + BBC Earth HD + BBC Lifestyle + BBC World News + BET + Big Brother Mzansi HD + Bloomberg Television + Boomerang + Business Day + Cape Town TV + Cartoon Network + Cbeebies + CBS Justice + CBS Reality + CCTV 4 + CCTV Entertainment – Mandarin Entertainment Channel + CGTN News + CGTN Documentary + Channel O HD + China Movie Channel + Citi TV + CNBC Africa + CNN International + Comedy Central + Curiosity Channel + Da Vinci Kids + Day Star + Discovery Channel HD + Discovery Family HD + Disney Channel + Disney Junior + Dominion TV + Dove TV + Dumisa + Deutsche Welle + E! Entertainment + eTV Extra HD + Emmanuel TV + eMovies HD + eMovies Extra HD + eNews Channel Africa + ESPN 2 HD + ESPN + eToonz + e.TV HD + eTV Africa + EuroNews + EuroNews French + EuroNews German + Eternal Word Television Network + FAITH + Fashion One + FliekNet HD + Food Network + FOX Life + FOX HD + Galaxy TV + GauTV + Ginx eSports HD + Home and Garden TV HD + HIP TV + The History Channel + Honey + IGNITION + TV Mundial (P) + Discovery ID + ISLAM CHANNEL + Jim Jam + Joy News + K24 + KIX + Kyk NET HD + Kyk NET & Kie HD + KyKNet Nou + LAGOS TV + Lifetime Entertainment + Lumen Christi + Maisha Magic Bongo + Maisha Magic Plus HD + ME Channel + Mindset + MiTV + M-Net Movies 1 West HD + M Movies 1 + M-Net Movies 2 + M-Net Movies 3 + M-Net Movies 4 + M-Net Movies Men of Action HD + M-Net West HD + Moja Love HD + MovieRoom + MTV + MTV base + Mzansi Bioskop + Mzansi Magic HD + Mzansi Music + Mzansi Wethu HD + National Geographic Channel + NatGeo Wild + NDTV 24x7 + Newzroom Afrika + NHK + Nickelodeon + NickJr + NickTOONS + NTA 2 + NTA I + NTA News 24 + NTA Parliament + OGTV + One Gospel + ONMAX + Parliamentary Service + PBS Kids + Peoples Weather + Phoenix News and Entertainment + Cloud Plus + Plus TV Africa + POP Central + RAI International + Real Time + ROK + ROK 2 + ROK GH + Russia Today + SABC 1 HD + SABC 2 HD + SABC 3 HD + SABC News + SBN + SILVERBIRD + Sky News + Sound City + Soweto TV + Spice TV + Star Life + Studio Universal HD + Sunna TV + ACTION + SS Blitz Nigeria + CRICKET + SS Football Nigeria + SS Football Plus Nigeria + GOLF + SS Grandstand Nigeria + SS LaLiga Nigeria + SS Maximo 1 (P) + SS Maximo 2 (P) + MOTORSPORT + SS Premier League Nigeria + PSL + RUGBY + SS Tennis Nigeria + SS Variety 1 Nigeria + SS Variety 2 Nigeria + SS Variety 3 Nigeria + SS Variety 4 Nigeria + TBN + TeleMundo + Televista + TellyTrack + The Home Channel + Discovery TLC HD + TLNovelas + TNT Africa + TRACE Africa + Trace Gospel + Trace Jama + TRACE Muzika + TRACE Mziki + TRACE Naija + TRACE URBAN HD + Travel Channel + Trybe + Tshwane TV + TV5 Monde Afrique + TVC News Nigeria + Lesotho TV + Universal TV + URBAN TV + VIA HD + VUZU HD + WAP TV + Wasafi TV + Wazobia Max + WildEarth + WWE Channel + Zee World + Zhejiang TV + CGTN French + RTPi (P) + diff --git a/sites/dstv.com/dstv.com.config.js b/sites/dstv.com/dstv.com.config.js index a53b6103..8f7e62ae 100644 --- a/sites/dstv.com/dstv.com.config.js +++ b/sites/dstv.com/dstv.com.config.js @@ -27,7 +27,7 @@ module.exports = { 'YYYY-MM-DD' )}${packageName}&country=${region}` }, - async parser({ content, channel, cached }) { + async parser({ content, channel }) { let programs = [] const items = parseItems(content, channel) for (const item of items) { @@ -91,7 +91,7 @@ async function loadProgramDetails(item) { } function parseItems(content, channel) { - const [_, channelId] = channel.site_id.split('#') + const [, channelId] = channel.site_id.split('#') const data = JSON.parse(content) if (!data || !Array.isArray(data.Channels)) return [] const channelData = data.Channels.find(c => c.Number === channelId) diff --git a/sites/dstv.com/dstv.com.test.js b/sites/dstv.com/dstv.com.test.js index c796b2b0..b18bb6ab 100644 --- a/sites/dstv.com/dstv.com.test.js +++ b/sites/dstv.com/dstv.com.test.js @@ -1,5 +1,5 @@ // npm run channels:parse -- --config=./sites/dstv.com/dstv.com.config.js --output=./sites/dstv.com/dstv.com.channels.xml --set=country:zaf -// npx epg-grabber --config=sites/dstv.com/dstv.com.config.js --channels=sites/dstv.com/dstv.com.channels.xml --output=guide.xml --days=2 +// npm run grab -- --site=dstv.com const { parser, url } = require('./dstv.com.config.js') const axios = require('axios') @@ -101,7 +101,7 @@ it('can parse response for NG', async () => { it('can handle empty guide', done => { parser({ - content: `{"Total":0,"Channels":[]}`, + content: '{"Total":0,"Channels":[]}', channel: channelZA }) .then(result => { diff --git a/sites/elcinema.com/elcinema.com.channels.xml b/sites/elcinema.com/elcinema.com.channels.xml index ec2f3d13..83e36b51 100644 --- a/sites/elcinema.com/elcinema.com.channels.xml +++ b/sites/elcinema.com/elcinema.com.channels.xml @@ -1,238 +1,236 @@ - - - 2M Monde - Abu Dhabi Drama - Abu Dhabi TV - Al Aoula Middle East - Al Araby 2 TV - Al Dafrah TV - Al Hayat - Al Jadeed - Al Kahera Wal Nas - Al Kahera Wal Nas TV 2 - Al-Manar TV - Al-Nahar TV - Al-Nahar Drama - Alrai TV - Al Rasheed TV - Al-Saeedah - Al Safwa - Saudi TV - Alsharqiya TV - Alsumaria - Al Yawm - Amman TV - ART Aflam 1 - ART Aflam 2 - ART Cinema - ART Hekayat - ART Hekayat 2 - BeIn Drama 1 - BeIn Movies Premiere - BeIn Movies Action - BeIn Movies Drama - BeIn Movies Family - BeIn Series 1 - BeIn Series 2 - Cartoon Network Arabic - CBC - CBC Drama - CBC Sofra - Cima - Cinema 1 - Cinema 2 - Discovery Channel Middle East & Africa - Disney Channel Middle East - DMC - DMC Drama - Dubai One - Dubai TV - Dubai Zaman - Echorouk TV - El Mehwar Channel - Watania 1 - Emarat TV - E! Middle East - ETC TV - Fann - FX - IFilm Arabic - Kuwait TV - KTV Al Qurain - KTV Khallik Bilbait - Lana TV - LBC - LBC International - Maspero Zaman - MBC - MBC 2 - MBC 3 - MBC 4 - MBC 5 - MBC Action - MBC Bollywood - MBC Drama - MBC Maser - MBC Maser 2 - MBC Max - MBC Drama + - Mix Bel Araby - Mix Hollywood - MTV Alloubnaniya - Musawa - National Geographic Abu Dhabi - National Geographic Middle East - Nessma - Nile Comedy - Nile Drama - On Drama - On E - OSN Comedy - OSN Kids - OSN Action - OSN Movies - OSN Ya Hala - Rotana Cinema Egypt - Rotana Cinema KSA - Rotana Classic - Rotana Comedy - Rotana Drama - Rotana Khalijia - Rotana Kids - Rotana+ HD - Sada Elbalad - Sada Elbalad 2 - Sada Elbalad Drama - Sama Dubai - Sama TV - SBC - Sharjah TV - Star Movies Middle East - Star World Middle East - Syria Drama - Syria TV - Ten - Thikrayat TV - UTV - Watania 2 - Zee Aflam - Zee Alwan - 2M Monde - Abu Dhabi Drama - Abu Dhabi TV - Al Aoula Middle East - Al Araby 2 TV - Al Dafrah TV - Al Hayat - Al Jadeed - Al Kahera Wal Nas - Al Kahera Wal Nas TV 2 - Al-Manar TV - Al-Nahar TV - Al-Nahar Drama - Alrai TV - Al Rasheed TV - Al-Saeedah - Al Safwa - Saudi TV - Alsharqiya TV - Alsumaria - Al Yawm - Amman TV - ART Aflam 1 - ART Aflam 2 - ART Cinema - ART Hekayat - ART Hekayat 2 - BeIn Drama 1 - BeIn Movies Premiere - BeIn Movies Action - BeIn Movies Drama - BeIn Movies Family - BeIn Series 1 - BeIn Series 2 - Cartoon Network Arabic - CBC - CBC Drama - CBC Sofra - Cima - Cinema 1 - Cinema 2 - Discovery Channel Middle East & Africa - Disney Channel Middle East - DMC - DMC Drama - Dubai One - Dubai TV - Dubai Zaman - Echorouk TV - El Mehwar Channel - Watania 1 - Emarat TV - E! Middle East - ETC TV - Fann - FX - IFilm Arabic - Kuwait TV - KTV Al Qurain - KTV Khallik Bilbait - Lana TV - LBC - Maspero Zaman - MBC - MBC 2 - MBC 3 - MBC 4 - MBC 5 - MBC Action - MBC Bollywood - MBC Drama - MBC Maser - MBC Maser 2 - MBC Max - MBC Drama + - Mix Bel Araby - Mix Hollywood - MTV Alloubnaniya - Musawa - National Geographic Abu Dhabi - National Geographic Middle East - Nessma - Nile Comedy - Nile Drama - On Drama - On E - OSN Comedy - OSN Kids - OSN Action - OSN Movies - OSN Ya Hala - Rotana Cinema Egypt - Rotana Cinema KSA - Rotana Classic - Rotana Comedy - Rotana Drama - Rotana Khalijia - Rotana Kids - Rotana+ HD - Sada Elbalad - Sada Elbalad 2 - Sada Elbalad Drama - Sama Dubai - Sama TV - SBC - Sharjah TV - Star Movies Middle East - Star World Middle East - Syria Drama - Syria TV - Ten - Thikrayat TV - UTV - Watania 2 - Zee Aflam - Zee Alwan - - \ No newline at end of file + + 2M Monde + Abu Dhabi Drama + Abu Dhabi TV + Al Aoula Middle East + Al Araby 2 TV + Al Dafrah TV + Al Hayat + Al Jadeed + Al Kahera Wal Nas + Al Kahera Wal Nas TV 2 + Al-Manar TV + Al-Nahar TV + Al-Nahar Drama + Alrai TV + Al Rasheed TV + Al-Saeedah + Al Safwa + Saudi TV + Alsharqiya TV + Alsumaria + Al Yawm + Amman TV + ART Aflam 1 + ART Aflam 2 + ART Cinema + ART Hekayat + ART Hekayat 2 + BeIn Drama 1 + BeIn Movies Premiere + BeIn Movies Action + BeIn Movies Drama + BeIn Movies Family + BeIn Series 1 + BeIn Series 2 + Cartoon Network Arabic + CBC + CBC Drama + CBC Sofra + Cima + Cinema 1 + Cinema 2 + Discovery Channel Middle East & Africa + Disney Channel Middle East + DMC + DMC Drama + Dubai One + Dubai TV + Dubai Zaman + Echorouk TV + El Mehwar Channel + Watania 1 + Emarat TV + E! Middle East + ETC TV + Fann + FX + IFilm Arabic + Kuwait TV + KTV Al Qurain + KTV Khallik Bilbait + Lana TV + LBC + LBC International + Maspero Zaman + MBC + MBC 2 + MBC 3 + MBC 4 + MBC 5 + MBC Action + MBC Bollywood + MBC Drama + MBC Maser + MBC Maser 2 + MBC Max + MBC Drama + + Mix Bel Araby + Mix Hollywood + MTV Alloubnaniya + Musawa + National Geographic Abu Dhabi + National Geographic Middle East + Nessma + Nile Comedy + Nile Drama + On Drama + On E + OSN Comedy + OSN Kids + OSN Action + OSN Movies + OSN Ya Hala + Rotana Cinema Egypt + Rotana Cinema KSA + Rotana Classic + Rotana Comedy + Rotana Drama + Rotana Khalijia + Rotana Kids + Rotana+ HD + Sada Elbalad + Sada Elbalad 2 + Sada Elbalad Drama + Sama Dubai + Sama TV + SBC + Sharjah TV + Star Movies Middle East + Star World Middle East + Syria Drama + Syria TV + Ten + Thikrayat TV + UTV + Watania 2 + Zee Aflam + Zee Alwan + 2M Monde + Abu Dhabi Drama + Abu Dhabi TV + Al Aoula Middle East + Al Araby 2 TV + Al Dafrah TV + Al Hayat + Al Jadeed + Al Kahera Wal Nas + Al Kahera Wal Nas TV 2 + Al-Manar TV + Al-Nahar TV + Al-Nahar Drama + Alrai TV + Al Rasheed TV + Al-Saeedah + Al Safwa + Saudi TV + Alsharqiya TV + Alsumaria + Al Yawm + Amman TV + ART Aflam 1 + ART Aflam 2 + ART Cinema + ART Hekayat + ART Hekayat 2 + BeIn Drama 1 + BeIn Movies Premiere + BeIn Movies Action + BeIn Movies Drama + BeIn Movies Family + BeIn Series 1 + BeIn Series 2 + Cartoon Network Arabic + CBC + CBC Drama + CBC Sofra + Cima + Cinema 1 + Cinema 2 + Discovery Channel Middle East & Africa + Disney Channel Middle East + DMC + DMC Drama + Dubai One + Dubai TV + Dubai Zaman + Echorouk TV + El Mehwar Channel + Watania 1 + Emarat TV + E! Middle East + ETC TV + Fann + FX + IFilm Arabic + Kuwait TV + KTV Al Qurain + KTV Khallik Bilbait + Lana TV + LBC + Maspero Zaman + MBC + MBC 2 + MBC 3 + MBC 4 + MBC 5 + MBC Action + MBC Bollywood + MBC Drama + MBC Maser + MBC Maser 2 + MBC Max + MBC Drama + + Mix Bel Araby + Mix Hollywood + MTV Alloubnaniya + Musawa + National Geographic Abu Dhabi + National Geographic Middle East + Nessma + Nile Comedy + Nile Drama + On Drama + On E + OSN Comedy + OSN Kids + OSN Action + OSN Movies + OSN Ya Hala + Rotana Cinema Egypt + Rotana Cinema KSA + Rotana Classic + Rotana Comedy + Rotana Drama + Rotana Khalijia + Rotana Kids + Rotana+ HD + Sada Elbalad + Sada Elbalad 2 + Sada Elbalad Drama + Sama Dubai + Sama TV + SBC + Sharjah TV + Star Movies Middle East + Star World Middle East + Syria Drama + Syria TV + Ten + Thikrayat TV + UTV + Watania 2 + Zee Aflam + Zee Alwan + \ No newline at end of file diff --git a/sites/elcinema.com/elcinema.com.config.js b/sites/elcinema.com/elcinema.com.config.js index 5271e598..878362f9 100644 --- a/sites/elcinema.com/elcinema.com.config.js +++ b/sites/elcinema.com/elcinema.com.config.js @@ -11,7 +11,6 @@ dayjs.extend(utc) module.exports = { site: 'elcinema.com', - skip: true, // NOTE: the guide shows the wrong time (https://github.com/iptv-org/epg/issues/994) days: 2, url({ channel }) { const lang = channel.lang === 'en' ? 'en/' : '/' diff --git a/sites/elcinema.com/elcinema.com.test.js b/sites/elcinema.com/elcinema.com.test.js index a64a4eb8..d7ea6e93 100644 --- a/sites/elcinema.com/elcinema.com.test.js +++ b/sites/elcinema.com/elcinema.com.test.js @@ -1,6 +1,6 @@ -// npx epg-grabber --config=sites/elcinema.com/elcinema.com.config.js --channels=sites/elcinema.com/elcinema.com.channels.xml --output=guide.xml --days=2 +// npm run grab -- --site=elcinema.com -const { parser, url, request } = require('./elcinema.com.config.js') +const { parser, url } = require('./elcinema.com.config.js') const fs = require('fs') const path = require('path') const dayjs = require('dayjs') @@ -63,7 +63,7 @@ it('can handle empty guide', () => { const result = parser({ date, channel: channelEN, - content: `` + content: '' }) expect(result).toMatchObject([]) }) diff --git a/sites/ena.skylifetv.co.kr/ena.skylifetv.co.kr.channels.xml b/sites/ena.skylifetv.co.kr/ena.skylifetv.co.kr.channels.xml index a01dc207..1af380ed 100644 --- a/sites/ena.skylifetv.co.kr/ena.skylifetv.co.kr.channels.xml +++ b/sites/ena.skylifetv.co.kr/ena.skylifetv.co.kr.channels.xml @@ -1,11 +1,9 @@ - - - ENA - ENA PLAY - kids talk talk plus - OLIFE - ONCE - skyUHD - - + + ENA + ENA PLAY + kids talk talk plus + OLIFE + ONCE + skyUHD + diff --git a/sites/ena.skylifetv.co.kr/ena.skylifetv.co.kr.config.js b/sites/ena.skylifetv.co.kr/ena.skylifetv.co.kr.config.js index 86e3791f..d8401689 100644 --- a/sites/ena.skylifetv.co.kr/ena.skylifetv.co.kr.config.js +++ b/sites/ena.skylifetv.co.kr/ena.skylifetv.co.kr.config.js @@ -61,7 +61,7 @@ function parseStart($item, date) { return dayjs.tz(`${date.format('YYYY-MM-DD')} ${time}`, 'YYYY-MM-DD HH:mm', 'Asia/Seoul') } -function parseItems(content, channel, date) { +function parseItems(content) { const $ = cheerio.load(content) return $('.tbl_schedule > tbody > tr').toArray() diff --git a/sites/ena.skylifetv.co.kr/ena.skylifetv.co.kr.test.js b/sites/ena.skylifetv.co.kr/ena.skylifetv.co.kr.test.js index ecf7e5ae..12c9255c 100644 --- a/sites/ena.skylifetv.co.kr/ena.skylifetv.co.kr.test.js +++ b/sites/ena.skylifetv.co.kr/ena.skylifetv.co.kr.test.js @@ -1,4 +1,4 @@ -// npx epg-grabber --config=sites/ena.skylifetv.co.kr/ena.skylifetv.co.kr.config.js --channels=sites/ena.skylifetv.co.kr/ena.skylifetv.co.kr.channels.xml --output=guide.xml --days=2 +// npm run grab -- --site=ena.skylifetv.co.kr const { parser, url } = require('./ena.skylifetv.co.kr.config.js') const fs = require('fs') @@ -31,7 +31,7 @@ it('can parse response', () => { expect(results[0]).toMatchObject({ start: '2023-01-26T16:05:00.000Z', stop: '2023-01-26T17:20:00.000Z', - title: `법쩐 6화`, + title: '법쩐 6화', rating: { system: 'KMRB', value: '15' @@ -41,7 +41,7 @@ it('can parse response', () => { expect(results[17]).toMatchObject({ start: '2023-01-27T14:10:00.000Z', stop: '2023-01-27T15:25:00.000Z', - title: `남이 될 수 있을까 4화`, + title: '남이 될 수 있을까 4화', rating: { system: 'KMRB', value: '15' diff --git a/sites/entertainment.ie/entertainment.ie.channels.xml b/sites/entertainment.ie/entertainment.ie.channels.xml index f5f18067..f4201bbb 100644 --- a/sites/entertainment.ie/entertainment.ie.channels.xml +++ b/sites/entertainment.ie/entertainment.ie.channels.xml @@ -1,113 +1,111 @@ - - - - - - - - - - - - - - - - 4Music - Alibi - Animal Planet - BBC Four - BBC Three - Boomerang - Box Nation - Cartoon Network - CBBC - CBeebies - CBS Drama - CBS Reality - Challenge - Channel 4 - Channel 5 - Comedy Central Extra - Comedy Central - Dave - Discovery Channel - Discovery History - Discovery Science - Discovery Turbo - DMAX - Drama - E4 - E4 Extra - Eden - Eurosport 1 - Eurosport 2 - Free Sports - GOLD - Great! Movies - Great! TV - HorrorXtra - Investigation Discovery - ITV2 - ITV3 - ITV4 - La Liga TV - Legend - More4 - MTV - National Geographic - National Geographic Wild - Nickelodeon - Nicktoons - Pick - Premier Sports 1 - Premier Sports 2 - Really - RTÉ2 - RTÉ Jr - RTÉ One - Sky Arts - Sky Atlantic - Sky Cinema Comedy - Sky Cinema Drama - Sky Cinema Family - Sky Cinema Greats - Sky Cinema Hits - Sky Cinema Premiere - Sky Cinema Sci-Fi - Horror - Sky Cinema Thriller - Sky Comedy - Sky Crime - Sky Documentaries - Sky History - Sky History 2 - Sky Max - Sky Nature - Sky Replay - Sky Sci-Fi - Sky Showcase - Sky Sports Arena HD - Sky Sports Cricket - Sky Sports Football - Sky Sports Golf - Sky Sports Main Event - Sky Sports Mix - Sky Sports NFL - Sky Sports Premier League ROI - Sky Witness - TG4 - TLC - TNT Sports 1 - TNT Sports 2 - TNT Sports 3 - UTV - Virgin Media Four - Virgin Media More - Virgin Media One - Virgin Media Three - Virgin Media Two - W - Yesterday - - + + + + + + + + + + + + + + + 4Music + Alibi + Animal Planet + BBC Four + BBC Three + Boomerang + Box Nation + Cartoon Network + CBBC + CBeebies + CBS Drama + CBS Reality + Challenge + Channel 4 + Channel 5 + Comedy Central Extra + Comedy Central + Dave + Discovery Channel + Discovery History + Discovery Science + Discovery Turbo + DMAX + Drama + E4 + E4 Extra + Eden + Eurosport 1 + Eurosport 2 + Free Sports + GOLD + Great! Movies + Great! TV + HorrorXtra + Investigation Discovery + ITV2 + ITV3 + ITV4 + La Liga TV + Legend + More4 + MTV + National Geographic + National Geographic Wild + Nickelodeon + Nicktoons + Pick + Premier Sports 1 + Premier Sports 2 + Really + RTÉ2 + RTÉ Jr + RTÉ One + Sky Arts + Sky Atlantic + Sky Cinema Comedy + Sky Cinema Drama + Sky Cinema Family + Sky Cinema Greats + Sky Cinema Hits + Sky Cinema Premiere + Sky Cinema Sci-Fi - Horror + Sky Cinema Thriller + Sky Comedy + Sky Crime + Sky Documentaries + Sky History + Sky History 2 + Sky Max + Sky Nature + Sky Replay + Sky Sci-Fi + Sky Showcase + Sky Sports Arena HD + Sky Sports Cricket + Sky Sports Football + Sky Sports Golf + Sky Sports Main Event + Sky Sports Mix + Sky Sports NFL + Sky Sports Premier League ROI + Sky Witness + TG4 + TLC + TNT Sports 1 + TNT Sports 2 + TNT Sports 3 + UTV + Virgin Media Four + Virgin Media More + Virgin Media One + Virgin Media Three + Virgin Media Two + W + Yesterday + diff --git a/sites/entertainment.ie/entertainment.ie.config.js b/sites/entertainment.ie/entertainment.ie.config.js index 337c7872..0ac331d1 100644 --- a/sites/entertainment.ie/entertainment.ie.config.js +++ b/sites/entertainment.ie/entertainment.ie.config.js @@ -37,7 +37,7 @@ module.exports = { }, async channels() { const data = await axios - .get(`https://entertainment.ie/tv/all-channels/`) + .get('https://entertainment.ie/tv/all-channels/') .then(r => r.data) .catch(console.log) const $ = cheerio.load(data) @@ -73,7 +73,7 @@ function parseCategories($item) { function parseStart($item, date) { let d = $item('.text-holder > .btn-hold > .btn-wrap > a.btn-share').data('time') - let [_, time] = d ? d.split(', ') : [null, null] + let [, time] = d ? d.split(', ') : [null, null] return time ? DateTime.fromFormat(`${date.format('YYYY-MM-DD')} ${time}`, 'yyyy-MM-dd HH:mm', { @@ -91,5 +91,5 @@ function parseDuration($item) { function parseItems(content) { const $ = cheerio.load(content) - return $(`.info-list > li`).toArray() + return $('.info-list > li').toArray() } diff --git a/sites/entertainment.ie/entertainment.ie.test.js b/sites/entertainment.ie/entertainment.ie.test.js index c88911a1..4f027098 100644 --- a/sites/entertainment.ie/entertainment.ie.test.js +++ b/sites/entertainment.ie/entertainment.ie.test.js @@ -1,5 +1,5 @@ // npm run channels:parse -- --config=./sites/entertainment.ie/entertainment.ie.config.js --output=./sites/entertainment.ie/entertainment.ie.channels.xml -// npx epg-grabber --config=sites/entertainment.ie/entertainment.ie.config.js --channels=sites/entertainment.ie/entertainment.ie.channels.xml --output=guide.xml +// npm run grab -- --site=entertainment.ie const fs = require('fs') const path = require('path') diff --git a/sites/epg.i-cable.com/epg.i-cable.com.channels.xml b/sites/epg.i-cable.com/epg.i-cable.com.channels.xml index 6d34440a..a5567e69 100644 --- a/sites/epg.i-cable.com/epg.i-cable.com.channels.xml +++ b/sites/epg.i-cable.com/epg.i-cable.com.channels.xml @@ -1,168 +1,166 @@ - - - ABC Australia - Al Jazeera English - Animal Planet - Arirang TV - Asian Food Network [HD] - BBC Earth - BBC Lifestyle - BBC WorldNews - Bloomberg TV - Boomerang - Cartoon Network - CBeebies - CCTV-1 [HD] - CCTV-11-Opera - CCTV-News - CCTV-4 - CGTN - CGTN-Documentary [HD] - Channel Blue - Channel Fire - Ch News Asia - CNBC HK - CNNI - Da Vinci - Discovery Asia [HD] - Discovery - Discovery Sci - DMAX - Dragon TV - DreamWorks - DW (Deutsch) - DW (English) - Asia YOYO TV - ETTV AsiaNews - ETTV Asia - euronews(Eng) - euronews(Por) - Eurosport - EVE - Fashion TV - FIGHT SPORTS - France 24 English - France 24 French - Global Trekker [HD] - GRT GBA Satellite TV - HITS [HD] - HITS MOVIES [HD] - HK Int’l Business Ch - CNN HLN News - HOY TV - Hubei TV - Hunan TV International - CABLE Movies - Channel 18 - Cine p. - Family Entertainment Channel - i-CABLE Finance Info Channel - HD Channel 603 [HD] - Horse Racing 1 - Horse Racing 2 - i-CABLE Live News Channel - i-CABLE News Channel - Sports Channel - Sports Plus 1 - Sports Plus 2 - Sports Plus 3 - LFCTV - MTV Live - MyCineEu - National Geographic - Nat Geo Wild - NHK World-Japan - NHK World Pr - Nickelodeon - Nick Jr. - Outdoor Channel - Paramount Network Asia [HD] - Pet Club TV - Phoenix Chi - Phoenix Hong Kong Channel - PhoenixInfonews - ROCK Entertainment - ROCK Extreme [HD] - Russia Today - SZTV - Sky News - STAR Chinese Channel - Star Chinese Movies [HD] - TechStorm [HD] - Thrill - TLC - Travel Channel [HD] - tvN - WION - Zee Cinema - Zee TV - Zing - 動物星球頻道 - 亞洲美食頻道 [HD] - BBC Earth - BBC Lifestyle - Bloomberg TV - Boomerang 頻道 - 卡通頻道 - 中央電視台綜合頻道 [HD] - 中央電視台戲曲頻道 - 中央電視台新聞頻道 - 中央電視台中文國際頻道 - 歡樂台 - 惹火台 - 亞洲新聞台 - Discovery Asia [HD] - Discovery - Discovery科學頻道 - DMAX - 東方衛視國際頻道 - 夢工廠 - 東森亞洲衛視 - 東森亞洲幼幼台 - 東森亞洲新聞台 - euronews(Eng) - euronews(Por) - EVE - Global Trekker [HD] - 大灣區衛視 - HITS [HD] - HITS MOVIES [HD] - 香港國際財經台 - HOY TV - 湖北衛視 - 湖南廣播電視台國際頻道 - 有線電影台 - 有線18台 - Cine p. - 綜合娛樂台 - 財經資訊台 - 高清603台 [HD] - 賽馬1台 - 賽馬2台 - 直播新聞台 - 新聞台 - 體育台 - Sports Plus 1 - Sports Plus 2 - Sports Plus 3 - 光影歐洲 - 國家地理頻道 - 國家地理野生頻道 - Nickelodeon - Paramount Network Asia [HD] - 鳯凰衛視中文台 - 鳳凰衛視香港台 - 鳳凰衛視資訊台 - ROCK綜藝娛樂 - ROCK超極娛樂 [HD] - 深圳電視台 - 衛視中文台 - 衛視電影台 [HD] - 驚慄電影台 - 旅遊生活頻道 - 旅遊頻道 [HD] - tvN - Zee Cinema - - + + DW (Deutsch) + ABC Australia + Al Jazeera English + Animal Planet + Arirang TV + Asian Food Network [HD] + BBC Earth + BBC Lifestyle + BBC WorldNews + Bloomberg TV + Boomerang + Cartoon Network + CBeebies + CCTV-1 [HD] + CCTV-11-Opera + CCTV-News + CCTV-4 + CGTN + CGTN-Documentary [HD] + Channel Blue + Channel Fire + Ch News Asia + CNBC HK + CNNI + Da Vinci + Discovery Asia [HD] + Discovery + Discovery Sci + DMAX + Dragon TV + DreamWorks + DW (English) + ETTV Asia + Asia YOYO TV + ETTV AsiaNews + euronews(Eng) + euronews(Por) + Eurosport + EVE + Fashion TV + FIGHT SPORTS + France 24 English + Global Trekker [HD] + GRT GBA Satellite TV + HITS [HD] + HITS MOVIES [HD] + HK Int’l Business Ch + CNN HLN News + HOY TV + Hubei TV + Hunan TV International + CABLE Movies + Channel 18 + Cine p. + Family Entertainment Channel + i-CABLE Finance Info Channel + HD Channel 603 [HD] + Horse Racing 1 + Horse Racing 2 + i-CABLE Live News Channel + i-CABLE News Channel + Sports Channel + Sports Plus 1 + Sports Plus 2 + Sports Plus 3 + LFCTV + MTV Live + MyCineEu + National Geographic + Nat Geo Wild + NHK World-Japan + NHK World Pr + Nickelodeon + Nick Jr. + Outdoor Channel + Paramount Network Asia [HD] + Pet Club TV + Phoenix Chi + Phoenix Hong Kong Channel + PhoenixInfonews + ROCK Entertainment + ROCK Extreme [HD] + Russia Today + SZTV + Sky News + STAR Chinese Channel + Star Chinese Movies [HD] + TechStorm [HD] + Thrill + TLC + Travel Channel [HD] + tvN + WION + Zee Cinema + Zing + France 24 French + Zee TV + 動物星球頻道 + 亞洲美食頻道 [HD] + BBC Earth + BBC Lifestyle + Bloomberg TV + Boomerang 頻道 + 卡通頻道 + 中央電視台綜合頻道 [HD] + 中央電視台戲曲頻道 + 中央電視台新聞頻道 + 中央電視台中文國際頻道 + 歡樂台 + 惹火台 + 亞洲新聞台 + Discovery Asia [HD] + Discovery + Discovery科學頻道 + DMAX + 東方衛視國際頻道 + 夢工廠 + 東森亞洲衛視 + 東森亞洲幼幼台 + 東森亞洲新聞台 + euronews(Eng) + euronews(Por) + EVE + Global Trekker [HD] + 大灣區衛視 + HITS [HD] + HITS MOVIES [HD] + 香港國際財經台 + HOY TV + 湖北衛視 + 湖南廣播電視台國際頻道 + 有線電影台 + 有線18台 + Cine p. + 綜合娛樂台 + 財經資訊台 + 高清603台 [HD] + 賽馬1台 + 賽馬2台 + 直播新聞台 + 新聞台 + 體育台 + Sports Plus 1 + Sports Plus 2 + Sports Plus 3 + 光影歐洲 + 國家地理頻道 + 國家地理野生頻道 + Nickelodeon + Paramount Network Asia [HD] + 鳯凰衛視中文台 + 鳳凰衛視香港台 + 鳳凰衛視資訊台 + ROCK綜藝娛樂 + ROCK超極娛樂 [HD] + 深圳電視台 + 衛視中文台 + 衛視電影台 [HD] + 驚慄電影台 + 旅遊生活頻道 + 旅遊頻道 [HD] + tvN + Zee Cinema + 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 be016007..20074174 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 @@ -75,11 +75,13 @@ function parseStart(item, date) { return DateTime.fromFormat( `${date.format('YYYY-MM-DD')} ${item.time} ${meridiem}`, 'yyyy-MM-dd hh:mm a', - { zone: 'Asia/Hong_Kong' } + { + zone: 'Asia/Hong_Kong' + } ).toUTC() } -function parseItems(content, date) { +function parseItems(content) { const data = JSON.parse(content) if (!data || !Array.isArray(data.epgs)) return [] diff --git a/sites/epg.i-cable.com/epg.i-cable.com.test.js b/sites/epg.i-cable.com/epg.i-cable.com.test.js index bc573f02..8fc59b98 100644 --- a/sites/epg.i-cable.com/epg.i-cable.com.test.js +++ b/sites/epg.i-cable.com/epg.i-cable.com.test.js @@ -1,13 +1,13 @@ // npm run channels:parse -- --config=./sites/epg.i-cable.com/epg.i-cable.com.config.js --output=./sites/epg.i-cable.com/epg.i-cable.com.channels.xml --set=lang:zh -// npx epg-grabber --config=sites/epg.i-cable.com/epg.i-cable.com.config.js --channels=sites/epg.i-cable.com/epg.i-cable.com.channels.xml --output=guide.xml +// npm run grab -- --site=epg.i-cable.com const { parser, url } = require('./epg.i-cable.com.config.js') const fs = require('fs') const path = require('path') -const axios = require('axios') const dayjs = require('dayjs') const utc = require('dayjs/plugin/utc') const customParseFormat = require('dayjs/plugin/customParseFormat') + dayjs.extend(customParseFormat) dayjs.extend(utc) diff --git a/sites/firstmedia.com/firstmedia.com.channels.xml b/sites/firstmedia.com/firstmedia.com.channels.xml index 1d8634cb..6bdba625 100644 --- a/sites/firstmedia.com/firstmedia.com.channels.xml +++ b/sites/firstmedia.com/firstmedia.com.channels.xml @@ -1,193 +1,183 @@ - - - ABC Australia - Al Jazeera Arabic - Al Jazeera International - Al Quran Al Kareem - ANHUI TV - Animal Planet - Animax - ANTV - Arirang - Asian Food Network - AXN - BabyFirst - - - Berita Satu - Berita Satu World - - BLOOMBERG TELEVISION - Boomerang HD - Cartoon Network - CCTV 4 - Celestial Movie - CGTN - CGTN Documentary HD - Champions TV 1 - Champions TV 2 - Champions TV 3 - Champions TV 4 SD - Channel News Asia - Cinema World HD - Cinemax - Citra Biskop HD - Citra Dangdut HD - CItra Drama HD - Citra Entertainment HD - Citra Muslim HD - - Crime - Investigation HD - Da Vinci HD - DAAI TV - Discovery Asia HD - Discovery Channel - - DMAX HD - Dragon TV - Dream Works HD - DW Deutsch - DW English - eGG Channel - Eternal Word Television - Network (EWTN)) - Euronews - - Fashion TV - - Food Network HD - Fox News - France 24 - Galaxy HD - Galaxy Premium HD - Garuda TV - GEM - GMS Channel - GTV - HBO - HBO Family - HBO Hits - HBO Signature - HGTV HD - History HD - HITS HD - HITS MOVIES HD - - - Horee! HD - Hunan TV - IDX Channel HD - IMC - Indosiar - iNews - - Jakarta TV - Jak TV - Jawa Pos Media Televisi - JTV - Jiangsu TV - - KBS World - KIX HD - Kompas TV - Lifetime HD - - - Love Nature 4K - Love Nature HD - - Metro Globe Network - MGN - Metro TV - MNC News - MTV Asia - MTV Live HD - MyZen TV HD - National - Geographic Channel - National - Geographic Wild - NET. - NHK World Japan HD - NHK World Premium - Nick jr. - Nickelodeon - O Channel - ONE - Paramount Network - HD - Phoenix Chinese Channel - Phoenix Info News - - Premier Sports - Rai Italia - Rajawali TV - Reformed 21 - Rock Entertainment HD - Rock Extreme - Russia Today - SCTV - SEA Today HD - - - Shine - Smithsonian HD - SPOTV - SPOTV 2 - Star Chinese Channel - Star Gold - Star Plus - Stingray Djazz HD - Stingray Festival 4K - - Stingray Naturescape HD - Stingray Now 4K - - Sunnah TV - TBN Asia - Tech Storm HD - The Learning Channel - TLC - TRANS 7 - TRANS TV - TRT World - - TV 5 Monde Style HD - TV One - TV PARLEMEN - TV5 Monde - TV9 - TVB Xing He - TVBS Asia - TVBS News - TVN HD - TVN Movies HD - TVRI Nasional - USA Today HD - - Wion - Xing Kong China - Zee Action - Zee Bioskop - Zee Bollywood - Zee Cinema - ZEE TV - Zhejiang TV - - \ No newline at end of file + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ABC Australia + Al Jazeera Arabic + Al Jazeera International + Al Quran Al Kareem + Sunnah TV + ANHUI TV + Animal Planet + Animax + ANTV + Arirang + Asian Food Network + AXN + BabyFirst + Berita Satu + Berita Satu World + BLOOMBERG TELEVISION + Boomerang HD + Cartoon Network + CCTV 4 + Celestial Movie + CGTN + CGTN Documentary HD + Champions TV 1 + Champions TV 2 + Champions TV 3 + Champions TV 4 SD + Cinema World HD + Cinemax + Citra Biskop HD + Citra Dangdut HD + CItra Drama HD + Citra Entertainment HD + Citra Muslim HD + Channel News Asia + Crime Investigation HD + DAAI TV + Da Vinci HD + Discovery Asia HD + Discovery Channel + DMAX HD + Dragon TV + Dream Works HD + DW Deutsch + DW English + eGG Channel + Euronews + Eternal Word Television Network (EWTN)) + Fashion TV + Food Network HD + Fox News + France 24 + Galaxy HD + Galaxy Premium HD + Garuda TV + GEM + GMS Channel + GTV + HBO + HBO Family + HBO Hits + HBO Signature + HGTV HD + History HD + HITS HD + HITS MOVIES HD + Horee! HD + Hunan TV + IDX Channel HD + IMC + Indosiar + iNews + Jakarta TV - Jak TV + Jiangsu TV + Jawa Pos Media Televisi - JTV + KBS World + KIX HD + Kompas TV + Lifetime HD + Love Nature 4K + Love Nature HD + Metro Globe Network - MGN + Metro TV + MNC News + MTV Asia + MTV Live HD + MyZen TV HD + National Geographic Channel + National Geographic Wild + NET. + NHK World Japan HD + NHK World Premium + Nickelodeon + Nick jr. + O Channel + ONE + Paramount Network HD + Phoenix Chinese Channel + Phoenix Info News + Premier Sports + Rai Italia + Rajawali TV + Reformed 21 + Rock Entertainment HD + Rock Extreme + Russia Today + SCTV + SEA Today HD + Shine + Smithsonian HD + SPOTV + SPOTV 2 + Star Chinese Channel + Star Gold + Star Plus + Stingray Djazz HD + Stingray Festival 4K + Stingray Naturescape HD + Stingray Now 4K + TBN Asia + Tech Storm HD + The Learning Channel - TLC + TRANS 7 + TRANS TV + TRT World + TV5 Monde + TV 5 Monde Style HD + TV9 + TVBS Asia + TVBS News + TVB Xing He + TVN HD + TVN Movies HD + TV One + TVRI Nasional + TV PARLEMEN + USA Today HD + Wion + Xing Kong China + Zee Action + Zee Bioskop + Zee Bollywood + Zee Cinema + ZEE TV + Zhejiang TV + \ No newline at end of file diff --git a/sites/firstmedia.com/firstmedia.com.config.js b/sites/firstmedia.com/firstmedia.com.config.js index 604ee012..75237b1e 100644 --- a/sites/firstmedia.com/firstmedia.com.config.js +++ b/sites/firstmedia.com/firstmedia.com.config.js @@ -1,54 +1,52 @@ -const dayjs = require("dayjs"); -const timezone = require("dayjs/plugin/timezone"); -const utc = require('dayjs/plugin/utc'); +const dayjs = require('dayjs') +const timezone = require('dayjs/plugin/timezone') +const utc = require('dayjs/plugin/utc') -dayjs.extend(timezone); -dayjs.extend(utc); +dayjs.extend(timezone) +dayjs.extend(utc) module.exports = { - site: "firstmedia.com", + site: 'firstmedia.com', days: 1, - request: { - timeout: 30000 // 30 seconds - }, url: function ({ channel, date }) { - return `https://www.firstmedia.com/ajax/schedule?date=${date.format("DD/MM/YYYY") - }&channel=${channel.site_id}&start_time=1&end_time=24&need_channels=0`; + return `https://www.firstmedia.com/ajax/schedule?date=${date.format('DD/MM/YYYY')}&channel=${ + channel.site_id + }&start_time=1&end_time=24&need_channels=0` }, parser: function ({ content, channel }) { - if (!content || !channel) return []; + if (!content || !channel) return [] - let programs = []; - const items = parseItems(content, channel.site_id); - items.forEach((item) => { + let programs = [] + const items = parseItems(content, channel.site_id) + items.forEach(item => { programs.push({ title: parseTitle(item), description: parseDescription(item), start: parseStart(item).toISOString(), - stop: parseStop(item).toISOString(), - }); - }); + stop: parseStop(item).toISOString() + }) + }) - return programs; - }, -}; + return programs + } +} function parseItems(content, channel) { - return JSON.parse(content.trim()).entries[channel]; + return JSON.parse(content.trim()).entries[channel] } function parseTitle(item) { - return item.title; + return item.title } function parseDescription(item) { - return item.long_description; + return item.long_description } function parseStart(item) { - return dayjs.tz(item.start_time, "YYYY-MM-DD HH:mm:ss", "Asia/Jakarta"); + return dayjs.tz(item.start_time, 'YYYY-MM-DD HH:mm:ss', 'Asia/Jakarta') } function parseStop(item) { - return dayjs.tz(item.end_time, "YYYY-MM-DD HH:mm:ss", "Asia/Jakarta"); + return dayjs.tz(item.end_time, 'YYYY-MM-DD HH:mm:ss', 'Asia/Jakarta') } diff --git a/sites/firstmedia.com/firstmedia.com.test.js b/sites/firstmedia.com/firstmedia.com.test.js index 8792b5fa..821fdaac 100644 --- a/sites/firstmedia.com/firstmedia.com.test.js +++ b/sites/firstmedia.com/firstmedia.com.test.js @@ -7,25 +7,29 @@ const date = dayjs.utc('2023-06-18', 'DD/MM/YYYY').startOf('d') const channel = { site_id: '251', xmltv_id: 'ABCAustralia.au', lang: 'id' } it('can generate valid url', () => { - expect(url({ channel, date })).toBe('https://www.firstmedia.com/ajax/schedule?date=18/06/2023&channel=251&start_time=1&end_time=24&need_channels=0') + expect(url({ channel, date })).toBe( + 'https://www.firstmedia.com/ajax/schedule?date=18/06/2023&channel=251&start_time=1&end_time=24&need_channels=0' + ) }) it('can parse response', () => { - const content = `{"entries":{"251":[{"logo":"files/images/d/new-logo/channels/11-NEWS/ABC Australia SD-FirstMedia-Chl-251.jpg","name":"ABC Australia","id":"2a800e8a-fdcc-47b3-a4a6-58d1d122b326","channel_id":"a1840c59-6c92-8233-3a02-230246aae0c4","channel_no":251,"programme_id":null,"episode":null,"title":"China Tonight","slug":null,"date":"2023-06-13 00:00:00","start_time":"2023-06-13 10:55:00","end_time":"2023-06-13 11:30:00","length":2100,"description":"China Tonight","long_description":"China is a superpower that dominates global news but it's also home to 1.4 billion stories. Sam Yang is back for a new season, hearing from the people who make this extraordinary nation what it is today.","status":"0","created_by":null,"updated_by":null,"created_at":"2023-06-13 00:20:24","updated_at":"2023-06-13 00:20:24"}]}}` - const results = parser({ content, channel }) + const content = + '{"entries":{"251":[{"logo":"files/images/d/new-logo/channels/11-NEWS/ABC Australia SD-FirstMedia-Chl-251.jpg","name":"ABC Australia","id":"2a800e8a-fdcc-47b3-a4a6-58d1d122b326","channel_id":"a1840c59-6c92-8233-3a02-230246aae0c4","channel_no":251,"programme_id":null,"episode":null,"title":"China Tonight","slug":null,"date":"2023-06-13 00:00:00","start_time":"2023-06-13 10:55:00","end_time":"2023-06-13 11:30:00","length":2100,"description":"China Tonight","long_description":"China is a superpower that dominates global news but it\'s also home to 1.4 billion stories. Sam Yang is back for a new season, hearing from the people who make this extraordinary nation what it is today.","status":"0","created_by":null,"updated_by":null,"created_at":"2023-06-13 00:20:24","updated_at":"2023-06-13 00:20:24"}]}}' + const results = parser({ content, channel }) - expect(results).toMatchObject([ - { - start: '2023-06-13T03:55:00.000Z', - stop: '2023-06-13T04:30:00.000Z', - title: 'China Tonight', - description: 'China is a superpower that dominates global news but it\'s also home to 1.4 billion stories. Sam Yang is back for a new season, hearing from the people who make this extraordinary nation what it is today.' - } - ]) + expect(results).toMatchObject([ + { + start: '2023-06-13T03:55:00.000Z', + stop: '2023-06-13T04:30:00.000Z', + title: 'China Tonight', + description: + "China is a superpower that dominates global news but it's also home to 1.4 billion stories. Sam Yang is back for a new season, hearing from the people who make this extraordinary nation what it is today." + } + ]) }) it('can handle empty guide', () => { - const results = parser({ content: '' }) + const results = parser({ content: '' }) - expect(results).toMatchObject([]) -}) \ No newline at end of file + expect(results).toMatchObject([]) +}) diff --git a/sites/flixed.io/flixed.io.channels.xml b/sites/flixed.io/flixed.io.channels.xml index c64c7f1a..6f68e202 100644 --- a/sites/flixed.io/flixed.io.channels.xml +++ b/sites/flixed.io/flixed.io.channels.xml @@ -1,498 +1,496 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ABC News Live - ACC Network (East) - AccuWeather - A&E (East) - A&E (West) - Al Jazeera America - Altitude Sports and Entertainment Network - AMC (East) - AMC (West) - American Heroes Channel - Animal Planet - Antenna TV - ASPiRE HD - AT&T SportsNet Pittsburgh - AT&T SportsNet Rocky Mountain - AT&T SportsNet Southwest - AXS TV - Bally Sports Arizona - Bally Sports Detroit - Bally Sports Florida - Bally Sports Great Lakes - Bally Sports Indiana - Bally Sports Kansas City - Bally Sports Midwest - Illinois - Bally Sports New Orleans (North) - Bally Sports North - Bally Sports Ohio 1 (Cleveland feed) - Bally Sports Ohio 2 (Cincinnati feed) - Bally Sports Oklahoma - Bally Sports San Diego - Bally Sports SoCal - Bally Sports South - Main Feed - Bally Sports Southeast - Bally Sports Southwest (Main Feed) - Bally Sports Sun - Bally Sports West - Bally Sports Wisconsin - BBC America - BBC World News - beIN SPORTS 3 - beIN SPORTS 4 - beIN SPORTS 5 - beIN SPORTS 6 - beIN SPORTS 7 - beIN SPORTS 8 - beIN Sports HD - BET (East) - BET Her - BET Jams - BET Soul - BET (West) - Big Ten Network - Big Ten Network Overflow - Bloomberg Business Television - Boomerang - Bravo (East) - Bravo (West) - BYU-TV - Cartoon Network (East) - Cartoon Network (West) - CBS (East) - CBS News Streaming - CBS Sports Network - CBS (West) - Cheddar News - Cheddar U - Cinemax (East) - Cinemax (West) - Sony Cine - Cleo TV - CMT (East) - CMT (West) - CNBC - CNBC World - CNN - CNN International HD - Comedy Central (East) - Comedy Central (West) - Comet - Cooking Channel - COZI TV HD - Crime & Investigation Network HD - CSPAN - CSPAN2 - CW (Central) - CW (East) - Destination America - Discovery Channel (East) - Discovery Channel (West) - Discovery Family Channel - Discovery Life Channel - Disney Channel (East) - Disney Channel (West) - Disney Junior - Disney XD (East) - Disney XD (West) - Do-It-Yourself Network HD - E! Entertainment (East) - ESPN - ESPN2 - ESPN3 South - ESPNEWS - ESPNU - E! Entertainment (West) - The Fight Network HD - Food Network (East) - Food Network (West) - Fox Business - FOX (East) - Fox News Channel - Fox Soccer Plus HD - Fox Sports 1 - Fox Sports 2 - FOX (West) - Freeform (East) - Freeform (West) - Fubo Sports Network - Fuse - Fusion HD - FX - FXM - FXX - FYI - Game Show Network - getTV - GINX eSports TV US - Golf Channel - GOLTV (English) HD - Hallmark Channel (East) - Hallmark Channel (West) - Hallmark Drama - Hallmark Movies & Mysteries HD - HBO2 (East) - HBO2 (West) - HBO Comedy HD - HBO (East) - HBO Family (East) - HBO Family (West) - HBO Signature (East) - HBO Signature (West) - HBO (West) - HBO Zone HD - Home & Garden Television (East) - Home & Garden Television (West) - History (East) - History (West) - HLN - IFC - INSP - Investigation Discovery - ION Television (Central) - ION Television (East) - ION Television (West) - Law & Crime Stream - Lifetime (East) - LMN - Lifetime (West) - Logo HD - Longhorn Network HD - Marquee Sports Network HD - MASN - Mid Atlantic Sports Network - MavTV HD - MGM+ Drive-in HD - MGM+ HD (East) - MGM+ Hits HD - MGM+ Marquee - MGM+ HD (West) - MLB Network - MLB Network Strike Zone - MoreMAX (East) - MoreMAX (West) - MOTORTREND HD - MSG National - MSG Plus Zone 1 - MSG Plus HD Zone 2 - MTV2: Music Television (East) - MTV2: Music Television (West) - MTV Classic - MTV - Music Television (East) - MTVLIVE - MTV - Music Television (West) - National Geographic USA - National Geographic Wild - NBA TV - NBC (Central) - NBC (East) - LX - NBC Sports Bay Area - NBC Sports Bay Area Plus - NBC Sports Boston - NBC Sports California - NBC Sports Chicago HD - NBC Sports Northwest - NBC Sports Philadelphia - NBC Sports Washington - NBC Sports Washington Plus HD - NBC (West) - Newsmax TV HD - NewsNation SD - Newsy - NFL Network HD - NFL RedZone - NHL Network - Nickelodeon (East) - Nickelodeon (West) - Nick Jr - Nick Music - Nicktoons - Olympic Channel - One America News Network - Outdoor Channel - Outside Television HD - Ovation - Oprah Winfrey Network (East) - Oprah Winfrey Network (West) - Oxygen (East) - Oxygen (West) - Pac-12 Arizona HD - Pac-12 Bay Area HD - Pac-12 Los Angeles HD - Pac-12 Mountain HD - Pac-12 Network - Pac-12 Oregon HD - Pac-12 Washington HD - Paramount Network (East) - Paramount Network (West) - PBS (East) - PBS (West) - PeopleTV - POP - QVC - QVC2 - Revolt HD - ROOT Sports Northwest - Science - SEC Network HD - Showtime 2 (East) - Showtime 2 (West) - Showtime (East) - Showtime Extreme (East) - Showtime Extreme (West) - Showtime Familyzone HD - Showtime Next HD - Showtime Showcase (East) - Showtime Showcase (West) - Showtime (West) - Showtime Women HD - SHO x BET - Smithsonian HD Network - Sony Movie Channel HD - Spectrum SportsNet - Spectrum SportsNet LA - The Sportsman Channel HD - Sportsnet East - Sportsnet NY - Sportsnet Ontario - Sportsnet (Pacific) - Sportsnet MST - Stadium HD - Stadium College Sports Atlantic - Stadium College Sports Central - Stadium College Sports Pacific - Starz Cinema HD - Starz Comedy HD - Starz (East) - Starz Edge - Starz Encore Classic - Starz Encore (East) - Starz Encore (West) - Starz in Black - Starz Kids - Starz (West) - SundanceTV (East) - SundanceTV (West) - SYFY (East) - SYFY (West) - Tastemade [Str] - TBS (East) - TBS (West) - Turner Classic Movies - Teen Nick HD - Tennis Channel - The Movie Channel (East) - The Movie Channel (West) - The Movie Channel Extra (East) - The Movie Channel Extra (West) - The Weather Channel - TLC (East) - TLC (West) - TNT (East) - TNT (West) - The Travel Channel (East) - The Travel Channel (West) - Trinity Broadcasting Network - truTV (East) - truTV (West) - TSN1 - TSN2 - TSN3 - TSN4 - TSN5 - TV Land (East) - TV Land (West) - TyC Sports International English - Universal Kids HD - UPtv HD - USA Network (East) - USA Network (West) - VH1 (East) - VH1 (West) - Vice - Vegas Sports & Information Network (VSIN) - WE tv (East) - WE tv (West) - Yes Network - Baby TV - beIN Sports En Español - CNN en Español - Discovery en Español - Discovery Familia HD - El Gourmet - ESPN Deportes - Estrella TV - Fox Deportes HD - Galavision Cable Network (East) - Galavision Cable Network (West) - GOLTV International HD - HBO Latino - History Channel En Español - MTV España - Nat Geo Mundo - UNIVERSO HD - Telefe Internacional - Telemundo (East) - Telemundo (West) - TUDN - TyC Sports International - UniMas (East) - UniMas (West) - Univision Network (East) - Univision Network (West) - Video Rola HD - WAPA America - BeIN SPORTS 2 HD - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ABC News Live + ACC Network (East) + AccuWeather + A&E (East) + A&E (West) + Al Jazeera America + Altitude Sports and Entertainment Network + AMC (East) + AMC (West) + American Heroes Channel + Animal Planet + Antenna TV + ASPiRE HD + AT&T SportsNet Pittsburgh + AT&T SportsNet Rocky Mountain + AT&T SportsNet Southwest + AXS TV + Bally Sports Arizona + Bally Sports Detroit + Bally Sports Florida + Bally Sports Great Lakes + Bally Sports Indiana + Bally Sports Kansas City + Bally Sports Midwest - Illinois + Bally Sports New Orleans (North) + Bally Sports North + Bally Sports Ohio 1 (Cleveland feed) + Bally Sports Ohio 2 (Cincinnati feed) + Bally Sports Oklahoma + Bally Sports San Diego + Bally Sports SoCal + Bally Sports South - Main Feed + Bally Sports Southeast + Bally Sports Southwest (Main Feed) + Bally Sports Sun + Bally Sports West + Bally Sports Wisconsin + BBC America + BBC World News + beIN SPORTS 3 + beIN SPORTS 4 + beIN SPORTS 5 + beIN SPORTS 6 + beIN SPORTS 7 + beIN SPORTS 8 + beIN Sports HD + BET (East) + BET Her + BET Jams + BET Soul + BET (West) + Big Ten Network + Big Ten Network Overflow + Bloomberg Business Television + Boomerang + Bravo (East) + Bravo (West) + BYU-TV + Cartoon Network (East) + Cartoon Network (West) + CBS (East) + CBS News Streaming + CBS Sports Network + CBS (West) + Cheddar News + Cheddar U + Cinemax (East) + Cinemax (West) + Sony Cine + Cleo TV + CMT (East) + CMT (West) + CNBC + CNBC World + CNN + CNN International HD + Comedy Central (East) + Comedy Central (West) + Comet + Cooking Channel + COZI TV HD + Crime & Investigation Network HD + CSPAN + CSPAN2 + CW (Central) + CW (East) + Destination America + Discovery Channel (East) + Discovery Channel (West) + Discovery Family Channel + Discovery Life Channel + Disney Channel (East) + Disney Channel (West) + Disney Junior + Disney XD (East) + Disney XD (West) + Do-It-Yourself Network HD + E! Entertainment (East) + ESPN + ESPN2 + ESPN3 South + ESPNEWS + ESPNU + E! Entertainment (West) + The Fight Network HD + Food Network (East) + Food Network (West) + Fox Business + FOX (East) + Fox News Channel + Fox Soccer Plus HD + Fox Sports 1 + Fox Sports 2 + FOX (West) + Freeform (East) + Freeform (West) + Fubo Sports Network + Fuse + Fusion HD + FX + FXM + FXX + FYI + Game Show Network + getTV + GINX eSports TV US + Golf Channel + GOLTV (English) HD + Hallmark Channel (East) + Hallmark Channel (West) + Hallmark Drama + Hallmark Movies & Mysteries HD + HBO2 (East) + HBO2 (West) + HBO Comedy HD + HBO (East) + HBO Family (East) + HBO Family (West) + HBO Signature (East) + HBO Signature (West) + HBO (West) + HBO Zone HD + Home & Garden Television (East) + Home & Garden Television (West) + History (East) + History (West) + HLN + IFC + INSP + Investigation Discovery + ION Television (Central) + ION Television (East) + ION Television (West) + Law & Crime Stream + Lifetime (East) + LMN + Lifetime (West) + Logo HD + Longhorn Network HD + Marquee Sports Network HD + MASN - Mid Atlantic Sports Network + MavTV HD + MGM+ Drive-in HD + MGM+ HD (East) + MGM+ Hits HD + MGM+ Marquee + MGM+ HD (West) + MLB Network + MLB Network Strike Zone + MoreMAX (East) + MoreMAX (West) + MOTORTREND HD + MSG National + MSG Plus Zone 1 + MSG Plus HD Zone 2 + MTV2: Music Television (East) + MTV2: Music Television (West) + MTV Classic + MTV - Music Television (East) + MTVLIVE + MTV - Music Television (West) + National Geographic USA + National Geographic Wild + NBA TV + NBC (Central) + NBC (East) + LX + NBC Sports Bay Area + NBC Sports Bay Area Plus + NBC Sports Boston + NBC Sports California + NBC Sports Chicago HD + NBC Sports Northwest + NBC Sports Philadelphia + NBC Sports Washington + NBC Sports Washington Plus HD + NBC (West) + Newsmax TV HD + NewsNation SD + Newsy + NFL Network HD + NFL RedZone + NHL Network + Nickelodeon (East) + Nickelodeon (West) + Nick Jr + Nick Music + Nicktoons + Olympic Channel + One America News Network + Outdoor Channel + Outside Television HD + Ovation + Oprah Winfrey Network (East) + Oprah Winfrey Network (West) + Oxygen (East) + Oxygen (West) + Pac-12 Arizona HD + Pac-12 Bay Area HD + Pac-12 Los Angeles HD + Pac-12 Mountain HD + Pac-12 Network + Pac-12 Oregon HD + Pac-12 Washington HD + Paramount Network (East) + Paramount Network (West) + PBS (East) + PBS (West) + PeopleTV + POP + QVC + QVC2 + Revolt HD + ROOT Sports Northwest + Science + SEC Network HD + Showtime 2 (East) + Showtime 2 (West) + Showtime (East) + Showtime Extreme (East) + Showtime Extreme (West) + Showtime Familyzone HD + Showtime Next HD + Showtime Showcase (East) + Showtime Showcase (West) + Showtime (West) + Showtime Women HD + SHO x BET + Smithsonian HD Network + Sony Movie Channel HD + Spectrum SportsNet + Spectrum SportsNet LA + The Sportsman Channel HD + Sportsnet East + Sportsnet NY + Sportsnet Ontario + Sportsnet (Pacific) + Sportsnet MST + Stadium HD + Stadium College Sports Atlantic + Stadium College Sports Central + Stadium College Sports Pacific + Starz Cinema HD + Starz Comedy HD + Starz (East) + Starz Edge + Starz Encore Classic + Starz Encore (East) + Starz Encore (West) + Starz in Black + Starz Kids + Starz (West) + SundanceTV (East) + SundanceTV (West) + SYFY (East) + SYFY (West) + Tastemade [Str] + TBS (East) + TBS (West) + Turner Classic Movies + Teen Nick HD + Tennis Channel + The Movie Channel (East) + The Movie Channel (West) + The Movie Channel Extra (East) + The Movie Channel Extra (West) + The Weather Channel + TLC (East) + TLC (West) + TNT (East) + TNT (West) + The Travel Channel (East) + The Travel Channel (West) + Trinity Broadcasting Network + truTV (East) + truTV (West) + TSN1 + TSN2 + TSN3 + TSN4 + TSN5 + TV Land (East) + TV Land (West) + TyC Sports International English + Universal Kids HD + UPtv HD + USA Network (East) + USA Network (West) + VH1 (East) + VH1 (West) + Vice + Vegas Sports & Information Network (VSIN) + WE tv (East) + WE tv (West) + Yes Network + Baby TV + beIN Sports En Español + CNN en Español + Discovery en Español + Discovery Familia HD + El Gourmet + ESPN Deportes + Estrella TV + Fox Deportes HD + Galavision Cable Network (East) + Galavision Cable Network (West) + GOLTV International HD + HBO Latino + History Channel En Español + MTV España + Nat Geo Mundo + UNIVERSO HD + Telefe Internacional + Telemundo (East) + Telemundo (West) + TUDN + TyC Sports International + UniMas (East) + UniMas (West) + Univision Network (East) + Univision Network (West) + Video Rola HD + WAPA America + BeIN SPORTS 2 HD + diff --git a/sites/flixed.io/flixed.io.config.js b/sites/flixed.io/flixed.io.config.js index 6ae463f2..5dfb5e0a 100644 --- a/sites/flixed.io/flixed.io.config.js +++ b/sites/flixed.io/flixed.io.config.js @@ -40,6 +40,6 @@ function parseStop(item) { return dayjs(item.endTime) } -function parseItems(content, channel) { +function parseItems(content) { return JSON.parse(content) } diff --git a/sites/flixed.io/flixed.io.test.js b/sites/flixed.io/flixed.io.test.js index 9f501c0a..e22d4b15 100644 --- a/sites/flixed.io/flixed.io.test.js +++ b/sites/flixed.io/flixed.io.test.js @@ -1,4 +1,4 @@ -// npx epg-grabber --config=sites/flixed.io/flixed.io.config.js --channels=sites/flixed.io/flixed.io.channels.xml --output=guide.xml --days=1 +// npm run grab -- --site=flixed.io const { parser, url } = require('./flixed.io.config.js') const fs = require('fs') @@ -17,7 +17,7 @@ const channel = { it('can generate valid url', () => { expect(url({ date, channel })).toBe( - `https://tv-guide.vercel.app/api/stationAirings?stationId=108970&startDateTime=2023-01-19T00:00:00.000Z` + 'https://tv-guide.vercel.app/api/stationAirings?stationId=108970&startDateTime=2023-01-19T00:00:00.000Z' ) }) @@ -42,7 +42,7 @@ it('can parse response', () => { it('can handle empty guide', () => { const results = parser({ - content: `[]` + content: '[]' }) expect(results).toMatchObject([]) diff --git a/sites/foxsports.com.au/foxsports.com.au.channels.xml b/sites/foxsports.com.au/foxsports.com.au.channels.xml index d7bc38b2..6de80a18 100644 --- a/sites/foxsports.com.au/foxsports.com.au.channels.xml +++ b/sites/foxsports.com.au/foxsports.com.au.channels.xml @@ -1,21 +1,19 @@ - - - FOX Cricket - FOX Footy - FOX League - FOX Sports 503 - FOX Sports 505 - FOX Sports 506 - FOX Sports More - FOX Sports News - - - - - - - - - - \ No newline at end of file + + + + + + + + + + FOX Cricket + FOX Footy + FOX League + FOX Sports 503 + FOX Sports 505 + FOX Sports 506 + FOX Sports More + FOX Sports News + \ No newline at end of file diff --git a/sites/foxsports.com.au/foxsports.com.au.test.js b/sites/foxsports.com.au/foxsports.com.au.test.js index 77dfff52..52090f73 100644 --- a/sites/foxsports.com.au/foxsports.com.au.test.js +++ b/sites/foxsports.com.au/foxsports.com.au.test.js @@ -1,4 +1,4 @@ -// npx epg-grabber --config=sites/foxsports.com.au/foxsports.com.au.config.js --channels=sites/foxsports.com.au/foxsports.com.au.channels.xml --output=guide.xml --days=2 +// npm run grab -- --site=foxsports.com.au const { parser, url } = require('./foxsports.com.au.config.js') const dayjs = require('dayjs') @@ -17,7 +17,8 @@ it('can generate valid url', () => { }) it('can parse response', () => { - const content = `{"channel-programme":[{"id":"31cc8b4c-3711-49f0-bf22-2ec3993b0a07","programmeTitle":"NRL","title":"Eels v Titans","startTime":"2022-12-14T00:00:00+11:00","endTime":"2022-12-14T01:00:00+11:00","duration":60,"live":false,"genreId":"5c389cf4-8db7-4b52-9773-52355bd28559","channelId":2,"channelName":"FOX League","channelAbbreviation":"LEAGUE","programmeUID":235220,"round":"R1","statsMatchId":null,"closedCaptioned":true,"statsFixtureId":10207,"genreTitle":"Rugby League","parentGenreId":"a953f929-2d12-41a4-b0e9-97f401afff11","parentGenreTitle":"Sport","pmgId":"PMG01306944","statsSport":"league","type":"GAME","hiDef":true,"widescreen":true,"classification":"","synopsis":"The Eels and Titans have plenty of motivation this season after heartbreaking Finals losses in 2021. Parramatta has won their past five against Gold Coast.","preGameStartTime":null,"closeCaptioned":true}]}` + const content = + '{"channel-programme":[{"id":"31cc8b4c-3711-49f0-bf22-2ec3993b0a07","programmeTitle":"NRL","title":"Eels v Titans","startTime":"2022-12-14T00:00:00+11:00","endTime":"2022-12-14T01:00:00+11:00","duration":60,"live":false,"genreId":"5c389cf4-8db7-4b52-9773-52355bd28559","channelId":2,"channelName":"FOX League","channelAbbreviation":"LEAGUE","programmeUID":235220,"round":"R1","statsMatchId":null,"closedCaptioned":true,"statsFixtureId":10207,"genreTitle":"Rugby League","parentGenreId":"a953f929-2d12-41a4-b0e9-97f401afff11","parentGenreTitle":"Sport","pmgId":"PMG01306944","statsSport":"league","type":"GAME","hiDef":true,"widescreen":true,"classification":"","synopsis":"The Eels and Titans have plenty of motivation this season after heartbreaking Finals losses in 2021. Parramatta has won their past five against Gold Coast.","preGameStartTime":null,"closeCaptioned":true}]}' const result = parser({ content, channel }).map(p => { p.start = p.start.toJSON() @@ -29,7 +30,8 @@ it('can parse response', () => { { title: 'NRL', sub_title: 'Eels v Titans', - description: `The Eels and Titans have plenty of motivation this season after heartbreaking Finals losses in 2021. Parramatta has won their past five against Gold Coast.`, + description: + 'The Eels and Titans have plenty of motivation this season after heartbreaking Finals losses in 2021. Parramatta has won their past five against Gold Coast.', category: 'Rugby League', start: '2022-12-13T13:00:00.000Z', stop: '2022-12-13T14:00:00.000Z' @@ -40,7 +42,7 @@ it('can parse response', () => { it('can handle empty guide', () => { const result = parser( { - content: `{"channel-programme":[]}` + content: '{"channel-programme":[]}' }, channel ) diff --git a/sites/foxtel.com.au/foxtel.com.au.channels.xml b/sites/foxtel.com.au/foxtel.com.au.channels.xml index 8ee54930..a4f919e2 100644 --- a/sites/foxtel.com.au/foxtel.com.au.channels.xml +++ b/sites/foxtel.com.au/foxtel.com.au.channels.xml @@ -1,197 +1,195 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/sites/foxtel.com.au/foxtel.com.au.config.js b/sites/foxtel.com.au/foxtel.com.au.config.js index a93699b1..e8674256 100644 --- a/sites/foxtel.com.au/foxtel.com.au.config.js +++ b/sites/foxtel.com.au/foxtel.com.au.config.js @@ -3,7 +3,6 @@ const dayjs = require('dayjs') const cheerio = require('cheerio') module.exports = { - skip: true, // returns "Access Denied" or nothing site: 'foxtel.com.au', days: 2, url({ channel, date }) { @@ -17,13 +16,13 @@ module.exports = { Cookie: 'AAMC_foxtel_0=REGION|6' } }, - parser: function ({ content }) { + parser: function ({ content, date }) { let programs = [] const items = parseItems(content) for (let item of items) { const $item = cheerio.load(item) const prev = programs[programs.length - 1] - const start = parseStart($item) + let start = parseStart($item) if (prev) { if (start.isBefore(prev.start)) { start = start.add(1, 'd') @@ -48,7 +47,7 @@ module.exports = { }, async channels() { const data = await axios - .get(`https://www.foxtel.com.au/webepg/ws/foxtel/channels?regionId=8336`, { + .get('https://www.foxtel.com.au/webepg/ws/foxtel/channels?regionId=8336', { headers: { 'Accept-Language': 'en-US,en;', Cookie: 'AAMC_foxtel_0=REGION|6' @@ -58,11 +57,11 @@ module.exports = { .catch(console.log) return data.channels.forEach(item => { - let name = item.name.replace(/\+/g, '-').replace(/\&/g, '') + let name = item.name.replace(/\+/g, '-').replace(/&/g, '') const slug = name.replace(/[^a-z0-9\s]/gi, '').replace(/[^a-z0-9]/i, '-') return { - name: item.name.replace(/\&/g, '&'), + name: item.name.replace(/&/g, '&'), site_id: `${slug}/${item.channelTag}` } }) @@ -72,7 +71,7 @@ module.exports = { function parseSeason($item) { let seasonString = $item('.epg-event-description > div > abbr:nth-child(1)').attr('title') if (!seasonString) return null - let [_, season] = seasonString.match(/^Season: (\d+)/) || [null, null] + let [, season] = seasonString.match(/^Season: (\d+)/) || [null, null] return season ? parseInt(season) : null } @@ -80,7 +79,7 @@ function parseSeason($item) { function parseEpisode($item) { let episodeString = $item('.epg-event-description > div > abbr:nth-child(2)').attr('title') if (!episodeString) return null - let [_, episode] = episodeString.match(/^Episode: (\d+)/) || [null, null] + let [, episode] = episodeString.match(/^Episode: (\d+)/) || [null, null] return episode ? parseInt(episode) : null } @@ -104,14 +103,14 @@ function parseSubTitle($item) { .split(',') subtitle = subtitle.pop() - const [_, rating] = subtitle.match(/\(([^)]+)\)$/) || [null, null] + const [, rating] = subtitle.match(/\(([^)]+)\)$/) || [null, null] return subtitle.replace(`(${rating})`, '').trim() } function parseRating($item) { const subtitle = $item('.epg-event-description > div').text().trim() - const [_, rating] = subtitle.match(/\(([^)]+)\)$/) || [null, null] + const [, rating] = subtitle.match(/\(([^)]+)\)$/) || [null, null] return rating ? { @@ -131,5 +130,5 @@ function parseItems(content) { if (!content) return [] const $ = cheerio.load(content) - return $(`#epg-channel-events > a`).toArray() + return $('#epg-channel-events > a').toArray() } diff --git a/sites/foxtel.com.au/foxtel.com.au.test.js b/sites/foxtel.com.au/foxtel.com.au.test.js index a30f301a..a3779b7f 100644 --- a/sites/foxtel.com.au/foxtel.com.au.test.js +++ b/sites/foxtel.com.au/foxtel.com.au.test.js @@ -1,5 +1,5 @@ // npm run channels:parse -- --config=./sites/foxtel.com.au/foxtel.com.au.config.js --output=./sites/foxtel.com.au/foxtel.com.au.channels.xml -// npx epg-grabber --config=sites/foxtel.com.au/foxtel.com.au.config.js --channels=sites/foxtel.com.au/foxtel.com.au.channels.xml --output=guide.xml --days=2 +// npm run grab -- --site=foxtel.com.au const { parser, url, request } = require('./foxtel.com.au.config.js') const fs = require('fs') diff --git a/sites/frikanalen.no/frikanalen.no.channels.xml b/sites/frikanalen.no/frikanalen.no.channels.xml index 4cd7379b..ae3ce2fa 100644 --- a/sites/frikanalen.no/frikanalen.no.channels.xml +++ b/sites/frikanalen.no/frikanalen.no.channels.xml @@ -1,6 +1,4 @@ - - - Frikanalen - - \ No newline at end of file + + Frikanalen + \ No newline at end of file diff --git a/sites/frikanalen.no/frikanalen.no.test.js b/sites/frikanalen.no/frikanalen.no.test.js index 33606a0a..8c9fb2da 100644 --- a/sites/frikanalen.no/frikanalen.no.test.js +++ b/sites/frikanalen.no/frikanalen.no.test.js @@ -1,4 +1,4 @@ -// npx epg-grabber --config=sites/frikanalen.no/frikanalen.no.config.js --channels=sites/frikanalen.no/frikanalen.no.channels.xml --output=guide.xml --days=2 +// npm run grab -- --site=frikanalen.no const { parser, url } = require('./frikanalen.no.config.js') const dayjs = require('dayjs') @@ -20,7 +20,8 @@ it('can generate valid url', () => { }) it('can parse response', () => { - const content = `{"count":83,"next":null,"previous":null,"results":[{"id":135605,"video":{"id":626094,"name":"FSCONS 2017 - Keynote: TBA - Linda Sandvik","header":"Linda Sandvik's keynote at FSCONS 2017\\r\\n\\r\\nRecorded by NUUG for FSCONS.","description":null,"creator":"davidwnoble@gmail.com","organization":{"id":82,"name":"NUUG","homepage":"https://www.nuug.no/","description":"Forening NUUG er for alle som er interessert i fri programvare, åpne standarder og Unix-lignende operativsystemer.","postalAddress":"","streetAddress":"","editorId":2148,"editorName":"David Noble","editorEmail":"davidwnoble@gmail.com","editorMsisdn":"","fkmember":true},"duration":"00:57:55.640000","categories":["Samfunn"]},"schedulereason":5,"starttime":"2022-01-19T00:47:00+01:00","endtime":"2022-01-19T01:44:55.640000+01:00","duration":"00:57:55.640000"}]}` + const content = + '{"count":83,"next":null,"previous":null,"results":[{"id":135605,"video":{"id":626094,"name":"FSCONS 2017 - Keynote: TBA - Linda Sandvik","header":"Linda Sandvik\'s keynote at FSCONS 2017\\r\\n\\r\\nRecorded by NUUG for FSCONS.","description":null,"creator":"davidwnoble@gmail.com","organization":{"id":82,"name":"NUUG","homepage":"https://www.nuug.no/","description":"Forening NUUG er for alle som er interessert i fri programvare, åpne standarder og Unix-lignende operativsystemer.","postalAddress":"","streetAddress":"","editorId":2148,"editorName":"David Noble","editorEmail":"davidwnoble@gmail.com","editorMsisdn":"","fkmember":true},"duration":"00:57:55.640000","categories":["Samfunn"]},"schedulereason":5,"starttime":"2022-01-19T00:47:00+01:00","endtime":"2022-01-19T01:44:55.640000+01:00","duration":"00:57:55.640000"}]}' const result = parser({ content }).map(p => { p.start = p.start.toJSON() p.stop = p.stop.toJSON() @@ -31,9 +32,9 @@ it('can parse response', () => { { start: '2022-01-18T23:47:00.000Z', stop: '2022-01-19T00:44:55.640Z', - title: `FSCONS 2017 - Keynote: TBA - Linda Sandvik`, + title: 'FSCONS 2017 - Keynote: TBA - Linda Sandvik', category: ['Samfunn'], - description: `Linda Sandvik's keynote at FSCONS 2017\r\n\r\nRecorded by NUUG for FSCONS.` + description: "Linda Sandvik's keynote at FSCONS 2017\r\n\r\nRecorded by NUUG for FSCONS." } ]) }) @@ -42,7 +43,7 @@ it('can handle empty guide', () => { const result = parser({ date, channel, - content: `{"count":0,"next":null,"previous":null,"results":[]}` + content: '{"count":0,"next":null,"previous":null,"results":[]}' }) expect(result).toMatchObject([]) }) diff --git a/sites/gatotv.com/gatotv.com.channels.xml b/sites/gatotv.com/gatotv.com.channels.xml index 80a9fdae..6e9e1106 100644 --- a/sites/gatotv.com/gatotv.com.channels.xml +++ b/sites/gatotv.com/gatotv.com.channels.xml @@ -1,492 +1,490 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - M+ #0 - 24 Horas Chile - M+ Acción - ADN 40 - Adrenalina Sports Network - A&E Chile - A&E México - A&E PAN - Afizzionados - Agrotendencia TV - AMC Crime - AMC España - América Televisión Perú - America TV Argentina - Antena 3 de España - Antena 3 Internacional - 7 de República Dominicana - a+ - Aprende - Atreseries España - Atreseries Internacional - ATV - AXN Andes - AXN México - AXN Sur - AYM Sports - Azteca 7 - Azteca Guate - Azteca Uno - BabyFirst TV - Bandamax - Barça TV - beIN Sports en Español - Be Mad - BET Jams - BitMe - Boing España - 9 Noticias Paraguay - Cablenoticias - Calle 13 - 1 Colombia - 11 de Costa Rica - 12 de El Salvador - 13 de Chile - 2 de Nicaragua - 2 de El Salvador - 24 Horas - 27 de Guatemala - 3 de Guatemala - 4 de Costa Rica - 4 de El Salvador - 5 de Honduras - 6 de Costa Rica - 6 de El Salvador - Multimedios Costa Rica - Canal Antigua - Cocina - Canal Congreso Colombia - Institucional Colombia - Sur - Sur Andalucía - Tro - Caracol Internacional - Caracol Colombia - Cartoonito México - Cartoon Network México - Cartoon Network Atlántico Norte - Cartoon Network Pacífico - Cartoon Network Atlántico Sur - 37 de República Dominicana - CDN Deportes - Chilevisión (CHV) - Cinecanal México - Cinecanal Pacífico - Cinecanal Sur - CineClick - Cine Estelar - Cinelatino - Cinema Platino - Cinema + - Cinemax Chile - Cinemax México - Cinemax Panregional - Cine Mexicano - Cine Nostalgia - Cine Sony - Clan TVE - Claro Música - Classica - Castilla-La Mancha Media - CNN Chile - CNN en Español - CNN Internacional - 9 de República Dominicana - M+ Comedia - Comedy Central España - Concert Channel - Cosmopolitan España - Cuatro de España - Decasa - De Película Clásico - DHE - 15 de República Dominicana - Discovery Channel Chile - Discovery Channel México - Discovery Channel España - Discovery en Español - Discovery Familia - Discovery H&H MX - Discovery Kids Chile - Discovery Kids MX - Discovery Science LATAM - Discovery Theater LATAM. - Disney Channel Centro - Disney Channel Sur - Disney Channel España - Disney Junior Norte - Disney Junior Sur - Disney Junior España - Distrito Comedia - Divinity - Ecuador TV - Ecuavisa Ecuador - Ecuavisa Internacional - Efekto TV - El Financiero - Bloomberg - 13 de Argentina - Energy - ESNE TV - ESPN 2 Colombia - ESPN 2 México - ESPN 2 Norte - ESPN 3 Norte - ESPN 3 Sur - ESPN 4 Chile - ESPN 4 Norte - ESPN Chile - ESPN Colombia - ESPN Deportes - ESPN México - ESPN Norte - Estrella TV - ETB 1 - ETB 2 - Eurochannel - Europa Europa - Eurosport 1 España - Eurosport 2 España - Exa TV - Excelsior TV - 42 de Costa Rica - Foro TV - Fox Deportes - Fox News - Fox España - FUTV - FX Chile - FX México - Gamavisión - Golden Panregional - Golden Plus - Golden Premier - Golden Premier 2 - Golf Channel Latinoamérica - GolTV Lat. - Guatevisión - HBO 2 LATAM - HBO Family LATAM - HBO Latinoamérica - HBO Latino Este - HBO Mundi - HBO Plus - HBO Pop - HBO Signature LATAM - HBO Xtreme - Historia España - History 2 México - History 2 Panregional - History Chile - History en Español - History MX - History Panregional - HITN - HLN - ¡Hola! TV - HTV - Iberalia TV - Ingenio TV México - Inti Network - ID México - ID Panregional - Justicia TV - La 1 - La 2 - M+ LaLiga - laOtra - La Red TV Guatemala - 2 de México - Las Estrellas LATAM - La Sexta - La Tele Paraguay - Frecuencia Latina - Lifetime México - Lifetime PAN - María Visión - MC - Mega Chile - Mega España - Meganoticias MX - 12 de El Salvador - Mexiquense TV - Milenio - MTV 00s - MTV 80S - MTV Sur - MTV España - Multimedios Plus - National Geographic México - National Geographic España - Universo - Neox - NFL Network - NHK World - Nickelodeon México - Nickelodeon España - Nick Jr. España - NickMusic - Nova - Noticias PY - NTN24 - Odisea - Pakapaka - Panamericana Televisión - Pánico - Paraguay TV - Paramount Channel ES - Paravisión - Pasiones Estados Unidos - Pasiones Latinoamérica - Perú Mágico - PX Sports - RCN Novelas - Real Madrid TV - 4 de Panamá - RTS - Semillitas - Señal Colombia - Sky One México - Sky Sports 1 México - Sky Sports 16 - Sky Sports 24 - SNT - Sony México - Sorpresa - Space México - Space Panregional - Space Sur - Star Channel México - Studio Universal México - Studio Universal Panregional - Sundance TV España - Sur TV Itapúa Paraguay - Syfy España - TCM Panregional - TCM España - TC Televisión - TeenNick - Teleamazonas - 2 de República Dominicana - Teleantioquia - 7 y 4 de Honduras - Telecafé - Telecaribe - 13 de República Dominicana - Telecentro TV - Telecinco - Teledeporte - Telefé (Argentina) - Telefe Internacional - Telefórmula - Telefuturo - Telehit - Telehit Música - Teleislas - TeleMadrid - Telemetro - Telemicro - Telemundo México - Telenostalgia - 11 de Guatemala - Telepacífico - 11 de República Dominicana - 7 de Costa Rica - Teleunion - 29 de República Dominicana - 4 de Guadalajara - 7 de Guatemala - Tigo Sports Costa Rica - Tigo Sports El Salvador - Tigo Sports Guatemala - TLC MX - TLC Panregional - TLNovelas LATAM - TLNovelas México - TNT México - TNT Pacífico - TNT Sur - TNT España - TNT Sports 2 Chile - TNT Sports 3 Chile - Tooncast - 13 de Colombia - 13 de Paraguay - 13 de Costa Rica - truTV Lat. - Telesistema Informativo (TSI) - TUDN USA - TUDN México - TV5Monde - TV Canaria - TVC Deportes - TV Chile - TVE Internacional - TV Globo Internacional - 9 de Panamá - TVN Chile - 2 de Panamá - Televisión Pública Argentina - TVUNAM - TyC Sports - Unicable MX - Unicanal - Universal Cinema - Universal Comedy - Universal Crime - Universal Premiere - Universal Reality - Universal TV México - Universal TV Panregional - Univision TLNovelas - M+ #Vamos - Ve Plus Estados Unidos - Vía X - Vibra TV - Video Rola - ViendoMovies - 13 de Nicaragua - VTV Honduras - WAPA-TV - WAPA 2 Deportes - Willax TV - Punto 2 - WOBI - 13 de Puerto Rico - 4 de Monterrey - 22 de México - 11 de México - Zona Latina - ZOOM Colombia - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + M+ #0 + 24 Horas Chile + M+ Acción + ADN 40 + Adrenalina Sports Network + A&E Chile + A&E México + A&E PAN + Afizzionados + Agrotendencia TV + AMC Crime + AMC España + América Televisión Perú + America TV Argentina + Antena 3 de España + Antena 3 Internacional + 7 de República Dominicana + a+ + Aprende + Atreseries España + Atreseries Internacional + ATV + AXN Andes + AXN México + AXN Sur + AYM Sports + Azteca 7 + Azteca Guate + Azteca Uno + BabyFirst TV + Bandamax + Barça TV + beIN Sports en Español + Be Mad + BET Jams + BitMe + Boing España + 9 Noticias Paraguay + Cablenoticias + Calle 13 + 1 Colombia + 11 de Costa Rica + 12 de El Salvador + 13 de Chile + 2 de Nicaragua + 2 de El Salvador + 24 Horas + 27 de Guatemala + 3 de Guatemala + 4 de Costa Rica + 4 de El Salvador + 5 de Honduras + 6 de Costa Rica + 6 de El Salvador + Multimedios Costa Rica + Canal Antigua + Cocina + Canal Congreso Colombia + Institucional Colombia + Sur + Sur Andalucía + Tro + Caracol Internacional + Caracol Colombia + Cartoonito México + Cartoon Network México + Cartoon Network Atlántico Norte + Cartoon Network Pacífico + Cartoon Network Atlántico Sur + 37 de República Dominicana + CDN Deportes + Chilevisión (CHV) + Cinecanal México + Cinecanal Pacífico + Cinecanal Sur + CineClick + Cine Estelar + Cinelatino + Cinema Platino + Cinema + + Cinemax Chile + Cinemax México + Cinemax Panregional + Cine Mexicano + Cine Nostalgia + Cine Sony + Clan TVE + Claro Música + Classica + Castilla-La Mancha Media + CNN Chile + CNN en Español + CNN Internacional + 9 de República Dominicana + M+ Comedia + Comedy Central España + Concert Channel + Cosmopolitan España + Cuatro de España + Decasa + De Película Clásico + DHE + 15 de República Dominicana + Discovery Channel Chile + Discovery Channel México + Discovery Channel España + Discovery en Español + Discovery Familia + Discovery H&H MX + Discovery Kids Chile + Discovery Kids MX + Discovery Science LATAM + Discovery Theater LATAM. + Disney Channel Centro + Disney Channel Sur + Disney Channel España + Disney Junior Norte + Disney Junior Sur + Disney Junior España + Distrito Comedia + Divinity + Ecuador TV + Ecuavisa Ecuador + Ecuavisa Internacional + Efekto TV + El Financiero - Bloomberg + 13 de Argentina + Energy + ESNE TV + ESPN 2 Colombia + ESPN 2 México + ESPN 2 Norte + ESPN 3 Norte + ESPN 3 Sur + ESPN 4 Chile + ESPN 4 Norte + ESPN Chile + ESPN Colombia + ESPN Deportes + ESPN México + ESPN Norte + Estrella TV + ETB 1 + ETB 2 + Eurochannel + Europa Europa + Eurosport 1 España + Eurosport 2 España + Exa TV + Excelsior TV + 42 de Costa Rica + Foro TV + Fox Deportes + Fox News + Fox España + FUTV + FX Chile + FX México + Gamavisión + Golden Panregional + Golden Plus + Golden Premier + Golden Premier 2 + Golf Channel Latinoamérica + GolTV Lat. + Guatevisión + HBO 2 LATAM + HBO Family LATAM + HBO Latinoamérica + HBO Latino Este + HBO Mundi + HBO Plus + HBO Pop + HBO Signature LATAM + HBO Xtreme + Historia España + History 2 México + History 2 Panregional + History Chile + History en Español + History MX + History Panregional + HITN + HLN + ¡Hola! TV + HTV + Iberalia TV + Ingenio TV México + Inti Network + ID México + ID Panregional + Justicia TV + La 1 + La 2 + M+ LaLiga + laOtra + La Red TV Guatemala + 2 de México + Las Estrellas LATAM + La Sexta + La Tele Paraguay + Frecuencia Latina + Lifetime México + Lifetime PAN + María Visión + MC + Mega Chile + Mega España + Meganoticias MX + 12 de El Salvador + Mexiquense TV + Milenio + MTV 00s + MTV 80S + MTV Sur + MTV España + Multimedios Plus + National Geographic México + National Geographic España + Universo + Neox + NFL Network + NHK World + Nickelodeon México + Nickelodeon España + Nick Jr. España + NickMusic + Nova + Noticias PY + NTN24 + Odisea + Pakapaka + Panamericana Televisión + Pánico + Paraguay TV + Paramount Channel ES + Paravisión + Pasiones Estados Unidos + Pasiones Latinoamérica + Perú Mágico + PX Sports + RCN Novelas + Real Madrid TV + 4 de Panamá + RTS + Semillitas + Señal Colombia + Sky One México + Sky Sports 1 México + Sky Sports 16 + Sky Sports 24 + SNT + Sony México + Sorpresa + Space México + Space Panregional + Space Sur + Star Channel México + Studio Universal México + Studio Universal Panregional + Sundance TV España + Sur TV Itapúa Paraguay + Syfy España + TCM Panregional + TCM España + TC Televisión + TeenNick + Teleamazonas + 2 de República Dominicana + Teleantioquia + 7 y 4 de Honduras + Telecafé + Telecaribe + 13 de República Dominicana + Telecentro TV + Telecinco + Teledeporte + Telefé (Argentina) + Telefe Internacional + Telefórmula + Telefuturo + Telehit + Telehit Música + Teleislas + TeleMadrid + Telemetro + Telemicro + Telemundo México + Telenostalgia + 11 de Guatemala + Telepacífico + 11 de República Dominicana + 7 de Costa Rica + Teleunion + 29 de República Dominicana + 4 de Guadalajara + 7 de Guatemala + Tigo Sports Costa Rica + Tigo Sports El Salvador + Tigo Sports Guatemala + TLC MX + TLC Panregional + TLNovelas LATAM + TLNovelas México + TNT México + TNT Pacífico + TNT Sur + TNT España + TNT Sports 2 Chile + TNT Sports 3 Chile + Tooncast + 13 de Colombia + 13 de Paraguay + 13 de Costa Rica + truTV Lat. + Telesistema Informativo (TSI) + TUDN USA + TUDN México + TV5Monde + TV Canaria + TVC Deportes + TV Chile + TVE Internacional + TV Globo Internacional + 9 de Panamá + TVN Chile + 2 de Panamá + Televisión Pública Argentina + TVUNAM + TyC Sports + Unicable MX + Unicanal + Universal Cinema + Universal Comedy + Universal Crime + Universal Premiere + Universal Reality + Universal TV México + Universal TV Panregional + Univision TLNovelas + M+ #Vamos + Ve Plus Estados Unidos + Vía X + Vibra TV + Video Rola + ViendoMovies + 13 de Nicaragua + VTV Honduras + WAPA-TV + WAPA 2 Deportes + Willax TV + Punto 2 + WOBI + 13 de Puerto Rico + 4 de Monterrey + 22 de México + 11 de México + Zona Latina + ZOOM Colombia + diff --git a/sites/gatotv.com/gatotv.com.config.js b/sites/gatotv.com/gatotv.com.config.js index bff22d0f..fe4c327d 100644 --- a/sites/gatotv.com/gatotv.com.config.js +++ b/sites/gatotv.com/gatotv.com.config.js @@ -15,7 +15,6 @@ module.exports = { const items = parseItems(content) date = date.subtract(1, 'd') items.forEach((item, i) => { - const prev = programs[programs.length - 1] const $item = cheerio.load(item) let start = parseStart($item, date) if (i === 0 && start.hour >= 5) { @@ -41,7 +40,7 @@ module.exports = { }, async channels() { const data = await axios - .get(`https://www.gatotv.com/guia_tv/completa`) + .get('https://www.gatotv.com/guia_tv/completa') .then(response => response.data) .catch(console.log) diff --git a/sites/gatotv.com/gatotv.com.test.js b/sites/gatotv.com/gatotv.com.test.js index 814a7953..5f96e16e 100644 --- a/sites/gatotv.com/gatotv.com.test.js +++ b/sites/gatotv.com/gatotv.com.test.js @@ -1,7 +1,7 @@ // npm run channels:parse -- --config=./sites/gatotv.com/gatotv.com.config.js --output=./sites/gatotv.com/gatotv.com.channels.xml -// npx epg-grabber --config=sites/gatotv.com/gatotv.com.config.js --channels=sites/gatotv.com/gatotv.com.channels.xml --output=guide.xml +// npm run grab -- --site=gatotv.com -const { parser, url, request } = require('./gatotv.com.config.js') +const { parser, url } = require('./gatotv.com.config.js') const fs = require('fs') const path = require('path') const dayjs = require('dayjs') diff --git a/sites/getafteritmedia.com/getafteritmedia.com.channels.xml b/sites/getafteritmedia.com/getafteritmedia.com.channels.xml index 14c51aac..ef6aa3ad 100644 --- a/sites/getafteritmedia.com/getafteritmedia.com.channels.xml +++ b/sites/getafteritmedia.com/getafteritmedia.com.channels.xml @@ -1,10 +1,8 @@ - - - REV'N Eastern - REV'N Central - REV'N Mountain - REV'N Pacific - REV'N Web Feed - - + + REV'N Central + REV'N Eastern + REV'N Mountain + REV'N Pacific + REV'N Web Feed + diff --git a/sites/getafteritmedia.com/getafteritmedia.com.test.js b/sites/getafteritmedia.com/getafteritmedia.com.test.js index 7edb467e..5d95345f 100644 --- a/sites/getafteritmedia.com/getafteritmedia.com.test.js +++ b/sites/getafteritmedia.com/getafteritmedia.com.test.js @@ -1,4 +1,4 @@ -// npx epg-grabber --config=sites/getafteritmedia.com/getafteritmedia.com.config.js --channels=sites/getafteritmedia.com/getafteritmedia.com.channels.xml --output=guide.xml --days=2 +// npm run grab -- --site=getafteritmedia.com const { parser, url } = require('./getafteritmedia.com.config.js') const fs = require('fs') @@ -33,7 +33,7 @@ it('can parse response', () => { expect(results[0]).toMatchObject({ start: '2022-11-26T05:00:00.000Z', stop: '2022-11-26T05:30:00.000Z', - title: `The Appraisers` + title: 'The Appraisers' }) }) @@ -41,7 +41,7 @@ it('can handle empty guide', () => { const result = parser({ date, channel, - content: `` + content: '' }) expect(result).toMatchObject([]) }) diff --git a/sites/guidatv.sky.it/guidatv.sky.it.channels.xml b/sites/guidatv.sky.it/guidatv.sky.it.channels.xml index 1a8bdbe0..974ffd4c 100644 --- a/sites/guidatv.sky.it/guidatv.sky.it.channels.xml +++ b/sites/guidatv.sky.it/guidatv.sky.it.channels.xml @@ -1,168 +1,166 @@ - - - 20 Mediaset - 27 Twentyseven - ACI Sport Tv - Aljazeera English - Baby TV Europe - BBC World News - BFC Forbes - BIKE - Blaze HD - Bloomberg TV Europe - Boing Italia - Boomerang Italia - Boomerang Italia +1 - Caccia - Canale 5 - Cartoonito Italia - Cartoon Network India - Cartoon Network Italia +1 - Cielo - Cine 34 - Class CNBC - Classica HD - CNBC Europe - CNN International Europe - Comedy Central Italia - Comedy Central Italia +1 - Crime + Investigation Network Italia - DeA Junior - DeA Kids - DeA Kids +1 - Deejay TV - Discovery Channel Italia - Discovery Channel Italia +1 - DMAX Italia - Emilia-Romagna 24 - EQUtv - Euronews English - Eurosport 1 Italia - Eurosport 2 Italia - Explorer HD Channel - Fashion TV - Food Network Italia - Fox Business - Fox News Channel - France 24 English - France 24 Français - Frisbee - Gambero Rosso Channel - Giallo - HGTV Italia - History Italia - Horse TV - I24 News English - Inter TV - Iris - Italia 1 - Italia 2 - K2 - La 5 - La 7 - La 7 d - Lazio Style TV - Mediaset Extra - Milan TV - Motor Trend - MTV HD - MTV Music - National Geographic Italia - National Geographic Italia +1 - National Geographic Wild Italia - National Geographic Wild Italia +1 - Nickelodeon Italia - Nickelodeon Italia +1 - Nick Jr Italia - Nick Jr Italia +1 - Nove - Pesca - POP Economy - QVC Italia - Radio Freccia TV - Radio Italia Trend Tv HD - Radio Italia TV - Radio Monte Carlo TV - Radionorba TV - Rai 1 - Rai 2 - Rai 3 - Rai 4 - Rai 5 - Rai Gulp - Rai Movie - Rai News 24 - Rai Premium - Rai Sport - Rai Storia - Rai Yoyo - Real Time Italia - Rete 4 - RTL 102.5 RadioVisione - San Marino RTV - Sky Arte - Sky Atlantic - Sky Atlantic +1 - Sky Cinema 4K - Sky Cinema Action - Adventure Collection HD - Sky Cinema Comedy - Sky Cinema Drama - Sky Cinema Due - Sky Cinema Due +24 - Sky Cinema Family - Sky Cinema Romance - Sky Cinema Suspense - Sky Cinema Uno - Sky Cinema Uno +24 - Sky Documentaries HD - Sky Documentaries +1 HD - Sky Investigation HD - Sky Investigation +1 HD - Sky Meteo 24 - Sky Nature HD - Sky News International - Sky Serie HD - Sky Serie Anime HD - Sky Sport 10 - Sky Sport 11 - Sky Sport 24 - Sky Sport 2 - Sky Sport 3 - Sky Sport 4 - Sky Sport 4K - Sky Sport 5 - Sky Sport 6 - Sky Sport 7 - Sky Sport 8 - Sky Sport 9 - Sky Sport Action HD - Sky Sport Arena - Sky Sport F1 - Sky Sport Football - Sky Sport Moto GP - Sky Sport NBA - Sky Sport Serie A - Sky Sport Tennis HD - Sky Sport Uno - Sky TG24 HD - Sky Uno - Sky Uno +1 - Super! - Super Tennis - TgCom24 HD - TG Norba 24 - Top Crime - TRM h24 - TV 2000 - TV 8 - VH1 Italia - Virgin Radio TV - ZONA DAZN - ZONA DAZN 2 - ZONA DAZN 3 - ZONA DAZN 4 - ZONA DAZN 5 - - + + 20 Mediaset + 27 Twentyseven + ACI Sport Tv + Aljazeera English + Baby TV Europe + BBC World News + BFC Forbes + BIKE + Blaze HD + Bloomberg TV Europe + Boing Italia + Boomerang Italia + Boomerang Italia +1 + Caccia + Canale 5 + Cartoonito Italia + Cartoon Network India + Cartoon Network Italia +1 + Cielo + Cine 34 + Class CNBC + Classica HD + CNBC Europe + CNN International Europe + Comedy Central Italia + Comedy Central Italia +1 + Crime + Investigation Network Italia + DeA Junior + DeA Kids + DeA Kids +1 + Deejay TV + Discovery Channel Italia + Discovery Channel Italia +1 + DMAX Italia + Emilia-Romagna 24 + EQUtv + Euronews English + Eurosport 1 Italia + Eurosport 2 Italia + Explorer HD Channel + Fashion TV + Food Network Italia + Fox Business + Fox News Channel + France 24 English + France 24 Français + Frisbee + Gambero Rosso Channel + Giallo + HGTV Italia + History Italia + Horse TV + I24 News English + Inter TV + Iris + Italia 1 + Italia 2 + K2 + La 5 + La 7 + La 7 d + Lazio Style TV + Mediaset Extra + Milan TV + Motor Trend + MTV HD + MTV Music + National Geographic Italia + National Geographic Italia +1 + National Geographic Wild Italia + National Geographic Wild Italia +1 + Nickelodeon Italia + Nickelodeon Italia +1 + Nick Jr Italia + Nick Jr Italia +1 + Nove + Pesca + POP Economy + QVC Italia + Radio Freccia TV + Radio Italia Trend Tv HD + Radio Italia TV + Radio Monte Carlo TV + Radionorba TV + Rai 1 + Rai 2 + Rai 3 + Rai 4 + Rai 5 + Rai Gulp + Rai Movie + Rai News 24 + Rai Premium + Rai Sport + Rai Storia + Rai Yoyo + Real Time Italia + Rete 4 + RTL 102.5 RadioVisione + San Marino RTV + Sky Arte + Sky Atlantic + Sky Atlantic +1 + Sky Cinema 4K + Sky Cinema Action + Adventure Collection HD + Sky Cinema Comedy + Sky Cinema Drama + Sky Cinema Due + Sky Cinema Due +24 + Sky Cinema Family + Sky Cinema Romance + Sky Cinema Suspense + Sky Cinema Uno + Sky Cinema Uno +24 + Sky Documentaries HD + Sky Documentaries +1 HD + Sky Investigation HD + Sky Investigation +1 HD + Sky Meteo 24 + Sky Nature HD + Sky News International + Sky Serie HD + Sky Serie Anime HD + Sky Sport 10 + Sky Sport 11 + Sky Sport 24 + Sky Sport 2 + Sky Sport 3 + Sky Sport 4 + Sky Sport 4K + Sky Sport 5 + Sky Sport 6 + Sky Sport 7 + Sky Sport 8 + Sky Sport 9 + Sky Sport Action HD + Sky Sport Arena + Sky Sport F1 + Sky Sport Football + Sky Sport Moto GP + Sky Sport NBA + Sky Sport Serie A + Sky Sport Tennis HD + Sky Sport Uno + Sky TG24 HD + Sky Uno + Sky Uno +1 + Super! + Super Tennis + TgCom24 HD + TG Norba 24 + Top Crime + TRM h24 + TV 2000 + TV 8 + VH1 Italia + Virgin Radio TV + ZONA DAZN + ZONA DAZN 2 + ZONA DAZN 3 + ZONA DAZN 4 + ZONA DAZN 5 + diff --git a/sites/guidatv.sky.it/guidatv.sky.it.test.js b/sites/guidatv.sky.it/guidatv.sky.it.test.js index 86ca43e4..77e5ee23 100644 --- a/sites/guidatv.sky.it/guidatv.sky.it.test.js +++ b/sites/guidatv.sky.it/guidatv.sky.it.test.js @@ -1,4 +1,4 @@ -// npx epg-grabber --config=sites/guidatv.sky.it/guidatv.sky.it.config.js --channels=sites/guidatv.sky.it/guidatv.sky.it.channels.xml --output=guide.xml --days=2 +// npm run grab -- --site=guidatv.sky.it const { parser, url } = require('./guidatv.sky.it.config.js') const dayjs = require('dayjs') @@ -20,7 +20,8 @@ it('can generate valid url', () => { }) it('can parse response', () => { - const content = `{"events": [ { "channel": { "id": 10458, "logo": "/logo/545820mediasethd_Light_Fit.png", "logoPadding": "/logo/545820mediasethd_Light_Padding.png", "logoDark": "/logo/545820mediasethd_Dark_Fit.png", "logoDarkPadding": "/logo/545820mediasethd_Dark_Padding.png", "logoLight": "/logo/545820mediasethd_Light_Padding.png", "name": "20Mediaset HD", "number": 151, "category": { "id": 3, "name": "Intrattenimento" } }, "content": { "uuid": "77c630aa-4744-44cb-a88e-3e871c6b73d9", "contentTitle": "Distretto di Polizia", "episodeNumber": 26, "seasonNumber": 6, "url": "/serie-tv/distretto-di-polizia/stagione-6/episodio-26/77c630aa-4744-44cb-a88e-3e871c6b73d9", "genre": { "id": 1, "name": "Intrattenimento" }, "subgenre": { "id": 9, "name": "Fiction" }, "imagesMap": [ { "key": "background", "img": { "url": "/uuid/77c630aa-4744-44cb-a88e-3e871c6b73d9/background?md5ChecksumParam=88d3f48ce855316f4be25ab9bb846d32" } }, { "key": "cover", "img": { "url": "/uuid/77c630aa-4744-44cb-a88e-3e871c6b73d9/cover?md5ChecksumParam=61135b999a63e3d3f4a933b9edeb0c1b" } }, { "key": "scene", "img": { "url": "/uuid/77c630aa-4744-44cb-a88e-3e871c6b73d9/16-9?md5ChecksumParam=f41bfe414bec32505abdab19d00b8b43" } } ] }, "eventId": "139585132", "starttime": "2022-05-06T00:35:40Z", "endtime": "2022-05-06T01:15:40Z", "eventTitle": "Distretto di Polizia", "eventSynopsis": "S6 Ep26 La resa dei conti - Fino all'ultimo la sfida tra Ardenzi e Carrano, nemici di vecchia data, riserva clamorosi colpi di scena. E si scopre che non e' tutto come sembrava.", "epgEventTitle": "S6 Ep26 - Distretto di Polizia", "primeVision": false, "resolutions": [ { "resolutionType": "resolution4k", "value": false } ] }]}` + const content = + '{"events": [ { "channel": { "id": 10458, "logo": "/logo/545820mediasethd_Light_Fit.png", "logoPadding": "/logo/545820mediasethd_Light_Padding.png", "logoDark": "/logo/545820mediasethd_Dark_Fit.png", "logoDarkPadding": "/logo/545820mediasethd_Dark_Padding.png", "logoLight": "/logo/545820mediasethd_Light_Padding.png", "name": "20Mediaset HD", "number": 151, "category": { "id": 3, "name": "Intrattenimento" } }, "content": { "uuid": "77c630aa-4744-44cb-a88e-3e871c6b73d9", "contentTitle": "Distretto di Polizia", "episodeNumber": 26, "seasonNumber": 6, "url": "/serie-tv/distretto-di-polizia/stagione-6/episodio-26/77c630aa-4744-44cb-a88e-3e871c6b73d9", "genre": { "id": 1, "name": "Intrattenimento" }, "subgenre": { "id": 9, "name": "Fiction" }, "imagesMap": [ { "key": "background", "img": { "url": "/uuid/77c630aa-4744-44cb-a88e-3e871c6b73d9/background?md5ChecksumParam=88d3f48ce855316f4be25ab9bb846d32" } }, { "key": "cover", "img": { "url": "/uuid/77c630aa-4744-44cb-a88e-3e871c6b73d9/cover?md5ChecksumParam=61135b999a63e3d3f4a933b9edeb0c1b" } }, { "key": "scene", "img": { "url": "/uuid/77c630aa-4744-44cb-a88e-3e871c6b73d9/16-9?md5ChecksumParam=f41bfe414bec32505abdab19d00b8b43" } } ] }, "eventId": "139585132", "starttime": "2022-05-06T00:35:40Z", "endtime": "2022-05-06T01:15:40Z", "eventTitle": "Distretto di Polizia", "eventSynopsis": "S6 Ep26 La resa dei conti - Fino all\'ultimo la sfida tra Ardenzi e Carrano, nemici di vecchia data, riserva clamorosi colpi di scena. E si scopre che non e\' tutto come sembrava.", "epgEventTitle": "S6 Ep26 - Distretto di Polizia", "primeVision": false, "resolutions": [ { "resolutionType": "resolution4k", "value": false } ] }]}' const result = parser({ content }).map(p => { p.start = p.start.toJSON() p.stop = p.stop.toJSON() @@ -45,7 +46,7 @@ it('can parse response', () => { it('can handle empty guide', () => { const result = parser({ - content: `{"events":[],"total":0}` + content: '{"events":[],"total":0}' }) expect(result).toMatchObject([]) }) diff --git a/sites/guide.dstv.com/guide.dstv.com.channels.xml b/sites/guide.dstv.com/guide.dstv.com.channels.xml index 0bdaf11a..f08da374 100644 --- a/sites/guide.dstv.com/guide.dstv.com.channels.xml +++ b/sites/guide.dstv.com/guide.dstv.com.channels.xml @@ -1,326 +1,324 @@ - - - 1KZN TV - 1 Magic Africa - Abol TV - Addis Media Network - Adom TV - Africa Magic Epic - Africa Magic Family - Africa Magic Hausa - Africa Magic Igbo - Africa Magic Showcase Africa - Africa Magic Urban - Africa Magic Yoruba - Africanews - Afro Music Pop - Ahadu TV - AIT International - Akili Kids! - Aljazeera English - Amhara TV - Arewa 24 - Arise News - ARTS TV - Asham TV - AYV TV - B4U Movies UK - Baba TV - Balageru TV - BBC Brit South Africa - BBC Earth South Africa - BBC Lifestyle South Africa - BBC World News Africa - BBS TV - BET Africa - Big Brother Mzansi - Bloomberg TV Africa - Boomerang EMEA - Botswana TV - Bukedde TV 1 - BusinessDay TV - Camnet TV - Cape Town TV - Cartoon Network Middle East & Africa - CBeebies South Africa - CBS Justice Africa - CBS Reality Africa - CCTV 4 Europe - CCTV Entertainment - CGTN - CGTN Documentary - CGTN Français - Channel 44 - Channel O - Channels TV - Citizen TV - CNBC Africa - CNN International Europe - Comedy Central Africa - Curiosity Channel - Da Vinci - Daystar TV - Diamond TV - Discovery Channel Middle East & Africa - Discovery Family Africa - Disney Channel South Africa - Disney Junior South Africa - Dominion TV - Dove TV - Dumisa TV - DW Deutsch - E! Africa - EBS - Edu Channel - E Extra - Emmanuel TV - E Movies - E Movies Extra - ENews Channel Africa - ESPN 2 Africa - ESPN Africa - E Toonz - E TV - E TV Africa - ETV News - EuroNews English - EuroNews Français - EuroNews Deutsch - EuroNews Português - EWTN Africa - Asia - Faith Africa - Fana TV - FliekNet - Food Network EMEA - Galaxy TV - Gau TV - Ghana Learning TV - Ghana TV - Gh One TV - Ginx eSports TV International - HGTV South Africa - Hip TV - History Africa - Honey - Ignition - Inooro TV - Investigation Discovery Africa - Iqraa Africa & Europe - Islam Channel - ITV Networks - Jiangsu TV - JimJam Europe - Joy News - Joy Prime - K24 - Kameme TV - Kass TV - KBC Channel 1 - KBN - Kiss TV - Kix - KTN Home - KTN News - KykNet - KykNet & Kie - KykNet Nou! - Lagos TV - Lifetime Africa - Lumen Christi TV Network - Maisha Magic Bongo - Maisha Magic Movies - Maisha Magic Plus - Maisha Magic Poa - Mambo Moto TV - MBC - Me - Mibawa TV - Mindset Learn - MITV - M-Net East - M-Net Movies 1 East Africa - M-Net Movies 1 West Africa - M-Net Movies 2 - M-Net Movies 3 - M-Net Movies 4 - M-Net Movies Men of Action - M-Net South Africa - M-Net West - Moja Love - MovieRoom - Mpuma Kapa TV - MTV Africa - MTV Base Africa - My Channel Africa - Mzansi Bioskop - Mzansi Magic - Mzansi Magic Music - Mzansi Wethu - Nahoo TV - National Geographic South Africa - National Geographic Wild South Africa - NBC 2 - NBS TV - NDTV 24x7 - Newzroom Afrika - NHK World Japan - Nickelodeon Africa - Nick Jr Africa - NickToons Africa - Novela Magic - Now! TV - NTA 2 - NTA International - NTA News 24 - NTA Parliament - NTV - NTV Uganda - OBN - Ogun State TV - One Africa TV - One Gospel - OneZed - Parliament TV - Parliament TV - PBS Kids - Pearl Magic Prime - People's Weather - Plus TV Africa - Pop Central - Power TV - Racing 240 - Rai Italia Africa - Real Time Africa - Rok - Rok 2 - Rok GH - RT News - SABC 1 - SABC 2 - SABC 3 - SABC News - Salt TV - SBN International - Silverbird TV - Sky News International - Soundcity Africa - Soweto TV - Spice - SSBC TV - StarLife - STN - Studio Universal Africa - Sunna TV - SuperSport Action Africa - SuperSport Blitz Africa - SuperSport Cricket Africa - SuperSport Football Africa - SuperSport Football Plus Africa - SuperSport Golf Africa - SuperSport Grandstand Africa - SuperSport LaLiga Africa - SuperSport Máximo 1 Africa - SuperSport Máximo 2 Africa - SuperSport Motorsport Africa - SuperSport OTT - SuperSport OTT 2 - SuperSport OTT 3 - SuperSport OTT 4 - SuperSport OTT 5 - SuperSport OTT 6 - SuperSport OTT 7 - SuperSport OTT 8 - SuperSport Play - SuperSport Premier League Africa - SuperSport PSL - SuperSport Rugby Africa - SuperSport Tennis Africa - SuperSport Variety 1 Africa - SuperSport Variety 2 Africa - SuperSport Variety 3 Africa - SuperSport Variety 4 Africa - Tanzania Safari Channel - TBN Africa - Telemundo Africa - Televista - Tellytrack 1 - The Home Channel - TLC Africa - Tlnovelas Europa - TNT Africa - Trace Gospel English Speaking Africa - Trace Jama - Trace Muzika - Trace Mziki - Trace Naija - Travel Channel Europe - Trybe TV - Tshwane TV - TV 1 - TV 3 - TV 47 - TV5Monde Afrique - TV Africa - TVC News - TV E - TV Lesotho - TV Moçambique Internacional - TV West - UBC TV - United TV - Universal TV Africa - Urban TV - Via - Walta TV - Wap TV - Wasafi TV - Wazobia Max TV Nigeria - WildEarth - WWE Channel - Y254 - Yadah TV - Zambezi Magic - ZBC TV - Zee Alem - Zee World - ZNBC TV 1 - ZNBC TV 2 - Zodiak TV - Afro Music Channel - AXN Movies - AXN Portugal - Banda TV - Best Brasil - Boomerang Portugal - Boom TV - Canal Panda Portugal - Cine Mundo - Disney Junior Portugal - DSTV Pipoca - Fé TV - Fox Comedy Portugal - Fox Crime Portugal - Fox Life Portugal - Fox Movies Portugal - Fox Portugal - Luta Pela Fama - Media Mais TV - MundoFox - National Geographic Portugal - Palanca TV - Record News - RTP África - RTP Internacional Europa - Soico TV - Strong Live - SuperSport Máximo 360 - TLN Network - TPA 1 - TPA2 - Trace Toca - TVM - TV Miramar - TV Zimbo - - \ No newline at end of file + + 1KZN TV + 1 Magic Africa + Abol TV + Addis Media Network + Adom TV + Africa Magic Epic + Africa Magic Family + Africa Magic Hausa + Africa Magic Igbo + Africa Magic Showcase Africa + Africa Magic Urban + Africa Magic Yoruba + Africanews + Afro Music Pop + Ahadu TV + AIT International + Akili Kids! + Aljazeera English + Amhara TV + Arewa 24 + Arise News + ARTS TV + Asham TV + AYV TV + B4U Movies UK + Baba TV + Balageru TV + BBC Brit South Africa + BBC Earth South Africa + BBC Lifestyle South Africa + BBC World News Africa + BBS TV + BET Africa + Big Brother Mzansi + Bloomberg TV Africa + Boomerang EMEA + Botswana TV + Bukedde TV 1 + BusinessDay TV + Camnet TV + Cape Town TV + Cartoon Network Middle East & Africa + CBeebies South Africa + CBS Justice Africa + CBS Reality Africa + CCTV 4 Europe + CCTV Entertainment + CGTN + CGTN Documentary + CGTN Français + Channel 44 + Channel O + Channels TV + Citizen TV + CNBC Africa + CNN International Europe + Comedy Central Africa + Curiosity Channel + Da Vinci + Daystar TV + Diamond TV + Discovery Channel Middle East & Africa + Discovery Family Africa + Disney Channel South Africa + Disney Junior South Africa + Dominion TV + Dove TV + Dumisa TV + DW Deutsch + E! Africa + EBS + Edu Channel + E Extra + Emmanuel TV + E Movies + E Movies Extra + ENews Channel Africa + ESPN 2 Africa + ESPN Africa + E Toonz + E TV + E TV Africa + ETV News + EuroNews English + EuroNews Français + EuroNews Deutsch + EuroNews Português + EWTN Africa - Asia + Faith Africa + Fana TV + FliekNet + Food Network EMEA + Galaxy TV + Gau TV + Ghana Learning TV + Ghana TV + Gh One TV + Ginx eSports TV International + HGTV South Africa + Hip TV + History Africa + Honey + Ignition + Inooro TV + Investigation Discovery Africa + Iqraa Africa & Europe + Islam Channel + ITV Networks + Jiangsu TV + JimJam Europe + Joy News + Joy Prime + K24 + Kameme TV + Kass TV + KBC Channel 1 + KBN + Kiss TV + Kix + KTN Home + KTN News + KykNet + KykNet & Kie + KykNet Nou! + Lagos TV + Lifetime Africa + Lumen Christi TV Network + Maisha Magic Bongo + Maisha Magic Movies + Maisha Magic Plus + Maisha Magic Poa + Mambo Moto TV + MBC + Me + Mibawa TV + Mindset Learn + MITV + M-Net East + M-Net Movies 1 East Africa + M-Net Movies 1 West Africa + M-Net Movies 2 + M-Net Movies 3 + M-Net Movies 4 + M-Net Movies Men of Action + M-Net South Africa + M-Net West + Moja Love + MovieRoom + Mpuma Kapa TV + MTV Africa + MTV Base Africa + My Channel Africa + Mzansi Bioskop + Mzansi Magic + Mzansi Magic Music + Mzansi Wethu + Nahoo TV + National Geographic South Africa + National Geographic Wild South Africa + NBC 2 + NBS TV + NDTV 24x7 + Newzroom Afrika + NHK World Japan + Nickelodeon Africa + Nick Jr Africa + NickToons Africa + Novela Magic + Now! TV + NTA 2 + NTA International + NTA News 24 + NTA Parliament + NTV + NTV Uganda + OBN + Ogun State TV + One Africa TV + One Gospel + OneZed + Parliament TV + Parliament TV + PBS Kids + Pearl Magic Prime + People's Weather + Plus TV Africa + Pop Central + Power TV + Racing 240 + Rai Italia Africa + Real Time Africa + Rok + Rok 2 + Rok GH + RT News + SABC 1 + SABC 2 + SABC 3 + SABC News + Salt TV + SBN International + Silverbird TV + Sky News International + Soundcity Africa + Soweto TV + Spice + SSBC TV + StarLife + STN + Studio Universal Africa + Sunna TV + SuperSport Action Africa + SuperSport Blitz Africa + SuperSport Cricket Africa + SuperSport Football Africa + SuperSport Football Plus Africa + SuperSport Golf Africa + SuperSport Grandstand Africa + SuperSport LaLiga Africa + SuperSport Máximo 1 Africa + SuperSport Máximo 2 Africa + SuperSport Motorsport Africa + SuperSport OTT + SuperSport OTT 2 + SuperSport OTT 3 + SuperSport OTT 4 + SuperSport OTT 5 + SuperSport OTT 6 + SuperSport OTT 7 + SuperSport OTT 8 + SuperSport Play + SuperSport Premier League Africa + SuperSport PSL + SuperSport Rugby Africa + SuperSport Tennis Africa + SuperSport Variety 1 Africa + SuperSport Variety 2 Africa + SuperSport Variety 3 Africa + SuperSport Variety 4 Africa + Tanzania Safari Channel + TBN Africa + Telemundo Africa + Televista + Tellytrack 1 + The Home Channel + TLC Africa + Tlnovelas Europa + TNT Africa + Trace Gospel English Speaking Africa + Trace Jama + Trace Muzika + Trace Mziki + Trace Naija + Travel Channel Europe + Trybe TV + Tshwane TV + TV 1 + TV 3 + TV 47 + TV5Monde Afrique + TV Africa + TVC News + TV E + TV Lesotho + TV Moçambique Internacional + TV West + UBC TV + United TV + Universal TV Africa + Urban TV + Via + Walta TV + Wap TV + Wasafi TV + Wazobia Max TV Nigeria + WildEarth + WWE Channel + Y254 + Yadah TV + Zambezi Magic + ZBC TV + Zee Alem + Zee World + ZNBC TV 1 + ZNBC TV 2 + Zodiak TV + Afro Music Channel + AXN Movies + AXN Portugal + Banda TV + Best Brasil + Boomerang Portugal + Boom TV + Canal Panda Portugal + Cine Mundo + Disney Junior Portugal + DSTV Pipoca + Fé TV + Fox Comedy Portugal + Fox Crime Portugal + Fox Life Portugal + Fox Movies Portugal + Fox Portugal + Luta Pela Fama + Media Mais TV + MundoFox + National Geographic Portugal + Palanca TV + Record News + RTP África + RTP Internacional Europa + Soico TV + Strong Live + SuperSport Máximo 360 + TLN Network + TPA 1 + TPA2 + Trace Toca + TVM + TV Miramar + TV Zimbo + \ No newline at end of file diff --git a/sites/guide.dstv.com/guide.dstv.com.config.js b/sites/guide.dstv.com/guide.dstv.com.config.js index 44ad8d38..44ca692a 100644 --- a/sites/guide.dstv.com/guide.dstv.com.config.js +++ b/sites/guide.dstv.com/guide.dstv.com.config.js @@ -7,9 +7,9 @@ const customParseFormat = require('dayjs/plugin/customParseFormat') dayjs.extend(utc) dayjs.extend(customParseFormat) +// ERR: certificate has expired module.exports = { site: 'guide.dstv.com', - skip: true, // NOTE: website is down (HTTP Server Error 503) days: 2, request: { cache: { @@ -24,9 +24,9 @@ module.exports = { 'YYYY-MM-DD' )}` }, - parser({ content, date, channel, cached }) { + parser({ content, date, channel }) { const programs = [] - const items = parseItems(content, date, channel) + const items = parseItems(content, channel) items.forEach(item => { const prev = programs[programs.length - 1] let start = parseStart(item, date) @@ -70,13 +70,13 @@ module.exports = { } function parseStart(item, date) { - time = `${date.format('MM/DD/YYYY')} ${item.time}` + const time = `${date.format('MM/DD/YYYY')} ${item.time}` return dayjs.utc(time, 'MM/DD/YYYY HH:mm') } -function parseItems(content, date, channel) { - const [_, channelTag] = channel.site_id.split('#') +function parseItems(content, channel) { + const [, channelTag] = channel.site_id.split('#') const data = JSON.parse(content) const html = data[channelTag] if (!html) return [] diff --git a/sites/guide.dstv.com/guide.dstv.com.test.js b/sites/guide.dstv.com/guide.dstv.com.test.js index afd4c318..09b242e5 100644 --- a/sites/guide.dstv.com/guide.dstv.com.test.js +++ b/sites/guide.dstv.com/guide.dstv.com.test.js @@ -1,5 +1,5 @@ -// node ./scripts/commands/parse-channels.js --config=./sites/guide.dstv.com/guide.dstv.com.config.js --output=./sites/guide.dstv.com/guide.dstv.com.channels.xml --set=bouquet:c35aaecd-5dd1-480b-ae24-357e600a0e4d -// npx epg-grabber --config=sites/guide.dstv.com/guide.dstv.com.config.js --channels=sites/guide.dstv.com/guide.dstv.com.channels.xml --output=guide.xml --timeout=30000 --days=2 +// npm run grab -- --site=guide.dstv.com +// npm run channels:parse -- --config=./sites/guide.dstv.com/guide.dstv.com.config.js --output=./sites/guide.dstv.com/guide.dstv.com.channels.xml --set=bouquet:c35aaecd-5dd1-480b-ae24-357e600a0e4d const { parser, url } = require('./guide.dstv.com.config.js') const dayjs = require('dayjs') @@ -22,7 +22,8 @@ it('can generate valid url', () => { }) it('can parse response', () => { - const content = `{"M4H": " 21:30 Deadly Flight 08:25 I Still Believe 15:50 Despicable Me 20:35 The Foreigner "}` + const content = + "{\"M4H\": \" 21:30 Deadly Flight 08:25 I Still Believe 15:50 Despicable Me 20:35 The Foreigner \"}" const result = parser({ date, channel, content }).map(p => { p.start = p.start.toJSON() p.stop = p.stop.toJSON() @@ -53,6 +54,6 @@ it('can parse response', () => { }) it('can handle empty guide', () => { - const result = parser({ date, channel, content: `{}` }) + const result = parser({ date, channel, content: '{}' }) expect(result).toMatchObject([]) }) diff --git a/sites/hd-plus.de/hd-plus.de.channels.xml b/sites/hd-plus.de/hd-plus.de.channels.xml index c22c83fa..ee89d1b2 100644 --- a/sites/hd-plus.de/hd-plus.de.channels.xml +++ b/sites/hd-plus.de/hd-plus.de.channels.xml @@ -1,125 +1,123 @@ - - - 1-2-3 TV - 13th Street Deutschland - 3sat - Anixe HD Serie - ARD Alpha - ARTE Deutsch - AstroTV - ATV - ATV 2 - Augsburg TV - Sony AXN - Bayerisches Fernsehen Nord - Bibel TV - Bloomberg TV Europe - Boomerang Deutschland - Cartoon Network Deutschland - Channel 21 - Comedy Central Deutschland - Das Erste - Deluxe Music - Deutsches Musik Fernsehen - Die Neue Zeit TV - Discovery Channel Deutschland - Disney Channel Deutschland - DMAX Deutschland - E! Europe - EuroNews Deutsch - Eurosport 1 Germany - EWTN auf Deutsch - Franken Fernsehen - GoTV - Heimatkanal - History Deutschland - Hope TV Deutsch - HR Fernsehen - HSE - HSE Extra - JML Direct - Junior - Juwelo - Kabel Eins Classics - Kabel Eins Deutschland - KIKA - Kinowelt TV - K-TV - L TV - Motorvision TV - MTV Germany - MTV Hits Europe - MTV Live HD - München TV - National Geographic Deutschland - National Geographic Wild Deutschland - Nitro Deutschland - NPO 1 - NPO 2 - N-TV - One - ORF 1 - ORF 2 - ORF III - ORF Sport + - Pearl TV - Phoenix - ProSieben Deutschland - ProSieben Maxx Deutschland - Puls 4 - QVC Deutschland - QVC Zwei - RFO - RheinMain TV - RiC - Romance TV Deutschland - RTL Crime Deutschland - RTL Deutschland - RTL Living Deutschland - RTL Zwei Deutschland - Sat. 1 Deutschland - Sat. 1 Emotions - Sat. 1 Gold Deutschland - Servus TV Deutschland - Sixx Deutschland - Sky Atlantic - Sky Cinema Action - Sky Cinema Hits - Sky Cinema Nostalgie - Sky Comedy - Sky Krimi - Sky Sport 1 - Sky Sport 2 - Sky Sport Austria 1 - Sky Sport Bundesliga 1 - Sky Sport Bundesliga 2 - Sky Sport Bundesliga 3 - Sky Sport Bundesliga 4 - Sky Sport News - Sonnenklar TV - Sport 1 - Sport 1+ - Sportdigital Fussball - SRF 1 - SR Fernsehen - SRF Zwei - Stingray Classica - Super RTL Deutschland - Syfy Deutschland - Tagesschau 24 - Tele 5 - TLC Germany - TNT Film - TNT Serie - TVA Ostbayern - TV Oberfranken - Universal TV Deutschland - Vox Deutschland - Welt - Welt der Wunder TV - ZDF - ZDF Info - ZDF Neo - - + + 1-2-3 TV + 13th Street Deutschland + 3sat + Anixe HD Serie + ARD Alpha + ARTE Deutsch + AstroTV + ATV + ATV 2 + Augsburg TV + Bibel TV + Bloomberg TV Europe + Boomerang Deutschland + Bayerisches Fernsehen Nord + Cartoon Network Deutschland + Channel 21 + Comedy Central Deutschland + Das Erste + Deluxe Music + Deutsches Musik Fernsehen + Die Neue Zeit TV + Discovery Channel Deutschland + Disney Channel Deutschland + DMAX Deutschland + E! Europe + EuroNews Deutsch + Eurosport 1 Germany + EWTN auf Deutsch + Franken Fernsehen + GoTV + Heimatkanal + History Deutschland + Hope TV Deutsch + HR Fernsehen + HSE + HSE Extra + JML Direct + Junior + Juwelo + Kabel Eins Deutschland + Kabel Eins Classics + KIKA + Kinowelt TV + K-TV + L TV + Motorvision TV + MTV Germany + MTV Hits Europe + MTV Live HD + München TV + National Geographic Deutschland + National Geographic Wild Deutschland + Nitro Deutschland + NPO 1 + NPO 2 + N-TV + One + ORF 1 + ORF 2 + ORF III + ORF Sport + + Pearl TV + Phoenix + ProSieben Deutschland + ProSieben Maxx Deutschland + Puls 4 + QVC Zwei + QVC Deutschland + RFO + RheinMain TV + RiC + Romance TV Deutschland + RTL Crime Deutschland + RTL Deutschland + RTL Living Deutschland + RTL Zwei Deutschland + Sat. 1 Deutschland + Sat. 1 Emotions + Sat. 1 Gold Deutschland + Servus TV Deutschland + Sixx Deutschland + Sky Atlantic + Sky Cinema Action + Sky Cinema Hits + Sky Cinema Nostalgie + Sky Comedy + Sky Krimi + Sky Sport 1 + Sky Sport 2 + Sky Sport Austria 1 + Sky Sport Bundesliga 1 + Sky Sport Bundesliga 2 + Sky Sport Bundesliga 3 + Sky Sport Bundesliga 4 + Sky Sport News + Sonnenklar TV + Sony AXN + Sport 1 + Sport 1+ + Sportdigital Fussball + SRF 1 + SR Fernsehen + SRF Zwei + Stingray Classica + Super RTL Deutschland + Syfy Deutschland + Tagesschau 24 + Tele 5 + TLC Germany + TNT Film + TNT Serie + TVA Ostbayern + TV Oberfranken + Universal TV Deutschland + Vox Deutschland + Welt + Welt der Wunder TV + ZDF + ZDF Info + ZDF Neo + diff --git a/sites/hd-plus.de/hd-plus.de.test.js b/sites/hd-plus.de/hd-plus.de.test.js index bbb5c2be..d8cb96d4 100644 --- a/sites/hd-plus.de/hd-plus.de.test.js +++ b/sites/hd-plus.de/hd-plus.de.test.js @@ -1,4 +1,4 @@ -// npx epg-grabber --config=sites/hd-plus.de/hd-plus.de.config.js --channels=sites/hd-plus.de/hd-plus.de.channels.xml --output=guide.xml --days=2 +// npm run grab -- --site=hd-plus.de const { parser, url } = require('./hd-plus.de.config.js') const dayjs = require('dayjs') @@ -12,7 +12,8 @@ const channel = { site_id: '1-2-3-tv-hd', xmltv_id: '123tv.de' } -const content = ` 1-2-3.tv HD Titel Ausstrahlungszeit Ihre Lieblingsuhren Do 25.11 00:00 Ihre Lieblingsuhren Do 25.11 01:00 Flash DealsDo 25.11 06:00 ` +const content = + ' 1-2-3.tv HD Titel Ausstrahlungszeit Ihre Lieblingsuhren Do 25.11 00:00 Ihre Lieblingsuhren Do 25.11 01:00 Flash DealsDo 25.11 06:00 ' it('can generate valid url', () => { const today = dayjs.utc().startOf('d') @@ -30,17 +31,17 @@ it('can parse response', () => { { start: '2021-11-24T23:00:00.000Z', stop: '2021-11-25T00:00:00.000Z', - title: `Ihre Lieblingsuhren` + title: 'Ihre Lieblingsuhren' }, { start: '2021-11-25T00:00:00.000Z', stop: '2021-11-25T05:00:00.000Z', - title: `Ihre Lieblingsuhren` + title: 'Ihre Lieblingsuhren' }, { start: '2021-11-25T05:00:00.000Z', stop: '2021-11-25T06:00:00.000Z', - title: `Flash Deals` + title: 'Flash Deals' } ]) }) @@ -49,7 +50,7 @@ it('can handle empty guide', () => { const result = parser({ date, channel, - content: `` + content: '' }) expect(result).toMatchObject([]) }) diff --git a/sites/horizon.tv/horizon.tv.channels.xml b/sites/horizon.tv/horizon.tv.channels.xml index 571ebb74..add65f86 100644 --- a/sites/horizon.tv/horizon.tv.channels.xml +++ b/sites/horizon.tv/horizon.tv.channels.xml @@ -1,189 +1,187 @@ - - - RTVS 24 HD - 360 TuneBox HD - AMC HD - Animal Planet HD - Magyar ATV - Auto Motor Sport - BabesTV HD - Barrandov Krimi HD - Bober - Brazzers TV HD - Cartoon Network HD - Cinemax 2 HD - Cinemax HD - Club MTV - CNBC Europe HD - CNN - CNN Prima News HD - Cool TV - CS History - CS Mystery - CT 1 HD - CT 2 HD - CT 24 HD - CT sport HD - Current Time - Discovery HD - Discovery Science HD - Disney Channel - Docubox HD - Dom Kino - Dom Kino PREMIUM HD - DTX HD - ducktv HD - Duna - Duna World - Dvojka HD - Deutsche Welle - EroXXX HD - Espreso TV - Euronews HD - Euronews FR - Euronews HU - Eurosport 1 HD - Eurosport 2 HD - Extasy HD - Extreme Sports - FashionBox - Fashion TV HD - Fast & FunBox HD - Fem3 - Fightbox HD - FilmBox HD - FilmBox Arthouse - FilmBox Extra HD - FilmBox Family - FilmBox Premium HD - FilmBox Stars HD - Film+ CZ HD - FILM+ HU - Folklorika HD - Food Network HD - France 24 - HBO 2 HD - HBO 3 HD - HBO HD - HirTV - History HD - Hobby TV HD - Jednotka HD - JimJam - JOJ 24 HD - JOJ Cinema HD - Jojko HD - JOJ Plus HD - JOJ Sport HD - WAU HD - Kabel eins - Carousel - Kino Barrandov HD - Leo TV HD - m1 HD - m2 - m4 Sport HD - m5 - Markiza HD - Dajto HD - Doma HD - Mezzo - Minimax - Mnam TV HD - Mnau TV - MTV 00s - MTV 80s - MTV 90s - MTV Live HD - Muzika Pervogo - Muzsika TV - National Geographic HD - Nat Geo Wild HD - Nick Jr. - Nickelodeon - NickToons - Nitro - Nova International HD - Nova Sport 1 HD - Nova Sport 2 HD - O! - ORF 1 - ORF 2 - ORF III - Park TV - Pobeda - Poekhali! - Prima COOL HD - Prima KRIMI HD - Prima love HD - Prima MAX HD - Prima PLUS HD - Prima ZOOM HD - ProSieben - Reality Kings HD - RELAX - Retro Music TV - RTL Gold - RTL KETTŐ - RTL DE - RTL HÁROM - RTL - RTL Zwei - SAT 1 - SENZI HD - Sky News - Slager muzika - Slager original - Slager Premium HD - Slager TV - Sorozat+ - Spektrum HD - Spektrum home - RTVS Sport HD - Sport 1 HD - Sport 2 HD - Sport 5 - Story 4 - Super RTL - Super TV2 - TA3 HD - Telecafe - Seznam.cz TV HD - Fishing and Hunting - Travel Channel HD - TRT World - TurboTV HD - TV2 - TV2Sef - TV4 - TV8 - Barrandov TV HD - JOJ HD - TV LUX HD - Noe TV HD - TV Paprika - TV Paprika HU - TVP Polonia - TV Raj HD - TV Romana - TV Ruzinov HD - UATV - Viasat Explore HD - Viasat History HD - Viasat Nature HD - VOX - Vremja - WELT - - - - - - - - - - - - + + + + + + + + + + + + Kabel eins + Nitro + ORF 1 + ORF 2 + ORF III + ProSieben + RTL DE + RTL Zwei + SAT 1 + Super RTL + VOX + WELT + 360 TuneBox HD + BabesTV HD + Brazzers TV HD + Club MTV + CNBC Europe HD + CNN + Docubox HD + Deutsche Welle + EroXXX HD + Euronews HD + Extasy HD + Extreme Sports + FashionBox + Fashion TV HD + Fast & FunBox HD + Fightbox HD + FilmBox Arthouse + Mezzo + MTV 00s + MTV 80s + MTV 90s + MTV Live HD + Reality Kings HD + Sky News + TRT World + UATV + Euronews FR + France 24 + RTVS 24 HD + AMC HD + Animal Planet HD + Magyar ATV + Auto Motor Sport + Barrandov Krimi HD + Bober + Cartoon Network HD + Cinemax 2 HD + Cinemax HD + CNN Prima News HD + Cool TV + CS History + CS Mystery + CT 1 HD + CT 2 HD + CT 24 HD + CT sport HD + Current Time + Discovery HD + Discovery Science HD + Disney Channel + Dom Kino + Dom Kino PREMIUM HD + DTX HD + ducktv HD + Duna + Duna World + Dvojka HD + Espreso TV + Euronews HU + Eurosport 1 HD + Eurosport 2 HD + Fem3 + FilmBox HD + FilmBox Extra HD + FilmBox Family + FilmBox Premium HD + FilmBox Stars HD + Film+ CZ HD + FILM+ HU + Folklorika HD + Food Network HD + HBO 2 HD + HBO 3 HD + HBO HD + HirTV + History HD + Hobby TV HD + Jednotka HD + JimJam + JOJ 24 HD + JOJ Cinema HD + Jojko HD + JOJ Plus HD + JOJ Sport HD + WAU HD + Carousel + Kino Barrandov HD + Leo TV HD + m1 HD + m2 + m4 Sport HD + m5 + Markiza HD + Dajto HD + Doma HD + Minimax + Mnam TV HD + Mnau TV + Muzika Pervogo + Muzsika TV + National Geographic HD + Nat Geo Wild HD + Nickelodeon + Nick Jr. + NickToons + Nova International HD + Nova Sport 1 HD + Nova Sport 2 HD + O! + Park TV + Pobeda + Poekhali! + Prima COOL HD + Prima KRIMI HD + Prima love HD + Prima MAX HD + Prima PLUS HD + Prima ZOOM HD + RELAX + Retro Music TV + RTL Gold + RTL HÁROM + RTL + RTL KETTŐ + SENZI HD + Slager muzika + Slager original + Slager Premium HD + Slager TV + Sorozat+ + Spektrum HD + Spektrum home + RTVS Sport HD + Sport 1 HD + Sport 2 HD + Sport 5 + Story 4 + Super TV2 + TA3 HD + Telecafe + Seznam.cz TV HD + Fishing and Hunting + Travel Channel HD + TurboTV HD + TV2 + TV2Sef + TV4 + TV8 + Barrandov TV HD + JOJ HD + TV LUX HD + Noe TV HD + TV Paprika + TV Paprika HU + TVP Polonia + TV Raj HD + TV Romana + TV Ruzinov HD + Viasat Explore HD + Viasat History HD + Viasat Nature HD + Vremja + diff --git a/sites/horizon.tv/horizon.tv.config.js b/sites/horizon.tv/horizon.tv.config.js index 92474cfa..0444317c 100644 --- a/sites/horizon.tv/horizon.tv.config.js +++ b/sites/horizon.tv/horizon.tv.config.js @@ -1,7 +1,7 @@ const axios = require('axios') const dayjs = require('dayjs') -const API_ENDPOINT = `https://legacy-static.oesp.horizon.tv/oesp/v4/SK/slk/web` +const API_ENDPOINT = 'https://legacy-static.oesp.horizon.tv/oesp/v4/SK/slk/web' module.exports = { site: 'horizon.tv', @@ -87,7 +87,7 @@ function parseStop(item) { function parseItems(content, channel) { if (!content) return [] - const data = (typeof content === 'string') ? JSON.parse(content) : content + const data = typeof content === 'string' ? JSON.parse(content) : content if (!data || !Array.isArray(data.entries)) return [] const entity = data.entries.find(e => e.o === `lgi-obolite-sk-prod-master:${channel.site_id}`) return entity ? entity.l : [] @@ -142,4 +142,4 @@ function parseYear(detail) { if (!detail) return null if (!detail.program) return null return detail.program.year || null -} \ No newline at end of file +} diff --git a/sites/horizon.tv/horizon.tv.test.js b/sites/horizon.tv/horizon.tv.test.js index 1e3fc985..4a5a6758 100644 --- a/sites/horizon.tv/horizon.tv.test.js +++ b/sites/horizon.tv/horizon.tv.test.js @@ -1,5 +1,5 @@ // npm run channels:parse -- --config=./sites/horizon.tv/horizon.tv.config.js --output=./sites/horizon.tv/horizon.tv.channels.xml -// npx epg-grabber --config=sites/horizon.tv/horizon.tv.config.js --channels=sites/horizon.tv/horizon.tv.channels.xml --output=guide.xml --days=2 +// npm run grab -- --site=horizon.tv const { parser, url } = require('./horizon.tv.config.js') const axios = require('axios') @@ -24,38 +24,70 @@ it('can generate valid url', () => { }) it('can parse response', done => { - const content = `{"entryCount":184,"totalResults":184,"updated":1675790518889,"expires":1675791343825,"title":"EPG","periods":4,"periodStartTime":1675724400000,"periodEndTime":1675746000000,"entries":[{"o":"lgi-obolite-sk-prod-master:10024","l":[{"i":"crid:~~2F~~2Fport.cs~~2F122941980,imi:7ca159c917344e0dd3fbe1cd8db5ff8043d96a78","t":"Avengement","s":1675719300000,"e":1675724700000,"c":"lgi-obolite-sk-prod-master:genre-9","a":false,"r":true,"rm":true,"rs":0,"re":604800,"rst":"cloud","ra":false,"ad":[],"sl":[]}]}]}` + const content = + '{"entryCount":184,"totalResults":184,"updated":1675790518889,"expires":1675791343825,"title":"EPG","periods":4,"periodStartTime":1675724400000,"periodEndTime":1675746000000,"entries":[{"o":"lgi-obolite-sk-prod-master:10024","l":[{"i":"crid:~~2F~~2Fport.cs~~2F122941980,imi:7ca159c917344e0dd3fbe1cd8db5ff8043d96a78","t":"Avengement","s":1675719300000,"e":1675724700000,"c":"lgi-obolite-sk-prod-master:genre-9","a":false,"r":true,"rm":true,"rs":0,"re":604800,"rst":"cloud","ra":false,"ad":[],"sl":[]}]}]}' axios.get.mockImplementation(url => { - if (url === 'https://legacy-static.oesp.horizon.tv/oesp/v4/SK/slk/web/programschedules/20230207/2') { + if ( + url === 'https://legacy-static.oesp.horizon.tv/oesp/v4/SK/slk/web/programschedules/20230207/2' + ) { return Promise.resolve({ - data: JSON.parse(`{"entryCount":184,"totalResults":184,"updated":1675790518889,"expires":1675791376097,"title":"EPG","periods":4,"periodStartTime":1675746000000,"periodEndTime":1675767600000,"entries":[{"o":"lgi-obolite-sk-prod-master:10024","l":[{"i":"crid:~~2F~~2Fport.cs~~2F248281986,imi:e85129f9d1e211406a521df7a36f22237c22651b","t":"Zoom In","s":1675744500000,"e":1675746000000,"c":"lgi-obolite-sk-prod-master:genre-21","a":false,"r":true,"rm":true,"rs":0,"re":604800,"rst":"cloud","ra":false,"ad":[],"sl":[]}]}]}`) + data: JSON.parse( + '{"entryCount":184,"totalResults":184,"updated":1675790518889,"expires":1675791376097,"title":"EPG","periods":4,"periodStartTime":1675746000000,"periodEndTime":1675767600000,"entries":[{"o":"lgi-obolite-sk-prod-master:10024","l":[{"i":"crid:~~2F~~2Fport.cs~~2F248281986,imi:e85129f9d1e211406a521df7a36f22237c22651b","t":"Zoom In","s":1675744500000,"e":1675746000000,"c":"lgi-obolite-sk-prod-master:genre-21","a":false,"r":true,"rm":true,"rs":0,"re":604800,"rst":"cloud","ra":false,"ad":[],"sl":[]}]}]}' + ) }) - } else if (url === 'https://legacy-static.oesp.horizon.tv/oesp/v4/SK/slk/web/programschedules/20230207/3') { + } else if ( + url === 'https://legacy-static.oesp.horizon.tv/oesp/v4/SK/slk/web/programschedules/20230207/3' + ) { return Promise.resolve({ - data: JSON.parse(`{"entryCount":184,"totalResults":184,"updated":1675789948804,"expires":1675791024984,"title":"EPG","periods":4,"periodStartTime":1675767600000,"periodEndTime":1675789200000,"entries":[{"o":"lgi-obolite-sk-prod-master:10024","l":[{"i":"crid:~~2F~~2Fport.cs~~2F1379541,imi:5f806a2a0bc13e9745e14907a27116c60ea2c6ad","t":"Studentka","s":1675761000000,"e":1675767600000,"c":"lgi-obolite-sk-prod-master:genre-14","a":false,"r":true,"rm":true,"rs":0,"re":604800,"rst":"cloud","ra":false,"ad":[],"sl":[]}]}]}`) + data: JSON.parse( + '{"entryCount":184,"totalResults":184,"updated":1675789948804,"expires":1675791024984,"title":"EPG","periods":4,"periodStartTime":1675767600000,"periodEndTime":1675789200000,"entries":[{"o":"lgi-obolite-sk-prod-master:10024","l":[{"i":"crid:~~2F~~2Fport.cs~~2F1379541,imi:5f806a2a0bc13e9745e14907a27116c60ea2c6ad","t":"Studentka","s":1675761000000,"e":1675767600000,"c":"lgi-obolite-sk-prod-master:genre-14","a":false,"r":true,"rm":true,"rs":0,"re":604800,"rst":"cloud","ra":false,"ad":[],"sl":[]}]}]}' + ) }) - } else if (url === 'https://legacy-static.oesp.horizon.tv/oesp/v4/SK/slk/web/programschedules/20230207/4') { + } else if ( + url === 'https://legacy-static.oesp.horizon.tv/oesp/v4/SK/slk/web/programschedules/20230207/4' + ) { return Promise.resolve({ - data: JSON.parse(`{"entryCount":184,"totalResults":184,"updated":1675789948804,"expires":1675790973469,"title":"EPG","periods":4,"periodStartTime":1675789200000,"periodEndTime":1675810800000,"entries":[{"o":"lgi-obolite-sk-prod-master:10024","l":[{"i":"crid:~~2F~~2Fport.cs~~2F71927954,imi:f1b4b0285b72cf44cba74e1c62322a4c682385c7","t":"Zilionáři","s":1675785900000,"e":1675791900000,"c":"lgi-obolite-sk-prod-master:genre-9","a":false,"r":true,"rm":true,"rs":0,"re":604800,"rst":"cloud","ra":false,"ad":[],"sl":[]}]}]}`) + data: JSON.parse( + '{"entryCount":184,"totalResults":184,"updated":1675789948804,"expires":1675790973469,"title":"EPG","periods":4,"periodStartTime":1675789200000,"periodEndTime":1675810800000,"entries":[{"o":"lgi-obolite-sk-prod-master:10024","l":[{"i":"crid:~~2F~~2Fport.cs~~2F71927954,imi:f1b4b0285b72cf44cba74e1c62322a4c682385c7","t":"Zilionáři","s":1675785900000,"e":1675791900000,"c":"lgi-obolite-sk-prod-master:genre-9","a":false,"r":true,"rm":true,"rs":0,"re":604800,"rst":"cloud","ra":false,"ad":[],"sl":[]}]}]}' + ) }) - } else if (url === 'https://legacy-static.oesp.horizon.tv/oesp/v4/SK/slk/web/listings/crid:~~2F~~2Fport.cs~~2F122941980,imi:7ca159c917344e0dd3fbe1cd8db5ff8043d96a78') { + } else if ( + url === + 'https://legacy-static.oesp.horizon.tv/oesp/v4/SK/slk/web/listings/crid:~~2F~~2Fport.cs~~2F122941980,imi:7ca159c917344e0dd3fbe1cd8db5ff8043d96a78' + ) { return Promise.resolve({ - data: JSON.parse(`{"id":"crid:~~2F~~2Fport.cs~~2F122941980,imi:7ca159c917344e0dd3fbe1cd8db5ff8043d96a78","startTime":1675719300000,"endTime":1675724700000,"actualStartTime":1675719300000,"actualEndTime":1675724700000,"expirationDate":1676324100000,"stationId":"lgi-obolite-sk-prod-master:10024","imi":"imi:7ca159c917344e0dd3fbe1cd8db5ff8043d96a78","scCridImi":"crid:~~2F~~2Fport.cs~~2F122941980,imi:7ca159c917344e0dd3fbe1cd8db5ff8043d96a78","mediaGroupId":"crid:~~2F~~2Fport.cs~~2F122941980","program":{"id":"crid:~~2F~~2Fport.cs~~2F122941980","title":"Avengement","description":"Během propustky z vězení za účelem návštěvy umírající matky v nemocnici zločinec Cain Burgess (Scott Adkins) unikne svým dozorcům a mizí v ulicích Londýna. Jde o epickou cestu krve a bolesti za...","longDescription":"Během propustky z vězení za účelem návštěvy umírající matky v nemocnici zločinec Cain Burgess (Scott Adkins) unikne svým dozorcům a mizí v ulicích Londýna. Jde o epickou cestu krve a bolesti za dosažením vytoužené pomsty na těch, kteří z něj udělali chladnokrevného vraha.","medium":"Movie","categories":[{"id":"lgi-obolite-sk-prod-master:genre-9","title":"Drama","scheme":"urn:libertyglobal:metadata:cs:ContentCS:2014_1"},{"id":"lgi-obolite-sk-prod-master:genre-33","title":"Akcia","scheme":"urn:libertyglobal:metadata:cs:ContentCS:2014_1"}],"isAdult":false,"parentalRating":"18","cast":["Scott Adkins","Craig Fairbrass","Thomas Turgoose","Nick Moran","Kierston Wareing","Leo Gregory","Mark Strange","Luke LaFontaine","Beau Fowler","Dan Styles","Christopher Sciueref","Matt Routledge","Jane Thorne","Louis Mandylor","Terence Maynard","Greg Burridge","Michael Higgs","Damian Gallagher","Daniel Adegboyega","John Ioannou","Sofie Golding-Spittle","Joe Egan","Darren Swain","Lee Charles","Dominic Kinnaird","Ross O'Hennessy","Teresa Mahoney","Andrew Dunkelberger","Sam Hardy","Ivan Moy","Mark Sears","Phillip Ray Tommy"],"directors":["Jesse V. Johnson"],"images":[{"assetType":"HighResLandscape","assetTypes":["HighResLandscape"],"url":"http://62.179.125.152/SK/Images/hrl_3fa8387df870473fdacb1024635b52b2496b159c.jpg"},{"assetType":"HighResPortrait","assetTypes":["HighResPortrait"],"url":"http://62.179.125.152/SK/Images/hrp_19e3a660e637cd39e31046c284a66b3a95d698e4.jpg"},{"assetType":"boxCover","assetTypes":["boxCover"],"url":"http://62.179.125.152/SK/Images/bc_939160772e45a783fb3a19970696f5ebcb6e568b.jpg"},{"assetType":"boxart-small","assetTypes":["boxart-small"],"url":"http://62.179.125.152/SK/Images/bc_939160772e45a783fb3a19970696f5ebcb6e568b.jpg?w=75&h=108&mode=box"},{"assetType":"boxart-medium","assetTypes":["boxart-medium"],"url":"http://62.179.125.152/SK/Images/bc_939160772e45a783fb3a19970696f5ebcb6e568b.jpg?w=110&h=159&mode=box"},{"assetType":"boxart-xlarge","assetTypes":["boxart-xlarge"],"url":"http://62.179.125.152/SK/Images/bc_939160772e45a783fb3a19970696f5ebcb6e568b.jpg?w=210&h=303&mode=box"},{"assetType":"boxart-large","assetTypes":["boxart-large"],"url":"http://62.179.125.152/SK/Images/bc_939160772e45a783fb3a19970696f5ebcb6e568b.jpg?w=180&h=260&mode=box"}],"rootId":"crid:~~2F~~2Fport.cs~~2F122941980","parentalRatingDescription":[],"resolutions":[],"mediaGroupId":"crid:~~2F~~2Fport.cs~~2F122941980","shortDescription":"Během propustky z vězení za účelem návštěvy umírající matky v nemocnici zločinec Cain Burgess (Scott Adkins) unikne svým dozorcům a mizí v ulicích Londýna. Jde o epickou cestu krve a bolesti za...","mediaType":"FeatureFilm","year":"2019","videos":[],"videoStreams":[],"entitlements":["VIP","_OPEN_"],"currentProductIds":[],"currentTvodProductIds":[]},"rootId":"crid:~~2F~~2Fport.cs~~2F122941980","replayTvAvailable":true,"audioTracks":[],"ratings":[],"offersLatestExpirationDate":1676247300000,"replayTvStartOffset":0,"replayTvEndOffset":604800,"replayEnabledOnMobileClients":true,"replaySource":"cloud","isGoReplayableViaExternalApp":false}`) + data: JSON.parse( + '{"id":"crid:~~2F~~2Fport.cs~~2F122941980,imi:7ca159c917344e0dd3fbe1cd8db5ff8043d96a78","startTime":1675719300000,"endTime":1675724700000,"actualStartTime":1675719300000,"actualEndTime":1675724700000,"expirationDate":1676324100000,"stationId":"lgi-obolite-sk-prod-master:10024","imi":"imi:7ca159c917344e0dd3fbe1cd8db5ff8043d96a78","scCridImi":"crid:~~2F~~2Fport.cs~~2F122941980,imi:7ca159c917344e0dd3fbe1cd8db5ff8043d96a78","mediaGroupId":"crid:~~2F~~2Fport.cs~~2F122941980","program":{"id":"crid:~~2F~~2Fport.cs~~2F122941980","title":"Avengement","description":"Během propustky z vězení za účelem návštěvy umírající matky v nemocnici zločinec Cain Burgess (Scott Adkins) unikne svým dozorcům a mizí v ulicích Londýna. Jde o epickou cestu krve a bolesti za...","longDescription":"Během propustky z vězení za účelem návštěvy umírající matky v nemocnici zločinec Cain Burgess (Scott Adkins) unikne svým dozorcům a mizí v ulicích Londýna. Jde o epickou cestu krve a bolesti za dosažením vytoužené pomsty na těch, kteří z něj udělali chladnokrevného vraha.","medium":"Movie","categories":[{"id":"lgi-obolite-sk-prod-master:genre-9","title":"Drama","scheme":"urn:libertyglobal:metadata:cs:ContentCS:2014_1"},{"id":"lgi-obolite-sk-prod-master:genre-33","title":"Akcia","scheme":"urn:libertyglobal:metadata:cs:ContentCS:2014_1"}],"isAdult":false,"parentalRating":"18","cast":["Scott Adkins","Craig Fairbrass","Thomas Turgoose","Nick Moran","Kierston Wareing","Leo Gregory","Mark Strange","Luke LaFontaine","Beau Fowler","Dan Styles","Christopher Sciueref","Matt Routledge","Jane Thorne","Louis Mandylor","Terence Maynard","Greg Burridge","Michael Higgs","Damian Gallagher","Daniel Adegboyega","John Ioannou","Sofie Golding-Spittle","Joe Egan","Darren Swain","Lee Charles","Dominic Kinnaird","Ross O\'Hennessy","Teresa Mahoney","Andrew Dunkelberger","Sam Hardy","Ivan Moy","Mark Sears","Phillip Ray Tommy"],"directors":["Jesse V. Johnson"],"images":[{"assetType":"HighResLandscape","assetTypes":["HighResLandscape"],"url":"http://62.179.125.152/SK/Images/hrl_3fa8387df870473fdacb1024635b52b2496b159c.jpg"},{"assetType":"HighResPortrait","assetTypes":["HighResPortrait"],"url":"http://62.179.125.152/SK/Images/hrp_19e3a660e637cd39e31046c284a66b3a95d698e4.jpg"},{"assetType":"boxCover","assetTypes":["boxCover"],"url":"http://62.179.125.152/SK/Images/bc_939160772e45a783fb3a19970696f5ebcb6e568b.jpg"},{"assetType":"boxart-small","assetTypes":["boxart-small"],"url":"http://62.179.125.152/SK/Images/bc_939160772e45a783fb3a19970696f5ebcb6e568b.jpg?w=75&h=108&mode=box"},{"assetType":"boxart-medium","assetTypes":["boxart-medium"],"url":"http://62.179.125.152/SK/Images/bc_939160772e45a783fb3a19970696f5ebcb6e568b.jpg?w=110&h=159&mode=box"},{"assetType":"boxart-xlarge","assetTypes":["boxart-xlarge"],"url":"http://62.179.125.152/SK/Images/bc_939160772e45a783fb3a19970696f5ebcb6e568b.jpg?w=210&h=303&mode=box"},{"assetType":"boxart-large","assetTypes":["boxart-large"],"url":"http://62.179.125.152/SK/Images/bc_939160772e45a783fb3a19970696f5ebcb6e568b.jpg?w=180&h=260&mode=box"}],"rootId":"crid:~~2F~~2Fport.cs~~2F122941980","parentalRatingDescription":[],"resolutions":[],"mediaGroupId":"crid:~~2F~~2Fport.cs~~2F122941980","shortDescription":"Během propustky z vězení za účelem návštěvy umírající matky v nemocnici zločinec Cain Burgess (Scott Adkins) unikne svým dozorcům a mizí v ulicích Londýna. Jde o epickou cestu krve a bolesti za...","mediaType":"FeatureFilm","year":"2019","videos":[],"videoStreams":[],"entitlements":["VIP","_OPEN_"],"currentProductIds":[],"currentTvodProductIds":[]},"rootId":"crid:~~2F~~2Fport.cs~~2F122941980","replayTvAvailable":true,"audioTracks":[],"ratings":[],"offersLatestExpirationDate":1676247300000,"replayTvStartOffset":0,"replayTvEndOffset":604800,"replayEnabledOnMobileClients":true,"replaySource":"cloud","isGoReplayableViaExternalApp":false}' + ) }) - } else if (url === 'https://legacy-static.oesp.horizon.tv/oesp/v4/SK/slk/web/listings/crid:~~2F~~2Fport.cs~~2F248281986,imi:e85129f9d1e211406a521df7a36f22237c22651b') { + } else if ( + url === + 'https://legacy-static.oesp.horizon.tv/oesp/v4/SK/slk/web/listings/crid:~~2F~~2Fport.cs~~2F248281986,imi:e85129f9d1e211406a521df7a36f22237c22651b' + ) { return Promise.resolve({ - data: JSON.parse(`{"id":"crid:~~2F~~2Fport.cs~~2F248281986,imi:e85129f9d1e211406a521df7a36f22237c22651b","startTime":1675744500000,"endTime":1675746000000,"actualStartTime":1675744500000,"actualEndTime":1675746000000,"expirationDate":1676349300000,"stationId":"lgi-obolite-sk-prod-master:10024","imi":"imi:e85129f9d1e211406a521df7a36f22237c22651b","scCridImi":"crid:~~2F~~2Fport.cs~~2F248281986,imi:e85129f9d1e211406a521df7a36f22237c22651b","mediaGroupId":"crid:~~2F~~2Fport.cs~~2F41764266","program":{"id":"crid:~~2F~~2Fport.cs~~2F248281986","title":"Zoom In","description":"Film/Kino","longDescription":"Film/Kino","medium":"TV","categories":[{"id":"lgi-obolite-sk-prod-master:genre-21","title":"Hudba a umenie","scheme":"urn:libertyglobal:metadata:cs:ContentCS:2014_1"},{"id":"lgi-obolite-sk-prod-master:genre-14","title":"Film","scheme":"urn:libertyglobal:metadata:cs:ContentCS:2014_1"}],"isAdult":false,"parentalRating":"9","cast":[],"directors":[],"images":[{"assetType":"HighResLandscape","assetTypes":["HighResLandscape"],"url":"http://62.179.125.152/SK/Images/hrl_cbed64b557e83227a2292604cbcae2d193877b1c.jpg"},{"assetType":"HighResPortrait","assetTypes":["HighResPortrait"],"url":"http://62.179.125.152/SK/Images/hrp_cfe405e669385365846b69196e1e94caa3e60de0.jpg"},{"assetType":"boxCover","assetTypes":["boxCover"],"url":"http://62.179.125.152/SK/Images/bc_cfe405e669385365846b69196e1e94caa3e60de0.jpg"},{"assetType":"boxart-small","assetTypes":["boxart-small"],"url":"http://62.179.125.152/SK/Images/bc_cfe405e669385365846b69196e1e94caa3e60de0.jpg?w=75&h=108&mode=box"},{"assetType":"boxart-medium","assetTypes":["boxart-medium"],"url":"http://62.179.125.152/SK/Images/bc_cfe405e669385365846b69196e1e94caa3e60de0.jpg?w=110&h=159&mode=box"},{"assetType":"boxart-xlarge","assetTypes":["boxart-xlarge"],"url":"http://62.179.125.152/SK/Images/bc_cfe405e669385365846b69196e1e94caa3e60de0.jpg?w=210&h=303&mode=box"},{"assetType":"boxart-large","assetTypes":["boxart-large"],"url":"http://62.179.125.152/SK/Images/bc_cfe405e669385365846b69196e1e94caa3e60de0.jpg?w=180&h=260&mode=box"}],"parentId":"crid:~~2F~~2Fport.cs~~2F41764266_series","rootId":"crid:~~2F~~2Fport.cs~~2F41764266","parentalRatingDescription":[],"resolutions":[],"mediaGroupId":"crid:~~2F~~2Fport.cs~~2F41764266","shortDescription":"Film/Kino","mediaType":"Episode","year":"2010","seriesEpisodeNumber":"1302070535","seriesNumber":"1302080520","videos":[],"videoStreams":[],"entitlements":["VIP","_OPEN_"],"currentProductIds":[],"currentTvodProductIds":[]},"parentId":"crid:~~2F~~2Fport.cs~~2F41764266_series","rootId":"crid:~~2F~~2Fport.cs~~2F41764266","replayTvAvailable":true,"audioTracks":[],"ratings":[],"offersLatestExpirationDate":1675746000000,"replayTvStartOffset":0,"replayTvEndOffset":604800,"replayEnabledOnMobileClients":true,"replaySource":"cloud","isGoReplayableViaExternalApp":false}`) + data: JSON.parse( + '{"id":"crid:~~2F~~2Fport.cs~~2F248281986,imi:e85129f9d1e211406a521df7a36f22237c22651b","startTime":1675744500000,"endTime":1675746000000,"actualStartTime":1675744500000,"actualEndTime":1675746000000,"expirationDate":1676349300000,"stationId":"lgi-obolite-sk-prod-master:10024","imi":"imi:e85129f9d1e211406a521df7a36f22237c22651b","scCridImi":"crid:~~2F~~2Fport.cs~~2F248281986,imi:e85129f9d1e211406a521df7a36f22237c22651b","mediaGroupId":"crid:~~2F~~2Fport.cs~~2F41764266","program":{"id":"crid:~~2F~~2Fport.cs~~2F248281986","title":"Zoom In","description":"Film/Kino","longDescription":"Film/Kino","medium":"TV","categories":[{"id":"lgi-obolite-sk-prod-master:genre-21","title":"Hudba a umenie","scheme":"urn:libertyglobal:metadata:cs:ContentCS:2014_1"},{"id":"lgi-obolite-sk-prod-master:genre-14","title":"Film","scheme":"urn:libertyglobal:metadata:cs:ContentCS:2014_1"}],"isAdult":false,"parentalRating":"9","cast":[],"directors":[],"images":[{"assetType":"HighResLandscape","assetTypes":["HighResLandscape"],"url":"http://62.179.125.152/SK/Images/hrl_cbed64b557e83227a2292604cbcae2d193877b1c.jpg"},{"assetType":"HighResPortrait","assetTypes":["HighResPortrait"],"url":"http://62.179.125.152/SK/Images/hrp_cfe405e669385365846b69196e1e94caa3e60de0.jpg"},{"assetType":"boxCover","assetTypes":["boxCover"],"url":"http://62.179.125.152/SK/Images/bc_cfe405e669385365846b69196e1e94caa3e60de0.jpg"},{"assetType":"boxart-small","assetTypes":["boxart-small"],"url":"http://62.179.125.152/SK/Images/bc_cfe405e669385365846b69196e1e94caa3e60de0.jpg?w=75&h=108&mode=box"},{"assetType":"boxart-medium","assetTypes":["boxart-medium"],"url":"http://62.179.125.152/SK/Images/bc_cfe405e669385365846b69196e1e94caa3e60de0.jpg?w=110&h=159&mode=box"},{"assetType":"boxart-xlarge","assetTypes":["boxart-xlarge"],"url":"http://62.179.125.152/SK/Images/bc_cfe405e669385365846b69196e1e94caa3e60de0.jpg?w=210&h=303&mode=box"},{"assetType":"boxart-large","assetTypes":["boxart-large"],"url":"http://62.179.125.152/SK/Images/bc_cfe405e669385365846b69196e1e94caa3e60de0.jpg?w=180&h=260&mode=box"}],"parentId":"crid:~~2F~~2Fport.cs~~2F41764266_series","rootId":"crid:~~2F~~2Fport.cs~~2F41764266","parentalRatingDescription":[],"resolutions":[],"mediaGroupId":"crid:~~2F~~2Fport.cs~~2F41764266","shortDescription":"Film/Kino","mediaType":"Episode","year":"2010","seriesEpisodeNumber":"1302070535","seriesNumber":"1302080520","videos":[],"videoStreams":[],"entitlements":["VIP","_OPEN_"],"currentProductIds":[],"currentTvodProductIds":[]},"parentId":"crid:~~2F~~2Fport.cs~~2F41764266_series","rootId":"crid:~~2F~~2Fport.cs~~2F41764266","replayTvAvailable":true,"audioTracks":[],"ratings":[],"offersLatestExpirationDate":1675746000000,"replayTvStartOffset":0,"replayTvEndOffset":604800,"replayEnabledOnMobileClients":true,"replaySource":"cloud","isGoReplayableViaExternalApp":false}' + ) }) - } else if (url === 'https://legacy-static.oesp.horizon.tv/oesp/v4/SK/slk/web/listings/crid:~~2F~~2Fport.cs~~2F1379541,imi:5f806a2a0bc13e9745e14907a27116c60ea2c6ad') { + } else if ( + url === + 'https://legacy-static.oesp.horizon.tv/oesp/v4/SK/slk/web/listings/crid:~~2F~~2Fport.cs~~2F1379541,imi:5f806a2a0bc13e9745e14907a27116c60ea2c6ad' + ) { return Promise.resolve({ - data: JSON.parse(`{"id":"crid:~~2F~~2Fport.cs~~2F1379541,imi:5f806a2a0bc13e9745e14907a27116c60ea2c6ad","startTime":1675761000000,"endTime":1675767600000,"actualStartTime":1675761000000,"actualEndTime":1675767600000,"expirationDate":1676365800000,"stationId":"lgi-obolite-sk-prod-master:10024","imi":"imi:5f806a2a0bc13e9745e14907a27116c60ea2c6ad","scCridImi":"crid:~~2F~~2Fport.cs~~2F1379541,imi:5f806a2a0bc13e9745e14907a27116c60ea2c6ad","mediaGroupId":"crid:~~2F~~2Fport.cs~~2F1379541","program":{"id":"crid:~~2F~~2Fport.cs~~2F1379541","title":"Studentka","description":"Ambiciózní vysokoškolačka Valentina (Sophie Marceau) studuje literaturu na pařížské Sorbonně a právě se připravuje k závěrečným zkouškám. Žádný odpočinek, žádné volno, žádné večírky, téměř žádný...","longDescription":"Ambiciózní vysokoškolačka Valentina (Sophie Marceau) studuje literaturu na pařížské Sorbonně a právě se připravuje k závěrečným zkouškám. Žádný odpočinek, žádné volno, žádné večírky, téměř žádný spánek a především a hlavně ... žádná láska! Věří, že jedině tak obstojí před zkušební komisí. Jednoho dne se však odehraje něco, s čím nepočítala. Potká charismatického hudebníka Neda - a bláznivě se zamiluje. V tuto chvíli stojí před osudovým rozhodnutím: zahodí roky obrovského studijního nasazení, nebo odmítne lásku? Nebo se snad dá obojí skloubit dohromady?","medium":"Movie","categories":[{"id":"lgi-obolite-sk-prod-master:genre-14","title":"Film","scheme":"urn:libertyglobal:metadata:cs:ContentCS:2014_1"},{"id":"lgi-obolite-sk-prod-master:genre-4","title":"Komédia","scheme":"urn:libertyglobal:metadata:cs:ContentCS:2014_1"}],"isAdult":false,"parentalRating":"9","cast":["Sophie Marceauová","Vincent Lindon","Elisabeth Vitali","Elena Pompei","Jean-Claude Leguay","Brigitte Chamarande","Christian Pereira","Gérard Dacier","Roberto Attias","Beppe Chierici","Nathalie Mann","Anne Macina","Janine Souchon","Virginie Demians","Hugues Leforestier","Jacqueline Noëlle","Marc-André Brunet","Isabelle Caubère","André Chazel","Med Salah Cheurfi","Guillaume Corea","Eric Denize","Gilles Gaston-Dreyfuss","Benoît Gourley","Marc Innocenti","Najim Laouriga","Laurent Ledermann","Philippe Maygal","Dominique Pifarely","Ysé Tran"],"directors":["Francis De Gueltz","Dominique Talmon","Claude Pinoteau"],"images":[{"assetType":"HighResLandscape","assetTypes":["HighResLandscape"],"url":"http://62.179.125.152/SK/Images/hrl_a8abceaa59bbb0aae8031dcdd5deba03aba8a100.jpg"},{"assetType":"HighResPortrait","assetTypes":["HighResPortrait"],"url":"http://62.179.125.152/SK/Images/hrp_72b11621270454812ac8474698fc75670db4a49d.jpg"},{"assetType":"boxCover","assetTypes":["boxCover"],"url":"http://62.179.125.152/SK/Images/bc_72b11621270454812ac8474698fc75670db4a49d.jpg"},{"assetType":"boxart-small","assetTypes":["boxart-small"],"url":"http://62.179.125.152/SK/Images/bc_72b11621270454812ac8474698fc75670db4a49d.jpg?w=75&h=108&mode=box"},{"assetType":"boxart-medium","assetTypes":["boxart-medium"],"url":"http://62.179.125.152/SK/Images/bc_72b11621270454812ac8474698fc75670db4a49d.jpg?w=110&h=159&mode=box"},{"assetType":"boxart-xlarge","assetTypes":["boxart-xlarge"],"url":"http://62.179.125.152/SK/Images/bc_72b11621270454812ac8474698fc75670db4a49d.jpg?w=210&h=303&mode=box"},{"assetType":"boxart-large","assetTypes":["boxart-large"],"url":"http://62.179.125.152/SK/Images/bc_72b11621270454812ac8474698fc75670db4a49d.jpg?w=180&h=260&mode=box"}],"rootId":"crid:~~2F~~2Fport.cs~~2F1379541","parentalRatingDescription":[],"resolutions":[],"mediaGroupId":"crid:~~2F~~2Fport.cs~~2F1379541","shortDescription":"Ambiciózní vysokoškolačka Valentina (Sophie Marceau) studuje literaturu na pařížské Sorbonně a právě se připravuje k závěrečným zkouškám. Žádný odpočinek, žádné volno, žádné večírky, téměř žádný...","mediaType":"FeatureFilm","year":"1988","videos":[],"videoStreams":[],"entitlements":["VIP","_OPEN_"],"currentProductIds":[],"currentTvodProductIds":[]},"rootId":"crid:~~2F~~2Fport.cs~~2F1379541","replayTvAvailable":true,"audioTracks":[],"ratings":[],"offersLatestExpirationDate":1675767600000,"replayTvStartOffset":0,"replayTvEndOffset":604800,"replayEnabledOnMobileClients":true,"replaySource":"cloud","isGoReplayableViaExternalApp":false}`) + data: JSON.parse( + '{"id":"crid:~~2F~~2Fport.cs~~2F1379541,imi:5f806a2a0bc13e9745e14907a27116c60ea2c6ad","startTime":1675761000000,"endTime":1675767600000,"actualStartTime":1675761000000,"actualEndTime":1675767600000,"expirationDate":1676365800000,"stationId":"lgi-obolite-sk-prod-master:10024","imi":"imi:5f806a2a0bc13e9745e14907a27116c60ea2c6ad","scCridImi":"crid:~~2F~~2Fport.cs~~2F1379541,imi:5f806a2a0bc13e9745e14907a27116c60ea2c6ad","mediaGroupId":"crid:~~2F~~2Fport.cs~~2F1379541","program":{"id":"crid:~~2F~~2Fport.cs~~2F1379541","title":"Studentka","description":"Ambiciózní vysokoškolačka Valentina (Sophie Marceau) studuje literaturu na pařížské Sorbonně a právě se připravuje k závěrečným zkouškám. Žádný odpočinek, žádné volno, žádné večírky, téměř žádný...","longDescription":"Ambiciózní vysokoškolačka Valentina (Sophie Marceau) studuje literaturu na pařížské Sorbonně a právě se připravuje k závěrečným zkouškám. Žádný odpočinek, žádné volno, žádné večírky, téměř žádný spánek a především a hlavně ... žádná láska! Věří, že jedině tak obstojí před zkušební komisí. Jednoho dne se však odehraje něco, s čím nepočítala. Potká charismatického hudebníka Neda - a bláznivě se zamiluje. V tuto chvíli stojí před osudovým rozhodnutím: zahodí roky obrovského studijního nasazení, nebo odmítne lásku? Nebo se snad dá obojí skloubit dohromady?","medium":"Movie","categories":[{"id":"lgi-obolite-sk-prod-master:genre-14","title":"Film","scheme":"urn:libertyglobal:metadata:cs:ContentCS:2014_1"},{"id":"lgi-obolite-sk-prod-master:genre-4","title":"Komédia","scheme":"urn:libertyglobal:metadata:cs:ContentCS:2014_1"}],"isAdult":false,"parentalRating":"9","cast":["Sophie Marceauová","Vincent Lindon","Elisabeth Vitali","Elena Pompei","Jean-Claude Leguay","Brigitte Chamarande","Christian Pereira","Gérard Dacier","Roberto Attias","Beppe Chierici","Nathalie Mann","Anne Macina","Janine Souchon","Virginie Demians","Hugues Leforestier","Jacqueline Noëlle","Marc-André Brunet","Isabelle Caubère","André Chazel","Med Salah Cheurfi","Guillaume Corea","Eric Denize","Gilles Gaston-Dreyfuss","Benoît Gourley","Marc Innocenti","Najim Laouriga","Laurent Ledermann","Philippe Maygal","Dominique Pifarely","Ysé Tran"],"directors":["Francis De Gueltz","Dominique Talmon","Claude Pinoteau"],"images":[{"assetType":"HighResLandscape","assetTypes":["HighResLandscape"],"url":"http://62.179.125.152/SK/Images/hrl_a8abceaa59bbb0aae8031dcdd5deba03aba8a100.jpg"},{"assetType":"HighResPortrait","assetTypes":["HighResPortrait"],"url":"http://62.179.125.152/SK/Images/hrp_72b11621270454812ac8474698fc75670db4a49d.jpg"},{"assetType":"boxCover","assetTypes":["boxCover"],"url":"http://62.179.125.152/SK/Images/bc_72b11621270454812ac8474698fc75670db4a49d.jpg"},{"assetType":"boxart-small","assetTypes":["boxart-small"],"url":"http://62.179.125.152/SK/Images/bc_72b11621270454812ac8474698fc75670db4a49d.jpg?w=75&h=108&mode=box"},{"assetType":"boxart-medium","assetTypes":["boxart-medium"],"url":"http://62.179.125.152/SK/Images/bc_72b11621270454812ac8474698fc75670db4a49d.jpg?w=110&h=159&mode=box"},{"assetType":"boxart-xlarge","assetTypes":["boxart-xlarge"],"url":"http://62.179.125.152/SK/Images/bc_72b11621270454812ac8474698fc75670db4a49d.jpg?w=210&h=303&mode=box"},{"assetType":"boxart-large","assetTypes":["boxart-large"],"url":"http://62.179.125.152/SK/Images/bc_72b11621270454812ac8474698fc75670db4a49d.jpg?w=180&h=260&mode=box"}],"rootId":"crid:~~2F~~2Fport.cs~~2F1379541","parentalRatingDescription":[],"resolutions":[],"mediaGroupId":"crid:~~2F~~2Fport.cs~~2F1379541","shortDescription":"Ambiciózní vysokoškolačka Valentina (Sophie Marceau) studuje literaturu na pařížské Sorbonně a právě se připravuje k závěrečným zkouškám. Žádný odpočinek, žádné volno, žádné večírky, téměř žádný...","mediaType":"FeatureFilm","year":"1988","videos":[],"videoStreams":[],"entitlements":["VIP","_OPEN_"],"currentProductIds":[],"currentTvodProductIds":[]},"rootId":"crid:~~2F~~2Fport.cs~~2F1379541","replayTvAvailable":true,"audioTracks":[],"ratings":[],"offersLatestExpirationDate":1675767600000,"replayTvStartOffset":0,"replayTvEndOffset":604800,"replayEnabledOnMobileClients":true,"replaySource":"cloud","isGoReplayableViaExternalApp":false}' + ) }) - } else if (url === 'https://legacy-static.oesp.horizon.tv/oesp/v4/SK/slk/web/listings/crid:~~2F~~2Fport.cs~~2F71927954,imi:f1b4b0285b72cf44cba74e1c62322a4c682385c7') { + } else if ( + url === + 'https://legacy-static.oesp.horizon.tv/oesp/v4/SK/slk/web/listings/crid:~~2F~~2Fport.cs~~2F71927954,imi:f1b4b0285b72cf44cba74e1c62322a4c682385c7' + ) { return Promise.resolve({ - data: JSON.parse(`{"id":"crid:~~2F~~2Fport.cs~~2F71927954,imi:f1b4b0285b72cf44cba74e1c62322a4c682385c7","startTime":1675785900000,"endTime":1675791900000,"actualStartTime":1675785900000,"actualEndTime":1675791900000,"expirationDate":1676390700000,"stationId":"lgi-obolite-sk-prod-master:10024","imi":"imi:f1b4b0285b72cf44cba74e1c62322a4c682385c7","scCridImi":"crid:~~2F~~2Fport.cs~~2F71927954,imi:f1b4b0285b72cf44cba74e1c62322a4c682385c7","mediaGroupId":"crid:~~2F~~2Fport.cs~~2F71927954","program":{"id":"crid:~~2F~~2Fport.cs~~2F71927954","title":"Zilionáři","description":"David (Zach Galifianakis) je nekomplikovaný muž, který uvízl v monotónním životě. Den co den usedá za volant svého obrněného automobilu, aby odvážel obrovské sumy peněz jiných lidí. Jediným...","longDescription":"David (Zach Galifianakis) je nekomplikovaný muž, který uvízl v monotónním životě. Den co den usedá za volant svého obrněného automobilu, aby odvážel obrovské sumy peněz jiných lidí. Jediným vzrušujícím momentem v jeho životě je flirtování s kolegyní Kelly (Kristen Wiig), která ho však brzy zatáhne do těžko uvěřitelného dobrodružství. Skupinka nepříliš inteligentních loserů, pod vedením Steva (Owen Wilson), plánuje vyloupit banku a David jim v tom má samozřejmě pomoci. Navzdory absolutně amatérskému plánu se ale stane nemožné a oni mají najednou v kapse 17 miliónů dolarů. A protože tato partička je opravdu bláznivá, začne je hned ve velkém roztáčet. Peníze létají vzduchem za luxusní a kolikrát i zbytečné věci, ale nedochází jim, že pro policii tak zanechávají jasné stopy...","medium":"Movie","categories":[{"id":"lgi-obolite-sk-prod-master:genre-9","title":"Drama","scheme":"urn:libertyglobal:metadata:cs:ContentCS:2014_1"},{"id":"lgi-obolite-sk-prod-master:genre-33","title":"Akcia","scheme":"urn:libertyglobal:metadata:cs:ContentCS:2014_1"}],"isAdult":false,"parentalRating":"15","cast":["Zach Galifianakis","Kristen Wiigová","Owen Wilson","Kate McKinnon","Leslie Jones","Jason Sudeikis","Ross Kimball","Devin Ratray","Mary Elizabeth Ellisová","Jon Daly","Ken Marino","Daniel Zacapa","Tom Werme","Njema Williams","Nils Cruz","Michael Fraguada","Christian Gonzalez","Candace Blanchard","Karsten Friske","Dallas Edwards","Barry Ratcliffe","Shelton Grant","Laura Palka","Reegus Flenory","Wynn Reichert","Jill Jane Clements","Joseph S. Wilson","Jee An","Rhoda Griffisová","Nicole Dupre Sobchack"],"directors":["Scott August","Richard L. Fox","Michelle Malley-Campos","Sebastian Mazzola","Steven Ritzi","Pete Waterman","Jared Hess"],"images":[{"assetType":"HighResLandscape","assetTypes":["HighResLandscape"],"url":"http://62.179.125.152/SK/Images/hrl_fd098116bac1429318aaf5fdae498ce76e258782.jpg"},{"assetType":"HighResPortrait","assetTypes":["HighResPortrait"],"url":"http://62.179.125.152/SK/Images/hrp_6f857ae9375b3bcceb6353a5b35775f52cd85302.jpg"},{"assetType":"boxCover","assetTypes":["boxCover"],"url":"http://62.179.125.152/SK/Images/bc_3f5a24412c7f4f434094fa1147a304aa6a5ebda6.jpg"},{"assetType":"boxart-small","assetTypes":["boxart-small"],"url":"http://62.179.125.152/SK/Images/bc_3f5a24412c7f4f434094fa1147a304aa6a5ebda6.jpg?w=75&h=108&mode=box"},{"assetType":"boxart-medium","assetTypes":["boxart-medium"],"url":"http://62.179.125.152/SK/Images/bc_3f5a24412c7f4f434094fa1147a304aa6a5ebda6.jpg?w=110&h=159&mode=box"},{"assetType":"boxart-xlarge","assetTypes":["boxart-xlarge"],"url":"http://62.179.125.152/SK/Images/bc_3f5a24412c7f4f434094fa1147a304aa6a5ebda6.jpg?w=210&h=303&mode=box"},{"assetType":"boxart-large","assetTypes":["boxart-large"],"url":"http://62.179.125.152/SK/Images/bc_3f5a24412c7f4f434094fa1147a304aa6a5ebda6.jpg?w=180&h=260&mode=box"}],"rootId":"crid:~~2F~~2Fport.cs~~2F71927954","parentalRatingDescription":[],"resolutions":[],"mediaGroupId":"crid:~~2F~~2Fport.cs~~2F71927954","shortDescription":"David (Zach Galifianakis) je nekomplikovaný muž, který uvízl v monotónním životě. Den co den usedá za volant svého obrněného automobilu, aby odvážel obrovské sumy peněz jiných lidí. Jediným...","mediaType":"FeatureFilm","year":"2016","videos":[],"videoStreams":[],"entitlements":["VIP","_OPEN_"],"currentProductIds":[],"currentTvodProductIds":[]},"rootId":"crid:~~2F~~2Fport.cs~~2F71927954","replayTvAvailable":true,"audioTracks":[],"ratings":[],"offersLatestExpirationDate":1676187900000,"replayTvStartOffset":0,"replayTvEndOffset":604800,"replayEnabledOnMobileClients":true,"replaySource":"cloud","isGoReplayableViaExternalApp":false}`) + data: JSON.parse( + '{"id":"crid:~~2F~~2Fport.cs~~2F71927954,imi:f1b4b0285b72cf44cba74e1c62322a4c682385c7","startTime":1675785900000,"endTime":1675791900000,"actualStartTime":1675785900000,"actualEndTime":1675791900000,"expirationDate":1676390700000,"stationId":"lgi-obolite-sk-prod-master:10024","imi":"imi:f1b4b0285b72cf44cba74e1c62322a4c682385c7","scCridImi":"crid:~~2F~~2Fport.cs~~2F71927954,imi:f1b4b0285b72cf44cba74e1c62322a4c682385c7","mediaGroupId":"crid:~~2F~~2Fport.cs~~2F71927954","program":{"id":"crid:~~2F~~2Fport.cs~~2F71927954","title":"Zilionáři","description":"David (Zach Galifianakis) je nekomplikovaný muž, který uvízl v monotónním životě. Den co den usedá za volant svého obrněného automobilu, aby odvážel obrovské sumy peněz jiných lidí. Jediným...","longDescription":"David (Zach Galifianakis) je nekomplikovaný muž, který uvízl v monotónním životě. Den co den usedá za volant svého obrněného automobilu, aby odvážel obrovské sumy peněz jiných lidí. Jediným vzrušujícím momentem v jeho životě je flirtování s kolegyní Kelly (Kristen Wiig), která ho však brzy zatáhne do těžko uvěřitelného dobrodružství. Skupinka nepříliš inteligentních loserů, pod vedením Steva (Owen Wilson), plánuje vyloupit banku a David jim v tom má samozřejmě pomoci. Navzdory absolutně amatérskému plánu se ale stane nemožné a oni mají najednou v kapse 17 miliónů dolarů. A protože tato partička je opravdu bláznivá, začne je hned ve velkém roztáčet. Peníze létají vzduchem za luxusní a kolikrát i zbytečné věci, ale nedochází jim, že pro policii tak zanechávají jasné stopy...","medium":"Movie","categories":[{"id":"lgi-obolite-sk-prod-master:genre-9","title":"Drama","scheme":"urn:libertyglobal:metadata:cs:ContentCS:2014_1"},{"id":"lgi-obolite-sk-prod-master:genre-33","title":"Akcia","scheme":"urn:libertyglobal:metadata:cs:ContentCS:2014_1"}],"isAdult":false,"parentalRating":"15","cast":["Zach Galifianakis","Kristen Wiigová","Owen Wilson","Kate McKinnon","Leslie Jones","Jason Sudeikis","Ross Kimball","Devin Ratray","Mary Elizabeth Ellisová","Jon Daly","Ken Marino","Daniel Zacapa","Tom Werme","Njema Williams","Nils Cruz","Michael Fraguada","Christian Gonzalez","Candace Blanchard","Karsten Friske","Dallas Edwards","Barry Ratcliffe","Shelton Grant","Laura Palka","Reegus Flenory","Wynn Reichert","Jill Jane Clements","Joseph S. Wilson","Jee An","Rhoda Griffisová","Nicole Dupre Sobchack"],"directors":["Scott August","Richard L. Fox","Michelle Malley-Campos","Sebastian Mazzola","Steven Ritzi","Pete Waterman","Jared Hess"],"images":[{"assetType":"HighResLandscape","assetTypes":["HighResLandscape"],"url":"http://62.179.125.152/SK/Images/hrl_fd098116bac1429318aaf5fdae498ce76e258782.jpg"},{"assetType":"HighResPortrait","assetTypes":["HighResPortrait"],"url":"http://62.179.125.152/SK/Images/hrp_6f857ae9375b3bcceb6353a5b35775f52cd85302.jpg"},{"assetType":"boxCover","assetTypes":["boxCover"],"url":"http://62.179.125.152/SK/Images/bc_3f5a24412c7f4f434094fa1147a304aa6a5ebda6.jpg"},{"assetType":"boxart-small","assetTypes":["boxart-small"],"url":"http://62.179.125.152/SK/Images/bc_3f5a24412c7f4f434094fa1147a304aa6a5ebda6.jpg?w=75&h=108&mode=box"},{"assetType":"boxart-medium","assetTypes":["boxart-medium"],"url":"http://62.179.125.152/SK/Images/bc_3f5a24412c7f4f434094fa1147a304aa6a5ebda6.jpg?w=110&h=159&mode=box"},{"assetType":"boxart-xlarge","assetTypes":["boxart-xlarge"],"url":"http://62.179.125.152/SK/Images/bc_3f5a24412c7f4f434094fa1147a304aa6a5ebda6.jpg?w=210&h=303&mode=box"},{"assetType":"boxart-large","assetTypes":["boxart-large"],"url":"http://62.179.125.152/SK/Images/bc_3f5a24412c7f4f434094fa1147a304aa6a5ebda6.jpg?w=180&h=260&mode=box"}],"rootId":"crid:~~2F~~2Fport.cs~~2F71927954","parentalRatingDescription":[],"resolutions":[],"mediaGroupId":"crid:~~2F~~2Fport.cs~~2F71927954","shortDescription":"David (Zach Galifianakis) je nekomplikovaný muž, který uvízl v monotónním životě. Den co den usedá za volant svého obrněného automobilu, aby odvážel obrovské sumy peněz jiných lidí. Jediným...","mediaType":"FeatureFilm","year":"2016","videos":[],"videoStreams":[],"entitlements":["VIP","_OPEN_"],"currentProductIds":[],"currentTvodProductIds":[]},"rootId":"crid:~~2F~~2Fport.cs~~2F71927954","replayTvAvailable":true,"audioTracks":[],"ratings":[],"offersLatestExpirationDate":1676187900000,"replayTvStartOffset":0,"replayTvEndOffset":604800,"replayEnabledOnMobileClients":true,"replaySource":"cloud","isGoReplayableViaExternalApp":false}' + ) }) - } else { return Promise.resolve({ data: '' }) } @@ -74,11 +106,9 @@ it('can parse response', done => { start: '2023-02-06T21:35:00.000Z', stop: '2023-02-06T23:05:00.000Z', title: 'Avengement', - description: `Během propustky z vězení za účelem návštěvy umírající matky v nemocnici zločinec Cain Burgess (Scott Adkins) unikne svým dozorcům a mizí v ulicích Londýna. Jde o epickou cestu krve a bolesti za dosažením vytoužené pomsty na těch, kteří z něj udělali chladnokrevného vraha.`, - category: [ - 'Drama', - 'Akcia' - ], + description: + 'Během propustky z vězení za účelem návštěvy umírající matky v nemocnici zločinec Cain Burgess (Scott Adkins) unikne svým dozorcům a mizí v ulicích Londýna. Jde o epickou cestu krve a bolesti za dosažením vytoužené pomsty na těch, kteří z něj udělali chladnokrevného vraha.', + category: ['Drama', 'Akcia'], directors: ['Jesse V. Johnson'], actors: [ 'Scott Adkins', @@ -106,7 +136,7 @@ it('can parse response', done => { 'Darren Swain', 'Lee Charles', 'Dominic Kinnaird', - `Ross O'Hennessy`, + "Ross O'Hennessy", 'Teresa Mahoney', 'Andrew Dunkelberger', 'Sam Hardy', @@ -128,45 +158,42 @@ it('can parse response', done => { start: '2023-02-07T09:10:00.000Z', stop: '2023-02-07T11:00:00.000Z', title: 'Studentka', - description: 'Ambiciózní vysokoškolačka Valentina (Sophie Marceau) studuje literaturu na pařížské Sorbonně a právě se připravuje k závěrečným zkouškám. Žádný odpočinek, žádné volno, žádné večírky, téměř žádný spánek a především a hlavně ... žádná láska! Věří, že jedině tak obstojí před zkušební komisí. Jednoho dne se však odehraje něco, s čím nepočítala. Potká charismatického hudebníka Neda - a bláznivě se zamiluje. V tuto chvíli stojí před osudovým rozhodnutím: zahodí roky obrovského studijního nasazení, nebo odmítne lásku? Nebo se snad dá obojí skloubit dohromady?', + description: + 'Ambiciózní vysokoškolačka Valentina (Sophie Marceau) studuje literaturu na pařížské Sorbonně a právě se připravuje k závěrečným zkouškám. Žádný odpočinek, žádné volno, žádné večírky, téměř žádný spánek a především a hlavně ... žádná láska! Věří, že jedině tak obstojí před zkušební komisí. Jednoho dne se však odehraje něco, s čím nepočítala. Potká charismatického hudebníka Neda - a bláznivě se zamiluje. V tuto chvíli stojí před osudovým rozhodnutím: zahodí roky obrovského studijního nasazení, nebo odmítne lásku? Nebo se snad dá obojí skloubit dohromady?', category: ['Film', 'Komédia'], actors: [ - "Sophie Marceauová", - "Vincent Lindon", - "Elisabeth Vitali", - "Elena Pompei", - "Jean-Claude Leguay", - "Brigitte Chamarande", - "Christian Pereira", - "Gérard Dacier", - "Roberto Attias", - "Beppe Chierici", - "Nathalie Mann", - "Anne Macina", - "Janine Souchon", - "Virginie Demians", - "Hugues Leforestier", - "Jacqueline Noëlle", - "Marc-André Brunet", - "Isabelle Caubère", - "André Chazel", - "Med Salah Cheurfi", - "Guillaume Corea", - "Eric Denize", - "Gilles Gaston-Dreyfuss", - "Benoît Gourley", - "Marc Innocenti", - "Najim Laouriga", - "Laurent Ledermann", - "Philippe Maygal", - "Dominique Pifarely", - "Ysé Tran" - ], - directors: [ - "Francis De Gueltz", - "Dominique Talmon", - "Claude Pinoteau" + 'Sophie Marceauová', + 'Vincent Lindon', + 'Elisabeth Vitali', + 'Elena Pompei', + 'Jean-Claude Leguay', + 'Brigitte Chamarande', + 'Christian Pereira', + 'Gérard Dacier', + 'Roberto Attias', + 'Beppe Chierici', + 'Nathalie Mann', + 'Anne Macina', + 'Janine Souchon', + 'Virginie Demians', + 'Hugues Leforestier', + 'Jacqueline Noëlle', + 'Marc-André Brunet', + 'Isabelle Caubère', + 'André Chazel', + 'Med Salah Cheurfi', + 'Guillaume Corea', + 'Eric Denize', + 'Gilles Gaston-Dreyfuss', + 'Benoît Gourley', + 'Marc Innocenti', + 'Najim Laouriga', + 'Laurent Ledermann', + 'Philippe Maygal', + 'Dominique Pifarely', + 'Ysé Tran' ], + directors: ['Francis De Gueltz', 'Dominique Talmon', 'Claude Pinoteau'], date: '1988' }, { @@ -177,57 +204,57 @@ it('can parse response', done => { 'David (Zach Galifianakis) je nekomplikovaný muž, který uvízl v monotónním životě. Den co den usedá za volant svého obrněného automobilu, aby odvážel obrovské sumy peněz jiných lidí. Jediným vzrušujícím momentem v jeho životě je flirtování s kolegyní Kelly (Kristen Wiig), která ho však brzy zatáhne do těžko uvěřitelného dobrodružství. Skupinka nepříliš inteligentních loserů, pod vedením Steva (Owen Wilson), plánuje vyloupit banku a David jim v tom má samozřejmě pomoci. Navzdory absolutně amatérskému plánu se ale stane nemožné a oni mají najednou v kapse 17 miliónů dolarů. A protože tato partička je opravdu bláznivá, začne je hned ve velkém roztáčet. Peníze létají vzduchem za luxusní a kolikrát i zbytečné věci, ale nedochází jim, že pro policii tak zanechávají jasné stopy...', category: ['Drama', 'Akcia'], actors: [ - "Zach Galifianakis", - "Kristen Wiigová", - "Owen Wilson", - "Kate McKinnon", - "Leslie Jones", - "Jason Sudeikis", - "Ross Kimball", - "Devin Ratray", - "Mary Elizabeth Ellisová", - "Jon Daly", - "Ken Marino", - "Daniel Zacapa", - "Tom Werme", - "Njema Williams", - "Nils Cruz", - "Michael Fraguada", - "Christian Gonzalez", - "Candace Blanchard", - "Karsten Friske", - "Dallas Edwards", - "Barry Ratcliffe", - "Shelton Grant", - "Laura Palka", - "Reegus Flenory", - "Wynn Reichert", - "Jill Jane Clements", - "Joseph S. Wilson", - "Jee An", - "Rhoda Griffisová", - "Nicole Dupre Sobchack" + 'Zach Galifianakis', + 'Kristen Wiigová', + 'Owen Wilson', + 'Kate McKinnon', + 'Leslie Jones', + 'Jason Sudeikis', + 'Ross Kimball', + 'Devin Ratray', + 'Mary Elizabeth Ellisová', + 'Jon Daly', + 'Ken Marino', + 'Daniel Zacapa', + 'Tom Werme', + 'Njema Williams', + 'Nils Cruz', + 'Michael Fraguada', + 'Christian Gonzalez', + 'Candace Blanchard', + 'Karsten Friske', + 'Dallas Edwards', + 'Barry Ratcliffe', + 'Shelton Grant', + 'Laura Palka', + 'Reegus Flenory', + 'Wynn Reichert', + 'Jill Jane Clements', + 'Joseph S. Wilson', + 'Jee An', + 'Rhoda Griffisová', + 'Nicole Dupre Sobchack' ], directors: [ - "Scott August", - "Richard L. Fox", - "Michelle Malley-Campos", - "Sebastian Mazzola", - "Steven Ritzi", - "Pete Waterman", - "Jared Hess" + 'Scott August', + 'Richard L. Fox', + 'Michelle Malley-Campos', + 'Sebastian Mazzola', + 'Steven Ritzi', + 'Pete Waterman', + 'Jared Hess' ], date: '2016' } - ]) - done() - }) - .catch(done) + ]) + done() + }) + .catch(done) }) it('can handle empty guide', done => { parser({ - content: `[{"type":"PATH_PARAM","code":"period","reason":"INVALID"}]`, + content: '[{"type":"PATH_PARAM","code":"period","reason":"INVALID"}]', channel, date }) diff --git a/sites/i.mjh.nz/i.mjh.nz.config.js b/sites/i.mjh.nz/i.mjh.nz.config.js index 084748e9..0f81dbf6 100644 --- a/sites/i.mjh.nz/i.mjh.nz.config.js +++ b/sites/i.mjh.nz/i.mjh.nz.config.js @@ -13,7 +13,6 @@ module.exports = { site: 'i.mjh.nz', days: 2, request: { - timeout: 30000, // 30s cache: { ttl: 3 * 60 * 60 * 1000 // 3h }, @@ -24,7 +23,7 @@ module.exports = { return `${API_ENDPOINT}/${path}.xml` }, - parser: function ({ content, channel, date, cached }) { + parser: function ({ content, channel, date }) { const items = parseItems(content, channel, date) let programs = items.map(item => { @@ -94,7 +93,7 @@ function parseItems(content, channel, date) { try { const curr_day = date const next_day = date.add(1, 'd') - const [_, site_id] = channel.site_id.split('#') + const [, site_id] = channel.site_id.split('#') const data = parser.parse(content) if (!data || !Array.isArray(data.programs)) return [] diff --git a/sites/i.mjh.nz/i.mjh.nz.test.js b/sites/i.mjh.nz/i.mjh.nz.test.js index 678eb70c..c5ba8bc8 100644 --- a/sites/i.mjh.nz/i.mjh.nz.test.js +++ b/sites/i.mjh.nz/i.mjh.nz.test.js @@ -1,5 +1,5 @@ // npm run channels:parse -- --config=./sites/i.mjh.nz/i.mjh.nz.config.js --output=./sites/i.mjh.nz/i.mjh.nz_pluto.channels.xml --set=path:PlutoTV/all -// npx epg-grabber --config=sites/i.mjh.nz/i.mjh.nz.config.js --channels=sites/i.mjh.nz/i.mjh.nz_plex.channels.xml --output=guide.xml +// npm run grab -- --site=i.mjh.nz const { parser, url } = require('./i.mjh.nz.config.js') const fs = require('fs') @@ -42,7 +42,7 @@ it('can parse response', () => { it('can handle empty guide', () => { const result = parser({ - content: `404: Not Found`, + content: '404: Not Found', channel, date }) diff --git a/sites/i.mjh.nz/i.mjh.nz_foxtel.channels.xml b/sites/i.mjh.nz/i.mjh.nz_foxtel.channels.xml index c92ec090..606dfef1 100644 --- a/sites/i.mjh.nz/i.mjh.nz_foxtel.channels.xml +++ b/sites/i.mjh.nz/i.mjh.nz_foxtel.channels.xml @@ -1,88 +1,86 @@ - - - A&E - Animal Planet - BBC Earth - BBC First - UKTV - BBC World News - beIN SPORTS 1 - beIN SPORTS 2 - beIN SPORTS 3 - Bloomberg Television - Boomerang - BoxSets - Cartoon Network - CBeebies - Club MTV - CMT - CNBC - CNN International - CRIME+INVESTIGATION - Discovery Channel - Discovery Turbo - DreamWorks - E! - ESPN2 - ESPN - FOX8 - FOX ARENA - FOX Classics - FOX Comedy - FOX CRICKET - FOX Crime - FOX DOCOS - FOX Footy - FOX Funny - FOX League - FOX News - FOX One - FOX Sci Fi - FOX SHOWCASE - FOX Sleuth - Fox Sports 503 - Fox Sports 505 - Fox Sports 506 - Fox Sports More+ - FOX SPORTS NEWS - Movies Action - Movies Comedy - Movies Drama - Movies Family - Movies Greats - Movies Hits - Movies Kids - Movies Premiere - Movies Romance - Movies Thriller - GOOD. - HISTORY - Investigation Discovery - LifeStyle - LifeStyle Food - LifeStyle Home - LMN - MTV - MTV Classic - MTV Hits - National Geographic - Nat Geo WILD - NHK World - Nickelodeon - Nick Jr. - Nick Music - SKY NEWS UK - SKY NEWS - Sky News Extra - Sky Racing 1 - Sky Racing 2 - Sky Racing Thoroughbred Central - TLC - TVSN - Universal TV - - - - - + + + + + A&E + Animal Planet + BBC Earth + BBC First + UKTV + BBC World News + beIN SPORTS 1 + beIN SPORTS 2 + beIN SPORTS 3 + Bloomberg Television + Boomerang + BoxSets + Cartoon Network + CBeebies + Club MTV + CMT + CNBC + CNN International + CRIME+INVESTIGATION + Discovery Channel + Discovery Turbo + DreamWorks + E! + ESPN2 + ESPN + FOX8 + FOX ARENA + FOX Classics + FOX Comedy + FOX CRICKET + FOX Crime + FOX DOCOS + FOX Footy + FOX Funny + FOX League + FOX News + FOX One + FOX Sci Fi + FOX SHOWCASE + FOX Sleuth + Fox Sports 503 + Fox Sports 505 + Fox Sports 506 + Fox Sports More+ + FOX SPORTS NEWS + Movies Action + Movies Comedy + Movies Drama + Movies Family + Movies Greats + Movies Hits + Movies Kids + Movies Premiere + Movies Romance + Movies Thriller + GOOD. + HISTORY + Investigation Discovery + LifeStyle + LifeStyle Food + LifeStyle Home + LMN + MTV + MTV Classic + MTV Hits + National Geographic + Nat Geo WILD + NHK World + Nickelodeon + Nick Jr. + Nick Music + SKY NEWS UK + SKY NEWS + Sky News Extra + Sky Racing 1 + Sky Racing 2 + Sky Racing Thoroughbred Central + TLC + TVSN + Universal TV + diff --git a/sites/i.mjh.nz/i.mjh.nz_plex.channels.xml b/sites/i.mjh.nz/i.mjh.nz_plex.channels.xml index 41007070..5659de73 100644 --- a/sites/i.mjh.nz/i.mjh.nz_plex.channels.xml +++ b/sites/i.mjh.nz/i.mjh.nz_plex.channels.xml @@ -1,332 +1,330 @@ - - - 24 Hour Free Movies - ACL Cornhole TV - AFV Family - All Reality WE tv - AMC Thrillers - Antiques Roadshow UK - AsianCrush - AXS TV NOW - BABY SHARK TV - BACKSTAGE - BBC Food - beIN SPORTS XTRA - Bloomberg Quicktake - Camp Spoopy - Canela TV - Chicken Soup for the Soul - ChiveTV - Choppertown - CineLife - CINEPRIDE - Cine Sureño - Comedy Dynamics - CONtv - CONtv Anime - Cooking Panda - Crackle - Crime 360 - Dark Matter TV - Discover Film - Docurama - Dove - Edge Sport - Electric Now - Entrepreneur TV - Estrella News - Euronews Français - Euronews Deutsch - Euronews Italiano - Euronews Portuguese - Euronews Español - FailArmy - Fight Network - FrightFlix - Fubo Sports Network - FUEL TV - Galxy TV - Game Show Central - GFN TV - Glewed TV - GoTraveler - Gravitas Movies - GUSTOTV - Hallmark Movies & More - Hard Knocks - Hi-YAH! - Humor Mill - IMPACT Wrestling - Johnny Carson TV - Journy - Judge Faith - Juntos TV - Kidoodle TV - KidsFlix - Law & Crime - Love Nature - Made In Hollywood - MagellanTV NOW - Maverick Black Cinema - MAVTV Select - MHz Now - Midnight Pulp - Motorvision TV - MOVIESPHERE - MST3K - NBC News NOW - News 12 New York - Newsmax TV - Newsy - Nosey - Nosey Casos - Nosey Escándalos - Outdoor America - Outside - Party Tyme Karaoke - Pattrn - People are Awesome - PeopleTV - pocket.watch - Popstar! TV - QwestTV Classical - QwestTV Jazz & Beyond - QwestTV Mix - Real Nosey - Real Stories - RetroCrush - Reuters TV - Revry - RevryNews - Runtime - Ryan and Friends - Samuel Goldwyn Channel - Samuel Goldwyn Classics - Shorts TV - Shout! Factory TV Stream - Skills + Thrills - Slightly Off IFC - Sony Canal Novelas - So...Real - So Yummy - SportsGrid - Stadium - Stingray Classica Stream - Stingray CMusic - Stingray DJAZZ - Stingray Karaoke - Stingray Naturescape - Stories by AMC - Surf Now TV - Tankee - Tastemade - TG Junior - The Archive - The Boat Show - The Bob Ross Channel - The Carol Burnett Show - The Design Network - The Film Detective - The Pet Collective - The Preview Channel - This Old House - Times Now Navbharat - TODAY All Day - TokuSHOUTsu - Top Cine - Unbeaten - Unidentified - USA TODAY - USA TODAY Sportswire - Us Weekly TV - VICE - Wanted: Dead or Alive - Watch it Kid - Watch it SCREAM - Waypoint TV - WeatherSpy - WildEarth - Wonder - Wu Tang Collection - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 24 Hour Free Movies + ACL Cornhole TV + AFV Family + All Reality WE tv + AMC Thrillers + Antiques Roadshow UK + AsianCrush + AXS TV NOW + BABY SHARK TV + BACKSTAGE + BBC Food + beIN SPORTS XTRA + Bloomberg Quicktake + Camp Spoopy + Canela TV + Chicken Soup for the Soul + ChiveTV + Choppertown + CineLife + CINEPRIDE + Cine Sureño + Comedy Dynamics + CONtv + CONtv Anime + Cooking Panda + Crackle + Crime 360 + Dark Matter TV + Discover Film + Docurama + Dove + Edge Sport + Electric Now + Entrepreneur TV + Estrella News + Euronews Français + Euronews Deutsch + Euronews Italiano + Euronews Portuguese + Euronews Español + FailArmy + Fight Network + FrightFlix + Fubo Sports Network + FUEL TV + Galxy TV + Game Show Central + GFN TV + Glewed TV + GoTraveler + Gravitas Movies + GUSTOTV + Hallmark Movies & More + Hard Knocks + Hi-YAH! + Humor Mill + IMPACT Wrestling + Johnny Carson TV + Journy + Judge Faith + Kidoodle TV + KidsFlix + Law & Crime + Love Nature + Made In Hollywood + MagellanTV NOW + Maverick Black Cinema + MAVTV Select + MHz Now + Midnight Pulp + Motorvision TV + MOVIESPHERE + MST3K + NBC News NOW + News 12 New York + Newsmax TV + Newsy + Nosey + Nosey Casos + Nosey Escándalos + Outdoor America + Outside + Party Tyme Karaoke + Pattrn + People are Awesome + PeopleTV + pocket.watch + Popstar! TV + QwestTV Classical + QwestTV Jazz & Beyond + QwestTV Mix + Real Nosey + Real Stories + RetroCrush + Reuters TV + Revry + RevryNews + Runtime + Ryan and Friends + Samuel Goldwyn Channel + Samuel Goldwyn Classics + Shorts TV + Shout! Factory TV Stream + Skills + Thrills + Slightly Off IFC + Sony Canal Novelas + So...Real + So Yummy + SportsGrid + Stadium + Stingray Classica Stream + Stingray CMusic + Stingray DJAZZ + Stingray Karaoke + Stingray Naturescape + Stories by AMC + Surf Now TV + Tankee + Tastemade + TG Junior + The Archive + The Boat Show + The Bob Ross Channel + The Carol Burnett Show + The Design Network + The Film Detective + The Pet Collective + The Preview Channel + This Old House + Times Now Navbharat + TODAY All Day + TokuSHOUTsu + Top Cine + Unbeaten + Unidentified + USA TODAY + USA TODAY Sportswire + Us Weekly TV + VICE + Wanted: Dead or Alive + Watch it Kid + Watch it SCREAM + Waypoint TV + WeatherSpy + WildEarth + Wonder + Wu Tang Collection + Juntos TV + \ No newline at end of file diff --git a/sites/i.mjh.nz/i.mjh.nz_pluto.channels.xml b/sites/i.mjh.nz/i.mjh.nz_pluto.channels.xml index a33d75b1..58bf58e2 100644 --- a/sites/i.mjh.nz/i.mjh.nz_pluto.channels.xml +++ b/sites/i.mjh.nz/i.mjh.nz_pluto.channels.xml @@ -1,335 +1,333 @@ - - - 48 Hours - 70s Cinema - 80s Rewind - 90210 - 90s Throwback - Acapulco Shore - All Reality by WE tv - Always Funny Videos - Amantes del romance - America's Test Kitchen - America's Voice News - Anime All Day - Antiques Roadshow UK - Antiques Road Trip - Awesomeness TV - Baby Shark TV - Badass novelas - Bar Rescue - Baywatch - BBC Food - BBC Home - BBC Kids - Bebecito Bum y sus amigos - beIN SPORTS XTRA en español - beIN SPORTS XTRA - Bellator MMA - Best of Dr. Phil - Best of The Drew Barrymore Show - BET Her - BET Pluto TV - Beverly Hillbillies - Black Cinema - Black Classics - Black Ink Crew - Black Throwbacks - Blaze Live - Bloomberg TV - BNC GO - Bounce XL - BritBox Mysteries - British Comedy - British Drama - BUZZR - Cats 24/7 - CBS News - CBS News Baltimore - CBS News Bay Area - CBS News Boston - CBS News Chicago - CBS News Colorado - CBS News Detroit - CBS News DFW - CBS News Los Angeles - CBS News Miami - CBS News Minnesota - CBS News New York - CBS News Philly - CBS News Pittsburgh - CBS News Sacramento - CBS Sports HQ - Cheddar News - Cine adrenalina - Cine ¡¡jaja!! - Cine Premiere - Cine terror - Cine XOXO - Classica - Classic Movies Channel - Classic Toons TV - Classic TV Comedy - Classic TV Drama - Classic TV: Families - CMT Equal Play - CMT Pluto TV - CNN RePlay - Cold Case Files - Combate World - Comedy Central Animation - Comedy Central en español - Comedy Central Pluto TV - COPS - Court TV - Crime 360 - Crímenes imperfectos - CSI - CSI en español - Dabl - Dallas Cowboy Cheerleaders - Dark Shadows - Deal or No Deal - Degrassi - Demand Africa - Doctor Who Classic - Dogs 24/7 - Dog the Bounty Hunter - Dora TV - Emergencia 911 - Entre nosotras - Estrella News - EstrellaTV - ET Live - Euronews - FailArmy - Faith TV - Family Ties - Fear Factor - Fight - Find Out Why - Flicks of Fury - Foodies - Food TV - Forensic Files - Forever Kids - FOX Sports - Funny AF - Fuse Beat - G4 Select - Gameplay: Call of Duty - Gameplay: Fortnite - Gameplay: Roblox - Gameplay: Sports - Game Show Central - Garfield and Friends - GLORY Kickboxing - Gordon Ramsay's Hell's Kitchen - Grande-ish - Gunsmoke - Happy Days - Heartland - Hell's Kitchen en español - IGN - IMPACT Wrestling - Ink Master - Investiga - Iron Chef - Jersey Shore - Johnny Carson TV - Judge Nosey - Julia Child - Kartoon Channel! - K-Content by CJ ENM - Kevin Hart’s LOL! Network - Kids Movie Club - LEGO Kids TV - Little Baby Bum - Little Stars Universe - Lively Place - Live Music Replay - Logo Pluto TV - Love & Hip Hop - Lucha Libre AAA - Lupin the 3rd - Matlock - MAVTV Select - Midsomer Murders - MinecrafTV - Mi obsesión favorita - Mission Impossible - Misterios sin resolver - MLB - MLS - More TV Drama - More TV Sitcoms - MST3K - MTV Biggest Pop - MTV Block Party - MTV Dating - MTV en español - MTV Pluto TV - MTV Spankin' New - Mundo geek - Mundo paranormal - Mundo viajero - Narcos - Narcos en español - Naruto - Naruto en español - Naturescape - NBC News NOW - News 12 New York - Newsmax - Newsy - NFL Channel - Nick en español - Nick Jr. en español - Nick Jr. Pluto TV - Nick Pluto TV - Niños por BBC Kids - No Parents Allowed - Nosey - Nosey escándalos - Novelas con la abuela - Nuestra Visión - OAN Plus - One Piece - Paramount Movie Channel - Paramount+ Picks - PBR RidePass - Pelis y Popcorn - People Are Awesome - Perry Mason - PGA TOUR - Pluto TV Action - Pluto TV Action Sports - Pluto TV Animals - Pluto TV Backcountry - Pluto TV Best Life - Pluto TV Boxing - Pluto TV Cars - Pluto TV Celebrity - Pluto TV Comedy - Pluto TV Courtroom - Pluto TV Crime Drama - Pluto TV Crime Movies - Pluto TV Cult Films - Pluto TV Documentaries - Pluto TV Drama - Pluto TV Drama Life - Pluto TV Fantastic - Pluto TV Gamer - Pluto TV Game Shows - Pluto TV History - Pluto TV Home - Pluto TV Horror - Pluto TV Lives - Pluto TV Love Stories - Pluto TV Military - Pluto TV News - Pluto TV Paranormal - Pluto TV Pranks - Pluto TV Pro Wrestling - Pluto TV Reaction - Pluto TV Reality - Pluto TV Romance - Pluto TV Science - Pluto TV Sci-Fi - Pluto TV Soaps - Pluto TV Sports - Pluto TV Spotlight - Pluto TV Staff Picks - Pluto TV Suspense - Pluto TV Terror - Pluto TV Thrillers - Pluto TV Travel - Pluto TV True Crime - Pluto TV Vs. - Pluto TV Weddings - Pluto TV Westerns - pocket.watch - PokerGo - Rainbow Squad - Realmadrid tv - Rescue 911 - RiffTrax - Ryan and Friends - Sala de parejas - Séptimo arte - Series con Ñ - Shout! Factory TV - Showtime Selects - Skills + Thrills - Sky News - Slightly Off IFC - Slow TV - Smithsonian Channel Selects - Sony Canal Comedias - Sony Canal Escape Perfecto - Spike ¡extremo! - Spike Outdoors - Spike Pluto TV - Stand-Up TV - Star Trek - Stories by AMC - Survivor - TBN - Team Spirit - Teen Mom - Telefe noticias - Telemundo telenovelas clásicas - The Addams Family - The Amazing Race - The Andy Griffith Show - The Asylum - The Bob Ross Channel - The Carol Burnett Show - The Challenge - The Design Network - The First - The Love Boat - The New Detectives - The Pet Collective - The Price Is Right: The Barker Era - The Rifleman - The Walking Dead en español - This Old House - Three's Company - Tiny House Nation - TODAY All Day - TokuSHOUTsu - Top Gear en español - Tosh.0 - TOTALLY TURTLES - TV Land Drama - TV Land Sitcoms - TYT Network - Unsolved Mysteries - Vevo 2K - Vevo '70s - Vevo '80s - Vevo '90s - Vevo Country - Vevo Latino - Vevo Pop - Vevo R&B - Vevo Reggaetón & Trap - Vevo Retro Rock - Vevo True School Hip-Hop - VH1 Hip Hop Family - VH1 I Love Reality - Viaje a las estrellas - Voyager Documentaries - Wanted: Dead or Alive - WeatherNation - Western TV - Wild 'N Out - World Poker Tour - Yahoo Finance - Yo! MTV - Yu-Gi-Oh! - Yu-Gi-Oh! en español - - + + 48 Hours + 70s Cinema + 80s Rewind + 90210 + 90s Throwback + Acapulco Shore + All Reality by WE tv + Always Funny Videos + Amantes del romance + America's Test Kitchen + America's Voice News + Anime All Day + Antiques Roadshow UK + Antiques Road Trip + Awesomeness TV + Baby Shark TV + Badass novelas + Bar Rescue + Baywatch + BBC Food + BBC Home + BBC Kids + beIN SPORTS XTRA + beIN SPORTS XTRA en español + Bellator MMA + Best of Dr. Phil + Best of The Drew Barrymore Show + BET Her + BET Pluto TV + Beverly Hillbillies + Black Cinema + Black Classics + Black Ink Crew + Black Throwbacks + Blaze Live + Bloomberg TV + BNC GO + Bounce XL + BritBox Mysteries + British Comedy + British Drama + BUZZR + Cats 24/7 + CBS News + CBS News Baltimore + CBS News Bay Area + CBS News Boston + CBS News Chicago + CBS News Colorado + CBS News Detroit + CBS News DFW + CBS News Los Angeles + CBS News Miami + CBS News Minnesota + CBS News New York + CBS News Philly + CBS News Pittsburgh + CBS News Sacramento + CBS Sports HQ + Cheddar News + Cine adrenalina + Cine ¡¡jaja!! + Cine Premiere + Cine terror + Cine XOXO + Classica + Classic Movies Channel + Classic Toons TV + Classic TV Comedy + Classic TV Drama + Classic TV: Families + CMT Equal Play + CMT Pluto TV + CNN RePlay + Cold Case Files + Combate World + Comedy Central Animation + Comedy Central en español + Comedy Central Pluto TV + COPS + Court TV + Crime 360 + Crímenes imperfectos + CSI + CSI en español + Dabl + Dallas Cowboy Cheerleaders + Dark Shadows + Deal or No Deal + Degrassi + Demand Africa + Doctor Who Classic + Dogs 24/7 + Dog the Bounty Hunter + Dora TV + Emergencia 911 + Entre nosotras + Estrella News + EstrellaTV + ET Live + Euronews + FailArmy + Faith TV + Family Ties + Fear Factor + Fight + Find Out Why + Flicks of Fury + Foodies + Food TV + Forensic Files + Forever Kids + FOX Sports + Funny AF + Fuse Beat + G4 Select + Gameplay: Call of Duty + Gameplay: Fortnite + Gameplay: Roblox + Gameplay: Sports + Game Show Central + Garfield and Friends + GLORY Kickboxing + Gordon Ramsay's Hell's Kitchen + Grande-ish + Gunsmoke + Happy Days + Heartland + Hell's Kitchen en español + IGN + IMPACT Wrestling + Ink Master + Investiga + Iron Chef + Jersey Shore + Johnny Carson TV + Judge Nosey + Julia Child + Kartoon Channel! + K-Content by CJ ENM + Kevin Hart’s LOL! Network + Kids Movie Club + LEGO Kids TV + Little Baby Bum + Little Stars Universe + Lively Place + Live Music Replay + Logo Pluto TV + Love & Hip Hop + Lucha Libre AAA + Lupin the 3rd + Matlock + MAVTV Select + Midsomer Murders + MinecrafTV + Mi obsesión favorita + Mission Impossible + Misterios sin resolver + MLB + MLS + More TV Drama + More TV Sitcoms + MST3K + MTV Biggest Pop + MTV Block Party + MTV Dating + MTV en español + MTV Pluto TV + MTV Spankin' New + Mundo geek + Mundo paranormal + Mundo viajero + Narcos + Narcos en español + Naruto + Naruto en español + NBC News NOW + News 12 New York + Newsmax + Newsy + NFL Channel + Nick en español + Nick Jr. en español + Nick Jr. Pluto TV + Nick Pluto TV + Niños por BBC Kids + No Parents Allowed + Nosey + Nosey escándalos + Novelas con la abuela + Nuestra Visión + OAN Plus + One Piece + Paramount Movie Channel + Paramount+ Picks + PBR RidePass + Pelis y Popcorn + People Are Awesome + Perry Mason + PGA TOUR + Pluto TV Action + Pluto TV Action Sports + Pluto TV Animals + Pluto TV Backcountry + Pluto TV Best Life + Pluto TV Boxing + Pluto TV Cars + Pluto TV Celebrity + Pluto TV Comedy + Pluto TV Courtroom + Pluto TV Crime Drama + Pluto TV Crime Movies + Pluto TV Cult Films + Pluto TV Documentaries + Pluto TV Drama + Pluto TV Drama Life + Pluto TV Fantastic + Pluto TV Gamer + Pluto TV Game Shows + Pluto TV History + Pluto TV Home + Pluto TV Horror + Pluto TV Lives + Pluto TV Love Stories + Pluto TV Military + Pluto TV News + Pluto TV Paranormal + Pluto TV Pranks + Pluto TV Pro Wrestling + Pluto TV Reaction + Pluto TV Reality + Pluto TV Romance + Pluto TV Science + Pluto TV Sci-Fi + Pluto TV Soaps + Pluto TV Sports + Pluto TV Spotlight + Pluto TV Staff Picks + Pluto TV Suspense + Pluto TV Terror + Pluto TV Thrillers + Pluto TV Travel + Pluto TV True Crime + Pluto TV Vs. + Pluto TV Weddings + Pluto TV Westerns + pocket.watch + PokerGo + Rainbow Squad + Realmadrid tv + Rescue 911 + RiffTrax + Ryan and Friends + Sala de parejas + Séptimo arte + Series con Ñ + Shout! Factory TV + Showtime Selects + Skills + Thrills + Sky News + Slightly Off IFC + Slow TV + Smithsonian Channel Selects + Sony Canal Comedias + Sony Canal Escape Perfecto + Spike ¡extremo! + Spike Outdoors + Spike Pluto TV + Stand-Up TV + Star Trek + Naturescape + Stories by AMC + Survivor + TBN + Team Spirit + Teen Mom + Telefe noticias + Telemundo telenovelas clásicas + The Addams Family + The Amazing Race + The Andy Griffith Show + The Asylum + The Bob Ross Channel + The Carol Burnett Show + The Challenge + The Design Network + The First + The Love Boat + The New Detectives + The Pet Collective + The Price Is Right: The Barker Era + The Rifleman + The Walking Dead en español + This Old House + Three's Company + Tiny House Nation + TODAY All Day + TokuSHOUTsu + Top Gear en español + Tosh.0 + TOTALLY TURTLES + TV Land Drama + TV Land Sitcoms + TYT Network + Unsolved Mysteries + Vevo 2K + Vevo '70s + Vevo '80s + Vevo '90s + Vevo Country + Vevo Latino + Vevo Pop + Vevo R&B + Vevo Reggaetón & Trap + Vevo Retro Rock + Vevo True School Hip-Hop + VH1 Hip Hop Family + VH1 I Love Reality + Viaje a las estrellas + Voyager Documentaries + Wanted: Dead or Alive + WeatherNation + Western TV + Wild 'N Out + World Poker Tour + Yahoo Finance + Yo! MTV + Yu-Gi-Oh! + Yu-Gi-Oh! en español + Bebecito Bum y sus amigos + diff --git a/sites/i.mjh.nz/i.mjh.nz_samsung.channels.xml b/sites/i.mjh.nz/i.mjh.nz_samsung.channels.xml index 5b224f10..44daec79 100644 --- a/sites/i.mjh.nz/i.mjh.nz_samsung.channels.xml +++ b/sites/i.mjh.nz/i.mjh.nz_samsung.channels.xml @@ -1,229 +1,227 @@ - - - All Reality WE tv - Always Funny Videos - America's Test Kitchen - Anime All day - Asian Crush - Backstage - Baywatch - BBC Food - BBC Home - beIN SPORTS XTRA - Bloomberg Quicktake - Bounce XL - Brat TV - BUZZR - Cars - CBS News - Chicken Soup for the Soul - CHIVE TV - Cine Romantico - CINEVAULT: 80s - CINEVAULT: Westerns - Circle - Clarity 4K - Comedy Dynamics - Court TV - Crime 360 - Dallas Cowboys Cheer - Danger TV - Deal or No Deal - Degrassi - Dove Channel - Drama Life - Dry Bar Comedy - DUST - EDGEsport - ElectricNOW - Estrella News - FailArmy - Family Ties - Fear Factor - FilmRise Action - FilmRise Free Movies - FilmRise Western - Forensic Files - FOX SOUL - FTF - fubo Sports Network - FUEL TV - Game Show Central - Gravitas Movies - Gusto TV - Hallmark Movies & More - Heartland - Hollywire - HSN - Hungry - IGN - IMPACT Wrestling - Insight TV - InWonder - Journy - Kidoodle.TV - Law & Crime - LiveNOW from FOX - Loupe 4K - Love & Hip Hop - Love Nature 4K - Lucky Dog - Magellan TV Now - Maverick Black Cinema - MAVTV Select - MHz Now - Midnight Pulp - Midsomer Murders - MinecrafTV - MovieSphere - MTV Pluto TV - NBCLX - NBC News NOW - NEW KMOVIES - Newsmax TV - Newsy - Nick Pluto TV - Nosey - Outdoor America - Outside - Pac-12 Insider - Paramount Movie Channel - PBS KIDS - People Are Awesome - People TV - Pluto TV Fantastic - Pluto TV Westerns - pocket.watch - PowerNation - Pursuit UP - QVC - Real America's Voice - Revry - RiffTrax - Samsung Wild Life - Shout! Factory - Skills + Thrills - Sony Canal Comedias - Sony Canal Novelas - SportsGrid - Stadium - Stingray Naturescape - Stories by AMC - SURF NOW TV - Tastemade - Tastemade Travel - TG Junior - The Asylum - The Bob Ross Channel - The Challenge - The Design Network - The New Detectives - The Pet Collective - The Preview Channel - This Old House - Tiny House Nation - TODAY All Day - Toon Goggles - TV Land Drama - TV Land Sitcoms - TYT Network - Unidentified - Unsolved Mysteries - USA Today - Vevo 2K - Vevo Country - Vevo Hip-Hop - Vevo Latino - Vevo Pop - Vevo R&B - VICE - Waypoint TV - WeatherNation - WeatherSpy - Wild 'N Out - Wipeout Xtra - World Poker Tour - Xplore - ZooMoo - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + All Reality WE tv + Always Funny Videos + America's Test Kitchen + Anime All day + Asian Crush + Backstage + Baywatch + BBC Food + BBC Home + beIN SPORTS XTRA + Bloomberg Quicktake + Bounce XL + Brat TV + BUZZR + Cars + CBS News + Chicken Soup for the Soul + CHIVE TV + Cine Romantico + CINEVAULT: 80s + CINEVAULT: Westerns + Circle + Clarity 4K + Comedy Dynamics + Court TV + Crime 360 + Dallas Cowboys Cheer + Danger TV + Deal or No Deal + Degrassi + Dove Channel + Drama Life + Dry Bar Comedy + DUST + EDGEsport + ElectricNOW + Estrella News + FailArmy + Family Ties + Fear Factor + FilmRise Action + FilmRise Free Movies + FilmRise Western + Forensic Files + FOX SOUL + FTF + fubo Sports Network + FUEL TV + Game Show Central + Gravitas Movies + Gusto TV + Hallmark Movies & More + Heartland + Hollywire + HSN + Hungry + IGN + IMPACT Wrestling + Insight TV + InWonder + Journy + Kidoodle.TV + Law & Crime + LiveNOW from FOX + Loupe 4K + Love & Hip Hop + Love Nature 4K + Lucky Dog + Magellan TV Now + Maverick Black Cinema + MAVTV Select + MHz Now + Midnight Pulp + Midsomer Murders + MinecrafTV + MovieSphere + MTV Pluto TV + NBCLX + NBC News NOW + NEW KMOVIES + Newsmax TV + Newsy + Nick Pluto TV + Nosey + Outdoor America + Outside + Pac-12 Insider + Paramount Movie Channel + PBS KIDS + People Are Awesome + People TV + Pluto TV Fantastic + Pluto TV Westerns + pocket.watch + PowerNation + Pursuit UP + QVC + Real America's Voice + Revry + RiffTrax + Samsung Wild Life + Shout! Factory + Skills + Thrills + Sony Canal Comedias + Sony Canal Novelas + SportsGrid + Stadium + Stingray Naturescape + Stories by AMC + SURF NOW TV + Tastemade + Tastemade Travel + TG Junior + The Asylum + The Bob Ross Channel + The Challenge + The Design Network + The New Detectives + The Pet Collective + The Preview Channel + This Old House + Tiny House Nation + TODAY All Day + Toon Goggles + TV Land Drama + TV Land Sitcoms + TYT Network + Unidentified + Unsolved Mysteries + USA Today + Vevo 2K + Vevo Country + Vevo Hip-Hop + Vevo Latino + Vevo Pop + Vevo R&B + VICE + Waypoint TV + WeatherNation + WeatherSpy + Wild 'N Out + Wipeout Xtra + World Poker Tour + Xplore + ZooMoo + diff --git a/sites/i.mjh.nz/i.mjh.nz_skygo.channels.xml b/sites/i.mjh.nz/i.mjh.nz_skygo.channels.xml index c99e1ea2..93b473ec 100644 --- a/sites/i.mjh.nz/i.mjh.nz_skygo.channels.xml +++ b/sites/i.mjh.nz/i.mjh.nz_skygo.channels.xml @@ -1,104 +1,102 @@ - - - Al Jazeera - Animal Planet - BBC Earth - BBC UKTV - BBC World News - Bravo - Bravo PLUS 1 - Breeze TV - Cartoon Network - Cbeebies - CGTN - CGTN Documentary - CNBC - CNN - Colors - Comedy Central - Country TV - CI - Discovery - Discovery Turbo - E! - eden - eden +1 - ESPN 2 - ESPN HD - FACE TV - Firstlight - Fox News - HGTV - HISTORY - Hope Channel - ID - JONES! - JONES! too - Living - MTV 80s - MTV Hits - MTV - NAT GEO - Nickelodeon - Nick Jr. - Nick Music - Parliament TV - Prime - Prime PLUS 1 - Rialto - RT - Rush - Shine TV - Sky 5 - SKY Arena - Sky Arts - SKY Box Office - SKY Box Office 041 - SKY Box Office 042 - SKY Box Office 043 - Sky Box Sets - Sky Movies Action - Sky Movies Classics - Sky Movies Collection - Sky Movies Comedy - Sky Movies Family - Sky Movies Greats - Sky Movies Premiere - Sky News - Sky Sport 1 - Sky Sport 2 - Sky Sport 3 - Sky Sport 4 - Sky Sport 5 - Sky Sport 6 - Sky Sport 7 beIN SPORTS - Sky Sport 9 - Sky Sport Premier League - Sky Sport Select - SoHo - Star Gold - TAB Trackside 1 - TAB Trackside 2 - Te Reo - The Edge TV - Shopping Channel - Three - ThreePlusOne - TLC - TVNZ 1 - TVNZ 1+1 - TVNZ 2 - TVNZ 2+1 - TVNZ DUKE - DukePlus1 - Universal TV - Vibe - Whakaata Māori - - - - - - - + + + + + + + Al Jazeera + Animal Planet + BBC Earth + BBC UKTV + BBC World News + Bravo + Bravo PLUS 1 + Breeze TV + Cartoon Network + Cbeebies + CGTN + CGTN Documentary + CNBC + CNN + Colors + Comedy Central + Country TV + CI + Discovery + Discovery Turbo + E! + eden + eden +1 + ESPN 2 + ESPN HD + FACE TV + Firstlight + Fox News + HGTV + HISTORY + Hope Channel + ID + JONES! + JONES! too + Living + MTV 80s + MTV Hits + MTV + NAT GEO + Nickelodeon + Nick Jr. + Nick Music + Parliament TV + Prime + Prime PLUS 1 + Rialto + RT + Rush + Shine TV + Sky 5 + SKY Arena + Sky Arts + SKY Box Office + SKY Box Office 041 + SKY Box Office 042 + SKY Box Office 043 + Sky Box Sets + Sky Movies Action + Sky Movies Classics + Sky Movies Collection + Sky Movies Comedy + Sky Movies Family + Sky Movies Greats + Sky Movies Premiere + Sky News + Sky Sport 1 + Sky Sport 2 + Sky Sport 3 + Sky Sport 4 + Sky Sport 5 + Sky Sport 6 + Sky Sport 7 beIN SPORTS + Sky Sport 9 + Sky Sport Premier League + Sky Sport Select + SoHo + Star Gold + TAB Trackside 1 + TAB Trackside 2 + Te Reo + The Edge TV + Shopping Channel + Three + ThreePlusOne + TLC + TVNZ 1 + TVNZ 1+1 + TVNZ 2 + TVNZ 2+1 + TVNZ DUKE + DukePlus1 + Universal TV + Vibe + Whakaata Māori + diff --git a/sites/i.mjh.nz/i.mjh.nz_stirr.channels.xml b/sites/i.mjh.nz/i.mjh.nz_stirr.channels.xml index e6be0d12..60b7a3f5 100644 --- a/sites/i.mjh.nz/i.mjh.nz_stirr.channels.xml +++ b/sites/i.mjh.nz/i.mjh.nz_stirr.channels.xml @@ -1,111 +1,109 @@ - - - AccuWeather - AFV - American Classics - America vs. Addiction - beIN Sports Xtra - Buzzr - CHARGE - Cheddar - Chicken Soup For The Soul - CineLife - Circle - Classica - Comedy Dynamics - COMET - CONtv - Deal or No Deal - Dick Cavett - Docurama - Dove - DUST - Electric Now - EVRGRN - FailArmy - Filmrise Classic TV - Filmrise Free Movies - FOX Soul - Glewed TV - Gravitas - Horse Shopping Channel - HSN - It's Showtime at the Apollo - Johnny Carson TV - Law & Crime - LiveXLive - MagellanTV - MavTv - Midnight Pulp - Mystery Science Theater 3000 - NASATV - News 12 New York - Nosey - ONTV4U - Outdoor America - People Are Awesome - People TV - Popstar! TV - PursuitUp - Quicktake - QVC - RetroCrush - Revry - Shop LC - Shout Factory - So...Real - SportsGrid - Sportswire - Stadium - Stingray Classic Rock - Stingray Flashback 70s - Stingray Greatest Hits - Stingray Hit List - Stingray Hot Country - Stingray Pop Adult - Stingray Rock Alternative - Stingray Today's Latin Pop - Stingray Urban Beats - STIRR Classic TV - STIRR Horror Movies - STIRR | Movies - STIRR P.D. - STIRR Reality TV - STIRR Westerns - TBD - The Archive - The Bob Ross Channel - The Carol Burnett Show - The Country Network - Film Detective - The First - The Pet Collective - The Tim Conway Show - Unbeaten - USA Today - Waypoint - WeatherSpy - Wipeout Xtra - World Poker Tour - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + AccuWeather + AFV + American Classics + America vs. Addiction + beIN Sports Xtra + Buzzr + CHARGE + Cheddar + Chicken Soup For The Soul + CineLife + Circle + Classica + Comedy Dynamics + COMET + CONtv + Deal or No Deal + Dick Cavett + Docurama + Dove + DUST + Electric Now + EVRGRN + FailArmy + Filmrise Classic TV + Filmrise Free Movies + FOX Soul + Glewed TV + Gravitas + Horse Shopping Channel + HSN + It's Showtime at the Apollo + Johnny Carson TV + Law & Crime + LiveXLive + MagellanTV + MavTv + Midnight Pulp + Mystery Science Theater 3000 + NASATV + News 12 New York + Nosey + ONTV4U + Outdoor America + People Are Awesome + People TV + Popstar! TV + PursuitUp + Quicktake + QVC + RetroCrush + Revry + Shop LC + Shout Factory + So...Real + SportsGrid + Sportswire + Stadium + Stingray Classic Rock + Stingray Flashback 70s + Stingray Greatest Hits + Stingray Hit List + Stingray Hot Country + Stingray Pop Adult + Stingray Rock Alternative + Stingray Today's Latin Pop + Stingray Urban Beats + STIRR Classic TV + STIRR Horror Movies + STIRR | Movies + STIRR P.D. + STIRR Reality TV + STIRR Westerns + TBD + The Archive + The Bob Ross Channel + The Carol Burnett Show + The Country Network + Film Detective + The First + The Pet Collective + The Tim Conway Show + Unbeaten + USA Today + Waypoint + WeatherSpy + Wipeout Xtra + World Poker Tour + diff --git a/sites/i24news.tv/i24news.tv.channels.xml b/sites/i24news.tv/i24news.tv.channels.xml index da14f333..af7d40a6 100644 --- a/sites/i24news.tv/i24news.tv.channels.xml +++ b/sites/i24news.tv/i24news.tv.channels.xml @@ -1,8 +1,6 @@ - - - i24News Arabic - i24News English - i24 News Français - - + + i24News Arabic + i24News English + i24 News Français + diff --git a/sites/i24news.tv/i24news.tv.test.js b/sites/i24news.tv/i24news.tv.test.js index b74452e9..ab96ad07 100644 --- a/sites/i24news.tv/i24news.tv.test.js +++ b/sites/i24news.tv/i24news.tv.test.js @@ -1,4 +1,4 @@ -// npx epg-grabber --config=sites/i24news.tv/i24news.tv.config.js --channels=sites/i24news.tv/i24news.tv.channels.xml --output=guide.xml --days=2 +// npm run grab -- --site=i24news.tv const { parser, url } = require('./i24news.tv.config.js') const dayjs = require('dayjs') @@ -18,7 +18,8 @@ it('can generate valid url', () => { }) it('can parse response', () => { - const content = `[{"id":348995,"startHour":"22:30","endHour":"23:00","day":5,"firstDiffusion":false,"override":false,"show":{"parsedBody":[{"type":"text","text":"Special Edition"}],"id":131,"title":"تغطية خاصة","body":"Special Edition","slug":"Special-Edition-تغطية-خاصة","visible":true,"image":{"id":1142467,"credit":"","legend":"","href":"https://cdn.i24news.tv/uploads/a1/be/85/20/69/6f/32/1c/ed/b0/f8/5c/f6/1c/40/f9/a1be8520696f321cedb0f85cf61c40f9.png"}}},{"id":349023,"startHour":"15:00","endHour":"15:28","day":6,"firstDiffusion":false,"override":false,"show":{"parsedBody":[{"type":"text","text":"Special Edition"}],"id":131,"title":"تغطية خاصة","body":"Special Edition","slug":"Special-Edition-تغطية-خاصة","visible":true,"image":{"id":1142467,"credit":"","legend":"","href":"https://cdn.i24news.tv/uploads/a1/be/85/20/69/6f/32/1c/ed/b0/f8/5c/f6/1c/40/f9/a1be8520696f321cedb0f85cf61c40f9.png"}}}]` + const content = + '[{"id":348995,"startHour":"22:30","endHour":"23:00","day":5,"firstDiffusion":false,"override":false,"show":{"parsedBody":[{"type":"text","text":"Special Edition"}],"id":131,"title":"تغطية خاصة","body":"Special Edition","slug":"Special-Edition-تغطية-خاصة","visible":true,"image":{"id":1142467,"credit":"","legend":"","href":"https://cdn.i24news.tv/uploads/a1/be/85/20/69/6f/32/1c/ed/b0/f8/5c/f6/1c/40/f9/a1be8520696f321cedb0f85cf61c40f9.png"}}},{"id":349023,"startHour":"15:00","endHour":"15:28","day":6,"firstDiffusion":false,"override":false,"show":{"parsedBody":[{"type":"text","text":"Special Edition"}],"id":131,"title":"تغطية خاصة","body":"Special Edition","slug":"Special-Edition-تغطية-خاصة","visible":true,"image":{"id":1142467,"credit":"","legend":"","href":"https://cdn.i24news.tv/uploads/a1/be/85/20/69/6f/32/1c/ed/b0/f8/5c/f6/1c/40/f9/a1be8520696f321cedb0f85cf61c40f9.png"}}}]' const result = parser({ content, date }).map(p => { p.start = p.start.toJSON() p.stop = p.stop.toJSON() @@ -38,7 +39,7 @@ it('can parse response', () => { it('can handle empty guide', () => { const result = parser({ - content: `[]`, + content: '[]', date }) expect(result).toMatchObject([]) diff --git a/sites/indihometv.com/indihometv.com.channels.xml b/sites/indihometv.com/indihometv.com.channels.xml index d3dada9b..b1b4564a 100644 --- a/sites/indihometv.com/indihometv.com.channels.xml +++ b/sites/indihometv.com/indihometv.com.channels.xml @@ -1,157 +1,150 @@ - - - ABC Australia - Aljazeera - Animax - ANIPlus - ANTV - Arirang - Asian Food Network - ATV - AXN - Baby First - Bali TV - beIN Sports 1 - beIN Sports 3 - Berita Satu - Bioskop Indonesia - Bloomberg - Boomerang - Cartoon Network - CCTV4 - Celestial Movie - CGTN Documentary - Cinema World - Citra Dangdut - Citra Drama - News Asia - CNBC Asia - CNBC Indonesia - CNN Indonesia - CNN International - Crime Investigation - CTI Asia - Daai TV - Discovery Channel - Dreamworks - Dunia anak - Dunia Lain - DW (English) - Eat N Go - EBC Asia - egg network - Euronews - FashionTV - Fight Sport - France 24 - Galaxy - Galaxy Premium - HGTV - History - Horee - Horizon Sports - IDX - IMC - IndiKids - Indosiar - iNews - Panda TV - JakTV - JTV - KBS World - Kix - Kompas TV - Kplus - Lifetime - Lingua - Mentari TV - Metro TV - MNC News - MQTV - M Shop - MTATV - MTV Live - My Cinema - My Cinema Asia - My Family - MyKidz - Nat Geo - Nat Geo Wild - NBA - Net. - NHK World Japan - NHK World Premium - Nickelodeon - Nick Junior - Insert - Nusantara TV - O Channel - SONE - Outdoor Channel - Paramount - Rajawali TV - Rock Entertainment - Rock Extreme - Rodja TV - RRI NET - Ruang Trampil - SCTV - SEA Today - Seru! - SPOTV - SPOTV2 - Star Chinese Channel - Star Chinese Movies - Tawaf TV - Tech Storm - Thrill - TLC - Trans7 - TransTV - TRT World - TV5Monde - TV9 NU - TVBS News - TV Edukasi - MUI TV - TVN - TVN Movies - TV One - TVRI - UChannel - Usee Photo - UseePrime - Warner - ZBioskop - Zhejiang - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + ABC Australia + Aljazeera + Animax + ANIPlus + ANTV + Arirang + Asian Food Network + ATV + AXN + Baby First + Bali TV + beIN Sports 1 + beIN Sports 3 + Berita Satu + Bioskop Indonesia + Bloomberg + Boomerang + Cartoon Network + CCTV4 + Celestial Movie + CGTN Documentary + Cinema World + Citra Dangdut + Citra Drama + News Asia + CNBC Asia + CNBC Indonesia + CNN Indonesia + CNN International + Crime Investigation + CTI Asia + Daai TV + Discovery Channel + Dreamworks + Dunia anak + Dunia Lain + DW (English) + Eat N Go + EBC Asia + egg network + Euronews + FashionTV + Fight Sport + France 24 + Galaxy + Galaxy Premium + HGTV + History + Horee + Horizon Sports + IDX + IMC + IndiKids + Indonesiana TV + Indosiar + iNews + Panda TV + JakTV + JTV + KBS World + Kix + Kompas TV + Kplus + Lifetime + Lingua + Mentari TV + Metro TV + MNC News + MQTV + M Shop + MTATV + MTV Live + My Cinema + My Cinema Asia + My Family + MyKidz + Nat Geo + Nat Geo Wild + NBA + Net. + NHK World Japan + NHK World Premium + Nickelodeon + Nick Junior + Insert + Nusantara TV + O Channel + SONE + Outdoor Channel + Paramount + Rajawali TV + Rock Entertainment + Rock Extreme + Rodja TV + RRI NET + Ruang Trampil + SCTV + SEA Today + Seru! + SPOTV + SPOTV2 + Star Chinese Channel + Star Chinese Movies + Tawaf TV + Tech Storm + Thrill + TLC + Trans7 + TransTV + TRT World + TV5Monde + TV9 NU + TVBS News + TV Edukasi + MUI TV + TVN + TVN Movies + TV One + TVRI + UChannel + Usee Photo + UseePrime + Warner + ZBioskop + Zhejiang + \ No newline at end of file diff --git a/sites/indihometv.com/indihometv.com.config.js b/sites/indihometv.com/indihometv.com.config.js index a33c8bf9..618e909d 100644 --- a/sites/indihometv.com/indihometv.com.config.js +++ b/sites/indihometv.com/indihometv.com.config.js @@ -43,7 +43,7 @@ module.exports = { function parseStart($item, date) { const timeString = $item('p').text() - const [_, start] = timeString.match(/(\d{2}:\d{2}) -/) || [null, null] + const [, start] = timeString.match(/(\d{2}:\d{2}) -/) || [null, null] const dateString = `${date.format('YYYY-MM-DD')} ${start}` return dayjs.tz(dateString, 'YYYY-MM-DD HH:mm', 'Asia/Jakarta') @@ -51,7 +51,7 @@ function parseStart($item, date) { function parseStop($item, date) { const timeString = $item('p').text() - const [_, stop] = timeString.match(/- (\d{2}:\d{2})/) || [null, null] + const [, stop] = timeString.match(/- (\d{2}:\d{2})/) || [null, null] const dateString = `${date.format('YYYY-MM-DD')} ${stop}` return dayjs.tz(dateString, 'YYYY-MM-DD HH:mm', 'Asia/Jakarta') diff --git a/sites/indihometv.com/indihometv.com.test.js b/sites/indihometv.com/indihometv.com.test.js index 5c959f19..7d015d36 100644 --- a/sites/indihometv.com/indihometv.com.test.js +++ b/sites/indihometv.com/indihometv.com.test.js @@ -1,6 +1,6 @@ -// npx epg-grabber --config=sites/indihometv.com/indihometv.com.config.js --channels=sites/indihometv.com/indihometv.com.channels.xml --output=guide.xml --timeout=30000 --days=2 +// npm run grab -- --site=indihometv.com -const { parser, url, request } = require('./indihometv.com.config.js') +const { parser, url } = require('./indihometv.com.config.js') const dayjs = require('dayjs') const utc = require('dayjs/plugin/utc') dayjs.extend(utc) @@ -10,7 +10,8 @@ const channel = { site_id: 'metrotv', xmltv_id: 'MetroTV.id' } -const content = `07:00 - 07:05Headline News07:05 - 07:30Editorial Media Indonesia07:30 - 07:45Editorial Media Indonesia07:45 - 08:00Editorial Media Indonesia` +const content = + '07:00 - 07:05Headline News07:05 - 07:30Editorial Media Indonesia07:30 - 07:45Editorial Media Indonesia07:45 - 08:00Editorial Media Indonesia' it('can generate valid url', () => { expect(url({ channel })).toBe('https://www.indihometv.com/tvod/metrotv') @@ -51,7 +52,7 @@ it('can handle empty guide', () => { const result = parser({ date, channel, - content: `` + content: '' }) expect(result).toMatchObject([]) }) diff --git a/sites/ionplustv.com/ionplustv.com.channels.xml b/sites/ionplustv.com/ionplustv.com.channels.xml index 78693bf8..01fabc51 100644 --- a/sites/ionplustv.com/ionplustv.com.channels.xml +++ b/sites/ionplustv.com/ionplustv.com.channels.xml @@ -1,6 +1,4 @@ - - - ION Plus - - + + ION Plus + diff --git a/sites/ionplustv.com/ionplustv.com.config.js b/sites/ionplustv.com/ionplustv.com.config.js index d9c99696..6dab5fe1 100644 --- a/sites/ionplustv.com/ionplustv.com.config.js +++ b/sites/ionplustv.com/ionplustv.com.config.js @@ -1,4 +1,3 @@ -const axios = require('axios') const dayjs = require('dayjs') const cheerio = require('cheerio') const utc = require('dayjs/plugin/utc') @@ -67,7 +66,7 @@ function parseSubTitle($item) { } function parseRating($item) { - const [_, rating] = $item('.tv-rating') + const [, rating] = $item('.tv-rating') .text() .match(/([^(]+)/) || [null, null] @@ -92,7 +91,7 @@ function parseStart($item, date) { } function parseDuration($item) { - const [_, duration] = $item('.tv-rating') + const [, duration] = $item('.tv-rating') .text() .trim() .match(/\((\d+)/) || [null, null] @@ -104,5 +103,5 @@ function parseItems(content) { if (!content) return [] const $ = cheerio.load(content) - return $(`#accordion > div`).toArray() + return $('#accordion > div').toArray() } diff --git a/sites/ionplustv.com/ionplustv.com.test.js b/sites/ionplustv.com/ionplustv.com.test.js index 673373ef..076ca9f6 100644 --- a/sites/ionplustv.com/ionplustv.com.test.js +++ b/sites/ionplustv.com/ionplustv.com.test.js @@ -1,19 +1,16 @@ -// npx epg-grabber --config=sites/ionplustv.com/ionplustv.com.config.js --channels=sites/ionplustv.com/ionplustv.com.channels.xml --output=guide.xml --days=2 +// npm run grab -- --site=ionplustv.com -const { parser, url, request } = require('./ionplustv.com.config.js') +const { parser, url } = require('./ionplustv.com.config.js') const fs = require('fs') const path = require('path') const dayjs = require('dayjs') const utc = require('dayjs/plugin/utc') const customParseFormat = require('dayjs/plugin/customParseFormat') + dayjs.extend(customParseFormat) dayjs.extend(utc) const date = dayjs.utc('2022-11-08', 'YYYY-MM-DD').startOf('d') -const channel = { - site_id: '#', - xmltv_id: 'IONPlus.us' -} it('can generate valid url', () => { expect(url({ date })).toBe('https://ionplustv.com/schedule/2022-11-08') diff --git a/sites/ipko.com/ipko.com.channels.xml b/sites/ipko.com/ipko.com.channels.xml index 4bd7ee89..603827da 100644 --- a/sites/ipko.com/ipko.com.channels.xml +++ b/sites/ipko.com/ipko.com.channels.xml @@ -1,40 +1,38 @@ - - - - 24 Kitchen - ABC News - Baby TV - Bang Bang - BBC World News - Boomerang - CNN - Çufo - Discovery Channel - Discovery Science - Eurosport 1 - Explorer Histori - Explorer Natyra - Explorer Shkencë - Film Aksion - Film Dramë - Film Hits - Film Komedi - Film Thriller - Hayat - Junior TV - Kohavision - MTV Live - My Music - National Geographic - News 24 - Peace TV English - Rai 1 - Rai 2 - Rai 3 - RTK 1 - RTV 21 Sat - Stinët - Arta - - \ No newline at end of file + + + 24 Kitchen + ABC News + Baby TV + Bang Bang + BBC World News + Boomerang + CNN + Çufo + Discovery Channel + Discovery Science + Eurosport 1 + Explorer Histori + Explorer Natyra + Explorer Shkencë + Film Aksion + Film Dramë + Film Hits + Film Komedi + Film Thriller + Hayat + Junior TV + Kohavision + MTV Live + My Music + National Geographic + News 24 + Peace TV English + Rai 1 + Rai 2 + Rai 3 + RTK 1 + RTV 21 Sat + Stinët + Arta + \ No newline at end of file diff --git a/sites/ipko.com/ipko.com.test.js b/sites/ipko.com/ipko.com.test.js index 6235ce13..dc0517a8 100644 --- a/sites/ipko.com/ipko.com.test.js +++ b/sites/ipko.com/ipko.com.test.js @@ -1,4 +1,4 @@ -// npx epg-grabber --config=sites/ipko.com/ipko.com.config.js --channels=sites/ipko.com/ipko.com.channels.xml --days=2 --output=guide.xml +// npm run grab -- --site=ipko.com const { parser, url } = require('./ipko.com.config.js') const dayjs = require('dayjs') @@ -12,7 +12,8 @@ const channel = { site_id: '406', xmltv_id: 'RTK1.xk' } -const content = `{"element":{"1":[{"id":6367,"channel_id":406,"program_name":"Beautiful People 13","name_short":"","description":"Lin largohet nga Nju Meksiko për t'u vendosur në Nju Jork e për t'ia nisur nga fillimi: një punë të re, shtëpi të re dhe njohje të reja. Bashkë me të janë vajzat e saj, Sofia, një 16 vjeçare që shkëlqen në shkollë, dhe Kareni, 20 vjeçare, që do të bë","category":"Sezoni I","duration":150,"day":"Sun","left_distanc":165,"date":"00:55:00"}]}}` +const content = + '{"element":{"1":[{"id":6367,"channel_id":406,"program_name":"Beautiful People 13","name_short":"","description":"Lin largohet nga Nju Meksiko për t\'u vendosur në Nju Jork e për t\'ia nisur nga fillimi: një punë të re, shtëpi të re dhe njohje të reja. Bashkë me të janë vajzat e saj, Sofia, një 16 vjeçare që shkëlqen në shkollë, dhe Kareni, 20 vjeçare, që do të bë","category":"Sezoni I","duration":150,"day":"Sun","left_distanc":165,"date":"00:55:00"}]}}' it('can generate valid url', () => { const result = url({ date }) @@ -26,13 +27,14 @@ it('can parse response', () => { start: 'Sun, 24 Oct 2021 00:55:00 GMT', stop: 'Sun, 24 Oct 2021 01:45:00 GMT', title: 'Beautiful People 13', - description: `Lin largohet nga Nju Meksiko për t'u vendosur në Nju Jork e për t'ia nisur nga fillimi: një punë të re, shtëpi të re dhe njohje të reja. Bashkë me të janë vajzat e saj, Sofia, një 16 vjeçare që shkëlqen në shkollë, dhe Kareni, 20 vjeçare, që do të bë`, + description: + "Lin largohet nga Nju Meksiko për t'u vendosur në Nju Jork e për t'ia nisur nga fillimi: një punë të re, shtëpi të re dhe njohje të reja. Bashkë me të janë vajzat e saj, Sofia, një 16 vjeçare që shkëlqen në shkollë, dhe Kareni, 20 vjeçare, që do të bë", category: 'Sezoni I' } ]) }) it('can handle empty guide', () => { - const result = parser({ date, channel, content: `{"element":{"1":[{"no":"no"}]}}` }) + const result = parser({ date, channel, content: '{"element":{"1":[{"no":"no"}]}}' }) expect(result).toMatchObject([]) }) diff --git a/sites/kan.org.il/kan.org.il.channels.xml b/sites/kan.org.il/kan.org.il.channels.xml index d973bf3c..c89752bc 100644 --- a/sites/kan.org.il/kan.org.il.channels.xml +++ b/sites/kan.org.il/kan.org.il.channels.xml @@ -1,8 +1,6 @@ - - - כאן 11 - חינוכית - مكان - - + + مكان + כאן 11 + חינוכית + diff --git a/sites/kan.org.il/kan.org.il.config.js b/sites/kan.org.il/kan.org.il.config.js index cf114879..987b4aa3 100644 --- a/sites/kan.org.il/kan.org.il.config.js +++ b/sites/kan.org.il/kan.org.il.config.js @@ -8,7 +8,6 @@ dayjs.extend(timezone) 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 }) { diff --git a/sites/kan.org.il/kan.org.il.test.js b/sites/kan.org.il/kan.org.il.test.js index 42c53a74..c2aa9710 100644 --- a/sites/kan.org.il/kan.org.il.test.js +++ b/sites/kan.org.il/kan.org.il.test.js @@ -1,4 +1,4 @@ -// npx epg-grabber --config=sites/kan.org.il/kan.org.il.config.js --channels=sites/kan.org.il/kan.org.il.channels.xml --output=guide.xml --days=2 +// npm run grab -- --site=kan.org.il const { parser, url } = require('./kan.org.il.config.js') const dayjs = require('dayjs') @@ -20,7 +20,8 @@ it('can generate valid url', () => { }) it('can parse response', () => { - const content = `[{"title":"ארץ מולדת - בין תורכיה לבריטניה","start_time":"2022-03-06T00:05:37","end_time":"2022-03-06T00:27:12","id":"2598","age_category_desc":"0","epg_name":"ארץ מולדת","title1":"ארץ מולדת - בין תורכיה לבריטניה","chapter_number":"9","live_desc":"קבוצת תלמידים מתארגנת בפרוץ מלחמת העולם הראשונה להגיש עזרה לישוב. באמצעות התלמידים לומד הצופה על בעיותיו של הישוב בתקופת המלחמה, והתלבטותו בין נאמנות לשלטון העות'מאני לבין תקוותיו מהבריטים הכובשים.","Station_Radio":"0","Station_Id":"20","stationUrlScheme":"kan11://plugin/?type=player&plugin_identifier=kan_player&ds=general-provider%3A%2F%2FfetchData%3Ftype%3DFEED_JSON%26url%3DaHR0cHM6Ly93d3cua2FuLm9yZy5pbC9hcHBLYW4vbGl2ZVN0YXRpb25zLmFzaHg%3D&id=4","program_code":"3671","picture_code":"https://kanweb.blob.core.windows.net/download/pictures/2021/1/20/imgid=45847_Z.jpeg","program_image":"","station_image":"Logo_Image_Logo20_img__8.jpg","program_id":"","timezone":"2"}]` + const content = + '[{"title":"ארץ מולדת - בין תורכיה לבריטניה","start_time":"2022-03-06T00:05:37","end_time":"2022-03-06T00:27:12","id":"2598","age_category_desc":"0","epg_name":"ארץ מולדת","title1":"ארץ מולדת - בין תורכיה לבריטניה","chapter_number":"9","live_desc":"קבוצת תלמידים מתארגנת בפרוץ מלחמת העולם הראשונה להגיש עזרה לישוב. באמצעות התלמידים לומד הצופה על בעיותיו של הישוב בתקופת המלחמה, והתלבטותו בין נאמנות לשלטון העות\'מאני לבין תקוותיו מהבריטים הכובשים.","Station_Radio":"0","Station_Id":"20","stationUrlScheme":"kan11://plugin/?type=player&plugin_identifier=kan_player&ds=general-provider%3A%2F%2FfetchData%3Ftype%3DFEED_JSON%26url%3DaHR0cHM6Ly93d3cua2FuLm9yZy5pbC9hcHBLYW4vbGl2ZVN0YXRpb25zLmFzaHg%3D&id=4","program_code":"3671","picture_code":"https://kanweb.blob.core.windows.net/download/pictures/2021/1/20/imgid=45847_Z.jpeg","program_image":"","station_image":"Logo_Image_Logo20_img__8.jpg","program_id":"","timezone":"2"}]' const result = parser({ content }).map(p => { p.start = p.start.toJSON() p.stop = p.stop.toJSON() @@ -41,7 +42,7 @@ it('can parse response', () => { it('can handle empty guide', () => { const result = parser({ - content: `[]` + content: '[]' }) expect(result).toMatchObject([]) }) diff --git a/sites/knr.gl/knr.gl.channels.xml b/sites/knr.gl/knr.gl.channels.xml index 613fa396..cb03446e 100644 --- a/sites/knr.gl/knr.gl.channels.xml +++ b/sites/knr.gl/knr.gl.channels.xml @@ -1,6 +1,4 @@ - - - KNR TV - - \ No newline at end of file + + KNR TV + \ No newline at end of file diff --git a/sites/knr.gl/knr.gl.config.js b/sites/knr.gl/knr.gl.config.js index c123d78d..c9ca8fe2 100644 --- a/sites/knr.gl/knr.gl.config.js +++ b/sites/knr.gl/knr.gl.config.js @@ -40,7 +40,7 @@ function parseStart(item, date) { return dayjs.tz(time, 'YYYY-MM-DD HH:mm', 'America/Godthab') } -function parseItems(content, date) { +function parseItems(content) { const data = JSON.parse(content) if (!data.program_list) return [] const $ = cheerio.load(data.program_list) diff --git a/sites/knr.gl/knr.gl.test.js b/sites/knr.gl/knr.gl.test.js index 30ddc8dc..a0cb8cd4 100644 --- a/sites/knr.gl/knr.gl.test.js +++ b/sites/knr.gl/knr.gl.test.js @@ -1,4 +1,4 @@ -// npx epg-grabber --config=sites/knr.gl/knr.gl.config.js --channels=sites/knr.gl/knr.gl.channels.xml --output=guide.xml --days=2 +// npm run grab -- --site=knr.gl const { parser, url } = require('./knr.gl.config.js') const dayjs = require('dayjs') @@ -18,7 +18,8 @@ it('can generate valid url', () => { }) it('can parse response', () => { - const content = `{\"program_list\":\"\\u003Cdt class=\\u0022program\\u0022\\u003E\\u003Cstrong\\u003E08:00\\u003C\\\/strong\\u003E Meeqqanut - Toqqorsivimmiit\\u003C\\\/dt\\u003E\\u003Cdt class=\\u0022knr-program-pointer knr-program-togle-program\\u0022 data-program-id=\\u0022588574\\u0022 data-module-path=\\u0022sites\\\/knr\\\/modules\\\/custom\\\/knr_site\\u0022\\u003E\\u003Cimg height=\\u00229\\u0022 width=\\u00229\\u0022 id=\\u0022icon_588574\\u0022 alt=\\u0022View description\\u0022 src=\\u0022\\\/sites\\\/knr\\\/modules\\\/custom\\\/knr_site\\\/assets\\\/img\\\/plus.gif\\u0022\\u003E\\u003Cstrong\\u003E08:30\\u003C\\\/strong\\u003E ICC 2018 Piorsarsimassutikkut pisut (1:3)\\u003C\\\/dt\\u003E\\u003Cdd id=\\u0022program_588574\\u0022 style=\\u0022display: none;\\u0022\\u003E\\u003Cdiv class=\\u0022box\\u0022\\u003E2018 ICC ataatsimersuareernerata kingorna unnukkut piorsarsimassutsikkut pisut takutinneqarput. Aammalu illoqarfik Utqiagvik ilisaritinneqarluni. Ove Heilmann, Aannguaq Nielsen, Aannguaq Reimer-Johansen\\r\\nKNR 09.12.2018\\u003C\\\/div\\u003E\\u003C\\\/dd\\u003E\"}` + const content = + '{"program_list":"\\u003Cdt class=\\u0022program\\u0022\\u003E\\u003Cstrong\\u003E08:00\\u003C\\/strong\\u003E Meeqqanut - Toqqorsivimmiit\\u003C\\/dt\\u003E\\u003Cdt class=\\u0022knr-program-pointer knr-program-togle-program\\u0022 data-program-id=\\u0022588574\\u0022 data-module-path=\\u0022sites\\/knr\\/modules\\/custom\\/knr_site\\u0022\\u003E\\u003Cimg height=\\u00229\\u0022 width=\\u00229\\u0022 id=\\u0022icon_588574\\u0022 alt=\\u0022View description\\u0022 src=\\u0022\\/sites\\/knr\\/modules\\/custom\\/knr_site\\/assets\\/img\\/plus.gif\\u0022\\u003E\\u003Cstrong\\u003E08:30\\u003C\\/strong\\u003E ICC 2018 Piorsarsimassutikkut pisut (1:3)\\u003C\\/dt\\u003E\\u003Cdd id=\\u0022program_588574\\u0022 style=\\u0022display: none;\\u0022\\u003E\\u003Cdiv class=\\u0022box\\u0022\\u003E2018 ICC ataatsimersuareernerata kingorna unnukkut piorsarsimassutsikkut pisut takutinneqarput. Aammalu illoqarfik Utqiagvik ilisaritinneqarluni. Ove Heilmann, Aannguaq Nielsen, Aannguaq Reimer-Johansen\\r\\nKNR 09.12.2018\\u003C\\/div\\u003E\\u003C\\/dd\\u003E"}' const result = parser({ content, date }).map(p => { p.start = p.start.toJSON() p.stop = p.stop.toJSON() @@ -29,12 +30,12 @@ it('can parse response', () => { { start: '2021-11-22T11:00:00.000Z', stop: '2021-11-22T11:30:00.000Z', - title: `Meeqqanut - Toqqorsivimmiit` + title: 'Meeqqanut - Toqqorsivimmiit' }, { start: '2021-11-22T11:30:00.000Z', stop: '2021-11-22T12:30:00.000Z', - title: `ICC 2018 Piorsarsimassutikkut pisut (1:3)`, + title: 'ICC 2018 Piorsarsimassutikkut pisut (1:3)', description: '2018 ICC ataatsimersuareernerata kingorna unnukkut piorsarsimassutsikkut pisut takutinneqarput. Aammalu illoqarfik Utqiagvik ilisaritinneqarluni. Ove Heilmann, Aannguaq Nielsen, Aannguaq Reimer-Johansen KNR 09.12.2018' } @@ -45,7 +46,7 @@ it('can handle empty guide', () => { const result = parser({ date, channel, - content: `{"program_list":""}` + content: '{"program_list":""}' }) expect(result).toMatchObject([]) }) diff --git a/sites/kplus.vn/kplus.vn.channels.xml b/sites/kplus.vn/kplus.vn.channels.xml index f2a0882e..3c9b7673 100644 --- a/sites/kplus.vn/kplus.vn.channels.xml +++ b/sites/kplus.vn/kplus.vn.channels.xml @@ -1,31 +1,29 @@ - - - AFC - AXN HD - CARTOON NETWORK - DISCOVERY CHANNEL - VTVCab1-GIAITRITV - HBO HD - HTV7 - HTV9 - KBS WORLD - K+CINE HD - K+LIFE HD - K+PC HD - K+PM HD - NHK WORLD JAPAN - SCTV PHIMTONGHOP - VTC7-TODAY TV - TV5 MONDE - VTC1 - VTV2 - VTV3 HD - VTV4 - VTV6 HD - VTV7 - VTV8 - VTV9 - YOU TV - - + + AFC + AXN HD + CARTOON NETWORK + DISCOVERY CHANNEL + HBO HD + HTV7 + HTV9 + KBS WORLD + K+CINE HD + K+LIFE HD + K+PM HD + K+PC HD + NHK WORLD JAPAN + SCTV PHIMTONGHOP + VTC7-TODAY TV + TV5 MONDE + VTC1 + VTV2 + VTV3 HD + VTV4 + VTV6 HD + VTV7 + VTV8 + VTV9 + VTVCab1-GIAITRITV + YOU TV + diff --git a/sites/kplus.vn/kplus.vn.config.js b/sites/kplus.vn/kplus.vn.config.js index a1bc59e8..a134f1cd 100644 --- a/sites/kplus.vn/kplus.vn.config.js +++ b/sites/kplus.vn/kplus.vn.config.js @@ -6,12 +6,11 @@ const timezone = require('dayjs/plugin/timezone') dayjs.extend(timezone) dayjs.extend(utc) -const API_ENDPOINT = `https://www.kplus.vn/Schedule/getSchedule` +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: { headers: { diff --git a/sites/kplus.vn/kplus.vn.test.js b/sites/kplus.vn/kplus.vn.test.js index 6a855b35..ddadd447 100644 --- a/sites/kplus.vn/kplus.vn.test.js +++ b/sites/kplus.vn/kplus.vn.test.js @@ -1,5 +1,5 @@ // npm run channels:parse -- --config=sites/kplus.vn/kplus.vn.config.js --output=sites/kplus.vn/kplus.vn.channels.xml -// npx epg-grabber --config=sites/kplus.vn/kplus.vn.config.js --channels=sites/kplus.vn/kplus.vn.channels.xml --output=guide.xml --days=2 +// npm run grab -- --site=kplus.vn const { parser, url, request } = require('./kplus.vn.config.js') const dayjs = require('dayjs') @@ -32,7 +32,8 @@ it('can generate valid request data', () => { }) it('can parse response', () => { - const content = `{"SchedulesCount":1105,"ChannelsCount":28,"Schedules":[{"Id":12195,"ChannelId":7019,"ProgramId":35111026,"EpgProgramId":"1252496\\r","ShowingTime":"2022-03-15T06:15:00","EpgBroadcastId":"HD_ENT_DOC_LNO_21_2649421_2652183_4383385_OnAir","EpgId":"HD_ENT_DOC_LNO_21_2649421_2652183_4383385_OnAir","IsDeleted":false,"CreatedOn":"2022-03-15T06:22:45","UpdatedOn":"0001-01-01T00:00:00","Channel":{"Id":7019,"Name":"K+1 HD","Image":"https://kplus-website-production-cdn.azureedge.net/content/upload/7/images-mkt/logo-k-1-hd-new.png","LiveUrlSegment":"highlights/broadcast-schedule/K-1-HD","FeatureImage":"https://kplus-website-production-cdn.azureedge.net/content/upload/7/images-mkt/logo-k-1-hd-new.png","EpgId":null,"IsOTTEnabled":false,"StartOver":0,"DisplayOrder":0},"Program":{"Id":35111026,"Name":"WEEKLY FILMS AND STARS, EP740","BodyContent":"","Cast":"","Director":"","Duration":0,"EpgId":"93701","EpgProgramId":null,"Episode":0,"Genres":"Documentary","Images":"https://img.kplus.vn/images?filename=Media/HDVN/2022_02/ENT_DOC_LNO_21_2649421_2652183_2652183.jpg","IsFeatured":false,"IsOTTEnabled":true,"IsRebroadcast":false,"ShortDescription":"","SubTitle":"","Trailers":"","UrlSegment":"highlights/broadcast-schedule/93701/weekly-films-and-stars-ep740","CreatedOn":"2022-03-16T00:15:45","UpdatedOn":"2022-03-16T00:15:45","ParentalRating":null},"RelatedSchedules":null},{"Id":12196,"ChannelId":7019,"ProgramId":35111279,"EpgProgramId":"798685\\r","ShowingTime":"2022-03-15T07:00:00","EpgBroadcastId":"HD_MOV_COM__2632318_4383386_OnAir","EpgId":"HD_MOV_COM__2632318_4383386_OnAir","IsDeleted":false,"CreatedOn":"2022-03-15T07:02:46","UpdatedOn":"0001-01-01T00:00:00","Channel":{"Id":7019,"Name":"K+1 HD","Image":"https://kplus-website-production-cdn.azureedge.net/content/upload/7/images-mkt/logo-k-1-hd-new.png","LiveUrlSegment":"highlights/broadcast-schedule/K-1-HD","FeatureImage":"https://kplus-website-production-cdn.azureedge.net/content/upload/7/images-mkt/logo-k-1-hd-new.png","EpgId":null,"IsOTTEnabled":false,"StartOver":0,"DisplayOrder":0},"Program":{"Id":35111279,"Name":"ST. VINCENT","BodyContent":"","Cast":"Bill Murray, Melissa McCarthy, Naomi Watts","Director":"Theodore Melfi","Duration":0,"EpgId":"93959","EpgProgramId":null,"Episode":0,"Genres":"Comedy","Images":"https://img.kplus.vn/images?filename=Media/HDVN/2020_05/MOV_COM__2632318_2632318.jpg","IsFeatured":false,"IsOTTEnabled":true,"IsRebroadcast":false,"ShortDescription":"","SubTitle":"","Trailers":"","UrlSegment":"highlights/broadcast-schedule/93959/st-vincent","CreatedOn":"2022-03-16T00:15:45","UpdatedOn":"2022-03-16T00:15:45","ParentalRating":null},"RelatedSchedules":null}]}` + const content = + '{"SchedulesCount":1105,"ChannelsCount":28,"Schedules":[{"Id":12195,"ChannelId":7019,"ProgramId":35111026,"EpgProgramId":"1252496\\r","ShowingTime":"2022-03-15T06:15:00","EpgBroadcastId":"HD_ENT_DOC_LNO_21_2649421_2652183_4383385_OnAir","EpgId":"HD_ENT_DOC_LNO_21_2649421_2652183_4383385_OnAir","IsDeleted":false,"CreatedOn":"2022-03-15T06:22:45","UpdatedOn":"0001-01-01T00:00:00","Channel":{"Id":7019,"Name":"K+1 HD","Image":"https://kplus-website-production-cdn.azureedge.net/content/upload/7/images-mkt/logo-k-1-hd-new.png","LiveUrlSegment":"highlights/broadcast-schedule/K-1-HD","FeatureImage":"https://kplus-website-production-cdn.azureedge.net/content/upload/7/images-mkt/logo-k-1-hd-new.png","EpgId":null,"IsOTTEnabled":false,"StartOver":0,"DisplayOrder":0},"Program":{"Id":35111026,"Name":"WEEKLY FILMS AND STARS, EP740","BodyContent":"","Cast":"","Director":"","Duration":0,"EpgId":"93701","EpgProgramId":null,"Episode":0,"Genres":"Documentary","Images":"https://img.kplus.vn/images?filename=Media/HDVN/2022_02/ENT_DOC_LNO_21_2649421_2652183_2652183.jpg","IsFeatured":false,"IsOTTEnabled":true,"IsRebroadcast":false,"ShortDescription":"","SubTitle":"","Trailers":"","UrlSegment":"highlights/broadcast-schedule/93701/weekly-films-and-stars-ep740","CreatedOn":"2022-03-16T00:15:45","UpdatedOn":"2022-03-16T00:15:45","ParentalRating":null},"RelatedSchedules":null},{"Id":12196,"ChannelId":7019,"ProgramId":35111279,"EpgProgramId":"798685\\r","ShowingTime":"2022-03-15T07:00:00","EpgBroadcastId":"HD_MOV_COM__2632318_4383386_OnAir","EpgId":"HD_MOV_COM__2632318_4383386_OnAir","IsDeleted":false,"CreatedOn":"2022-03-15T07:02:46","UpdatedOn":"0001-01-01T00:00:00","Channel":{"Id":7019,"Name":"K+1 HD","Image":"https://kplus-website-production-cdn.azureedge.net/content/upload/7/images-mkt/logo-k-1-hd-new.png","LiveUrlSegment":"highlights/broadcast-schedule/K-1-HD","FeatureImage":"https://kplus-website-production-cdn.azureedge.net/content/upload/7/images-mkt/logo-k-1-hd-new.png","EpgId":null,"IsOTTEnabled":false,"StartOver":0,"DisplayOrder":0},"Program":{"Id":35111279,"Name":"ST. VINCENT","BodyContent":"","Cast":"Bill Murray, Melissa McCarthy, Naomi Watts","Director":"Theodore Melfi","Duration":0,"EpgId":"93959","EpgProgramId":null,"Episode":0,"Genres":"Comedy","Images":"https://img.kplus.vn/images?filename=Media/HDVN/2020_05/MOV_COM__2632318_2632318.jpg","IsFeatured":false,"IsOTTEnabled":true,"IsRebroadcast":false,"ShortDescription":"","SubTitle":"","Trailers":"","UrlSegment":"highlights/broadcast-schedule/93959/st-vincent","CreatedOn":"2022-03-16T00:15:45","UpdatedOn":"2022-03-16T00:15:45","ParentalRating":null},"RelatedSchedules":null}]}' const result = parser({ content, channel }).map(p => { p.start = p.start.toJSON() p.stop = p.stop.toJSON() @@ -59,7 +60,7 @@ it('can parse response', () => { it('can handle empty guide', () => { const result = parser({ - content: `{"SchedulesCount":0,"ChannelsCount":0,"Schedules":[],"Channels":[],"MinDuration":0}`, + content: '{"SchedulesCount":0,"ChannelsCount":0,"Schedules":[],"Channels":[],"MinDuration":0}', channel }) expect(result).toMatchObject([]) diff --git a/sites/kvf.fo/kvf.fo.channels.xml b/sites/kvf.fo/kvf.fo.channels.xml index 50db3342..83f0c57a 100644 --- a/sites/kvf.fo/kvf.fo.channels.xml +++ b/sites/kvf.fo/kvf.fo.channels.xml @@ -1,6 +1,4 @@ - - - KVF Sjónvarp - - \ No newline at end of file + + KVF Sjónvarp + \ No newline at end of file diff --git a/sites/kvf.fo/kvf.fo.test.js b/sites/kvf.fo/kvf.fo.test.js index 21f30534..637ea272 100644 --- a/sites/kvf.fo/kvf.fo.test.js +++ b/sites/kvf.fo/kvf.fo.test.js @@ -1,4 +1,4 @@ -// npx epg-grabber --config=sites/kvf.fo/kvf.fo.config.js --channels=sites/kvf.fo/kvf.fo.channels.xml --output=guide.xml --days=2 +// npm run grab -- --site=kvf.fo const { parser, url } = require('./kvf.fo.config.js') const fs = require('fs') @@ -30,7 +30,7 @@ it('can parse response', () => { expect(result[2]).toMatchObject({ start: '2021-11-21T18:05:00.000Z', stop: '2021-11-21T18:30:00.000Z', - title: `Letibygd 13` + title: 'Letibygd 13' }) }) @@ -38,7 +38,7 @@ it('can handle empty guide', () => { const result = parser({ date, channel, - content: ` ` + content: ' ' }) expect(result).toMatchObject([]) }) diff --git a/sites/m.tv.sms.cz/m.tv.sms.cz.channels.xml b/sites/m.tv.sms.cz/m.tv.sms.cz.channels.xml index fcff0588..216da1d2 100644 --- a/sites/m.tv.sms.cz/m.tv.sms.cz.channels.xml +++ b/sites/m.tv.sms.cz/m.tv.sms.cz.channels.xml @@ -1,531 +1,529 @@ - - - - BN TV Satelitski - AMC Cesko - Animal Planet - Auto Motor und Sport - AXN Black - AXN - AXN White - Barrandov Krimi - Canal + Domo - Canal + Séries France - Canal+ Sport 1 - Cartoon Network - CBS Reality Europe - CGTN Arabic - CGTN Russkij - Channel 5 - 5 Kanal - 8 Kanal International - Cinemax 2 - Cinemax - CNN Prima News - Cool TV - Credo TV - Crime + Investigation - CS Film - CS History - CS Horror - CS Mystery - CT 1 - CT 2 - CT 24 - CT 3 - CT art - CT :D - CT Sport - Dave UK - Deluxe Lounge - Deluxe Music - Digi Sport 1 Hungary - Digi Sport 2 Hungary - Discovery Channel - Discovery Science - Disney Channel - DM Sat - Doma Hrvatska - Dom Kino - Dom Kino Premium International - DTX - Duck TV SD - Duck TV Plus - Duna TV - Duna World - RTVS 2 - E! Europe - Enter Film - Epic Drama - Eska TV - EuroNews Russkiy - Eurosport 1 - Eurosport 2 - FashionBox HD - Fast & FunBox HD - Fem 3 - FilmBox Action - FilmBox Central Europe - FilmBox Extra HD Czechia - FilmBox Extra HD Polska - FilmBox Family - FilmBox Premium Czechia - FilmBox Stars Czechia - Film Café Hungary - Film Europe - Film Europe + - Film Mánia - Film + Czechia - Film + Hungary - Fokus TV - Folklorika - Fox Crime Hrvatska - Fox Life Hrvatska - Fox Movies Hrvatska - Galaxy 4 - Gold TV - Golf Channel Czechia - HaHa TV - HBO 2 - HBO 3 - HBO - HGTV - Hír TV - History Channel - HNTV - Hobby TV - Home TV - HRT 1 - HRT 2 - HRT 3 - HRT 4 - HRT International - H!t Music Channel Hungary - Inter - Investigation Discovery Europe - Iris - Italia 1 - Italia 2 - Izaura TV - RTVS 1 - JimJam Europe - Joj 24 - Joj Cinema - Joj Family - Jojko - Joj Plus - Joj Šport - Wau TV - Jugoton TV - Jurnal TV - K2 - Kabel Eins Deutschland - Karusel International - KHL - Kino Barrandov - Kino Polska - Kino TV - Lala TV - Leo TV - Leo TV Gold - Love Nature - Luxe TV - M1 - M2 - M4 Sport - M5 - TV Markíza - Dajto - TV Doma - Markíza International - Markíza Krimi - Mediaset Extra - Mezzo Live HD - Minimax Czechia - Minimax Hungary - Mini TV - Mňam TV - Mňau TV - Movistar Acción - Movistar Comedia - Movistar Deportes - Movistar Drama - Movistar Estrenos - Movistar Golf - MTV 00s - MTV Hungary - Music Box Ukraina - Muzika Pervogo - Muzsika TV - Náš REGION TV - National Geographic Hrvatska - National Geographic - National Geographic Wild - Nickelodeon Czechia - Nick Jr Czechia - Nicktoons Czechia - Nova Action - Nova Cinema - Nova Fun - Nova Gold - Nova International - Nova Lady - Nova Sport 1 - Nova Sport 2 - Nova Sport 3 - Nova Sport 4 - Nova TV - Novela TV - N-TV - Nuta TV - Telekanal O! - O2 TV Fotbal - O2 TV Sport - O2 TV Sport 2 - O2 TV Sport 3 - O2 TV Sport 4 - O2 TV Sport 5 - O2 TV Sport 6 - O2 TV Tenis - Óčko - Óčko Black - Óčko Expres - Óčko Star - One - ORF 1 - ORF 2 - ORF III - Paramount Network - Park TV - Pax TV - Poehali! International - Polonia 1 - Polo TV - Polsat - Polsat 2 - Polsat Café - Polsat News - Polsat News 2 - Polsat Play - Polsat Sport - Polsat Sport Extra - Power TV - Premier Sport 1 - Premier Sport 2 - Prima - Prima Cool - Prima Krimi - Prima Love - Prima Max - Prima Plus - Prima Show - Prima Star - Prima Zoom - Private TV - ProSieben Deutschland - Puls 2 - Racing UK SD - Rai 1 - Rai 2 - Rai 3 - Rai 5 - Rai Gulp - Rai Movie - Rai News 24 - Rai Premium - Rai Sport 1 - Rai Sport 2 - Rai Storia - Rai Yoyo - RBB Berlin - Rebel - Red Carpet - Redlight HD - Relax - Rete 4 - Retro Music TV - RT Documentary - RTL 2 Hrvatska - RTL 4 - RTL 5 - RTL Crime Hrvatska - RTL Hrvatska - RTL Gold - RTL HÁROM - RTL - RTL KETTŐ - RTL Kockica - RTL Living Hrvatska - RTL Passion Hrvatska - RTL Zwei Deutschland - RTR Planeta - RTVi Europe - Rossiya 24 - Sat. 1 Deutschland - Sat. 1 Gold Deutschland - Senzi - Sixx Deutschland - Slágr Muzika - Slágr Original - Slágr Premium - Sláger TV - Sony Max Hungary - Sony Movie Channel Hungary - Sorozat + - Spektrum Czech - Spektrum Home Czech - Spektrum Home - Spektrum - RTVS Šport - Sport 1 Czechia - Sport 1 Hungary - Sport 2 Czechia - Sport 2 Hungary - Sport 5 - Stingray IConcerts - Stopklatka TV - Story 4 - Super Polsat - Super RTL Deutschland - Super TV 2 - Superyacht TV - TA 3 - Tagesschau 24 - TBN Polska - Telecafé International - TV Seznam - TF 1 - The Fishing & Hunting Channel - TLC Pan Regional - TMC - Travel Channel Europe - Travelxp HD Europe - RTVS 3 - TTV - Tuki TV - Turbo TV - TV 1000 Balkan - TV 2 - TV 2000 - TV 2 Séf - TV3 - TV3CAT - TV 4 - TV 4 - TV 6 - TV 7 - TV Osem - TV Barrandov - TVC - TV Central - TVCG Sat - Televízia Dolný Kubín - TVE Internacional Europa - TV Joj - TV Lux - TVN - TVN 24 - TVN 7 - TV Natura - TV Noe - TV Nova - TVN Turbo - TVP 1 - TVP 2 - TVP ABC - TV Paprika Czech Republic - TV Paprika - TVP HD - TVP Historia - TVP Info - TVP Kultura - TV Povazie - TVP Polonia - TVP Rozrywka - TVP Seriale - TVP Sport - TV Puls - TV Raj - TV Republika - Rik - TV Romana - TVS - TV Severka - TV Slovenija 1 - TV Slovenija 2 - TV TRWAM - TV Vega - TV Východ - UA TV - Ukraïna 24 - Up Network - Viasat Explore - Viasat History - Viasat Nature - VTV 1 - VTV 2 - VTV 3 - VTV 4 - Water Planet - W Polsce PL - Z1 - Zoom - Zoom TV - 3sat - Anixe HD Serie - ARD Alpha - Das Erste - Disney Channel Deutschland - HR Fernsehen - KIKA - Nitro Deutschland - Phoenix - RTL Deutschland - Welt - ZDF - ZDF Info - ZDF Neo - 360 Tune Box - Aljazeera Channel - Aljazeera English - Animal Planet UK - Arirang World - Babes TV - Baby TV Europe - BBC Entertainment Europe - BBC Four - BBC One - BBC Two - BBC World News Europe - Bloomberg TV Europe - Blue Hustler Europe - Boomerang Central & Eastern Europe - Brazzers TV Europe - CBBC - CCTV 4 Europe - CCTV 9 - Club MTV - CNN International Europe - Crime + Investigation UK - Desire TV - Disney Junior - DocuBox HD - Dorcel TV - Dorcel XXX - Dusk - DW Deutsch - E4 UK - Eden - English Club TV - Erox HD - Eroxxx HD - Eurochannel - EuroNews English - EuroNews Magyar - EWTN Europe - Extasy TV - Extreme Sports Channel - FashionTV Europe - FightBox HD - Film 4 - FilmBox Arthouse Worldwide - Food Network EMEA - France 24 English - Fuel TV - Gametoon - Ginx eSports TV International - Hustler HD Europe - Hustler TV Europe - ITV London - ITV 2 - ITV 3 - ITV 4 - KBS World - Lounge TV - More 4 UK - MTV 80s - MTV 90s - MTV Hits Europe - MTV Live - MTV UK - MyZen TV - MyZen TV 4K - NASA TV Public - NASA TV UHD Public - National Geographic HD UK - Nautical Channel - NBA TV - NHK World Japan - Outdoor Channel - Passion XXX - Pick UK - Playboy TV Europe - Reality Kings TV - RTG TV - Sky Arts UK - Sky Atlantic UK - Sky Cinema Action - Sky Cinema Drama - Sky Cinema Family - Sky Cinema Greats - Sky Cinema Hits - Sky Cinema Premiere - Sky Cinema Sci-fi Horror - Sky Cinema Select - Sky Comedy UK - Sky Crime - Sky History 2 - Sky News UK - Sky News International - Sky One UK - Sky Sci-Fi - Sky Sports Cricket - Sky Sports F1 - Sky Sports Football UK - Sky Sports Golf UK - Sky Sports Main Event UK - Sky Sports News UK - Sky Sports Premier League UK - Sky Witness UK - Stars TV - Stingray Classica - Stingray CMusic - Stingray Djazz - SuperOne HD - Trace Sport Stars - True Amateurs - Wild TV - #0 - Canal 24 Horas - CGTN Español - CGTN Français - France 24 Français - France 3 - Mezzo - TV5Monde Europe - Aljazeera Balkans - ATV - Comedy Central Family Hungary - Comedy Central Hungary - La 5 - BVN Europa - 4 Fun Dance - 4 Fun Kids - 4 Fun TV - Adventure - Belarus 24 - Biznes 24 - Cartoon Network Polska - 7D7 - Bober International - Perviy kanal - RTVS 24 - Arcadia TV - Arena Sport 1 - Arena Sport 2 - Chuck TV - CNL Evropa - Life TV - - + + + BN TV Satelitski + AMC Cesko + Animal Planet + Auto Motor und Sport + AXN Black + AXN + AXN White + Barrandov Krimi + Canal + Domo + Canal + Séries France + Canal+ Sport 1 + Cartoon Network + CBS Reality Europe + CGTN Arabic + CGTN Russkij + Channel 5 + 5 Kanal + 8 Kanal International + Cinemax 2 + Cinemax + CNN Prima News + Cool TV + Credo TV + Crime + Investigation + CS Film + CS History + CS Horror + CS Mystery + CT 1 + CT 2 + CT 24 + CT 3 + CT art + CT :D + CT Sport + Dave UK + Deluxe Lounge + Deluxe Music + Digi Sport 1 Hungary + Digi Sport 2 Hungary + Discovery Channel + Discovery Science + Disney Channel + DM Sat + Doma Hrvatska + Dom Kino + Dom Kino Premium International + DTX + Duck TV SD + Duck TV Plus + Duna TV + Duna World + RTVS 2 + E! Europe + Enter Film + Epic Drama + Eska TV + EuroNews Russkiy + Eurosport 1 + Eurosport 2 + FashionBox HD + Fast & FunBox HD + Fem 3 + FilmBox Action + FilmBox Central Europe + FilmBox Extra HD Czechia + FilmBox Extra HD Polska + FilmBox Family + FilmBox Premium Czechia + FilmBox Stars Czechia + Film Café Hungary + Film Europe + Film Europe + + Film Mánia + Film + Czechia + Film + Hungary + Fokus TV + Folklorika + Fox Crime Hrvatska + Fox Life Hrvatska + Fox Movies Hrvatska + Galaxy 4 + Gold TV + Golf Channel Czechia + HaHa TV + HBO 2 + HBO 3 + HBO + HGTV + Hír TV + History Channel + HNTV + Hobby TV + Home TV + HRT 1 + HRT 2 + HRT 3 + HRT 4 + HRT International + H!t Music Channel Hungary + Inter + Investigation Discovery Europe + Iris + Italia 1 + Italia 2 + Izaura TV + RTVS 1 + JimJam Europe + Joj 24 + Joj Cinema + Joj Family + Jojko + Joj Plus + Joj Šport + Wau TV + Jugoton TV + Jurnal TV + K2 + Kabel Eins Deutschland + Karusel International + KHL + Kino Barrandov + Kino Polska + Kino TV + Lala TV + Leo TV + Leo TV Gold + Love Nature + Luxe TV + M1 + M2 + M4 Sport + M5 + TV Markíza + Dajto + TV Doma + Markíza International + Markíza Krimi + Mediaset Extra + Mezzo Live HD + Minimax Czechia + Minimax Hungary + Mini TV + Mňam TV + Mňau TV + Movistar Acción + Movistar Comedia + Movistar Deportes + Movistar Drama + Movistar Estrenos + Movistar Golf + MTV 00s + MTV Hungary + Music Box Ukraina + Muzika Pervogo + Muzsika TV + Náš REGION TV + National Geographic Hrvatska + National Geographic + National Geographic Wild + Nickelodeon Czechia + Nick Jr Czechia + Nicktoons Czechia + Nova Action + Nova Cinema + Nova Fun + Nova Gold + Nova International + Nova Lady + Nova Sport 1 + Nova Sport 2 + Nova Sport 3 + Nova Sport 4 + Nova TV + Novela TV + N-TV + Nuta TV + Telekanal O! + O2 TV Fotbal + O2 TV Sport + O2 TV Sport 2 + O2 TV Sport 3 + O2 TV Sport 4 + O2 TV Sport 5 + O2 TV Sport 6 + O2 TV Tenis + Óčko + Óčko Black + Óčko Expres + Óčko Star + One + ORF 1 + ORF 2 + ORF III + Paramount Network + Park TV + Pax TV + Poehali! International + Polonia 1 + Polo TV + Polsat + Polsat 2 + Polsat Café + Polsat News + Polsat News 2 + Polsat Play + Polsat Sport + Polsat Sport Extra + Power TV + Premier Sport 1 + Premier Sport 2 + Prima + Prima Cool + Prima Krimi + Prima Love + Prima Max + Prima Plus + Prima Show + Prima Star + Prima Zoom + Private TV + ProSieben Deutschland + Puls 2 + Racing UK SD + Rai 1 + Rai 2 + Rai 3 + Rai 5 + Rai Gulp + Rai Movie + Rai News 24 + Rai Premium + Rai Sport 1 + Rai Sport 2 + Rai Storia + Rai Yoyo + RBB Berlin + Rebel + Red Carpet + Redlight HD + Relax + Rete 4 + Retro Music TV + RT Documentary + RTL 2 Hrvatska + RTL 4 + RTL 5 + RTL Crime Hrvatska + RTL Hrvatska + RTL Gold + RTL HÁROM + RTL + RTL KETTŐ + RTL Kockica + RTL Living Hrvatska + RTL Passion Hrvatska + RTL Zwei Deutschland + RTR Planeta + RTVi Europe + Rossiya 24 + Sat. 1 Deutschland + Sat. 1 Gold Deutschland + Senzi + Sixx Deutschland + Slágr Muzika + Slágr Original + Slágr Premium + Sláger TV + Sony Max Hungary + Sony Movie Channel Hungary + Sorozat + + Spektrum Czech + Spektrum Home Czech + Spektrum Home + Spektrum + RTVS Šport + Sport 1 Czechia + Sport 1 Hungary + Sport 2 Czechia + Sport 2 Hungary + Sport 5 + Stingray IConcerts + Stopklatka TV + Story 4 + Super Polsat + Super RTL Deutschland + Super TV 2 + Superyacht TV + TA 3 + Tagesschau 24 + TBN Polska + Telecafé International + TV Seznam + TF 1 + The Fishing & Hunting Channel + TLC Pan Regional + TMC + Travel Channel Europe + Travelxp HD Europe + RTVS 3 + TTV + Tuki TV + Turbo TV + TV 1000 Balkan + TV 2 + TV 2000 + TV 2 Séf + TV3 + TV3CAT + TV 4 + TV 4 + TV 6 + TV 7 + TV Osem + TV Barrandov + TVC + TV Central + TVCG Sat + Televízia Dolný Kubín + TVE Internacional Europa + TV Joj + TV Lux + TVN + TVN 24 + TVN 7 + TV Natura + TV Noe + TV Nova + TVN Turbo + TVP 1 + TVP 2 + TVP ABC + TV Paprika Czech Republic + TV Paprika + TVP HD + TVP Historia + TVP Info + TVP Kultura + TV Povazie + TVP Polonia + TVP Rozrywka + TVP Seriale + TVP Sport + TV Puls + TV Raj + TV Republika + Rik + TV Romana + TVS + TV Severka + TV Slovenija 1 + TV Slovenija 2 + TV TRWAM + TV Vega + TV Východ + UA TV + Ukraïna 24 + Up Network + Viasat Explore + Viasat History + Viasat Nature + VTV 1 + VTV 2 + VTV 3 + VTV 4 + Water Planet + W Polsce PL + Z1 + Zoom + Zoom TV + 3sat + Anixe HD Serie + ARD Alpha + Das Erste + Disney Channel Deutschland + HR Fernsehen + KIKA + Nitro Deutschland + Phoenix + RTL Deutschland + Welt + ZDF + ZDF Info + ZDF Neo + 360 Tune Box + Aljazeera Channel + Aljazeera English + Animal Planet UK + Arirang World + Babes TV + Baby TV Europe + BBC Entertainment Europe + BBC Four + BBC One + BBC Two + BBC World News Europe + Bloomberg TV Europe + Blue Hustler Europe + Boomerang Central & Eastern Europe + Brazzers TV Europe + CBBC + CCTV 4 Europe + CCTV 9 + Club MTV + CNN International Europe + Crime + Investigation UK + Desire TV + Disney Junior + DocuBox HD + Dorcel TV + Dorcel XXX + Dusk + DW Deutsch + E4 UK + Eden + English Club TV + Erox HD + Eroxxx HD + Eurochannel + EuroNews English + EuroNews Magyar + EWTN Europe + Extasy TV + Extreme Sports Channel + FashionTV Europe + FightBox HD + Film 4 + FilmBox Arthouse Worldwide + Food Network EMEA + France 24 English + Fuel TV + Gametoon + Ginx eSports TV International + Hustler HD Europe + Hustler TV Europe + ITV London + ITV 2 + ITV 3 + ITV 4 + KBS World + Lounge TV + More 4 UK + MTV 80s + MTV 90s + MTV Hits Europe + MTV Live + MTV UK + MyZen TV + MyZen TV 4K + NASA TV Public + NASA TV UHD Public + National Geographic HD UK + Nautical Channel + NBA TV + NHK World Japan + Outdoor Channel + Passion XXX + Pick UK + Playboy TV Europe + Reality Kings TV + RTG TV + Sky Arts UK + Sky Atlantic UK + Sky Cinema Action + Sky Cinema Drama + Sky Cinema Family + Sky Cinema Greats + Sky Cinema Hits + Sky Cinema Premiere + Sky Cinema Sci-fi Horror + Sky Cinema Select + Sky Comedy UK + Sky Crime + Sky History 2 + Sky News UK + Sky News International + Sky One UK + Sky Sci-Fi + Sky Sports Cricket + Sky Sports F1 + Sky Sports Football UK + Sky Sports Golf UK + Sky Sports Main Event UK + Sky Sports News UK + Sky Sports Premier League UK + Sky Witness UK + Stars TV + Stingray Classica + Stingray CMusic + Stingray Djazz + SuperOne HD + Trace Sport Stars + True Amateurs + Wild TV + #0 + Canal 24 Horas + CGTN Español + CGTN Français + France 24 Français + France 3 + Mezzo + TV5Monde Europe + Aljazeera Balkans + ATV + Comedy Central Family Hungary + Comedy Central Hungary + La 5 + BVN Europa + 4 Fun Dance + 4 Fun Kids + 4 Fun TV + Adventure + Belarus 24 + Biznes 24 + Cartoon Network Polska + 7D7 + Bober International + Perviy kanal + RTVS 24 + Arcadia TV + Arena Sport 1 + Arena Sport 2 + Chuck TV + CNL Evropa + Life TV + 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 7e01c27a..fadfd686 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 @@ -13,7 +13,7 @@ module.exports = { parser: function ({ buffer, date }) { const programs = [] const items = parseItems(buffer) - items.forEach((item, i) => { + items.forEach(item => { const prev = programs[programs.length - 1] const $item = cheerio.load(item) let start = parseStart($item, date) diff --git a/sites/m.tv.sms.cz/m.tv.sms.cz.test.js b/sites/m.tv.sms.cz/m.tv.sms.cz.test.js index 49426b41..9346a5af 100644 --- a/sites/m.tv.sms.cz/m.tv.sms.cz.test.js +++ b/sites/m.tv.sms.cz/m.tv.sms.cz.test.js @@ -1,4 +1,4 @@ -// npx epg-grabber --config=sites/m.tv.sms.cz/m.tv.sms.cz.config.js --channels=sites/m.tv.sms.cz/m.tv.sms.cz.channels.xml --output=guide.xml +// npm run grab -- --site=m.tv.sms.cz const { parser, url } = require('./m.tv.sms.cz.config.js') const iconv = require('iconv-lite') @@ -34,14 +34,14 @@ it('can parse response', () => { expect(results[0]).toMatchObject({ start: '2023-06-11T03:21:00.000Z', stop: '2023-06-11T04:08:00.000Z', - title: `Conspiraciones al descubierto: La bomba atómica alemana y el hundimiento del Titanic`, + title: 'Conspiraciones al descubierto: La bomba atómica alemana y el hundimiento del Titanic', description: 'Documentales' }) expect(results[25]).toMatchObject({ start: '2023-06-12T02:23:00.000Z', stop: '2023-06-12T03:23:00.000Z', - title: `Rapa I (6)`, + title: 'Rapa I (6)', description: 'Series' }) }) @@ -50,7 +50,7 @@ it('can handle empty guide', () => { const result = parser({ buffer: iconv.encode( Buffer.from( - `` + '' ), 'win1250' ) diff --git a/sites/magentatv.at/magentatv.at.channels.xml b/sites/magentatv.at/magentatv.at.channels.xml index 57afa997..5663918c 100644 --- a/sites/magentatv.at/magentatv.at.channels.xml +++ b/sites/magentatv.at/magentatv.at.channels.xml @@ -1,219 +1,217 @@ - - - 1-2-3.tv - 13th Street HD - 3sat - Al Jazeera - ARD-alpha - ARTE Deutsch - ATV - ATV 2 - Auto Motor und Sport - Baby TV - BBC Entertainment Europe - BBC World News Europe - Bergblick - Bibel TV - Bloomberg - Blue Hustler Europe - Bon Gusto - Boomerang - Cartoon Network - CCTV 4 Europe - CGTN - Club MTV - CNBC - CNN - COMEDY CENTRAL - Crime + Investigation - Das Erste - DELUXE MUSIC - Disney Channel Deutschland - DMAX Austria - Duna TV - E! Europe - eSPORTS1 HD - euronews (D) - Eurosport 1 Germany - - Eurosport Turkey - Evil Angel TV - Extreme Sports Channel - Fashion TV - Film Klub - Fix&Foxi - France 24 (en francais) - GEO TV HD - GoTV - Gute Laune TV - Habertürk - Hayat TV - Heimatkanal - History Germany - HOME & GARDEN TV HD - HR Fernsehen - HRT TV 1 - HSE - HSE Extra - HSE Trend - HT 1 Innviertel - Hustler TV Europe - Kabel Eins Austria - Kabel Eins Classics - Kabel Eins Doku Austria - KIKA - Kinowelt TV HD - Klasik TV - Krone TV - K-TV - Kurier TV - Melodie TV - Motorvision - MTV - MTV 00s - MTV 80s - MTV 90s - MTV Hits Europe - MTV Live HD - N24 Doku - NatGeo HD - National Geographic Wild HD - Nick HD - Nick.Jr. - Nitro Austria - N-TV Austria - Oe24 TV - Okto TV - One - ORF 1 - ORF 2 Burgenland - ORF 2 Europe - ORF 2 Kärnten - ORF 2 NiederÖsterreich - ORF 2 OberÖsterreich - ORF 2 Salzburg - ORF 2 Steiermark - ORF 2 Tirol - ORF 2 Vorarlberg - ORF 2 Wien - ORF III - ORF Sport + - Phoenix - Pink Extra - Pink Film - Pink Music - Pink Plus - ProSieben Austria - ProSieben FUN HD - ProSieben Maxx Austria - Puls 24 - Puls 4 - QVC Deutschland - QVC Style Deutschland - QVC ZWEI - R9 - Rai Due - Rai Tre - Rai Uno - RBB Berlin - RiC - Romance TV - RTL Austria - RTL Crime Deutschland - RTL Living Deutschland - RTL Passion Deutschland - RTL Zwei Austria - RTLup - RTR Planeta - Sat. 1 Gold Österreich - Sat. 1 Österreich - SAT.1 emotions - Servus TV Österreich - Sixx Austria - Sky Atlantic HD - Sky Cinema Action HD - Sky Cinema Best Of HD - Sky Cinema Classics - Sky Cinema Family - Sky Cinema Fun - Sky Cinema Premieren +24 - Sky Cinema Premieren HD - Sky Cinema Special HD - Sky Cinema Thriller HD - Sky Comedy HD - Sky Crime HD - Sky Documentaries HD - Sky Krimi HD - Sky Nature HD - Sky One HD - Sky Replay - Sky Showcase - Sky Sport 1 HD - Sky Sport 10 HD - Sky Sport 11 HD - Sky Sport 12 HD - Sky Sport 13 HD - Sky Sport 14 HD - Sky Sport 2 HD - Sky Sport 3 HD - Sky Sport 4 HD - Sky Sport 5 HD - Sky Sport 6 HD - Sky Sport 7 HD - Sky Sport 8 HD - Sky Sport 9 HD - Sky Sport Austria 1 - Sky Sport Austria 2 - Sky Sport Austria 3 - Sky Sport Austria 4 - Sky Sport Austria 5 - Sky Sport Austria 6 - Sky Sport Austria 7 - Sky Sport Bundesliga 1 HD - Sky Sport Bundesliga 10 HD - Sky Sport Bundesliga 2 HD - Sky Sport Bundesliga 3 HD - Sky Sport Bundesliga 4 HD - Sky Sport Bundesliga 5 HD - Sky Sport Bundesliga 6 HD - Sky Sport Bundesliga 7 HD - Sky Sport Bundesliga 8 HD - Sky Sport Bundesliga 9 HD - Sky Sport F1 HD - Sky Sport Golf - Sky Sport News HD - Sky Sport Premier League - Spiegel Geschichte - Spiegel TV Wissen HD - Sport 1 - Sport 1+ - SPORTDIGITAL FUSSBALL - SR Fernsehen HD - Stingray All Day Party! - Stingray Classic R&B - Stingray Classic Rock - Super RTL Austria - SWR Fernsehen RP - SYFY HD - tagesschau24 HD - Tele 5 - Tirol TV - TLC Austria - Toxic TV - TRT World - TV Polonia - TV5MONDE Europe - Universal TV HD - Vesti - Volksmusik TV - Vox Austria - W24 - Warner TV Comedy HD - Warner TV Serie - WDR Fernsehen Köln - ZDF - ZDF Info - ZDF Neo - - + + + + Film Klub + Hayat TV + 1-2-3.tv + 13th Street HD + 3sat + ARD-alpha + ARTE Deutsch + ATV + ATV 2 + Auto Motor und Sport + Baby TV + Bergblick + Bibel TV + Bon Gusto + Boomerang + Cartoon Network + COMEDY CENTRAL + Crime + Investigation + Das Erste + DELUXE MUSIC + Disney Channel Deutschland + DMAX Austria + E! Europe + eSPORTS1 HD + euronews (D) + Eurosport 1 Germany + Evil Angel TV + Extreme Sports Channel + Fix&Foxi + GEO TV HD + GoTV + Gute Laune TV + Habertürk + Heimatkanal + HOME & GARDEN TV HD + History Germany + HR Fernsehen + HSE + HSE Extra + HSE Trend + HT 1 Innviertel + Kabel Eins Austria + Kabel Eins Doku Austria + Kabel Eins Classics + KIKA + Kinowelt TV HD + Krone TV + K-TV + Kurier TV + Melodie TV + Motorvision + MTV 00s + MTV 80s + MTV + N24 Doku + NatGeo HD + National Geographic Wild HD + Nick.Jr. + Nitro Austria + N-TV Austria + Oe24 TV + Okto TV + One + ORF 1 + ORF 2 Burgenland + ORF 2 Europe + ORF 2 Kärnten + ORF 2 NiederÖsterreich + ORF 2 OberÖsterreich + ORF 2 Salzburg + ORF 2 Steiermark + ORF 2 Tirol + ORF 2 Vorarlberg + ORF 2 Wien + ORF III + ORF Sport + + Phoenix + ProSieben Austria + ProSieben FUN HD + ProSieben Maxx Austria + Puls 24 + Puls 4 + QVC ZWEI + QVC Deutschland + QVC Style Deutschland + R9 + RBB Berlin + RiC + Romance TV + RTL Crime Deutschland + RTL Austria + RTL Living Deutschland + RTL Passion Deutschland + RTLup + RTL Zwei Austria + RTR Planeta + Sat. 1 Österreich + SAT.1 emotions + Sat. 1 Gold Österreich + Servus TV Österreich + Sixx Austria + Sky Atlantic HD + Sky Cinema Action HD + Sky Cinema Best Of HD + Sky Cinema Classics + Sky Cinema Family + Sky Cinema Fun + Sky Cinema Premieren HD + Sky Cinema Premieren +24 + Sky Cinema Special HD + Sky Cinema Thriller HD + Sky Comedy HD + Sky Crime HD + Sky Documentaries HD + Sky Krimi HD + Sky Nature HD + Sky One HD + Sky Replay + Sky Showcase + Sky Sport 10 HD + Sky Sport 11 HD + Sky Sport 12 HD + Sky Sport 13 HD + Sky Sport 14 HD + Sky Sport 1 HD + Sky Sport 2 HD + Sky Sport 3 HD + Sky Sport 4 HD + Sky Sport 5 HD + Sky Sport 6 HD + Sky Sport 7 HD + Sky Sport 8 HD + Sky Sport 9 HD + Sky Sport Austria 1 + Sky Sport Austria 2 + Sky Sport Austria 3 + Sky Sport Austria 4 + Sky Sport Austria 5 + Sky Sport Austria 6 + Sky Sport Austria 7 + Sky Sport Bundesliga 1 HD + Sky Sport Bundesliga 10 HD + Sky Sport Bundesliga 2 HD + Sky Sport Bundesliga 3 HD + Sky Sport Bundesliga 4 HD + Sky Sport Bundesliga 5 HD + Sky Sport Bundesliga 6 HD + Sky Sport Bundesliga 7 HD + Sky Sport Bundesliga 8 HD + Sky Sport Bundesliga 9 HD + Sky Sport F1 HD + Sky Sport Golf + Sky Sport News HD + Sky Sport Premier League + Spiegel Geschichte + Spiegel TV Wissen HD + Sport 1 + Sport 1+ + SPORTDIGITAL FUSSBALL + SR Fernsehen HD + Stingray All Day Party! + Stingray Classic R&B + Stingray Classic Rock + Super RTL Austria + SWR Fernsehen RP + SYFY HD + tagesschau24 HD + Tele 5 + Tirol TV + TLC Austria + Universal TV HD + Volksmusik TV + Vox Austria + W24 + Warner TV Comedy HD + Warner TV Serie + WDR Fernsehen Köln + ZDF + ZDF Info + ZDF Neo + Al Jazeera + BBC Entertainment Europe + BBC World News Europe + Bloomberg + Blue Hustler Europe + CCTV 4 Europe + CGTN + Club MTV + CNBC + CNN + Fashion TV + Hustler TV Europe + MTV 90s + MTV Hits Europe + MTV Live HD + TRT World + France 24 (en francais) + TV5MONDE Europe + HRT TV 1 + Duna TV + Rai Uno + Rai Due + Rai Tre + TV Polonia + Klasik TV + Pink Extra + Pink Film + Pink Music + Pink Plus + Toxic TV + Vesti + Eurosport Turkey + diff --git a/sites/magentatv.at/magentatv.at.config.js b/sites/magentatv.at/magentatv.at.config.js index 6e768fce..71f16b0e 100644 --- a/sites/magentatv.at/magentatv.at.config.js +++ b/sites/magentatv.at/magentatv.at.config.js @@ -21,25 +21,19 @@ module.exports = { if (!items.length) return programs const promises = [ axios.get( - `${API_STATIC_ENDPOINT}/de/events/segments/${date - .add(6, 'h') - .format('YYYYMMDDHHmmss')}`, + `${API_STATIC_ENDPOINT}/de/events/segments/${date.add(6, 'h').format('YYYYMMDDHHmmss')}`, { responseType: 'arraybuffer' } ), axios.get( - `${API_STATIC_ENDPOINT}/de/events/segments/${date - .add(12, 'h') - .format('YYYYMMDDHHmmss')}`, + `${API_STATIC_ENDPOINT}/de/events/segments/${date.add(12, 'h').format('YYYYMMDDHHmmss')}`, { responseType: 'arraybuffer' } ), axios.get( - `${API_STATIC_ENDPOINT}/de/events/segments/${date - .add(18, 'h') - .format('YYYYMMDDHHmmss')}`, + `${API_STATIC_ENDPOINT}/de/events/segments/${date.add(18, 'h').format('YYYYMMDDHHmmss')}`, { responseType: 'arraybuffer' } diff --git a/sites/magentatv.at/magentatv.at.test.js b/sites/magentatv.at/magentatv.at.test.js index 8785663c..de0c538a 100644 --- a/sites/magentatv.at/magentatv.at.test.js +++ b/sites/magentatv.at/magentatv.at.test.js @@ -1,5 +1,5 @@ // npm run channels:parse -- --config=./sites/magentatv.at/magentatv.at.config.js --output=./sites/magentatv.at/magentatv.at.channels.xml -// npx epg-grabber --config=sites/magentatv.at/magentatv.at.config.js --channels=sites/magentatv.at/magentatv.at.channels.xml --output=guide.xml --days=2 +// npm run grab -- --site=magentatv.at const { parser, url } = require('./magentatv.at.config.js') const fs = require('fs') @@ -91,7 +91,7 @@ it('can parse response', async () => { }) it('can handle empty guide', async () => { - let results = await parser({ content: ``, channel, date }) + let results = await parser({ content: '', channel, date }) expect(results).toMatchObject([]) }) diff --git a/sites/magentatv.de/magentatv.de.channels.xml b/sites/magentatv.de/magentatv.de.channels.xml index 1e923afc..17aa69f4 100644 --- a/sites/magentatv.de/magentatv.de.channels.xml +++ b/sites/magentatv.de/magentatv.de.channels.xml @@ -1,263 +1,261 @@ - - - 1-2-3.tv - 13TH STREET - 3sat - ALEX Berlin - allgäu.tv - altenburg.tv - Animal Planet - ANIXE HD Serie - ANIXE+ - ARD-alpha - ARTE - a.tv - auto motor und sport - Baby TV - Baden TV - Baden TV Süd - BBC World - Beate-Uhse.TV (Sky) - beIN iZ - beIN Movies Turk - Bergblick - Bibel TV - BILD - Blue Hustler - BonGusto - Boomerang - BR Fernsehen Nord - BR Fernsehen Süd - Cartoon Network - CEM TV - CHANNEL21 - Chemnitz Fernsehen - Classica (Sky) - CNN International - Comedy Central - Nick/Comedy Central+1 - Crime+Investigation - #dabeiTV - Das Erste - DELUXE MUSIC - Deutsches Musik Fernsehen - Discovery Channel - Disney Channel - DMAX - Dresden Fernsehen - DW - E! Entertainment - ems TV - eSPORTS1 - Euro D - Euronews Deutsch - Euronews Italiano - Euronews Russki - Eurosport 1 - Eurosport 2 - Eurostar TV - Extreme Sports - Fashion TV - FC BAYERN.TV LIVE - France 24 francais - Franken Fernsehen - Friesischer Rundfunk - GEO Television - Habertürk TV - Hamburg 1 - HAUPTSTADT.TV - Heimatkanal - HGTV - The HISTORY Channel - hr-fernsehen - HSE - iTVN - Jukebox - Junior (Sky) - Juwelo - Kabel Eins CLASSICS - Kabel Eins - Kabel Eins Doku - Kanal 7 - KiKA - KinoweltTV - K-TV - LAUSITZWELLE - Leipzig Fernsehen - L-TV - Lust pur - MagentaSport - Marco Polo TV - MDF.1 Fernsehen - MDR-Fernsehen Sachsen - MDR-Fernsehen Sachsen-Anhalt - MDR-Fernsehen Thüringen - More Than Sports TV - MOTORVISION.TV - MTV - münchen.tv - N24 Doku - Kinomir - National Geographic - National Geographic Wild - NDR Fernsehen Hamburg - NDR Fernsehen Mecklenburg-Vorpommern - NDR Fernsehen Niedersachsen - NDR Fernsehen Schleswig-Holstein - Nick Jr. - Nicktoons (Sky) - NIEDERBAYERN TV - DEG - NIEDERBAYERN TV - LA - NIEDERBAYERN TV - PA - NITRO - nrwision - n-tv - Oberpfalz TV - OF-TV - OK4 - OK54 Trier - OK-TV Ludwigshafen - OK:TV Mainz - OK Weinstraße - ONE - OstWest - Penthouse Passion - phoenix - Playboy Europe - ProSieben - ProSieben FUN - ProSieben MAXX - QVC - Radio Bremen TV - Rai 1 - Rai 2 - Rai 3 - rbb fernsehen Berlin - rbb fernsehen Brandenburg - Red Bull TV - Rennsteig.TV - RFH Regionalfernsehen Harz - RFO - Rhein-Main TV - RNF - Romance TV - RTL Crime - RTL - RTL Hessen - RTL Living - RTL HH SH - RTL HB NDS - RTL Passion - RTLup - RTL NRW - RTLZWEI - RTR Planeta - salve.tv - SAT.1 Bayern - SAT.1 - SAT.1 emotions - SAT.1 GOLD - SAT.1 HH SH - SAT.1 NDS Bremen - SAT.1 NRW - SAT.1 RhlPf Hessen - ServusTV - Shop LC - Show Max - Show Turk - sixx - SkyAtlantic - Sky Cinema Action - Sky Cinema Best of - Sky Cinema Classics - Sky Cinema Family - Sky Cinema Fun - Sky Cinema Mittelerde - Sky Cinema Premieren - Sky Cinema Premieren +24 - Sky Cinema Thriller - Sky Comedy - Sky Crime - Sky Documentaries - SkyKrimi - Sky Nature - Sky One - Sky Sport 1 - Sky Sport 10 - Sky Sport 11 - Sky Sport 2 - Sky Sport 3 - Sky Sport 4 - Sky Sport 5 - Sky Sport 6 - Sky Sport 7 - Sky Sport 8 - Sky Sport 9 - Sky Sport Bundesliga 1 - Sky Sport Bundesliga 10 - Sky Sport Bundesliga 2 - Sky Sport Bundesliga 3 - Sky Sport Bundesliga 4 - Sky Sport Bundesliga 5 - Sky Sport Bundesliga 6 - Sky Sport Bundesliga 7 - Sky Sport Bundesliga 8 - Sky Sport Bundesliga 9 - Sky Sport F1 - Sky Sport News - sonnenklar.TV - SONY AXN - SONY CHANNEL - Spiegel Geschichte - Spiegel TV Wissen - SPORT1 - SPORT1+ - SPORTDIGITAL FUSSBALL - SR Fernsehen - Studio 47 - Super RTL - SWR Fernsehen BW - SWR Fernsehen RP - SYFY - tagesschau24 - TELE 5 - TeleBom/TeleDom - TLC - TOGGO plus - TV8 Int - TVA Ostbayern - tv.berlin - tv.ingolstadt - TV Mainfranken - TV Mittelrhein - TV Oberfranken - TV Polonia - TV Westsachsen - ÜLKE TV - Universal TV - VOX - VOXup - Warner TV Comedy - Warner TV Film - Warner TV Serie - WDR Fernsehen Aachen - WDR Fernsehen Bielefeld - WDR Fernsehen Bonn - WDR Fernsehen Dortmund - WDR Fernsehen Duisburg - WDR Fernsehen Düsseldorf - WDR Fernsehen Essen - WDR Fernsehen Köln - WDR Fernsehen Münster - WDR Fernsehen Siegen - WDR Fernsehen Wuppertal - WELT - Welt der Wunder - wetter.com TV - WWTV - ZDF - ZDFinfo - ZDFneo - - + + 1-2-3.tv + 13TH STREET + SAT.1 Bayern + SAT.1 RhlPf Hessen + SAT.1 HH SH + SAT.1 NDS Bremen + 3sat + ALEX Berlin + allgäu.tv + altenburg.tv + Animal Planet + ANIXE HD Serie + ANIXE+ + ARD-alpha + ARTE + a.tv + auto motor und sport + Baby TV + Baden TV + Baden TV Süd + BBC World + Beate-Uhse.TV (Sky) + beIN iZ + beIN Movies Turk + Bergblick + Bibel TV + BILD + Blue Hustler + BonGusto + Boomerang + BR Fernsehen Nord + BR Fernsehen Süd + Cartoon Network + CEM TV + CHANNEL21 + Classica (Sky) + CNN International + Comedy Central + Nick/Comedy Central+1 + Crime+Investigation + #dabeiTV + Das Erste + DELUXE MUSIC + Deutsches Musik Fernsehen + Discovery Channel + Disney Channel + DMAX + DW + E! Entertainment + ems TV + eSPORTS1 + Euro D + Euronews Deutsch + Euronews Italiano + Euronews Russki + Eurosport 1 + Eurosport 2 + Eurostar TV + Extreme Sports + Fashion TV + FC BAYERN.TV LIVE + France 24 francais + Franken Fernsehen + Friesischer Rundfunk + GEO Television + Habertürk TV + Hamburg 1 + HAUPTSTADT.TV + Heimatkanal + HGTV + The HISTORY Channel + hr-fernsehen + HSE + iTVN + Jukebox + Junior (Sky) + Juwelo + Kabel Eins + Kabel Eins CLASSICS + Kabel Eins Doku + Kanal 7 + KiKA + KinoweltTV + K-TV + LAUSITZWELLE + L-TV + Lust pur + MagentaSport + Marco Polo TV + MDF.1 Fernsehen + MDR-Fernsehen Sachsen + MDR-Fernsehen Sachsen-Anhalt + MDR-Fernsehen Thüringen + More Than Sports TV + MOTORVISION.TV + MTV + münchen.tv + N24 Doku + Kinomir + National Geographic + National Geographic Wild + NDR Fernsehen Hamburg + NDR Fernsehen Mecklenburg-Vorpommern + NDR Fernsehen Niedersachsen + NDR Fernsehen Schleswig-Holstein + Nick Jr. + Nicktoons (Sky) + NIEDERBAYERN TV - DEG + NIEDERBAYERN TV - LA + NIEDERBAYERN TV - PA + NITRO + nrwision + n-tv + Oberpfalz TV + OF-TV + OK4 + OK54 Trier + OK-TV Ludwigshafen + OK:TV Mainz + OK Weinstraße + ONE + OstWest + Penthouse Passion + phoenix + Playboy Europe + ProSieben + ProSieben FUN + ProSieben MAXX + QVC + Radio Bremen TV + Rai 1 + Rai 2 + Rai 3 + rbb fernsehen Berlin + rbb fernsehen Brandenburg + Red Bull TV + Rennsteig.TV + RFH Regionalfernsehen Harz + RFO + Rhein-Main TV + RNF + Romance TV + RTL Crime + RTL + RTL Hessen + RTL Living + RTL HH SH + RTL HB NDS + RTL Passion + RTLup + RTL NRW + RTLZWEI + RTR Planeta + Chemnitz Fernsehen + Dresden Fernsehen + Leipzig Fernsehen + salve.tv + SAT.1 + SAT.1 emotions + SAT.1 GOLD + SAT.1 NRW + ServusTV + Shop LC + Show Max + Show Turk + sixx + SkyAtlantic + Sky Cinema Action + Sky Cinema Best of + Sky Cinema Classics + Sky Cinema Family + Sky Cinema Fun + Sky Cinema Mittelerde + Sky Cinema Premieren + Sky Cinema Premieren +24 + Sky Cinema Thriller + Sky Comedy + Sky Crime + Sky Documentaries + SkyKrimi + Sky Nature + Sky One + Sky Sport 10 + Sky Sport 11 + Sky Sport 1 + Sky Sport 2 + Sky Sport 3 + Sky Sport 4 + Sky Sport 5 + Sky Sport 6 + Sky Sport 7 + Sky Sport 8 + Sky Sport 9 + Sky Sport Bundesliga 1 + Sky Sport Bundesliga 10 + Sky Sport Bundesliga 2 + Sky Sport Bundesliga 3 + Sky Sport Bundesliga 4 + Sky Sport Bundesliga 5 + Sky Sport Bundesliga 6 + Sky Sport Bundesliga 7 + Sky Sport Bundesliga 8 + Sky Sport Bundesliga 9 + Sky Sport F1 + Sky Sport News + sonnenklar.TV + SONY AXN + SONY CHANNEL + Spiegel Geschichte + Spiegel TV Wissen + SPORT1 + SPORT1+ + SPORTDIGITAL FUSSBALL + SR Fernsehen + Studio 47 + Super RTL + SWR Fernsehen BW + SWR Fernsehen RP + SYFY + tagesschau24 + TELE 5 + TeleBom/TeleDom + TLC + TOGGO plus + TV8 Int + TVA Ostbayern + tv.berlin + tv.ingolstadt + TV Mainfranken + TV Mittelrhein + TV Oberfranken + TV Polonia + TV Westsachsen + ÜLKE TV + Universal TV + VOX + VOXup + Warner TV Comedy + Warner TV Film + Warner TV Serie + WDR Fernsehen Aachen + WDR Fernsehen Bielefeld + WDR Fernsehen Bonn + WDR Fernsehen Dortmund + WDR Fernsehen Duisburg + WDR Fernsehen Düsseldorf + WDR Fernsehen Essen + WDR Fernsehen Köln + WDR Fernsehen Münster + WDR Fernsehen Siegen + WDR Fernsehen Wuppertal + WELT + Welt der Wunder + wetter.com TV + WWTV + ZDF + ZDFinfo + ZDFneo + diff --git a/sites/magentatv.de/magentatv.de.config.js b/sites/magentatv.de/magentatv.de.config.js index ce6ffab1..4edefacc 100644 --- a/sites/magentatv.de/magentatv.de.config.js +++ b/sites/magentatv.de/magentatv.de.config.js @@ -8,8 +8,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`, + url: 'https://api.prod.sngtv.magentatv.de/EPG/JSON/PlayBillList', request: { method: 'POST', headers: { @@ -54,7 +53,7 @@ module.exports = { async channels() { const data = await axios .post( - `https://api.prod.sngtv.magentatv.de/EPG/JSON/AllChannel`, + 'https://api.prod.sngtv.magentatv.de/EPG/JSON/AllChannel', { channelNamespace: 2, filterlist: [ diff --git a/sites/magentatv.de/magentatv.de.test.js b/sites/magentatv.de/magentatv.de.test.js index 430577a2..42a30a11 100644 --- a/sites/magentatv.de/magentatv.de.test.js +++ b/sites/magentatv.de/magentatv.de.test.js @@ -1,5 +1,5 @@ // npm run channels:parse -- --config=./sites/magentatv.de/magentatv.de.config.js --output=./sites/magentatv.de/magentatv.de.channels.xml -// npx epg-grabber --config=sites/magentatv.de/magentatv.de.config.js --channels=sites/magentatv.de/magentatv.de.channels.xml --output=guide.xml --days=2 +// npm run grab -- --site=magentatv.de const { parser, url, request } = require('./magentatv.de.config.js') const dayjs = require('dayjs') @@ -50,7 +50,8 @@ it('can generate valid request data', () => { }) it('can parse response', () => { - const content = `{"playbilllist":[{"id":"30021745","name":"FBI: Special Crime Unit","introduce":"Nachdem ein Mann von einem Sprengstoffpaket getötet wurde, das zu ihm nach Hause geschickt wurde, versucht das Team, den Absender zu fassen und sein neuestes tödliches Paket abzufangen. Maggie hat Mühe, ihrer jüngeren Schwester zu vertrauen.","channelid":"255","starttime":"2022-03-09 01:00:00 UTC+01:00","endtime":"2022-03-09 01:45:00 UTC+01:00","genres":"Wissen,Natur und Tiere","pictures":[{"rel":"image","href":"http://ngiss.t-online.de/sweetprogrammanager/media/gracenote/1/9/p19740197_e_h9_af.jpg","description":"Brother's Keeper","imageType":"1","copyrightNotice":"(c) ProSiebenSat.1","mimeType":"image/jpeg","resolution":["1440","1080"]},{"rel":"image","href":"http://ngiss.t-online.de/sweetprogrammanager/media/gracenote/1/5/p15528073_i_h9_ae.jpg","description":"FBI","imageType":"13","copyrightNotice":"(c) ProSiebenSat.1","mimeType":"image/jpeg","resolution":["1440","1080"]},{"rel":"image","href":"http://ngiss.t-online.de/sweetprogrammanager/media/gracenote/1/9/p19740197_e_h8_af.jpg","description":"Brother's Keeper","imageType":"17","copyrightNotice":"(c) ProSiebenSat.1","mimeType":"image/jpeg","resolution":["1920","1080"]},{"rel":"image","href":"http://ngiss.t-online.de/sweetprogrammanager/media/gracenote/1/5/p15528073_i_h10_af.jpg","description":"FBI","imageType":"18","copyrightNotice":"(c) ProSiebenSat.1","mimeType":"image/jpeg","resolution":["1920","1080"]}]}]}` + const content = + '{"playbilllist":[{"id":"30021745","name":"FBI: Special Crime Unit","introduce":"Nachdem ein Mann von einem Sprengstoffpaket getötet wurde, das zu ihm nach Hause geschickt wurde, versucht das Team, den Absender zu fassen und sein neuestes tödliches Paket abzufangen. Maggie hat Mühe, ihrer jüngeren Schwester zu vertrauen.","channelid":"255","starttime":"2022-03-09 01:00:00 UTC+01:00","endtime":"2022-03-09 01:45:00 UTC+01:00","genres":"Wissen,Natur und Tiere","pictures":[{"rel":"image","href":"http://ngiss.t-online.de/sweetprogrammanager/media/gracenote/1/9/p19740197_e_h9_af.jpg","description":"Brother\'s Keeper","imageType":"1","copyrightNotice":"(c) ProSiebenSat.1","mimeType":"image/jpeg","resolution":["1440","1080"]},{"rel":"image","href":"http://ngiss.t-online.de/sweetprogrammanager/media/gracenote/1/5/p15528073_i_h9_ae.jpg","description":"FBI","imageType":"13","copyrightNotice":"(c) ProSiebenSat.1","mimeType":"image/jpeg","resolution":["1440","1080"]},{"rel":"image","href":"http://ngiss.t-online.de/sweetprogrammanager/media/gracenote/1/9/p19740197_e_h8_af.jpg","description":"Brother\'s Keeper","imageType":"17","copyrightNotice":"(c) ProSiebenSat.1","mimeType":"image/jpeg","resolution":["1920","1080"]},{"rel":"image","href":"http://ngiss.t-online.de/sweetprogrammanager/media/gracenote/1/5/p15528073_i_h10_af.jpg","description":"FBI","imageType":"18","copyrightNotice":"(c) ProSiebenSat.1","mimeType":"image/jpeg","resolution":["1920","1080"]}]}]}' const result = parser({ content }).map(p => { p.start = p.start.toJSON() p.stop = p.stop.toJSON() @@ -72,7 +73,7 @@ it('can parse response', () => { it('can handle empty guide', () => { const result = parser({ - content: `{"counttotal":"0"}` + content: '{"counttotal":"0"}' }) expect(result).toMatchObject([]) }) diff --git a/sites/magticom.ge/magticom.ge.channels.xml b/sites/magticom.ge/magticom.ge.channels.xml index 1cfeb586..56b55df4 100644 --- a/sites/magticom.ge/magticom.ge.channels.xml +++ b/sites/magticom.ge/magticom.ge.channels.xml @@ -1,119 +1,117 @@ - - - 360 Tune Box - BBC World News Europe - CNBC Europe - CNN International Europe - Erox HD - FashionBox HD - France 24 English - MTV 80s - MTV Russia - RT News - 2 TV - Adjarasport 1 - Adjarasport 2 - Ajara TV - Brazzers TV Europe - Chveni Magti - Comedy TV - Dardimandi - Enki Benki - Ertsulovneba - 1 TV - Formula - GDS TV - Gurjaani TV - Imedi TV - Kavkasia TV - Maestro - Magti Hiti - Magti Kino - Marao TV - Mtavari Arkhi - Obieqtivi TV - Palitra News - Pos TV - Qartuli Arkhi - Quality Channel - Redlight HD - Rioni TV - Rugby TV - Rustavi 2 - Saperavi TV HD - Setanta Sports Georgia - Setanta Sports + Georgia - Silk Universal - TV 25 - TV Pirveli - A1 - A2 - Amedia Hit - Amedia Premium - Armenia 1 TV - Avto 24 - Az TV - Bollywood TV Rossiya - Cartoon Network Russia & South East Europe - Cinéma - STS International - Nastoyashcheye Vremya - Da Vinci - Discovery Science Rossiya - DocuBox HD - Domashniy - Dom Kino - Dom Kino Premium - DTX Rossiya - Duck TV SD - EuroNews Russkiy - Evrokino - Fast & FunBox HD - FightBox HD - FilmBox Arthouse Worldwide - FilmBox Russia - Fox Russia - Pyatnitsa! International - Gulli Girl - Hollywood HD - Illusion + - Investigation Discovery Rossiya - Istoriya - Karusel International - Mezzo - Moya Planeta - Mult - National Geographic Russia - National Geographic Wild Russia - Nauka - Nickelodeon CIS - Nick Jr CIS - NST - Telekanal O! - Ohotnik i Rybolov - Paramount Channel Russia - Paramount Comedy Russia - Peretz International - RBK TV - RTR Planeta - RTVi Europe - Rossiya 24 - Rossiya K - Russkiy Illusion - Sarafan - Tiji Russia - TNT Music - TV 1000 Action - TV 1000 East - TV 1000 Russkoe Kino - TV XXI - Viasat Explore East - Viasat History - Viasat Nature East - Viasat Sport East - Zagorodny International - Zhivaya Planeta - - - \ No newline at end of file + + + 360 Tune Box + BBC World News Europe + CNBC Europe + CNN International Europe + Erox HD + FashionBox HD + France 24 English + MTV 80s + MTV Russia + RT News + 1 TV + 2 TV + Adjarasport 1 + Adjarasport 2 + Ajara TV + Brazzers TV Europe + Chveni Magti + Comedy TV + Dardimandi + Enki Benki + Ertsulovneba + Formula + GDS TV + Gurjaani TV + Imedi TV + Kavkasia TV + Maestro + Magti Hiti + Magti Kino + Marao TV + Mtavari Arkhi + Obieqtivi TV + Palitra News + Pos TV + Qartuli Arkhi + Quality Channel + Redlight HD + Rioni TV + Rugby TV + Rustavi 2 + Saperavi TV HD + Setanta Sports Georgia + Setanta Sports + Georgia + Silk Universal + TV 25 + TV Pirveli + A1 + A2 + Amedia Hit + Amedia Premium + Armenia 1 TV + Avto 24 + Az TV + Bollywood TV Rossiya + Cartoon Network Russia & South East Europe + Cinéma + STS International + Nastoyashcheye Vremya + Da Vinci + Discovery Science Rossiya + DocuBox HD + Domashniy + Dom Kino + Dom Kino Premium + DTX Rossiya + Duck TV SD + EuroNews Russkiy + Evrokino + Fast & FunBox HD + FightBox HD + FilmBox Arthouse Worldwide + FilmBox Russia + Fox Russia + Pyatnitsa! International + Gulli Girl + Hollywood HD + Illusion + + Investigation Discovery Rossiya + Istoriya + Karusel International + Mezzo + Moya Planeta + Mult + National Geographic Russia + National Geographic Wild Russia + Nauka + Nickelodeon CIS + Nick Jr CIS + NST + Telekanal O! + Ohotnik i Rybolov + Paramount Channel Russia + Paramount Comedy Russia + Peretz International + RBK TV + RTR Planeta + RTVi Europe + Rossiya 24 + Rossiya K + Russkiy Illusion + Sarafan + Tiji Russia + TNT Music + TV 1000 Action + TV 1000 East + TV 1000 Russkoe Kino + TV XXI + Viasat Explore East + Viasat History + Viasat Nature East + Viasat Sport East + Zagorodny International + Zhivaya Planeta + \ No newline at end of file diff --git a/sites/magticom.ge/magticom.ge.config.js b/sites/magticom.ge/magticom.ge.config.js index 661f54e9..61044471 100644 --- a/sites/magticom.ge/magticom.ge.config.js +++ b/sites/magticom.ge/magticom.ge.config.js @@ -42,9 +42,9 @@ module.exports = { return programs }, - async channels({ country, lang }) { + async channels() { const html = await axios - .get(`https://www.magticom.ge/en/tv/tv-services/tv-guide`) + .get('https://www.magticom.ge/en/tv/tv-services/tv-guide') .then(r => r.data) .catch(console.log) @@ -77,7 +77,9 @@ function parseItems(content) { let data try { data = JSON.parse(content) - } catch (err) {} + } catch (error) { + console.log(error.message) + } if (!data || !Array.isArray(data)) return [] return data diff --git a/sites/magticom.ge/magticom.ge.test.js b/sites/magticom.ge/magticom.ge.test.js index bdcf4a8d..9282ebde 100644 --- a/sites/magticom.ge/magticom.ge.test.js +++ b/sites/magticom.ge/magticom.ge.test.js @@ -1,5 +1,5 @@ -// node ./scripts/channels.js --config=./sites/magticom.ge/magticom.ge.config.js --output=./sites/magticom.ge/magticom.ge.channels.xml -// npx epg-grabber --config=sites/magticom.ge/magticom.ge.config.js --channels=sites/magticom.ge/magticom.ge.channels.xml --output=guide.xml --days=2 +// npm run channels:parse -- --config=./sites/magticom.ge/magticom.ge.config.js --output=./sites/magticom.ge/magticom.ge.channels.xml +// npm run grab -- --site=magticom.ge const { parser, url, request } = require('./magticom.ge.config.js') const dayjs = require('dayjs') @@ -37,7 +37,8 @@ it('can generate valid request data', () => { }) it('can parse response', () => { - const content = `[{\"id\":2313254118,\"channelId\":260,\"startTimestamp\":\"2021-11-22T07:00:00\",\"endTimestamp\":\"2021-11-22T09:00:00\",\"duration\":null,\"title\":\"\\u0425\\\/\\u0444 \\\"\\u041d\\u0435\\u0440\\u0430\\u0432\\u043d\\u044b\\u0439 \\u0431\\u0440\\u0430\\u043a\\\".\",\"subTitle\":\"\\u0425\\\/\\u0444 \\\"\\u041d\\u0435\\u0440\\u0430\\u0432\\u043d\\u044b\\u0439 \\u0431\\u0440\\u0430\\u043a\\\".\",\"info\":\"\\u0413\\u0443\\u0434\\u0436\\u0430\\u0440\\u0430\\u0442\\u0435\\u0446 \\u0425\\u0430\\u0441\\u043c\\u0443\\u043a\\u0445 \\u041f\\u0430\\u0442\\u0435\\u043b \\u043f\\u043e\\u0441\\u0441\\u043e\\u0440\\u0438\\u043b\\u0441\\u044f \\u0441 \\u043d\\u043e\\u0432\\u044b\\u043c \\u0441\\u043e\\u0441\\u0435\\u0434\\u043e\\u043c \\u0413\\u0443\\u0433\\u0433\\u0438 \\u0422\\u0430\\u043d\\u0434\\u043e\\u043d\\u043e\\u043c. \\u041d\\u043e \\u0438\\u043c \\u043f\\u0440\\u0438\\u0445\\u043e\\u0434\\u0438\\u0442\\u0441\\u044f \\u043f\\u043e\\u043c\\u0438\\u0440\\u0438\\u0442\\u044c\\u0441\\u044f, \\u043a\\u043e\\u0433\\u0434\\u0430 \\u0438\\u0445 \\u0434\\u0435\\u0442\\u0438 \\u0432\\u043b\\u044e\\u0431\\u043b\\u044f\\u044e\\u0442\\u0441\\u044f \\u0434\\u0440\\u0443\\u0433 \\u0432 \\u0434\\u0440\\u0443\\u0433\\u0430. \\u0420\\u0435\\u0436\\u0438\\u0441\\u0441\\u0435\\u0440: \\u0421\\u0430\\u043d\\u0434\\u0436\\u0430\\u0439 \\u0427\\u0445\\u0435\\u043b. \\u0410\\u043a\\u0442\\u0435\\u0440\\u044b: \\u0420\\u0438\\u0448\\u0438 \\u041a\\u0430\\u043f\\u0443\\u0440, \\u041f\\u0430\\u0440\\u0435\\u0448 \\u0420\\u0430\\u0432\\u0430\\u043b, \\u0412\\u0438\\u0440 \\u0414\\u0430\\u0441. 2017 \\u0433\\u043e\\u0434.\",\"pg\":null,\"year\":null,\"country\":null,\"imageUrl\":null,\"createdBy\":-200,\"creationTimestamp\":\"2021-11-21T18:04:52\",\"epgSourceId\":8,\"startDateStr\":\"20211122070000\",\"genreByGenreId\":null,\"languageByLanguageId\":{\"id\":3,\"name\":\"\\u10e0\\u10e3\\u10e1\\u10e3\\u10da\\u10d8\",\"orderIndex\":3,\"nameShort\":\"ru\"},\"externalId\":\"2021460000084132\",\"programHumanById\":[],\"date\":null,\"time\":null,\"startDate\":null,\"endDate\":null,\"longInfo\":\"\\u0413\\u0443\\u0434\\u0436\\u0430\\u0440\\u0430\\u0442\\u0435\\u0446 \\u0425\\u0430\\u0441\\u043c\\u0443\\u043a\\u0445 \\u041f\\u0430\\u0442\\u0435\\u043b \\u043f\\u043e\\u0441\\u0441\\u043e\\u0440\\u0438\\u043b\\u0441\\u044f \\u0441 \\u043d\\u043e\\u0432\\u044b\\u043c \\u0441\\u043e\\u0441\\u0435\\u0434\\u043e\\u043c \\u0413\\u0443\\u0433\\u0433\\u0438 \\u0422\\u0430\\u043d\\u0434\\u043e\\u043d\\u043e\\u043c. \\u041d\\u043e \\u0438\\u043c \\u043f\\u0440\\u0438\\u0445\\u043e\\u0434\\u0438\\u0442\\u0441\\u044f \\u043f\\u043e\\u043c\\u0438\\u0440\\u0438\\u0442\\u044c\\u0441\\u044f, \\u043a\\u043e\\u0433\\u0434\\u0430 \\u0438\\u0445 \\u0434\\u0435\\u0442\\u0438 \\u0432\\u043b\\u044e\\u0431\\u043b\\u044f\\u044e\\u0442\\u0441\\u044f \\u0434\\u0440\\u0443\\u0433 \\u0432 \\u0434\\u0440\\u0443\\u0433\\u0430. \\u0420\\u0435\\u0436\\u0438\\u0441\\u0441\\u0435\\u0440: \\u0421\\u0430\\u043d\\u0434\\u0436\\u0430\\u0439 \\u0427\\u0445\\u0435\\u043b. \\u0410\\u043a\\u0442\\u0435\\u0440\\u044b: \\u0420\\u0438\\u0448\\u0438 \\u041a\\u0430\\u043f\\u0443\\u0440, \\u041f\\u0430\\u0440\\u0435\\u0448 \\u0420\\u0430\\u0432\\u0430\\u043b, \\u0412\\u0438\\u0440 \\u0414\\u0430\\u0441. 2017 \\u0433\\u043e\\u0434.\"}]` + const content = + '[{"id":2313254118,"channelId":260,"startTimestamp":"2021-11-22T07:00:00","endTimestamp":"2021-11-22T09:00:00","duration":null,"title":"\\u0425\\/\\u0444 \\"\\u041d\\u0435\\u0440\\u0430\\u0432\\u043d\\u044b\\u0439 \\u0431\\u0440\\u0430\\u043a\\".","subTitle":"\\u0425\\/\\u0444 \\"\\u041d\\u0435\\u0440\\u0430\\u0432\\u043d\\u044b\\u0439 \\u0431\\u0440\\u0430\\u043a\\".","info":"\\u0413\\u0443\\u0434\\u0436\\u0430\\u0440\\u0430\\u0442\\u0435\\u0446 \\u0425\\u0430\\u0441\\u043c\\u0443\\u043a\\u0445 \\u041f\\u0430\\u0442\\u0435\\u043b \\u043f\\u043e\\u0441\\u0441\\u043e\\u0440\\u0438\\u043b\\u0441\\u044f \\u0441 \\u043d\\u043e\\u0432\\u044b\\u043c \\u0441\\u043e\\u0441\\u0435\\u0434\\u043e\\u043c \\u0413\\u0443\\u0433\\u0433\\u0438 \\u0422\\u0430\\u043d\\u0434\\u043e\\u043d\\u043e\\u043c. \\u041d\\u043e \\u0438\\u043c \\u043f\\u0440\\u0438\\u0445\\u043e\\u0434\\u0438\\u0442\\u0441\\u044f \\u043f\\u043e\\u043c\\u0438\\u0440\\u0438\\u0442\\u044c\\u0441\\u044f, \\u043a\\u043e\\u0433\\u0434\\u0430 \\u0438\\u0445 \\u0434\\u0435\\u0442\\u0438 \\u0432\\u043b\\u044e\\u0431\\u043b\\u044f\\u044e\\u0442\\u0441\\u044f \\u0434\\u0440\\u0443\\u0433 \\u0432 \\u0434\\u0440\\u0443\\u0433\\u0430. \\u0420\\u0435\\u0436\\u0438\\u0441\\u0441\\u0435\\u0440: \\u0421\\u0430\\u043d\\u0434\\u0436\\u0430\\u0439 \\u0427\\u0445\\u0435\\u043b. \\u0410\\u043a\\u0442\\u0435\\u0440\\u044b: \\u0420\\u0438\\u0448\\u0438 \\u041a\\u0430\\u043f\\u0443\\u0440, \\u041f\\u0430\\u0440\\u0435\\u0448 \\u0420\\u0430\\u0432\\u0430\\u043b, \\u0412\\u0438\\u0440 \\u0414\\u0430\\u0441. 2017 \\u0433\\u043e\\u0434.","pg":null,"year":null,"country":null,"imageUrl":null,"createdBy":-200,"creationTimestamp":"2021-11-21T18:04:52","epgSourceId":8,"startDateStr":"20211122070000","genreByGenreId":null,"languageByLanguageId":{"id":3,"name":"\\u10e0\\u10e3\\u10e1\\u10e3\\u10da\\u10d8","orderIndex":3,"nameShort":"ru"},"externalId":"2021460000084132","programHumanById":[],"date":null,"time":null,"startDate":null,"endDate":null,"longInfo":"\\u0413\\u0443\\u0434\\u0436\\u0430\\u0440\\u0430\\u0442\\u0435\\u0446 \\u0425\\u0430\\u0441\\u043c\\u0443\\u043a\\u0445 \\u041f\\u0430\\u0442\\u0435\\u043b \\u043f\\u043e\\u0441\\u0441\\u043e\\u0440\\u0438\\u043b\\u0441\\u044f \\u0441 \\u043d\\u043e\\u0432\\u044b\\u043c \\u0441\\u043e\\u0441\\u0435\\u0434\\u043e\\u043c \\u0413\\u0443\\u0433\\u0433\\u0438 \\u0422\\u0430\\u043d\\u0434\\u043e\\u043d\\u043e\\u043c. \\u041d\\u043e \\u0438\\u043c \\u043f\\u0440\\u0438\\u0445\\u043e\\u0434\\u0438\\u0442\\u0441\\u044f \\u043f\\u043e\\u043c\\u0438\\u0440\\u0438\\u0442\\u044c\\u0441\\u044f, \\u043a\\u043e\\u0433\\u0434\\u0430 \\u0438\\u0445 \\u0434\\u0435\\u0442\\u0438 \\u0432\\u043b\\u044e\\u0431\\u043b\\u044f\\u044e\\u0442\\u0441\\u044f \\u0434\\u0440\\u0443\\u0433 \\u0432 \\u0434\\u0440\\u0443\\u0433\\u0430. \\u0420\\u0435\\u0436\\u0438\\u0441\\u0441\\u0435\\u0440: \\u0421\\u0430\\u043d\\u0434\\u0436\\u0430\\u0439 \\u0427\\u0445\\u0435\\u043b. \\u0410\\u043a\\u0442\\u0435\\u0440\\u044b: \\u0420\\u0438\\u0448\\u0438 \\u041a\\u0430\\u043f\\u0443\\u0440, \\u041f\\u0430\\u0440\\u0435\\u0448 \\u0420\\u0430\\u0432\\u0430\\u043b, \\u0412\\u0438\\u0440 \\u0414\\u0430\\u0441. 2017 \\u0433\\u043e\\u0434."}]' const result = parser({ content }).map(p => { p.start = p.start.toJSON() p.stop = p.stop.toJSON() @@ -48,8 +49,9 @@ it('can parse response', () => { { start: '2021-11-22T03:00:00.000Z', stop: '2021-11-22T05:00:00.000Z', - title: `Х/ф "Неравный брак".`, - description: `Гуджаратец Хасмукх Пател поссорился с новым соседом Гугги Тандоном. Но им приходится помириться, когда их дети влюбляются друг в друга. Режиссер: Санджай Чхел. Актеры: Риши Капур, Пареш Равал, Вир Дас. 2017 год.` + title: 'Х/ф "Неравный брак".', + description: + 'Гуджаратец Хасмукх Пател поссорился с новым соседом Гугги Тандоном. Но им приходится помириться, когда их дети влюбляются друг в друга. Режиссер: Санджай Чхел. Актеры: Риши Капур, Пареш Равал, Вир Дас. 2017 год.' } ]) }) @@ -58,7 +60,7 @@ it('can handle empty guide', () => { const result = parser({ date, channel, - content: `[]` + content: '[]' }) expect(result).toMatchObject([]) }) diff --git a/sites/mako.co.il/mako.co.il.channels.xml b/sites/mako.co.il/mako.co.il.channels.xml index fa1ac649..c64de9ca 100644 --- a/sites/mako.co.il/mako.co.il.channels.xml +++ b/sites/mako.co.il/mako.co.il.channels.xml @@ -1,6 +1,4 @@ - - - Keshet 12 - - + + Keshet 12 + diff --git a/sites/mako.co.il/mako.co.il.config.js b/sites/mako.co.il/mako.co.il.config.js index a0ee67ae..0466dfb6 100644 --- a/sites/mako.co.il/mako.co.il.config.js +++ b/sites/mako.co.il/mako.co.il.config.js @@ -36,12 +36,6 @@ function parseStart(item) { return dayjs(item.StartTimeUTC) } -function parseStop(item) { - if (!item.end_time) return null - - return dayjs.tz(item.end_time, 'YYYY-MM-DDTHH:mm:ss', 'Asia/Jerusalem') -} - function parseItems(content, date) { const data = JSON.parse(content) if (!data || !Array.isArray(data.programs)) return [] diff --git a/sites/mako.co.il/mako.co.il.test.js b/sites/mako.co.il/mako.co.il.test.js index 990cf29b..da82beca 100644 --- a/sites/mako.co.il/mako.co.il.test.js +++ b/sites/mako.co.il/mako.co.il.test.js @@ -1,4 +1,4 @@ -// npx epg-grabber --config=sites/mako.co.il/mako.co.il.config.js --channels=sites/mako.co.il/mako.co.il.channels.xml --output=guide.xml --days=2 +// npm run grab -- --site=mako.co.il const { parser, url } = require('./mako.co.il.config.js') const dayjs = require('dayjs') @@ -8,17 +8,14 @@ dayjs.extend(customParseFormat) dayjs.extend(utc) const date = dayjs.utc('2022-03-07', 'YYYY-MM-DD').startOf('d') -const channel = { - site_id: '#', - xmltv_id: 'Keshet12.il' -} it('can generate valid url', () => { expect(url).toBe('https://www.mako.co.il/AjaxPage?jspName=EPGResponse.jsp') }) it('can parse response', () => { - const content = `{"programs":[{"DisplayEndTime":"06:15","MakoTVURL":"","HouseNumber":"L17165475","StartTimeUTC":1646539200000,"DurationMs":900000,"DisplayStartTime":"06:00","MobilePicture":"https://img.mako.co.il/2017/01/01/placeHolder.jpg","StartTime":"06/03/2022 06:00:00","RerunBroadcast":false,"Duration":"00:15","ProgramName":"כותרות הבוקר","Date":"06/03/2022 06:00:00","MakoProgramsURL":"","LiveBroadcast":true,"ProgramCode":134987,"Episode":"","Picture":"https://img.mako.co.il//2021/08/04/hadshot_haboker_im_niv_raskin.jpg","MakoShortName":"","hebrewDate":"6 במרץ","Season":"","day":"הערב","EventDescription":"","EnglishName":"cotrot,EP 46"},{"DisplayEndTime":"02:39","MakoTVURL":"","HouseNumber":"A168960","StartTimeUTC":1646613480000,"DurationMs":60000,"DisplayStartTime":"02:38","MobilePicture":"https://img.mako.co.il/2017/01/01/placeHolder.jpg","StartTime":"07/03/2022 02:38:00","RerunBroadcast":true,"Duration":"00:01","ProgramName":"רוקדים עם כוכבים - בר זומר","Date":"07/03/2022 02:38:00","MakoProgramsURL":"","LiveBroadcast":false,"ProgramCode":135029,"Episode":"","Picture":"https://img.mako.co.il/2022/02/13/DancingWithStars2022_EPG.jpg","MakoShortName":"","hebrewDate":"7 במרץ","Season":"","day":"מחר","EventDescription":"מהדורת החדשות המרכזית של הבוקר, האנשים הפרשנויות והכותרות שיעשו את היום.","EnglishName":"rokdim,EP 10"}]}` + const content = + '{"programs":[{"DisplayEndTime":"06:15","MakoTVURL":"","HouseNumber":"L17165475","StartTimeUTC":1646539200000,"DurationMs":900000,"DisplayStartTime":"06:00","MobilePicture":"https://img.mako.co.il/2017/01/01/placeHolder.jpg","StartTime":"06/03/2022 06:00:00","RerunBroadcast":false,"Duration":"00:15","ProgramName":"כותרות הבוקר","Date":"06/03/2022 06:00:00","MakoProgramsURL":"","LiveBroadcast":true,"ProgramCode":134987,"Episode":"","Picture":"https://img.mako.co.il//2021/08/04/hadshot_haboker_im_niv_raskin.jpg","MakoShortName":"","hebrewDate":"6 במרץ","Season":"","day":"הערב","EventDescription":"","EnglishName":"cotrot,EP 46"},{"DisplayEndTime":"02:39","MakoTVURL":"","HouseNumber":"A168960","StartTimeUTC":1646613480000,"DurationMs":60000,"DisplayStartTime":"02:38","MobilePicture":"https://img.mako.co.il/2017/01/01/placeHolder.jpg","StartTime":"07/03/2022 02:38:00","RerunBroadcast":true,"Duration":"00:01","ProgramName":"רוקדים עם כוכבים - בר זומר","Date":"07/03/2022 02:38:00","MakoProgramsURL":"","LiveBroadcast":false,"ProgramCode":135029,"Episode":"","Picture":"https://img.mako.co.il/2022/02/13/DancingWithStars2022_EPG.jpg","MakoShortName":"","hebrewDate":"7 במרץ","Season":"","day":"מחר","EventDescription":"מהדורת החדשות המרכזית של הבוקר, האנשים הפרשנויות והכותרות שיעשו את היום.","EnglishName":"rokdim,EP 10"}]}' const result = parser({ content, date }).map(p => { p.start = p.start.toJSON() p.stop = p.stop.toJSON() @@ -38,7 +35,7 @@ it('can parse response', () => { it('can handle empty guide', () => { const result = parser({ - content: `[]`, + content: '[]', date }) expect(result).toMatchObject([]) diff --git a/sites/maxtv.hrvatskitelekom.hr/maxtv.hrvatskitelekom.hr.channels.xml b/sites/maxtv.hrvatskitelekom.hr/maxtv.hrvatskitelekom.hr.channels.xml index 869b0ab3..f1941e2e 100644 --- a/sites/maxtv.hrvatskitelekom.hr/maxtv.hrvatskitelekom.hr.channels.xml +++ b/sites/maxtv.hrvatskitelekom.hr/maxtv.hrvatskitelekom.hr.channels.xml @@ -1,165 +1,163 @@ - - - 24 Kitchen Hrvatska - 3sat - Aljazeera Balkans - Arena Sport 10 Hrvatska - Arena Sport 1 Hrvatska - Arena Sport 2 Hrvatska - Arena Sport 3 Hrvatska - Arena Sport 4 Hrvatska - Arena Sport 5 Hrvatska - Arena Sport 6 Hrvatska - Arena Sport 7 Hrvatska - Arena Sport 8 Hrvatska - Arena Sport 9 Hrvatska - Aurora TV - Baby TV Europe - Balkanika Music TV - BBC Earth Romania - BHT 1 - Blue Hustler Europe - Boomerang Central & Eastern Europe - Brazzers TV Europe - Cartoon Network Russia & South East Europe - CBS Reality Europe - CGTN - Cinemax 2 - Cinemax - CineStar TV 1 Hrvatska - CineStar TV Action Hrvatska - CineStar TV Fantasy - CineStar TV Premiere 1 - CineStar TV Premiere 2 - Club MTV - CMC TV - CNBC Europe - CNN International Europe - Crime & Investigation UK - Das Erste - Da Vinci - DM Sat - Doma Hrvatska - DW English - E! Europe - Epic Drama - EuroNews English - Extreme Sports Channel - FashionTV Europe - Federalna TV - Fox Crime Hrvatska - Fox Hrvatska - Fox Life Hrvatska - Fox Movies Hrvatska - France 24 English - France 24 Français - Grand - Happy - Hayat - HNTV - HRT 1 - HRT 2 - HRT 3 - HRT 4 - Hustler TV Europe - Jugoton TV - KIKA - Kino TV - Klasik TV - Kreator TV - Laudato TV - Lov i ribolov - Luxe TV - M1 Film - M1 Gold - María+Visión Medjugorje - Mediaset Italia - Mini TV - MTV 00s - MTV 80s - MTV Hits Europe - MyZen TV - N1 Hrvatska - Narodni - National Geographic - National Geographic Wild - Nautical Channel - Nickelodeon - Nick Jr - NickMusic - Nicktoons România - Nova TV - NTV Mir - OTV Valentino - Pickbox TV - Pikaboo - Pink BH - Pink Extra - Pink Fashion - Pink Film - Pink Folk 1 - Pink Koncert - Pink M - Pink Music - Pink Music 2 - Pink Plus - Pink TV - Pink World - Private TV - ProSieben Deutschland - Rai 1 - Rai 2 - Rai 3 - Rai Scuola - RTL 2 Hrvatska - RTL Crime Hrvatska - RTL Deutschland - RTL Hrvatska - RTL Kockica - RTL Living Hrvatska - RTL Passion Hrvatska - RTL Zwei Deutschland - RT News - RTS 1 - RTS 2 - RTS 3 - RTS Svet - Sat. 1 Deutschland - Sky News UK - Sport 1 - Sport Klub 1 Hrvatska - Sport Klub 2 Srbija - - - - - - - - Sportska TV - Stingray Classica - Stingray Djazz - Super RTL Deutschland - TRT World - TV 1000 Balkan - TV5Monde Europe - TVCG Sat - TVE Internacional Europa - TV Koper-Capodistria - TV Slovenija 1 - TV Slovenija 2 - Vavoom - Viasat Explore East - Viasat History - Viasat Nature East - Vivid Red - Vivid Touch - Vivid TV Europe - Vox Deutschland - Woman - Z1 - ZDF - Zdrava TV 7 Hrvatska - - + + + + + + + + + Das Erste + DW English + Sat. 1 Deutschland + Sport 1 + ZDF + Baby TV Europe + Balkanika Music TV + Blue Hustler Europe + Brazzers TV Europe + Cartoon Network Russia & South East Europe + CBS Reality Europe + CGTN + Club MTV + CNBC Europe + CNN International Europe + EuroNews English + Extreme Sports Channel + FashionTV Europe + France 24 English + Grand + Hustler TV Europe + MTV 00s + Nautical Channel + Sky News UK + Stingray Classica + Stingray Djazz + Vivid Red + Vivid Touch + Vivid TV Europe + France 24 Français + TV5Monde Europe + 24 Kitchen Hrvatska + 3sat + Aljazeera Balkans + Arena Sport 10 Hrvatska + Arena Sport 1 Hrvatska + Arena Sport 2 Hrvatska + Arena Sport 3 Hrvatska + Arena Sport 4 Hrvatska + Arena Sport 5 Hrvatska + Arena Sport 6 Hrvatska + Arena Sport 7 Hrvatska + Arena Sport 8 Hrvatska + Arena Sport 9 Hrvatska + Aurora TV + BBC Earth Romania + BHT 1 + Boomerang Central & Eastern Europe + Cinemax 2 + Cinemax + CineStar TV 1 Hrvatska + CineStar TV Action Hrvatska + CineStar TV Fantasy + CineStar TV Premiere 1 + CineStar TV Premiere 2 + CMC TV + Crime & Investigation UK + Da Vinci + DM Sat + Doma Hrvatska + E! Europe + Epic Drama + Federalna TV + Fox Crime Hrvatska + Fox Hrvatska + Fox Life Hrvatska + Fox Movies Hrvatska + Happy + Hayat + HNTV + HRT 1 + HRT 2 + HRT 3 + HRT 4 + Jugoton TV + KIKA + Kino TV + Klasik TV + Kreator TV + Laudato TV + Lov i ribolov + Luxe TV + M1 Film + M1 Gold + María+Visión Medjugorje + Mediaset Italia + Mini TV + MTV 80s + MTV Hits Europe + MyZen TV + N1 Hrvatska + Narodni + National Geographic + National Geographic Wild + Nickelodeon + Nick Jr + NickMusic + Nicktoons România + Nova TV + NTV Mir + OTV Valentino + Pickbox TV + Pikaboo + Pink BH + Pink Extra + Pink Fashion + Pink Film + Pink Folk 1 + Pink Koncert + Pink M + Pink Music + Pink Music 2 + Pink Plus + Pink TV + Pink World + Private TV + ProSieben Deutschland + RT News + RTL 2 Hrvatska + RTL Crime Hrvatska + RTL Hrvatska + RTL Deutschland + RTL Kockica + RTL Living Hrvatska + RTL Passion Hrvatska + RTL Zwei Deutschland + RTS 1 + RTS 2 + RTS 3 + RTS Svet + Sport Klub 1 Hrvatska + Sport Klub 2 Srbija + Sportska TV + Super RTL Deutschland + TRT World + TV 1000 Balkan + TVCG Sat + TVE Internacional Europa + TV Koper-Capodistria + TV Slovenija 1 + TV Slovenija 2 + Vavoom + Viasat Explore East + Viasat History + Viasat Nature East + Vox Deutschland + Woman + Z1 + Zdrava TV 7 Hrvatska + Rai 1 + Rai 2 + Rai 3 + Rai Scuola + diff --git a/sites/maxtv.hrvatskitelekom.hr/maxtv.hrvatskitelekom.hr.test.js b/sites/maxtv.hrvatskitelekom.hr/maxtv.hrvatskitelekom.hr.test.js index 16402b31..6388c9b7 100644 --- a/sites/maxtv.hrvatskitelekom.hr/maxtv.hrvatskitelekom.hr.test.js +++ b/sites/maxtv.hrvatskitelekom.hr/maxtv.hrvatskitelekom.hr.test.js @@ -1,4 +1,4 @@ -// npx epg-grabber --config=sites/maxtv.hrvatskitelekom.hr/maxtv.hrvatskitelekom.hr.config.js --channels=sites/maxtv.hrvatskitelekom.hr/maxtv.hrvatskitelekom.hr.channels.xml --output=guide.xml --days=2 +// npm run grab -- --site=maxtv.hrvatskitelekom.hr const { parser, url, request } = require('./maxtv.hrvatskitelekom.hr.config.js') const dayjs = require('dayjs') @@ -12,7 +12,8 @@ const channel = { site_id: '316', xmltv_id: '24KitchenCroatia.hr' } -const content = `{"status":{"code":200,"message":"OK","authType":"Unauthenticated","ottSessionToken":null},"data":[{"channelId":"316","title":"24Kitchen","logo":"http://ottepg5.nexttv.ht.hr:33200/EPG/jsp/images/universal/film/logo/fileEntity/20161109/000200/XTV100002173/493d03f8-0f08-4932-8371-e5b57d96f17d.png","chanNumber":500,"hasCatchup":false,"ottChannel":true,"userSubscribed":false,"shows":[{"showId":"-1","title":"Nema informacija","startTime":1636952400,"endTime":1636967400,"category":"ostalo","hasReminder":false,"hasRecording":false,"hasSeriesRecording":false,"userOttPlayable":false,"userLocked":false,"isPPV":false,"buyPrice":""},{"showId":"17298142","title":"Najčudniji svjetski restorani","startTime":1636952400,"endTime":1636952700,"category":"Kulinarski","hasReminder":false,"hasRecording":false,"hasSeriesRecording":false,"userOttPlayable":false,"userLocked":false,"isPPV":false,"buyPrice":""}]}]}` +const content = + '{"status":{"code":200,"message":"OK","authType":"Unauthenticated","ottSessionToken":null},"data":[{"channelId":"316","title":"24Kitchen","logo":"http://ottepg5.nexttv.ht.hr:33200/EPG/jsp/images/universal/film/logo/fileEntity/20161109/000200/XTV100002173/493d03f8-0f08-4932-8371-e5b57d96f17d.png","chanNumber":500,"hasCatchup":false,"ottChannel":true,"userSubscribed":false,"shows":[{"showId":"-1","title":"Nema informacija","startTime":1636952400,"endTime":1636967400,"category":"ostalo","hasReminder":false,"hasRecording":false,"hasSeriesRecording":false,"userOttPlayable":false,"userLocked":false,"isPPV":false,"buyPrice":""},{"showId":"17298142","title":"Najčudniji svjetski restorani","startTime":1636952400,"endTime":1636952700,"category":"Kulinarski","hasReminder":false,"hasRecording":false,"hasSeriesRecording":false,"userOttPlayable":false,"userLocked":false,"isPPV":false,"buyPrice":""}]}]}' it('can generate valid url', () => { expect(url).toBe('https://player.maxtvtogo.tportal.hr:8082/OTT4Proxy/proxy/epg/shows') @@ -47,7 +48,8 @@ it('can handle empty guide', () => { const result = parser({ date, channel, - content: `{"status":{"code":200,"message":"OK","authType":"Unauthenticated","ottSessionToken":null},"data":[]}` + content: + '{"status":{"code":200,"message":"OK","authType":"Unauthenticated","ottSessionToken":null},"data":[]}' }) expect(result).toMatchObject([]) }) diff --git a/sites/maxtvgo.mk/maxtvgo.mk.channels.xml b/sites/maxtvgo.mk/maxtvgo.mk.channels.xml index a01ce968..79bd7982 100644 --- a/sites/maxtvgo.mk/maxtvgo.mk.channels.xml +++ b/sites/maxtvgo.mk/maxtvgo.mk.channels.xml @@ -1,56 +1,54 @@ - - - Alfa TV - Aljazeera Balkans - Alsat-M - Arena Fight - Arena Premium 1 - Arena Premium 2 - Arena Premium 3 - Arena Sport 1 - Arena Sport 2 - Arena Sport 3 - Arena Sport 4 - Arena Sport 5 - Balkanika Music TV - Balkan Music TV - Da Vinci - DM Sat - Fox Crime - Fox Life - Fox Movies - Fox - Hayat Folk - Kanal 5 - Klan Macedonia - M1 Film - M1 Gold - Minimax Serbia - MRT 1 - MRT 2 - MRT 3 - MRT 4 - MRT 5 - MRT Sobraniski kanal - MTV 00s - MTV 80s - Nasa TV - National Geographic Channel HD - National Geographic Wild - Sitel TV - Telma - Tera TV - Tring Action - Tring Fantasy - TV 24 - TV 1000 Balkan - TV Edo - TV Iris - TV Shenja - TV Sonce - Viasat Explore - Viasat History HD - Viasat Nature - - \ No newline at end of file + + Alfa TV + Aljazeera Balkans + Alsat-M + Arena Fight + Arena Premium 1 + Arena Sport 1 + Arena Premium 2 + Arena Sport 2 + Arena Premium 3 + Arena Sport 3 + Arena Sport 4 + Arena Sport 5 + Balkanika Music TV + Balkan Music TV + Da Vinci + DM Sat + Fox Crime + Fox Life + Fox Movies + Fox + Hayat Folk + Kanal 5 + Klan Macedonia + M1 Film + M1 Gold + Minimax Serbia + MRT 1 + MRT 2 + MRT 3 + MRT 4 + MRT 5 + MRT Sobraniski kanal + MTV 00s + MTV 80s + Nasa TV + National Geographic Channel HD + National Geographic Wild + Sitel TV + Telma + Tera TV + Tring Action + Tring Fantasy + TV 1000 Balkan + TV 24 + TV Edo + TV Iris + TV Shenja + TV Sonce + Viasat Explore + Viasat History HD + Viasat Nature + \ No newline at end of file diff --git a/sites/maxtvgo.mk/maxtvgo.mk.config.js b/sites/maxtvgo.mk/maxtvgo.mk.config.js index 934d99fa..83991ae0 100644 --- a/sites/maxtvgo.mk/maxtvgo.mk.config.js +++ b/sites/maxtvgo.mk/maxtvgo.mk.config.js @@ -30,10 +30,10 @@ module.exports = { return programs }, - async channels({ country, lang }) { + async channels() { const channels = await axios .get( - `https://prd-static-mkt.spectar.tv/rev-1636968171/client_api.php/channel/all/application_id/deep_blue/device_configuration/2/instance_id/1/language/mk/http_proto/https/format/json` + 'https://prd-static-mkt.spectar.tv/rev-1636968171/client_api.php/channel/all/application_id/deep_blue/device_configuration/2/instance_id/1/language/mk/http_proto/https/format/json' ) .then(r => r.data) .catch(console.log) @@ -64,7 +64,7 @@ function parseIcon(item) { return item.icon['@attributes'].src } -function parseItems(content, channel) { +function parseItems(content) { const data = JSON.parse(content) if (!data || !Array.isArray(data.programme)) return [] diff --git a/sites/maxtvgo.mk/maxtvgo.mk.test.js b/sites/maxtvgo.mk/maxtvgo.mk.test.js index d0e227e7..18c7fa97 100644 --- a/sites/maxtvgo.mk/maxtvgo.mk.test.js +++ b/sites/maxtvgo.mk/maxtvgo.mk.test.js @@ -1,5 +1,5 @@ -// node ./scripts/channels.js --config=./sites/maxtvgo.mk/maxtvgo.mk.config.js --output=./sites/maxtvgo.mk/maxtvgo.mk.channels.xml -// npx epg-grabber --config=sites/maxtvgo.mk/maxtvgo.mk.config.js --channels=sites/maxtvgo.mk/maxtvgo.mk.channels.xml --output=guide.xml --days=2 +// npm run channels:parse -- --config=./sites/maxtvgo.mk/maxtvgo.mk.config.js --output=./sites/maxtvgo.mk/maxtvgo.mk.channels.xml +// npm run grab -- --site=maxtvgo.mk const { parser, url } = require('./maxtvgo.mk.config.js') const dayjs = require('dayjs') @@ -21,7 +21,8 @@ it('can generate valid url', () => { }) it('can parse response', () => { - const content = `{"programme":[{"@attributes":{"channel":"105","id":"21949063","start":"20211116231000 +0100","stop":"20211117010000 +0100","disable_catchup":"0","is_adult":"0"},"title":"Палмето - игран филм","original-title":{"@attributes":{"lang":""}},"sub-title":{"@attributes":{"lang":""}},"category_id":"11","category":"Останато","desc":"Екстремниот рибар, Џереми Вејд, е во потрага по слатководни риби кои јадат човечко месо. Со форензички методи, Џереми им илустрира на гледачите како овие нови чудовишта се создадени да убиваат.","icon":{"@attributes":{"src":"https:\/\/prd-static-mkt.spectar.tv\/rev-1636968170\/image_transform.php\/transform\/1\/epg_program_id\/21949063\/instance_id\/1"}},"episode_num":{},"date":"0","star-rating":{"value":{}},"rating":{"@attributes":{"system":""},"value":"0+"},"linear_channel_rating":"0+","genres":{},"credits":{}}]}` + const content = + '{"programme":[{"@attributes":{"channel":"105","id":"21949063","start":"20211116231000 +0100","stop":"20211117010000 +0100","disable_catchup":"0","is_adult":"0"},"title":"Палмето - игран филм","original-title":{"@attributes":{"lang":""}},"sub-title":{"@attributes":{"lang":""}},"category_id":"11","category":"Останато","desc":"Екстремниот рибар, Џереми Вејд, е во потрага по слатководни риби кои јадат човечко месо. Со форензички методи, Џереми им илустрира на гледачите како овие нови чудовишта се создадени да убиваат.","icon":{"@attributes":{"src":"https://prd-static-mkt.spectar.tv/rev-1636968170/image_transform.php/transform/1/epg_program_id/21949063/instance_id/1"}},"episode_num":{},"date":"0","star-rating":{"value":{}},"rating":{"@attributes":{"system":""},"value":"0+"},"linear_channel_rating":"0+","genres":{},"credits":{}}]}' const result = parser({ content }).map(p => { p.start = p.start.toJSON() p.stop = p.stop.toJSON() @@ -42,7 +43,8 @@ it('can parse response', () => { }) it('can parse response with no description', () => { - const content = `{"programme":[{"@attributes":{"channel":"105","id":"21949063","start":"20211116231000 +0100","stop":"20211117010000 +0100","disable_catchup":"0","is_adult":"0"},"title":"Палмето - игран филм","original-title":{"@attributes":{"lang":""}},"sub-title":{"@attributes":{"lang":""}},"category_id":"11","category":"Останато","desc":{},"icon":{"@attributes":{"src":"https:\/\/prd-static-mkt.spectar.tv\/rev-1636968170\/image_transform.php\/transform\/1\/epg_program_id\/21949063\/instance_id\/1"}},"episode_num":{},"date":"0","star-rating":{"value":{}},"rating":{"@attributes":{"system":""},"value":"0+"},"linear_channel_rating":"0+","genres":{},"credits":{}}]}` + const content = + '{"programme":[{"@attributes":{"channel":"105","id":"21949063","start":"20211116231000 +0100","stop":"20211117010000 +0100","disable_catchup":"0","is_adult":"0"},"title":"Палмето - игран филм","original-title":{"@attributes":{"lang":""}},"sub-title":{"@attributes":{"lang":""}},"category_id":"11","category":"Останато","desc":{},"icon":{"@attributes":{"src":"https://prd-static-mkt.spectar.tv/rev-1636968170/image_transform.php/transform/1/epg_program_id/21949063/instance_id/1"}},"episode_num":{},"date":"0","star-rating":{"value":{}},"rating":{"@attributes":{"system":""},"value":"0+"},"linear_channel_rating":"0+","genres":{},"credits":{}}]}' const result = parser({ content }).map(p => { p.start = p.start.toJSON() p.stop = p.stop.toJSON() @@ -65,7 +67,7 @@ it('can handle empty guide', () => { const result = parser({ date, channel, - content: `{"@attributes":{"source-info-name":"maxtvgo.mk","generator-info-name":"spectar_epg"}}` + content: '{"@attributes":{"source-info-name":"maxtvgo.mk","generator-info-name":"spectar_epg"}}' }) expect(result).toMatchObject([]) }) diff --git a/sites/mbc.net/mbc.net.channels.xml b/sites/mbc.net/mbc.net.channels.xml index 3d932ceb..59c83549 100644 --- a/sites/mbc.net/mbc.net.channels.xml +++ b/sites/mbc.net/mbc.net.channels.xml @@ -1,22 +1,20 @@ - - - MBC - MBC 2 - MBC 4 - MBC 5 - MBC Action - MBC Bollywood - MBC Drama - MBC Drama + - MBC Drama USA - MBC Iraq - MBC Maser - MBC Maser 2 - MBC Maser USA - MBC Max - MBC + Power - MBC USA - Wanasah - - \ No newline at end of file + + MBC + MBC USA + MBC 2 + MBC 4 + MBC 5 + MBC Action + MBC Bollywood + MBC Drama + MBC Drama USA + MBC Iraq + MBC Maser + MBC Maser 2 + MBC Maser USA + MBC Max + MBC Drama + + MBC + Power + Wanasah + \ No newline at end of file diff --git a/sites/mbc.net/mbc.net.config.js b/sites/mbc.net/mbc.net.config.js index f94d0e0a..b8ddf0ed 100644 --- a/sites/mbc.net/mbc.net.config.js +++ b/sites/mbc.net/mbc.net.config.js @@ -3,13 +3,12 @@ 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 .add(1, 'd') .valueOf()}&channel=${channel.site_id}` }, - parser: function ({ content, channel, date }) { + parser: function ({ content }) { let programs = [] const items = parseItems(content) items.forEach(item => { diff --git a/sites/mbc.net/mbc.net.test.js b/sites/mbc.net/mbc.net.test.js index 70b1dd65..554e61c0 100644 --- a/sites/mbc.net/mbc.net.test.js +++ b/sites/mbc.net/mbc.net.test.js @@ -1,4 +1,4 @@ -// npx epg-grabber --config=sites/mbc.net/mbc.net.config.js --channels=sites/mbc.net/mbc.net.channels.xml --output=guide.xml --days=2 +// npm run grab -- --site=mbc.net const { parser, url } = require('./mbc.net.config.js') const dayjs = require('dayjs') @@ -12,7 +12,8 @@ const channel = { site_id: 'mbc1', xmltv_id: 'MBC.ae' } -const content = `[{"id":3140240,"channelBCMId":"1","channelLabel":"MBC1","showPageTitle":"اختطاف","showPageGenreInArabic":" دراما","showPageAboutInArabic":".يستضيف برنامج تلفزيوني والدة لينا وشقيقتها، ولدى مشاهدتها الحلقة، تكتشف والدة ماجد الحقيقة، بينما تتعرض العنود لحادث سير مروع","startTime":1636155131000,"endTime":1636157806000,"startTimeInMilliseconds":1636155131000,"endTimeInMilliseconds":1636157806200,"premiereMode":"Fast Repeat","showingNow":false}]` +const content = + '[{"id":3140240,"channelBCMId":"1","channelLabel":"MBC1","showPageTitle":"اختطاف","showPageGenreInArabic":" دراما","showPageAboutInArabic":".يستضيف برنامج تلفزيوني والدة لينا وشقيقتها، ولدى مشاهدتها الحلقة، تكتشف والدة ماجد الحقيقة، بينما تتعرض العنود لحادث سير مروع","startTime":1636155131000,"endTime":1636157806000,"startTimeInMilliseconds":1636155131000,"endTimeInMilliseconds":1636157806200,"premiereMode":"Fast Repeat","showingNow":false}]' it('can generate valid url', () => { const result = url({ date, channel }) @@ -39,7 +40,7 @@ it('can handle empty guide', () => { const result = parser({ date, channel, - content: `[]` + content: '[]' }) expect(result).toMatchObject([]) }) diff --git a/sites/mediagenie.co.kr/mediagenie.co.kr.channels.xml b/sites/mediagenie.co.kr/mediagenie.co.kr.channels.xml index 8e439f16..8c92688c 100644 --- a/sites/mediagenie.co.kr/mediagenie.co.kr.channels.xml +++ b/sites/mediagenie.co.kr/mediagenie.co.kr.channels.xml @@ -1,10 +1,8 @@ - - - CHING - ENA DRAMA - ENA STORY - Healthmedi - ONT - - + + CHING + ENA DRAMA + ENA STORY + Healthmedi + ONT + diff --git a/sites/mediagenie.co.kr/mediagenie.co.kr.config.js b/sites/mediagenie.co.kr/mediagenie.co.kr.config.js index 9a4d545f..32f85cbe 100644 --- a/sites/mediagenie.co.kr/mediagenie.co.kr.config.js +++ b/sites/mediagenie.co.kr/mediagenie.co.kr.config.js @@ -11,7 +11,6 @@ dayjs.extend(customParseFormat) module.exports = { site: 'mediagenie.co.kr', days: 1, - skip: true, // NOTE: the guide appears on the site after the end of the daily update (https://github.com/iptv-org/epg/actions/workflows/mediagenie.co.kr.yml) url({ channel, date }) { return `https://mediagenie.co.kr/${channel.site_id}/?qd=${date.format('YYYYMMDD')}` }, @@ -22,11 +21,11 @@ module.exports = { }, parser({ content, date }) { const programs = [] - const items = parseItems(content, date) + const items = parseItems(content) items.forEach(item => { const $item = cheerio.load(item) const prev = programs[programs.length - 1] - const start = parseStart($item, date) + let start = parseStart($item, date) if (!start) return if (prev) { if (start.isBefore(prev.start)) { @@ -71,7 +70,7 @@ function parseStart($item, date) { return dayjs.tz(`${date.format('YYYY-MM-DD')} ${time}`, 'YYYY-MM-DD HH:mm', 'Asia/Seoul') } -function parseItems(content, channel, date) { +function parseItems(content) { const $ = cheerio.load(content) return $('.tbl > tbody > tr').toArray() diff --git a/sites/mediagenie.co.kr/mediagenie.co.kr.test.js b/sites/mediagenie.co.kr/mediagenie.co.kr.test.js index 595fff26..a50aa036 100644 --- a/sites/mediagenie.co.kr/mediagenie.co.kr.test.js +++ b/sites/mediagenie.co.kr/mediagenie.co.kr.test.js @@ -1,4 +1,4 @@ -// npx epg-grabber --config=sites/mediagenie.co.kr/mediagenie.co.kr.config.js --channels=sites/mediagenie.co.kr/mediagenie.co.kr.channels.xml --output=guide.xml --days=2 +// npm run grab -- --site=mediagenie.co.kr const { parser, url, request } = require('./mediagenie.co.kr.config.js') const fs = require('fs') @@ -37,7 +37,7 @@ it('can parse response', () => { expect(results[0]).toMatchObject({ start: '2023-01-24T15:20:00.000Z', stop: '2023-01-24T16:34:00.000Z', - title: `대행사`, + title: '대행사', rating: { system: 'KMRB', value: '15' @@ -47,7 +47,7 @@ it('can parse response', () => { expect(results[16]).toMatchObject({ start: '2023-01-25T14:27:00.000Z', stop: '2023-01-25T14:57:00.000Z', - title: `법쩐`, + title: '법쩐', rating: { system: 'KMRB', value: '15' diff --git a/sites/mediaklikk.hu/mediaklikk.hu.channels.xml b/sites/mediaklikk.hu/mediaklikk.hu.channels.xml index e45b2162..677d9f4a 100644 --- a/sites/mediaklikk.hu/mediaklikk.hu.channels.xml +++ b/sites/mediaklikk.hu/mediaklikk.hu.channels.xml @@ -1,13 +1,11 @@ - - - Duna - Duna World - M1 - M2 - M3 - M4 Sport - M4 Sport + - M5 - - \ No newline at end of file + + Duna + Duna World + M1 + M2 + M3 + M4 Sport + M4 Sport + + M5 + \ No newline at end of file diff --git a/sites/mediaklikk.hu/mediaklikk.hu.config.js b/sites/mediaklikk.hu/mediaklikk.hu.config.js index 7a024c15..c525911a 100644 --- a/sites/mediaklikk.hu/mediaklikk.hu.config.js +++ b/sites/mediaklikk.hu/mediaklikk.hu.config.js @@ -72,7 +72,7 @@ function parseDescription($item) { function parseIcon($item) { const backgroundImage = $item('.program_about > .program_photo').css('background-image') if (!backgroundImage) return null - const [_, icon] = backgroundImage.match(/url\(\'(.*)'\)/) || [null, null] + const [, icon] = backgroundImage.match(/url\('(.*)'\)/) || [null, null] if (!icon) return null return `https:${icon}` diff --git a/sites/mediaklikk.hu/mediaklikk.hu.test.js b/sites/mediaklikk.hu/mediaklikk.hu.test.js index ccc351a3..08b76e2c 100644 --- a/sites/mediaklikk.hu/mediaklikk.hu.test.js +++ b/sites/mediaklikk.hu/mediaklikk.hu.test.js @@ -1,4 +1,4 @@ -// npx epg-grabber --config=sites/mediaklikk.hu/mediaklikk.hu.config.js --channels=sites/mediaklikk.hu/mediaklikk.hu.channels.xml --output=guide.xml --days=2 +// npm run grab -- --site=mediaklikk.hu const { parser, url, request } = require('./mediaklikk.hu.config.js') const fs = require('fs') @@ -48,7 +48,7 @@ it('can parse response', () => { expect(results[0]).toMatchObject({ start: '2022-10-27T22:00:46.000Z', stop: '2022-10-27T22:54:00.000Z', - title: `A hegyi doktor - I. évad`, + title: 'A hegyi doktor - I. évad', description: 'Maxl iskolatársának, Vroninak az anyja egy autóbalesetben meghal. A 20 éves testvér, Vinzenz magához szeretné venni a lányt, ám a gyámüggyel problémái akadnak, ezért megpróbálja elszöktetni.(Eredeti hang digitálisan.)', icon: 'https://mediaklikk.hu/wp-content/uploads/sites/4/2019/10/A-hegyi-doktor-I-évad-e1571318391226-150x150.jpg' @@ -57,7 +57,7 @@ it('can parse response', () => { expect(results[56]).toMatchObject({ start: '2022-10-28T20:35:05.000Z', stop: '2022-10-28T21:05:05.000Z', - title: `Szemtől szemben (1967)`, + title: 'Szemtől szemben (1967)', description: 'Brad Fletcher bostoni történelemtanár, aki a délnyugati határvidéken kúrálja tüdőbetegségét, egy véletlen folytán összeakad Beauregard Bennett körözött útonállóval, akit végül maga segít a menekülésben. A tanárt lenyűgözi a törvényen kívüliek világa és felismeri, hogy értelmi felsőbbrendűségével bámulatosan tudja irányítani az embereket. Bennett csakhamar azt veszi észre, hogy a peremre szorult saját bandájában. Eközben a Pinkerton ügynökség beépített embere is csapdába igyekszik csalni mindnyájukat.' }) @@ -67,7 +67,7 @@ it('can handle empty guide', () => { const result = parser({ date, channel, - content: `` + content: '' }) expect(result).toMatchObject([]) }) diff --git a/sites/mediaset.it/mediaset.it.channels.xml b/sites/mediaset.it/mediaset.it.channels.xml index 0c3fb35d..5a3e9783 100644 --- a/sites/mediaset.it/mediaset.it.channels.xml +++ b/sites/mediaset.it/mediaset.it.channels.xml @@ -1,20 +1,18 @@ - - - 20 Mediaset - Boing Italia - Canale 5 - Cartoonito Italia - Focus - Iris - Italia 1 - Italia 2 - La 5 - Mediaset Extra - Premium Action - Premium Crime - Rete 4 - TGCom 24 - Top Crime - - \ No newline at end of file + + 20 Mediaset + Boing Italia + Canale 5 + Cartoonito Italia + Focus + Iris + Italia 1 + Italia 2 + La 5 + Mediaset Extra + Premium Action + Premium Crime + Rete 4 + TGCom 24 + Top Crime + \ No newline at end of file diff --git a/sites/melita.com/melita.com.channels.xml b/sites/melita.com/melita.com.channels.xml index a99e43c3..d147c8ef 100644 --- a/sites/melita.com/melita.com.channels.xml +++ b/sites/melita.com/melita.com.channels.xml @@ -1,123 +1,121 @@ - - - Al Jazeera Arabic - Al Jazeera English - Animal Planet HD - Baby TV - BBC Earth HD - BBC Entertainment - BBC World News HD - Bloomberg - Boing - Boomerang - Caccia e Pesca - Canale 5 HD - Canale Italia - Cartoonito - Cartoon Network - CBeeBies HD - CBS Reality - CGTN - Channel One Russia - Cielo - TV Moda - Club MTV - C Music TV - CNBC - CNN International - Crime + Investigation - Daystar Network HD - Discovery HD - Discovery Channel - Discovery Science - Disney Channel - Disney Junior - Dubai One - Duck TV - Deutsche Welle HD - E! Entertainment HD - Euronews HD - Eurosport HD - Eurosport 2 - EWTN - Extreme Sports - FTV HD - f Living - Food Network HD - FOX HD - FOX LIFE HD - France 2 HD - France 24 in English - France 24 in French - Ginx TV - GOD TV - GREAT! Movies Action - HGTV HD - HISTORY HD - ID HD - Iris - Italia 1 HD - Italia 2 - ITV Shopping - JimJam - La 5 - LBC Europe - Luxe TV HD - Mediaset Extra - Mediaset Italia - Melita More - Mezzo HD - MTV 00s - MTV 80s - MTV 90s - MTV - MTV Hits - MTV Live HD - National Geographic HD - Nat Geo Wild HD - NET HD - Nickelodeon HD - Nick Junior Global - ONE HD - Parliament Channel - Rai Uno - Rai Due - Rai Tre - Rai News - Rai Scuola - Rai Storia - Rete 4 HD - Russia Today - Radio TV - RTL - RTL II - RTR Planeta - Sky News HD - Smash TV - iConcerts HD - TGCOM 24 - TLC - Top Crime - TRACE Urban HD - Travel HD - TRT Turk - TRT World HD - TSN1 - TSN2 - TSN3 - TSN4 - TSN5 - TSN6 - TSN7 - TSN8 - TV 2000 - TV5 Monde - TVM HD - TVMNEWS+ - Xejk - TVE Internacional - BVN Europa - - - + + + RTL + RTL II + Al Jazeera Arabic + Al Jazeera English + Animal Planet HD + Baby TV + BBC Earth HD + BBC Entertainment + BBC World News HD + Bloomberg + Boomerang + Cartoonito + Cartoon Network + CBeeBies HD + CBS Reality + CGTN + Channel One Russia + Club MTV + C Music TV + CNBC + CNN International + Crime + Investigation + Daystar Network HD + Discovery HD + Discovery Channel + Discovery Science + Disney Channel + Disney Junior + Dubai One + Duck TV + Deutsche Welle HD + E! Entertainment HD + Euronews HD + Eurosport HD + Eurosport 2 + EWTN + Extreme Sports + FTV HD + f Living + Food Network HD + FOX HD + FOX LIFE HD + France 24 in English + Ginx TV + GOD TV + GREAT! Movies Action + HGTV HD + HISTORY HD + ID HD + Iris + ITV Shopping + JimJam + LBC Europe + Luxe TV HD + Melita More + MTV 00s + MTV 80s + MTV 90s + MTV + MTV Hits + MTV Live HD + National Geographic HD + Nat Geo Wild HD + NET HD + Nickelodeon HD + Nick Junior Global + ONE HD + Parliament Channel + Russia Today + RTR Planeta + Sky News HD + Smash TV + iConcerts HD + TLC + TRACE Urban HD + Travel HD + TSN1 + TSN2 + TSN3 + TSN4 + TSN5 + TSN6 + TSN7 + TSN8 + TVE Internacional + France 2 HD + France 24 in French + Mezzo HD + TV5 Monde + Boing + Caccia e Pesca + Canale 5 HD + Canale Italia + Cielo + TV Moda + Italia 1 HD + Italia 2 + La 5 + Mediaset Extra + Mediaset Italia + Rai Uno + Rai Due + Rai Tre + Rai News + Rai Scuola + Rai Storia + Rete 4 HD + Radio TV + TGCOM 24 + Top Crime + TV 2000 + TVM HD + TVMNEWS+ + Xejk + BVN Europa + TRT Turk + TRT World HD + diff --git a/sites/melita.com/melita.com.test.js b/sites/melita.com/melita.com.test.js index db358f97..3fa48f75 100644 --- a/sites/melita.com/melita.com.test.js +++ b/sites/melita.com/melita.com.test.js @@ -1,5 +1,5 @@ // npm run channels:parse -- --config=./sites/melita.com/melita.com.config.js --output=./sites/melita.com/melita.com.channels.xml -// npx epg-grabber --config=sites/melita.com/melita.com.config.js --channels=sites/melita.com/melita.com.channels.xml --output=guide.xml --days=2 +// npm run grab -- --site=melita.com const { parser, url } = require('./melita.com.config.js') const dayjs = require('dayjs') @@ -21,7 +21,8 @@ it('can generate valid url', () => { }) it('can parse response', () => { - const content = `{"schedules":[{"id":"138dabff-131a-42a0-9373-203545933dd0","published":{"start":"2022-04-20T06:25:00Z","end":"2022-04-20T06:45:00Z"},"program":"ae52299a-3c99-4d34-9932-e21d383f9800","live":false,"blackouts":[]}],"programs":[{"id":"ae52299a-3c99-4d34-9932-e21d383f9800","title":"How I Met Your Mother","shortSynopsis":"Symphony of Illumination - Robin gets some bad news and decides to keep it to herself. Marshall decorates the house.","posterImage":"https://androme.melitacable.com/media/images/epg/bc/07/p8953134_e_h10_ad.jpg","episode":12,"episodeTitle":"Symphony of Illumination","season":"fdd6e42c-97f9-4d7a-aaca-78b53378f960","genres":["3.5.7.3"],"tags":["comedy"],"adult":false}],"seasons":[{"id":"fdd6e42c-97f9-4d7a-aaca-78b53378f960","title":"How I Met Your Mother","adult":false,"season":7,"series":"858c535a-abbb-451b-807a-94196997ea2d"}],"series":[{"id":"858c535a-abbb-451b-807a-94196997ea2d","title":"How I Met Your Mother","adult":false}]}` + const content = + '{"schedules":[{"id":"138dabff-131a-42a0-9373-203545933dd0","published":{"start":"2022-04-20T06:25:00Z","end":"2022-04-20T06:45:00Z"},"program":"ae52299a-3c99-4d34-9932-e21d383f9800","live":false,"blackouts":[]}],"programs":[{"id":"ae52299a-3c99-4d34-9932-e21d383f9800","title":"How I Met Your Mother","shortSynopsis":"Symphony of Illumination - Robin gets some bad news and decides to keep it to herself. Marshall decorates the house.","posterImage":"https://androme.melitacable.com/media/images/epg/bc/07/p8953134_e_h10_ad.jpg","episode":12,"episodeTitle":"Symphony of Illumination","season":"fdd6e42c-97f9-4d7a-aaca-78b53378f960","genres":["3.5.7.3"],"tags":["comedy"],"adult":false}],"seasons":[{"id":"fdd6e42c-97f9-4d7a-aaca-78b53378f960","title":"How I Met Your Mother","adult":false,"season":7,"series":"858c535a-abbb-451b-807a-94196997ea2d"}],"series":[{"id":"858c535a-abbb-451b-807a-94196997ea2d","title":"How I Met Your Mother","adult":false}]}' const result = parser({ content }).map(p => { p.start = p.start.toJSON() p.stop = p.stop.toJSON() @@ -45,7 +46,7 @@ it('can parse response', () => { it('can handle empty guide', () => { const result = parser({ - content: `{}` + content: '{}' }) expect(result).toMatchObject([]) }) diff --git a/sites/meo.pt/meo.pt.channels.xml b/sites/meo.pt/meo.pt.channels.xml index e469d7c9..56de7099 100644 --- a/sites/meo.pt/meo.pt.channels.xml +++ b/sites/meo.pt/meo.pt.channels.xml @@ -1,206 +1,204 @@ - - - 24 Kitchen - 3sat - A Bola TV - ADVNCE - Afro Music Channel - Aljazeera English - Alma Lusa - AMC - Antena 3 Internacional - ARTE Français - AR TV Canal Parlamento - Atrecine - Atreseries - AXN Movies - AXN - AXN White - Baby TV - BBC Entertainment - Benfica TV - BFM Business - BFM TV - Biggs - Blaze - Bloomberg TV - BNT 4 - Body Sex HD - Bom Som TV - Boomerang - BVN - Caçavision - Canal 11 - Canal 24 Horas - Canal Cocina - Canal Hollywood - Canal Panda - Canal Q - Canal Um Europa - Cartoon Network - Caza y Pesca - CBS Reality - CCTV 4 Europe - CGTN - CGTN Documentary - Perviy kanal - Cine Mundo - Clubbing TV - CM TV - CNBC Europe - CNN - CNN Portugal - Cubavisión Internacional - Das Erste - Decasa - Discovery Channel - Disney Channel - Disney Junior - Dizi - Dog TV - DW Deutsch - DW English - E! - Eleven 1 - Eleven 2 - Eleven 3 - Eleven 4 - Eleven 5 - Eleven 6 - EuroNews English - EuroNews Deutsch - EuroNews - Eurosport 1 - Eurosport 2 - FashionTV - Fight Sports - Fox Comedy - Fox Crime - Fox Life - Fox Movies - Fox - France 2 - France 24 English - France 24 Français - France 3 - France 5 - Fuel TV - Galicia TV - Gametoon - Globo News - História - Hot Man - Hot Taboo - Hot - I24 News English - I24 News Français - Inter + - JimJam - KBS World - KIKA - Kuriakos TV - LocalVisão TV - Lolly Kids - Más Chic - MCM Pop - MCM Top - Mezzo - Mezzo Live HD - MTV 00s - MTV Live HD - MTV - National Geographic - National Geographic Wild - NBA TV - NHK World Japan - Nickelodeon - Odisseia - Panda Kids - Penthouse Gold - PFC - Phoenix CNE - Playboy TV - Porto Canal - Pro TV - Rai 1 - Rai 2 - Rai 3 - Rai News 24 - Rai Scuola - Rai Storia - Record News - Record TV - Rede Globo - RT News - RTP 1 - RTP 2 - RTP 3 - RTP Açores - RTP África - RTP Madeira - RTP Memória - Rybalka Telekanal - Sextreme - SIC - SIC Caras - SIC K - SIC Mulher - SIC Notícias - SIC Radical - Sky News - Sol Música - Somos - SET Asia - Sony Max UK - S+ - Sporting TV - Sport TV 1 - Sport TV 2 - Sport TV 3 - Sport TV 4 - Sport TV 5 - Sport TV 6 - Sport TV + - Star Cinema - Star Family - Stingray Classica - Stingray Djazz - Stingray IConcerts - Stingray Loud - Stingray Retro - Syfy - TCV - Telesur - TLC - Toros TV - TPA - Trace Brazuca - Trace Toca - Trace Urban - TRT World - TV 2 - TV5Monde Europe - TV Canção Nova - TVCine Action - TVCine Edition - TVCine Emotion - TVCine Top - TVE Internacional - TVI - TVI 24 - TVI Ficção - TVI Reality - TV Verdade - Ukraïna 24 - Ukraine 1 - Ukraine 2 - Venus - Vivid Red - X Sport - ZDF - ZDFNEO - Zee Cinema - Zee TV - - + + EuroNews Deutsch + France 24 English + KBS World + MTV 00s + MTV Live HD + NHK World Japan + Sky News + TPA + TRT World + 24 Kitchen + 3sat + A Bola TV + ADVNCE + Afro Music Channel + Aljazeera English + Alma Lusa + AMC + Antena 3 Internacional + ARTE Français + AR TV Canal Parlamento + Atrecine + Atreseries + AXN Movies + AXN + AXN White + Baby TV + BBC Entertainment + Benfica TV + BFM Business + BFM TV + Biggs + Blaze + Bloomberg TV + BNT 4 + Body Sex HD + Bom Som TV + Boomerang + BVN + Caçavision + Canal 11 + Canal 24 Horas + Canal Cocina + Canal Hollywood + Canal Panda + Canal Q + Canal Um Europa + Cartoon Network + Caza y Pesca + CBS Reality + CCTV 4 Europe + CGTN + CGTN Documentary + Perviy kanal + Cine Mundo + Clubbing TV + CM TV + CNBC Europe + CNN + CNN Portugal + Cubavisión Internacional + Das Erste + Decasa + Discovery Channel + Disney Channel + Disney Junior + Dizi + Dog TV + DW Deutsch + DW English + E! + Eleven 1 + Eleven 2 + Eleven 3 + Eleven 4 + Eleven 5 + Eleven 6 + EuroNews English + EuroNews + Eurosport 1 + Eurosport 2 + FashionTV + Fight Sports + Fox Comedy + Fox Crime + Fox Life + Fox Movies + Fox + France 2 + France 24 Français + France 3 + France 5 + Fuel TV + Galicia TV + Gametoon + Globo News + História + Hot Man + Hot Taboo + Hot + I24 News English + I24 News Français + Inter + + JimJam + KIKA + Kuriakos TV + LocalVisão TV + Lolly Kids + Más Chic + MCM Pop + MCM Top + Mezzo + Mezzo Live HD + MTV + National Geographic + National Geographic Wild + NBA TV + Nickelodeon + Odisseia + Panda Kids + Penthouse Gold + PFC + Phoenix CNE + Playboy TV + Porto Canal + Pro TV + Rai 1 + Rai 2 + Rai 3 + Rai News 24 + Rai Scuola + Rai Storia + Record News + Record TV + Rede Globo + RT News + RTP 1 + RTP 2 + RTP 3 + RTP Açores + RTP África + RTP Madeira + RTP Memória + Rybalka Telekanal + Sextreme + SIC + SIC Caras + SIC K + SIC Mulher + SIC Notícias + SIC Radical + Sol Música + Somos + SET Asia + Sony Max UK + S+ + Sporting TV + Sport TV 1 + Sport TV 2 + Sport TV 3 + Sport TV 4 + Sport TV 5 + Sport TV 6 + Sport TV + + Star Cinema + Star Family + Stingray Classica + Stingray Djazz + Stingray IConcerts + Stingray Loud + Stingray Retro + Syfy + TCV + Telesur + TLC + Toros TV + Trace Brazuca + Trace Toca + Trace Urban + TV 2 + TV5Monde Europe + TV Canção Nova + TVCine Action + TVCine Edition + TVCine Emotion + TVCine Top + TVE Internacional + TVI + TVI 24 + TVI Ficção + TVI Reality + TV Verdade + Ukraïna 24 + Ukraine 1 + Ukraine 2 + Venus + Vivid Red + X Sport + ZDF + ZDFNEO + Zee Cinema + Zee TV + diff --git a/sites/meo.pt/meo.pt.config.js b/sites/meo.pt/meo.pt.config.js index c899d3a4..baa87c55 100644 --- a/sites/meo.pt/meo.pt.config.js +++ b/sites/meo.pt/meo.pt.config.js @@ -3,7 +3,7 @@ const { DateTime } = require('luxon') module.exports = { site: 'meo.pt', days: 2, - url: `https://authservice.apps.meo.pt/Services/GridTv/GridTvMng.svc/getProgramsFromChannels`, + url: 'https://authservice.apps.meo.pt/Services/GridTv/GridTvMng.svc/getProgramsFromChannels', request: { method: 'POST', headers: { diff --git a/sites/meo.pt/meo.pt.test.js b/sites/meo.pt/meo.pt.test.js index e80f27ac..e4fe3ccb 100644 --- a/sites/meo.pt/meo.pt.test.js +++ b/sites/meo.pt/meo.pt.test.js @@ -1,4 +1,4 @@ -// npx epg-grabber --config=sites/meo.pt/meo.pt.config.js --channels=sites/meo.pt/meo.pt.channels.xml --output=guide.xml +// npm run grab -- --site=meo.pt const { parser, url, request } = require('./meo.pt.config.js') const fs = require('fs') diff --git a/sites/mewatch.sg/mewatch.sg.channels.xml b/sites/mewatch.sg/mewatch.sg.channels.xml index a2883a8d..0db4e147 100644 --- a/sites/mewatch.sg/mewatch.sg.channels.xml +++ b/sites/mewatch.sg/mewatch.sg.channels.xml @@ -1,22 +1,20 @@ - - - Channel 5 - Channel 8 - Channel U - Suria - Vasantham - CNA - oktolidays - eGG Network - Animax - GEM - HBO - HBO Hits - HBO Family - HBO Signature - Cinemax - LIVE 1 - LIVE 2 - - + + Animax + Channel 5 + Channel 8 + Channel U + Cinemax + CNA + eGG Network + GEM + HBO + HBO Family + HBO Hits + HBO Signature + LIVE 1 + LIVE 2 + oktolidays + Suria + Vasantham + diff --git a/sites/mewatch.sg/mewatch.sg.config.js b/sites/mewatch.sg/mewatch.sg.config.js index a8dc1363..baf58b9a 100644 --- a/sites/mewatch.sg/mewatch.sg.config.js +++ b/sites/mewatch.sg/mewatch.sg.config.js @@ -40,7 +40,7 @@ function parseStop(item) { function parseRating(info) { const classification = info.classification if (classification && classification.code) { - const [_, system, value] = classification.code.match(/^([A-Z]+)\-([A-Z0-9]+)/) || [ + const [, system, value] = classification.code.match(/^([A-Z]+)-([A-Z0-9]+)/) || [ null, null, null diff --git a/sites/mewatch.sg/mewatch.sg.test.js b/sites/mewatch.sg/mewatch.sg.test.js index e7c92a9f..ca944c90 100644 --- a/sites/mewatch.sg/mewatch.sg.test.js +++ b/sites/mewatch.sg/mewatch.sg.test.js @@ -1,4 +1,4 @@ -// npx epg-grabber --config=sites/mewatch.sg/mewatch.sg.config.js --channels=sites/mewatch.sg/mewatch.sg.channels.xml --output=guide.xml --days=2 +// npm run grab -- --site=mewatch.sg const { parser, url } = require('./mewatch.sg.config.js') const dayjs = require('dayjs') @@ -20,7 +20,8 @@ it('can generate valid url', () => { }) it('can parse response', () => { - const content = `[{"channelId":"97098","startDate":"2022-06-11T21:00:00.000Z","endDate":"2022-06-12T21:00:00.000Z","schedules":[{"channelId":"97098","customId":"37040748","endDate":"2022-06-11T21:30:00Z","id":"788a7dd","live":false,"startDate":"2022-06-11T21:00:00Z","isGap":false,"InteractiveType":"0","item":{"type":"episode","title":"Open Homes S3 - EP 2","blackoutMessage":"Programme is not available for live streaming.","description":"Mike heads down to the Sydney beaches to visit a beachside renovation with all the bells and whistles, we see a kitchen tip and recipe anyone can do at home. We finish up in the prestigious Byron bay to visit a multi million dollar award winning home.","classification":{"code":"IMDA-G (Violence)","name":"G (Violence)"},"episodeNumber":2,"episodeTitle":"Collaroy, Sydney","seasonNumber":3,"images":{"wallpaper":"https://production.togglestatic.com/shain/v1/dataservice/ResizeImage/$value?Format='jpg'&Quality=85&ImageId='4853691'&EntityType='LinearSchedule'&EntityId='788a7dd9-9b12-446f-91b4-c8ac9fec95e5'&Width=1280&Height=720&device=web_browser&subscriptions=Anonymous&segmentationTags=all","tile":"https://production.togglestatic.com/shain/v1/dataservice/ResizeImage/$value?Format='jpg'&Quality=85&ImageId='4853697'&EntityType='LinearSchedule'&EntityId='788a7dd9-9b12-446f-91b4-c8ac9fec95e5'&Width=1280&Height=720&device=web_browser&subscriptions=Anonymous&segmentationTags=all"},"enableCatchUp":true,"enableStartOver":false,"enableSeeking":false,"programSource":"ACQUIRED","simulcast":"LOCAL","masterReferenceKey":"0CH50CH5A0105567800020A0000000000P3254400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"}}]}]` + const content = + '[{"channelId":"97098","startDate":"2022-06-11T21:00:00.000Z","endDate":"2022-06-12T21:00:00.000Z","schedules":[{"channelId":"97098","customId":"37040748","endDate":"2022-06-11T21:30:00Z","id":"788a7dd","live":false,"startDate":"2022-06-11T21:00:00Z","isGap":false,"InteractiveType":"0","item":{"type":"episode","title":"Open Homes S3 - EP 2","blackoutMessage":"Programme is not available for live streaming.","description":"Mike heads down to the Sydney beaches to visit a beachside renovation with all the bells and whistles, we see a kitchen tip and recipe anyone can do at home. We finish up in the prestigious Byron bay to visit a multi million dollar award winning home.","classification":{"code":"IMDA-G (Violence)","name":"G (Violence)"},"episodeNumber":2,"episodeTitle":"Collaroy, Sydney","seasonNumber":3,"images":{"wallpaper":"https://production.togglestatic.com/shain/v1/dataservice/ResizeImage/$value?Format=\'jpg\'&Quality=85&ImageId=\'4853691\'&EntityType=\'LinearSchedule\'&EntityId=\'788a7dd9-9b12-446f-91b4-c8ac9fec95e5\'&Width=1280&Height=720&device=web_browser&subscriptions=Anonymous&segmentationTags=all","tile":"https://production.togglestatic.com/shain/v1/dataservice/ResizeImage/$value?Format=\'jpg\'&Quality=85&ImageId=\'4853697\'&EntityType=\'LinearSchedule\'&EntityId=\'788a7dd9-9b12-446f-91b4-c8ac9fec95e5\'&Width=1280&Height=720&device=web_browser&subscriptions=Anonymous&segmentationTags=all"},"enableCatchUp":true,"enableStartOver":false,"enableSeeking":false,"programSource":"ACQUIRED","simulcast":"LOCAL","masterReferenceKey":"0CH50CH5A0105567800020A0000000000P3254400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"}}]}]' const result = parser({ content, channel }).map(p => { p.start = p.start.toJSON() p.stop = p.stop.toJSON() @@ -34,7 +35,7 @@ it('can parse response', () => { title: 'Open Homes S3 - EP 2', description: 'Mike heads down to the Sydney beaches to visit a beachside renovation with all the bells and whistles, we see a kitchen tip and recipe anyone can do at home. We finish up in the prestigious Byron bay to visit a multi million dollar award winning home.', - icon: `https://production.togglestatic.com/shain/v1/dataservice/ResizeImage/$value?Format='jpg'&Quality=85&ImageId='4853697'&EntityType='LinearSchedule'&EntityId='788a7dd9-9b12-446f-91b4-c8ac9fec95e5'&Width=1280&Height=720&device=web_browser&subscriptions=Anonymous&segmentationTags=all`, + icon: "https://production.togglestatic.com/shain/v1/dataservice/ResizeImage/$value?Format='jpg'&Quality=85&ImageId='4853697'&EntityType='LinearSchedule'&EntityId='788a7dd9-9b12-446f-91b4-c8ac9fec95e5'&Width=1280&Height=720&device=web_browser&subscriptions=Anonymous&segmentationTags=all", episode: 2, season: 3, rating: { @@ -47,7 +48,8 @@ it('can parse response', () => { it('can handle empty guide', () => { const result = parser({ - content: `[{"channelId":"9798","startDate":"2022-06-11T21:00:00.000Z","endDate":"2022-06-12T21:00:00.000Z","schedules":[]}]`, + content: + '[{"channelId":"9798","startDate":"2022-06-11T21:00:00.000Z","endDate":"2022-06-12T21:00:00.000Z","schedules":[]}]', channel }) expect(result).toMatchObject([]) diff --git a/sites/mi.tv/mi.tv.config.js b/sites/mi.tv/mi.tv.config.js index 6de2b808..946d10e1 100644 --- a/sites/mi.tv/mi.tv.config.js +++ b/sites/mi.tv/mi.tv.config.js @@ -66,7 +66,7 @@ function parseDescription($item) { function parseIcon($item) { const backgroundImage = $item('a > div.image-parent > div.image').css('background-image') - const [_, icon] = backgroundImage.match(/url\(\'(.*)'\)/) || [null, null] + const [, icon] = backgroundImage.match(/url\('(.*)'\)/) || [null, null] return icon } diff --git a/sites/mi.tv/mi.tv.test.js b/sites/mi.tv/mi.tv.test.js index bed90649..5a4a1be0 100644 --- a/sites/mi.tv/mi.tv.test.js +++ b/sites/mi.tv/mi.tv.test.js @@ -1,4 +1,4 @@ -// npx epg-grabber --config=sites/mi.tv/mi.tv.config.js --channels=sites/mi.tv/mi.tv_ar.channels.xml --output=guide.xml --days=2 +// npm run grab -- --site=mi.tv const { parser, url } = require('./mi.tv.config.js') const dayjs = require('dayjs') @@ -12,7 +12,8 @@ const channel = { site_id: 'ar#24-7-canal-de-noticias', xmltv_id: '247CanaldeNoticias.ar' } -const content = ` Programación 24/7 Canal de Noticias Miércoles 24 de noviembre 03:00 Trasnoche de 24/7 Interés general Lo más visto de la semana en nuestra pantalla. 23:00 Noticiero central - Segunda edición Noticiero Cerramos el día con un completo resumen de los temas más relevantes con columnistas y análisis especiales para terminar el día. 01:00 Plus energético Cultural La energía tiene mucho para mostrar. Este programa reúne a las principales empresas y protagonistas de la actividad que esta revolucionando la región. ` +const content = + ' Programación 24/7 Canal de Noticias Miércoles 24 de noviembre 03:00 Trasnoche de 24/7 Interés general Lo más visto de la semana en nuestra pantalla. 23:00 Noticiero central - Segunda edición Noticiero Cerramos el día con un completo resumen de los temas más relevantes con columnistas y análisis especiales para terminar el día. 01:00 Plus energético Cultural La energía tiene mucho para mostrar. Este programa reúne a las principales empresas y protagonistas de la actividad que esta revolucionando la región. ' it('can generate valid url', () => { expect(url({ channel, date })).toBe( @@ -31,7 +32,7 @@ it('can parse response', () => { { start: '2021-11-24T03:00:00.000Z', stop: '2021-11-24T23:00:00.000Z', - title: `Trasnoche de 24/7`, + title: 'Trasnoche de 24/7', category: 'Interés general', description: 'Lo más visto de la semana en nuestra pantalla.', icon: 'https://cdn.mitvstatic.com/programs/fallback_other_l_m.jpg' @@ -39,17 +40,19 @@ it('can parse response', () => { { start: '2021-11-24T23:00:00.000Z', stop: '2021-11-25T01:00:00.000Z', - title: `Noticiero central - Segunda edición`, + title: 'Noticiero central - Segunda edición', category: 'Noticiero', - description: `Cerramos el día con un completo resumen de los temas más relevantes con columnistas y análisis especiales para terminar el día.`, + description: + 'Cerramos el día con un completo resumen de los temas más relevantes con columnistas y análisis especiales para terminar el día.', icon: 'https://cdn.mitvstatic.com/programs/fallback_other_l_m.jpg' }, { start: '2021-11-25T01:00:00.000Z', stop: '2021-11-25T02:00:00.000Z', - title: `Plus energético`, + title: 'Plus energético', category: 'Cultural', - description: `La energía tiene mucho para mostrar. Este programa reúne a las principales empresas y protagonistas de la actividad que esta revolucionando la región.`, + description: + 'La energía tiene mucho para mostrar. Este programa reúne a las principales empresas y protagonistas de la actividad que esta revolucionando la región.', icon: 'https://cdn.mitvstatic.com/programs/fallback_other_l_m.jpg' } ]) @@ -59,7 +62,7 @@ it('can handle empty guide', () => { const result = parser({ date, channel, - content: `` + content: '' }) expect(result).toMatchObject([]) }) diff --git a/sites/mi.tv/mi.tv_ar.channels.xml b/sites/mi.tv/mi.tv_ar.channels.xml index 0f82f6cc..a3a12ac2 100644 --- a/sites/mi.tv/mi.tv_ar.channels.xml +++ b/sites/mi.tv/mi.tv_ar.channels.xml @@ -1,164 +1,162 @@ - - - 24/7 Canal de Noticias - A24 - A&E Mundo - AMC - América Sports - América TV - Animal Planet - Argentinísima Satelital - Atrecine - Atreseries - Az Corazón - Baby TV Latin America - Bloomberg TV - C5N - Canal 10 Córdoba - Canal 20 Villa Maria - Canal 26 - Canal 4 - Canal (á) - Canal de la Ciudad - Canal DHE - Canal Luz - Canal Orbe 21 - Canal Rural - Canal U - Cartoon Network - Cine.ar - Cinecanal - CineLatino - Cinemax - Ciudad Magazine - CM El Canal de la Música - CN23 - CNN Chile - CNN en Español - CNN - Comedy Central - Conexión Educativa - Construir TV - Crónica TV - De Película - DeporTV - Discovery Channel - Discovery World HD - Discovery Home & Health - Discovery Kids - Discovery Science - Discovery Theater HD - Discovery Turbo - Disney Channel - E! - El Gourmet - El Nueve - El Trece - El Trece Internacional - Encuentro - ESPN Premium - Europa Europa - EWTN - Film & Arts - Food Network - Fox Sports 2 - Fox Sports 3 - Fox Sports HD - France 24 Español - FX - FXM - Galicia TV - Garage TV - Glitz - Golden Edge - Golden - Golf Channel - Gol TV - HAPSATV - HBO 2 - HBO Family - HBO Mundi - HBO Plus Panamericano HD - HBO Pop - HBO Signature - HBO Xtreme - HGTV - Hispan TV - H2 - History - Hola! TV - HTV - Investigation Discovery - I-Sat - IVC - Las Estrellas - Lifetime - LN+ - Más Chic - Metro - MTV Hits - MTV - Much - MusicTop - Nat Geo Kids - National Geographic - National Geographic Wild - NBA TV - Net TV - Nickelodeon - Nick Jr - Nicktoons - Pakapaka - Paramount Network - Pasiones - Penthouse Gold - Playboy TV - Quiero Musica en mi Idioma - Rai Italia - RT HD - Smithsonian Channel - Sony Channel - Space - Star Channel - Studio Universal - TBS - TCM - Tec TV - Telediario TV - Telefe - Telefe Córdoba - Telefe Rosario - Telefe Santa Fe - TeleHit - Telemax - Telemundo - Telesur - TLC - Tlnovelas - TN - TNT - TNT Series - TNT Sports - Tooncast - Tru TV - Turismo Visión Argentina - TV5Monde - TV Ciudad - TV Cortos - TVE - TV Globo - TV Nacional Uruguay - TV Pública - TyC Sports - TyC Sports 2 - Universal TV - Uruguay Natural TV - Venus - Viajar - Volver - VTV - Warner Channel - ZooMoo - - + + 24/7 Canal de Noticias + A24 + A&E Mundo + AMC + América Sports + América TV + Animal Planet + Argentinísima Satelital + Atrecine + Atreseries + Az Corazón + Baby TV Latin America + Bloomberg TV + C5N + Canal 10 Córdoba + Canal 20 Villa Maria + Canal 26 + Canal 4 + TV Nacional Uruguay + Canal (á) + Canal de la Ciudad + Canal Luz + Canal Orbe 21 + Canal Rural + Canal U + Cartoon Network + Cine.ar + Cinecanal + CineLatino + Cinemax + Ciudad Magazine + CM El Canal de la Música + CN23 + CNN Chile + CNN en Español + CNN + Comedy Central + Conexión Educativa + Construir TV + Crónica TV + De Película + DeporTV + Canal DHE + Discovery Channel + Discovery Home & Health + Discovery Kids + Discovery Science + Discovery Theater HD + Discovery Turbo + Discovery World HD + Disney Channel + E! + El Gourmet + El Nueve + El Trece + El Trece Internacional + Encuentro + ESPN Premium + Europa Europa + EWTN + Film & Arts + Food Network + Fox Sports 2 + Fox Sports 3 + Fox Sports HD + France 24 Español + FXM + FX + Galicia TV + Garage TV + Glitz + Golden Edge + Golden + Golf Channel + Gol TV + HAPSATV + HBO 2 + HBO Family + HBO Mundi + HBO Plus Panamericano HD + HBO Pop + HBO Signature + HBO Xtreme + HGTV + Hispan TV + H2 + History + Hola! TV + HTV + Investigation Discovery + I-Sat + IVC + LN+ + Las Estrellas + Lifetime + Más Chic + Metro + MTV Hits + MTV + Much + MusicTop + Nat Geo Kids + National Geographic + National Geographic Wild + NBA TV + Net TV + Nickelodeon + Nick Jr + Nicktoons + Pakapaka + Paramount Network + Pasiones + Penthouse Gold + Playboy TV + Quiero Musica en mi Idioma + Rai Italia + RT HD + Smithsonian Channel + Sony Channel + Space + Star Channel + Studio Universal + TBS + TCM + Tec TV + Telediario TV + Telefe + Telefe Córdoba + Telefe Rosario + Telefe Santa Fe + TeleHit + Telemax + Telemundo + Telesur + TLC + Tlnovelas + TN + TNT Series + TNT + TNT Sports + Tooncast + Tru TV + Turismo Visión Argentina + TV5Monde + TV Ciudad + TV Cortos + TVE + TV Globo + TV Pública + TyC Sports + TyC Sports 2 + Universal TV + Uruguay Natural TV + Venus + Viajar + Volver + VTV + Warner Channel + ZooMoo + diff --git a/sites/mi.tv/mi.tv_br.channels.xml b/sites/mi.tv/mi.tv_br.channels.xml index 8035791e..9dbbbb37 100644 --- a/sites/mi.tv/mi.tv_br.channels.xml +++ b/sites/mi.tv/mi.tv_br.channels.xml @@ -1,260 +1,258 @@ - - - A&E - Agro+ HD - Amazon Sat - AMC Brasil - Animal Planet - Arte 1 - AXN - Baby TV - Band Amazonas - Band Bahia - Band Curitiba - Band News - Band São Paulo - Band Sports - BBC World News Americas - Bis - - Boas Novas - Boa Vontade TV - Boomerang - Canal Brasil - Canal do Boi - Canal Futura - Canal Off - Canal Rural - Canal Viva - Cartoon Network Brasil - CGTN - Chef TV - CineBrasil TV - Cinemax Brasil - CNN Brasil - CNN International Asia Pacific - Comedy Central Brasil - Conmebol TV 1 - Conmebol TV 2 - Conmebol TV 3 - Conmebol TV 4 - Curta! - Discovery Channel Brasil - Discovery Home & Health Brasil - Discovery Kids Brasil - Discovery Science Brasil - Discovery Theater - Discovery Turbo Brasil - Discovery World Brasil - Disney Channel Brasil - Dog TV - DW Deutsch - E! Brasil - EPTV Sul de Minas - ESPN - ESPN Brasil - ESPN Extra - Eurochannel - FashionTV Brazil - Film & Arts Brasil - Fish TV - Food Network Brasil - Fox News Channel - Fox Sports 2 Brasil - Fox Sports Brasil - FX Brasil - Globo News - Gloob - Gloobinho - GNT - HBO 2 Brasil - HBO Brasil - HBO Family Brasil - HBO Mundi Brasil - HBO Plus Brasil - HBO Pop Brasil - HBO Signature Brasil - HBO Xtreme Brasil - HGTV Brasil - History 2 Brasil - History Brasil - Ideal TV - Inter TV Alto Litoral - Inter TV Cabugi - Inter TV Grande Minas - Inter TV Serramar - Investigação Discovery - I-Sat - Jovem Pan News - Lifetime Brasil - Loading - Mais na Tela - Megapix - MTV Brasil - MTV Live HD - Multishow - Music Box Brazil - Nat Geo Kids - National Geographic - National Geographic Wild - NHK World Japan - Nickelodeon - Nick Jr - NSC TV Blumenau HD - NSC TV Chapecó - NSC TV Criciúma - NSC TV Florianópolis HD - NSC TV Joinville HD - Paramount Network - Playboy TV Brazil - Premiere Clubes - Prime Box Brazil - Rai - RBA TV HD - RBI TV - RBS TV Porto Alegre HD - RBS TV RS - RBS TV Santa Maria - Record Belém - Record Cabrália - Record Goiás - Record Itapoan - Record Minas HD - Record Nacional - Record News - Record Paulista HD - Record Rio HD - Record Rio Grande do Sul HD - Record São Paulo HD - Rede 21 HD - Rede Amazônica - Rede Amazônica Manaus HD - Rede Brasil - Rede CNT Rio de Janeiro HD - Rede Família - Rede Gênesis - Rede Globo HD - Rede Gospel - Rede Internacional de TV - Rede Massa - Rede Meio Norte - Rede Minas - Rede Século 21 - Rede Super - Rede TV! - Rede TV! Rondônia - Rede Vida - RPC TV Curitiba - RPC TV Foz do Iguaçu - RPC TV Maringá - RPC TV Paranavaí - RPC TV Ponta Grossa - RTPi Brasil - SBN International - SBT MS - SBT Nacional - SBT Pará - SBT Rio - SESC TV - Sextreme - Sexy Hot - SIC Internacional - SIC TV - Smithsonian Channel HD Brasil - Sony Channel - Space - SporTV - SporTV 2 - SporTV 3 - Star Channel - Star Hits - Star Life - Studio Universal - Syfy - TBS - TCM - Telecine Action - Telecine Cult - Telecine Fun - Telecine Pipoca - Telecine Premium - Telecine Touch - Telefe Internacional - Terra Viva - TLC - TNT - TNT Series - Tooncast - Trace Brazuca - Travel Box Brazil - Tru TV - TV A Crítica - TV ALESP - TV Amapá - TV Anhanguera HD - TV Antena 10 - TV Aparecida - TV Aratu - TV Assembléia Ceará HD - TV Assembléia Minas Gerais - TV Atalaia - TV Bahia - TV Brasil - TV Cabo Branco - TV Câmara - TV Canção Nova - TV Capixaba - TV Ceará - TV Centro América Cuiabá - TV Cidade São Luíz HD - TV Cidade Verde Cuiabá HD - TV Clube - TV Correio - TV Cultura - TV Diário - TV Difusora São Luís - TVE - TVE Bahia - TVE - TV Em Tempo HD - TV Escola - TV Gazeta - TV Globo Brasília - TV Globo Nordeste HD - TV Globo Rio de Janeiro - TV Globo São Paulo - TV Goiânia Band - TV Guará HD - TV Horizonte - TV Iguaçu HD - TV Jangadeiro - TV Jornal Caruaru - TV Justiça - TV Liberal - TV Novo Tempo - TV Pajuçara - TV Pampa HD - TV Paranaíba HD - TV Paraná Turismo HD - TV Ponta Negra - TV Rá Tim Bum - TV Rio Sul HD - TV Rondônia - TV Santa Cruz HD - TV Senado - TV Sergipe HD - TV Serra Dourada HD - TVT - TV Tribuna - TV Tropical - TV União Fortaleza - TV Verdes Mares - Universal TV - Univesp TV - VH1 - Warner Channel - WooHoo - ZooMoo - - + + + A&E + Agro+ HD + Amazon Sat + AMC Brasil + Animal Planet + Arte 1 + AXN + Baby TV + Band Amazonas + Band Bahia + Band Curitiba + Band News + Band São Paulo + Band Sports + BBC World News Americas + Bis + Boas Novas + Boa Vontade TV + Boomerang + Canal Brasil + Canal do Boi + Canal Futura + Canal Off + Canal Rural + Canal Viva + Cartoon Network Brasil + CGTN + Chef TV + CineBrasil TV + Cinemax Brasil + CNN Brasil + CNN International Asia Pacific + Comedy Central Brasil + Conmebol TV 1 + Conmebol TV 2 + Conmebol TV 3 + Conmebol TV 4 + Curta! + Discovery Channel Brasil + Discovery Home & Health Brasil + Discovery Kids Brasil + Discovery Science Brasil + Discovery Theater + Discovery Turbo Brasil + Discovery World Brasil + Disney Channel Brasil + Dog TV + DW Deutsch + E! Brasil + EPTV Sul de Minas + ESPN + ESPN Brasil + ESPN Extra + Eurochannel + FashionTV Brazil + Film & Arts Brasil + Fish TV + Food Network Brasil + Fox News Channel + Fox Sports 2 Brasil + Fox Sports Brasil + FX Brasil + Globo News + Gloob + Gloobinho + GNT + HBO 2 Brasil + HBO Brasil + HBO Family Brasil + HBO Mundi Brasil + HBO Plus Brasil + HBO Pop Brasil + HBO Signature Brasil + HBO Xtreme Brasil + HGTV Brasil + History 2 Brasil + History Brasil + Ideal TV + Inter TV Alto Litoral + Inter TV Cabugi + Inter TV Grande Minas + Inter TV Serramar + Investigação Discovery + I-Sat + Jovem Pan News + Lifetime Brasil + Loading + Mais na Tela + Megapix + MTV Brasil + MTV Live HD + Multishow + Music Box Brazil + Nat Geo Kids + National Geographic + National Geographic Wild + NHK World Japan + Nickelodeon + Nick Jr + NSC TV Blumenau HD + NSC TV Chapecó + NSC TV Criciúma + NSC TV Florianópolis HD + NSC TV Joinville HD + Paramount Network + Playboy TV Brazil + Premiere Clubes + Prime Box Brazil + Rai + RBA TV HD + RBI TV + RBS TV Porto Alegre HD + RBS TV RS + RBS TV Santa Maria + Record News + Record Nacional + Record Belém + Record Cabrália + Record Goiás + Record Itapoan + Record Minas HD + Record Paulista HD + Record Rio HD + Record Rio Grande do Sul HD + Record São Paulo HD + Rede 21 HD + Rede Amazônica + Rede Amazônica Manaus HD + Rede Brasil + Rede CNT Rio de Janeiro HD + Rede Família + Rede Gênesis + Rede Globo HD + Rede Gospel + Rede Internacional de TV + Rede Massa + Rede Meio Norte + Rede Minas + Rede Século 21 + Rede Super + Rede TV! + Rede TV! Rondônia + Rede Vida + RPC TV Curitiba + RPC TV Foz do Iguaçu + RPC TV Maringá + RPC TV Paranavaí + RPC TV Ponta Grossa + RTPi Brasil + SBN International + SBT MS + SBT Nacional + SBT Pará + SBT Rio + SESC TV + Sextreme + Sexy Hot + SIC Internacional + SIC TV + Smithsonian Channel HD Brasil + Sony Channel + Space + SporTV + SporTV 2 + SporTV 3 + Star Channel + Star Hits + Star Life + Studio Universal + Syfy + TBS + TCM + Telecine Action + Telecine Cult + Telecine Fun + Telecine Pipoca + Telecine Premium + Telecine Touch + Telefe Internacional + Terra Viva + TLC + TNT + TNT Series + Tooncast + Trace Brazuca + Travel Box Brazil + Tru TV + TV A Crítica + TV ALESP + TV Amapá + TV Anhanguera HD + TV Antena 10 + TV Aparecida + TV Aratu + TV Assembléia Ceará HD + TV Assembléia Minas Gerais + TV Atalaia + TV Bahia + TV Brasil + TV Cabo Branco + TV Câmara + TV Canção Nova + TV Capixaba + TV Ceará + TV Centro América Cuiabá + TV Cidade São Luíz HD + TV Cidade Verde Cuiabá HD + TV Clube + TV Correio + TV Cultura + TV Diário + TV Difusora São Luís + TVE Bahia + TVE + TV Em Tempo HD + TVE + TV Escola + TV Gazeta + TV Globo Brasília + TV Globo Nordeste HD + TV Globo Rio de Janeiro + TV Globo São Paulo + TV Goiânia Band + TV Guará HD + TV Horizonte + TV Iguaçu HD + TV Jangadeiro + TV Jornal Caruaru + TV Justiça + TV Liberal + TV Novo Tempo + TV Pajuçara + TV Pampa HD + TV Paranaíba HD + TV Paraná Turismo HD + TV Ponta Negra + TV Rá Tim Bum + TV Rio Sul HD + TV Rondônia + TV Santa Cruz HD + TV Senado + TV Sergipe HD + TV Serra Dourada HD + TVT + TV Tribuna + TV Tropical + TV União Fortaleza + TV Verdes Mares + Universal TV + Univesp TV + VH1 + Warner Channel + WooHoo + ZooMoo + diff --git a/sites/mi.tv/mi.tv_cl.channels.xml b/sites/mi.tv/mi.tv_cl.channels.xml index 93f565c0..e825e0e0 100644 --- a/sites/mi.tv/mi.tv_cl.channels.xml +++ b/sites/mi.tv/mi.tv_cl.channels.xml @@ -1,84 +1,82 @@ - - - 13C - 24 Horas - AMC - America Sports - ARTV - Az Cinema - Azteca Uno - Boomerang - Canal 13 - Canal 24 Horas - Canal 7 Jujuy - Canal 9 Bío-Bío Televisión - Canal del Sur - Canal Ecool - Canal ISB - Canal Vasco - Caracol TV Internacional - Cartoon Network - CCTV 4 - CDF Básico - CDF HD - CDF Premium - CDO Básico - CDO HD - CDO Premium - ChileVisión - Concert Channel - Diputados TV - Discovery Channel - Discovery Kids - El Gourmet - Enlace - ESPN 2 - ESPN 3 - ESPN 4 - ETC TV - EuroNews - Fox Sports 1 HD - Fox Sports 2 - Fox Sports - France 24 English - FunBox - FX - FXM - HBO - La Red - María+Visión - Mega - National Geographic - NHK World Premium - Rec TV - RMS - Space - Star Action +3 - Star Channel - Star Cinema - Star Classics - Star Comedy - Star Fun +3 - Star Hits - Star Life - Star Series +3 - Studio Universal - TBS - TCM - Teletrak - TNT - TVN - TV Nuevo Tiempo - TV Senado - TVU - TyC Sports - UCV TV - Ufrovisión - Unicable - Universal TV - Vía X - Warner Channel - Zona Latina - - + + 13C + 24 Horas + AMC + America Sports + ARTV + Az Cinema + Azteca Uno + Boomerang + Canal 13 + Canal 24 Horas + Canal 7 Jujuy + Canal 9 Bío-Bío Televisión + Canal del Sur + Canal Ecool + Canal ISB + Canal Vasco + Caracol TV Internacional + Cartoon Network + CCTV 4 + CDF Básico + CDF HD + CDF Premium + CDO Básico + CDO HD + CDO Premium + ChileVisión + Concert Channel + Diputados TV + Discovery Channel + Discovery Kids + El Gourmet + Enlace + ESPN 2 + ESPN 3 + ESPN 4 + ETC TV + EuroNews + Fox Sports 1 HD + Fox Sports 2 + Fox Sports + France 24 English + FunBox + FX + FXM + HBO + La Red + María+Visión + Mega + National Geographic + NHK World Premium + TV Nuevo Tiempo + Rec TV + RMS + Space + Star Action +3 + Star Channel + Star Cinema + Star Classics + Star Comedy + Star Fun +3 + Star Hits + Star Life + Star Series +3 + Studio Universal + TBS + TCM + Teletrak + TNT + TVN + TV Senado + TVU + TyC Sports + UCV TV + Ufrovisión + Unicable + Universal TV + Vía X + Warner Channel + Zona Latina + diff --git a/sites/mi.tv/mi.tv_co.channels.xml b/sites/mi.tv/mi.tv_co.channels.xml index 0081b927..baa2c78c 100644 --- a/sites/mi.tv/mi.tv_co.channels.xml +++ b/sites/mi.tv/mi.tv_co.channels.xml @@ -1,46 +1,44 @@ - - - Aliento Vision - AXN - Az Mundo HD - Canal 1 - Canal C - Canal CaliTV - Canal Capital - Canal Cartagena - Canal TRO - Canal U - Caracol TV - Comedy Central HD - Cosmovisión - Cristovisión - Discovery Kids - Enlace Juvenil - Fashion One HD - Fox Sports 2 HD - FX HD - Golden Premier HD - HBO HD Este - Investigation Discovery HD - MTV Live HD - RCN TV HD - - Star Action - Star Channel - Star Fun - Star Life - Star Series - Sun Channel - Teleantioquia HD - Telemedellín HD - Tele Nostalgia - Tele Vid HD - TLC - TNT Series - Trace Sport Stars - Trece - Ve Plus - Win Sports HD - - + + + Aliento Vision + AXN + Az Mundo HD + Canal CaliTV + Canal 1 + Canal C + Canal Capital + Canal Cartagena + RCN TV HD + Canal TRO + Canal U + Caracol TV + Comedy Central HD + Cosmovisión + Cristovisión + Discovery Kids + Enlace Juvenil + Fashion One HD + Fox Sports 2 HD + FX HD + Golden Premier HD + HBO HD Este + Investigation Discovery HD + MTV Live HD + Star Action + Star Channel + Star Fun + Star Life + Star Series + Sun Channel + Teleantioquia HD + Telemedellín HD + Tele Nostalgia + Tele Vid HD + TLC + TNT Series + Trace Sport Stars + Trece + Ve Plus + Win Sports HD + diff --git a/sites/mi.tv/mi.tv_gt.channels.xml b/sites/mi.tv/mi.tv_gt.channels.xml index 11708283..8332c413 100644 --- a/sites/mi.tv/mi.tv_gt.channels.xml +++ b/sites/mi.tv/mi.tv_gt.channels.xml @@ -1,23 +1,21 @@ - - - Cablenoticias - Canal Antigua - Cartoon Network - Cinecanal - Discovery Home & Health - Distrito Comedia - Guatevisión - MTV Latino - MultiPremier - National Geographic - - Star Life - TDN - Telemicro Internacional - Televen - TNT - TV Agro - XTime Channel - - + + + Cablenoticias + Canal Antigua + Cartoon Network + Cinecanal + Discovery Home & Health + Distrito Comedia + Guatevisión + MTV Latino + MultiPremier + National Geographic + Star Life + TDN + Telemicro Internacional + Televen + TNT + TV Agro + XTime Channel + diff --git a/sites/mi.tv/mi.tv_hn.channels.xml b/sites/mi.tv/mi.tv_hn.channels.xml index cb77ccbb..acc8ea78 100644 --- a/sites/mi.tv/mi.tv_hn.channels.xml +++ b/sites/mi.tv/mi.tv_hn.channels.xml @@ -1,27 +1,25 @@ - - - 3ABN Latino - Alfa & Omega Vision - Azteca 7 - Bandamax - Bethel TV - Canal 11 - CCI Channel - CDM - Cinecanal - Cubavisión - Disney Channel - DTV - Fox Sports - Gol TV - HCH - Studio Universal - Telecadena 7 y 4 - Teleceiba - Telesistema 3 y 7 - Televicentro - Universal TV - VTV - - + + 3ABN Latino + Alfa & Omega Vision + Azteca 7 + Bandamax + Bethel TV + Canal 11 + CCI Channel + CDM + Cinecanal + Cubavisión + Disney Channel + DTV + Fox Sports + Gol TV + HCH + Studio Universal + Telecadena 7 y 4 + Teleceiba + Telesistema 3 y 7 + Televicentro + Universal TV + VTV + diff --git a/sites/mi.tv/mi.tv_mx.channels.xml b/sites/mi.tv/mi.tv_mx.channels.xml index a37881a7..b7db8741 100644 --- a/sites/mi.tv/mi.tv_mx.channels.xml +++ b/sites/mi.tv/mi.tv_mx.channels.xml @@ -1,31 +1,29 @@ - - - AMC - Azteca 7 - Boomerang - Canal 22 Metropolitana y Nacional - El Nu9ve - Las Estrellas - Canal 5 - Cartoon Network - Cine Mexicano - De Pelicula HD - Discovery Channel - Disney Channel - El Financiero Bloomberg - Foro TV - Milenio TV - Nu Music - Once México - Space - Star Channel - Star Life - Studio Universal - Tlnovelas - TNT - Universal TV - Warner Channel - WOBI TV - - + + AMC + Azteca 7 + Boomerang + Canal 22 Metropolitana y Nacional + Canal 5 + Cartoon Network + Cine Mexicano + De Pelicula HD + Discovery Channel + Disney Channel + El Financiero Bloomberg + El Nu9ve + Foro TV + Las Estrellas + Milenio TV + Nu Music + Space + Star Channel + Star Life + Studio Universal + Tlnovelas + TNT + Universal TV + Warner Channel + WOBI TV + Once México + diff --git a/sites/mi.tv/mi.tv_pe.channels.xml b/sites/mi.tv/mi.tv_pe.channels.xml index 850fc648..40fcb0d5 100644 --- a/sites/mi.tv/mi.tv_pe.channels.xml +++ b/sites/mi.tv/mi.tv_pe.channels.xml @@ -1,24 +1,22 @@ - - - - ATV - ATV+ - ATV Sur - BYU TV - City TV - DW Deutsch+ - Global TV - Latele - Latina - Más Chic - Mi Gente TV - Nickelodeon - Panamericana TV - Rumba TV - Telefuturo - TV Perú - Unitel - Willax TV - - + + + ATV + ATV+ + ATV Sur + BYU TV + City TV + DW Deutsch+ + Global TV + Latele + Latina + Más Chic + Mi Gente TV + Nickelodeon + Panamericana TV + Rumba TV + Telefuturo + TV Perú + Unitel + Willax TV + diff --git a/sites/mi.tv/mi.tv_sv.channels.xml b/sites/mi.tv/mi.tv_sv.channels.xml index 92cb7fa2..8a9e0ca4 100644 --- a/sites/mi.tv/mi.tv_sv.channels.xml +++ b/sites/mi.tv/mi.tv_sv.channels.xml @@ -1,17 +1,15 @@ - - - Canal 2 - Canal 4 - Canal 6 - Canal 10 - Canal 12 - Canal Claro - Gentevé - Megavisión Canal 19 - Megavisión Canal 21 - TVO Canal 23 - TVX - VTV Canal 35 - - + + Canal 10 + Canal 12 + Canal 2 + Canal 4 + Canal 6 + Canal Claro + Gentevé + Megavisión Canal 19 + Megavisión Canal 21 + TVO Canal 23 + TVX + VTV Canal 35 + diff --git a/sites/mncvision.id/mncvision.id.channels.xml b/sites/mncvision.id/mncvision.id.channels.xml index c01defef..fe2fbb6b 100644 --- a/sites/mncvision.id/mncvision.id.channels.xml +++ b/sites/mncvision.id/mncvision.id.channels.xml @@ -1,199 +1,197 @@ - - - ABC Australia - Aljazeera - Animal Planet - Animax Asia - ANTV - Arirang - Asian Food Network - AXN - Baby TV - BBC Earth - BBC World News - BeIn Sports 1 - BeIn Sports 3 - BTV - Besmart - Bloomberg TV - Boomerang - Cartoon - CBeebies - Celestial Classic Movies - Celestial Movies - CGTN - CGTN Documentary - Cinemax - CNA - CNBC - CNN International - Crime + Investigation - Discovery Channel - DW English - Ent - Fight Sports - FMN - Fox News Channel - France 24 - Galaxy - Galaxy Premium - GTV - HBO Asia - HBO Family Asia - HBO Hits - HBO Signature Asia - HGTV Asia - History - Hits - Hits Movies - IDX Channel - Ie - IMC - Indosiar - INews - Jak TV - Kids TV - Kix - Kompas TV - Life - Lifestyle & Fashion - Lifetime Asia - Metro TV - Miao Mi - MNC News - MNC Sports - MNC Sports 2 - MNC Sports 3 - MNC TV - M Shop Signature - M Shop Super Sale! - Music TV - Muslim TV - National Geographic - National Geographic Wild - NET - NHK World Japan - NHK World Premium - Nickelodeon - Nick Jr Asia - OK TV - One - Quran TV - RCTI - SCTV - SEA Today - Soccer Channel - SPOTV - SPOTV 2 - Tawaf TV - Thrill - TLC - Trans 7 - Trans TV - tvN - tvN Movies - TVOne - TVRI Nasional - Vision Prime - Warner TV - Zee Bioskop - ABC Australia - Aljazeera - Animal Planet - Animax - ANTV - Arirang World - Asian Food Network - AXN - Baby TV - BBC Earth - BBC World News - BeIn Sports 1 - BeIn Sports 3 - BTV - Besmart - Bloomberg TV - Boomerang - Cartoon Network - CBeebies Asia - Celestial Classic Movies - Celestial Movies - CGTN - CGTN Documentary - Cinemax Asia - CNA - CNBC - CNN International - Crime + Investigation - Discovery Channel - DW English - Ent - Fight Sports - FMN - Fox News Channel - France 24 - Galaxy - Galaxy Premium - GTV - HBO - HBO Family - HBO Hits - HBO Signature - HGTV - History - Hits - Hits Movies - IDX Channel - Ie - IMC - Indosiar - INews - Jak TV - Kids TV - Kix - Kompas TV - Life - Lifestyle & Fashion - Lifetime - Metro TV - Miao Mi - MNC News - MNC Sports - MNC Sports 2 - MNC Sports 3 - MNC TV - M Shop Signature - M Shop Super Sale! - Music TV - Muslim TV - National Geographic - National Geographic Wild - NET - NHK World Japan - NHK World Premium - Nickelodeon - Nick Jr - OK TV - One - Quran TV - RCTI - SCTV - SEA Today - Soccer Channel - SPOTV - SPOTV 2 - Tawaf TV - Thrill - TLC - Trans 7 - Trans TV - tvN - tvN Movies - TVOne - TVRI Nasional - Vision Prime - Warner TV - Zee Bioskop - - + + ABC Australia + Aljazeera + Animal Planet + Animax Asia + ANTV + Arirang + Asian Food Network + AXN + Baby TV + BBC Earth + BBC World News + BeIn Sports 1 + BeIn Sports 3 + BTV + Besmart + Bloomberg TV + Boomerang + Cartoon + CBeebies + Celestial Classic Movies + Celestial Movies + CGTN + CGTN Documentary + Cinemax + CNA + CNBC + CNN International + Crime + Investigation + Discovery Channel + DW English + Ent + Fight Sports + FMN + Fox News Channel + France 24 + Galaxy + Galaxy Premium + GTV + HBO Asia + HBO Family Asia + HBO Hits + HBO Signature Asia + HGTV Asia + History + Hits + Hits Movies + IDX Channel + Ie + IMC + Indosiar + INews + Jak TV + Kids TV + Kix + Kompas TV + Life + Lifestyle & Fashion + Lifetime Asia + Metro TV + Miao Mi + MNC News + MNC Sports + MNC Sports 2 + MNC Sports 3 + MNC TV + M Shop Signature + M Shop Super Sale! + Music TV + Muslim TV + National Geographic + National Geographic Wild + NET + NHK World Japan + NHK World Premium + Nickelodeon + Nick Jr Asia + OK TV + One + Quran TV + RCTI + SCTV + SEA Today + Soccer Channel + SPOTV + SPOTV 2 + Tawaf TV + Thrill + TLC + Trans 7 + Trans TV + tvN + tvN Movies + TVOne + TVRI Nasional + Vision Prime + Warner TV + Zee Bioskop + ABC Australia + Aljazeera + Animal Planet + Animax + ANTV + Arirang World + Asian Food Network + AXN + Baby TV + BBC Earth + BBC World News + BeIn Sports 1 + BeIn Sports 3 + BTV + Besmart + Bloomberg TV + Boomerang + Cartoon Network + CBeebies Asia + Celestial Classic Movies + Celestial Movies + CGTN + CGTN Documentary + Cinemax Asia + CNA + CNBC + CNN International + Crime + Investigation + Discovery Channel + DW English + Ent + Fight Sports + FMN + Fox News Channel + France 24 + Galaxy + Galaxy Premium + GTV + HBO + HBO Family + HBO Hits + HBO Signature + HGTV + History + Hits + Hits Movies + IDX Channel + Ie + IMC + Indosiar + INews + Jak TV + Kids TV + Kix + Kompas TV + Life + Lifestyle & Fashion + Lifetime + Metro TV + Miao Mi + MNC News + MNC Sports + MNC Sports 2 + MNC Sports 3 + MNC TV + M Shop Signature + M Shop Super Sale! + Music TV + Muslim TV + National Geographic + National Geographic Wild + NET + NHK World Japan + NHK World Premium + Nickelodeon + Nick Jr + OK TV + One + Quran TV + RCTI + SCTV + SEA Today + Soccer Channel + SPOTV + SPOTV 2 + Tawaf TV + Thrill + TLC + Trans 7 + Trans TV + tvN + tvN Movies + TVOne + TVRI Nasional + Vision Prime + Warner TV + Zee Bioskop + diff --git a/sites/mncvision.id/mncvision.id.config.js b/sites/mncvision.id/mncvision.id.config.js index 012dad43..1b5949f4 100644 --- a/sites/mncvision.id/mncvision.id.config.js +++ b/sites/mncvision.id/mncvision.id.config.js @@ -88,14 +88,14 @@ module.exports = { function parseSeason($item) { const title = parseTitle($item) - const [_, season] = title.match(/ S(\d+)/) || [null, null] + const [, season] = title.match(/ S(\d+)/) || [null, null] return season ? parseInt(season) : null } function parseEpisode($item) { const title = parseTitle($item) - const [_, episode] = title.match(/ Ep (\d+)/) || [null, null] + const [, episode] = title.match(/ Ep (\d+)/) || [null, null] return episode ? parseInt(episode) : null } @@ -158,7 +158,7 @@ function loadLangCookies(channel) { return axios .get(url, { timeout: 30000 }) .then(r => parseCookies(r.headers)) - .catch(err => null) + .catch(error => console.log(error.message)) } async function loadDescription($item, cookies) { @@ -170,7 +170,7 @@ async function loadDescription($item, cookies) { timeout: 30000 }) .then(r => r.data) - .catch(err => null) + .catch(error => console.log(error.message)) if (!content) return null const $page = cheerio.load(content) diff --git a/sites/mncvision.id/mncvision.id.test.js b/sites/mncvision.id/mncvision.id.test.js index f2638a59..81995497 100644 --- a/sites/mncvision.id/mncvision.id.test.js +++ b/sites/mncvision.id/mncvision.id.test.js @@ -1,5 +1,5 @@ -// npm run channels:parse --config=./sites/mncvision.id/mncvision.id.config.js --output=./sites/mncvision.id/mncvision.id.channels.xml -// npx epg-grabber --config=sites/mncvision.id/mncvision.id.config.js --channels=sites/mncvision.id/mncvision.id.channels.xml --output=guide.xml --timeout=30000 --days=2 +// npm run channels:parse -- --config=./sites/mncvision.id/mncvision.id.config.js --output=./sites/mncvision.id/mncvision.id.channels.xml +// npm run grab -- --site=mncvision.id const { parser, url, request } = require('./mncvision.id.config.js') const fs = require('fs') diff --git a/sites/moji.id/moji.id.channels.xml b/sites/moji.id/moji.id.channels.xml index 5157482b..61747315 100644 --- a/sites/moji.id/moji.id.channels.xml +++ b/sites/moji.id/moji.id.channels.xml @@ -1,7 +1,4 @@ - - - Moji - - \ No newline at end of file + + Moji + \ No newline at end of file diff --git a/sites/moji.id/moji.id.config.js b/sites/moji.id/moji.id.config.js index b9c4ffe3..d5656ce1 100644 --- a/sites/moji.id/moji.id.config.js +++ b/sites/moji.id/moji.id.config.js @@ -11,94 +11,112 @@ dayjs.extend(customParseFormat) const currentYear = new Date().getFullYear() module.exports = { - site: 'moji.id', - days: 4, - output: 'moji.id.guide.xml', - channels: 'moji.id.channels.xml', - lang: 'en', - delay: 5000, + site: 'moji.id', + days: 4, + output: 'moji.id.guide.xml', + channels: 'moji.id.channels.xml', + lang: 'en', + delay: 5000, - url: function () { - return 'https://moji.id/schedule' - }, + url: function () { + return 'https://moji.id/schedule' + }, - request: { - method: 'GET', - timeout: 5000, - cache: { ttl: 60 * 60 * 1000 }, - headers: { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36' } - }, - - logo: function (context) { - return context.channel.logo - }, - - parser: function (context) { - const programs = [] - const items = parseItems(context) - - items.forEach(function(item, i) { - programs.push({ - title: item.progTitle, - description: item.progDesc, - start: item.progStart, - stop: item.progStop - }) - }) - - return programs + request: { + method: 'GET', + timeout: 5000, + cache: { ttl: 60 * 60 * 1000 }, + headers: { + 'User-Agent': + 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36' } + }, + + logo: function (context) { + return context.channel.logo + }, + + parser: function (context) { + const programs = [] + const items = parseItems(context) + + items.forEach(item => { + programs.push({ + title: item.progTitle, + description: item.progDesc, + start: item.progStart, + stop: item.progStop + }) + }) + + return programs + } } function parseItems(context) { - const $ = cheerio.load(context.content) - const schDayMonths = $('.date-slider .month').toArray() - const schPrograms = $('.desc-slider .list-slider').toArray() - const monthDate = dayjs(context.date).format('MMM DD') - const items = []; + const $ = cheerio.load(context.content) + const schDayMonths = $('.date-slider .month').toArray() + const schPrograms = $('.desc-slider .list-slider').toArray() + const monthDate = dayjs(context.date).format('MMM DD') + const items = [] - schDayMonths.forEach(function(schDayMonth, i) { - if (monthDate == $(schDayMonth).text()) { - let schDayPrograms = $(schPrograms[i]).find('.accordion').toArray() - schDayPrograms.forEach(function(program, i) { - let itemDay = { - progStart: parseStart(schDayMonth, program), - progStop: parseStop(schDayMonth, program, schDayPrograms[i+1]), - progTitle: parseTitle(program), - progDesc: parseDescription(program) - }; - items.push(itemDay) - }) + schDayMonths.forEach(function (schDayMonth, i) { + if (monthDate == $(schDayMonth).text()) { + let schDayPrograms = $(schPrograms[i]).find('.accordion').toArray() + schDayPrograms.forEach(function (program, i) { + let itemDay = { + progStart: parseStart(schDayMonth, program), + progStop: parseStop(schDayMonth, program, schDayPrograms[i + 1]), + progTitle: parseTitle(program), + progDesc: parseDescription(program) } - }) + items.push(itemDay) + }) + } + }) - return items + return items } function parseTitle(item) { - return cheerio.load(item)('.name-prog').text() + return cheerio.load(item)('.name-prog').text() } function parseDescription(item) { - return cheerio.load(item)('.content-acc span').text() + return cheerio.load(item)('.content-acc span').text() } function parseStart(schDayMonth, item) { - let monthDate = cheerio.load(schDayMonth).text().split(' ') - let startTime = cheerio.load(item)('.pkl').text() - let progStart = dayjs.tz(currentYear + ' ' + monthDate[0] + ' ' + monthDate[1] + ' ' + startTime, 'YYYY MMM DD HH:mm', 'Asia/Jakarta') - return progStart + let monthDate = cheerio.load(schDayMonth).text().split(' ') + let startTime = cheerio.load(item)('.pkl').text() + let progStart = dayjs.tz( + currentYear + ' ' + monthDate[0] + ' ' + monthDate[1] + ' ' + startTime, + 'YYYY MMM DD HH:mm', + 'Asia/Jakarta' + ) + return progStart } function parseStop(schDayMonth, itemCurrent, itemNext) { - let monthDate = cheerio.load(schDayMonth).text().split(' ') - - if (itemNext) { - let stopTime = cheerio.load(itemNext)('.pkl').text() - return dayjs.tz(currentYear + ' ' + monthDate[0] + ' ' + monthDate[1] + ' ' + stopTime, 'YYYY MMM DD HH:mm', 'Asia/Jakarta') - } - else - { - return dayjs.tz(currentYear + ' ' + monthDate[0] + ' ' + (parseInt(monthDate[1]) + 1).toString().padStart(2, '0') + ' 00:00', 'YYYY MMM DD HH:mm', 'Asia/Jakarta') - } -} \ No newline at end of file + let monthDate = cheerio.load(schDayMonth).text().split(' ') + + if (itemNext) { + let stopTime = cheerio.load(itemNext)('.pkl').text() + return dayjs.tz( + currentYear + ' ' + monthDate[0] + ' ' + monthDate[1] + ' ' + stopTime, + 'YYYY MMM DD HH:mm', + 'Asia/Jakarta' + ) + } else { + return dayjs.tz( + currentYear + + ' ' + + monthDate[0] + + ' ' + + (parseInt(monthDate[1]) + 1).toString().padStart(2, '0') + + ' 00:00', + 'YYYY MMM DD HH:mm', + 'Asia/Jakarta' + ) + } +} diff --git a/sites/moji.id/moji.id.test.js b/sites/moji.id/moji.id.test.js index b579aa37..51182732 100644 --- a/sites/moji.id/moji.id.test.js +++ b/sites/moji.id/moji.id.test.js @@ -1,4 +1,4 @@ -// npx epg-grabber --config=sites/moji.id/moji.id.config.js --channels=sites/moji.id/moji.id.channels.xml --output=guide.xml --days=2 +// npm run grab -- --site=moji.id // npx jest moji.id.test.js const { url, parser } = require('./moji.id.config.js') @@ -7,33 +7,32 @@ const utc = require('dayjs/plugin/utc') dayjs.extend(utc) const date = dayjs.utc('2023-08-18', 'YYYY-MM-DD').startOf('d') -const channel = { site_id: '0', xmltv_id: 'moji.id', lang: 'en', logo: 'https://moji.id/site/uploads/logo/62f9387ce00a2-224-x-71.png' } - -const content = `scheduleFriAug 18SatAug 19SunAug 20Jam TayangProgram00:00TRUSTInformasi seputar menjaga vitalitas pria00:302023 AVC CHALLENGE CUP FOR WOMEN (RECORDED)India Vs. Vietnam02:30ONE CHAMPIONSHIP 2021Siaran laga-laga pertandingan tinju gaya bebas internasional. Meyuguhkan pertarungan sengit dari para petarung profeisional kelas dunia.03:30VOLLEYBALL NATION'S LEAGUE 2023 (RECORDED)TURKI vs BRAZIL05:00MOJI SPORTMOJI SPORT06:15LIPUTAN 6 PAGI MOJIKompilasi ragam berita hard news dan soft news baik dari dalam negeri maupun internasional juga info prediksi cuaca di wilayah Indonesia07:00UNGKAPLiputan investigasi seputar berbagai topik dan peristiwa hangat serta kontroversial yang terjadi di Indonesia08:00PIALA KAPOLRI 2023 PUTRI (LIVE)PIALA KAPOLRI 2023 PUTRI (LIVE)10:30SERIES PAGIGANTENG GANTENG SERIGALA12:30DIAM-DIAM SUKADIAM-DIAM SUKA13:30PIALA KAPOLRI 2023 PUTRA (LIVE)PIALA KAPOLRI 2023 PUTRA (LIVE)16:00PIALA KAPOLRI 2023 PUTRI (LIVE)PIALA KAPOLRI 2023 PUTRI (LIVE)18:00PIALA KAPOLRI 2023 PUTRA (LIVE)PIALA KAPOLRI 2023 PUTRA (LIVE)20:00MOJI DRAMA (CHHOTI SARDARNI)CHHOTI SARDARNI21:30SINEMA MALAM (BIDADARI CANTIK DI RUMAH KOST)(BIDADARI CANTIK DI RUMAH KOST23:00TRUSTInformasi seputar menjaga vitalitas pria23:30TRUSTInformasi seputar menjaga vitalitas pria00:00TRUSTInformasi seputar menjaga vitalitas pria00:30UNGKAPLiputan investigasi seputar berbagai topik dan peristiwa hangat serta kontroversial yang terjadi di Indonesia01:00EXCLUSIVE INTERVIEWPETER SCHMEICHEL01:30PREMIER LEAGUE (LIVE)NOTT'M FOREST VS SHEFFIELD UTD03:30VOLLEYBALL NATION'S LEAGUE 2023 FOR WOMEN (RECORDED)GERMANY vs USA05:00MOJI SPORTMOJI SPORT06:15LIPUTAN 6 PAGI MOJIKompilasi ragam berita hard news dan soft news baik dari dalam negeri maupun internasional juga info prediksi cuaca di wilayah Indonesia07:00UNGKAPLiputan investigasi seputar berbagai topik dan peristiwa hangat serta kontroversial yang terjadi di Indonesia08:00TRUSTInformasi Kesehatan08:30TRUSTInformasi Kesehatan09:00MASAK APA CEU?Jenny Hendrawati, seorang koki selebritis, menyajikan beraneka hidangan internasional serta membagikan tips-tips seputar dunia memasak yang mudah diikuti oleh para pemirsa di rumah.09:30BISIK PAGIberbagai berita dan perkembangan terbaru dari sederet kasus yang menimpa sejumlah sosok ternama di Indonesia.10:30GANTENG GANTENG SERIGALAGANTENG GANTENG SERIGALA11:30PIALA KAPOLRI 2023 PUTRI (LIVE)PIALA KAPOLRI 2023 PUTRI (LIVE)14:00PIALA KAPOLRI 2023 PUTRA (LIVE)PIALA KAPOLRI 2023 PUTRA (LIVE)16:00PIALA KAPOLRI 2023 PUTRI (LIVE)PIALA KAPOLRI 2023 PUTRI (LIVE)18:00PIALA KAPOLRI 2023 PUTRA (LIVE)PIALA KAPOLRI 2023 PUTRA (LIVE)20:00MOJI DRAMA (CHHOTI SARDARNI)CHHOTI SARDARNI20:45PREMIER LEAGUE (LIVE)WOLVES VS BRIGHTON00:00TRUSTInformasi seputar menjaga vitalitas pria00:302023 AVC CHALLENGE CUP FOR WOMEN (RECORDED)Chinese Taipei Vs. India02:30ONE CHAMPIONSHIP 2021Siaran laga-laga pertandingan tinju gaya bebas internasional. Meyuguhkan pertarungan sengit dari para petarung profeisional kelas dunia.03:30VOLLEYBALL NATION'S LEAGUE 2023 FOR WOMEN (RECORDED)THAILAND vs JAPAN05:00MOJI SPORTMOJI SPORT06:15LIPUTAN 6 PAGI MOJIKompilasi ragam berita hard news dan soft news baik dari dalam negeri maupun internasional juga info prediksi cuaca di wilayah Indonesia07:00UNGKAPLiputan investigasi seputar berbagai topik dan peristiwa hangat serta kontroversial yang terjadi di Indonesia08:00TRUSTInformasi Kesehatan08:30TRUSTInformasi Kesehatan09:00MASAK APA CEU?Jenny Hendrawati, seorang koki selebritis, menyajikan beraneka hidangan internasional serta membagikan tips-tips seputar dunia memasak yang mudah diikuti oleh para pemirsa di rumah.09:30BISIK PAGIberbagai berita dan perkembangan terbaru dari sederet kasus yang menimpa sejumlah sosok ternama di Indonesia.10:30GANTENG GANTENG SERIGALAGANTENG GANTENG SERIGALA12:30DIAM-DIAM SUKADIAM-DIAM SUKA14:30SINEMA SIANGFTV16:00SEA VLEAGUE (RECORDED)PHILIPPINES VS INDONESIA18:00NETIZEN UPDATEberbagai berita dan perkembangan terbaru dari sederet kasus yang menimpa sejumlah sosok ternama di Indonesia.19:00MOJI DRAMA (CHHOTI SARDARNI)CHHOTI SARDARNI21:00MOJI MOVIE (LONDON LOVE STORY)LONDON LOVE STORY23:00TRUSTInformasi seputar menjaga vitalitas pria23:30TRUSTInformasi seputar menjaga vitalitas pria` - -const context = { - 'content': content, - 'date': date +const channel = { + site_id: '0', + xmltv_id: 'moji.id', + lang: 'en', + logo: 'https://moji.id/site/uploads/logo/62f9387ce00a2-224-x-71.png' } +const content = + 'scheduleFriAug 18SatAug 19SunAug 20Jam TayangProgram00:00TRUSTInformasi seputar menjaga vitalitas pria00:302023 AVC CHALLENGE CUP FOR WOMEN (RECORDED)India Vs. Vietnam02:30ONE CHAMPIONSHIP 2021Siaran laga-laga pertandingan tinju gaya bebas internasional. Meyuguhkan pertarungan sengit dari para petarung profeisional kelas dunia.03:30VOLLEYBALL NATION\'S LEAGUE 2023 (RECORDED)TURKI vs BRAZIL05:00MOJI SPORTMOJI SPORT06:15LIPUTAN 6 PAGI MOJIKompilasi ragam berita hard news dan soft news baik dari dalam negeri maupun internasional juga info prediksi cuaca di wilayah Indonesia07:00UNGKAPLiputan investigasi seputar berbagai topik dan peristiwa hangat serta kontroversial yang terjadi di Indonesia08:00PIALA KAPOLRI 2023 PUTRI (LIVE)PIALA KAPOLRI 2023 PUTRI (LIVE)10:30SERIES PAGIGANTENG GANTENG SERIGALA12:30DIAM-DIAM SUKADIAM-DIAM SUKA13:30PIALA KAPOLRI 2023 PUTRA (LIVE)PIALA KAPOLRI 2023 PUTRA (LIVE)16:00PIALA KAPOLRI 2023 PUTRI (LIVE)PIALA KAPOLRI 2023 PUTRI (LIVE)18:00PIALA KAPOLRI 2023 PUTRA (LIVE)PIALA KAPOLRI 2023 PUTRA (LIVE)20:00MOJI DRAMA (CHHOTI SARDARNI)CHHOTI SARDARNI21:30SINEMA MALAM (BIDADARI CANTIK DI RUMAH KOST)(BIDADARI CANTIK DI RUMAH KOST23:00TRUSTInformasi seputar menjaga vitalitas pria23:30TRUSTInformasi seputar menjaga vitalitas pria00:00TRUSTInformasi seputar menjaga vitalitas pria00:30UNGKAPLiputan investigasi seputar berbagai topik dan peristiwa hangat serta kontroversial yang terjadi di Indonesia01:00EXCLUSIVE INTERVIEWPETER SCHMEICHEL01:30PREMIER LEAGUE (LIVE)NOTT\'M FOREST VS SHEFFIELD UTD03:30VOLLEYBALL NATION\'S LEAGUE 2023 FOR WOMEN (RECORDED)GERMANY vs USA05:00MOJI SPORTMOJI SPORT06:15LIPUTAN 6 PAGI MOJIKompilasi ragam berita hard news dan soft news baik dari dalam negeri maupun internasional juga info prediksi cuaca di wilayah Indonesia07:00UNGKAPLiputan investigasi seputar berbagai topik dan peristiwa hangat serta kontroversial yang terjadi di Indonesia08:00TRUSTInformasi Kesehatan08:30TRUSTInformasi Kesehatan09:00MASAK APA CEU?Jenny Hendrawati, seorang koki selebritis, menyajikan beraneka hidangan internasional serta membagikan tips-tips seputar dunia memasak yang mudah diikuti oleh para pemirsa di rumah.09:30BISIK PAGIberbagai berita dan perkembangan terbaru dari sederet kasus yang menimpa sejumlah sosok ternama di Indonesia.10:30GANTENG GANTENG SERIGALAGANTENG GANTENG SERIGALA11:30PIALA KAPOLRI 2023 PUTRI (LIVE)PIALA KAPOLRI 2023 PUTRI (LIVE)14:00PIALA KAPOLRI 2023 PUTRA (LIVE)PIALA KAPOLRI 2023 PUTRA (LIVE)16:00PIALA KAPOLRI 2023 PUTRI (LIVE)PIALA KAPOLRI 2023 PUTRI (LIVE)18:00PIALA KAPOLRI 2023 PUTRA (LIVE)PIALA KAPOLRI 2023 PUTRA (LIVE)20:00MOJI DRAMA (CHHOTI SARDARNI)CHHOTI SARDARNI20:45PREMIER LEAGUE (LIVE)WOLVES VS BRIGHTON00:00TRUSTInformasi seputar menjaga vitalitas pria00:302023 AVC CHALLENGE CUP FOR WOMEN (RECORDED)Chinese Taipei Vs. India02:30ONE CHAMPIONSHIP 2021Siaran laga-laga pertandingan tinju gaya bebas internasional. Meyuguhkan pertarungan sengit dari para petarung profeisional kelas dunia.03:30VOLLEYBALL NATION\'S LEAGUE 2023 FOR WOMEN (RECORDED)THAILAND vs JAPAN05:00MOJI SPORTMOJI SPORT06:15LIPUTAN 6 PAGI MOJIKompilasi ragam berita hard news dan soft news baik dari dalam negeri maupun internasional juga info prediksi cuaca di wilayah Indonesia07:00UNGKAPLiputan investigasi seputar berbagai topik dan peristiwa hangat serta kontroversial yang terjadi di Indonesia08:00TRUSTInformasi Kesehatan08:30TRUSTInformasi Kesehatan09:00MASAK APA CEU?Jenny Hendrawati, seorang koki selebritis, menyajikan beraneka hidangan internasional serta membagikan tips-tips seputar dunia memasak yang mudah diikuti oleh para pemirsa di rumah.09:30BISIK PAGIberbagai berita dan perkembangan terbaru dari sederet kasus yang menimpa sejumlah sosok ternama di Indonesia.10:30GANTENG GANTENG SERIGALAGANTENG GANTENG SERIGALA12:30DIAM-DIAM SUKADIAM-DIAM SUKA14:30SINEMA SIANGFTV16:00SEA VLEAGUE (RECORDED)PHILIPPINES VS INDONESIA18:00NETIZEN UPDATEberbagai berita dan perkembangan terbaru dari sederet kasus yang menimpa sejumlah sosok ternama di Indonesia.19:00MOJI DRAMA (CHHOTI SARDARNI)CHHOTI SARDARNI21:00MOJI MOVIE (LONDON LOVE STORY)LONDON LOVE STORY23:00TRUSTInformasi seputar menjaga vitalitas pria23:30TRUSTInformasi seputar menjaga vitalitas pria' + it('can generate valid url', () => { - expect(url({ channel, date })).toBe('https://moji.id/schedule') + expect(url({ channel, date })).toBe('https://moji.id/schedule') }) it('can handle empty guide', () => { - const results = parser({ content: '' }) - expect(results).toMatchObject([]) + const results = parser({ content: '' }) + expect(results).toMatchObject([]) }) it('can parse response', () => { - const results = parser({ content: content, date: date }) + const results = parser({ content: content, date: date }) - expect(results[0]).toMatchObject( - { - title: 'TRUST', - start: dayjs.tz('2023 Aug 18 00:00', 'YYYY MMM DD HH:mm', 'Asia/Jakarta'), - stop: dayjs.tz('2023 Aug 18 00:30', 'YYYY MMM DD HH:mm', 'Asia/Jakarta'), - description: 'Informasi seputar menjaga vitalitas pria' - } - ) -}) \ No newline at end of file + expect(results[0]).toMatchObject({ + title: 'TRUST', + start: dayjs.tz('2023 Aug 18 00:00', 'YYYY MMM DD HH:mm', 'Asia/Jakarta'), + stop: dayjs.tz('2023 Aug 18 00:30', 'YYYY MMM DD HH:mm', 'Asia/Jakarta'), + description: 'Informasi seputar menjaga vitalitas pria' + }) +}) diff --git a/sites/mon-programme-tv.be/mon-programme-tv.be.channels.xml b/sites/mon-programme-tv.be/mon-programme-tv.be.channels.xml index 4b688005..3a7d1f6e 100644 --- a/sites/mon-programme-tv.be/mon-programme-tv.be.channels.xml +++ b/sites/mon-programme-tv.be/mon-programme-tv.be.channels.xml @@ -1,116 +1,114 @@ - - - - - - - - - - - - 13EME RUE - AB3 - ABXPLORE - ACTION - ALTICE STUDIO - ANIMAUX - ARTE - AUTOMOTO - BBC ENTERTAINMENT - BE 1 - BE CINE - BE SERIES - BFM TV - BOING - BOOMERANG - C8 - CANAL J - CANVAS - CARTOON NETWORK - CHASSE & PECHE - CINE + CLASSIC BE - CINE + FRISSON BE - CINE + PREMIER BE - CLUB RTL - CNEWS - COMEDIE + - CSTAR - DISCOVERY CHANNEL - DISNEY CHANNEL - DISNEY JUNIOR - EEN - E! ENTERTAINMENT - EQUIDIA - EUROSPORT - EUROSPORT NL - EUROSPORT 2 - FRANCE 2 - FRANCE 24 - FRANCE 3 - FRANCE 4 - FRANCE 5 - GAME ONE - GULLI - HISTOIRE - KETNET - KTO - LA TROIS - LA UNE (RTBF) - LCI - LN24 - M6 - M6 MUSIC - MANGAS - MELODY - MEZZO - MTV - NATIONAL GEOGRAPHIC CHANNEL - NATIONAL GEOGRAPHIC WILD - NAUTICAL CHANNEL - NICKELODEON - NJAM ! - NPO1 - NPO2 - NPO3 - PARAMOUNT CHANNEL - PIWI + - PLANETE + - PLANETE+ AE - PLANETE+ CI - VIER - VIJF - PLAYBOY TV - PLUG RTL - RAI 1 - RMC SPORT 2 - RTL TVI - RTS UN - RTS DEUX - SCIENCE & VIE TV - STUDIO100tv - SYFY - TCM CINEMA - TELETOON + - TF1 - TF1 Séries Films - TIJI - TIPIK - TMC - TOUTE L'HISTOIRE - TRACE URBAN - TV5 MONDE - TV BREIZH - USHUAIA TV - VOO Sport World 1 - VOO Sport World 2 - VOO Sport World 3 - VTM - VTM2 - VTM3 - VTM4 - VTM KIDS - Warner TV - - + + + + + + + + + + + 13EME RUE + AB3 + ABXPLORE + ACTION + ALTICE STUDIO + ANIMAUX + ARTE + AUTOMOTO + BBC ENTERTAINMENT + BE 1 + BE CINE + BE SERIES + BFM TV + BOING + BOOMERANG + C8 + CANAL J + CANVAS + CARTOON NETWORK + CHASSE & PECHE + CINE + CLASSIC BE + CINE + FRISSON BE + CINE + PREMIER BE + CLUB RTL + CNEWS + COMEDIE + + CSTAR + DISCOVERY CHANNEL + DISNEY CHANNEL + DISNEY JUNIOR + EEN + E! ENTERTAINMENT + EQUIDIA + EUROSPORT + EUROSPORT NL + EUROSPORT 2 + FRANCE 2 + FRANCE 24 + FRANCE 3 + FRANCE 4 + FRANCE 5 + GAME ONE + GULLI + HISTOIRE + KETNET + KTO + LA TROIS + LA UNE (RTBF) + LCI + LN24 + M6 + M6 MUSIC + MANGAS + MELODY + MEZZO + MTV + NATIONAL GEOGRAPHIC CHANNEL + NATIONAL GEOGRAPHIC WILD + NAUTICAL CHANNEL + NICKELODEON + NJAM ! + NPO1 + NPO2 + NPO3 + PARAMOUNT CHANNEL + PIWI + + PLANETE + + PLANETE+ AE + PLANETE+ CI + VIER + VIJF + PLAYBOY TV + PLUG RTL + RAI 1 + RMC SPORT 2 + RTL TVI + RTS UN + RTS DEUX + SCIENCE & VIE TV + STUDIO100tv + SYFY + TCM CINEMA + TELETOON + + TF1 + TF1 Séries Films + TIJI + TIPIK + TMC + TOUTE L'HISTOIRE + TRACE URBAN + TV5 MONDE + TV BREIZH + USHUAIA TV + VOO Sport World 1 + VOO Sport World 2 + VOO Sport World 3 + VTM + VTM2 + VTM3 + VTM4 + VTM KIDS + Warner TV + diff --git a/sites/mon-programme-tv.be/mon-programme-tv.be.config.js b/sites/mon-programme-tv.be/mon-programme-tv.be.config.js index f1e7d856..72c8f6b3 100644 --- a/sites/mon-programme-tv.be/mon-programme-tv.be.config.js +++ b/sites/mon-programme-tv.be/mon-programme-tv.be.config.js @@ -44,7 +44,7 @@ module.exports = { }, async channels() { const data = await axios - .get(`https://www.mon-programme-tv.be/chaine/toutes-les-chaines-television.html`) + .get('https://www.mon-programme-tv.be/chaine/toutes-les-chaines-television.html') .then(r => r.data) .catch(console.log) const $ = cheerio.load(data) diff --git a/sites/mon-programme-tv.be/mon-programme-tv.be.test.js b/sites/mon-programme-tv.be/mon-programme-tv.be.test.js index b4a07f3d..c9f56deb 100644 --- a/sites/mon-programme-tv.be/mon-programme-tv.be.test.js +++ b/sites/mon-programme-tv.be/mon-programme-tv.be.test.js @@ -1,5 +1,5 @@ // npm run channels:parse -- --config=./sites/mon-programme-tv.be/mon-programme-tv.be.config.js --output=./sites/mon-programme-tv.be/mon-programme-tv.be.channels.xml -// npx epg-grabber --config=sites/mon-programme-tv.be/mon-programme-tv.be.config.js --channels=sites/mon-programme-tv.be/mon-programme-tv.be.channels.xml --output=guide.xml --days=2 +// npm run grab -- --site=mon-programme-tv.be const { parser, url } = require('./mon-programme-tv.be.config.js') const fs = require('fs') diff --git a/sites/movistarplus.es/movistarplus.es.channels.xml b/sites/movistarplus.es/movistarplus.es.channels.xml index dddfa6f6..d3716a77 100644 --- a/sites/movistarplus.es/movistarplus.es.channels.xml +++ b/sites/movistarplus.es/movistarplus.es.channels.xml @@ -1,187 +1,185 @@ - - - #0 - 3/24 - 7 Televisión Región de Murcia - 8 TV Cádiz - Aljazeera English - Alquiler 1 - Alquiler HD - AMC España - Antena 3 - À Punt - Aragón TV - Aragón TV Internacional - Atreseries - AXN España - AXN White España - Baby TV Latin America - Barça TV - BBC World News Europe - Be Mad - betevé - Blaze España - Bloomberg TV Europe - Boing España - Bom Cine - Calle 13 - Canal 24 Horas - Canal Cocina - Canal Extremadura - Canal Extremadura Satélite - Canal Hollywood España - Canal Panda España - Canal Sur - Canal Sur Andalucía - Caza y Pesca - CGTN Español - Clan TVE - TV Castilla-La Mancha - CNBC Europe - CNC World English - CNN International Europe - Comedy Central España - Cosmopolitan TV España - Cuatro - Cubavisión Internacional - Dark - DAZN 1 España - DAZN 2 España - DAZN 3 España - DAZN 4 España - DAZN F1 - Decasa - Discovery Channel Iberia - Disney Channel España - Disney Junior España - Divinity - DKiss - DMAX España - DreamWorks TV - EITB Basque - El33/SX3 - El Garage TV - El Toro TV - Energy - Esport3 - ETB 1 - ETB 2 - ETB 3 - EuroNews Español - Eurosport 1 - Eurosport 2 - EWTN España - Latinoamérica - Factoria de Ficción - Fox News Channel - Fox España - France 24 Español - Canal Fútbol Replay - Galicia TV Europa - Gol - Historia España - Horse TV - IB3 Global - Iberalia TV - La 1 - La 2 - La 7 - La Ocho TV - LaOtra - La Resistencia - Las Estrellas Europa - La Sexta - Movistar Liga de Campeones 10 - Movistar Liga de Campeones 11 - Movistar Liga de Campeones 12 - Movistar Liga de Campeones 9 - Mega - Mezzo - Mezzo Live HD - Movistar Acción - Movistar Cine Español - Movistar Clásicos - Movistar Comedia - Movistar Deportes - Movistar Deportes 1 - Movistar Deportes 2 - Movistar Deportes 3 - Movistar Deportes 4 - Movistar Deportes 5 - Movistar Deportes 6 - Movistar Deportes 7 - Movistar Drama - Movistar Estrenos - Movistar Estrenos 2 - Movistar Fest - Movistar Golf - Movistar LaLiga - Movistar LaLiga 1 - Movistar LaLiga 10 - Movistar LaLiga 2 - Movistar LaLiga 3 - Movistar LaLiga 4 - Movistar LaLiga 5 - Movistar LaLiga 6 - Movistar LaLiga 7 - Movistar LaLiga 8 - Movistar LaLiga 9 - Movistar LaLiga UHD - Movistar Liga de Campeones - Movistar Liga de Campeones 1 - Movistar Liga de Campeones 2 - Movistar Liga de Campeones 3 - Movistar Liga de Campeones 4 - Movistar Liga de Campeones 5 - Movistar Liga de Campeones 6 - Movistar Liga de Campeones 7 - Movistar Liga de Campeones 8 - Movistar Liga de Campeones UHD - Movistar Series - Movistar Series 2 - MTV 00s - MTV España - National Geographic España - National Geographic Wild España - Nautical Channel - Negocios TV - Neox - NHK World Japan - Nickelodeon Iberia - Nick Jr España - Nova - Odisea - Movistar Los Oscar - Paramount Channel España - Playboy TV Iberia - RCN Nuestra Tele Internacional - Real Madrid TV Español - Sky News International - Sol Música - Somos - Stingray Classica - Sundance TV España - Syfy España - TCM España - Telecinco - Teledeporte - Telefe Internacional - Telemadrid - Telesur - Ten - TNT España - Toros TV - TPA 7 - Trece TV - TV3 - TV3CAT - TV5Monde Europe - TV Canaria - TV Chile - tvG2 - TVG Europa - U-Beat - #Vamos - Xtrm - - + + #0 + 3/24 + 7 Televisión Región de Murcia + 8 TV Cádiz + Aljazeera English + Alquiler 1 + Alquiler HD + AMC España + Antena 3 + À Punt + Aragón TV + Aragón TV Internacional + Atreseries + AXN España + AXN White España + Baby TV Latin America + Barça TV + BBC World News Europe + Be Mad + betevé + Blaze España + Bloomberg TV Europe + Boing España + Bom Cine + Calle 13 + Canal 24 Horas + Canal Cocina + Canal Extremadura + Canal Extremadura Satélite + Canal Hollywood España + Canal Panda España + Canal Sur + Canal Sur Andalucía + Caza y Pesca + CGTN Español + Clan TVE + TV Castilla-La Mancha + CNBC Europe + CNC World English + CNN International Europe + Comedy Central España + Cosmopolitan TV España + Cuatro + Cubavisión Internacional + Dark + DAZN 1 España + DAZN 2 España + DAZN 3 España + DAZN 4 España + DAZN F1 + Decasa + Discovery Channel Iberia + Disney Channel España + Disney Junior España + Divinity + DKiss + DMAX España + DreamWorks TV + EITB Basque + El33/SX3 + El Garage TV + El Toro TV + Energy + Esport3 + ETB 1 + ETB 2 + ETB 3 + EuroNews Español + Eurosport 1 + Eurosport 2 + EWTN España - Latinoamérica + Factoria de Ficción + Fox News Channel + Fox España + France 24 Español + Canal Fútbol Replay + Galicia TV Europa + Gol + Historia España + Horse TV + IB3 Global + Iberalia TV + La 1 + La 2 + La 7 + La Ocho TV + LaOtra + La Resistencia + Las Estrellas Europa + La Sexta + Movistar Liga de Campeones 10 + Movistar Liga de Campeones 11 + Movistar Liga de Campeones 12 + Movistar Liga de Campeones 9 + Mega + Mezzo + Mezzo Live HD + Movistar Acción + Movistar Cine Español + Movistar Clásicos + Movistar Comedia + Movistar Deportes + Movistar Deportes 1 + Movistar Deportes 2 + Movistar Deportes 3 + Movistar Deportes 4 + Movistar Deportes 5 + Movistar Deportes 6 + Movistar Deportes 7 + Movistar Drama + Movistar Estrenos + Movistar Estrenos 2 + Movistar Fest + Movistar Golf + Movistar LaLiga + Movistar LaLiga 1 + Movistar LaLiga 10 + Movistar LaLiga 2 + Movistar LaLiga 3 + Movistar LaLiga 4 + Movistar LaLiga 5 + Movistar LaLiga 6 + Movistar LaLiga 7 + Movistar LaLiga 8 + Movistar LaLiga 9 + Movistar LaLiga UHD + Movistar Liga de Campeones + Movistar Liga de Campeones 1 + Movistar Liga de Campeones 2 + Movistar Liga de Campeones 3 + Movistar Liga de Campeones 4 + Movistar Liga de Campeones 5 + Movistar Liga de Campeones 6 + Movistar Liga de Campeones 7 + Movistar Liga de Campeones 8 + Movistar Liga de Campeones UHD + Movistar Series + Movistar Series 2 + MTV 00s + MTV España + National Geographic España + National Geographic Wild España + Nautical Channel + Negocios TV + Neox + NHK World Japan + Nickelodeon Iberia + Nick Jr España + Nova + Odisea + Movistar Los Oscar + Paramount Channel España + Playboy TV Iberia + RCN Nuestra Tele Internacional + Real Madrid TV Español + Sky News International + Sol Música + Somos + Stingray Classica + Sundance TV España + Syfy España + TCM España + Telecinco + Teledeporte + Telefe Internacional + Telemadrid + Telesur + Ten + TNT España + Toros TV + TPA 7 + Trece TV + TV3 + TV3CAT + TV5Monde Europe + TV Canaria + TV Chile + tvG2 + TVG Europa + U-Beat + #Vamos + Xtrm + diff --git a/sites/movistarplus.es/movistarplus.es.config.js b/sites/movistarplus.es/movistarplus.es.config.js index fa341c73..d0c1f9ac 100644 --- a/sites/movistarplus.es/movistarplus.es.config.js +++ b/sites/movistarplus.es/movistarplus.es.config.js @@ -15,12 +15,16 @@ module.exports = { let startTime = DateTime.fromFormat( `${guideDate.format('YYYY-MM-DD')} ${item.HORA_INICIO}`, 'yyyy-MM-dd HH:mm', - { zone: 'Europe/Madrid' } + { + zone: 'Europe/Madrid' + } ).toUTC() let stopTime = DateTime.fromFormat( `${guideDate.format('YYYY-MM-DD')} ${item.HORA_FIN}`, 'yyyy-MM-dd HH:mm', - { zone: 'Europe/Madrid' } + { + zone: 'Europe/Madrid' + } ).toUTC() if (stopTime < startTime) { guideDate = guideDate.add(1, 'd') diff --git a/sites/movistarplus.es/movistarplus.es.test.js b/sites/movistarplus.es/movistarplus.es.test.js index 5d6915f8..88f665b2 100644 --- a/sites/movistarplus.es/movistarplus.es.test.js +++ b/sites/movistarplus.es/movistarplus.es.test.js @@ -1,6 +1,6 @@ -// npx epg-grabber --config=sites/movistarplus.es/movistarplus.es.config.js --channels=sites/movistarplus.es/movistarplus.es.channels.xml --output=guide.xml +// npm run grab -- --site=movistarplus.es -const { parser, url, request } = require('./movistarplus.es.config.js') +const { parser, url } = require('./movistarplus.es.config.js') const dayjs = require('dayjs') const utc = require('dayjs/plugin/utc') const customParseFormat = require('dayjs/plugin/customParseFormat') @@ -18,7 +18,8 @@ it('can generate valid url', () => { }) it('can parse response', () => { - const content = `{"success":"true","msg":"","data":{"TVE-CODE":{"DATOS_CADENA":{"CODIGO":"TVE","MARCA":"TVE","NOMBRE":"LA 1","URL":"https://www.movistarplus.es/canal?nombre=LA%2B1&id=TVE","DIAL_PRINCIPAL":["01"],"DIALES":[1],"UID":null,"CASID":null,"SERVICEUID":null,"SERVICEUID2":null,"SERVICEID":null,"ESVIRTUAL":null,"ESSATELITE":null,"UPSELLING":null,"puntoReproduccion":null},"PROGRAMAS":[{"DIRECTO":false,"TEMPORADA":"","TITULO":"Telediario Matinal","GENERO":"Información","CODIGO_GENERO":"IF","DURACION":150,"DURACION_VISUAL":150,"HORA_INICIO":"06:00","HORA_FIN":"08:30","ELEMENTO":"1709045","EVENTO":"99422566","ShowId":null,"x1":0,"x2":0,"Disponible":null,"URL":"https://www.movistarplus.es/ficha/telediario-matinal?tipo=R&id=99422566"},{"DIRECTO":false,"TEMPORADA":"","TITULO":"Las Claves del Siglo XXI: Episodio 8","GENERO":"Información","CODIGO_GENERO":"IF","DURACION":135,"DURACION_VISUAL":135,"HORA_INICIO":"22:15","HORA_FIN":"00:30","ELEMENTO":"2051356","EVENTO":"99422634","ShowId":null,"x1":0,"x2":0,"Disponible":null,"URL":"https://www.movistarplus.es/ficha/las-claves-del-siglo-xxi-t1/episodio-8?tipo=R&id=99422634"},{"DIRECTO":false,"TEMPORADA":"","TITULO":"Noticias 24H","GENERO":"Información","CODIGO_GENERO":"IF","DURACION":170,"DURACION_VISUAL":170,"HORA_INICIO":"03:10","HORA_FIN":"06:00","ELEMENTO":"518403","EVENTO":"99422646","ShowId":null,"x1":0,"x2":0,"Disponible":null,"URL":"https://www.movistarplus.es/ficha/noticias-24h?tipo=R&id=99422646"}]}}}` + const content = + '{"success":"true","msg":"","data":{"TVE-CODE":{"DATOS_CADENA":{"CODIGO":"TVE","MARCA":"TVE","NOMBRE":"LA 1","URL":"https://www.movistarplus.es/canal?nombre=LA%2B1&id=TVE","DIAL_PRINCIPAL":["01"],"DIALES":[1],"UID":null,"CASID":null,"SERVICEUID":null,"SERVICEUID2":null,"SERVICEID":null,"ESVIRTUAL":null,"ESSATELITE":null,"UPSELLING":null,"puntoReproduccion":null},"PROGRAMAS":[{"DIRECTO":false,"TEMPORADA":"","TITULO":"Telediario Matinal","GENERO":"Información","CODIGO_GENERO":"IF","DURACION":150,"DURACION_VISUAL":150,"HORA_INICIO":"06:00","HORA_FIN":"08:30","ELEMENTO":"1709045","EVENTO":"99422566","ShowId":null,"x1":0,"x2":0,"Disponible":null,"URL":"https://www.movistarplus.es/ficha/telediario-matinal?tipo=R&id=99422566"},{"DIRECTO":false,"TEMPORADA":"","TITULO":"Las Claves del Siglo XXI: Episodio 8","GENERO":"Información","CODIGO_GENERO":"IF","DURACION":135,"DURACION_VISUAL":135,"HORA_INICIO":"22:15","HORA_FIN":"00:30","ELEMENTO":"2051356","EVENTO":"99422634","ShowId":null,"x1":0,"x2":0,"Disponible":null,"URL":"https://www.movistarplus.es/ficha/las-claves-del-siglo-xxi-t1/episodio-8?tipo=R&id=99422634"},{"DIRECTO":false,"TEMPORADA":"","TITULO":"Noticias 24H","GENERO":"Información","CODIGO_GENERO":"IF","DURACION":170,"DURACION_VISUAL":170,"HORA_INICIO":"03:10","HORA_FIN":"06:00","ELEMENTO":"518403","EVENTO":"99422646","ShowId":null,"x1":0,"x2":0,"Disponible":null,"URL":"https://www.movistarplus.es/ficha/noticias-24h?tipo=R&id=99422646"}]}}}' const result = parser({ content, channel, date }).map(p => { p.start = p.start.toJSON() p.stop = p.stop.toJSON() @@ -29,19 +30,19 @@ it('can parse response', () => { start: '2022-03-11T05:00:00.000Z', stop: '2022-03-11T07:30:00.000Z', category: 'Información', - title: `Telediario Matinal` + title: 'Telediario Matinal' }, { start: '2022-03-11T21:15:00.000Z', stop: '2022-03-11T23:30:00.000Z', category: 'Información', - title: `Las Claves del Siglo XXI: Episodio 8` + title: 'Las Claves del Siglo XXI: Episodio 8' }, { start: '2022-03-12T02:10:00.000Z', stop: '2022-03-12T05:00:00.000Z', category: 'Información', - title: `Noticias 24H` + title: 'Noticias 24H' } ]) }) @@ -50,7 +51,7 @@ it('can handle empty guide', () => { const result = parser({ date, channel, - content: `{"success":"true","msg":"","data":{}}` + content: '{"success":"true","msg":"","data":{}}' }) expect(result).toMatchObject([]) }) diff --git a/sites/mtel.ba/mtel.ba.channels.xml b/sites/mtel.ba/mtel.ba.channels.xml index 64c35954..d7dfbf91 100644 --- a/sites/mtel.ba/mtel.ba.channels.xml +++ b/sites/mtel.ba/mtel.ba.channels.xml @@ -1,173 +1,171 @@ - - - - - 101 TV - 24 Kitchen - Agro TV - Aljazeera Balkans - Amari TV - Animal Planet - Arena Esport - Arena Fight - Arena Sport 1 - Arena Sport 1x2 - Arena Sport 2 - Arena Sport 3 - Arena Sport 4 - B92 - Balkan Trip - BHT 1 - BN Music - BN - Boomerang Central & Eastern Europe - Cafe & Club - CBS Reality Europe - CineStar TV 1 Srbija - CineStar TV Action Srbija - CineStar TV Comedy - CineStar TV Fantasy - Decija TV - Dexy TV - Discovery Channel Srbija - Discovery Science - Dizi - DM Sat - Dox TV - EG Melody - EX YU Melody - FashionTV Europe - FilmBox Arthouse Worldwide - FilmBox Extra HD Adria - FilmBox Stars Adria - Film Klub - Folk Melody - Food Network EMEA - Fox Srbija - France 24 Français - Happy Reality 1 - Happy Reality 2 - Hayatovci - Hayat Plus - Hits Melody - HRT 1 - HRT 2 - Hype TV - Investigation Discovery Europe - Jeka - K3 - K CN 3 - Kitchen TV - Klasik TV - Kurir TV - Kuvo TV - Melos TV - Muzzik - National Geographic - National Geographic Wild - Nicktoons Adria - OTV Valentino - Pink Action - Pink BH - Pink Classic - Pink Comedy - Pink Crime & Mystery - Pink Extra - Pink Family - Pink Film - Pink Horror - Pink Koncert - Pink Kuvar - Pink Movies - Pink Pedia - Pink Reality - Pink Sci-Fi & Fantasy - Pink Srbija - Pink Serije - Pink Show - Pink Soap - Pink Style - Pink Thriller - Pink Western - Pink World - Pink Zabava - Pop Melody - Prva Files - Prva Kick - Prva Life - Prva Max - Prva Srpska TV - Prva World - Red TV - Rock & Roll - RTL Hrvatska - RTL KETTŐ - RTL Kockica - RTL Living Hrvatska - RTR Planeta - RTRS TV - RTS 2 - RTS Klasika - RTS Kolo - RTS Nauka - RTS Poletarac - RTS Svet - RTV 2 - Rossiya 24 - Sat. 1 Deutschland - SOS Kanal Plus - Super Sat - Superstar - Tanjug TV - Tb1 - TLC Balkan - Toxic Folk - Toxic TV - Travel Channel Europe - Tropik TV - TV Arena - TV Niksic - TV One - TV Partizan - TV Simić - Viasat Explore East - Viasat History - Viasat Nature East - World Wild Muzzik - Zdravlje TV - Zvezda TV - 360 Tune Box - Adult Channel 1 - Adult Channel 2 - Adult Channel 3 - Adult Channel 4 - Adult Channel 5 - Adult Channel 6 - Adult Channel 7 - Babes TV - Baby TV Europe - Bang U - CGTN - CNN International Europe - DocuBox HD - English Club TV - Erotic - Erotic 2 - Erotic 3 - Erotic 4 - Erotic 7 - Erotic 8 - Erox HD - Eroxxx HD - Extreme Sports Channel - JimJam Europe - LFC TV - MTV 00s - MTV 80s - MTV Global - MTV Hits Europe - Reality Kings TV - RT News - - \ No newline at end of file + + + + 101 TV + 24 Kitchen + Agro TV + Aljazeera Balkans + Amari TV + Animal Planet + Arena Esport + Arena Fight + Arena Sport 1 + Arena Sport 1x2 + Arena Sport 2 + Arena Sport 3 + Arena Sport 4 + B92 + Balkan Trip + BHT 1 + BN Music + BN + Boomerang Central & Eastern Europe + Cafe & Club + CBS Reality Europe + CineStar TV 1 Srbija + CineStar TV Action Srbija + CineStar TV Comedy + CineStar TV Fantasy + Decija TV + Dexy TV + Discovery Channel Srbija + Discovery Science + Dizi + DM Sat + Dox TV + EG Melody + EX YU Melody + FashionTV Europe + FilmBox Arthouse Worldwide + FilmBox Extra HD Adria + FilmBox Stars Adria + Film Klub + Folk Melody + Food Network EMEA + Fox Srbija + France 24 Français + Happy Reality 1 + Happy Reality 2 + Hayatovci + Hayat Plus + Hits Melody + HRT 1 + HRT 2 + Hype TV + Investigation Discovery Europe + Jeka + K3 + K CN 3 + Kitchen TV + Klasik TV + Kurir TV + Kuvo TV + Melos TV + Muzzik + National Geographic + National Geographic Wild + Nicktoons Adria + OTV Valentino + Pink Action + Pink BH + Pink Classic + Pink Comedy + Pink Crime & Mystery + Pink Extra + Pink Family + Pink Film + Pink Horror + Pink Koncert + Pink Kuvar + Pink Movies + Pink Pedia + Pink Reality + Pink Sci-Fi & Fantasy + Pink Srbija + Pink Serije + Pink Show + Pink Soap + Pink Style + Pink Thriller + Pink Western + Pink World + Pink Zabava + Pop Melody + Prva Files + Prva Kick + Prva Life + Prva Max + Prva Srpska TV + Prva World + Red TV + Rock & Roll + RTL Hrvatska + RTL KETTŐ + RTL Kockica + RTL Living Hrvatska + RTR Planeta + RTRS TV + RTS 2 + RTS Klasika + RTS Kolo + RTS Nauka + RTS Poletarac + RTS Svet + RTV 2 + Rossiya 24 + Sat. 1 Deutschland + SOS Kanal Plus + Super Sat + Superstar + Tanjug TV + Tb1 + TLC Balkan + Toxic Folk + Toxic TV + Travel Channel Europe + Tropik TV + TV Arena + TV Niksic + TV One + TV Partizan + TV Simić + Viasat Explore East + Viasat History + Viasat Nature East + World Wild Muzzik + Zdravlje TV + Zvezda TV + 360 Tune Box + Adult Channel 1 + Adult Channel 2 + Adult Channel 3 + Adult Channel 4 + Adult Channel 5 + Adult Channel 6 + Adult Channel 7 + Babes TV + Baby TV Europe + Bang U + CGTN + CNN International Europe + DocuBox HD + English Club TV + Erotic + Erotic 2 + Erotic 3 + Erotic 4 + Erotic 7 + Erotic 8 + Erox HD + Eroxxx HD + Extreme Sports Channel + JimJam Europe + LFC TV + MTV 00s + MTV 80s + MTV Global + MTV Hits Europe + Reality Kings TV + RT News + \ No newline at end of file diff --git a/sites/mtel.ba/mtel.ba.config.js b/sites/mtel.ba/mtel.ba.config.js index 7c50b8a2..33f13ab4 100644 --- a/sites/mtel.ba/mtel.ba.config.js +++ b/sites/mtel.ba/mtel.ba.config.js @@ -44,7 +44,7 @@ function parseStop(item) { } function parseContent(content, channel) { - const [_, channelId] = channel.site_id.split('#') + const [, channelId] = channel.site_id.split('#') const data = JSON.parse(content) if (!data || !Array.isArray(data.channels)) return null diff --git a/sites/mtel.ba/mtel.ba.test.js b/sites/mtel.ba/mtel.ba.test.js index f6f7cf74..765979ee 100644 --- a/sites/mtel.ba/mtel.ba.test.js +++ b/sites/mtel.ba/mtel.ba.test.js @@ -1,4 +1,4 @@ -// npx epg-grabber --config=sites/mtel.ba/mtel.ba.config.js --channels=sites/mtel.ba/mtel.ba.channels.xml --output=guide.xml --days=2 +// npm run grab -- --site=mtel.ba const { parser, url, request } = require('./mtel.ba.config.js') const dayjs = require('dayjs') @@ -12,7 +12,8 @@ const channel = { site_id: '001#11', xmltv_id: 'RTRSTV.ba' } -const content = `{"page":0,"total_pages":1,"date":"2021-11-10","channels":[{"id":"11","name":"RTRS","description":null,"link":null,"image":"https:\/\/mtel.ba\/oec\/images\/tv_channels\/c3556aa629b00325aaaea622abfb1070.png","position":"001","items":[{"id_channel":"11","title":"\u0160uma","description":"Krajem decembra 1947. godine jugoslovenski predsjednik Josip Broz Tito prvi put je posjetio Rumuniju. Da bi u\u010dvrstili novo socijalisti\u010dko prijateljstvo, rumunski zvani\u010dnici su poklonili Titu sliku velikog rumunskog umjetnika Jona Andreskua pod nazivom \u0160uma. Mnogo godina kasnije ta slika je umje\u0161ana u napetu \u0161pijunsku pri\u010du i otkriva tajnu koja \u0107e uzdrmati temelje i Jugoslavije i Rumunije. Film je svjedok kompleksnosti i raznovrsnosti glasova koji \u010dine ono \u0161to zovemo stvarno\u0161\u0107u.","start":"00:00:00","duration":"46.00","full_start":"2021-11-09 23:29:00","full_end":"2021-11-10 00:46:00","image":"https:\/\/mtel.ba\/oec\/images\/epg\/60881491.jpg","category":"Televizijski film","subcategory":"Dokumentarna drama"},{"id_channel":"11","title":"Nema informacija o programu","description":"","start":"07:32:00","duration":"988.00","full_start":"2021-11-10 07:32:00","full_end":"2021-11-10 24:00:00","image":"","category":"","subcategory":""}]}]}` +const content = + '{"page":0,"total_pages":1,"date":"2021-11-10","channels":[{"id":"11","name":"RTRS","description":null,"link":null,"image":"https://mtel.ba/oec/images/tv_channels/c3556aa629b00325aaaea622abfb1070.png","position":"001","items":[{"id_channel":"11","title":"\u0160uma","description":"Krajem decembra 1947. godine jugoslovenski predsjednik Josip Broz Tito prvi put je posjetio Rumuniju. Da bi u\u010dvrstili novo socijalisti\u010dko prijateljstvo, rumunski zvani\u010dnici su poklonili Titu sliku velikog rumunskog umjetnika Jona Andreskua pod nazivom \u0160uma. Mnogo godina kasnije ta slika je umje\u0161ana u napetu \u0161pijunsku pri\u010du i otkriva tajnu koja \u0107e uzdrmati temelje i Jugoslavije i Rumunije. Film je svjedok kompleksnosti i raznovrsnosti glasova koji \u010dine ono \u0161to zovemo stvarno\u0161\u0107u.","start":"00:00:00","duration":"46.00","full_start":"2021-11-09 23:29:00","full_end":"2021-11-10 00:46:00","image":"https://mtel.ba/oec/images/epg/60881491.jpg","category":"Televizijski film","subcategory":"Dokumentarna drama"},{"id_channel":"11","title":"Nema informacija o programu","description":"","start":"07:32:00","duration":"988.00","full_start":"2021-11-10 07:32:00","full_end":"2021-11-10 24:00:00","image":"","category":"","subcategory":""}]}]}' it('can generate valid url', () => { expect(url({ channel, date })).toBe( @@ -34,7 +35,8 @@ it('can parse response', () => { stop: '2021-11-09T23:46:00.000Z', title: 'Šuma', icon: 'https://mtel.ba/oec/images/epg/60881491.jpg', - description: `Krajem decembra 1947. godine jugoslovenski predsjednik Josip Broz Tito prvi put je posjetio Rumuniju. Da bi učvrstili novo socijalističko prijateljstvo, rumunski zvaničnici su poklonili Titu sliku velikog rumunskog umjetnika Jona Andreskua pod nazivom Šuma. Mnogo godina kasnije ta slika je umješana u napetu špijunsku priču i otkriva tajnu koja će uzdrmati temelje i Jugoslavije i Rumunije. Film je svjedok kompleksnosti i raznovrsnosti glasova koji čine ono što zovemo stvarnošću.`, + description: + 'Krajem decembra 1947. godine jugoslovenski predsjednik Josip Broz Tito prvi put je posjetio Rumuniju. Da bi učvrstili novo socijalističko prijateljstvo, rumunski zvaničnici su poklonili Titu sliku velikog rumunskog umjetnika Jona Andreskua pod nazivom Šuma. Mnogo godina kasnije ta slika je umješana u napetu špijunsku priču i otkriva tajnu koja će uzdrmati temelje i Jugoslavije i Rumunije. Film je svjedok kompleksnosti i raznovrsnosti glasova koji čine ono što zovemo stvarnošću.', category: 'Televizijski film' } ]) @@ -44,7 +46,8 @@ it('can handle empty guide', () => { const result = parser({ date, channel, - content: `{"message":"Tra\u017eeni termin nije prona\u0111en.\u003Cbr\u003E\u003Cbr\u003EProverite da li ste upisali pravilno ili poku\u0161ajte sa nekim drugim terminom."}` + content: + '{"message":"Tra\u017eeni termin nije prona\u0111en.\u003Cbr\u003E\u003Cbr\u003EProverite da li ste upisali pravilno ili poku\u0161ajte sa nekim drugim terminom."}' }) expect(result).toMatchObject([]) }) diff --git a/sites/mts.rs/mts.rs.channels.xml b/sites/mts.rs/mts.rs.channels.xml index bf89733c..4545b823 100644 --- a/sites/mts.rs/mts.rs.channels.xml +++ b/sites/mts.rs/mts.rs.channels.xml @@ -1,353 +1,351 @@ - - - - - 101 TV - 24 Kitchen - 360 Tune Box - Agro TV - Aljazeera Balkans - Alternativna TV - Animal Planet - Arena Esport - Arena Fight - Arena Premium 1 - Arena Sport 1 - Arena Sport 1x2 - Arena Premium 2 - Arena Sport 2 - Arena Premium 3 - Arena Sport 3 - Arena Sport 4 - Arena Sport 5 - Arena Sport 6 - Arena Sport 7 - Arena Sport 8 - AXN - AXN Spin - B92 - Baby TV Europe - Balkan Trip - Balkan TV - BBC Earth - Bloomberg TV - BN Music - BN - Boomerang - Bravo Music - B TV - Cafe & Club - CBS Reality - CCTV 4 Europe - CGTN - CineStar TV 1 Srbija - CineStar TV Action Srbija - CineStar TV Comedy - CineStar TV Fantasy - Club MTV - CNBC Europe - CNN International Europe - Cool TV - Crime + Investigation UK - Da Vinci - Decija TV - Dexy TV - Discovery Channel Srbija - Discovery Science - Disney Channel Polska - Dizi - DM Sat - DocuBox HD - Dox TV - Duck TV SD - Duna TV - Dunav TV - Duna World - eduTV - E! Europe - Epic Drama - EuroNews English - EuroNews Serbia - Eurosport 1 - Eurosport 2 - Extreme Sports Channel - Face TV - FashionBox HD - Fashion TV Europe - Fast & FunBox HD - Federalna TV - FightBox HD - Fight Network - Film 4 - FilmBox Arthouse Worldwide - FilmBox Extra HD Adria - FilmBox Stars Adria - Film Klub - Film Klub Extra - Film + Hungary - Food Network EMEA - Fox Crime Srbija - Fox Life Srbija - Fox Movies Srbija - Fox News Channel - Fox Srbija - France 24 English - Gametoon - Gradska M TV - Ha Ha - Happy - Happy Reality 1 - Happy Reality 2 - Hayat - Hayat Folk - Hayat Music - Hayatovci - Hayat Plus - HGTV Pan Regional - History 2 Polska - Humana TV Plus - Hype TV - Investigation Discovery Europe - Jeka - JimJam Europe - K1 - K23 TV - K3 - KA TV - Kazbuka - K CN 1 - K CN 2 - K CN 3 - K CN Istok - K CN K - K CN Raška - K CN Zapad - Kitchen TV - Klasik TV - Kurir TV - Kuvo TV - LFC TV - Lol - M1 - M2 - M4 Sport - M5 - Minimax Romania - Mostnet - Motorvision TV - MTV 00s - MTV 80s - MTV 90s - MTV Global - MTV Hits Europe - Muzsika TV - Muzzik - National Geographic - Nat Geo Wild - NBA TV - Nickelodeon - Nick Jr - Nicktoons Adria - TV Nova - Novosadska TV - NTV - OBN - OKK - Pannon TV - Pink Action - Pink Classic - Pink Comedy - Pink Crime & Mystery - Pink Extra - Pink Family - Pink Fashion - Pink Film - Pink Folk 1 - Pink Folk 2 - Pink Hits - Pink Hits 2 - Pink Horror - Pink Kids - Pink Koncert - Pink Kuvar - Pink M - Pink Movies - Pink Music - Pink Music 2 - Pink n Roll - Pink Pedia - Pink Plus - Pink Premium - Pink Reality - Pink Romance - Pink Sci-Fi & Fantasy - Pink Srbija - Pink Serije - Pink Show - Pink Soap - Pink Style - Pink Super Kids - Pink Thriller - Pink Western - Pink World - Pink Zabava - Prva Files - Prva Kick - Prva Life - Prva Max - Prva Srpska TV - Prva TV Crna Gora - Prva World - Red TV - Rock & Roll - RT News - RT Documentary - RTL Hrvatska - RTL Croatia World - RTL Deutschland - RTL Gold - RTL HÁROM - RTL - RTL KETTŐ - RTL Kockica - RTP - RTR Planeta - RTRS TV - RTS 1 - RTS 2 - RTS 3 - RTS Drama - RTS Klasika - RTS Kolo - RTS Muzika - RTS Nauka - RTS Poletarac - RTS Trezor - RTS Zivot - RTV 1 - RTV 2 - RTV Bap - RTV Bosphorus - RTV Melos - RTV SP - RTV Sreće - RTV Subotica - RTV Šumadija - Rossiya 24 - Sandžačka TV Mreža - Sandžak TV - SAT TV - Scifi Srbija - Sorozat + - SOS Kanal Plus - Sremska TV - Story 4 - Studio B - Super D+ - Super Sat - Superstar 2 - Superstar - Super TV 2 - T1 - Tanjug TV - Telebet - Televizija Fokus - Televizija Plus - TLC Balkan - TMS Televizija Telemark - Toxic Folk - Toxic Rap - Toxic TV - Travel Channel Europe - Turizam TV - TV 1000 Balkan - TV 2 - TV 4S - TV5Monde Europe - TV 5 Uzice - TV Apatin - TV AS - TV Bačka - TV Banat - TV Bečej - TV Belle Amie - TV Bor - TV Bujanovac - TV Caribrod - TVCG Sat - TV Cink - TV City - TV Delta - TV Diskos - TV DR - TV Duga + - TV Fruška Gora - TV Galaksija 32 - TV Gem - TV GM Plus - TV Hit Plus Batočina - TV Hram - TV Info 24 Plus - TV Istok - TV Jasenica - TV K-1 - TV K9 - TV Kanal 25 - TV Kanal M - TV Kikinda - TV Kladovo - TV Koreni - TV Kragujevac - TV Kraljevo - TV Kruševac - TV Lav - TV Lav Plus - TV Leskovac - TV Lotel Plus - TV Mag - TV Marš - TV Mix - TV Most - TV Novi Bečej - TV Novi Pazar - TV Palma Plus - TV Pančevo - TV Partizan - TV P Canal - TV Petrovec - TV Pirot - TV Podrinje - TV Požega - TV Priboj - TV Q - TV Rača - TV Ras - TV Ritam - TV Šabac - TV Santos - TV Skay - TV Sunce - TV Trans - TV Trstenik - VA Plus - TV Vranje - TV Vrnjačka Banja - TV Vujic - TV YU Eco - TV Zlatar - TV Zona Plus - Vesti - Viasat Explore East - Viasat History - Viasat Nature East - Vranjska Plus - World Wild Muzzik - Zadruga 1 - Zadruga 2 - Zadruga 3 - Zadruga 4 - Zdravlje TV - Zvezda TV - - \ No newline at end of file + + + + 101 TV + 24 Kitchen + 360 Tune Box + Agro TV + Aljazeera Balkans + Alternativna TV + Animal Planet + Arena Esport + Arena Fight + Arena Premium 1 + Arena Sport 1 + Arena Sport 1x2 + Arena Premium 2 + Arena Sport 2 + Arena Premium 3 + Arena Sport 3 + Arena Sport 4 + Arena Sport 5 + Arena Sport 6 + Arena Sport 7 + Arena Sport 8 + AXN + AXN Spin + B92 + Baby TV Europe + Balkan Trip + Balkan TV + BBC Earth + Bloomberg TV + BN Music + BN + Boomerang + Bravo Music + B TV + Cafe & Club + CBS Reality + CCTV 4 Europe + CGTN + CineStar TV 1 Srbija + CineStar TV Action Srbija + CineStar TV Comedy + CineStar TV Fantasy + Club MTV + CNBC Europe + CNN International Europe + Cool TV + Crime + Investigation UK + Da Vinci + Decija TV + Dexy TV + Discovery Channel Srbija + Discovery Science + Disney Channel Polska + Dizi + DM Sat + DocuBox HD + Dox TV + Duck TV SD + Duna TV + Dunav TV + Duna World + eduTV + E! Europe + Epic Drama + EuroNews English + EuroNews Serbia + Eurosport 1 + Eurosport 2 + Extreme Sports Channel + Face TV + FashionBox HD + Fashion TV Europe + Fast & FunBox HD + Federalna TV + FightBox HD + Fight Network + Film 4 + FilmBox Arthouse Worldwide + FilmBox Extra HD Adria + FilmBox Stars Adria + Film Klub + Film Klub Extra + Film + Hungary + Food Network EMEA + Fox Crime Srbija + Fox Life Srbija + Fox Movies Srbija + Fox News Channel + Fox Srbija + France 24 English + Gametoon + Gradska M TV + Ha Ha + Happy + Happy Reality 1 + Happy Reality 2 + Hayat + Hayat Folk + Hayat Music + Hayatovci + Hayat Plus + HGTV Pan Regional + History 2 Polska + Humana TV Plus + Hype TV + Investigation Discovery Europe + Jeka + JimJam Europe + K1 + K23 TV + K3 + KA TV + Kazbuka + K CN 1 + K CN 2 + K CN 3 + K CN Istok + K CN K + K CN Raška + K CN Zapad + Kitchen TV + Klasik TV + Kurir TV + Kuvo TV + LFC TV + Lol + M1 + M2 + M4 Sport + M5 + Minimax Romania + Mostnet + Motorvision TV + MTV 00s + MTV 80s + MTV 90s + MTV Global + MTV Hits Europe + Muzsika TV + Muzzik + National Geographic + Nat Geo Wild + NBA TV + Nickelodeon + Nick Jr + Nicktoons Adria + TV Nova + Novosadska TV + NTV + OBN + OKK + Pannon TV + Pink Action + Pink Classic + Pink Comedy + Pink Crime & Mystery + Pink Extra + Pink Family + Pink Fashion + Pink Film + Pink Folk 1 + Pink Folk 2 + Pink Hits + Pink Hits 2 + Pink Horror + Pink Kids + Pink Koncert + Pink Kuvar + Pink M + Pink Movies + Pink Music + Pink Music 2 + Pink n Roll + Pink Pedia + Pink Plus + Pink Premium + Pink Reality + Pink Romance + Pink Sci-Fi & Fantasy + Pink Srbija + Pink Serije + Pink Show + Pink Soap + Pink Style + Pink Super Kids + Pink Thriller + Pink Western + Pink World + Pink Zabava + Prva Files + Prva Kick + Prva Life + Prva Max + Prva Srpska TV + Prva TV Crna Gora + Prva World + Red TV + Rock & Roll + RT News + RT Documentary + RTL Hrvatska + RTL Croatia World + RTL Deutschland + RTL Gold + RTL HÁROM + RTL + RTL KETTŐ + RTL Kockica + RTP + RTR Planeta + RTRS TV + RTS 1 + RTS 2 + RTS 3 + RTS Drama + RTS Klasika + RTS Kolo + RTS Muzika + RTS Nauka + RTS Poletarac + RTS Trezor + RTS Zivot + RTV 1 + RTV 2 + RTV Bap + RTV Bosphorus + RTV Melos + RTV SP + RTV Sreće + RTV Subotica + RTV Šumadija + Rossiya 24 + Sandžačka TV Mreža + Sandžak TV + SAT TV + Scifi Srbija + Sorozat + + SOS Kanal Plus + Sremska TV + Story 4 + Studio B + Super D+ + Super Sat + Superstar 2 + Superstar + Super TV 2 + T1 + Tanjug TV + Telebet + Televizija Fokus + Televizija Plus + TLC Balkan + TMS Televizija Telemark + Toxic Folk + Toxic Rap + Toxic TV + Travel Channel Europe + Turizam TV + TV 1000 Balkan + TV 2 + TV 4S + TV5Monde Europe + TV 5 Uzice + TV Apatin + TV AS + TV Bačka + TV Banat + TV Bečej + TV Belle Amie + TV Bor + TV Bujanovac + TV Caribrod + TVCG Sat + TV Cink + TV City + TV Delta + TV Diskos + TV DR + TV Duga + + TV Fruška Gora + TV Galaksija 32 + TV Gem + TV GM Plus + TV Hit Plus Batočina + TV Hram + TV Info 24 Plus + TV Istok + TV Jasenica + TV K-1 + TV K9 + TV Kanal 25 + TV Kanal M + TV Kikinda + TV Kladovo + TV Koreni + TV Kragujevac + TV Kraljevo + TV Kruševac + TV Lav + TV Lav Plus + TV Leskovac + TV Lotel Plus + TV Mag + TV Marš + TV Mix + TV Most + TV Novi Bečej + TV Novi Pazar + TV Palma Plus + TV Pančevo + TV Partizan + TV P Canal + TV Petrovec + TV Pirot + TV Podrinje + TV Požega + TV Priboj + TV Q + TV Rača + TV Ras + TV Ritam + TV Šabac + TV Santos + TV Skay + TV Sunce + TV Trans + TV Trstenik + VA Plus + TV Vranje + TV Vrnjačka Banja + TV Vujic + TV YU Eco + TV Zlatar + TV Zona Plus + Vesti + Viasat Explore East + Viasat History + Viasat Nature East + Vranjska Plus + World Wild Muzzik + Zadruga 1 + Zadruga 2 + Zadruga 3 + Zadruga 4 + Zdravlje TV + Zvezda TV + \ No newline at end of file diff --git a/sites/mts.rs/mts.rs.config.js b/sites/mts.rs/mts.rs.config.js index 89e488f4..00d3b552 100644 --- a/sites/mts.rs/mts.rs.config.js +++ b/sites/mts.rs/mts.rs.config.js @@ -18,7 +18,7 @@ module.exports = { 'X-Requested-With': 'XMLHttpRequest' } }, - parser: function ({ content, channel, date }) { + parser: function ({ content, channel }) { let programs = [] const data = parseContent(content, channel) const items = parseItems(data) @@ -38,21 +38,23 @@ module.exports = { } function parseContent(content, channel) { - const [_, site_id] = channel.site_id.split('#') + const [, site_id] = channel.site_id.split('#') let data try { data = JSON.parse(content) - } catch (e) {} + } catch (error) { + console.log(error) + } if (!data || !data.channels || !data.channels.length) return null return data.channels.find(c => c.id === site_id) || null } -function parseStart(item, date) { +function parseStart(item) { return dayjs.tz(item.full_start, 'Europe/Belgrade') } -function parseStop(item, date) { +function parseStop(item) { return dayjs.tz(item.full_end, 'Europe/Belgrade') } diff --git a/sites/mts.rs/mts.rs.test.js b/sites/mts.rs/mts.rs.test.js index e3f62c5b..87ff70cc 100644 --- a/sites/mts.rs/mts.rs.test.js +++ b/sites/mts.rs/mts.rs.test.js @@ -1,4 +1,4 @@ -// npx epg-grabber --config=sites/mts.rs/mts.rs.config.js --channels=sites/mts.rs/mts.rs.channels.xml --output=guide.xml --days=2 +// npm run grab -- --site=mts.rs const { parser, url, request } = require('./mts.rs.config.js') const dayjs = require('dayjs') @@ -12,7 +12,8 @@ const channel = { site_id: '101#597', xmltv_id: 'RTS1.rs' } -const content = `{"page":0,"total_pages":1,"date":"2021-11-07","channels":[{"id":"597","name":"RTS 1","description":null,"link":null,"image":"https:\/\/mts.rs\/oec\/images\/tv_channels\/904ddd8cd6720a4a1c23eae513b5b957.jpg","position":"101","positions":"101","items":[{"id_channel":"597","title":"Zaboravljeni zlo\u010din","description":"Novinarka-fotoreporter, D\u017ein, istra\u017euje okrutno i senzacionalno, nere\u0161eno ubistvo sekirom iz davne 1873. godine. Ubistvo koje koincidira sa nedavnim identi\u010dnim brutalnim dvostrukim ubistvom. Zaplet se odvija izme\u0111u pri\u010de o\u010devica iz toga doba - pri\u010de iz novinske arhive i D\u017einine privatne borbe sa ljubomorom i sumnjom koje prate njen brak.","start":"00:00:00","duration":"103.00","full_start":"2021-11-06 23:44:00","full_end":"2021-11-07 01:43:00","image":"https:\/\/mts.rs\/oec\/images\/epg\/2_abb81cc24d8ce957eece50f991a31e59780e4e53_E7D8ECDE568E84E3C86CCDBDB647355E.jpg","category":"Bioskopski film","subcategory":""}]}]}` +const content = + '{"page":0,"total_pages":1,"date":"2021-11-07","channels":[{"id":"597","name":"RTS 1","description":null,"link":null,"image":"https://mts.rs/oec/images/tv_channels/904ddd8cd6720a4a1c23eae513b5b957.jpg","position":"101","positions":"101","items":[{"id_channel":"597","title":"Zaboravljeni zlo\u010din","description":"Novinarka-fotoreporter, D\u017ein, istra\u017euje okrutno i senzacionalno, nere\u0161eno ubistvo sekirom iz davne 1873. godine. Ubistvo koje koincidira sa nedavnim identi\u010dnim brutalnim dvostrukim ubistvom. Zaplet se odvija izme\u0111u pri\u010de o\u010devica iz toga doba - pri\u010de iz novinske arhive i D\u017einine privatne borbe sa ljubomorom i sumnjom koje prate njen brak.","start":"00:00:00","duration":"103.00","full_start":"2021-11-06 23:44:00","full_end":"2021-11-07 01:43:00","image":"https://mts.rs/oec/images/epg/2_abb81cc24d8ce957eece50f991a31e59780e4e53_E7D8ECDE568E84E3C86CCDBDB647355E.jpg","category":"Bioskopski film","subcategory":""}]}]}' it('can generate valid url', () => { const result = url({ date, channel }) @@ -38,7 +39,8 @@ it('can parse response', () => { title: 'Zaboravljeni zlo\u010din', category: 'Bioskopski film', icon: 'https://mts.rs/oec/images/epg/2_abb81cc24d8ce957eece50f991a31e59780e4e53_E7D8ECDE568E84E3C86CCDBDB647355E.jpg', - description: `Novinarka-fotoreporter, D\u017ein, istra\u017euje okrutno i senzacionalno, nere\u0161eno ubistvo sekirom iz davne 1873. godine. Ubistvo koje koincidira sa nedavnim identi\u010dnim brutalnim dvostrukim ubistvom. Zaplet se odvija izme\u0111u pri\u010de o\u010devica iz toga doba - pri\u010de iz novinske arhive i D\u017einine privatne borbe sa ljubomorom i sumnjom koje prate njen brak.` + description: + 'Novinarka-fotoreporter, D\u017ein, istra\u017euje okrutno i senzacionalno, nere\u0161eno ubistvo sekirom iz davne 1873. godine. Ubistvo koje koincidira sa nedavnim identi\u010dnim brutalnim dvostrukim ubistvom. Zaplet se odvija izme\u0111u pri\u010de o\u010devica iz toga doba - pri\u010de iz novinske arhive i D\u017einine privatne borbe sa ljubomorom i sumnjom koje prate njen brak.' } ]) }) @@ -47,7 +49,7 @@ it('can handle empty guide', () => { const result = parser({ date, channel, - content: `{"message":"Nema rezultata."}` + content: '{"message":"Nema rezultata."}' }) expect(result).toMatchObject([]) }) diff --git a/sites/mujtvprogram.cz/mujtvprogram.cz.channels.xml b/sites/mujtvprogram.cz/mujtvprogram.cz.channels.xml index 21bf6f62..ab8bef3f 100644 --- a/sites/mujtvprogram.cz/mujtvprogram.cz.channels.xml +++ b/sites/mujtvprogram.cz/mujtvprogram.cz.channels.xml @@ -1,274 +1,272 @@ - - - 360TuneBox - 3SAT - Adult Channel - Al Jazeera - AMC - - Animal Planet - - ARD - Das Erste - Arena Sport 1 HD - Arena Sport 2 - ARTE - Auto Motor Sport HD - AXN - - AXN Black - - AXN White - BabyTV - Barrandov Krimi - BBC World News HD - Bloomberg Europe - Blue Hustler - Boomerang - BoomerangEMEA.us - - Brazzers TV Europe - Canal 24 Horas - CANAL+ Domo - Cartoon Network - CBS Reality - - Cinemax - - Cinemax2 - Club MTV Europe - CNBC Europe - CNN International Europe - CNN Prima NEWS HD - Cool TV - Crime & Investigation - CS Film - - CS History - CS Horror - CS Mystery - ČT :D HD - ČT art HD - ČT Sport HD - - ČT1 HD - - ČT2 HD - ČT24 HD - ČT3 HD - Deutsche Welle English - Deluxe Music - Discovery Channel - - Discovery Science - Disney Channel - Disney Channel - Disney Junior - DMAX - DocuBox - Dorcel TV - Dorcel XXX - Duck TV - Duck TV - Duna - Duna SK - Dvojka HD - E! Europe - English Club TV - Epic Drama HD - Erox - Eroxxx - EuroNews - Eurosport 1 - - Eurosport 2 - - Extreme Sports Channel - Fashion TV Europe - FashionBox.nl - Fast&FunBox - FightBox - Film Europe HD - - Film Europe+ HD - Film+ - - FilmBox - - FilmBox Extra HD - - FilmBox Family - - - FilmBox Premium HD - FilmBox Premium - FilmBox Stars - - Fishing and Hunting - - Food Network - France 24 HD - France 24 - Ginx eSports TV - Golf Channel - HBO - - HBO2 - - HBO3 - HBO3 - History HD - - HTV1 - HTV2 - Hustler - Hustler HD - Investigation Discovery - Jednotka HD - JimJam - JOJ Cinema HD - JOJ Family HD - JOJCinema.sk - Jojko.sk - JOJ Plus - JOJSport.sk - JOJWAU.sk - Kabel1 - KiKA - Kino Barrandov - LALA TV - LEO TV - Love Nature HD - M1 - M2 - Markiza Dajto - Markíza International - Markíza - Markíza Doma - MDR - Mezzo HD - Mezzo Live HD - Minimax - Mňam TV - MnauTV.cz - - MTV 00s - MTV 80s - MTV 90s - MTV - MTVHitsEurope.uk - MTV Live - Music Box - Náš region TV - National Geographic - - - National Geographic Wild - - - Nick Jr Czech - Nickelodeon - Nicktoons - Nova Action HD - Nova Cinema HD - Nova Fun HD - Nova Gold - Nova HD - Nova International - Nova Lady - Nova Sport 1 HD - Nova Sport 2 HD - Nova Sport 3 - Nova Sport 4 - ÓČKO - ÓČKO BLACK HD - ÓČKO EXPRES HD - ÓČKO STAR - ORF1 - - ORF2 - - Paramount Network - Playboy TV Europe - Polsat - - Power TV - Praha TV - Premier Sport 1 - Premier Sport 2 - Prima COOL HD - Prima HD - Prima KRIMI HD - Prima LOVE HD - Prima MAX HD - Prima Show - Prima STAR - Prima ZOOM HD - PrimaPlus.cz - Private TV - PRO7 - - Rebel - RELAX - Retro - Russia Today - RT Doc - RTL - RTL Hungary - RTL Hungary - RTL2 - SAT.1 - - SAT.1 Gold - Senzi - Sky News International - Skylink 7 - Šláger Originál - Šlágr Premium HD - Spektrum HD - Spektrum Home - Spektrum - - Sport1 - - Sport 1 - - Sport 2 - - Sport.sk - SPORT5 - Stingray Classica HD - Stingray CMusic - Stingray iConcerts HD - TA3 HD - Televize Seznam - TLC - Travel Channel - Travelxp HD - TV5 Monde - TV Barrandov HD - JOJ - TV Central - - TV Lux HD - TV Noe HD - - TVP 1 - TVP 2 - TV Paprika - - TV8 HD - UP NETWORK - - Viasat Explore - - Viasat History - - Viasat Nature - - VIXEN HD - VOX - ZDF - ZDF NEO - - \ No newline at end of file + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3SAT + AMC + Animal Planet + ARTE + Auto Motor Sport HD + AXN Black + AXN + AXN White + Barrandov Krimi + Canal 24 Horas + CANAL+ Domo + Cartoon Network + CBS Reality + Cinemax2 + Cinemax + CNBC Europe + CNN Prima NEWS HD + Crime & Investigation + CS Film + CS History + CS Horror + CS Mystery + ČT1 HD + ČT2 HD + ČT24 HD + ČT3 HD + ČT art HD + ČT :D HD + ČT Sport HD + ARD - Das Erste + Discovery Channel + Discovery Science + Disney Channel + Duck TV + Duna SK + E! Europe + Epic Drama HD + Eurosport 1 + Eurosport 2 + FashionBox.nl + FilmBox + FilmBox Extra HD + FilmBox Family + FilmBox Premium HD + FilmBox Stars + Film Europe HD + Film Europe+ HD + Film+ + Food Network + Golf Channel + HBO2 + HBO3 + HBO + History HD + HTV1 + HTV2 + Investigation Discovery + JimJam + JOJ Cinema HD + Kabel1 + KiKA + Kino Barrandov + LALA TV + LEO TV + M1 + M2 + Markíza International + MDR + Minimax + Mňam TV + MnauTV.cz + MTV + MTV Live + Náš region TV + National Geographic + National Geographic Wild + Nickelodeon + Nick Jr Czech + Nicktoons + Nova Action HD + Nova Cinema HD + Nova Fun HD + Nova Gold + Nova International + Nova Lady + Nova Sport 1 HD + Nova Sport 2 HD + Nova Sport 3 + Nova Sport 4 + ÓČKO + ÓČKO BLACK HD + ÓČKO EXPRES HD + ÓČKO STAR + ORF1 + ORF2 + Paramount Network + Polsat + Power TV + Praha TV + Premier Sport 1 + Premier Sport 2 + Prima HD + Prima COOL HD + Prima KRIMI HD + Prima LOVE HD + Prima MAX HD + PrimaPlus.cz + Prima Show + Prima STAR + Prima ZOOM HD + PRO7 + Rebel + RELAX + Retro + RTL + RTL Hungary + RTL2 + SAT.1 + SAT.1 Gold + Skylink 7 + Šláger Originál + Šlágr Premium HD + Spektrum HD + Spektrum Home + Sport 1 + Sport1 + Sport 2 + SPORT5 + Televize Seznam + Fishing and Hunting + TLC + Travel Channel + Travelxp HD + TV Barrandov HD + TV Central + TV Noe HD + Nova HD + TVP 1 + TVP 2 + TV Paprika + UP NETWORK + Viasat Explore + Viasat History + Viasat Nature + VOX + ZDF + BoomerangEMEA.us + DMAX + ZDF NEO + 360TuneBox + Adult Channel + Al Jazeera + BabyTV + BBC World News HD + Bloomberg Europe + Blue Hustler + Boomerang + Brazzers TV Europe + Club MTV Europe + CNN International Europe + Deluxe Music + Disney Channel + Disney Junior + DocuBox + Dorcel TV + Dorcel XXX + Deutsche Welle English + English Club TV + Erox + Eroxxx + EuroNews + Extreme Sports Channel + Fashion TV Europe + Fast&FunBox + FightBox + France 24 HD + Ginx eSports TV + Hustler HD + Hustler + Love Nature HD + MTV 00s + MTV 80s + MTV 90s + MTVHitsEurope.uk + Music Box + Playboy TV Europe + Private TV + Russia Today + RT Doc + Sky News International + Stingray Classica HD + Stingray CMusic + Stingray iConcerts HD + VIXEN HD + France 24 + Mezzo HD + Mezzo Live HD + TV5 Monde + Cool TV + Duna + RTL Hungary + Arena Sport 1 HD + Arena Sport 2 + Duck TV + Dvojka HD + FilmBox Premium + HBO3 + Jednotka HD + JOJCinema.sk + JOJ Family HD + Jojko.sk + JOJ Plus + JOJSport.sk + JOJWAU.sk + Markíza + Markiza Dajto + Markíza Doma + Senzi + Spektrum + Sport.sk + TA3 HD + TV8 HD + JOJ + TV Lux HD + \ No newline at end of file diff --git a/sites/mujtvprogram.cz/mujtvprogram.cz.test.js b/sites/mujtvprogram.cz/mujtvprogram.cz.test.js index d0a45073..c15d2329 100644 --- a/sites/mujtvprogram.cz/mujtvprogram.cz.test.js +++ b/sites/mujtvprogram.cz/mujtvprogram.cz.test.js @@ -1,4 +1,4 @@ -// npx epg-grabber --config=sites/mujtvprogram.cz/mujtvprogram.cz.config.js --channels=sites/mujtvprogram.cz/mujtvprogram.cz.channels.xml --output=guide.xml --days=2 +// npm run grab -- --site=mujtvprogram.cz const { parser, url } = require('./mujtvprogram.cz.config.js') const fs = require('fs') @@ -37,8 +37,9 @@ it('can parse response', () => { return p }) expect(results[3]).toMatchObject({ - title: `Čepice`, - description: `Jarka (J. Bohdalová) vyčítá manželovi Jiřímu (F. Řehák), že jí nepomáhá při předvánočním úklidu. Vzápětí ale náhodou najde ve skříni ukrytou dámskou čepici a napadne ji, že jde o Jiřího dárek pro ni pod stromeček. Její chování se ihned změní. Jen muži naznačí, že by chtěla čepici jiné barvy. Manžel jí ovšem řekne, že čepici si u něj schoval kamarád Venca (M. Šulc). Zklamaná žena to prozradí Vencově manželce Božce (A. Tománková). Na Štědrý den však Božka najde pod stromečkem jen rtěnku...`, + title: 'Čepice', + description: + 'Jarka (J. Bohdalová) vyčítá manželovi Jiřímu (F. Řehák), že jí nepomáhá při předvánočním úklidu. Vzápětí ale náhodou najde ve skříni ukrytou dámskou čepici a napadne ji, že jde o Jiřího dárek pro ni pod stromeček. Její chování se ihned změní. Jen muži naznačí, že by chtěla čepici jiné barvy. Manžel jí ovšem řekne, že čepici si u něj schoval kamarád Venca (M. Šulc). Zklamaná žena to prozradí Vencově manželce Božce (A. Tománková). Na Štědrý den však Božka najde pod stromečkem jen rtěnku...', category: 'film', date: '1983', director: ['Mudra F.'], diff --git a/sites/musor.tv/musor.tv.channels.xml b/sites/musor.tv/musor.tv.channels.xml index c723bd4e..49d7201f 100644 --- a/sites/musor.tv/musor.tv.channels.xml +++ b/sites/musor.tv/musor.tv.channels.xml @@ -1,174 +1,172 @@ - - - club MTV - E! Entertainment - English Club TV - Extreme Sports Channel - Fightbox - Filmbox Arthouse - MTV 00s - MTV 90s - MTV European - MTV Hits - MTV Live - Sky News - Stingray Classica - Stingray C Music - Total Dance TV - Trace Sports - Trace Urban - Travel XP - 7.TV - AMC - Animal Planet - Apostol TV - Arena4 - ATV - ATV Spirit - Auto Motor Sport - AXN - Baby TV - Balaton TV - BBC Earth - BBC World News - Boomerang - Cartoon Network - CBS Reality - Cinemax 2 - Cinemax - CNBC - CNN - Comedy Central Family - Comedy Central - Cool - d1 TV - Da Vinci - DIGI Animal World - DIGI Life - DIGI Sport 1 - DIGI Sport 2 - DIGI Sport 3 - DIGI World - Dikh TV - Direct One TV - Discovery Channel - Discovery Science - Disney Channel - Docubox - Duck TV - Duna TV - Duna World - Epic Drama - Erdély TV - Euronews - Eurosport 1 - Eurosport 2 - Eurosport 4K - EWTN / Bonum TV - Fashion TV - Fehérvár TV - FEM3 - Film4 - Filmbox Extra - Filmbox Family - Filmbox Premium - Filmbox Stars - Film Café - Film Mánia - Film Now - film+ - Fit HD - FIX TV - Food Network - Funbox UltraHD 4K - Galaxy4 - Gametoon - Hatoscsatorna - HBO 2 - HBO 3 - HBO - Hegyvidék TV - Heti TV - HGTV - Hír TV - History - H!T Music - ID - Izaura TV - JimJam - Jocky TV - Kapos TV - Kölcsey TV - Life TV - Love Nature - M1 - M2 / Petőfi - M4 Sport - M4 Sport+ - M5 - Match4 - Magyar Mozi TV - MAX4 - Mezzo - Mezzo Live - Minimax - Mozi+ - Moziverzum - MTV 80s - 1 Music Channel - Muzsika TV - National Geographic - National Geographic Wild - Nautical Channel - Nickelodeon - Nick Jr - Nicktoons - Ozone TV - Pannon TV (Vajdaság) - Paramount Network - PAX TV - Pesti TV - Prime - RTL Gold - RTL KETTŐ - RTL HÁROM - RTL - Sláger TV - Sorozat+ - Spektrum Home - Spektrum - Spíler1 TV - Spíler2 TV - Sport1 - Sport2 - Stingray iConcerts - Story4 - Super TV2 - Szeged TV - TeenNick - Fishing & Hunting Channel - TLC - Travel Channel - TV2 - TV21 Ungvár (Kárpátalja) - TV2 Comedy - TV2 Kids - TV2 Séf - TV4 - TV Eger - TV Paprika - Újbuda TV - Viasat2 - Viasat3 - Viasat6 - Viasat Explore - Viasat Film - Viasat History - Viasat Nature - Zalaegerszegi TV - Zenebutik TV - - - - + + + + club MTV + E! Entertainment + English Club TV + Extreme Sports Channel + Fightbox + Filmbox Arthouse + MTV 00s + MTV 90s + MTV European + MTV Hits + MTV Live + Sky News + Stingray Classica + Stingray C Music + Total Dance TV + Trace Sports + Trace Urban + Travel XP + 7.TV + AMC + Animal Planet + Apostol TV + Arena4 + ATV + ATV Spirit + Auto Motor Sport + AXN + Baby TV + Balaton TV + BBC Earth + BBC World News + Boomerang + Cartoon Network + CBS Reality + Cinemax 2 + Cinemax + CNBC + CNN + Comedy Central Family + Comedy Central + Cool + d1 TV + Da Vinci + DIGI Animal World + DIGI Life + DIGI Sport 1 + DIGI Sport 2 + DIGI Sport 3 + DIGI World + Dikh TV + Direct One TV + Discovery Channel + Discovery Science + Disney Channel + Docubox + Duck TV + Duna TV + Duna World + Epic Drama + Erdély TV + Euronews + Eurosport 1 + Eurosport 2 + Eurosport 4K + EWTN / Bonum TV + Fashion TV + Fehérvár TV + FEM3 + Film4 + Filmbox Extra + Filmbox Family + Filmbox Premium + Filmbox Stars + Film Café + Film Mánia + Film Now + film+ + Fit HD + FIX TV + Food Network + Funbox UltraHD 4K + Galaxy4 + Gametoon + Hatoscsatorna + HBO 2 + HBO 3 + HBO + Hegyvidék TV + Heti TV + HGTV + Hír TV + History + H!T Music + ID + Izaura TV + JimJam + Jocky TV + Kapos TV + Kölcsey TV + Life TV + Love Nature + M1 + M2 / Petőfi + M4 Sport + M4 Sport+ + M5 + Magyar Mozi TV + Match4 + MAX4 + Mezzo + Mezzo Live + Minimax + Mozi+ + Moziverzum + MTV 80s + 1 Music Channel + Muzsika TV + National Geographic + National Geographic Wild + Nautical Channel + Nickelodeon + Nick Jr + Nicktoons + Ozone TV + Pannon TV (Vajdaság) + Paramount Network + PAX TV + Pesti TV + Prime + RTL Gold + RTL HÁROM + RTL + RTL KETTŐ + Sláger TV + Sorozat+ + Spektrum Home + Spektrum + Spíler1 TV + Spíler2 TV + Sport1 + Sport2 + Stingray iConcerts + Story4 + Super TV2 + Szeged TV + TeenNick + Fishing & Hunting Channel + TLC + Travel Channel + TV2 + TV21 Ungvár (Kárpátalja) + TV2 Comedy + TV2 Kids + TV2 Séf + TV4 + TV Eger + TV Paprika + Újbuda TV + Viasat2 + Viasat3 + Viasat6 + Viasat Explore + Viasat Film + Viasat History + Viasat Nature + Zalaegerszegi TV + Zenebutik TV + diff --git a/sites/musor.tv/musor.tv.config.js b/sites/musor.tv/musor.tv.config.js index a436b8af..85568d9f 100644 --- a/sites/musor.tv/musor.tv.config.js +++ b/sites/musor.tv/musor.tv.config.js @@ -37,7 +37,7 @@ module.exports = { }, async channels() { const html = await axios - .get(`https://musor.tv/`) + .get('https://musor.tv/') .then(r => r.data) .catch(console.log) diff --git a/sites/musor.tv/musor.tv.test.js b/sites/musor.tv/musor.tv.test.js index 351c5cd6..6caa143a 100644 --- a/sites/musor.tv/musor.tv.test.js +++ b/sites/musor.tv/musor.tv.test.js @@ -1,5 +1,5 @@ // npm run channels:parse -- --config=./sites/musor.tv/musor.tv.config.js --output=./sites/musor.tv/musor.tv.channels.xml -// npx epg-grabber --config=sites/musor.tv/musor.tv.config.js --channels=sites/musor.tv/musor.tv.channels.xml --output=guide.xml --days=2 +// npm run grab -- --site=musor.tv const { parser, url } = require('./musor.tv.config.js') const fs = require('fs') @@ -38,7 +38,7 @@ it('can parse response', () => { expect(results[0]).toMatchObject({ start: '2022-11-19T23:00:00.000Z', stop: '2022-11-19T23:30:00.000Z', - title: `Egészségtér`, + title: 'Egészségtér', description: 'Egészségtér címmel új természetgyógyászattal foglalkozó magazinműsor indult hetente fél órás időtartamban a hatoscsatornán. A műsor derűs, objektív hangvételével és szakmailag magas színvonalú ismeretterjesztő jellegével az e' }) @@ -46,7 +46,7 @@ it('can parse response', () => { expect(results[1]).toMatchObject({ start: '2022-11-19T23:30:00.000Z', stop: '2022-11-20T00:00:00.000Z', - title: `Tradíció Klipek`, + title: 'Tradíció Klipek', description: 'Tradíció Klipek Birinyi József néprajzi, vallási, népzenei, népszokás filmjeiből.' }) }) @@ -54,7 +54,7 @@ it('can parse response', () => { it('can handle empty guide', () => { const result = parser({ date, - content: `` + content: '' }) expect(result).toMatchObject([]) }) diff --git a/sites/myafn.dodmedia.osd.mil/myafn.dodmedia.osd.mil.channels.xml b/sites/myafn.dodmedia.osd.mil/myafn.dodmedia.osd.mil.channels.xml index ac6e5e1b..080afd42 100644 --- a/sites/myafn.dodmedia.osd.mil/myafn.dodmedia.osd.mil.channels.xml +++ b/sites/myafn.dodmedia.osd.mil/myafn.dodmedia.osd.mil.channels.xml @@ -1,13 +1,11 @@ - - - AFN|prime Atlantic - AFN|news - AFN|sports - AFN|prime Pacific - AFN|spectrum - AFN|sports2 - AFN|family,AFN|pulse - AFN|movie - - + + AFN|family,AFN|pulse + AFN|movie + AFN|news + AFN|prime Atlantic + AFN|prime Pacific + AFN|spectrum + AFN|sports + AFN|sports2 + 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 024fc0c7..0969598d 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 @@ -40,7 +40,7 @@ module.exports = { }, async channels() { const data = await axios - .get(`https://v3.myafn.dodmedia.osd.mil/api/json/32/channels.json`) + .get('https://v3.myafn.dodmedia.osd.mil/api/json/32/channels.json') .then(r => r.data) .catch(console.log) @@ -51,7 +51,7 @@ module.exports = { } } -function parseStart(item, date) { +function parseStart(item) { return dayjs.utc(item.e, 'YYYY,M,D,H,m,s,0').add(1, 'month') } diff --git a/sites/myafn.dodmedia.osd.mil/myafn.dodmedia.osd.mil.test.js b/sites/myafn.dodmedia.osd.mil/myafn.dodmedia.osd.mil.test.js index 91f27eb6..1fefb07c 100644 --- a/sites/myafn.dodmedia.osd.mil/myafn.dodmedia.osd.mil.test.js +++ b/sites/myafn.dodmedia.osd.mil/myafn.dodmedia.osd.mil.test.js @@ -1,4 +1,4 @@ -// npx epg-grabber --config=sites/myafn.dodmedia.osd.mil/myafn.dodmedia.osd.mil.config.js --channels=sites/myafn.dodmedia.osd.mil/myafn.dodmedia.osd.mil.channels.xml --output=guide.xml --days=2 +// npm run grab -- --site=myafn.dodmedia.osd.mil // npm run channels:parse -- --config=./sites/myafn.dodmedia.osd.mil/myafn.dodmedia.osd.mil.config.js --output=./sites/myafn.dodmedia.osd.mil/myafn.dodmedia.osd.mil.channels.xml const { parser, url } = require('./myafn.dodmedia.osd.mil.config.js') @@ -21,7 +21,8 @@ it('can generate valid url', () => { }) it('can parse response', () => { - const content = `[{"a":566,"b":2,"c":"2022,9,3,3,0,0,0","d":"2022,9,3,4,0,0,0","e":"2022,9,3,3,0,0,0","f":"2022,9,3,4,0,0,0","g":60,"h":"This Week with George Stephanopoulos (ABC)","i":"Episode Title","j":"TV-14","k":false,"l":"Former Clinton White House staffer and current co-anchor of ABC's weekday morning news show \\"\\"Good Morning America,\\"\\" George Stephanopoulos and co-anchors Martha Raddatz and Jonathan Karl offer a look at current events with a focus on the politics of the day. Each week's show includes interviews with top newsmakers (including some of the nation's top political leaders) as well as a roundtable discussion, usually featuring journalists from ABC and other news organizations, of the week's happenings. Since 2008, the program has broadcast from a studio at the Newseum in Washington, D.C.","m":"News,Politics,Public affairs,Talk","n":694284445,"o":60,"p":20,"q":true,"r":694285705,"s":null}]` + const content = + '[{"a":566,"b":2,"c":"2022,9,3,3,0,0,0","d":"2022,9,3,4,0,0,0","e":"2022,9,3,3,0,0,0","f":"2022,9,3,4,0,0,0","g":60,"h":"This Week with George Stephanopoulos (ABC)","i":"Episode Title","j":"TV-14","k":false,"l":"Former Clinton White House staffer and current co-anchor of ABC\'s weekday morning news show \\"\\"Good Morning America,\\"\\" George Stephanopoulos and co-anchors Martha Raddatz and Jonathan Karl offer a look at current events with a focus on the politics of the day. Each week\'s show includes interviews with top newsmakers (including some of the nation\'s top political leaders) as well as a roundtable discussion, usually featuring journalists from ABC and other news organizations, of the week\'s happenings. Since 2008, the program has broadcast from a studio at the Newseum in Washington, D.C.","m":"News,Politics,Public affairs,Talk","n":694284445,"o":60,"p":20,"q":true,"r":694285705,"s":null}]' const result = parser({ content, date, channel }).map(p => { p.start = p.start.toJSON() p.stop = p.stop.toJSON() diff --git a/sites/mysky.com.ph/mysky.com.ph.channels.xml b/sites/mysky.com.ph/mysky.com.ph.channels.xml index b45ab088..ee75ab84 100644 --- a/sites/mysky.com.ph/mysky.com.ph.channels.xml +++ b/sites/mysky.com.ph/mysky.com.ph.channels.xml @@ -1,125 +1,123 @@ - - - A2Z - ANC - ASIAN FOOD NETWORK - BABY TV - CARTOON NETWORK - CELESTIAL CLASSIC MOVIES - CINEMA ONE - CINEMO! - DA VINCI KIDS - GLOBAL TREKKER HD - JEEPNEY TV - KAPAMILYA CHANNEL - KBS WORLD - KIX - KNOWLEDGE CHANNEL - K-PLUS - LOVE NATURE HD - METRO CHANNEL SD - MEZZO LIVE HD - MTV 90s - MYX - NHK WORLD JAPAN - ONE SPORTS - PBO - PREMIER FOOTBALL HD - PREMIER SPORTS - PREMIER SPORTS 2 HD - ROCK ENTERTAINMENT - ROCK EXTREME - SOLAR SPORTS - SPOTV - SPOTV 2 - STAR BHARAT - TMC (TAGALIZED MOVIE CHANNEL) - TapAction Flix - TAP EDGE - TAP MOVIES - TAP SPORTS HD - TAP TV - TECH STORM - THRILL - TLC - TV5 - TVBS ASIA - TVBS NEWS - ZOO MOO - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A2Z + ANC + ASIAN FOOD NETWORK + BABY TV + CARTOON NETWORK + CELESTIAL CLASSIC MOVIES + CINEMA ONE + CINEMO! + DA VINCI KIDS + GLOBAL TREKKER HD + JEEPNEY TV + KAPAMILYA CHANNEL + KBS WORLD + KIX + KNOWLEDGE CHANNEL + K-PLUS + LOVE NATURE HD + METRO CHANNEL SD + MEZZO LIVE HD + MTV 90s + MYX + NHK WORLD JAPAN + ONE SPORTS + PBO + PREMIER FOOTBALL HD + PREMIER SPORTS + PREMIER SPORTS 2 HD + ROCK ENTERTAINMENT + ROCK EXTREME + SOLAR SPORTS + SPOTV + SPOTV 2 + STAR BHARAT + TMC (TAGALIZED MOVIE CHANNEL) + TapAction Flix + TAP EDGE + TAP MOVIES + TAP SPORTS HD + TAP TV + TECH STORM + THRILL + TLC + TV5 + TVBS ASIA + TVBS NEWS + ZOO MOO + diff --git a/sites/mysky.com.ph/mysky.com.ph.config.js b/sites/mysky.com.ph/mysky.com.ph.config.js index 3735b0e0..af604cb2 100644 --- a/sites/mysky.com.ph/mysky.com.ph.config.js +++ b/sites/mysky.com.ph/mysky.com.ph.config.js @@ -33,7 +33,7 @@ module.exports = { }, async channels() { const items = await axios - .get(`https://skyepg.mysky.com.ph/Main/getEventsbyType`) + .get('https://skyepg.mysky.com.ph/Main/getEventsbyType') .then(r => r.data.location) .catch(console.log) diff --git a/sites/mysky.com.ph/mysky.com.ph.test.js b/sites/mysky.com.ph/mysky.com.ph.test.js index 40f46c19..b53c25ae 100644 --- a/sites/mysky.com.ph/mysky.com.ph.test.js +++ b/sites/mysky.com.ph/mysky.com.ph.test.js @@ -1,4 +1,4 @@ -// npx epg-grabber --config=sites/mysky.com.ph/mysky.com.ph.config.js --channels=sites/mysky.com.ph/mysky.com.ph.channels.xml --output=guide.xml --days=2 +// npm run grab -- --site=mysky.com.ph // npm run channels:parse -- --config=./sites/mysky.com.ph/mysky.com.ph.config.js --output=./sites/mysky.com.ph/mysky.com.ph.channels.xml const { parser, url } = require('./mysky.com.ph.config.js') @@ -19,7 +19,8 @@ it('can generate valid url', () => { }) it('can parse response', () => { - const content = `{"events":[{"name":"TV PATROL","location":"8","start":"2022/10/04 19:00","end":"2022/10/04 20:00","userData":{"description":"Description example"}},{"name":"DARNA","location":"8","start":"2022/10/05 20:00","end":"2022/10/05 20:45","userData":{"description":""}},{"name":"Zoe Bakes S1","location":"22","start":"2022/10/04 20:30","end":"2022/10/04 21:00","userData":{"description":"Zo Franois Dad is a beekeeper. So for his birthday, she bakes him a special beehiveshaped cake."}}]}` + const content = + '{"events":[{"name":"TV PATROL","location":"8","start":"2022/10/04 19:00","end":"2022/10/04 20:00","userData":{"description":"Description example"}},{"name":"DARNA","location":"8","start":"2022/10/05 20:00","end":"2022/10/05 20:45","userData":{"description":""}},{"name":"Zoe Bakes S1","location":"22","start":"2022/10/04 20:30","end":"2022/10/04 21:00","userData":{"description":"Zo Franois Dad is a beekeeper. So for his birthday, she bakes him a special beehiveshaped cake."}}]}' const result = parser({ content, channel, date }).map(p => { p.start = p.start.toJSON() p.stop = p.stop.toJSON() @@ -38,7 +39,7 @@ it('can parse response', () => { it('can handle empty guide', () => { const result = parser({ - content: ``, + content: '', channel, date }) diff --git a/sites/mytvsuper.com/mytvsuper.com.channels.xml b/sites/mytvsuper.com/mytvsuper.com.channels.xml index 3befb083..14b11e0c 100644 --- a/sites/mytvsuper.com/mytvsuper.com.channels.xml +++ b/sites/mytvsuper.com/mytvsuper.com.channels.xml @@ -1,109 +1,107 @@ - - - Al Jazeera English - Animal Planet - Animax - Arirang TV - Asian Drama - Asian Variety - AXN - BBC Earth - BBC Lifestyle - BBC World News - CBeebies - CCM - China Movie Channel - Chinese Drama - Chinese Opera Channel - Classic Movies - Channel NewsAsia - Creation TV - Discovery Channel - Discovery Science - DW - Entertainment News - Eurosport - Fashion One - France 24 - GEM - Global Trekker - Golden Jade - Hands Up Channel - J2 - Jade - KIX - Love Nature HD - Love Nature 4K - Mainland News - Mei Ah Movie Channel - Mezzo Live HD - myTV SUPER 18 - myTV SUPER Live Soccer 1 - myTV SUPER Live Soccer 2 - myTV SUPER Live Soccer 3 - myTV SUPER Live Soccer 4 - myTV SUPER Live Soccer 5 - NHK World-Japan - Nickelodeon - Nick Jr - Paramount Network - Pearl - ROCK Entertainment - ROCK Extreme - Thrill - TVB Classic - TVB Finance, Sports & Information Channel - TVB News Channel - TVBS Asia - TVBS News - tvN - 半島電視台英語頻道 - 動物星球頻道 - Animax - 亞洲劇台 - 亞洲綜藝台 - AXN - BBC Earth - BBC Lifestyle - 天映經典頻道 - 中國電影頻道 - 華語劇台 - 戲曲台 - 粵語片台 - 創世電視 - Discovery頻道 - Discovery科學頻道 - 娛樂新聞台 - France 24 - GEM - Global Trekker - 黃金翡翠台 - Hands Up Channel - J2 - 翡翠台 - KIX - Love Nature HD - Love Nature 4K - 神州新聞台 - 美亞電影台 - myTV SUPER 18台 - myTV SUPER直播足球1台 - myTV SUPER直播足球2台 - myTV SUPER直播足球3台 - myTV SUPER直播足球4台 - myTV SUPER直播足球5台 - Nickelodeon - Paramount Network - 明珠台 - ROCK綜藝娛樂 - ROCK超極娛樂 - Thrill - 千禧經典台 - 無綫財經 體育 資訊台 - 無綫新聞台 - 無線衛星亞洲台 - 無線衛星新聞台 - tvN - - + + Al Jazeera English + Animal Planet + Animax + Arirang TV + Asian Drama + Asian Variety + AXN + BBC Earth + BBC Lifestyle + BBC World News + CBeebies + CCM + China Movie Channel + Chinese Drama + Chinese Opera Channel + Classic Movies + Channel NewsAsia + Creation TV + Discovery Channel + Discovery Science + DW + Entertainment News + Eurosport + Fashion One + France 24 + GEM + Global Trekker + Golden Jade + Hands Up Channel + J2 + Jade + KIX + Love Nature HD + Love Nature 4K + Mainland News + Mei Ah Movie Channel + Mezzo Live HD + myTV SUPER 18 + myTV SUPER Live Soccer 1 + myTV SUPER Live Soccer 2 + myTV SUPER Live Soccer 3 + myTV SUPER Live Soccer 4 + myTV SUPER Live Soccer 5 + NHK World-Japan + Nickelodeon + Nick Jr + Paramount Network + Pearl + ROCK Entertainment + ROCK Extreme + Thrill + TVB Classic + TVB Finance, Sports & Information Channel + TVB News Channel + TVBS Asia + TVBS News + tvN + 半島電視台英語頻道 + 動物星球頻道 + Animax + 亞洲劇台 + 亞洲綜藝台 + AXN + BBC Earth + BBC Lifestyle + 天映經典頻道 + 中國電影頻道 + 華語劇台 + 戲曲台 + 粵語片台 + 創世電視 + Discovery頻道 + Discovery科學頻道 + 娛樂新聞台 + France 24 + GEM + Global Trekker + 黃金翡翠台 + Hands Up Channel + J2 + 翡翠台 + KIX + Love Nature HD + Love Nature 4K + 神州新聞台 + 美亞電影台 + myTV SUPER 18台 + myTV SUPER直播足球1台 + myTV SUPER直播足球2台 + myTV SUPER直播足球3台 + myTV SUPER直播足球4台 + myTV SUPER直播足球5台 + Nickelodeon + Paramount Network + 明珠台 + ROCK綜藝娛樂 + ROCK超極娛樂 + Thrill + 千禧經典台 + 無綫財經 體育 資訊台 + 無綫新聞台 + 無線衛星亞洲台 + 無線衛星新聞台 + tvN + diff --git a/sites/mytvsuper.com/mytvsuper.com.test.js b/sites/mytvsuper.com/mytvsuper.com.test.js index fba9505d..6025d492 100644 --- a/sites/mytvsuper.com/mytvsuper.com.test.js +++ b/sites/mytvsuper.com/mytvsuper.com.test.js @@ -1,10 +1,9 @@ // npm run channels:parse -- --config=./sites/mytvsuper.com/mytvsuper.com.config.js --output=./sites/mytvsuper.com/mytvsuper.com.channels.xml --set=lang:zh -// npx epg-grabber --config=sites/mytvsuper.com/mytvsuper.com.config.js --channels=sites/mytvsuper.com/mytvsuper.com.channels.xml --output=guide.xml --days=2 +// npm run grab -- --site=mytvsuper.com const { parser, url } = require('./mytvsuper.com.config.js') const fs = require('fs') const path = require('path') -const axios = require('axios') const dayjs = require('dayjs') const utc = require('dayjs/plugin/utc') const customParseFormat = require('dayjs/plugin/customParseFormat') diff --git a/sites/nhk.or.jp/nhk.or.jp.channels.xml b/sites/nhk.or.jp/nhk.or.jp.channels.xml index 5242039b..1fcd6def 100644 --- a/sites/nhk.or.jp/nhk.or.jp.channels.xml +++ b/sites/nhk.or.jp/nhk.or.jp.channels.xml @@ -1,8 +1,4 @@ - - - NHK - World-Japan - - \ No newline at end of file + + NHK World-Japan + \ No newline at end of file diff --git a/sites/nhk.or.jp/nhk.or.jp.config.js b/sites/nhk.or.jp/nhk.or.jp.config.js index f51fe044..b43bf6a4 100644 --- a/sites/nhk.or.jp/nhk.or.jp.config.js +++ b/sites/nhk.or.jp/nhk.or.jp.config.js @@ -1,65 +1,70 @@ const dayjs = require('dayjs') module.exports = { - site: 'nhk.or.jp', - days: 5, - output: 'nhk.or.jp.guide.xml', - channels: 'nhk.or.jp.channels.xml', - lang: 'en', - delay: 5000, + site: 'nhk.or.jp', + days: 5, + output: 'nhk.or.jp.guide.xml', + channels: 'nhk.or.jp.channels.xml', + lang: 'en', + delay: 5000, - url: function ({ date }) { - return `https://nwapi.nhk.jp/nhkworld/epg/v7b/world/s${date.unix() * 1000}-e${date.add(1, 'd').unix() * 1000}.json` - }, + url: function ({ date }) { + return `https://nwapi.nhk.jp/nhkworld/epg/v7b/world/s${date.unix() * 1000}-e${ + date.add(1, 'd').unix() * 1000 + }.json` + }, - request: { - method: 'GET', - timeout: 5000, - cache: { ttl: 60 * 1000 }, - headers: { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36' } - }, - - logo: function (context) { - return context.channel.logo - }, - - parser: function (context) { - const programs = [] - - const items = parseItems(context.content) - - items.forEach(item => { - programs.push({ - title: item.title, - start: parseStart(item), - stop: parseStop(item), - description: item.description, - icon: parseIcon(item), - sub_title: item.subtitle - }) - }) - - return programs + request: { + method: 'GET', + timeout: 5000, + cache: { ttl: 60 * 1000 }, + headers: { + 'User-Agent': + 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36' } + }, + + logo: function (context) { + return context.channel.logo + }, + + parser: function (context) { + const programs = [] + + const items = parseItems(context.content) + + items.forEach(item => { + programs.push({ + title: item.title, + start: parseStart(item), + stop: parseStop(item), + description: item.description, + icon: parseIcon(item), + sub_title: item.subtitle + }) + }) + + return programs + } } function parseItems(content) { - if (content != '') { - const data = JSON.parse(content) - return (!data || !data.channel || !Array.isArray(data.channel.item)) ? [] : data.channel.item - } else { - return [] - } + if (content != '') { + const data = JSON.parse(content) + return !data || !data.channel || !Array.isArray(data.channel.item) ? [] : data.channel.item + } else { + return [] + } } function parseStart(item) { - return dayjs.unix(parseInt(item.pubDate) / 1000) + return dayjs.unix(parseInt(item.pubDate) / 1000) } function parseStop(item) { - return dayjs.unix(parseInt(item.endDate) / 1000) + return dayjs.unix(parseInt(item.endDate) / 1000) } function parseIcon(item) { - return 'https://www.nhk.or.jp' + item.thumbnail -} \ No newline at end of file + return 'https://www.nhk.or.jp' + item.thumbnail +} diff --git a/sites/nhk.or.jp/nhk.or.jp.test.js b/sites/nhk.or.jp/nhk.or.jp.test.js index 6defd9f8..66d35b0c 100644 --- a/sites/nhk.or.jp/nhk.or.jp.test.js +++ b/sites/nhk.or.jp/nhk.or.jp.test.js @@ -1,4 +1,4 @@ -// npx epg-grabber --config=sites/nhk.or.jp/nhk.or.jp.config.js --channels=sites/nhk.or.jp/nhk.or.jp.channels.xml --output=guide.xml --days=2 +// npm run grab -- --site=nhk.or.jp // npx jest nhk.or.jp.test.js const { url, parser } = require('./nhk.or.jp.config.js') @@ -7,30 +7,39 @@ const utc = require('dayjs/plugin/utc') dayjs.extend(utc) const date = dayjs.utc('2023-04-29', 'YYYY-MM-DD').startOf('d') -const channel = { site_id: '0', xmltv_id: 'NHKWorldJapan.jp', lang: 'en', logo: 'https://www3.nhk.or.jp/nhkworld/common/site_images/nw_webapp_1024x1024.png' } +const channel = { + site_id: '0', + xmltv_id: 'NHKWorldJapan.jp', + lang: 'en', + logo: 'https://www3.nhk.or.jp/nhkworld/common/site_images/nw_webapp_1024x1024.png' +} it('can generate valid url', () => { - expect(url({ channel, date })).toBe('https://nwapi.nhk.jp/nhkworld/epg/v7b/world/s1682726400000-e1682812800000.json') + expect(url({ channel, date })).toBe( + 'https://nwapi.nhk.jp/nhkworld/epg/v7b/world/s1682726400000-e1682812800000.json' + ) }) it('can parse response', () => { - const content = `{"channel":{"item":[{"seriesId":"1007","airingId":"000","title":"NHK NEWSLINE","description":"NHK WORLD-JAPAN's flagship hourly news program delivers the latest world news, business and weather, with a focus on Japan and the rest of Asia.","link":"/nhkworld/en/news/","pubDate":"1682726400000","endDate":"1682727000000","vodReserved":false,"jstrm":"1","wstrm":"1","subtitle":"","content":"","content_clean":"","pgm_gr_id":"","thumbnail":"/nhkworld/upld/thumbnails/en/tv/regular_program/340aed63308aafd1178172abf6325231_large.jpg","thumbnail_s":"/nhkworld/upld/thumbnails/en/tv/regular_program/340aed63308aafd1178172abf6325231_small.jpg","showlist":"0","internal":"0","genre":{"TV":"11","Top":"","LC":""},"vod_id":"","vod_url":"","analytics":"[nhkworld]simul;NHK NEWSLINE;w02,001;1007-000-2023;2023-04-29T09:00:00+09:00"}]}}` - const results = parser({ content }) + const content = + '{"channel":{"item":[{"seriesId":"1007","airingId":"000","title":"NHK NEWSLINE","description":"NHK WORLD-JAPAN\'s flagship hourly news program delivers the latest world news, business and weather, with a focus on Japan and the rest of Asia.","link":"/nhkworld/en/news/","pubDate":"1682726400000","endDate":"1682727000000","vodReserved":false,"jstrm":"1","wstrm":"1","subtitle":"","content":"","content_clean":"","pgm_gr_id":"","thumbnail":"/nhkworld/upld/thumbnails/en/tv/regular_program/340aed63308aafd1178172abf6325231_large.jpg","thumbnail_s":"/nhkworld/upld/thumbnails/en/tv/regular_program/340aed63308aafd1178172abf6325231_small.jpg","showlist":"0","internal":"0","genre":{"TV":"11","Top":"","LC":""},"vod_id":"","vod_url":"","analytics":"[nhkworld]simul;NHK NEWSLINE;w02,001;1007-000-2023;2023-04-29T09:00:00+09:00"}]}}' + const results = parser({ content }) - expect(results).toMatchObject([ - { - title: 'NHK NEWSLINE', - start: dayjs(1682726400000), - stop: dayjs(1682727000000), - description: `NHK WORLD-JAPAN's flagship hourly news program delivers the latest world news, business and weather, with a focus on Japan and the rest of Asia.`, - icon: 'https://www.nhk.or.jp/nhkworld/upld/thumbnails/en/tv/regular_program/340aed63308aafd1178172abf6325231_large.jpg', - sub_title: '' - } - ]) + expect(results).toMatchObject([ + { + title: 'NHK NEWSLINE', + start: dayjs(1682726400000), + stop: dayjs(1682727000000), + description: + "NHK WORLD-JAPAN's flagship hourly news program delivers the latest world news, business and weather, with a focus on Japan and the rest of Asia.", + icon: 'https://www.nhk.or.jp/nhkworld/upld/thumbnails/en/tv/regular_program/340aed63308aafd1178172abf6325231_large.jpg', + sub_title: '' + } + ]) }) it('can handle empty guide', () => { - const results = parser({ content: '' }) + const results = parser({ content: '' }) - expect(results).toMatchObject([]) + expect(results).toMatchObject([]) }) diff --git a/sites/nhkworldpremium.com/nhkworldpremium.com.test.js b/sites/nhkworldpremium.com/nhkworldpremium.com.test.js index db012b05..9b097800 100644 --- a/sites/nhkworldpremium.com/nhkworldpremium.com.test.js +++ b/sites/nhkworldpremium.com/nhkworldpremium.com.test.js @@ -1,10 +1,9 @@ -// npx epg-grabber --config=sites/nhkworldpremium.com/nhkworldpremium.com.config.js --channels=sites/nhkworldpremium.com/nhkworldpremium.com_en.channels.xml --output=guide.xml -// npx epg-grabber --config=sites/nhkworldpremium.com/nhkworldpremium.com.config.js --channels=sites/nhkworldpremium.com/nhkworldpremium.com_ja.channels.xml --output=guide.xml +// npm run grab -- --site=nhkworldpremium.com +// npm run grab -- --site=nhkworldpremium.com -const { parser, url, request } = require('./nhkworldpremium.com.config.js') +const { parser, url } = require('./nhkworldpremium.com.config.js') const fs = require('fs') const path = require('path') -const axios = require('axios') const dayjs = require('dayjs') const utc = require('dayjs/plugin/utc') const customParseFormat = require('dayjs/plugin/customParseFormat') diff --git a/sites/nhkworldpremium.com/nhkworldpremium.com_en.channels.xml b/sites/nhkworldpremium.com/nhkworldpremium.com_en.channels.xml index 49ea7c11..aee9444a 100644 --- a/sites/nhkworldpremium.com/nhkworldpremium.com_en.channels.xml +++ b/sites/nhkworldpremium.com/nhkworldpremium.com_en.channels.xml @@ -1,6 +1,4 @@ - - - NHK World Premium - - \ No newline at end of file + + NHK World Premium + \ No newline at end of file diff --git a/sites/nhkworldpremium.com/nhkworldpremium.com_ja.channels.xml b/sites/nhkworldpremium.com/nhkworldpremium.com_ja.channels.xml index d37c6402..3e7b1cc4 100644 --- a/sites/nhkworldpremium.com/nhkworldpremium.com_ja.channels.xml +++ b/sites/nhkworldpremium.com/nhkworldpremium.com_ja.channels.xml @@ -1,6 +1,4 @@ - - - NHK World Premium - - \ No newline at end of file + + NHK World Premium + \ No newline at end of file diff --git a/sites/nos.pt/nos.pt.channels.xml b/sites/nos.pt/nos.pt.channels.xml index 201fbffa..9317ffe4 100644 --- a/sites/nos.pt/nos.pt.channels.xml +++ b/sites/nos.pt/nos.pt.channels.xml @@ -1,209 +1,207 @@ - - - 1+1 - 24Kitchen HD - 3SAT - Afro Music Channel - AMC Crime - AMC - ARTV - AXN Movies - AXN - Baby TV - Biggs - Bloomberg - BVN - Canal 11 HD - Canal Hollywood - Canal NOS HD - Canal Panda - Canal Q - Cartoon Network HD - Casa e Cozinha HD - CCTV 4 - CGTN - CMTV - CNBC - CNN Portugal - Cubavisión Internacional - Discovery Channel - Disney Channel HD - Disney Junior - DOGTV - DW (Alemão) - DW - Eleven 1 - Eleven 2 - Eleven 3 - Eleven 4 - Eleven 5 - Eleven 6 - Euronews - Fight Network HD - Food Network HD - FOX Comedy - FOX Crime - FOX Life - FOX Movies - FOX - France 24 (I) - France 24 (F) - Fuel TV - TV Galicia - Globo Now HD - Globo - Canal História - Horse TV - HOT Man - HOT Taboo - HOT - ID Investigation Discovery - KBS World HD - KiKa - Kuriakos TV - Localvisão TV HD - M6 - MCM Pop - MCM Top - Mezzo - Mezzo Live HD - Motorvision HD - MTV 00s - MTV Live - MTV Portugal - MyZen TV - National Geographic - National Geographic WILD - Nautical Channel - NHK World TV - Nickelodeon - Nick Jr. - Nickelodeon Ukraine Pluto TV - NOS Studios - Odisseia - Panda KIDS - Phoenix CNE - Phoenix Infonews - Porto Canal - ProSieben - Record News - Russia Today - RTP 1 - RTP 2 - RTP 3 - RTP Madeira - RTP Memória - RTR Planeta - SAT 1 - Sextreme - SIC - SIC Caras - SIC K - SIC Mulher - SIC Notícias - SIC Radical - S+ HD - Sporting TV - SPORT TV1 - SPORT TV2 - SPORT TV3 - SPORT TV4 - SPORT TV5 - Sport TV 6 HD - SPORT TV+ - Stingray iConcerts HD - Super RTL - SYFY - TCV Internacional - TPA Internacional - Trace Toca - Trace Urban HD - Travel Channel - TV5 Monde - TVCine ACTION - TVCine EDITION - TVCine EMOTION - TVCine TOP - TVEi - TVI - TVI Ficção HD - TVI Reality - TVR Internacional - Venus - ZAP Viva HD - ZDF - ZDF Neo - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1+1 + 24Kitchen HD + 3SAT + Afro Music Channel + AMC Crime + AMC + ARTV + AXN Movies + AXN + Baby TV + Biggs + Bloomberg + BVN + Canal 11 HD + Canal Hollywood + Canal NOS HD + Canal Panda + Canal Q + Cartoon Network HD + Casa e Cozinha HD + CCTV 4 + CGTN + CMTV + CNBC + CNN Portugal + Cubavisión Internacional + Discovery Channel + Disney Channel HD + Disney Junior + DOGTV + DW (Alemão) + DW + Eleven 1 + Eleven 2 + Eleven 3 + Eleven 4 + Eleven 5 + Eleven 6 + Euronews + Fight Network HD + Food Network HD + FOX Comedy + FOX Crime + FOX Life + FOX Movies + FOX + France 24 (I) + France 24 (F) + Fuel TV + TV Galicia + Globo Now HD + Globo + Canal História + Horse TV + HOT Man + HOT Taboo + HOT + ID Investigation Discovery + KBS World HD + KiKa + Kuriakos TV + Localvisão TV HD + M6 + MCM Pop + MCM Top + Mezzo + Mezzo Live HD + Motorvision HD + MTV 00s + MTV Live + MTV Portugal + MyZen TV + National Geographic + National Geographic WILD + Nautical Channel + NHK World TV + Nickelodeon + Nickelodeon Ukraine Pluto TV + Nick Jr. + NOS Studios + Odisseia + Panda KIDS + Phoenix CNE + Phoenix Infonews + Porto Canal + ProSieben + Record News + Russia Today + RTP 1 + RTP 2 + RTP 3 + RTP Madeira + RTP Memória + RTR Planeta + SAT 1 + Sextreme + SIC + SIC Caras + SIC K + SIC Mulher + SIC Notícias + SIC Radical + S+ HD + Sporting TV + SPORT TV1 + SPORT TV2 + SPORT TV3 + SPORT TV4 + SPORT TV5 + Sport TV 6 HD + SPORT TV+ + Stingray iConcerts HD + Super RTL + SYFY + TCV Internacional + TPA Internacional + Trace Toca + Trace Urban HD + Travel Channel + TV5 Monde + TVCine ACTION + TVCine EDITION + TVCine EMOTION + TVCine TOP + TVEi + TVI + TVI Ficção HD + TVI Reality + TVR Internacional + Venus + ZAP Viva HD + ZDF + ZDF Neo + diff --git a/sites/nos.pt/nos.pt.config.js b/sites/nos.pt/nos.pt.config.js index a32dc382..86c2fc38 100644 --- a/sites/nos.pt/nos.pt.config.js +++ b/sites/nos.pt/nos.pt.config.js @@ -20,7 +20,6 @@ module.exports = { const items = parseItems(content, date) date = date.subtract(1, 'd') for (let item of items) { - const prev = programs[programs.length - 1] const $item = cheerio.load(item) const channelAcronym = parseChannelAcronym(content) @@ -38,9 +37,9 @@ module.exports = { return programs }, - async channels({ country }) { + async channels() { const html = await axios - .get(`https://www.nos.pt/particulares/televisao/guia-tv/Pages/default.aspx`) + .get('https://www.nos.pt/particulares/televisao/guia-tv/Pages/default.aspx') .then(r => r.data) .catch(console.log) @@ -63,7 +62,7 @@ async function loadProgramDetails(channelAcronym, programId) { if (!channelAcronym || !programId) return {} const data = await axios .post( - `https://www.nos.pt/_layouts/15/Armstrong/ApplicationPages/EPGGetProgramsAndDetails.aspx/GetProgramDetails`, + 'https://www.nos.pt/_layouts/15/Armstrong/ApplicationPages/EPGGetProgramsAndDetails.aspx/GetProgramDetails', { programId, channelAcronym, diff --git a/sites/nos.pt/nos.pt.test.js b/sites/nos.pt/nos.pt.test.js index 5e7083ee..7ff15af1 100644 --- a/sites/nos.pt/nos.pt.test.js +++ b/sites/nos.pt/nos.pt.test.js @@ -1,5 +1,5 @@ // npm run channels:parse -- --config=./sites/nos.pt/nos.pt.config.js --output=./sites/nos.pt/nos.pt.channels.xml -// npx epg-grabber --config=sites/nos.pt/nos.pt.config.js --channels=sites/nos.pt/nos.pt.channels.xml --output=guide.xml --days=2 +// npm run grab -- --site=nos.pt const { parser, url } = require('./nos.pt.config.js') const fs = require('fs') @@ -74,7 +74,7 @@ it('can parse response', async () => { expect(results[0]).toMatchObject({ start: '2023-01-27T23:50:00.000Z', stop: '2023-01-28T00:36:00.000Z', - title: `Anatomia de Grey T.17 Ep.3`, + title: 'Anatomia de Grey T.17 Ep.3', description: 'Os médicos do Grey Sloan continuam a enfrentar a nova realidade do COVID-19 e lidam com um paciente conhecido e teimoso. Koracick fica encarregue dos internos e Link opera um terapeuta sexual.', icon: 'https://images.nos.pt/b6fd27f4bd0b404abd4c3fc4faa79024_resized_352x198.jpg' @@ -83,7 +83,7 @@ it('can parse response', async () => { expect(results[21]).toMatchObject({ start: '2023-01-28T21:38:00.000Z', stop: '2023-01-29T00:05:00.000Z', - title: `MasterChef Portugal T.1 Ep.10`, + title: 'MasterChef Portugal T.1 Ep.10', description: 'A maior competição de cozinha do mundo arranca ao comando de três dos mais conceituados chefs portugueses: Pedro Pena Bastos, Noélia Jerónimo e Ricardo Costa, que nos vão transmitir os seus conhecimentos e a sua paixão pela cozinha.', icon: 'https://images.nos.pt/8aa511d697f0401a88a0cb1ec2718cc3_resized_352x198.jpg' diff --git a/sites/novacyprus.com/novacyprus.com.channels.xml b/sites/novacyprus.com/novacyprus.com.channels.xml index 87d9322d..b06f7f31 100644 --- a/sites/novacyprus.com/novacyprus.com.channels.xml +++ b/sites/novacyprus.com/novacyprus.com.channels.xml @@ -1,34 +1,32 @@ - - - Animal Planet Africa - Boomerang Central & Eastern Europe - Disney Channel Middle East - EuroNews Ellinika - Eurosport 1 - Eurosport 2 - Fox Greece - Fox Life Greece - Vouli TV - Insight HD - Mad Greekz - Mad TV - MTV Live - MyZen TV - National Geographic Ellada - Nickelodeon Greece - Nova Cinema 1 - Nova Cinema 2 - Nova Cinema 3 - Nova Cinema 4 - Nova Life - Nova Sports 2 - Nova Sports 3 - Nova Sports 4 - Nova Sports 5 - Number 1 TV - One Channel - Smile TV - Viasat History HD - - \ No newline at end of file + + Animal Planet Africa + Boomerang Central & Eastern Europe + Disney Channel Middle East + EuroNews Ellinika + Eurosport 1 + Eurosport 2 + Fox Greece + Fox Life Greece + Vouli TV + Insight HD + Mad Greekz + Mad TV + MTV Live + MyZen TV + National Geographic Ellada + Nickelodeon Greece + Nova Cinema 1 + Nova Cinema 2 + Nova Cinema 3 + Nova Cinema 4 + Nova Life + Nova Sports 2 + Nova Sports 3 + Nova Sports 4 + Nova Sports 5 + Number 1 TV + One Channel + Smile TV + Viasat History HD + \ No newline at end of file diff --git a/sites/novacyprus.com/novacyprus.com.config.js b/sites/novacyprus.com/novacyprus.com.config.js index 60bf8ac4..5096014d 100644 --- a/sites/novacyprus.com/novacyprus.com.config.js +++ b/sites/novacyprus.com/novacyprus.com.config.js @@ -13,7 +13,7 @@ dayjs.extend(customParseFormat) module.exports = { site: 'novacyprus.com', days: 2, - url({ channel, date }) { + url({ date }) { return `https://www.novacyprus.com/api/v1/tvprogram/from/${date.format('YYYYMMDD')}/to/${date .add(1, 'd') .format('YYYYMMDD')}` @@ -35,9 +35,9 @@ module.exports = { return programs }, - async channels({ country, lang }) { + async channels() { const channels = await axios - .get(`https://www.novacyprus.com/api/v1/guide/dailychannels`) + .get('https://www.novacyprus.com/api/v1/guide/dailychannels') .then(r => r.data) .catch(console.log) diff --git a/sites/novacyprus.com/novacyprus.com.test.js b/sites/novacyprus.com/novacyprus.com.test.js index 51e79d05..282ce1e3 100644 --- a/sites/novacyprus.com/novacyprus.com.test.js +++ b/sites/novacyprus.com/novacyprus.com.test.js @@ -1,5 +1,5 @@ -// node ./scripts/channels.js --config=./sites/novacyprus.com/novacyprus.com.config.js --output=./sites/novacyprus.com/novacyprus.com.channels.xml -// npx epg-grabber --config=sites/novacyprus.com/novacyprus.com.config.js --channels=sites/novacyprus.com/novacyprus.com.channels.xml --output=guide.xml --days=2 +// npm run channels:parse -- --config=./sites/novacyprus.com/novacyprus.com.config.js --output=./sites/novacyprus.com/novacyprus.com.channels.xml +// npm run grab -- --site=novacyprus.com const { parser, url } = require('./novacyprus.com.config.js') const dayjs = require('dayjs') @@ -21,7 +21,8 @@ it('can generate valid url', () => { }) it('can parse response', () => { - const content = `{"nodes":[{"datetime":"2021-11-17 06:20:00","day":"Wednesday","numDay":17,"numMonth":11,"month":"November","channelName":"Cyprus Novacinema1HD","channelLog":"https:\/\/ssl2.novago.gr\/EPG\/jsp\/images\/universal\/film\/logo\/20200210\/000100\/XTV100000762\/d6a2f5e0-dbc0-49c7-9843-e3161ca5ae5d.png","cid":"42","ChannelId":"614","startingTime":"06:20","endTime":"08:10","title":"Δεσμοί Αίματος","description":"Θρίλερ Μυστηρίου","duration":"109","slotDuration":"110","bref":"COMMOBLOOX","mediaItems":[{"MediaListTypeId":"6","CdnUrl":"http:\/\/cache-forthnet.secure.footprint.net\/linear\/3\/0\/305608_COMMOBLOOX_GUIDE_STILL.jpg"},{"MediaListTypeId":"7","CdnUrl":"http:\/\/cache-forthnet.secure.footprint.net\/linear\/3\/0\/305608_COMMOBLOOX_POSTER_CROSS.jpg"},{"MediaListTypeId":"8","CdnUrl":"http:\/\/cache-forthnet.secure.footprint.net\/linear\/3\/0\/305608_COMMOBLOOX_ICON_CYP.jpg"},{"MediaListTypeId":"9","CdnUrl":"http:\/\/cache-forthnet.secure.footprint.net\/linear\/3\/0\/305608_COMMOBLOOX_POSTER_CYP.jpg"},{"MediaListTypeId":"10","CdnUrl":"http:\/\/cache-forthnet.secure.footprint.net\/linear\/3\/0\/305608_COMMOBLOOX_BACKGROUND_CYP.jpg"}]},{"datetime":"2021-11-17 06:00:00","day":"Wednesday","numDay":17,"numMonth":11,"month":"November","channelName":"Cyprus Novacinema2HD","channelLog":"https:\/\/ssl2.novago.gr\/EPG\/jsp\/images\/universal\/film\/logo\/20200210\/000100\/XTV100000763\/24e05354-d6ad-4949-bcb3-a81d1c1d2cba.png","cid":"62","ChannelId":"653","startingTime":"06:00","endTime":"07:40","title":"Ανυπόφοροι Γείτονες","description":"Κωμωδία","duration":"93","slotDuration":"100","bref":"NEIGHBORSX","mediaItems":[{"MediaListTypeId":"7","CdnUrl":"http:\/\/cache-forthnet.secure.footprint.net\/linear\/3\/1\/312582_NEIGHBORSX_POSTER_CROSS.jpg"},{"MediaListTypeId":"8","CdnUrl":"http:\/\/cache-forthnet.secure.footprint.net\/linear\/3\/1\/312582_NEIGHBORSX_ICON_CYP.jpg"},{"MediaListTypeId":"9","CdnUrl":"http:\/\/cache-forthnet.secure.footprint.net\/linear\/3\/1\/312582_NEIGHBORSX_POSTER_CYP.jpg"},{"MediaListTypeId":"10","CdnUrl":"http:\/\/cache-forthnet.secure.footprint.net\/linear\/3\/1\/312582_NEIGHBORSX_BACKGROUND_CYP.jpg"}]}]}` + const content = + '{"nodes":[{"datetime":"2021-11-17 06:20:00","day":"Wednesday","numDay":17,"numMonth":11,"month":"November","channelName":"Cyprus Novacinema1HD","channelLog":"https://ssl2.novago.gr/EPG/jsp/images/universal/film/logo/20200210/000100/XTV100000762/d6a2f5e0-dbc0-49c7-9843-e3161ca5ae5d.png","cid":"42","ChannelId":"614","startingTime":"06:20","endTime":"08:10","title":"Δεσμοί Αίματος","description":"Θρίλερ Μυστηρίου","duration":"109","slotDuration":"110","bref":"COMMOBLOOX","mediaItems":[{"MediaListTypeId":"6","CdnUrl":"http://cache-forthnet.secure.footprint.net/linear/3/0/305608_COMMOBLOOX_GUIDE_STILL.jpg"},{"MediaListTypeId":"7","CdnUrl":"http://cache-forthnet.secure.footprint.net/linear/3/0/305608_COMMOBLOOX_POSTER_CROSS.jpg"},{"MediaListTypeId":"8","CdnUrl":"http://cache-forthnet.secure.footprint.net/linear/3/0/305608_COMMOBLOOX_ICON_CYP.jpg"},{"MediaListTypeId":"9","CdnUrl":"http://cache-forthnet.secure.footprint.net/linear/3/0/305608_COMMOBLOOX_POSTER_CYP.jpg"},{"MediaListTypeId":"10","CdnUrl":"http://cache-forthnet.secure.footprint.net/linear/3/0/305608_COMMOBLOOX_BACKGROUND_CYP.jpg"}]},{"datetime":"2021-11-17 06:00:00","day":"Wednesday","numDay":17,"numMonth":11,"month":"November","channelName":"Cyprus Novacinema2HD","channelLog":"https://ssl2.novago.gr/EPG/jsp/images/universal/film/logo/20200210/000100/XTV100000763/24e05354-d6ad-4949-bcb3-a81d1c1d2cba.png","cid":"62","ChannelId":"653","startingTime":"06:00","endTime":"07:40","title":"Ανυπόφοροι Γείτονες","description":"Κωμωδία","duration":"93","slotDuration":"100","bref":"NEIGHBORSX","mediaItems":[{"MediaListTypeId":"7","CdnUrl":"http://cache-forthnet.secure.footprint.net/linear/3/1/312582_NEIGHBORSX_POSTER_CROSS.jpg"},{"MediaListTypeId":"8","CdnUrl":"http://cache-forthnet.secure.footprint.net/linear/3/1/312582_NEIGHBORSX_ICON_CYP.jpg"},{"MediaListTypeId":"9","CdnUrl":"http://cache-forthnet.secure.footprint.net/linear/3/1/312582_NEIGHBORSX_POSTER_CYP.jpg"},{"MediaListTypeId":"10","CdnUrl":"http://cache-forthnet.secure.footprint.net/linear/3/1/312582_NEIGHBORSX_BACKGROUND_CYP.jpg"}]}]}' const result = parser({ content, channel }).map(p => { p.start = p.start.toJSON() p.stop = p.stop.toJSON() @@ -43,7 +44,7 @@ it('can handle empty guide', () => { const result = parser({ date, channel, - content: `{"nodes":[],"total":0,"pages":0}` + content: '{"nodes":[],"total":0,"pages":0}' }) expect(result).toMatchObject([]) }) diff --git a/sites/novasports.gr/novasports.gr.channels.xml b/sites/novasports.gr/novasports.gr.channels.xml index 10ff7321..f28227f8 100644 --- a/sites/novasports.gr/novasports.gr.channels.xml +++ b/sites/novasports.gr/novasports.gr.channels.xml @@ -1,21 +1,19 @@ - - - Eurosport 1 HD - Eurosport 2 HD - Novasports1HD - Novasports2HD - Novasports3HD - Novasports4HD - Novasports5HD - Novasports6HD - Novasports Εxtra1 - Novasports Extra2 - Novasports Extra3 - Novasports Extra4 - ΝovasportsNews - Novasports Premier League - Novasports Prime - ΝovasportsStart - - + + Eurosport 1 HD + Eurosport 2 HD + Novasports1HD + Novasports2HD + Novasports3HD + Novasports4HD + Novasports5HD + Novasports6HD + Novasports Εxtra1 + Novasports Extra2 + Novasports Extra3 + Novasports Extra4 + ΝovasportsNews + Novasports Premier League + Novasports Prime + ΝovasportsStart + diff --git a/sites/novasports.gr/novasports.gr.config.js b/sites/novasports.gr/novasports.gr.config.js index 9fba886a..0721f670 100644 --- a/sites/novasports.gr/novasports.gr.config.js +++ b/sites/novasports.gr/novasports.gr.config.js @@ -10,7 +10,7 @@ dayjs.extend(timezone) module.exports = { site: 'novasports.gr', days: 2, - url: function ({ date, channel }) { + url: function ({ date }) { return `https://www.novasports.gr/wp-admin/admin-ajax.php?action=nova_get_template&template=tv-program/broadcast&dt=${date.format( 'YYYY-MM-DD' )}` @@ -43,13 +43,13 @@ module.exports = { async channels() { const html = await axios .get( - `https://www.novasports.gr/wp-admin/admin-ajax.php?action=nova_get_template&template=tv-program/broadcast&dt=2022-10-29` + 'https://www.novasports.gr/wp-admin/admin-ajax.php?action=nova_get_template&template=tv-program/broadcast&dt=2022-10-29' ) .then(r => r.data) .catch(console.log) const $ = cheerio.load(html) const items = $( - `#mc-broadcast-content:nth-child(2) > div > #channelist-slider > div.channelist-wrapper.slider-wrapper.content > div > div` + '#mc-broadcast-content:nth-child(2) > div > #channelist-slider > div.channelist-wrapper.slider-wrapper.content > div > div' ).toArray() return items.map(item => { const name = $(item).find('.channel').text().trim() diff --git a/sites/novasports.gr/novasports.gr.test.js b/sites/novasports.gr/novasports.gr.test.js index 97d4078b..45f71cc8 100644 --- a/sites/novasports.gr/novasports.gr.test.js +++ b/sites/novasports.gr/novasports.gr.test.js @@ -1,5 +1,5 @@ // npm run channels:parse -- --config=./sites/novasports.gr/novasports.gr.config.js --output=./sites/novasports.gr/novasports.gr.channels.xml -// npx epg-grabber --config=sites/novasports.gr/novasports.gr.config.js --channels=sites/novasports.gr/novasports.gr.channels.xml --output=guide.xml --days=2 +// npm run grab -- --site=novasports.gr const { parser, url } = require('./novasports.gr.config.js') const fs = require('fs') diff --git a/sites/nowplayer.now.com/nowplayer.now.com.channels.xml b/sites/nowplayer.now.com/nowplayer.now.com.channels.xml index 78e48579..ec3d6ee8 100644 --- a/sites/nowplayer.now.com/nowplayer.now.com.channels.xml +++ b/sites/nowplayer.now.com/nowplayer.now.com.channels.xml @@ -1,248 +1,246 @@ - - - ABC Australia Asia - Aljazeera English - Animal Planet - Animax Asia - Asian Food Network - Astro Cricket - AXN East Asia - BBC Earth Asia - BBC Lifestyle Asia - BBC World News - BeIn Sports 1 Hong Kong - BeIn Sports 2 Hong Kong - BeIn Sports Max 1 - BeIn Sports Max 2 - BeIn Sports Max 3 - Bloomberg TV - Boomerang - Cartoon Network - CBeebies Asia - CCTV 1 - CCTV 4 Asia - Channel Adult - Cinemax - CNA - CNBC - CNN - Colors - CTI TV Asia - Da Vinci - Discovery Asia - Discovery Channel - Discovery Science - DMAX Southeast Asia - DreamWorks TV - DW Deutsch - DW English - EBC News Asia - ETTV Asia News - EuroNews English - Fight Sports - Food Network - France 24 English - France 24 Français - GMA Life TV - GMA News TV International - GMA Pinoy TV Asia-Pacific - HBO - HBO Family - HBO Hits - HBO Signature - HGTV - History - HKS TV - Ice Fire - KBS World - Lifetime - Movie Movie - MTV India - MUTV - National Geographic - National Geographic Wild - NHK World Japan - NHK World Premium - Nickelodeon - Nick Jr - Now 668 - Now Baogu Movies - Now Baogu Superstars - Now Business News Channel - Now Chinese Drama Channel - Now Data Channel - Now Direct - Now Golf 2 - Now Golf 3 - Now Jelli - Now News - Now Sports 1 - Now Sports 2 - Now Sports 3 - Now Sports 4 - Now Sports 4K - Now Sports 5 - Now Sports 6 - Now Sports 7 - Now Sports Plus - Now Sports Premier League 1 - Now Sports Premier League 2 - Now Sports Premier League 3 - Now Sports Premier League 4 - Now Sports Premier League 5 - Now Sports Premier League 6 - Now Sports Premier League TV - Now Sports Prime - Now Video Express - Outdoor Channel International - Phoenix Chinese Channel - Phoenix Hong Kong - Phoenix InfoNews Channel - Rock Entertainment - RT News - RugbyPass TV - Sansha TV - Shenzhen Satellite TV - Sky News UK - SET India - Sony SAB TV Asia - Star Bharat India - Star Chinese Movies South East Asia - Star Gold - Star Plus Southeast Asia - Macau Asia Satellite TV - TFC Asia-Pacific - Thrill - TLC Southeast Asia - Travel Channel Asia - TV5Monde Asie - TV5Monde Style HD - TVBS Asia - TVN Asia - TVS 2 Southern TV - ViuTV - ViuTVsix - Warner TV Southeast Asia - Yicai TV - Zee Cinema Asia - Zee News - Zee TV Asia Pacific - Zhejiang Satellite TV - ABC Australia Asia - Aljazeera English - Animal Planet - Animax Asia - Asian Food Network - Astro Cricket - AXN - BBC Earth - BBC Lifestyle - BeIn Sports 1 - BeIn Sports 2 - BeIn Sports Max 1 - BeIn Sports Max 2 - BeIn Sports Max 3 - Bloomberg TV Asia - Boomerang South East Asia - Cartoon Network Asia - CBeebies Asia - CCTV 1 - CCTV 4 Asia - Channel Adult - Cinemax Asia - CNA - CNBC Asia-Pacific - Colors Asia Pacific - CTI TV Asia - Da Vinci Asia - Discovery Asia - Discovery Channel - Discovery Science - DMAX Southeast Asia - DreamWorks TV Asia - EBC News Asia - ETTV Asia News - Fight Sports - Food Network Asia - France 24 Français - GMA Pinoy TV Asia-Pacific - HBO Asia - HBO Family Asia - HBO Hits - HBO Signature Asia - HGTV Asia - History Asia - HKS TV - Ice Fire - KBS World - Lifetime Asia - Movie Movie - MTV India - MUTV - National Geographic Asia - National Geographic Wild Asia - Nickelodeon South East Asia - Nick Jr Asia - Now 668 - Now Baogu Movies - Now Baogu Superstars - Now Business News Channel - Now Chinese Drama Channel - Now Data Channel - Now Direct - Now Golf 2 - Now Golf 3 - Now Jelli - Now News - Now Sports 1 - Now Sports 2 - Now Sports 3 - Now Sports 4 - Now Sports 4K - Now Sports 5 - Now Sports 6 - Now Sports 7 - Now Sports Plus - Now Sports Premier League 1 - Now Sports Premier League 2 - Now Sports Premier League 3 - Now Sports Premier League 4 - Now Sports Premier League 5 - Now Sports Premier League 6 - Now Sports Premier League TV - Now Sports Prime - Now Video Express - Outdoor Channel International - Phoenix Chinese Channel - Phoenix Hong Kong - Phoenix InfoNews Channel - Rock Entertainment - RugbyPass TV - Sansha TV - Shenzhen Satellite TV - SET India - Sony SAB TV Asia - Star Bharat India - Star Chinese Movies South East Asia - Star Gold - Star Plus Southeast Asia - Macau Asia Satellite TV - TFC Asia-Pacific - Thrill - TLC Southeast Asia - Travel Channel Asia - TV5Monde Asie - TV5Monde Style HD - TVBS Asia - TVN Asia - TVS 2 Southern TV - ViuTV - ViuTVsix - Warner TV Southeast Asia - Yicai TV - Zee Cinema Asia - Zee TV Asia Pacific - Zhejiang Satellite TV - - \ No newline at end of file + + DW Deutsch + ABC Australia Asia + Aljazeera English + Animal Planet + Animax Asia + Asian Food Network + Astro Cricket + AXN East Asia + BBC Earth Asia + BBC Lifestyle Asia + BBC World News + BeIn Sports 1 Hong Kong + BeIn Sports 2 Hong Kong + BeIn Sports Max 1 + BeIn Sports Max 2 + BeIn Sports Max 3 + Bloomberg TV + Boomerang + Cartoon Network + CBeebies Asia + CCTV 1 + CCTV 4 Asia + Channel Adult + Cinemax + CNA + CNBC + CNN + Colors + CTI TV Asia + Da Vinci + Discovery Asia + Discovery Channel + Discovery Science + DMAX Southeast Asia + DreamWorks TV + DW English + EBC News Asia + ETTV Asia News + EuroNews English + Fight Sports + Food Network + France 24 English + France 24 Français + GMA Life TV + GMA News TV International + GMA Pinoy TV Asia-Pacific + HBO + HBO Family + HBO Hits + HBO Signature + HGTV + History + HKS TV + Ice Fire + KBS World + Lifetime + Movie Movie + MTV India + MUTV + National Geographic + National Geographic Wild + NHK World Japan + NHK World Premium + Nickelodeon + Nick Jr + Now 668 + Now Baogu Movies + Now Baogu Superstars + Now Business News Channel + Now Chinese Drama Channel + Now Data Channel + Now Direct + Now Golf 2 + Now Golf 3 + Now Jelli + Now News + Now Sports 1 + Now Sports 2 + Now Sports 3 + Now Sports 4 + Now Sports 4K + Now Sports 5 + Now Sports 6 + Now Sports 7 + Now Sports Plus + Now Sports Premier League 1 + Now Sports Premier League 2 + Now Sports Premier League 3 + Now Sports Premier League 4 + Now Sports Premier League 5 + Now Sports Premier League 6 + Now Sports Premier League TV + Now Sports Prime + Now Video Express + Outdoor Channel International + Phoenix Chinese Channel + Phoenix Hong Kong + Phoenix InfoNews Channel + Rock Entertainment + RT News + RugbyPass TV + Sansha TV + Shenzhen Satellite TV + Sky News UK + SET India + Sony SAB TV Asia + Star Bharat India + Star Chinese Movies South East Asia + Star Gold + Star Plus Southeast Asia + Macau Asia Satellite TV + TFC Asia-Pacific + Thrill + TLC Southeast Asia + Travel Channel Asia + TV5Monde Asie + TV5Monde Style HD + TVBS Asia + TVN Asia + TVS 2 Southern TV + ViuTV + ViuTVsix + Warner TV Southeast Asia + Yicai TV + Zee Cinema Asia + Zee News + Zee TV Asia Pacific + Zhejiang Satellite TV + ABC Australia Asia + Aljazeera English + Animal Planet + Animax Asia + Asian Food Network + Astro Cricket + AXN + BBC Earth + BBC Lifestyle + BeIn Sports 1 + BeIn Sports 2 + BeIn Sports Max 1 + BeIn Sports Max 2 + BeIn Sports Max 3 + Bloomberg TV Asia + Boomerang South East Asia + Cartoon Network Asia + CBeebies Asia + CCTV 1 + CCTV 4 Asia + Channel Adult + Cinemax Asia + CNA + CNBC Asia-Pacific + Colors Asia Pacific + CTI TV Asia + Da Vinci Asia + Discovery Asia + Discovery Channel + Discovery Science + DMAX Southeast Asia + DreamWorks TV Asia + EBC News Asia + ETTV Asia News + Fight Sports + Food Network Asia + France 24 Français + GMA Pinoy TV Asia-Pacific + HBO Asia + HBO Family Asia + HBO Hits + HBO Signature Asia + HGTV Asia + History Asia + HKS TV + Ice Fire + KBS World + Lifetime Asia + Movie Movie + MTV India + MUTV + National Geographic Asia + National Geographic Wild Asia + Nickelodeon South East Asia + Nick Jr Asia + Now 668 + Now Baogu Movies + Now Baogu Superstars + Now Business News Channel + Now Chinese Drama Channel + Now Data Channel + Now Direct + Now Golf 2 + Now Golf 3 + Now Jelli + Now News + Now Sports 1 + Now Sports 2 + Now Sports 3 + Now Sports 4 + Now Sports 4K + Now Sports 5 + Now Sports 6 + Now Sports 7 + Now Sports Plus + Now Sports Premier League 1 + Now Sports Premier League 2 + Now Sports Premier League 3 + Now Sports Premier League 4 + Now Sports Premier League 5 + Now Sports Premier League 6 + Now Sports Premier League TV + Now Sports Prime + Now Video Express + Outdoor Channel International + Phoenix Chinese Channel + Phoenix Hong Kong + Phoenix InfoNews Channel + Rock Entertainment + RugbyPass TV + Sansha TV + Shenzhen Satellite TV + SET India + Sony SAB TV Asia + Star Bharat India + Star Chinese Movies South East Asia + Star Gold + Star Plus Southeast Asia + Macau Asia Satellite TV + TFC Asia-Pacific + Thrill + TLC Southeast Asia + Travel Channel Asia + TV5Monde Asie + TV5Monde Style HD + TVBS Asia + TVN Asia + TVS 2 Southern TV + ViuTV + ViuTVsix + Warner TV Southeast Asia + Yicai TV + Zee Cinema Asia + Zee TV Asia Pacific + Zhejiang Satellite TV + \ No newline at end of file diff --git a/sites/nowplayer.now.com/nowplayer.now.com.config.js b/sites/nowplayer.now.com/nowplayer.now.com.config.js index 0b63e9b2..9cf554ed 100644 --- a/sites/nowplayer.now.com/nowplayer.now.com.config.js +++ b/sites/nowplayer.now.com/nowplayer.now.com.config.js @@ -35,7 +35,7 @@ module.exports = { }, async channels({ lang }) { const html = await axios - .get(`https://nowplayer.now.com/channels`, { headers: { Accept: 'text/html' } }) + .get('https://nowplayer.now.com/channels', { headers: { Accept: 'text/html' } }) .then(r => r.data) .catch(console.log) diff --git a/sites/nowplayer.now.com/nowplayer.now.com.test.js b/sites/nowplayer.now.com/nowplayer.now.com.test.js index f9bea918..da866de9 100644 --- a/sites/nowplayer.now.com/nowplayer.now.com.test.js +++ b/sites/nowplayer.now.com/nowplayer.now.com.test.js @@ -1,5 +1,5 @@ // npm run channels:parse -- --config=./sites/nowplayer.now.com/nowplayer.now.com.config.js --output=./sites/nowplayer.now.com/nowplayer.now.com.channels.xml --set=lang:zh -// npx epg-grabber --config=sites/nowplayer.now.com/nowplayer.now.com.config.js --channels=sites/nowplayer.now.com/nowplayer.now.com.channels.xml --output=guide.xml --timeout=30000 --days=2 +// npm run grab -- --site=nowplayer.now.com const { parser, url, request } = require('./nowplayer.now.com.config.js') const dayjs = require('dayjs') @@ -30,12 +30,13 @@ it('can generate valid url for tomorrow', () => { it('can generate valid request headers', () => { expect(request.headers({ channel })).toMatchObject({ - Cookie: `LANG=zh; Expires=null; Path=/; Domain=nowplayer.now.com` + Cookie: 'LANG=zh; Expires=null; Path=/; Domain=nowplayer.now.com' }) }) it('can parse response', () => { - const content = `[[{"key":"key_202111174524739","vimProgramId":"202111174524739","name":"ViuTVsix Station Closing","start":1637690400000,"end":1637715600000,"date":"20211124","startTime":"02:00AM","endTime":"09:00AM","duration":420,"recordable":false,"restartTv":false,"npvrProg":false,"npvrStartTime":0,"npvrEndTime":0,"cid":"viutvsix station closing","cc":"","isInWatchlist":false}]]` + const content = + '[[{"key":"key_202111174524739","vimProgramId":"202111174524739","name":"ViuTVsix Station Closing","start":1637690400000,"end":1637715600000,"date":"20211124","startTime":"02:00AM","endTime":"09:00AM","duration":420,"recordable":false,"restartTv":false,"npvrProg":false,"npvrStartTime":0,"npvrEndTime":0,"cid":"viutvsix station closing","cc":"","isInWatchlist":false}]]' const result = parser({ content }).map(p => { p.start = p.start.toJSON() p.stop = p.stop.toJSON() @@ -53,7 +54,7 @@ it('can parse response', () => { it('can handle empty guide', () => { const result = parser({ - content: `[[]]` + content: '[[]]' }) expect(result).toMatchObject([]) }) diff --git a/sites/nuevosiglo.com.uy/nuevosiglo.com.uy.channels.xml b/sites/nuevosiglo.com.uy/nuevosiglo.com.uy.channels.xml index 64854368..8e7d492d 100644 --- a/sites/nuevosiglo.com.uy/nuevosiglo.com.uy.channels.xml +++ b/sites/nuevosiglo.com.uy/nuevosiglo.com.uy.channels.xml @@ -1,179 +1,177 @@ - - - A24 - BBC WORLD - BLOOMBERG - C5N - SAETA - 26 TV HD - CANAL 4 MONTECARLO - CANAL 5 - CARTOONITO - CIUDAD MAGAZINE - CNN EN ESPAÑOL - CRONICA TV - CANAL VASCO - EUROCHANNEL - EUROPA EUROPA - EWTN - FOX NEWS - GALICIA TV - GOLDEN PLUS - GOLDEN PREMIER HD - GOL TV - HBO FAMILY HD - HBO - HBO MUNDI HD - HBO SIGNATURE HD - HBO XTREME HD - HOLA TV - KANAL D DRAMA - LN+ - LAS ESTRELLAS HD - NS EVENTOS 1 - NS EVENTOS 2 - NS EVENTOS 3 - NUEVO SIGLO TV - PASIONES - PLAYBOY - SEXTREME - TELEDOCE - TELEFE INTER - TN - TOONCAST - TRU TV - TVN CHILE - TEVECIUDAD - VENUS - VTV - VTV PLUS - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A24 + BBC WORLD + BLOOMBERG + C5N + SAETA + 26 TV HD + CANAL 4 MONTECARLO + CANAL 5 + CARTOONITO + CIUDAD MAGAZINE + CNN EN ESPAÑOL + CRONICA TV + CANAL VASCO + EUROCHANNEL + EUROPA EUROPA + EWTN + FOX NEWS + GALICIA TV + GOLDEN PLUS + GOLDEN PREMIER HD + GOL TV + HBO FAMILY HD + HBO + HBO MUNDI HD + HBO SIGNATURE HD + HBO XTREME HD + HOLA TV + KANAL D DRAMA + LN+ + LAS ESTRELLAS HD + NS EVENTOS 1 + NS EVENTOS 2 + NS EVENTOS 3 + NUEVO SIGLO TV + PASIONES + PLAYBOY + SEXTREME + TELEDOCE + TELEFE INTER + TN + TOONCAST + TRU TV + TVN CHILE + TEVECIUDAD + VENUS + VTV + VTV PLUS + diff --git a/sites/nuevosiglo.com.uy/nuevosiglo.com.uy.config.js b/sites/nuevosiglo.com.uy/nuevosiglo.com.uy.config.js index 7863522f..c337095d 100644 --- a/sites/nuevosiglo.com.uy/nuevosiglo.com.uy.config.js +++ b/sites/nuevosiglo.com.uy/nuevosiglo.com.uy.config.js @@ -30,8 +30,6 @@ module.exports = { const programId = parseProgramId($item) const details = await loadProgramDetails(programId) if (!details) continue - const start = parseStart(details) - const stop = parseStop(details) programs.push({ title: details.main_title, description: details.short_argument, diff --git a/sites/nuevosiglo.com.uy/nuevosiglo.com.uy.test.js b/sites/nuevosiglo.com.uy/nuevosiglo.com.uy.test.js index 443ffd68..580326bb 100644 --- a/sites/nuevosiglo.com.uy/nuevosiglo.com.uy.test.js +++ b/sites/nuevosiglo.com.uy/nuevosiglo.com.uy.test.js @@ -1,5 +1,5 @@ // npm run channels:parse -- --config=./sites/nuevosiglo.com.uy/nuevosiglo.com.uy.config.js --output=./sites/nuevosiglo.com.uy/nuevosiglo.com.uy.channels.xml -// npx epg-grabber --config=sites/nuevosiglo.com.uy/nuevosiglo.com.uy.config.js --channels=sites/nuevosiglo.com.uy/nuevosiglo.com.uy.channels.xml --output=guide.xml --days=2 +// npm run grab -- --site=nuevosiglo.com.uy const { parser, url } = require('./nuevosiglo.com.uy.config.js') const fs = require('fs') @@ -51,7 +51,7 @@ it('can parse response', async () => { expect(results[0]).toMatchObject({ start: '2023-02-10T01:11:00.000Z', stop: '2023-02-10T03:46:00.000Z', - title: `Jurassic World: Dominion`, + title: 'Jurassic World: Dominion', description: 'Años después de la destrucción de Isla Nublar, los dinosaurios viven y cazan junto a los humanos. Este equilibrio determinará, si los humanos seguirán siendo los depredadores máximos en un planeta que comparten con las criaturas temibles.', icon: 'https://img-ns.s3.amazonaws.com/grid_data/23354476.jpg', @@ -66,7 +66,7 @@ it('can parse response', async () => { expect(results[1]).toMatchObject({ start: '2023-02-11T02:06:00.000Z', stop: '2023-02-11T04:16:00.000Z', - title: `Black Adam`, + title: 'Black Adam', description: 'Black Adam es liberado de su tumba casi cinco mil años después de haber sido encarcelado y recibir sus poderes de los antiguos dioses. Ahora está listo para desatar su forma única de justicia en el mundo.', icon: 'https://img-ns.s3.amazonaws.com/grid_data/24638423.jpg', @@ -93,7 +93,7 @@ it('can parse response', async () => { it('can handle empty guide', async () => { const results = await parser({ channel, - content: `` + content: '' }) expect(results).toMatchObject([]) diff --git a/sites/ontvtonight.com/ontvtonight.com.config.js b/sites/ontvtonight.com/ontvtonight.com.config.js index 3c8c06fb..673be064 100644 --- a/sites/ontvtonight.com/ontvtonight.com.config.js +++ b/sites/ontvtonight.com/ontvtonight.com.config.js @@ -20,7 +20,7 @@ module.exports = { days: 2, url: function ({ date, channel }) { const [region, id] = channel.site_id.split('#') - let url = `https://www.ontvtonight.com` + let url = 'https://www.ontvtonight.com' if (region) url += `/${region}` url += `/guide/listings/channel/${id}.html?dt=${date.format('YYYY-MM-DD')}` @@ -32,7 +32,7 @@ module.exports = { items.forEach(item => { const prev = programs[programs.length - 1] const $item = cheerio.load(item) - const start = parseStart($item, date, channel) + let start = parseStart($item, date, channel) if (prev) { if (start.isBefore(prev.start)) { start = start.add(1, 'd') @@ -54,7 +54,7 @@ module.exports = { } function parseStart($item, date, channel) { - const [region, id] = channel.site_id.split('#') + const [region] = channel.site_id.split('#') const timezone = region ? tz[region] : tz['uk'] const timeString = $item('td:nth-child(1) > h5').text().trim() const dateString = `${date.format('YYYY-MM-DD')} ${timeString}` diff --git a/sites/ontvtonight.com/ontvtonight.com.test.js b/sites/ontvtonight.com/ontvtonight.com.test.js index 54dbf8a9..70b85b91 100644 --- a/sites/ontvtonight.com/ontvtonight.com.test.js +++ b/sites/ontvtonight.com/ontvtonight.com.test.js @@ -1,5 +1,5 @@ -// npx epg-grabber --config=sites/ontvtonight.com/ontvtonight.com.config.js --channels=sites/ontvtonight.com/ontvtonight.com_au.channels.xml --output=guide.xml --days=2 -// npx epg-grabber --config=sites/ontvtonight.com/ontvtonight.com.config.js --channels=sites/ontvtonight.com/ontvtonight.com_us.channels.xml --output=guide.xml --days=2 +// npm run grab -- --site=ontvtonight.com +// npm run grab -- --site=ontvtonight.com const { parser, url } = require('./ontvtonight.com.config.js') const dayjs = require('dayjs') @@ -13,7 +13,8 @@ const channel = { site_id: 'au#1692/7two', xmltv_id: '7two.au' } -const content = ` 12:10 am What A Carry On 12:50 am Bones The Devil In The Details 10:50 pm Inspector Morse: The Remorseful Day ` +const content = + ' 12:10 am What A Carry On 12:50 am Bones The Devil In The Details 10:50 pm Inspector Morse: The Remorseful Day ' it('can generate valid url', () => { expect(url({ channel, date })).toBe( @@ -32,18 +33,18 @@ it('can parse response', () => { { start: '2021-11-24T13:10:00.000Z', stop: '2021-11-24T13:50:00.000Z', - title: `What A Carry On` + title: 'What A Carry On' }, { start: '2021-11-24T13:50:00.000Z', stop: '2021-11-25T11:50:00.000Z', - title: `Bones`, + title: 'Bones', description: 'The Devil In The Details' }, { start: '2021-11-25T11:50:00.000Z', stop: '2021-11-25T12:50:00.000Z', - title: `Inspector Morse: The Remorseful Day` + title: 'Inspector Morse: The Remorseful Day' } ]) }) @@ -52,7 +53,7 @@ it('can handle empty guide', () => { const result = parser({ date, channel, - content: `` + content: '' }) expect(result).toMatchObject([]) }) diff --git a/sites/ontvtonight.com/ontvtonight.com_au.channels.xml b/sites/ontvtonight.com/ontvtonight.com_au.channels.xml index 2f69c243..60c6b551 100644 --- a/sites/ontvtonight.com/ontvtonight.com_au.channels.xml +++ b/sites/ontvtonight.com/ontvtonight.com_au.channels.xml @@ -1,55 +1,53 @@ - - - 10 Bold - 10 Peach - 10 Shake - 7 flix - 7 mate - 7 Two - 9 Gem - 9 Go! - 9 Life - 9 Rush - ABC Kids / ABC TV Plus - ABC ME - ABC News - ABC TV - A&E Australia - Ten - Seven - Nine - ESPN Australia - Fox 8 - Fox Arena - Fox Classics - Fox Comedy - Fox Crime - Fox Docos - Fox Funny - Fox News - Fox One - Fox SciFi - Fox Showcase - Fox Sleuth - Foxtel Movies Ultra HD - Foxtel Movies Action - Foxtel Movies Comedy - Foxtel Movies Drama - Foxtel Movies Family - Foxtel Movies Greats - Foxtel Movies Kids - Foxtel Movies Premiere - Foxtel Movies Romance - Foxtel Movies Thriller - NITV - PBS Kids - Racing.com - SBS Food - SBS One - SBS World Movies - SBS WorldWatch - Sky News Regional - SpreeTV - - + + 10 Bold + 10 Peach + 10 Shake + 7 flix + 7 mate + 7 Two + 9 Gem + 9 Go! + 9 Life + 9 Rush + ABC Kids / ABC TV Plus + ABC ME + ABC News + ABC TV + A&E Australia + Ten + Seven + Nine + ESPN Australia + Fox 8 + Fox Arena + Fox Classics + Fox Comedy + Fox Crime + Fox Docos + Fox Funny + Fox News + Fox One + Fox SciFi + Fox Showcase + Fox Sleuth + Foxtel Movies Action + Foxtel Movies Comedy + Foxtel Movies Drama + Foxtel Movies Family + Foxtel Movies Greats + Foxtel Movies Kids + Foxtel Movies Premiere + Foxtel Movies Romance + Foxtel Movies Thriller + Foxtel Movies Ultra HD + NITV + PBS Kids + Racing.com + SBS One + SBS Food + SBS World Movies + SBS WorldWatch + Sky News Regional + SpreeTV + diff --git a/sites/ontvtonight.com/ontvtonight.com_ie.channels.xml b/sites/ontvtonight.com/ontvtonight.com_ie.channels.xml index 050b17b1..10b695ea 100644 --- a/sites/ontvtonight.com/ontvtonight.com_ie.channels.xml +++ b/sites/ontvtonight.com/ontvtonight.com_ie.channels.xml @@ -1,8 +1,6 @@ - - - Oireachtas TV - RTÉ News - TG 4 - - \ No newline at end of file + + Oireachtas TV + RTÉ News + TG 4 + \ No newline at end of file diff --git a/sites/ontvtonight.com/ontvtonight.com_uk.channels.xml b/sites/ontvtonight.com/ontvtonight.com_uk.channels.xml index c325c20c..0126862f 100644 --- a/sites/ontvtonight.com/ontvtonight.com_uk.channels.xml +++ b/sites/ontvtonight.com/ontvtonight.com_uk.channels.xml @@ -1,103 +1,101 @@ - - - E4 Extra - 4Seven - 5 Action - 5 Select - 5 Star - 5 USA - 92 News - Ahlulbayt TV - Akaal Channel UK - Aljazeera English - BBC Four - BBC News - BBC One - BBC One London - BBC One Scotland - BBC Parliament - BBC Red Button 1 - BBC Two - Blaze UK - Box Hits - Brit Asia TV - CBBC - CBeebies UK - CBS Drama UK - CBS Justice UK - CBS Reality UK - Challenge UK - Challenge +1 UK - Channel 5 - Channel 5 +1 - CITV - Create and Craft - Cruise 1st TV - Dave ja vu - Dave UK - DMAX UK - Drama UK - Drama UK +1 - E4 UK - E4 UK +1 - Eman Channel - Film 4 UK - Film 4 UK +1 - Food Network UK - ViaplayXtra - Gems TV - Great! Movies - Great! Movies Action - Great! Movies Classic - Great! Movies Classic +1 - Great! TV - Great! TV +1 - HGTV UK - Horror Channel UK - - Ideal World - ITV 2 - ITV 2 +1 - ITV 3 - ITV 3 +1 - ITV 4 - ITV 4 +1 - ITV Be - ITV London - Jewellery Maker - Kanshi TV - KTO - London Live - More 4 UK - Now 80's - PBS America - Pick UK - Pop - Quest Red UK - Quest Red UK +1 - Quest UK - Quest UK +1 - QVC Beauty - QVC Style UK - QVC UK - Racing TV - Really UK - RT News - RT UK - Sangat TV - SBN International - Sky Arts UK - Sky Max UK - Smithsonian Channel UK - Spotlight TV - Talking Pictures TV - TBN UK - The Box UK - Tiny Pop - TJC - Together TV - Yesterday - Yesterday +1 - - + + + 4Seven + 5 Action + 5 Select + 5 Star + 5 USA + 92 News + Ahlulbayt TV + Akaal Channel UK + Aljazeera English + BBC Four + BBC News + BBC One + BBC One London + BBC One Scotland + BBC Parliament + BBC Red Button 1 + BBC Two + Blaze UK + Box Hits + Brit Asia TV + CBBC + CBeebies UK + CBS Drama UK + CBS Justice UK + CBS Reality UK + Challenge UK + Challenge +1 UK + Channel 5 + Channel 5 +1 + CITV + Create and Craft + Cruise 1st TV + Dave UK + Dave ja vu + DMAX UK + Drama UK + Drama UK +1 + E4 UK + E4 Extra + E4 UK +1 + Eman Channel + Film 4 UK + Film 4 UK +1 + Food Network UK + Gems TV + Great! Movies + Great! Movies Action + Great! Movies Classic + Great! Movies Classic +1 + Great! TV + Great! TV +1 + HGTV UK + Ideal World + ITV London + ITV 2 + ITV 2 +1 + ITV 3 + ITV 3 +1 + ITV 4 + ITV 4 +1 + ITV Be + Jewellery Maker + Kanshi TV + KTO + Horror Channel UK + London Live + More 4 UK + Now 80's + PBS America + Pick UK + Pop + Quest Red UK + Quest Red UK +1 + Quest UK + Quest UK +1 + QVC Beauty + QVC Style UK + QVC UK + Racing TV + Really UK + RT News + RT UK + Sangat TV + SBN International + Sky Arts UK + Sky Max UK + Smithsonian Channel UK + Spotlight TV + Talking Pictures TV + TBN UK + The Box UK + Tiny Pop + TJC + Together TV + ViaplayXtra + Yesterday + Yesterday +1 + diff --git a/sites/ontvtonight.com/ontvtonight.com_us.channels.xml b/sites/ontvtonight.com/ontvtonight.com_us.channels.xml index aee570e4..f8e656e9 100644 --- a/sites/ontvtonight.com/ontvtonight.com_us.channels.xml +++ b/sites/ontvtonight.com/ontvtonight.com_us.channels.xml @@ -1,41 +1,39 @@ - - - ABC East - ACC Network - ActionMAX (East) - AMC (East) - Animal Planet (East) - BBC America (East) - beIN Sports (English) - BET Her West - BET Jams - BET Soul - Big Ten Network (National) - Cheddar News - De Película Clásico - De Película - De Película EUA (USA) - Investigation Discovery West - K16IW CMC-USA - K16IW CMC-TV - Sports News Highlights (KDNU-LD5) Las Vegas, NV - MeTV (KITV-DT2) Honolulu, HI - Hawaii TV (KITV-DT3) Honolulu, HI - MeTV (KREG-TV) Glenwood Springs, CO - KYAZ MeTV+ - MSG WNY - News12 Bronx - News12 Brooklyn - News12 New Jersey - News 12 Hudson Valley - News12 Westchester - Lifetime Movies West - Lifetime West - TBS Superstation (East) - truTV HDTV (West) - CBS (WCBS) - XEWT 12 BC - XHBC Tu Canal HDTV - - + + ABC East + ACC Network + ActionMAX (East) + AMC (East) + Animal Planet (East) + BBC America (East) + beIN Sports (English) + BET Her West + BET Jams + BET Soul + Big Ten Network (National) + Cheddar News + Investigation Discovery West + K16IW CMC-USA + K16IW CMC-TV + Sports News Highlights (KDNU-LD5) Las Vegas, NV + MeTV (KITV-DT2) Honolulu, HI + Hawaii TV (KITV-DT3) Honolulu, HI + MeTV (KREG-TV) Glenwood Springs, CO + KYAZ MeTV+ + Lifetime Movies West + Lifetime West + MSG WNY + News12 Bronx + News12 Brooklyn + News 12 Hudson Valley + News12 New Jersey + News12 Westchester + TBS Superstation (East) + truTV HDTV (West) + CBS (WCBS) + De Película Clásico + De Película + De Película EUA (USA) + XEWT 12 BC + XHBC Tu Canal HDTV + diff --git a/sites/osn.com/osn.com.channels.xml b/sites/osn.com/osn.com.channels.xml deleted file mode 100644 index c46b56a8..00000000 --- a/sites/osn.com/osn.com.channels.xml +++ /dev/null @@ -1,213 +0,0 @@ - - - - - - - - - - Kapatid TV5 - Al Aan TV - Al Dafrah TV - Alfa Series +2 - Alfa Series Channel - AL Hurra HD - AlMamlaka TV - Al Safwa - Al Wosta from Al Dhaid - Al Yawm - ANC - Arirang TV - ART Aflam 1 - ART Aflam 2 - ART Cinema - Hekayat - Hekayat 2 - B4U Aflam - B4U Plus - BabyTV Europe - Bahrain TV - BBC Arabic - BBC World - Bloomberg - CGTN - CGTN Arabic - Cinema 1 - Cinema 2 - Cinema One Global - Cine Mo - CNBC Arabia - CNBC - Crime + Investigation Network - Discovery HD - Discovery Science HD - Disney HD - Disney Junior - Dubai Racing 1 HD - Dubai Racing 3 - E! Entertainment HD - Fann - France 24 - France 24 English - GMA Life TV - GMA News TV - GMA Pinoy TV - H2 HD - History HD - Discovery ID - KTV1 HD - KTV2 HD - KTV Majlis HD - Al Qurain HD - KTV Arabe HD - KTV Ethraa HD - KTV Sport HD - KTV Sport Plus HD - Madani TV - Marina TV - Moonbug Kids - MTV 00s - MTV Live HD - Music Now - Myx - Nat Geo HD - Nat Geo Wild HD - NHK World TV - Nickelodeon HD - Nick Jr - NickToons HD - OSN Comedy - OSN Family - OSN Kids - OSN Kidzone - OSN Living - OSN Mezze - OSN Movies Action - OSN Movies Hollywood - OSN Movies Premiere - OSN Movies Premiere +2 - OSN News - OSN Popup - OSN Series Prime - OSN Showcase - OSN W - OSN Yahala - OSN Yahala Aflam - OSN Yahala Bil Arabi - PBA Rush - Al Roya TV - Rusiya Al Yawm - Sharjah Sport HD - Sharjah TV - Sharqiya from Kalba - Sky News Arabia - Sky News HD - Star Movies HD - Star World HD - DZMM Teleradyo - TFC - TLC HD - Kapatid TV5 - Al Aan TV - Al Dafrah TV - Alfa Series +2 - Alfa Series Channel - AL Hurra HD - AlMamlaka TV - Al Safwa - Al Wosta from Al Dhaid - Al Yawm - ANC - Arirang TV - ART Aflam 1 - ART Aflam 2 - ART Cinema - Hekayat - Hekayat 2 - B4U Aflam - B4U Plus - BabyTV Europe - Bahrain TV - BBC Arabic - BBC World - Bloomberg - CGTN - CGTN Arabic - Cinema 1 - Cinema 2 - Cinema One Global - Cine Mo - CNBC Arabia - CNBC - Crime + Investigation Network - Discovery HD - Discovery Science HD - Disney HD - Disney Junior - Dubai Racing 1 HD - Dubai Racing 3 - E! Entertainment HD - Fann - France 24 - France 24 English - GMA Life TV - GMA News TV - GMA Pinoy TV - H2 HD - History HD - Discovery ID - KTV1 HD - KTV2 HD - KTV Majlis HD - Al Qurain HD - KTV Arabe HD - KTV Ethraa HD - KTV Sport HD - KTV Sport Plus HD - Madani TV - Marina TV - Moonbug Kids - MTV 00s - MTV Live HD - Music Now - Myx - Nat Geo HD - Nat Geo Wild HD - NHK World TV - Nickelodeon HD - Nick Jr - NickToons HD - OSN Comedy - OSN Family - OSN Kids - OSN Kidzone - OSN Living - OSN Mezze - OSN Movies Action - OSN Movies Hollywood - OSN Movies Premiere - OSN Movies Premiere +2 - OSN News - OSN Popup - OSN Series Prime - OSN Showcase - OSN W - OSN Yahala - OSN Yahala Aflam - OSN Yahala Bil Arabi - PBA Rush - Al Roya TV - Rusiya Al Yawm - Sharjah Sport HD - Sharjah TV - Sharqiya from Kalba - Sky News Arabia - Sky News HD - Star Movies HD - Star World HD - DZMM Teleradyo - TFC - TLC HD - - \ No newline at end of file diff --git a/sites/osn.com/osn.com.config.js b/sites/osn.com/osn.com.config.js index cceabbfc..955b0756 100644 --- a/sites/osn.com/osn.com.config.js +++ b/sites/osn.com/osn.com.config.js @@ -6,10 +6,9 @@ dayjs.extend(utc) dayjs.extend(timezone) module.exports = { - skip: true, // NOTE: return an HTTP error 302 on requests from GitHub server (https://github.com/iptv-org/epg/issues/1654#issuecomment-1382915005) site: 'osn.com', days: 2, - url: `https://www.osn.com/CMSPages/TVScheduleWebService.asmx/GetTVChannelsProgramTimeTable`, + url: 'https://www.osn.com/CMSPages/TVScheduleWebService.asmx/GetTVChannelsProgramTimeTable', request: { method: 'POST', headers: { @@ -58,7 +57,7 @@ function parseDuration(item) { return parseInt(item.TotalDivWidth / 4.8) } -function parseStart(item, channel) { +function parseStart(item) { const time = item.StartDateTime return dayjs.tz(time, 'DD MMM YYYY, HH:mm', 'Asia/Dubai') diff --git a/sites/osn.com/osn.com_ar.channels.xml b/sites/osn.com/osn.com_ar.channels.xml new file mode 100644 index 00000000..4c123011 --- /dev/null +++ b/sites/osn.com/osn.com_ar.channels.xml @@ -0,0 +1,104 @@ + + + Kapatid TV5 + Al Aan TV + Al Dafrah TV + Alfa Series +2 + Alfa Series Channel + AL Hurra HD + AlMamlaka TV + Al Safwa + Al Wosta from Al Dhaid + Al Yawm + ANC + Arirang TV + ART Aflam 1 + ART Aflam 2 + ART Cinema + Hekayat + Hekayat 2 + B4U Aflam + B4U Plus + BabyTV Europe + Bahrain TV + BBC Arabic + BBC World + Bloomberg + CGTN + CGTN Arabic + Cinema 1 + Cinema 2 + Cinema One Global + Cine Mo + CNBC Arabia + CNBC + Crime + Investigation Network + Discovery HD + Discovery Science HD + Disney HD + Disney Junior + Dubai Racing 1 HD + Dubai Racing 3 + E! Entertainment HD + Fann + France 24 + France 24 English + GMA Life TV + GMA News TV + GMA Pinoy TV + H2 HD + History HD + Discovery ID + KTV1 HD + KTV2 HD + KTV Majlis HD + Al Qurain HD + KTV Arabe HD + KTV Ethraa HD + KTV Sport HD + KTV Sport Plus HD + Madani TV + Marina TV + Moonbug Kids + MTV 00s + MTV Live HD + Music Now + Myx + Nat Geo HD + Nat Geo Wild HD + NHK World TV + Nickelodeon HD + Nick Jr + NickToons HD + OSN Comedy + OSN Family + OSN Kids + OSN Kidzone + OSN Living + OSN Mezze + OSN Movies Action + OSN Movies Hollywood + OSN Movies Premiere + OSN Movies Premiere +2 + OSN News + OSN Popup + OSN Series Prime + OSN Showcase + OSN W + OSN Yahala + OSN Yahala Aflam + OSN Yahala Bil Arabi + PBA Rush + Al Roya TV + Rusiya Al Yawm + Sharjah Sport HD + Sharjah TV + Sharqiya from Kalba + Sky News Arabia + Sky News HD + Star Movies HD + Star World HD + DZMM Teleradyo + TFC + TLC HD + \ No newline at end of file diff --git a/sites/osn.com/osn.com_en.channels.xml b/sites/osn.com/osn.com_en.channels.xml new file mode 100644 index 00000000..d69387d3 --- /dev/null +++ b/sites/osn.com/osn.com_en.channels.xml @@ -0,0 +1,104 @@ + + + Kapatid TV5 + Al Aan TV + Al Dafrah TV + Alfa Series +2 + Alfa Series Channel + AL Hurra HD + AlMamlaka TV + Al Safwa + Al Wosta from Al Dhaid + Al Yawm + ANC + Arirang TV + ART Aflam 1 + ART Aflam 2 + ART Cinema + Hekayat + Hekayat 2 + B4U Aflam + B4U Plus + BabyTV Europe + Bahrain TV + BBC Arabic + BBC World + Bloomberg + CGTN + CGTN Arabic + Cinema 1 + Cinema 2 + Cinema One Global + Cine Mo + CNBC Arabia + CNBC + Crime + Investigation Network + Discovery HD + Discovery Science HD + Disney HD + Disney Junior + Dubai Racing 1 HD + Dubai Racing 3 + E! Entertainment HD + Fann + France 24 + France 24 English + GMA Life TV + GMA News TV + GMA Pinoy TV + H2 HD + History HD + Discovery ID + KTV1 HD + KTV2 HD + KTV Majlis HD + Al Qurain HD + KTV Arabe HD + KTV Ethraa HD + KTV Sport HD + KTV Sport Plus HD + Madani TV + Marina TV + Moonbug Kids + MTV 00s + MTV Live HD + Music Now + Myx + Nat Geo HD + Nat Geo Wild HD + NHK World TV + Nickelodeon HD + Nick Jr + NickToons HD + OSN Comedy + OSN Family + OSN Kids + OSN Kidzone + OSN Living + OSN Mezze + OSN Movies Action + OSN Movies Hollywood + OSN Movies Premiere + OSN Movies Premiere +2 + OSN News + OSN Popup + OSN Series Prime + OSN Showcase + OSN W + OSN Yahala + OSN Yahala Aflam + OSN Yahala Bil Arabi + PBA Rush + Al Roya TV + Rusiya Al Yawm + Sharjah Sport HD + Sharjah TV + Sharqiya from Kalba + Sky News Arabia + Sky News HD + Star Movies HD + Star World HD + DZMM Teleradyo + TFC + TLC HD + \ No newline at end of file diff --git a/sites/pbsguam.org/pbsguam.org.channels.xml b/sites/pbsguam.org/pbsguam.org.channels.xml index 39d07196..52a795ba 100644 --- a/sites/pbsguam.org/pbsguam.org.channels.xml +++ b/sites/pbsguam.org/pbsguam.org.channels.xml @@ -1,6 +1,4 @@ - - - PBS Guam (KGTF) Hagåtña, Guam - - \ No newline at end of file + + PBS Guam (KGTF) Hagåtña, Guam + \ No newline at end of file diff --git a/sites/pbsguam.org/pbsguam.org.config.js b/sites/pbsguam.org/pbsguam.org.config.js index e4392f0d..5f0ce258 100644 --- a/sites/pbsguam.org/pbsguam.org.config.js +++ b/sites/pbsguam.org/pbsguam.org.config.js @@ -23,9 +23,14 @@ module.exports = { } function parseItems(content, date) { - const [_, json] = content.match(/EventsSchedule_1 = (.*);/i) || [null, null] - if (!json) return [] - const data = JSON.parse(json) + const [, json] = content.match(/EventsSchedule_1 = (.*);/i) || [null, ''] + let data + try { + data = JSON.parse(json) + } catch (error) { + return [] + } + if (!data || !Array.isArray(data.feed)) return [] return data.feed.filter( diff --git a/sites/pbsguam.org/pbsguam.org.test.js b/sites/pbsguam.org/pbsguam.org.test.js index b491246e..732b4f06 100644 --- a/sites/pbsguam.org/pbsguam.org.test.js +++ b/sites/pbsguam.org/pbsguam.org.test.js @@ -1,4 +1,4 @@ -// npx epg-grabber --config=sites/pbsguam.org/pbsguam.org.config.js --channels=sites/pbsguam.org/pbsguam.org.channels.xml --output=guide.xml --days=2 +// npm run grab -- --site=pbsguam.org const { parser, url } = require('./pbsguam.org.config.js') const dayjs = require('dayjs') @@ -20,7 +20,7 @@ it('can generate valid url', () => { it('can parse response', () => { const content = ` ` const result = parser({ date, content }).map(p => { @@ -42,7 +42,7 @@ it('can handle empty guide', () => { const result = parser({ date, channel, - content: ` ` + content: ' ' }) expect(result).toMatchObject([]) }) diff --git a/sites/plex.tv/plex.tv.channels.xml b/sites/plex.tv/plex.tv.channels.xml index 98add2a0..6d19c7ca 100644 --- a/sites/plex.tv/plex.tv.channels.xml +++ b/sites/plex.tv/plex.tv.channels.xml @@ -1,345 +1,343 @@ - - - - 24 Hour Free Movies - ACCDN - AccuWeather NOW - ACL Cornhole TV - ACTION!!! - Action News Jax - AfroLandTV - AFV Family - ALF - ALLBLK Gems - All Reality WE tv - All Weddings WE tv - ALTRD.TV - AMC Thrillers - Anger Management - Antiques Roadshow UK - Antiques Road Trip - Are We There Yet? - ARTFLIX - Movie Classics - ARTS TWG+ - AsianCrush - At Home with Family Handyman - AXS TV NOW - BABY SHARK TV - BACKSTAGE - BBC Food - BBC Home & Garden - Beautiful Planet - beIN SPORTS XTRA - Best TV Ever - Billiard TV - BITE - Bjgtjme - Free Movies - BlackPix - Bloomberg Quicktake - Bloomberg TV - Boonie Cubs TV - Boston 25 News - CampusLore Sports - Caught in Providence - Cheddar News - Chicken Soup for the Soul - ChiveTV - Choppertown - CineLife - Cinema Libre Channel - CINEPRIDE - Cine Sureño - Cineverse Selects - Classic Doctor Who - Classic Rock Network - ClixTV - Comedy Dynamics - COMMUNE - CONtv - CONtv Anime - Cooking Panda - Cowboy Way - Crackle - Crime 360 - Dark Matter TV - Discover Film - Doctors - Documentary+ - Docurama - Don't Tell The Bride - Dove - Dungeon TV - Edge Sport - Electric Now - EL REY - Entrepreneur TV - ESTV - Euronews - Euronews Français - Euronews Deutsch - Euronews Italiano - FailArmy - FamilyTime - Farscape - Fight Network - Filmstream - Fite 24/7 - Flash - FLOU Cine - FOX13 Memphis - FOX23 Tulsa - Freebie TV - Freebie TV - Los Pitufos - FrightFlix - FTF Sports - Fubo Sports Network - FUEL TV - GAGO TV - Galxy TV - Game Show Central - GFN TV - Glewed TV - GoTraveler - GoUSA TV - Go Wild - Gravitas Adrenaline - Gravitas Documentaries - Gravitas Movies - Grjngo - Western Movies - GUSTOTV - Hallmark Movies & More - Hannibal - HappiTV - Hard Knocks - HBCU-GO Sports - History Hit - Hi-YAH! - Home.Made.Nation - Humor Mill - i24NEWS Updates - IFC Films Picks - IGN1 - IMPACT Wrestling - Impossible - Quiz Show - INFAST - Johnny Carson TV - Journy - JOURNY Presents: America the Beautiful - Judge Faith - Julia Child - LOL! Network - Kidoodle TV - KidsFlix - Kids Pang TV - Kin - Kino Cult - KIRO 7 Seattle - KMTV - La Bocina Latina - La Corriente - Law & Crime - Local Now Bergen County - Local Now Long Island - Local Now Manhattan - Local Now Newburgh - Local Now New York City - Local Now White Plains - LOL! Stand Up - Lone Star Network - Love Destination - Love Nature - Made In Hollywood - MagellanTV NOW - Maverick Black Cinema - MAVTV Select - MBC - MegaNoticias - MHz Now - Midnight Pulp - MMA TV - MOB TV - Moconomy - Economy & Finance Infotainment - More U - Motorvision TV - MOVIESPHERE - MST3K - Mystery Alley - NBC News NOW - NEW K.MOVIES - NEW K-POP - News 12 New York - Newsmax TV - Newsy - NHRA TV - Ninja Kidz TV - Nosey - OnDemandChina - Outdoor America - Outside - Overtime - Party Poker TV - Pattrn - PBS Antiques Roadshow - PBS Nature - People are Awesome - PeopleTV - PlayWorks - pocket.watch - Poker Night TV - Popcornflix - Popstar! TV - POPSUGAR Fitness - Portlandia - Pro Wrestling TV - PW Kids - Qello Concerts by Stingray - QwestTV Classical - QwestTV Jazz & Beyond - QwestTV Mix - Racing America - Rakuten Viki - RCN Más - Real Life - Real Nosey - Real Stories - Real Wild - RetroCrush - Reuters TV - Revry - RevryNews - Runtime - Ryan and Friends - Samuel Goldwyn Channel - Samuel Goldwyn Classics - Samuel Goldwyn International - Scream Factory TV - Shemaroo Bollywood - Shorts - Shout! Cult - Shout! Factory TV Stream - Skills + Thrills - SKWAD - Slightly Off IFC - SLOPES - Sonic TV - Sony KAL - So...Real - So Yummy - Space Channel - Space Science Now - Spark TV Light & Love - SPEEDVISION - SportsGrid - Stadium - Stingray Classica Stream - Classic Rock - Stingray CMusic - Stingray DJAZZ - Easy Listening - Euro Hits - Everything ‘80s - Éxitos del Momento - Flashback 70s - Greatest Holiday Hits - Hip-Hop/R&B - Hit List - Hot Country - Stingray Karaoke - Stingray Naturescape - Nothin' But 90s - Pop Adult - Alternative - Smooth Jazz - Soul Storm - The Spa - Today's K-Pop - Y2K - Stories by AMC - Surf Now TV - Swerve Sports - Tastemade - TED - TG Junior - The Archive - The Boat Show - The Bob Ross Channel - The Carol Burnett Show - The Design Network - The Elvis Presley Channel - The Film Detective - The Grid - The Hill TV - The Pet Collective - The Preview Channel - The Walking Dead Universe - Weather Channel Español - This Old House - Times Now Navbharat - TODAY All Day - TokuSHOUTsu - Toon Goggles - Top Gear - Trailer Park Boys: The SwearNet Show - Trailers From Hell - Tribeca Channel - True Crime Now - True History - TV Asia Comedy Powered by Shemaroo - Unbeaten - Unexplained - Unidentified - USA TODAY - USA TODAY SPORTS - Us Weekly TV - Vice News - VICE - Vivaldi - Wanted: Dead or Alive - War & Military Now - Watch it Kid - Watch it SCREAM - Waypoint TV - WeatherSpy - WFTV 9 Orlando - WHIO Dayton - Whistle TV - WildEarth - Wired2Fish - Women's Sports Network - Wonder - WPXI Now Pittsburgh - WSB Now Atlanta - WSOC Channel 9 - Wu Tang Collection - XFC TV - Yahoo Finance - YG TV - AFV Español - AMC en Español - Canela TV - Chiquilines - Cine Real - El Conflicto TV - Estrella News - Estrella TV - Euronews Español - Horrorfy - Juntos TV - LevelUp - Love Nature en Español - MMC - Nosey Casos - Nosey Escándalos - Party Tyme Karaoke - Runtime Español - Saber Mas - Sony Canal Competencias - Sony Canal Novelas - The Bob Ross Channel en Español - Top Cine - Tu Cine - Cortos - Euronews Portuguese - - + + + 24 Hour Free Movies + ACCDN + AccuWeather NOW + ACL Cornhole TV + ACTION!!! + Action News Jax + AfroLandTV + AFV Family + ALF + ALLBLK Gems + All Reality WE tv + All Weddings WE tv + ALTRD.TV + AMC Thrillers + Anger Management + Antiques Roadshow UK + Antiques Road Trip + Are We There Yet? + ARTFLIX - Movie Classics + ARTS TWG+ + AsianCrush + At Home with Family Handyman + AXS TV NOW + BABY SHARK TV + BACKSTAGE + BBC Food + BBC Home & Garden + Beautiful Planet + beIN SPORTS XTRA + Best TV Ever + Billiard TV + BITE + Bjgtjme - Free Movies + BlackPix + Bloomberg Quicktake + Bloomberg TV + Boonie Cubs TV + Boston 25 News + CampusLore Sports + Caught in Providence + Cheddar News + Chicken Soup for the Soul + ChiveTV + Choppertown + CineLife + Cinema Libre Channel + CINEPRIDE + Cine Sureño + Cineverse Selects + Classic Doctor Who + Classic Rock Network + ClixTV + Comedy Dynamics + COMMUNE + CONtv + CONtv Anime + Cooking Panda + Cowboy Way + Crackle + Crime 360 + Dark Matter TV + Discover Film + Doctors + Documentary+ + Docurama + Don't Tell The Bride + Dove + Dungeon TV + Edge Sport + Electric Now + EL REY + Entrepreneur TV + ESTV + Euronews + Euronews Français + Euronews Deutsch + Euronews Italiano + FailArmy + FamilyTime + Farscape + Fight Network + Filmstream + Fite 24/7 + Flash + FLOU Cine + FOX13 Memphis + FOX23 Tulsa + Freebie TV + Freebie TV - Los Pitufos + FrightFlix + FTF Sports + Fubo Sports Network + FUEL TV + GAGO TV + Galxy TV + Game Show Central + GFN TV + Glewed TV + GoTraveler + GoUSA TV + Go Wild + Gravitas Adrenaline + Gravitas Documentaries + Gravitas Movies + Grjngo - Western Movies + GUSTOTV + Hallmark Movies & More + Hannibal + HappiTV + Hard Knocks + HBCU-GO Sports + History Hit + Hi-YAH! + Home.Made.Nation + Humor Mill + i24NEWS Updates + IFC Films Picks + IGN1 + IMPACT Wrestling + Impossible - Quiz Show + INFAST + Johnny Carson TV + Journy + JOURNY Presents: America the Beautiful + Judge Faith + Julia Child + LOL! Network + Kidoodle TV + KidsFlix + Kids Pang TV + Kin + Kino Cult + KIRO 7 Seattle + KMTV + La Bocina Latina + La Corriente + Law & Crime + Local Now Bergen County + Local Now Long Island + Local Now Manhattan + Local Now Newburgh + Local Now New York City + Local Now White Plains + LOL! Stand Up + Lone Star Network + Love Destination + Love Nature + Made In Hollywood + MagellanTV NOW + Maverick Black Cinema + MAVTV Select + MBC + MegaNoticias + MHz Now + Midnight Pulp + MMA TV + MOB TV + Moconomy - Economy & Finance Infotainment + More U + Motorvision TV + MOVIESPHERE + MST3K + Mystery Alley + NBC News NOW + NEW K.MOVIES + NEW K-POP + News 12 New York + Newsmax TV + Newsy + NHRA TV + Ninja Kidz TV + Nosey + OnDemandChina + Outdoor America + Outside + Overtime + Party Poker TV + Pattrn + PBS Antiques Roadshow + PBS Nature + People are Awesome + PeopleTV + PlayWorks + pocket.watch + Poker Night TV + Popcornflix + Popstar! TV + POPSUGAR Fitness + Portlandia + Pro Wrestling TV + PW Kids + Qello Concerts by Stingray + QwestTV Classical + QwestTV Jazz & Beyond + QwestTV Mix + Racing America + Rakuten Viki + RCN Más + Real Life + Real Nosey + Real Stories + Real Wild + RetroCrush + Reuters TV + Revry + RevryNews + Runtime + Ryan and Friends + Samuel Goldwyn Channel + Samuel Goldwyn Classics + Samuel Goldwyn International + Scream Factory TV + Shemaroo Bollywood + Shorts + Shout! Cult + Shout! Factory TV Stream + Skills + Thrills + SKWAD + Slightly Off IFC + SLOPES + Sonic TV + Sony KAL + So...Real + So Yummy + Space Channel + Space Science Now + Spark TV Light & Love + SPEEDVISION + SportsGrid + Stadium + Stingray Classica Stream + Classic Rock + Stingray CMusic + Stingray DJAZZ + Easy Listening + Euro Hits + Everything ‘80s + Éxitos del Momento + Flashback 70s + Greatest Holiday Hits + Hip-Hop/R&B + Hit List + Hot Country + Stingray Karaoke + Stingray Naturescape + Nothin' But 90s + Pop Adult + Alternative + Smooth Jazz + Soul Storm + The Spa + Today's K-Pop + Y2K + Stories by AMC + Surf Now TV + Swerve Sports + Tastemade + TED + TG Junior + The Archive + The Boat Show + The Bob Ross Channel + The Carol Burnett Show + The Design Network + The Elvis Presley Channel + The Film Detective + The Grid + The Hill TV + The Pet Collective + The Preview Channel + The Walking Dead Universe + Weather Channel Español + This Old House + Times Now Navbharat + TODAY All Day + TokuSHOUTsu + Toon Goggles + Top Gear + Trailer Park Boys: The SwearNet Show + Trailers From Hell + Tribeca Channel + True Crime Now + True History + TV Asia Comedy Powered by Shemaroo + Unbeaten + Unexplained + Unidentified + USA TODAY + USA TODAY SPORTS + Us Weekly TV + Vice News + VICE + Vivaldi + Wanted: Dead or Alive + War & Military Now + Watch it Kid + Watch it SCREAM + Waypoint TV + WeatherSpy + WFTV 9 Orlando + WHIO Dayton + Whistle TV + WildEarth + Wired2Fish + Women's Sports Network + Wonder + WPXI Now Pittsburgh + WSB Now Atlanta + WSOC Channel 9 + Wu Tang Collection + XFC TV + Yahoo Finance + YG TV + AFV Español + AMC en Español + Canela TV + Chiquilines + Cine Real + El Conflicto TV + Estrella News + Estrella TV + Euronews Español + Horrorfy + Juntos TV + LevelUp + Love Nature en Español + MMC + Nosey Casos + Nosey Escándalos + Party Tyme Karaoke + Runtime Español + Saber Mas + Sony Canal Competencias + Sony Canal Novelas + The Bob Ross Channel en Español + Top Cine + Tu Cine + Cortos + Euronews Portuguese + diff --git a/sites/plex.tv/plex.tv.config.js b/sites/plex.tv/plex.tv.config.js index f9b654d2..ac4bd781 100644 --- a/sites/plex.tv/plex.tv.config.js +++ b/sites/plex.tv/plex.tv.config.js @@ -12,7 +12,7 @@ module.exports = { } }, url: function ({ channel, date }) { - const [_, channelGridKey] = channel.site_id.split('-') + const [, channelGridKey] = channel.site_id.split('-') return `${API_ENDPOINT}/grid?channelGridKey=${channelGridKey}&date=${date.format('YYYY-MM-DD')}` }, @@ -32,7 +32,7 @@ module.exports = { return programs }, - async channels({ lang }) { + async channels() { const data = await axios .get(`${API_ENDPOINT}/lineups/plex/channels?X-Plex-Token=zb85PfdNQLmsry9kQLBR`) .then(r => r.data) @@ -66,7 +66,7 @@ function parseItems(content) { const items = [] metadata.forEach(item => { let segments = [] - item.Media.sort(byTime).forEach((media, i) => { + item.Media.sort(byTime).forEach(media => { let prevSegment = segments[segments.length - 1] if (prevSegment && prevSegment.endsAt === media.beginsAt) { prevSegment.endsAt = media.endsAt diff --git a/sites/plex.tv/plex.tv.test.js b/sites/plex.tv/plex.tv.test.js index a6b4280f..6f137e09 100644 --- a/sites/plex.tv/plex.tv.test.js +++ b/sites/plex.tv/plex.tv.test.js @@ -1,10 +1,9 @@ // npm run channels:parse -- --config=./sites/plex.tv/plex.tv.config.js --output=./sites/plex.tv/plex.tv.channels.xml -// npx epg-grabber --config=sites/plex.tv/plex.tv.config.js --channels=sites/plex.tv/plex.tv.channels.xml --output=guide.xml --days=2 +// npm run grab -- --site=plex.tv const { parser, url, request } = require('./plex.tv.config.js') const fs = require('fs') const path = require('path') -const axios = require('axios') const dayjs = require('dayjs') const utc = require('dayjs/plugin/utc') const customParseFormat = require('dayjs/plugin/customParseFormat') diff --git a/sites/programacion-tv.elpais.com/programacion-tv.elpais.com.channels.xml b/sites/programacion-tv.elpais.com/programacion-tv.elpais.com.channels.xml index 94a204e0..cd405e79 100644 --- a/sites/programacion-tv.elpais.com/programacion-tv.elpais.com.channels.xml +++ b/sites/programacion-tv.elpais.com/programacion-tv.elpais.com.channels.xml @@ -1,203 +1,201 @@ - - - 3/24 - 7 Región de Murcia - Al Jazeera English - AMC - Antena 3 - Aragón TV - Atreseries - AXN - AXN White - Baby TV - Barça TV - BBC World - BeIN Sports - Be Mad - Boing - Calle 13 - Canal 24 h - Canal Cocina - Canal Extremadura TV - Hollywood - Canal Panda - Canal Parlamento - Canal Sur - Canal Sur Andalucía - Caracol TV - Caza y Pesca - Clan TVE - CNBC - CNN International - CMM TV - Comedy Central - Cosmopolitan - Cuatro - Cubavisión Internacional - Dark - Decasa - Discovery Channel - Disney Channel - Disney Junior - Divinity - DMAX - Deutsche Welle - Energy - El Toro TV - ETB 1 - ETB 3 - EuroNews - Eurosport - Eurosport 2 - EWTN - Extreme Sports - FDF Telecinco - Fox Life - FOX - France 24 - Galicia TV - Gol TV - Historia - i24 News - Iberalia - La 1 - La 2 - laSexta - Mega - Mezzo - Movistar Acción - Movistar Cine Español - Movistar Comedia - Movistar Deportes - Movistar Estrenos - Movistar Series - MTV 90s - MTV Hits - MTV Live - MTV España - National Geographic - Neox - Nickelodeon - Nick Junior - Nova - La 8 Burgos - Odisea - Pro TV International - Real Madrid TV - Record TV - RT Español - Sol Música - Somos - Sundance Channel - Syfy - Taroteame - TCM - Telecinco - Teledeporte - teleSUR - TNT - TV3 - TV3CAT - TV5 Monde - TV Canaria - TV Chile - TVE Internacional Asia - TVE Internacional - VE PLUS TV - Viajar - XTRM - - - - - - - - - - - - - - - - - - - - - - - - - - - - Super 3 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Navarra Televisión - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3/24 + 7 Región de Murcia + Al Jazeera English + AMC + Antena 3 + Aragón TV + Atreseries + AXN + AXN White + Baby TV + Barça TV + BBC World + BeIN Sports + Be Mad + Boing + Calle 13 + Canal 24 h + Canal Cocina + Canal Extremadura TV + Hollywood + Canal Panda + Canal Parlamento + Canal Sur + Canal Sur Andalucía + Caracol TV + Caza y Pesca + Clan TVE + CMM TV + CNBC + CNN International + Comedy Central + Cosmopolitan + Cuatro + Cubavisión Internacional + Dark + Decasa + Discovery Channel + Disney Channel + Disney Junior + Divinity + DMAX + Deutsche Welle + El Toro TV + Energy + ETB 1 + ETB 3 + EuroNews + Eurosport + Eurosport 2 + EWTN + Extreme Sports + FDF Telecinco + Fox Life + FOX + France 24 + Galicia TV + Gol TV + Historia + i24 News + Iberalia + La 1 + La 2 + La 8 Burgos + laSexta + Mega + Mezzo + Movistar Acción + Movistar Cine Español + Movistar Comedia + Movistar Deportes + Movistar Estrenos + Movistar Series + MTV 90s + MTV Hits + MTV Live + MTV España + National Geographic + Navarra Televisión + Neox + Nickelodeon + Nick Junior + Nova + Odisea + Pro TV International + Real Madrid TV + Record TV + RT Español + Sol Música + Somos + Sundance Channel + Super 3 + Syfy + Taroteame + TCM + Telecinco + Teledeporte + teleSUR + TNT + TV3 + TV3CAT + TV5 Monde + TV Canaria + TV Chile + TVE Internacional Asia + TVE Internacional + VE PLUS TV + Viajar + XTRM + 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 8aadfb62..be1be74a 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 @@ -50,7 +50,7 @@ module.exports = { }, async channels() { const data = await axios - .get(`https://programacion-tv.elpais.com/data/canales.json`) + .get('https://programacion-tv.elpais.com/data/canales.json') .then(r => r.data) .catch(console.log) diff --git a/sites/programacion-tv.elpais.com/programacion-tv.elpais.com.test.js b/sites/programacion-tv.elpais.com/programacion-tv.elpais.com.test.js index 6a58da87..c600e327 100644 --- a/sites/programacion-tv.elpais.com/programacion-tv.elpais.com.test.js +++ b/sites/programacion-tv.elpais.com/programacion-tv.elpais.com.test.js @@ -1,4 +1,4 @@ -// npx epg-grabber --config=sites/programacion-tv.elpais.com/programacion-tv.elpais.com.config.js --channels=sites/programacion-tv.elpais.com/programacion-tv.elpais.com.channels.xml --output=guide.xml --days=2 +// npm run grab -- --site=programacion-tv.elpais.com // npm run channels:parse -- --config=./sites/programacion-tv.elpais.com/programacion-tv.elpais.com.config.js --output=./sites/programacion-tv.elpais.com/programacion-tv.elpais.com.channels.xml const { parser, url } = require('./programacion-tv.elpais.com.config.js') @@ -67,7 +67,7 @@ it('can parse response', async () => { it('can handle empty guide', async () => { const result = await parser({ - content: ``, + content: '', channel }) expect(result).toMatchObject([]) diff --git a/sites/programacion.tcc.com.uy/programacion.tcc.com.uy.channels.xml b/sites/programacion.tcc.com.uy/programacion.tcc.com.uy.channels.xml index aa853cf7..23fb833d 100644 --- a/sites/programacion.tcc.com.uy/programacion.tcc.com.uy.channels.xml +++ b/sites/programacion.tcc.com.uy/programacion.tcc.com.uy.channels.xml @@ -1,154 +1,152 @@ - - - 1000xHora - America 24 - Adrenalina Sports HD - Antena 3 - A+V - Asuntos Publicos HD - Band Internacional - Band news - BBC World - bitMe HD - C5N - Canal 10 HD - Canal 26 - Canal 4 HD - Canal 5 HD - Canal a - Cartoonito HD - CGTN Español HD - Claro Sports HD - CNN Español - CNN Internacional - Cronica TV - Deutsche Welle Español HD - Canal 9 - Encuentro - Europa Europa HD - Fox News - France 24 HD - Golden Premier HD - Golden Premier 2 HD - GOL TV VO HD - HBO Family - HBO Mundi HD - HBO Signature HD - HBO Xtreme HD - La Nacion - Las Estrellas HD - Multipremier SD - Pasiones - Playboy - RAI Italia HD - RT HD - PPV 14 Sextreme - Sony Movies - Sun Channel HD - TCC 1 - TCC 2 - TCC 3 - La Tele HD - Telefe HD - Tooncast - TV5 - TV Chile - TV Ciudad HD - TVE - Venus - VTV VO HD - VTV Plus VO HD - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1000xHora + America 24 + Adrenalina Sports HD + Antena 3 + A+V + Asuntos Publicos HD + Band Internacional + Band news + BBC World + bitMe HD + C5N + Canal 10 HD + Canal 26 + Canal 4 HD + Canal 5 HD + Canal a + Cartoonito HD + CGTN Español HD + Claro Sports HD + CNN Español + CNN Internacional + Cronica TV + Deutsche Welle Español HD + Canal 9 + Encuentro + Europa Europa HD + Fox News + France 24 HD + Golden Premier HD + Golden Premier 2 HD + GOL TV VO HD + HBO Family + HBO Mundi HD + HBO Signature HD + HBO Xtreme HD + La Nacion + Las Estrellas HD + Multipremier SD + Pasiones + Playboy + RAI Italia HD + RT HD + PPV 14 Sextreme + Sony Movies + Sun Channel HD + TCC 1 + TCC 2 + TCC 3 + La Tele HD + Telefe HD + Tooncast + TV5 + TV Chile + TV Ciudad HD + TVE + Venus + VTV VO HD + VTV Plus VO HD + diff --git a/sites/programacion.tcc.com.uy/programacion.tcc.com.uy.test.js b/sites/programacion.tcc.com.uy/programacion.tcc.com.uy.test.js index 949b8d80..cd79c822 100644 --- a/sites/programacion.tcc.com.uy/programacion.tcc.com.uy.test.js +++ b/sites/programacion.tcc.com.uy/programacion.tcc.com.uy.test.js @@ -1,5 +1,5 @@ // npm run channels:parse -- --config=./sites/programacion.tcc.com.uy/programacion.tcc.com.uy.config.js --output=./sites/programacion.tcc.com.uy/programacion.tcc.com.uy.channels.xml -// npx epg-grabber --config=sites/programacion.tcc.com.uy/programacion.tcc.com.uy.config.js --channels=sites/programacion.tcc.com.uy/programacion.tcc.com.uy.channels.xml --output=guide.xml --timeout=30000 --days=2 +// npm run grab -- --site=programacion.tcc.com.uy const { parser, url } = require('./programacion.tcc.com.uy.config.js') const fs = require('fs') @@ -18,7 +18,7 @@ const channel = { it('can generate valid url', () => { expect(url({ date })).toBe( - `https://www.tccvivo.com.uy/api/v1/navigation_filter/1575/filter/?cable_operator=1&emission_start=2023-02-11T00:00:00Z&emission_end=2023-02-12T00:00:00Z&format=json` + 'https://www.tccvivo.com.uy/api/v1/navigation_filter/1575/filter/?cable_operator=1&emission_start=2023-02-11T00:00:00Z&emission_end=2023-02-12T00:00:00Z&format=json' ) }) diff --git a/sites/programetv.ro/programetv.ro.channels.xml b/sites/programetv.ro/programetv.ro.channels.xml index 59aef3ab..d01a06d6 100644 --- a/sites/programetv.ro/programetv.ro.channels.xml +++ b/sites/programetv.ro/programetv.ro.channels.xml @@ -1,233 +1,231 @@ - - - 3sat - A7TV - Acasa - Acasa Gold - Agro TV - Aleph News - Alfa Omega TV - Aljazeera - AMC - Animal Planet - Antena 1 - Antena 3 - Antena International - Antena Stars - Auto Motor und Sport - Arcadia TV - AXN Black - AXN - AXN Spin - AXN White - B1 - Baby TV - Balkanika Music TV - BBC Earth - BBC World News - Bloomberg TV - Blue Hustler - Bollywood HD - Bollywood Classic - Bollywood Film - Bollywood TV - Boomerang - Brazzers TV Europe - Cartoon Network - CBS Reality - CGTN - Cinemax 2 - Cinemax - Club MTV - CNN - Comedy Central - Cool TV - Credo TV - Crime + Investigation - Das Erste - Da Vinci - Digi 24 - Digi Animal World - Digi Life - Digi Sport 1 - Digi Sport 2 - Digi Sport 3 - Digi Sport 4 - Digi World - Discovery Channel - Discovery Science - Disney Channel - Diva Romania - Dizi - DocuBox HD - Dorcel TV - - Duck TV - Duna TV - Duna World - DW - E! - Epic Drama - Erdély TV - Erox HD - Eroxxx HD - Etno TV - EuroNews - Eurosport 1 - Eurosport 2 - Eurosport 4K - Extreme Sports Channel - FashionBox HD - FashionTV - Favorit TV - FightBox HD - Film 4 UK - FilmBox Arthouse Worldwide - FilmBox Family - FilmBox Premium - Film Café - Film Now - Food Network - France 2 - France 24 English - France 24 - France 3 - France 5 - Fuel TV - FunBox UHD - Galaxy 4 - Ginx eSports TV - Happy Channel - HBO 2 - HBO 3 - HBO Romania - History România - H!t Music Channel - Hustler HD - Hustler TV - Inedit TV - Investigation Discovery - JimJam - Kabel Eins - Kanal D - KIKA - Kiss TV - Love Nature - Luxe TV - M1 - M2 - M4 Sport - M5 - Magic TV - Mediaset Italia - Mezzo - Mezzo Live HD - Minimax - Mooz Dance - Mooz Hits - Mooz Ro! - Motorvision HD - MTV 80s - MTV 90s - MTV Hits - MTV Live HD - Museum HD - Music Channel - Muzsika TV - MyZen HD - Nasul TV - National 24 Plus - National Geographic - National Geographic Wild - National TV - Nautical Channel - Nickelodeon - Nick Jr - Nicktoons - Nitro - N-TV - Orange Sport 1 - Orange Sport 2 - Orange Sport 3 - Orange Sport 4 - Phoenix - Playboy TV - Prima 4K - Prima Sport 1 - Prima Sport 2 - Prima Sport 3 - Prima Sport 4 - Prima TV - Private TV - Pro Arena - Pro Cinema - Profit TV - ProSieben - Pro TV - Pro TV International - Publika TV - Rai 1 - Rai 2 - Rai 3 - Realitatea Plus - Redlight HD - Rock TV - România TV - RTL - RTL Gold - RTL KETTŐ - RTL HÁROM - RTL Klub - RTL Zwei - RT HD - Sat. 1 - Sixx - Sorozat + - Speranta TV - Sport Extra - Stingray Classica - Stingray Djazz - Stingray IConcerts HD - Story 4 - Super RTL - Taraf TV - TeenNick - The Fishing & Hunting Channel - TLC - Trace Caribbean - Trace Sport Stars - Trace Urban HD - Travel Channel - Travel Mix - Trinitas TV - TV 1000 - TV 1000 Russkoe Kino - TV 4 - TV5Monde Europe - TVE - TV Paprika - TVR 1 - TVR 2 - TVR 3 - TVR Cluj - TVR Craiova - TVR Iasi - TVR International - TVR Moldova - TVR Targu-Mures - TVR Timisoara - U TV - Viasat Explore - Viasat History - Viasat Nature - Vox - VTV - Warner TV - Welt - ZDF - ZDF Info - ZDF Neo - Zu TV - - + + + 3sat + A7TV + Acasa + Acasa Gold + Agro TV + Aleph News + Alfa Omega TV + Aljazeera + AMC + Animal Planet + Antena 1 + Antena 3 + Antena International + Antena Stars + Arcadia TV + Auto Motor und Sport + AXN Black + AXN + AXN Spin + AXN White + B1 + Baby TV + Balkanika Music TV + BBC Earth + BBC World News + Bloomberg TV + Blue Hustler + Bollywood Classic + Bollywood Film + Bollywood HD + Bollywood TV + Boomerang + Brazzers TV Europe + Cartoon Network + CBS Reality + CGTN + Cinemax 2 + Cinemax + Club MTV + CNN + Comedy Central + Cool TV + Credo TV + Crime + Investigation + Das Erste + Da Vinci + Digi 24 + Digi Animal World + Digi Life + Digi Sport 1 + Digi Sport 2 + Digi Sport 3 + Digi Sport 4 + Digi World + Discovery Channel + Discovery Science + Disney Channel + Diva Romania + Dizi + DocuBox HD + Dorcel TV + Duck TV + Duna TV + Duna World + DW + E! + Epic Drama + Erdély TV + Erox HD + Eroxxx HD + Etno TV + EuroNews + Eurosport 1 + Eurosport 2 + Eurosport 4K + Extreme Sports Channel + FashionBox HD + FashionTV + Favorit TV + FightBox HD + Film 4 UK + FilmBox Arthouse Worldwide + FilmBox Family + FilmBox Premium + Film Café + Film Now + Food Network + France 2 + France 24 English + France 24 + France 3 + France 5 + Fuel TV + FunBox UHD + Galaxy 4 + Ginx eSports TV + Happy Channel + HBO 2 + HBO 3 + HBO Romania + History România + H!t Music Channel + Hustler HD + Hustler TV + Inedit TV + Investigation Discovery + JimJam + Kabel Eins + Kanal D + KIKA + Kiss TV + Love Nature + Luxe TV + M1 + M2 + M4 Sport + M5 + Magic TV + Mediaset Italia + Mezzo + Mezzo Live HD + Minimax + Mooz Dance + Mooz Hits + Mooz Ro! + Motorvision HD + MTV 80s + MTV 90s + MTV Hits + MTV Live HD + Museum HD + Music Channel + Muzsika TV + MyZen HD + Nasul TV + National 24 Plus + National Geographic + National Geographic Wild + National TV + Nautical Channel + Nickelodeon + Nick Jr + Nicktoons + Nitro + N-TV + Orange Sport 1 + Orange Sport 2 + Orange Sport 3 + Orange Sport 4 + Phoenix + Playboy TV + Prima 4K + Prima Sport 1 + Prima Sport 2 + Prima Sport 3 + Prima Sport 4 + Prima TV + Private TV + Pro Arena + Pro Cinema + Profit TV + ProSieben + Pro TV + Pro TV International + Publika TV + Rai 1 + Rai 2 + Rai 3 + Realitatea Plus + Redlight HD + Rock TV + România TV + RT HD + RTL + RTL Gold + RTL HÁROM + RTL Klub + RTL KETTŐ + RTL Zwei + Sat. 1 + Sixx + Sorozat + + Speranta TV + Sport Extra + Stingray Classica + Stingray Djazz + Stingray IConcerts HD + Story 4 + Super RTL + Taraf TV + TeenNick + The Fishing & Hunting Channel + TLC + Trace Caribbean + Trace Sport Stars + Trace Urban HD + Travel Channel + Travel Mix + Trinitas TV + TV 1000 + TV 1000 Russkoe Kino + TV 4 + TV5Monde Europe + TVE + TV Paprika + TVR 1 + TVR 2 + TVR 3 + TVR Cluj + TVR Craiova + TVR Iasi + TVR International + TVR Moldova + TVR Targu-Mures + TVR Timisoara + U TV + Viasat Explore + Viasat History + Viasat Nature + Vox + VTV + Warner TV + Welt + ZDF + ZDF Info + ZDF Neo + Zu TV + diff --git a/sites/programetv.ro/programetv.ro.config.js b/sites/programetv.ro/programetv.ro.config.js index b93cbc80..64f73227 100644 --- a/sites/programetv.ro/programetv.ro.config.js +++ b/sites/programetv.ro/programetv.ro.config.js @@ -20,7 +20,7 @@ module.exports = { return `https://www.programetv.ro/post/${channel.site_id}/${daysOfWeek[day]}/` }, - parser: function ({ content, channel }) { + parser: function ({ content }) { let programs = [] const data = parseContent(content) if (!data || !data.shows) return programs @@ -57,7 +57,7 @@ function parseStop(item) { } function parseContent(content) { - const [_, data] = content.match(/var pageData = ((.|[\r\n])+);\n/) || [null, null] + const [, data] = content.match(/var pageData = ((.|[\r\n])+);\n/) || [null, null] return data ? JSON.parse(data) : {} } diff --git a/sites/programetv.ro/programetv.ro.test.js b/sites/programetv.ro/programetv.ro.test.js index 60a68d92..c4e9690e 100644 --- a/sites/programetv.ro/programetv.ro.test.js +++ b/sites/programetv.ro/programetv.ro.test.js @@ -1,4 +1,4 @@ -// npx epg-grabber --config=sites/programetv.ro/programetv.ro.config.js --channels=sites/programetv.ro/programetv.ro.channels.xml --output=guide.xml --days=2 +// npm run grab -- --site=programetv.ro const { parser, url } = require('./programetv.ro.config.js') const dayjs = require('dayjs') @@ -19,7 +19,7 @@ const content = ` j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src= 'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f); })(window,document,'script','dataLayer','GTM-WPX9FM9'); -var cfg = {"homeUrl":"https:\/\/www.programetv.ro\/","loginUrl":"https:\/\/www.programetv.ro\/auth\/login","logoutUrl":"https:\/\/www.programetv.ro\/auth\/logout","nowOnTvUrl":"https:\/\/www.programetv.ro\/acum-la-tv\/","favoriteStationsUrl":"https:\/\/www.programetv.ro\/posturi-tv\/favorite\/","saveFavoritesUrl":"https:\/\/www.programetv.ro\/save-favorites\/","popularStationsUrl":"https:\/\/www.programetv.ro\/posturi-tv\/populare\/","stationListUrl":"https:\/\/www.programetv.ro\/posturi-tv\/","privacyPolicyUrl":"https:\/\/www.programetv.ro\/privacy-policy\/","user":false,"showMovieDetails":true,"banners":{"inlist":{"enabled":true,"code":"9647692440"},"footer":{"enabled":true,"code":"9608163999"},"modal":{"enabled":true,"code":"3427954368"}}}; +var cfg = {"homeUrl":"https://www.programetv.ro/","loginUrl":"https://www.programetv.ro/auth/login","logoutUrl":"https://www.programetv.ro/auth/logout","nowOnTvUrl":"https://www.programetv.ro/acum-la-tv/","favoriteStationsUrl":"https://www.programetv.ro/posturi-tv/favorite/","saveFavoritesUrl":"https://www.programetv.ro/save-favorites/","popularStationsUrl":"https://www.programetv.ro/posturi-tv/populare/","stationListUrl":"https://www.programetv.ro/posturi-tv/","privacyPolicyUrl":"https://www.programetv.ro/privacy-policy/","user":false,"showMovieDetails":true,"banners":{"inlist":{"enabled":true,"code":"9647692440"},"footer":{"enabled":true,"code":"9608163999"},"modal":{"enabled":true,"code":"3427954368"}}}; var __stations = []; var pageData = {"station":{"id":"1","displayName":"PRO TV","domain":"Românești","icon":"https://static.cinemagia.ro/img/tv_station/pro-tv.jpg","tvProvider":[{"tvPId":"2","tvPPos":["113"]},{"tvPId":"3","tvPPos":["113"]},{"tvPId":"4","tvPPos":["113"]},{"tvPId":"5","tvPPos":["3"]},{"tvPId":"6","tvPPos":["3"]},{"tvPId":"8","tvPPos":["4"]},{"tvPId":"11","tvPPos":["111"]}]},"shows":[{"id":"690127679","start":"2021-11-07T07:00:00+02:00","stop":"2021-11-07T09:59:59+02:00","stationId":"1","replay":false,"live":true,"online":true,"OTTRights":true,"categories":["Ştiri"],"title":"Ştirile Pro Tv","tvShowId":"5","desc":"În fiecare zi, cele mai importante evenimente, transmisiuni LIVE, analize, anchete şi reportaje sunt la Ştirile ProTV.","obs":"În fiecare zi, cele mai importante evenimente, transmisiuni LIVE, analize, anchete şi reportaje sunt la Ştirile ProTV.","icon":"https://www.programetv.ro/img/shows/84/54/stirile-pro-tv.png?key=Z2lfZnVial90cmFyZXZwLzAwLzAwLzA1LzE4MzgxMnktMTIwazE3MC1hLW40NTk4MW9zLmNhdA==","templating":[]}],"date":"2021-11-07","controls ":[{"date":"2021-11-03","slug":"ieri","label":"Ieri","name":"Ieri","url":"https://www.programetv.ro/post/pro-tv/ieri/"},{"date":"2021-11-04","slug":"azi","label":"Azi","name":"Azi","url":"https://www.programetv.ro/post/pro-tv/"},{"date":"2021-11-05","slug":"vineri","label":"Vi","name":"Vineri","url":"https://www.programetv.ro/post/pro-tv/vineri/"},{"date":"2021-11-06","slug":"sambata","label":"Sb","name":"Sâmbătă","url":"https://www.programetv.ro/post/pro-tv/sambata/"},{"date":"2021-11-07","slug":"duminica","label":"Du","name":"Duminică","url":"https://www.programetv.ro/post/pro-tv/duminica/"},{"date":"2021-11-08","slug":"luni","label":"Lu","name":"Luni","url":"https://www.programetv.ro/post/pro-tv/luni/"},{"date":"2021-11-09","slug":"marti","label":"Ma","name":"Marți","url":"https://www.programetv.ro/post/pro-tv/marti/"}],"todayDate":"2021-11-04","adsenabled":true}; var __controls = [{"date":"2021-11-03","slug":"ieri","label":"Ieri","name":"Ieri","url":"https://www.programetv.ro/post/pro-tv/ieri/"},{"date":"2021-11-04","slug":"azi","label":"Azi","name":"Azi","url":"https://www.programetv.ro/post/pro-tv/"},{"date":"2021-11-05","slug":"vineri","label":"Vi","name":"Vineri","url":"https://www.programetv.ro/post/pro-tv/vineri/"},{"date":"2021-11-06","slug":"sambata","label":"Sb","name":"Sâmbătă","url":"https://www.programetv.ro/post/pro-tv/sambata/"},{"date":"2021-11-07","slug":"duminica","label":"Du","name":"Duminică","url":"https://www.programetv.ro/post/pro-tv/duminica/"},{"date":"2021-11-08","slug":"luni","label":"Lu","name":"Luni","url":"https://www.programetv.ro/post/pro-tv/luni/"},{"date":"2021-11-09","slug":"marti","label":"Ma","name":"Marți","url":"https://www.programetv.ro/post/pro-tv/marti/"}]; @@ -38,7 +38,8 @@ it('can parse response', () => { start: '2021-11-07T05:00:00.000Z', stop: '2021-11-07T07:59:59.000Z', title: 'Ştirile Pro Tv', - description: `În fiecare zi, cele mai importante evenimente, transmisiuni LIVE, analize, anchete şi reportaje sunt la Ştirile ProTV.`, + description: + 'În fiecare zi, cele mai importante evenimente, transmisiuni LIVE, analize, anchete şi reportaje sunt la Ştirile ProTV.', category: ['Ştiri'], icon: 'https://www.programetv.ro/img/shows/84/54/stirile-pro-tv.png?key=Z2lfZnVial90cmFyZXZwLzAwLzAwLzA1LzE4MzgxMnktMTIwazE3MC1hLW40NTk4MW9zLmNhdA==' } @@ -59,7 +60,7 @@ it('can handle empty guide', () => { j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src= 'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f); })(window,document,'script','dataLayer','GTM-WPX9FM9'); -var cfg = {"homeUrl":"https:\/\/www.programetv.ro\/","loginUrl":"https:\/\/www.programetv.ro\/auth\/login","logoutUrl":"https:\/\/www.programetv.ro\/auth\/logout","nowOnTvUrl":"https:\/\/www.programetv.ro\/acum-la-tv\/","favoriteStationsUrl":"https:\/\/www.programetv.ro\/posturi-tv\/favorite\/","saveFavoritesUrl":"https:\/\/www.programetv.ro\/save-favorites\/","popularStationsUrl":"https:\/\/www.programetv.ro\/posturi-tv\/populare\/","stationListUrl":"https:\/\/www.programetv.ro\/posturi-tv\/","privacyPolicyUrl":"https:\/\/www.programetv.ro\/privacy-policy\/","user":false,"showMovieDetails":true,"banners":{"inlist":{"enabled":true,"code":"9647692440"},"footer":{"enabled":true,"code":"9608163999"},"modal":{"enabled":true,"code":"3427954368"}}}; +var cfg = {"homeUrl":"https://www.programetv.ro/","loginUrl":"https://www.programetv.ro/auth/login","logoutUrl":"https://www.programetv.ro/auth/logout","nowOnTvUrl":"https://www.programetv.ro/acum-la-tv/","favoriteStationsUrl":"https://www.programetv.ro/posturi-tv/favorite/","saveFavoritesUrl":"https://www.programetv.ro/save-favorites/","popularStationsUrl":"https://www.programetv.ro/posturi-tv/populare/","stationListUrl":"https://www.programetv.ro/posturi-tv/","privacyPolicyUrl":"https://www.programetv.ro/privacy-policy/","user":false,"showMovieDetails":true,"banners":{"inlist":{"enabled":true,"code":"9647692440"},"footer":{"enabled":true,"code":"9608163999"},"modal":{"enabled":true,"code":"3427954368"}}}; var __stations = [];
', 'Filter channels by language (ISO 639-2 code)') - .option('-o, --output ', 'Path to output file') - .option('--days ', 'Override the number of days for which the program will be loaded') - .option('--cron ', 'Schedule a script run') - .option('--gzip', 'Create a compressed version of the guide as well', false) - .parse(process.argv) - -const options = program.opts() - -options.output = options.output || file.resolve(`${BASE_DIR}/guides/{lang}/{site}.xml`) -options.config = file.resolve(`${BASE_DIR}/sites/${options.site}/${options.site}.config.js`) -options.channels = file.resolve(`${BASE_DIR}/sites/${options.site}/${options.site}*.channels.xml`) - -let channels = [] -let programs = [] -let runIndex = 0 - -async function main() { - logger.start('staring...') - - logger.info('settings:') - for (let prop in options) { - logger.info(` ${prop}: ${options[prop]}`) - } - - const config = await loadConfig(options.config) - const queue = await createQueue(options.channels, config) - const outputPath = options.output - - if (options.cron) { - const job = new CronJob(options.cron, function () { - runJob(config, queue, outputPath) - }) - job.start() - } else { - await runJob(config, queue, outputPath) - } -} - -async function loadConfig(configPath) { - let config = require(file.resolve(configPath)) - config = _.merge(config, {}) - config.days = config.days || 1 - - logger.info('config:') - logConfig(config) - - return config -} - -function logConfig(config, level = 1) { - let padLeft = ' '.repeat(level) - for (let prop in config) { - if (typeof config[prop] === 'string' || typeof config[prop] === 'number') { - logger.info(`${padLeft}${prop}: ${config[prop]}`) - } else if (typeof config[prop] === 'object') { - level++ - logger.info(`${padLeft}${prop}:`) - logConfig(config[prop], level) - } - } -} - -async function runJob(config, queue, outputPath) { - runIndex++ - logger.info(`run #${runIndex}:`) - - timer.start() - - await grab(queue, config) - - await save(outputPath, channels, programs) - - logger.success(` done in ${timer.format('HH[h] mm[m] ss[s]')}`) -} - -async function grab(queue, config) { - const grabber = new EPGGrabber(config) - const total = queue.length - - let i = 1 - for (const item of queue) { - let channel = item.channel - let date = item.date - channels.push(item.channel) - await grabber - .grab(channel, date, (data, err) => { - logger.info( - ` [${i}/${total}] ${channel.site} (${channel.lang}) - ${channel.xmltv_id} - ${dayjs - .utc(data.date) - .format('MMM D, YYYY')} (${data.programs.length} programs)` - ) - if (i < total) i++ - - if (err) { - logger.info(` ERR: ${err.message}`) - } - }) - .then(results => { - programs = programs.concat(results) - }) - } -} - -async function createQueue(channelsPath, config) { - logger.info('creating queue...') - let queue = {} - await api.channels.load().catch(logger.error) - const files = await file.list(channelsPath).catch(logger.error) - const utcDate = date.getUTC(CURR_DATE) - const days = options.days ? parseInt(options.days) : config.days - for (const filepath of files) { - logger.info(` loading "${filepath}"...`) - try { - const dir = file.dirname(filepath) - const { channels } = await parser.parseChannels(filepath) - const filename = file.basename(filepath) - const dates = Array.from({ length: days }, (_, i) => utcDate.add(i, 'd')) - for (const channel of channels) { - if (!channel.site || !channel.xmltv_id) continue - if (options.lang && channel.lang !== options.lang) continue - const found = api.channels.find({ id: channel.xmltv_id }) - if (found) { - channel.logo = found.logo - } - for (const d of dates) { - const dateString = d.toJSON() - const key = `${channel.site}:${channel.lang}:${channel.xmltv_id}:${dateString}` - if (!queue[key]) { - queue[key] = { - channel, - date: dateString, - config, - error: null - } - } - } - } - } catch (err) { - logger.error(err) - continue - } - } - - queue = Object.values(queue) - - logger.info(` added ${queue.length} items`) - - return queue -} - -async function save(template, parsedChannels, programs = []) { - const variables = file.templateVariables(template) - - const groups = _.groupBy(parsedChannels, channel => { - let groupId = '' - for (let key in channel) { - if (variables.includes(key)) { - groupId += channel[key] - } - } - - return groupId - }) - - for (let groupId in groups) { - const channels = groups[groupId] - - let output = { - channels, - programs: [], - date: CURR_DATE - } - - for (let program of programs) { - let programLang = program.titles[0].lang - let channel = channels.find(c => c.xmltv_id === program.channel && c.lang === programLang) - if (!channel) continue - - output.programs.push(new Program(program, channel)) - } - - output.channels = _.sortBy(output.channels, 'xmltv_id') - output.channels = _.uniqBy(output.channels, 'xmltv_id') - - output.programs = _.sortBy(output.programs, ['channel', 'start']) - output.programs = _.uniqBy(output.programs, p => p.channel + p.start) - - const outputPath = file.templateFormat(template, output.channels[0]) - const xmlFilepath = outputPath - const xmltv = generateXMLTV(output) - logger.info(` saving to "${xmlFilepath}"...`) - await file.create(xmlFilepath, xmltv) - - if (options.gzip) { - const gzFilepath = `${outputPath}.gz` - const compressed = await zip.compress(xmltv) - logger.info(` saving to "${gzFilepath}"...`) - await file.create(gzFilepath, compressed) - } - } -} - -main() diff --git a/scripts/commands/epg/grab.ts b/scripts/commands/epg/grab.ts new file mode 100644 index 00000000..97875867 --- /dev/null +++ b/scripts/commands/epg/grab.ts @@ -0,0 +1,115 @@ +import { Logger, Timer, Storage, Collection } from '@freearhey/core' +import { program } from 'commander' +import { CronJob } from 'cron' +import { Queue, Job, ChannelsParser } from '../../core' +import { Channel } from 'epg-grabber' +import path from 'path' +import { SITES_DIR } from '../../constants' + +program + .option('-s, --site ', 'Name of the site to parse') + .option( + '-c, --channels ', + 'Path to *.channels.xml file (required if the "--site" attribute is not specified)' + ) + .option('-o, --output ', 'Path to output file', 'guide.xml') + .option('-l, --lang ', 'Filter channels by language (ISO 639-2 code)') + .option('-t, --timeout ', 'Override the default timeout for each request') + .option( + '--days ', + 'Override the number of days for which the program will be loaded (defaults to the value from the site config)', + value => parseInt(value) + ) + .option( + '--maxConnections ', + 'Limit on the number of concurrent requests', + value => parseInt(value), + 1 + ) + .option('--cron ', 'Schedule a script run (example: "0 0 * * *")') + .option('--gzip', 'Create a compressed version of the guide as well', false) + .parse(process.argv) + +export type GrabOptions = { + site?: string + channels?: string + output: string + gzip: boolean + maxConnections: number + timeout?: string + lang?: string + days?: number + cron?: string +} + +const options: GrabOptions = program.opts() + +async function main() { + if (!options.site && !options.channels) + throw new Error('One of the arguments must be presented: `--site` or `--channels`') + + const logger = new Logger() + + logger.start('staring...') + + logger.info('config:') + logger.tree(options) + + logger.info(`loading channels...`) + const storage = new Storage() + const parser = new ChannelsParser({ storage }) + + let files: string[] = [] + if (options.site) { + files = await storage.list(path.join(SITES_DIR, `${options.site}/*.channels.xml`)) + } else if (options.channels) { + files = await storage.list(options.channels) + } + + let parsedChannels = new Collection() + for (let filepath of files) { + parsedChannels = parsedChannels.concat(await parser.parse(filepath)) + } + if (options.lang) { + parsedChannels = parsedChannels.filter((channel: Channel) => channel.lang === options.lang) + } + logger.info(` found ${parsedChannels.count()} channels`) + + logger.info('creating queue...') + const queue = new Queue({ + parsedChannels, + logger, + options + }) + await queue.create() + logger.info(` added ${queue.size()} items`) + + const job = new Job({ + queue, + logger, + options + }) + + let runIndex = 1 + if (options.cron) { + const cronJob = new CronJob(options.cron, async () => { + logger.info(`run #${runIndex}:`) + const timer = new Timer() + timer.start() + await job.run() + runIndex++ + logger.success(` done in ${timer.format('HH[h] mm[m] ss[s]')}`) + }) + cronJob.start() + } else { + logger.info(`run #${runIndex}:`) + const timer = new Timer() + timer.start() + await job.run() + logger.success(` done in ${timer.format('HH[h] mm[m] ss[s]')}`) + } + + logger.info('finished') +} + +main() diff --git a/scripts/constants.ts b/scripts/constants.ts new file mode 100644 index 00000000..7b6c00d0 --- /dev/null +++ b/scripts/constants.ts @@ -0,0 +1,4 @@ +export const SITES_DIR = process.env.SITES_DIR || './sites' +export const GUIDES_DIR = process.env.GUIDES_DIR || './guides' +export const DATA_DIR = process.env.DATA_DIR || './temp/data' +export const CURR_DATE = process.env.CURR_DATE || new Date().toISOString() diff --git a/scripts/core/api.js b/scripts/core/api.js deleted file mode 100644 index 18c4f144..00000000 --- a/scripts/core/api.js +++ /dev/null @@ -1,32 +0,0 @@ -const _ = require('lodash') -const file = require('./file') - -const DATA_DIR = process.env.DATA_DIR || './scripts/tmp/data' - -class API { - constructor(filepath) { - this.filepath = file.resolve(filepath) - } - - async load() { - const data = await file.read(this.filepath) - this.collection = JSON.parse(data) - } - - find(query) { - return _.find(this.collection, query) - } - - all() { - return this.collection - } -} - -const api = {} - -api.channels = new API(`${DATA_DIR}/channels.json`) -api.regions = new API(`${DATA_DIR}/regions.json`) -api.countries = new API(`${DATA_DIR}/countries.json`) -api.subdivisions = new API(`${DATA_DIR}/subdivisions.json`) - -module.exports = api diff --git a/scripts/core/apiChannel.ts b/scripts/core/apiChannel.ts new file mode 100644 index 00000000..3ddd1a91 --- /dev/null +++ b/scripts/core/apiChannel.ts @@ -0,0 +1,79 @@ +import { Collection } from '@freearhey/core' + +type ApiChannelProps = { + id: string + name: string + alt_names: string[] + network: string + owners: string[] + country: string + subdivision: string + city: string + broadcast_area: string[] + languages: string[] + categories: string[] + is_nsfw: boolean + launched: string + closed: string + replaced_by: string + website: string + logo: string +} + +export class ApiChannel { + id: string + name: string + altNames: Collection + network: string + owners: Collection + country: string + subdivision: string + city: string + broadcastArea: Collection + languages: Collection + categories: Collection + isNSFW: boolean + launched: string + closed: string + replacedBy: string + website: string + logo: string + + constructor({ + id, + name, + alt_names, + network, + owners, + country, + subdivision, + city, + broadcast_area, + languages, + categories, + is_nsfw, + launched, + closed, + replaced_by, + website, + logo + }: ApiChannelProps) { + this.id = id + this.name = name + this.altNames = new Collection(alt_names) + this.network = network + this.owners = new Collection(owners) + this.country = country + this.subdivision = subdivision + this.city = city + this.broadcastArea = new Collection(broadcast_area) + this.languages = new Collection(languages) + this.categories = new Collection(categories) + this.isNSFW = is_nsfw + this.launched = launched + this.closed = closed + this.replacedBy = replaced_by + this.website = website + this.logo = logo + } +} diff --git a/scripts/core/apiClient.ts b/scripts/core/apiClient.ts new file mode 100644 index 00000000..66fa28a8 --- /dev/null +++ b/scripts/core/apiClient.ts @@ -0,0 +1,59 @@ +import { Logger, Storage } from '@freearhey/core' +import axios, { AxiosInstance, AxiosResponse, AxiosProgressEvent } from 'axios' +import cliProgress, { MultiBar } from 'cli-progress' +import numeral from 'numeral' + +export class ApiClient { + progressBar: MultiBar + client: AxiosInstance + storage: Storage + logger: Logger + + constructor({ logger }: { logger: Logger }) { + this.logger = logger + this.client = axios.create({ + responseType: 'stream' + }) + this.storage = new Storage() + this.progressBar = new cliProgress.MultiBar({ + stopOnComplete: true, + hideCursor: true, + forceRedraw: true, + barsize: 36, + format(options, params, payload) { + const filename = payload.filename.padEnd(18, ' ') + const barsize = options.barsize || 40 + const percent = (params.progress * 100).toFixed(2) + const speed = payload.speed ? numeral(payload.speed).format('0.0 b') + '/s' : 'N/A' + const total = numeral(params.total).format('0.0 b') + const completeSize = Math.round(params.progress * barsize) + const incompleteSize = barsize - completeSize + const bar = + options.barCompleteString && options.barIncompleteString + ? options.barCompleteString.substr(0, completeSize) + + options.barGlue + + options.barIncompleteString.substr(0, incompleteSize) + : '-'.repeat(barsize) + + return `${filename} [${bar}] ${percent}% | ETA: ${params.eta}s | ${total} | ${speed}` + } + }) + } + + async download(filename: string) { + const stream = await this.storage.createStream(`/temp/data/${filename}`) + + const bar = this.progressBar.create(0, 0, { filename }) + + this.client + .get(`https://iptv-org.github.io/api/${filename}`, { + onDownloadProgress({ total, loaded, rate }: AxiosProgressEvent) { + if (total) bar.setTotal(total) + bar.update(loaded, { speed: rate }) + } + }) + .then((response: AxiosResponse) => { + response.data.pipe(stream) + }) + } +} diff --git a/scripts/core/channelsParser.ts b/scripts/core/channelsParser.ts new file mode 100644 index 00000000..990422b4 --- /dev/null +++ b/scripts/core/channelsParser.ts @@ -0,0 +1,24 @@ +import { parseChannels } from 'epg-grabber' +import { Storage, Collection } from '@freearhey/core' + +type ChannelsParserProps = { + storage: Storage +} + +export class ChannelsParser { + storage: Storage + + constructor({ storage }: ChannelsParserProps) { + this.storage = storage + } + + async parse(filepath: string) { + let parsedChannels = new Collection() + + const content = await this.storage.load(filepath) + const channels = parseChannels(content) + parsedChannels = parsedChannels.concat(new Collection(channels)) + + return parsedChannels + } +} diff --git a/scripts/core/configLoader.ts b/scripts/core/configLoader.ts new file mode 100644 index 00000000..0fd429ad --- /dev/null +++ b/scripts/core/configLoader.ts @@ -0,0 +1,19 @@ +import { SiteConfig } from 'epg-grabber' +import _ from 'lodash' + +export class ConfigLoader { + async load(filepath: string): Promise { + const config = (await import(filepath)).default + + return _.merge( + { + delay: 0, + maxConnections: 1, + request: { + timeout: 30000 + } + }, + config + ) + } +} diff --git a/scripts/core/db.js b/scripts/core/db.js deleted file mode 100644 index 1870346f..00000000 --- a/scripts/core/db.js +++ /dev/null @@ -1,76 +0,0 @@ -const nedb = require('nedb-promises') -const file = require('./file') - -const DB_DIR = process.env.DB_DIR || './scripts/tmp/database' - -class Database { - constructor(filepath) { - this.filepath = filepath - } - - load() { - this.db = nedb.create({ - filename: file.resolve(this.filepath), - autoload: true, - onload: err => { - if (err) console.error(err) - }, - compareStrings: (a, b) => { - a = a.replace(/\s/g, '_') - b = b.replace(/\s/g, '_') - - return a.localeCompare(b, undefined, { - sensitivity: 'accent', - numeric: true - }) - } - }) - } - - removeIndex(field) { - return this.db.removeIndex(field) - } - - addIndex(options) { - return this.db.ensureIndex(options) - } - - compact() { - return this.db.persistence.compactDatafile() - } - - stopAutocompact() { - return this.db.persistence.stopAutocompaction() - } - - reset() { - return file.clear(this.filepath) - } - - count(query) { - return this.db.count(query) - } - - insert(doc) { - return this.db.insert(doc) - } - - update(query, update) { - return this.db.update(query, update) - } - - find(query) { - return this.db.find(query) - } - - remove(query, options) { - return this.db.remove(query, options) - } -} - -const db = {} - -db.queue = new Database(`${DB_DIR}/queue.db`) -db.programs = new Database(`${DB_DIR}/programs.db`) - -module.exports = db diff --git a/scripts/core/file.js b/scripts/core/file.js deleted file mode 100644 index 8a2f7eab..00000000 --- a/scripts/core/file.js +++ /dev/null @@ -1,93 +0,0 @@ -const path = require('path') -const glob = require('glob') -const fs = require('fs-extra') - -const file = {} - -file.templateVariables = function (template) { - const match = template.match(/{[^}]+}/g) - - return Array.isArray(match) ? match.map(s => s.substring(1, s.length - 1)) : [] -} - -file.templateFormat = function (template, obj) { - let output = template - for (let key in obj) { - const regex = new RegExp(`{${key}}`, 'g') - const value = obj[key] || undefined - output = output.replace(regex, value) - } - - return output -} - -file.list = function (pattern) { - return new Promise(resolve => { - glob(pattern, function (err, files) { - resolve(files) - }) - }) -} - -file.getFilename = function (filepath) { - return path.parse(filepath).name -} - -file.createDir = async function (dir) { - if (await file.exists(dir)) return - - return fs.mkdir(dir, { recursive: true }).catch(console.error) -} - -file.exists = function (filepath) { - return fs.exists(path.resolve(filepath)) -} - -file.existsSync = function (filepath) { - return fs.existsSync(path.resolve(filepath)) -} - -file.read = function (filepath) { - return fs.readFile(path.resolve(filepath), { encoding: 'utf8' }).catch(console.error) -} - -file.append = function (filepath, data) { - return fs.appendFile(path.resolve(filepath), data).catch(console.error) -} - -file.create = function (filepath, data = '') { - filepath = path.resolve(filepath) - const dir = path.dirname(filepath) - - return file - .createDir(dir) - .then(() => file.write(filepath, data)) - .catch(console.error) -} - -file.write = function (filepath, data = '') { - return fs.writeFile(path.resolve(filepath), data, { encoding: 'utf8' }).catch(console.error) -} - -file.writeSync = function (filepath, data = '') { - return fs.writeFileSync(path.resolve(filepath), data, { encoding: 'utf8' }) -} - -file.clear = async function (filepath) { - if (await file.exists(filepath)) return file.write(filepath, '') - return true -} - -file.resolve = function (filepath) { - return path.resolve(filepath) -} - -file.dirname = function (filepath) { - return path.dirname(filepath) -} - -file.basename = function (filepath) { - return path.basename(filepath) -} - -module.exports = file diff --git a/scripts/core/grabber.ts b/scripts/core/grabber.ts new file mode 100644 index 00000000..783e3f14 --- /dev/null +++ b/scripts/core/grabber.ts @@ -0,0 +1,75 @@ +import { EPGGrabber, GrabCallbackData, EPGGrabberMock, SiteConfig, Channel } from 'epg-grabber' +import { Logger, Collection } from '@freearhey/core' +import { Queue } from './' +import { GrabOptions } from '../commands/epg/grab' +import { TaskQueue, PromisyClass } from 'cwait' + +type GrabberProps = { + logger: Logger + queue: Queue + options: GrabOptions +} + +export class Grabber { + logger: Logger + queue: Queue + options: GrabOptions + + constructor({ logger, queue, options }: GrabberProps) { + this.logger = logger + this.queue = queue + this.options = options + } + + async grab(): Promise<{ channels: Collection; programs: Collection }> { + const taskQueue = new TaskQueue(Promise as PromisyClass, this.options.maxConnections) + + const total = this.queue.size() + + const channels = new Collection() + let programs = new Collection() + let i = 1 + + await Promise.all( + this.queue.items().map( + taskQueue.wrap( + async (queueItem: { channel: Channel; config: SiteConfig; date: string }) => { + const { channel, config, date } = queueItem + + channels.add(channel) + + if (this.options.timeout !== undefined) { + const timeout = parseInt(this.options.timeout) + config.request = { ...config.request, ...{ timeout } } + } + + const grabber = + process.env.NODE_ENV === 'test' ? new EPGGrabberMock(config) : new EPGGrabber(config) + const _programs = await grabber.grab( + channel, + date, + (data: GrabCallbackData, error: Error | null) => { + const { programs, date } = data + + this.logger.info( + ` [${i}/${total}] ${channel.site} (${channel.lang}) - ${ + channel.xmltv_id + } - ${date.format('MMM D, YYYY')} (${programs.length} programs)` + ) + if (i < total) i++ + + if (error) { + this.logger.info(` ERR: ${error.message}`) + } + } + ) + + programs = programs.concat(new Collection(_programs)) + } + ) + ) + ) + + return { channels, programs } + } +} diff --git a/scripts/core/guide.ts b/scripts/core/guide.ts new file mode 100644 index 00000000..2b73f05e --- /dev/null +++ b/scripts/core/guide.ts @@ -0,0 +1,55 @@ +import { Collection, Logger, DateTime, Storage, Zip } from '@freearhey/core' +import { Channel } from 'epg-grabber' +import { XMLTV } from '../core' +import { CURR_DATE } from '../constants' + +type GuideProps = { + channels: Collection + programs: Collection + logger: Logger + filepath: string + gzip: boolean +} + +export class Guide { + channels: Collection + programs: Collection + logger: Logger + storage: Storage + filepath: string + gzip: boolean + + constructor({ channels, programs, logger, filepath, gzip }: GuideProps) { + this.channels = channels + this.programs = programs + this.logger = logger + this.storage = new Storage() + this.filepath = filepath + this.gzip = gzip || false + } + + async save() { + const channels = this.channels.uniqBy( + (channel: Channel) => `${channel.xmltv_id}:${channel.site}` + ) + const programs = this.programs + + const xmltv = new XMLTV({ + channels, + programs, + date: new DateTime(CURR_DATE, { zone: 'UTC' }) + }) + + const xmlFilepath = this.filepath + this.logger.info(` saving to "${xmlFilepath}"...`) + await this.storage.save(xmlFilepath, xmltv.toString()) + + if (this.gzip) { + const zip = new Zip() + const compressed = await zip.compress(xmltv.toString()) + const gzFilepath = `${this.filepath}.gz` + this.logger.info(` saving to "${gzFilepath}"...`) + await this.storage.save(gzFilepath, compressed) + } + } +} diff --git a/scripts/core/guideManager.ts b/scripts/core/guideManager.ts new file mode 100644 index 00000000..22b80552 --- /dev/null +++ b/scripts/core/guideManager.ts @@ -0,0 +1,61 @@ +import { Collection, Logger, Storage, StringTemplate } from '@freearhey/core' +import { OptionValues } from 'commander' +import { Channel, Program } from 'epg-grabber' +import { Guide } from '.' + +type GuideManagerProps = { + options: OptionValues + logger: Logger + channels: Collection + programs: Collection +} + +export class GuideManager { + options: OptionValues + storage: Storage + logger: Logger + channels: Collection + programs: Collection + + constructor({ channels, programs, logger, options }: GuideManagerProps) { + this.options = options + this.logger = logger + this.channels = channels + this.programs = programs + this.storage = new Storage() + } + + async createGuides() { + const pathTemplate = new StringTemplate(this.options.output) + + const groupedChannels = this.channels + .orderBy([(channel: Channel) => channel.xmltv_id]) + .uniqBy((channel: Channel) => `${channel.xmltv_id}:${channel.site}:${channel.lang}`) + .groupBy((channel: Channel) => { + return pathTemplate.format({ lang: channel.lang || 'en', site: channel.site || '' }) + }) + + const groupedPrograms = this.programs + .orderBy([(program: Program) => program.channel, (program: Program) => program.start]) + .groupBy((program: Program) => { + const lang = + program.titles && program.titles.length && program.titles[0].lang + ? program.titles[0].lang + : 'en' + + return pathTemplate.format({ lang, site: program.site || '' }) + }) + + for (const groupKey of groupedPrograms.keys()) { + const guide = new Guide({ + filepath: groupKey, + gzip: this.options.gzip, + channels: new Collection(groupedChannels.get(groupKey)), + programs: new Collection(groupedPrograms.get(groupKey)), + logger: this.logger + }) + + await guide.save() + } + } +} diff --git a/scripts/core/index.js b/scripts/core/index.js deleted file mode 100644 index c6c607a5..00000000 --- a/scripts/core/index.js +++ /dev/null @@ -1,11 +0,0 @@ -exports.db = require('./db') -exports.logger = require('./logger') -exports.file = require('./file') -exports.parser = require('./parser') -exports.timer = require('./timer') -exports.markdown = require('./markdown') -exports.api = require('./api') -exports.date = require('./date') -exports.table = require('./table') -exports.xml = require('./xml') -exports.zip = require('./zip') diff --git a/scripts/core/index.ts b/scripts/core/index.ts new file mode 100644 index 00000000..6ab0d340 --- /dev/null +++ b/scripts/core/index.ts @@ -0,0 +1,11 @@ +export * from './xml' +export * from './channelsParser' +export * from './xmltv' +export * from './configLoader' +export * from './grabber' +export * from './job' +export * from './queue' +export * from './guideManager' +export * from './guide' +export * from './apiChannel' +export * from './apiClient' diff --git a/scripts/core/job.ts b/scripts/core/job.ts new file mode 100644 index 00000000..d23b59f6 --- /dev/null +++ b/scripts/core/job.ts @@ -0,0 +1,34 @@ +import { Logger } from '@freearhey/core' +import { Queue, Grabber, GuideManager } from '.' +import { GrabOptions } from '../commands/epg/grab' + +type JobProps = { + options: GrabOptions + logger: Logger + queue: Queue +} + +export class Job { + options: GrabOptions + logger: Logger + grabber: Grabber + + constructor({ queue, logger, options }: JobProps) { + this.options = options + this.logger = logger + this.grabber = new Grabber({ logger, queue, options }) + } + + async run() { + const { channels, programs } = await this.grabber.grab() + + const manager = new GuideManager({ + channels, + programs, + options: this.options, + logger: this.logger + }) + + await manager.createGuides() + } +} diff --git a/scripts/core/logger.js b/scripts/core/logger.js deleted file mode 100644 index effb0cb1..00000000 --- a/scripts/core/logger.js +++ /dev/null @@ -1,3 +0,0 @@ -const { consola } = require('consola') - -module.exports = consola diff --git a/scripts/core/markdown.js b/scripts/core/markdown.js deleted file mode 100644 index 2729f0b7..00000000 --- a/scripts/core/markdown.js +++ /dev/null @@ -1,10 +0,0 @@ -const markdownInclude = require('markdown-include') -const file = require('./file') - -const markdown = {} - -markdown.compile = function (filepath) { - markdownInclude.compileFiles(file.resolve(filepath)) -} - -module.exports = markdown diff --git a/scripts/core/parser.js b/scripts/core/parser.js deleted file mode 100644 index 73be3763..00000000 --- a/scripts/core/parser.js +++ /dev/null @@ -1,29 +0,0 @@ -const file = require('./file') -const grabber = require('epg-grabber') - -const parser = {} - -parser.parseChannels = async function (filepath) { - const content = await file.read(filepath) - - return grabber.parseChannels(content) -} - -parser.parseLogs = async function (filepath) { - const content = await file.read(filepath) - if (!content) return [] - const lines = content.split('\n') - - return lines.map(line => (line ? JSON.parse(line) : null)).filter(l => l) -} - -parser.parseNumber = function (string) { - const parsed = parseInt(string) - if (isNaN(parsed)) { - throw new Error('scripts/core/parser.js:parseNumber() Input value is not a number') - } - - return parsed -} - -module.exports = parser diff --git a/scripts/core/queue.ts b/scripts/core/queue.ts new file mode 100644 index 00000000..c197da65 --- /dev/null +++ b/scripts/core/queue.ts @@ -0,0 +1,94 @@ +import { Storage, Collection, DateTime, Logger, Dictionary } from '@freearhey/core' +import { ChannelsParser, ConfigLoader, ApiChannel } from './' +import { SITES_DIR, DATA_DIR, CURR_DATE } from '../constants' +import { Channel, SiteConfig } from 'epg-grabber' +import path from 'path' +import { GrabOptions } from '../commands/epg/grab' + +export type QueueItem = { + channel: Channel + date: string + config: SiteConfig + error: string | null +} + +type QueueProps = { + logger: Logger + options: GrabOptions + parsedChannels: Collection +} + +export class Queue { + configLoader: ConfigLoader + logger: Logger + sitesStorage: Storage + dataStorage: Storage + parser: ChannelsParser + parsedChannels: Collection + options: GrabOptions + date: DateTime + _items: QueueItem[] = [] + + constructor({ parsedChannels, logger, options }: QueueProps) { + this.parsedChannels = parsedChannels + this.logger = logger + this.sitesStorage = new Storage() + this.dataStorage = new Storage(DATA_DIR) + this.parser = new ChannelsParser({ storage: new Storage() }) + this.date = new DateTime(CURR_DATE) + this.options = options + this.configLoader = new ConfigLoader() + } + + async create() { + const channelsContent = await this.dataStorage.json('channels.json') + const channels = new Collection(channelsContent).map(data => new ApiChannel(data)) + + const queue = new Dictionary() + + for (const channel of this.parsedChannels.all()) { + if (!channel.site || !channel.xmltv_id) continue + if (this.options.lang && channel.lang !== this.options.lang) continue + + const configPath = path.resolve(SITES_DIR, `${channel.site}/${channel.site}.config.js`) + const config: SiteConfig = await this.configLoader.load(configPath) + + const found: ApiChannel = channels.first( + (_channel: ApiChannel) => _channel.id === channel.xmltv_id + ) + if (found) { + channel.logo = found.logo + } + + const days = this.options.days || config.days || 1 + const dates = Array.from({ length: days }, (_, day) => this.date.add(day, 'd')) + dates.forEach((date: DateTime) => { + const dateString = date.toJSON() + const key = `${channel.site}:${channel.lang}:${channel.xmltv_id}:${dateString}` + + if (queue.missing(key)) { + queue.set(key, { + channel, + date: dateString, + config, + error: null + }) + } + }) + } + + this._items = Object.values(queue.data()) + } + + size(): number { + return this._items.length + } + + items(): QueueItem[] { + return this._items + } + + isEmpty(): boolean { + return this._items.length === 0 + } +} diff --git a/scripts/core/table.js b/scripts/core/table.js deleted file mode 100644 index 0c5d363f..00000000 --- a/scripts/core/table.js +++ /dev/null @@ -1,47 +0,0 @@ -const table = {} - -table.create = function (data, cols) { - let output = '\r\n' - - output += ' \r\n ' - for (let column of cols) { - output += `${column}` - } - output += '\r\n \r\n' - - output += ' \r\n' - output += getHTMLRows(data) - output += ' \r\n' - - output += '' - - return output -} - -function getHTMLRows(data) { - let output = '' - for (let group of data) { - let rowspan = group.length - for (let [j, row] of group.entries()) { - output += ' ' - for (let [i, value] of row.entries()) { - if (i === 0 && j === 0) { - output += `${value}` - } else if (i > 0) { - if (typeof value === 'number') { - output += `${value}` - } else { - output += `${value}` - } - } - } - output += '\r\n' - } - } - - return output -} - -function getSpan() {} - -module.exports = table diff --git a/scripts/core/timer.js b/scripts/core/timer.js deleted file mode 100644 index 6e5f381d..00000000 --- a/scripts/core/timer.js +++ /dev/null @@ -1,29 +0,0 @@ -const { performance } = require('perf_hooks') -const dayjs = require('dayjs') -const duration = require('dayjs/plugin/duration') -const relativeTime = require('dayjs/plugin/relativeTime') - -dayjs.extend(relativeTime) -dayjs.extend(duration) - -const timer = {} - -let t0 = 0 - -timer.start = function () { - t0 = performance.now() -} - -timer.format = function (f) { - let t1 = performance.now() - - return dayjs.duration(t1 - t0).format(f) -} - -timer.humanize = function (suffix = true) { - let t1 = performance.now() - - return dayjs.duration(t1 - t0).humanize(suffix) -} - -module.exports = timer diff --git a/scripts/core/xml.js b/scripts/core/xml.ts similarity index 53% rename from scripts/core/xml.js rename to scripts/core/xml.ts index 5cd6c3f6..1d7710b1 100644 --- a/scripts/core/xml.js +++ b/scripts/core/xml.ts @@ -1,25 +1,36 @@ -const xml = {} +import { Collection } from '@freearhey/core' +import { Channel } from 'epg-grabber' -xml.create = function (items, site) { - let output = `\r\n\r\n \r\n` +export class XML { + items: Collection + site: string - items.forEach(channel => { - const logo = channel.logo ? ` logo="${channel.logo}"` : '' - const xmltv_id = channel.xmltv_id || '' - const lang = channel.lang || '' - const site_id = channel.site_id || '' - output += ` ${escapeString(channel.name)}\r\n` - }) + constructor(items: Collection, site: string) { + this.items = items + this.site = site + } - output += ` \r\n\r\n` + toString() { + let output = '\r\n\r\n' - return output + this.items.forEach((channel: Channel) => { + const logo = channel.logo ? ` logo="${channel.logo}"` : '' + const xmltv_id = channel.xmltv_id || '' + const lang = channel.lang || '' + const site_id = channel.site_id || '' + output += ` ${escapeString(channel.name)}\r\n` + }) + + output += '\r\n' + + return output + } } -function escapeString(string, defaultValue = '') { - if (!string) return defaultValue +function escapeString(value: string, defaultValue: string = '') { + if (!value) return defaultValue const regex = new RegExp( '((?:[\0-\x08\x0B\f\x0E-\x1F\uFFFD\uFFFE\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]))|([\\x7F-\\x84]|[\\x86-\\x9F]|[\\uFDD0-\\uFDEF]|(?:\\uD83F[\\uDFFE\\uDFFF])|(?:\\uD87F[\\uDF' + @@ -33,9 +44,9 @@ function escapeString(string, defaultValue = '') { 'g' ) - string = String(string || '').replace(regex, '') + value = String(value || '').replace(regex, '') - return string + return value .replace(/&/g, '&') .replace(//g, '>') @@ -45,5 +56,3 @@ function escapeString(string, defaultValue = '') { .replace(/ +/g, ' ') .trim() } - -module.exports = xml diff --git a/scripts/core/xmltv.ts b/scripts/core/xmltv.ts new file mode 100644 index 00000000..eebd5424 --- /dev/null +++ b/scripts/core/xmltv.ts @@ -0,0 +1,28 @@ +import { DateTime, Collection } from '@freearhey/core' +import { generateXMLTV } from 'epg-grabber' + +type XMLTVProps = { + channels: Collection + programs: Collection + date: DateTime +} + +export class XMLTV { + channels: Collection + programs: Collection + date: DateTime + + constructor({ channels, programs, date }: XMLTVProps) { + this.channels = channels + this.programs = programs + this.date = date + } + + toString() { + return generateXMLTV({ + channels: this.channels.all(), + programs: this.programs.all(), + date: this.date.toJSON() + }) + } +} diff --git a/scripts/core/zip.js b/scripts/core/zip.js deleted file mode 100644 index f6c8140c..00000000 --- a/scripts/core/zip.js +++ /dev/null @@ -1,13 +0,0 @@ -const { gzip, ungzip } = require('node-gzip') - -const zip = {} - -zip.compress = async function (string) { - return gzip(string) -} - -zip.decompress = async function (string) { - return ungzip(string) -} - -module.exports = zip diff --git a/scripts/tmp/.gitignore b/scripts/tmp/.gitignore deleted file mode 100644 index c96a04f0..00000000 --- a/scripts/tmp/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -* -!.gitignore \ No newline at end of file diff --git a/scripts/types/langs.d.ts b/scripts/types/langs.d.ts new file mode 100644 index 00000000..60fb498a --- /dev/null +++ b/scripts/types/langs.d.ts @@ -0,0 +1 @@ +declare module 'langs' From c0cfcf7a478613324e1242deb28e3badd3b1dc83 Mon Sep 17 00:00:00 2001 From: freearhey <7253922+freearhey@users.noreply.github.com> Date: Mon, 2 Oct 2023 06:35:33 +0300 Subject: [PATCH 13/19] Update /sites --- sites/9tv.co.il/9tv.co.il.channels.xml | 8 +- sites/9tv.co.il/9tv.co.il.config.js | 2 +- sites/9tv.co.il/9tv.co.il.test.js | 11 +- sites/abc.net.au/abc.net.au.channels.xml | 70 +- sites/abc.net.au/abc.net.au.test.js | 11 +- sites/allente.se/allente.se.config.js | 2 +- sites/allente.se/allente.se.test.js | 20 +- sites/allente.se/allente.se_dk.channels.xml | 128 +- sites/allente.se/allente.se_fi.channels.xml | 76 +- sites/allente.se/allente.se_no.channels.xml | 146 +- sites/allente.se/allente.se_se.channels.xml | 224 +- .../andorradifusio.ad.channels.xml | 8 +- .../andorradifusio.ad.config.js | 4 +- .../andorradifusio.ad.test.js | 8 +- .../arianaafgtv.com.channels.xml | 8 +- .../arianaafgtv.com/arianaafgtv.com.config.js | 4 +- .../arianatelevision.com.channels.xml | 8 +- .../arianatelevision.com.config.js | 4 +- .../arianatelevision.com.test.js | 16 +- sites/arirang.com/arirang.com.channels.xml | 12 +- sites/arirang.com/arirang.com.config.js | 214 +- sites/arirang.com/arirang.com.test.js | 83 +- sites/artonline.tv/artonline.tv.channels.xml | 16 +- sites/artonline.tv/artonline.tv.config.js | 4 +- sites/artonline.tv/artonline.tv.test.js | 5 +- sites/astro.com.my/astro.com.my.channels.xml | 282 +- sites/astro.com.my/astro.com.my.config.js | 8 +- sites/astro.com.my/astro.com.my.test.js | 2 +- sites/bein.com/bein.com.channels.xml | 162 - sites/bein.com/bein.com.config.js | 5 +- sites/bein.com/bein.com.test.js | 2 +- sites/bein.com/bein.com_ar.channels.xml | 79 + sites/bein.com/bein.com_en.channels.xml | 80 + sites/beinsports.com/beinsports.com.config.js | 14 +- sites/beinsports.com/beinsports.com.test.js | 4 +- .../beinsports.com_au.channels.xml | 12 +- .../beinsports.com_fr.channels.xml | 26 +- .../beinsports.com_hk.channels.xml | 10 +- .../beinsports.com_id.channels.xml | 10 +- .../beinsports.com_my.channels.xml | 8 +- .../beinsports.com_ph.channels.xml | 10 +- .../beinsports.com_qa-ar.channels.xml | 56 +- .../beinsports.com_qa-en.channels.xml | 44 +- .../beinsports.com_th.channels.xml | 10 +- .../beinsports.com_us-en.channels.xml | 26 +- .../beinsports.com_us-es.channels.xml | 26 +- .../berrymedia.co.kr.channels.xml | 18 +- .../berrymedia.co.kr.config.js | 2 +- .../berrymedia.co.kr/berrymedia.co.kr.test.js | 6 +- sites/bt.com/bt.com.channels.xml | 336 +- sites/bt.com/bt.com.config.js | 3 - sites/bt.com/bt.com.test.js | 12 +- .../cablego.com.pe.channels.xml | 198 +- sites/cablego.com.pe/cablego.com.pe.test.js | 2 +- .../cableplus.com.uy.channels.xml | 322 +- .../cableplus.com.uy.config.js | 6 +- .../cableplus.com.uy/cableplus.com.uy.test.js | 6 +- .../canalplus-caraibes.com.channels.xml | 260 +- .../canalplus-caraibes.com.config.js | 5 +- .../canalplus-caraibes.com.test.js | 8 +- .../canalplus-haiti.com.channels.xml | 230 +- .../canalplus-haiti.com.config.js | 4 +- .../canalplus-haiti.com.test.js | 7 +- .../canalplus-reunion.com.channels.xml | 242 +- .../canalplus-reunion.com.test.js | 5 +- .../canalplus.com/canalplus.com.channels.xml | 648 ++- sites/canalplus.com/canalplus.com.config.js | 1 - sites/canalplus.com/canalplus.com.test.js | 8 +- sites/cgates.lt/cgates.lt.channels.xml | 244 +- sites/cgates.lt/cgates.lt.config.js | 4 +- sites/cgates.lt/cgates.lt.test.js | 2 +- .../chaines-tv.orange.fr.channels.xml | 394 +- .../chaines-tv.orange.fr.test.js | 13 +- .../clickthecity.com.channels.xml | 72 +- .../clickthecity.com.config.js | 10 +- .../clickthecity.com/clickthecity.com.test.js | 9 +- sites/compulms.com/compulms.com.channels.xml | 14 +- sites/compulms.com/compulms.com.test.js | 2 +- .../comteco.com.bo.channels.xml | 156 +- sites/comteco.com.bo/comteco.com.bo.test.js | 13 +- sites/cosmote.gr/cosmote.gr.channels.xml | 176 +- sites/cosmote.gr/cosmote.gr.config.js | 5 +- sites/cosmote.gr/cosmote.gr.test.js | 12 +- sites/delta.nl/delta.nl.channels.xml | 452 +- sites/delta.nl/delta.nl.test.js | 13 +- .../digiturk.com.tr.channels.xml | 266 +- .../digiturk.com.tr/digiturk.com.tr.config.js | 11 +- sites/digiturk.com.tr/digiturk.com.tr.test.js | 8 +- .../directv.com.ar.channels.xml | 832 ++- sites/directv.com.ar/directv.com.ar.config.js | 16 +- sites/directv.com.ar/directv.com.ar.test.js | 7 +- .../directv.com.uy.channels.xml | 292 +- sites/directv.com.uy/directv.com.uy.config.js | 3 +- sites/directv.com.uy/directv.com.uy.test.js | 4 +- sites/directv.com/directv.com.channels.xml | 2092 ++++---- sites/directv.com/directv.com.config.js | 16 +- sites/directv.com/directv.com.test.js | 2 +- sites/dishtv.in/dishtv.in.channels.xml | 916 ++-- sites/dishtv.in/dishtv.in.config.js | 14 +- sites/dishtv.in/dishtv.in.test.js | 7 +- .../dsmart.com.tr/dsmart.com.tr.channels.xml | 410 +- sites/dsmart.com.tr/dsmart.com.tr.config.js | 5 +- sites/dsmart.com.tr/dsmart.com.tr.test.js | 11 +- sites/dstv.com/dstv.com.channels.xml | 422 +- sites/dstv.com/dstv.com.config.js | 4 +- sites/dstv.com/dstv.com.test.js | 4 +- sites/elcinema.com/elcinema.com.channels.xml | 472 +- sites/elcinema.com/elcinema.com.config.js | 1 - sites/elcinema.com/elcinema.com.test.js | 6 +- .../ena.skylifetv.co.kr.channels.xml | 18 +- .../ena.skylifetv.co.kr.config.js | 2 +- .../ena.skylifetv.co.kr.test.js | 6 +- .../entertainment.ie.channels.xml | 222 +- .../entertainment.ie.config.js | 6 +- .../entertainment.ie/entertainment.ie.test.js | 2 +- .../epg.i-cable.com.channels.xml | 332 +- .../epg.i-cable.com/epg.i-cable.com.config.js | 6 +- sites/epg.i-cable.com/epg.i-cable.com.test.js | 4 +- .../firstmedia.com.channels.xml | 374 +- sites/firstmedia.com/firstmedia.com.config.js | 50 +- sites/firstmedia.com/firstmedia.com.test.js | 32 +- sites/flixed.io/flixed.io.channels.xml | 992 ++-- sites/flixed.io/flixed.io.config.js | 2 +- sites/flixed.io/flixed.io.test.js | 6 +- .../foxsports.com.au.channels.xml | 38 +- .../foxsports.com.au/foxsports.com.au.test.js | 10 +- .../foxtel.com.au/foxtel.com.au.channels.xml | 390 +- sites/foxtel.com.au/foxtel.com.au.config.js | 21 +- sites/foxtel.com.au/foxtel.com.au.test.js | 2 +- .../frikanalen.no/frikanalen.no.channels.xml | 8 +- sites/frikanalen.no/frikanalen.no.test.js | 11 +- sites/gatotv.com/gatotv.com.channels.xml | 980 ++-- sites/gatotv.com/gatotv.com.config.js | 3 +- sites/gatotv.com/gatotv.com.test.js | 4 +- .../getafteritmedia.com.channels.xml | 16 +- .../getafteritmedia.com.test.js | 6 +- .../guidatv.sky.it.channels.xml | 332 +- sites/guidatv.sky.it/guidatv.sky.it.test.js | 7 +- .../guide.dstv.com.channels.xml | 648 ++- sites/guide.dstv.com/guide.dstv.com.config.js | 12 +- sites/guide.dstv.com/guide.dstv.com.test.js | 9 +- sites/hd-plus.de/hd-plus.de.channels.xml | 246 +- sites/hd-plus.de/hd-plus.de.test.js | 13 +- sites/horizon.tv/horizon.tv.channels.xml | 374 +- sites/horizon.tv/horizon.tv.config.js | 6 +- sites/horizon.tv/horizon.tv.test.js | 229 +- sites/i.mjh.nz/i.mjh.nz.config.js | 5 +- sites/i.mjh.nz/i.mjh.nz.test.js | 4 +- sites/i.mjh.nz/i.mjh.nz_foxtel.channels.xml | 172 +- sites/i.mjh.nz/i.mjh.nz_plex.channels.xml | 660 ++- sites/i.mjh.nz/i.mjh.nz_pluto.channels.xml | 666 ++- sites/i.mjh.nz/i.mjh.nz_samsung.channels.xml | 454 +- sites/i.mjh.nz/i.mjh.nz_skygo.channels.xml | 204 +- sites/i.mjh.nz/i.mjh.nz_stirr.channels.xml | 218 +- sites/i24news.tv/i24news.tv.channels.xml | 12 +- sites/i24news.tv/i24news.tv.test.js | 7 +- .../indihometv.com.channels.xml | 305 +- sites/indihometv.com/indihometv.com.config.js | 4 +- sites/indihometv.com/indihometv.com.test.js | 9 +- .../ionplustv.com/ionplustv.com.channels.xml | 8 +- sites/ionplustv.com/ionplustv.com.config.js | 7 +- sites/ionplustv.com/ionplustv.com.test.js | 9 +- sites/ipko.com/ipko.com.channels.xml | 76 +- sites/ipko.com/ipko.com.test.js | 10 +- sites/kan.org.il/kan.org.il.channels.xml | 12 +- sites/kan.org.il/kan.org.il.config.js | 1 - sites/kan.org.il/kan.org.il.test.js | 7 +- sites/knr.gl/knr.gl.channels.xml | 8 +- sites/knr.gl/knr.gl.config.js | 2 +- sites/knr.gl/knr.gl.test.js | 11 +- sites/kplus.vn/kplus.vn.channels.xml | 58 +- sites/kplus.vn/kplus.vn.config.js | 3 +- sites/kplus.vn/kplus.vn.test.js | 7 +- sites/kvf.fo/kvf.fo.channels.xml | 8 +- sites/kvf.fo/kvf.fo.test.js | 6 +- sites/m.tv.sms.cz/m.tv.sms.cz.channels.xml | 1058 ++-- sites/m.tv.sms.cz/m.tv.sms.cz.config.js | 2 +- sites/m.tv.sms.cz/m.tv.sms.cz.test.js | 8 +- sites/magentatv.at/magentatv.at.channels.xml | 434 +- sites/magentatv.at/magentatv.at.config.js | 12 +- sites/magentatv.at/magentatv.at.test.js | 4 +- sites/magentatv.de/magentatv.de.channels.xml | 522 +- sites/magentatv.de/magentatv.de.config.js | 5 +- sites/magentatv.de/magentatv.de.test.js | 7 +- sites/magticom.ge/magticom.ge.channels.xml | 234 +- sites/magticom.ge/magticom.ge.config.js | 8 +- sites/magticom.ge/magticom.ge.test.js | 14 +- sites/mako.co.il/mako.co.il.channels.xml | 8 +- sites/mako.co.il/mako.co.il.config.js | 6 - sites/mako.co.il/mako.co.il.test.js | 11 +- .../maxtv.hrvatskitelekom.hr.channels.xml | 326 +- .../maxtv.hrvatskitelekom.hr.test.js | 8 +- sites/maxtvgo.mk/maxtvgo.mk.channels.xml | 108 +- sites/maxtvgo.mk/maxtvgo.mk.config.js | 6 +- sites/maxtvgo.mk/maxtvgo.mk.test.js | 12 +- sites/mbc.net/mbc.net.channels.xml | 40 +- sites/mbc.net/mbc.net.config.js | 3 +- sites/mbc.net/mbc.net.test.js | 7 +- .../mediagenie.co.kr.channels.xml | 16 +- .../mediagenie.co.kr.config.js | 7 +- .../mediagenie.co.kr/mediagenie.co.kr.test.js | 6 +- .../mediaklikk.hu/mediaklikk.hu.channels.xml | 22 +- sites/mediaklikk.hu/mediaklikk.hu.config.js | 2 +- sites/mediaklikk.hu/mediaklikk.hu.test.js | 8 +- sites/mediaset.it/mediaset.it.channels.xml | 36 +- sites/melita.com/melita.com.channels.xml | 242 +- sites/melita.com/melita.com.test.js | 7 +- sites/meo.pt/meo.pt.channels.xml | 408 +- sites/meo.pt/meo.pt.config.js | 2 +- sites/meo.pt/meo.pt.test.js | 2 +- sites/mewatch.sg/mewatch.sg.channels.xml | 40 +- sites/mewatch.sg/mewatch.sg.config.js | 2 +- sites/mewatch.sg/mewatch.sg.test.js | 10 +- sites/mi.tv/mi.tv.config.js | 2 +- sites/mi.tv/mi.tv.test.js | 19 +- sites/mi.tv/mi.tv_ar.channels.xml | 324 +- sites/mi.tv/mi.tv_br.channels.xml | 516 +- sites/mi.tv/mi.tv_cl.channels.xml | 164 +- sites/mi.tv/mi.tv_co.channels.xml | 88 +- sites/mi.tv/mi.tv_gt.channels.xml | 42 +- sites/mi.tv/mi.tv_hn.channels.xml | 50 +- sites/mi.tv/mi.tv_mx.channels.xml | 58 +- sites/mi.tv/mi.tv_pe.channels.xml | 44 +- sites/mi.tv/mi.tv_sv.channels.xml | 30 +- sites/mncvision.id/mncvision.id.channels.xml | 394 +- sites/mncvision.id/mncvision.id.config.js | 8 +- sites/mncvision.id/mncvision.id.test.js | 4 +- sites/moji.id/moji.id.channels.xml | 9 +- sites/moji.id/moji.id.config.js | 158 +- sites/moji.id/moji.id.test.js | 41 +- .../mon-programme-tv.be.channels.xml | 228 +- .../mon-programme-tv.be.config.js | 2 +- .../mon-programme-tv.be.test.js | 2 +- .../movistarplus.es.channels.xml | 370 +- .../movistarplus.es/movistarplus.es.config.js | 8 +- sites/movistarplus.es/movistarplus.es.test.js | 15 +- sites/mtel.ba/mtel.ba.channels.xml | 342 +- sites/mtel.ba/mtel.ba.config.js | 2 +- sites/mtel.ba/mtel.ba.test.js | 11 +- sites/mts.rs/mts.rs.channels.xml | 702 ++- sites/mts.rs/mts.rs.config.js | 12 +- sites/mts.rs/mts.rs.test.js | 10 +- .../mujtvprogram.cz.channels.xml | 544 +- sites/mujtvprogram.cz/mujtvprogram.cz.test.js | 7 +- sites/musor.tv/musor.tv.channels.xml | 344 +- sites/musor.tv/musor.tv.config.js | 2 +- sites/musor.tv/musor.tv.test.js | 8 +- .../myafn.dodmedia.osd.mil.channels.xml | 22 +- .../myafn.dodmedia.osd.mil.config.js | 4 +- .../myafn.dodmedia.osd.mil.test.js | 5 +- sites/mysky.com.ph/mysky.com.ph.channels.xml | 246 +- sites/mysky.com.ph/mysky.com.ph.config.js | 2 +- sites/mysky.com.ph/mysky.com.ph.test.js | 7 +- .../mytvsuper.com/mytvsuper.com.channels.xml | 214 +- sites/mytvsuper.com/mytvsuper.com.test.js | 3 +- sites/nhk.or.jp/nhk.or.jp.channels.xml | 10 +- sites/nhk.or.jp/nhk.or.jp.config.js | 99 +- sites/nhk.or.jp/nhk.or.jp.test.js | 43 +- .../nhkworldpremium.com.test.js | 7 +- .../nhkworldpremium.com_en.channels.xml | 8 +- .../nhkworldpremium.com_ja.channels.xml | 8 +- sites/nos.pt/nos.pt.channels.xml | 414 +- sites/nos.pt/nos.pt.config.js | 7 +- sites/nos.pt/nos.pt.test.js | 6 +- .../novacyprus.com.channels.xml | 64 +- sites/novacyprus.com/novacyprus.com.config.js | 6 +- sites/novacyprus.com/novacyprus.com.test.js | 9 +- .../novasports.gr/novasports.gr.channels.xml | 38 +- sites/novasports.gr/novasports.gr.config.js | 6 +- sites/novasports.gr/novasports.gr.test.js | 2 +- .../nowplayer.now.com.channels.xml | 492 +- .../nowplayer.now.com.config.js | 2 +- .../nowplayer.now.com.test.js | 9 +- .../nuevosiglo.com.uy.channels.xml | 354 +- .../nuevosiglo.com.uy.config.js | 2 - .../nuevosiglo.com.uy.test.js | 8 +- .../ontvtonight.com/ontvtonight.com.config.js | 6 +- sites/ontvtonight.com/ontvtonight.com.test.js | 15 +- .../ontvtonight.com_au.channels.xml | 106 +- .../ontvtonight.com_ie.channels.xml | 12 +- .../ontvtonight.com_uk.channels.xml | 202 +- .../ontvtonight.com_us.channels.xml | 78 +- sites/osn.com/osn.com.channels.xml | 213 - sites/osn.com/osn.com.config.js | 5 +- sites/osn.com/osn.com_ar.channels.xml | 104 + sites/osn.com/osn.com_en.channels.xml | 104 + sites/pbsguam.org/pbsguam.org.channels.xml | 8 +- sites/pbsguam.org/pbsguam.org.config.js | 11 +- sites/pbsguam.org/pbsguam.org.test.js | 6 +- sites/plex.tv/plex.tv.channels.xml | 686 ++- sites/plex.tv/plex.tv.config.js | 6 +- sites/plex.tv/plex.tv.test.js | 3 +- .../programacion-tv.elpais.com.channels.xml | 402 +- .../programacion-tv.elpais.com.config.js | 2 +- .../programacion-tv.elpais.com.test.js | 4 +- .../programacion.tcc.com.uy.channels.xml | 304 +- .../programacion.tcc.com.uy.test.js | 4 +- .../programetv.ro/programetv.ro.channels.xml | 462 +- sites/programetv.ro/programetv.ro.config.js | 4 +- sites/programetv.ro/programetv.ro.test.js | 9 +- .../programme-tv.net.channels.xml | 428 +- .../programme-tv.vini.pf.channels.xml | 10 +- .../programme-tv.vini.pf.config.js | 7 +- .../programme-tv.vini.pf.test.js | 29 +- .../programme.tvb.com.channels.xml | 24 +- .../programme.tvb.com.test.js | 2 +- .../programtv.onet.pl.channels.xml | 682 ++- .../programtv.onet.pl.test.js | 16 +- .../proximusmwc.be.channels.xml | 420 +- sites/proximusmwc.be/proximusmwc.be.config.js | 5 +- sites/proximusmwc.be/proximusmwc.be.test.js | 9 +- sites/raiplay.it/raiplay.it.channels.xml | 34 +- sites/raiplay.it/raiplay.it.test.js | 7 +- .../reportv.com.ar.channels.xml | 328 +- sites/reportv.com.ar/reportv.com.ar.config.js | 12 +- sites/reportv.com.ar/reportv.com.ar.test.js | 2 +- sites/rev.bs/rev.bs.channels.xml | 366 +- sites/rev.bs/rev.bs.config.js | 5 +- sites/rev.bs/rev.bs.test.js | 17 +- sites/rotana.net/rotana.net.channels.xml | 28 +- sites/rotana.net/rotana.net.config.js | 7 +- sites/rotana.net/rotana.net.test.js | 8 +- sites/rtb.gov.bn/rtb.gov.bn.channels.xml | 12 +- sites/rtb.gov.bn/rtb.gov.bn.config.js | 13 +- sites/rtb.gov.bn/rtb.gov.bn.test.js | 2 +- sites/rthk.hk/rthk.hk.channels.xml | 22 +- sites/rthk.hk/rthk.hk.config.js | 7 +- sites/rthk.hk/rthk.hk.test.js | 3 +- .../rtmklik.rtm.gov.my.channels.xml | 22 +- .../rtmklik.rtm.gov.my.test.js | 7 +- sites/rtp.pt/rtp.pt.channels.xml | 26 +- sites/rtp.pt/rtp.pt.test.js | 2 +- sites/ruv.is/ruv.is.channels.xml | 10 +- sites/ruv.is/ruv.is.config.js | 3 +- sites/ruv.is/ruv.is.test.js | 4 +- sites/sat.tv/sat.tv.channels.xml | 1122 ++-- sites/sat.tv/sat.tv.config.js | 5 +- sites/sat.tv/sat.tv.test.js | 2 +- sites/siba.com.co/siba.com.co.channels.xml | 202 +- sites/siba.com.co/siba.com.co.test.js | 7 +- sites/singtel.com/singtel.com.channels.xml | 310 +- sites/singtel.com/singtel.com.config.js | 8 +- sites/singtel.com/singtel.com.test.js | 14 +- sites/sjonvarp.is/sjonvarp.is.channels.xml | 40 +- sites/sjonvarp.is/sjonvarp.is.config.js | 1 - sites/sjonvarp.is/sjonvarp.is.test.js | 2 +- sites/sky.co.nz/sky.co.nz.channels.xml | 229 +- sites/sky.co.nz/sky.co.nz.config.js | 4 +- sites/sky.co.nz/sky.co.nz.test.js | 10 +- sites/sky.com/sky.com.channels.xml | 808 ++- sites/sky.com/sky.com.config.js | 2 +- sites/sky.com/sky.com.test.js | 7 +- sites/sky.de/sky.de.channels.xml | 195 +- sites/sky.de/sky.de.config.js | 12 +- sites/sky.de/sky.de.test.js | 9 +- sites/sportsnet.ca/sportsnet.ca.channels.xml | 22 +- sites/sportsnet.ca/sportsnet.ca.test.js | 8 +- .../starhubtvplus.com.channels.xml | 264 +- .../starhubtvplus.com.config.js | 7 +- .../starhubtvplus.com.test.js | 8 +- .../startimestv.com.channels.xml | 684 ++- .../startimestv.com/startimestv.com.config.js | 12 +- sites/startimestv.com/startimestv.com.test.js | 8 +- sites/startv.com/startv.com.channels.xml | 88 +- sites/startv.com/startv.com.config.js | 1 - sites/startv.com/startv.com.test.js | 7 +- .../streamingtvguides.com.channels.xml | 8 +- .../streamingtvguides.com.config.js | 4 +- .../streamingtvguides.com.test.js | 6 +- .../superguidatv.it.channels.xml | 362 +- .../superguidatv.it/superguidatv.it.config.js | 6 +- sites/superguidatv.it/superguidatv.it.test.js | 6 +- .../taiwanplus.com.channels.xml | 9 +- sites/taiwanplus.com/taiwanplus.com.config.js | 109 +- sites/taiwanplus.com/taiwanplus.com.test.js | 43 +- sites/tapdmv.com/tapdmv.com.channels.xml | 64 +- sites/tapdmv.com/tapdmv.com.config.js | 4 +- sites/tapdmv.com/tapdmv.com.test.js | 7 +- .../telecablesat.fr.channels.xml | 566 +- .../telecablesat.fr/telecablesat.fr.config.js | 13 +- sites/telecablesat.fr/telecablesat.fr.test.js | 8 +- sites/telenet.tv/telenet.tv.channels.xml | 226 +- sites/telenet.tv/telenet.tv.test.js | 4 +- sites/teliatv.ee/teliatv.ee.channels.xml | 341 -- sites/teliatv.ee/teliatv.ee.config.js | 4 +- sites/teliatv.ee/teliatv.ee.test.js | 11 +- sites/teliatv.ee/teliatv.ee_en.channels.xml | 96 + sites/teliatv.ee/teliatv.ee_et.channels.xml | 73 + sites/teliatv.ee/teliatv.ee_ru.channels.xml | 86 + sites/telkku.com/telkku.com.channels.xml | 198 +- sites/telkku.com/telkku.com.config.js | 4 +- sites/telkku.com/telkku.com.test.js | 2 +- sites/telkussa.fi/telkussa.fi.channels.xml | 92 +- sites/telkussa.fi/telkussa.fi.config.js | 2 +- sites/telsu.fi/telsu.fi.channels.xml | 56 +- sites/telsu.fi/telsu.fi.config.js | 6 +- sites/telsu.fi/telsu.fi.test.js | 2 +- sites/tivu.tv/tivu.tv.channels.xml | 148 +- sites/tivu.tv/tivu.tv.config.js | 7 +- sites/tivu.tv/tivu.tv.test.js | 7 +- .../toonamiaftermath.com.channels.xml | 8 +- .../toonamiaftermath.com.config.js | 19 +- .../toonamiaftermath.com.test.js | 6 +- .../transvision.co.id.channels.xml | 162 +- .../transvision.co.id.config.js | 12 +- .../transvision.co.id.test.js | 7 +- .../turksatkablo.com.tr.channels.xml | 302 +- .../turksatkablo.com.tr.config.js | 4 +- .../turksatkablo.com.tr.test.js | 7 +- sites/tv.blue.ch/tv.blue.ch.channels.xml | 1626 +++--- sites/tv.blue.ch/tv.blue.ch.config.js | 3 +- sites/tv.blue.ch/tv.blue.ch.test.js | 14 +- sites/tv.cctv.com/tv.cctv.com.channels.xml | 194 +- sites/tv.dir.bg/tv.dir.bg.channels.xml | 206 +- sites/tv.dir.bg/tv.dir.bg.config.js | 4 +- sites/tv.dir.bg/tv.dir.bg.test.js | 14 +- sites/tv.lv/tv.lv.channels.xml | 46 +- sites/tv.mail.ru/tv.mail.ru.channels.xml | 88 +- sites/tv.mail.ru/tv.mail.ru.config.js | 1 + sites/tv.mail.ru/tv.mail.ru.test.js | 16 +- .../tv.movistar.com.pe.channels.xml | 482 +- .../tv.movistar.com.pe.config.js | 4 +- .../tv.movistar.com.pe.test.js | 4 +- sites/tv.nu/tv.nu.channels.xml | 362 +- sites/tv.nu/tv.nu.test.js | 7 +- sites/tv.post.lu/tv.post.lu.channels.xml | 678 ++- sites/tv.post.lu/tv.post.lu.config.js | 2 +- sites/tv.post.lu/tv.post.lu.test.js | 7 +- .../tv.trueid.net/tv.trueid.net.channels.xml | 186 +- sites/tv.trueid.net/tv.trueid.net.test.js | 5 +- .../tv.vera.com.uy.channels.xml | 112 +- sites/tv.vera.com.uy/tv.vera.com.uy.config.js | 2 +- sites/tv.vera.com.uy/tv.vera.com.uy.test.js | 4 +- sites/tv.yandex.ru/tv.yandex.ru.channels.xml | 582 ++- sites/tv.yandex.ru/tv.yandex.ru.config.js | 2 +- sites/tv.yandex.ru/tv.yandex.ru.test.js | 9 +- sites/tv.yettel.hu/tv.yettel.hu.channels.xml | 154 +- sites/tv.yettel.hu/tv.yettel.hu.config.js | 2 +- sites/tv.yettel.hu/tv.yettel.hu.test.js | 4 +- sites/tv24.co.uk/tv24.co.uk.channels.xml | 216 +- sites/tv24.co.uk/tv24.co.uk.config.js | 6 +- sites/tv24.co.uk/tv24.co.uk.test.js | 2 +- sites/tv24.se/tv24.se.channels.xml | 610 ++- sites/tv24.se/tv24.se.config.js | 14 +- sites/tv24.se/tv24.se.test.js | 4 +- .../tv2go.t-2.net/tv2go.t-2.net.channels.xml | 558 +- sites/tv2go.t-2.net/tv2go.t-2.net.test.js | 14 +- sites/tva.tv/tva.tv.channels.xml | 62 +- sites/tva.tv/tva.tv.config.js | 7 +- sites/tva.tv/tva.tv.test.js | 12 +- .../tvarenasport.com.channels.xml | 30 +- .../tvarenasport.com.config.js | 4 +- .../tvarenasport.com/tvarenasport.com.test.js | 9 +- .../tvarenasport.hr.channels.xml | 26 +- .../tvarenasport.hr/tvarenasport.hr.config.js | 7 +- sites/tvarenasport.hr/tvarenasport.hr.test.js | 9 +- .../tvcubana.icrt.cu.channels.xml | 26 +- .../tvcubana.icrt.cu.config.js | 6 +- .../tvcubana.icrt.cu/tvcubana.icrt.cu.test.js | 12 +- sites/tvgids.nl/tvgids.nl.channels.xml | 240 +- sites/tvgids.nl/tvgids.nl.config.js | 2 +- sites/tvgids.nl/tvgids.nl.test.js | 4 +- sites/tvguide.com/tvguide.com.channels.xml | 176 +- sites/tvguide.com/tvguide.com.config.js | 2 +- sites/tvguide.com/tvguide.com.test.js | 2 +- .../tvguide.myjcom.jp.channels.xml | 274 +- .../tvguide.myjcom.jp.config.js | 13 +- .../tvguide.myjcom.jp.test.js | 12 +- sites/tvhebdo.com/tvhebdo.com.channels.xml | 470 +- sites/tvhebdo.com/tvhebdo.com.config.js | 3 +- sites/tvhebdo.com/tvhebdo.com.test.js | 2 +- sites/tvheute.at/tvheute.at.channels.xml | 110 +- sites/tvheute.at/tvheute.at.config.js | 2 +- sites/tvheute.at/tvheute.at.test.js | 4 +- sites/tvim.tv/tvim.tv.channels.xml | 66 +- sites/tvim.tv/tvim.tv.config.js | 4 +- sites/tvim.tv/tvim.tv.test.js | 9 +- sites/tving.com/tving.com.channels.xml | 66 +- sites/tving.com/tving.com.config.js | 8 +- sites/tving.com/tving.com.test.js | 6 +- sites/tvmi.mt/tvmi.mt.channels.xml | 12 +- sites/tvmi.mt/tvmi.mt.config.js | 2 +- sites/tvmi.mt/tvmi.mt.test.js | 4 +- sites/tvmusor.hu/tvmusor.hu.channels.xml | 186 +- sites/tvmusor.hu/tvmusor.hu.config.js | 4 +- sites/tvmusor.hu/tvmusor.hu.test.js | 8 +- .../tvpassport.com.channels.xml | 1832 ++++--- sites/tvpassport.com/tvpassport.com.config.js | 4 +- sites/tvpassport.com/tvpassport.com.test.js | 2 +- .../tvplus.com.tr/tvplus.com.tr.channels.xml | 296 +- sites/tvplus.com.tr/tvplus.com.tr.test.js | 11 +- sites/tvprofil.com/tvprofil.com.channels.xml | 1138 ++-- sites/tvprofil.com/tvprofil.com.config.js | 2 +- sites/tvprofil.com/tvprofil.com.test.js | 4 +- sites/tvtv.us/tvtv.us.channels.xml | 4598 ++++++++--------- sites/tvtv.us/tvtv.us.test.js | 11 +- sites/unifi.com.my/unifi.com.my.channels.xml | 140 +- sites/unifi.com.my/unifi.com.my.config.js | 2 +- sites/unifi.com.my/unifi.com.my.test.js | 4 +- sites/vidio.com/vidio.com.channels.xml | 140 +- sites/vidio.com/vidio.com.config.js | 4 +- sites/vidio.com/vidio.com.test.js | 13 +- .../virginmedia.com.channels.xml | 394 +- .../virginmedia.com/virginmedia.com.config.js | 2 +- sites/virginmedia.com/virginmedia.com.test.js | 21 +- .../virginmediatelevision.ie.channels.xml | 16 +- .../virginmediatelevision.ie.test.js | 9 +- .../visionplus.id/visionplus.id.channels.xml | 264 +- sites/visionplus.id/visionplus.id.config.js | 2 +- sites/visionplus.id/visionplus.id.test.js | 5 +- sites/vivacom.bg/vivacom.bg.channels.xml | 316 +- sites/vivacom.bg/vivacom.bg.config.js | 11 +- sites/vivacom.bg/vivacom.bg.test.js | 10 +- sites/vtm.be/vtm.be.channels.xml | 20 +- sites/vtm.be/vtm.be.config.js | 2 +- sites/vtm.be/vtm.be.test.js | 7 +- .../walesi.com.fj/walesi.com.fj.channels.xml | 22 +- sites/walesi.com.fj/walesi.com.fj.config.js | 5 +- sites/walesi.com.fj/walesi.com.fj.test.js | 13 +- sites/watchyour.tv/watchyour.tv.channels.xml | 84 +- sites/watchyour.tv/watchyour.tv.config.js | 4 +- sites/watchyour.tv/watchyour.tv.test.js | 7 +- sites/wavve.com/wavve.com.channels.xml | 160 +- sites/wavve.com/wavve.com.config.js | 5 +- sites/wavve.com/wavve.com.test.js | 7 +- .../worldfishingnetwork.com.channels.xml | 8 +- .../worldfishingnetwork.com.config.js | 4 +- .../worldfishingnetwork.com.test.js | 10 +- sites/xumo.tv/xumo.tv.channels.xml | 620 ++- sites/xumo.tv/xumo.tv.config.js | 6 +- sites/xumo.tv/xumo.tv.test.js | 4 +- sites/zap.co.ao/zap.co.ao.channels.xml | 232 +- sites/zap.co.ao/zap.co.ao.config.js | 3 +- sites/zap.co.ao/zap.co.ao.test.js | 6 +- sites/ziggogo.tv/ziggogo.tv.channels.xml | 290 +- sites/ziggogo.tv/ziggogo.tv.config.js | 4 +- sites/ziggogo.tv/ziggogo.tv.test.js | 4 +- sites/znbc.co.zm/znbc.co.zm.channels.xml | 14 +- sites/znbc.co.zm/znbc.co.zm.config.js | 2 +- sites/znbc.co.zm/znbc.co.zm.test.js | 13 +- sites/zuragt.mn/zuragt.mn.channels.xml | 78 +- sites/zuragt.mn/zuragt.mn.config.js | 4 +- sites/zuragt.mn/zuragt.mn.test.js | 3 +- 543 files changed, 30781 insertions(+), 31187 deletions(-) delete mode 100644 sites/bein.com/bein.com.channels.xml create mode 100644 sites/bein.com/bein.com_ar.channels.xml create mode 100644 sites/bein.com/bein.com_en.channels.xml delete mode 100644 sites/osn.com/osn.com.channels.xml create mode 100644 sites/osn.com/osn.com_ar.channels.xml create mode 100644 sites/osn.com/osn.com_en.channels.xml delete mode 100644 sites/teliatv.ee/teliatv.ee.channels.xml create mode 100644 sites/teliatv.ee/teliatv.ee_en.channels.xml create mode 100644 sites/teliatv.ee/teliatv.ee_et.channels.xml create mode 100644 sites/teliatv.ee/teliatv.ee_ru.channels.xml diff --git a/sites/9tv.co.il/9tv.co.il.channels.xml b/sites/9tv.co.il/9tv.co.il.channels.xml index 509a2f5e..b1ac4ae5 100644 --- a/sites/9tv.co.il/9tv.co.il.channels.xml +++ b/sites/9tv.co.il/9tv.co.il.channels.xml @@ -1,6 +1,4 @@ - - - 9 канал - - + + 9 канал + diff --git a/sites/9tv.co.il/9tv.co.il.config.js b/sites/9tv.co.il/9tv.co.il.config.js index 418d3c55..fcc1c312 100644 --- a/sites/9tv.co.il/9tv.co.il.config.js +++ b/sites/9tv.co.il/9tv.co.il.config.js @@ -49,7 +49,7 @@ function parseIcon($item) { 'background-image' ) if (!backgroundImage) return null - const [_, relativePath] = backgroundImage.match(/url\((.*)\)/) || [null, null] + const [, relativePath] = backgroundImage.match(/url\((.*)\)/) || [null, null] return relativePath ? `https://www.9tv.co.il${relativePath}` : null } diff --git a/sites/9tv.co.il/9tv.co.il.test.js b/sites/9tv.co.il/9tv.co.il.test.js index 3a2a65bb..fce629ca 100644 --- a/sites/9tv.co.il/9tv.co.il.test.js +++ b/sites/9tv.co.il/9tv.co.il.test.js @@ -1,4 +1,4 @@ -// npx epg-grabber --config=sites/9tv.co.il/9tv.co.il.config.js --channels=sites/9tv.co.il/9tv.co.il.channels.xml --output=guide.xml --days=2 +// npm run grab -- --site=9tv.co.il const { parser, url } = require('./9tv.co.il.config.js') const dayjs = require('dayjs') @@ -20,7 +20,8 @@ it('can generate valid url', () => { }) it('can parse response', () => { - const content = ` 06:30 Слепая Она не очень любит говорить о себе или о том, кто и зачем к ней обращается. Живет уединенно, в глуши. Но тех, кто приходит -принимает. Она видит судьбы. 09:10 Орел и решка. Морской сезон Орел и решка. Морской сезон. Ведущие -Алина Астровская и Коля Серга.` + const content = + ' 06:30 Слепая Она не очень любит говорить о себе или о том, кто и зачем к ней обращается. Живет уединенно, в глуши. Но тех, кто приходит -принимает. Она видит судьбы. 09:10 Орел и решка. Морской сезон Орел и решка. Морской сезон. Ведущие -Алина Астровская и Коля Серга.' const result = parser({ content, date }).map(p => { p.start = p.start.toJSON() p.stop = p.stop.toJSON() @@ -31,7 +32,7 @@ it('can parse response', () => { { start: '2022-03-06T04:30:00.000Z', stop: '2022-03-06T07:10:00.000Z', - title: `Слепая`, + title: 'Слепая', icon: 'https://www.9tv.co.il/download/pictures/img_id=8484.jpg', description: 'Она не очень любит говорить о себе или о том, кто и зачем к ней обращается. Живет уединенно, в глуши. Но тех, кто приходит -принимает. Она видит судьбы.' @@ -40,7 +41,7 @@ it('can parse response', () => { start: '2022-03-06T07:10:00.000Z', stop: '2022-03-06T08:10:00.000Z', icon: 'https://www.9tv.co.il/download/pictures/img_id=23694.jpg', - title: `Орел и решка. Морской сезон`, + title: 'Орел и решка. Морской сезон', description: 'Орел и решка. Морской сезон. Ведущие -Алина Астровская и Коля Серга.' } ]) @@ -50,7 +51,7 @@ it('can handle empty guide', () => { const result = parser({ date, channel, - content: `` + content: '' }) expect(result).toMatchObject([]) }) diff --git a/sites/abc.net.au/abc.net.au.channels.xml b/sites/abc.net.au/abc.net.au.channels.xml index ab4dfc52..11b270df 100644 --- a/sites/abc.net.au/abc.net.au.channels.xml +++ b/sites/abc.net.au/abc.net.au.channels.xml @@ -1,37 +1,35 @@ - - - 10 Bold - 10 Peach - 10 Shake - 7flix - 7mate - 7two - 9 Gem - 9 Go! - 9 Life - 9 Rush - ABC Kids - ABC ME - ABC News - ABC TV - ABC TV Plus - Channel 10 - Channel 7 - Channel 9 - NITV - Racing.com - SBS One - SBS Food - SBS Viceland - SBS World Movies - SBS World Watch - Spree TV - TSVN - - - - - - - + + + + + + + 10 Bold + 10 Peach + 10 Shake + 7flix + 7mate + 7two + 9 Gem + 9 Go! + 9 Life + 9 Rush + ABC Kids + ABC ME + ABC News + ABC TV + ABC TV Plus + Channel 10 + Channel 7 + Channel 9 + NITV + Racing.com + SBS One + SBS Food + SBS Viceland + SBS World Movies + SBS World Watch + Spree TV + TSVN + diff --git a/sites/abc.net.au/abc.net.au.test.js b/sites/abc.net.au/abc.net.au.test.js index 44434f0d..29e720c8 100644 --- a/sites/abc.net.au/abc.net.au.test.js +++ b/sites/abc.net.au/abc.net.au.test.js @@ -1,4 +1,4 @@ -// npx epg-grabber --config=sites/abc.net.au/abc.net.au.config.js --channels=sites/abc.net.au/abc.net.au.channels.xml --output=guide.xml --days=2 +// npm run grab -- --site=abc.net.au const { parser, url } = require('./abc.net.au.config.js') const dayjs = require('dayjs') @@ -15,7 +15,8 @@ it('can generate valid url', () => { }) it('can parse response', () => { - const content = `{"date":"2022-12-22","region":"Sydney","schedule":[{"channel":"ABC1","listing":[{"consumer_advice":"Adult Themes, Drug Use, Violence","rating":"M","show_id":912747,"repeat":true,"description":"When tragedy strikes close to home, it puts head teacher Noah Taylor on a collision course with the criminals responsible. Can the Lyell team help him stop the cycle of violence?","title":"Silent Witness","crid":"ZW2178A004S00","start_time":"2022-12-22T00:46:00","series-crid":"ZW2178A","live":false,"captioning":true,"show_type":"Episode","series_num":22,"episode_title":"Lift Up Your Hearts (part Two)","length":58,"onair_title":"Silent Witness","end_time":"2022-12-22T01:44:00","genres":["Entertainment"],"image_file":"ZW2178A004S00_460.jpg","prog_slug":"silent-witness","episode_num":4}]}]}` + const content = + '{"date":"2022-12-22","region":"Sydney","schedule":[{"channel":"ABC1","listing":[{"consumer_advice":"Adult Themes, Drug Use, Violence","rating":"M","show_id":912747,"repeat":true,"description":"When tragedy strikes close to home, it puts head teacher Noah Taylor on a collision course with the criminals responsible. Can the Lyell team help him stop the cycle of violence?","title":"Silent Witness","crid":"ZW2178A004S00","start_time":"2022-12-22T00:46:00","series-crid":"ZW2178A","live":false,"captioning":true,"show_type":"Episode","series_num":22,"episode_title":"Lift Up Your Hearts (part Two)","length":58,"onair_title":"Silent Witness","end_time":"2022-12-22T01:44:00","genres":["Entertainment"],"image_file":"ZW2178A004S00_460.jpg","prog_slug":"silent-witness","episode_num":4}]}]}' const result = parser({ content, channel }).map(p => { p.start = p.start.toJSON() @@ -27,7 +28,8 @@ it('can parse response', () => { { title: 'Silent Witness', sub_title: 'Lift Up Your Hearts (part Two)', - description: `When tragedy strikes close to home, it puts head teacher Noah Taylor on a collision course with the criminals responsible. Can the Lyell team help him stop the cycle of violence?`, + description: + 'When tragedy strikes close to home, it puts head teacher Noah Taylor on a collision course with the criminals responsible. Can the Lyell team help him stop the cycle of violence?', category: ['Entertainment'], rating: { system: 'ACB', @@ -45,7 +47,8 @@ it('can parse response', () => { it('can handle empty guide', () => { const result = parser( { - content: `NoSuchKeyThe specified key does not exist.processed/Sydney_2023-01-17.json6MRHX5TJ12X39B3Y59rH6XRMrmkFywg8Kv58iqpI6O1fuOCuEbKa1HRRYa4buByXMBTvAhz8zuAK7X5D+ZN9ZuWxyGs=` + content: + 'NoSuchKeyThe specified key does not exist.processed/Sydney_2023-01-17.json6MRHX5TJ12X39B3Y59rH6XRMrmkFywg8Kv58iqpI6O1fuOCuEbKa1HRRYa4buByXMBTvAhz8zuAK7X5D+ZN9ZuWxyGs=' }, channel ) diff --git a/sites/allente.se/allente.se.config.js b/sites/allente.se/allente.se.config.js index f2373b0f..f941be0b 100644 --- a/sites/allente.se/allente.se.config.js +++ b/sites/allente.se/allente.se.config.js @@ -47,7 +47,7 @@ module.exports = { } function parseItems(content, channel) { - const [_, channelId] = channel.site_id.split('#') + const [, channelId] = channel.site_id.split('#') const data = JSON.parse(content) if (!data || !Array.isArray(data.channels)) return [] const channelData = data.channels.find(i => i.id === channelId) diff --git a/sites/allente.se/allente.se.test.js b/sites/allente.se/allente.se.test.js index 6d6eab1c..6492b5e7 100644 --- a/sites/allente.se/allente.se.test.js +++ b/sites/allente.se/allente.se.test.js @@ -1,8 +1,8 @@ -// node ./scripts/channels.js --config=./sites/allente.se/allente.se.config.js --output=./sites/allente.se/allente.se_se.channels.xml --set=country:se --set=lang:sv -// node ./scripts/channels.js --config=./sites/allente.se/allente.se.config.js --output=./sites/allente.se/allente.se_fi.channels.xml --set=country:fi --set=lang:fi -// node ./scripts/channels.js --config=./sites/allente.se/allente.se.config.js --output=./sites/allente.se/allente.se_no.channels.xml --set=country:no --set=lang:no -// node ./scripts/channels.js --config=./sites/allente.se/allente.se.config.js --output=./sites/allente.se/allente.se_dk.channels.xml --set=country:dk --set=lang:da -// npx epg-grabber --config=sites/allente.se/allente.se.config.js --channels=sites/allente.se/allente.se_se.channels.xml --output=guide.xml --days=2 +// npm run channels:parse -- --config=./sites/allente.se/allente.se.config.js --output=./sites/allente.se/allente.se_se.channels.xml --set=country:se --set=lang:sv +// npm run channels:parse -- --config=./sites/allente.se/allente.se.config.js --output=./sites/allente.se/allente.se_fi.channels.xml --set=country:fi --set=lang:fi +// npm run channels:parse -- --config=./sites/allente.se/allente.se.config.js --output=./sites/allente.se/allente.se_no.channels.xml --set=country:no --set=lang:no +// npm run channels:parse -- --config=./sites/allente.se/allente.se.config.js --output=./sites/allente.se/allente.se_dk.channels.xml --set=country:dk --set=lang:da +// npm run grab -- --site=allente.se const { parser, url } = require('./allente.se.config.js') const dayjs = require('dayjs') @@ -29,7 +29,8 @@ it('can generate valid url for different country', () => { }) it('can parse response', () => { - const content = `{"channels":[{"id":"0148","icon":"//images.ctfassets.net/989y85n5kcxs/5uT9g9pdQWRZeDPQXVI9g6/9cc44da567f591822ed645c99ecdcb64/SVT_1_black_new__2_.png","name":"SVT1 HD (T)","events":[{"id":"0086202208220710","live":false,"time":"2022-08-22T07:10:00Z","title":"Hemmagympa med Sofia","details":{"title":"Hemmagympa med Sofia","image":"https://viasatps.api.comspace.se/PS/channeldate/image/viasat.ps/21/2022-08-22/se.cs.svt1.event.A_41214031600.jpg?size=2560x1440","description":"Svenskt träningsprogram från 2021. Styrka. Sofia Åhman leder SVT:s hemmagympapass. Denna gång fokuserar vi på styrka.","season":4,"episode":1,"categories":["other"],"duration":"20"}}]}]}` + const content = + '{"channels":[{"id":"0148","icon":"//images.ctfassets.net/989y85n5kcxs/5uT9g9pdQWRZeDPQXVI9g6/9cc44da567f591822ed645c99ecdcb64/SVT_1_black_new__2_.png","name":"SVT1 HD (T)","events":[{"id":"0086202208220710","live":false,"time":"2022-08-22T07:10:00Z","title":"Hemmagympa med Sofia","details":{"title":"Hemmagympa med Sofia","image":"https://viasatps.api.comspace.se/PS/channeldate/image/viasat.ps/21/2022-08-22/se.cs.svt1.event.A_41214031600.jpg?size=2560x1440","description":"Svenskt träningsprogram från 2021. Styrka. Sofia Åhman leder SVT:s hemmagympapass. Denna gång fokuserar vi på styrka.","season":4,"episode":1,"categories":["other"],"duration":"20"}}]}]}' const result = parser({ content, channel }).map(p => { p.start = p.start.toJSON() p.stop = p.stop.toJSON() @@ -40,9 +41,10 @@ it('can parse response', () => { { start: '2022-08-22T07:10:00.000Z', stop: '2022-08-22T07:30:00.000Z', - title: `Hemmagympa med Sofia`, + title: 'Hemmagympa med Sofia', category: ['other'], - description: `Svenskt träningsprogram från 2021. Styrka. Sofia Åhman leder SVT:s hemmagympapass. Denna gång fokuserar vi på styrka.`, + description: + 'Svenskt träningsprogram från 2021. Styrka. Sofia Åhman leder SVT:s hemmagympapass. Denna gång fokuserar vi på styrka.', icon: 'https://viasatps.api.comspace.se/PS/channeldate/image/viasat.ps/21/2022-08-22/se.cs.svt1.event.A_41214031600.jpg?size=2560x1440', season: 4, episode: 1 @@ -54,7 +56,7 @@ it('can handle empty guide', () => { const result = parser({ date, channel, - content: `{"date":"2001-11-17","categories":[],"channels":[]}` + content: '{"date":"2001-11-17","categories":[],"channels":[]}' }) expect(result).toMatchObject([]) }) diff --git a/sites/allente.se/allente.se_dk.channels.xml b/sites/allente.se/allente.se_dk.channels.xml index d0022b5b..91b7aab3 100644 --- a/sites/allente.se/allente.se_dk.channels.xml +++ b/sites/allente.se/allente.se_dk.channels.xml @@ -1,66 +1,64 @@ - - - 6'eren - Boomerang Nordic - Canal 9 - Cartoon Network Nordic - C More First - C More Hits - C More Series - C More Stars - Disney Channel Scandinavia - Disney Junior Scandinavia - DK 4 - DR 1 - DR 2 - DR Ramasjang - E! Europe - EuroNews English - Eurosport 2 Danmark - God TV Scandinavia - Kanal 4 - Kanal 5 - MTV 00s - MTV 80s - MTV Nordic - MTV Hits Europe - National Geographic Danmark - National Geographic Wild Europe - Nickelodeon Danmark - Nick Jr Scandinavia - Nicktoons Scandinavia - NRK1 - Paramount Network Danmark - SF-kanalen - Sky News International - SVT 1 - TV 2 - TV 2 Charlie - TV 2 Fri - TV 2 News - TV 2 Sport - TV 2 Zulu - TV 3 Danmark - TV 3 Max - TV3+ - TV 3 Puls - TV 3 Sport - TV 4 - V Film Action - V Film Family - V Film Hits - V Film Premiere - Viasat Explore - Viasat History HD - Viasat Nature - V Series - V Sport Golf - V Sport Ultra HD - Xee - Aljazeera English - BBC World News Europe - CNBC Europe - CNN International Europe - - + + 6'eren + Boomerang Nordic + Canal 9 + Cartoon Network Nordic + C More First + C More Hits + C More Series + C More Stars + Disney Channel Scandinavia + Disney Junior Scandinavia + DK 4 + DR 1 + DR 2 + DR Ramasjang + E! Europe + EuroNews English + Eurosport 2 Danmark + God TV Scandinavia + Kanal 4 + Kanal 5 + MTV 00s + MTV 80s + MTV Nordic + MTV Hits Europe + National Geographic Danmark + National Geographic Wild Europe + Nickelodeon Danmark + Nick Jr Scandinavia + Nicktoons Scandinavia + NRK1 + Paramount Network Danmark + SF-kanalen + Sky News International + SVT 1 + TV 2 + TV 2 Charlie + TV 2 Fri + TV 2 News + TV 2 Sport + TV 2 Zulu + TV 3 Danmark + TV 3 Max + TV3+ + TV 3 Puls + TV 3 Sport + TV 4 + V Film Action + V Film Family + V Film Hits + V Film Premiere + Viasat Explore + Viasat History HD + Viasat Nature + V Series + V Sport Golf + V Sport Ultra HD + Xee + Aljazeera English + BBC World News Europe + CNBC Europe + CNN International Europe + diff --git a/sites/allente.se/allente.se_fi.channels.xml b/sites/allente.se/allente.se_fi.channels.xml index adbb6657..8320b89f 100644 --- a/sites/allente.se/allente.se_fi.channels.xml +++ b/sites/allente.se/allente.se_fi.channels.xml @@ -1,40 +1,38 @@ - - - Boomerang - Cartoon Network - CNBC - CNN - Disney Channel - Disney Junior - E! - MTV 00s - MTV - National Geographic - National Geographic Wild - Nick Jr - TV 3 Sverige - TV 6 Sverige - V Film Action - V Film Family - V Film Hits - V Film Premiere - Viasat Explore - Viasat History HD - Viasat Nature - V Sport 1 Suomi - V Sport 1 Sverige - V Sport 2 Suomi - V Sport Football - V Sport Golf - V Sport Live 1 - V Sport Live 2 - V Sport Live 3 - V Sport Live 4 - V Sport Live 5 - V Sport + Suomi - V Sport Premium - V Sport Ultra HD - V Sport Vinter - - \ No newline at end of file + + Boomerang + Cartoon Network + CNBC + CNN + Disney Channel + Disney Junior + E! + MTV 00s + MTV + National Geographic + National Geographic Wild + Nick Jr + TV 3 Sverige + TV 6 Sverige + V Film Action + V Film Family + V Film Hits + V Film Premiere + Viasat Explore + Viasat History HD + Viasat Nature + V Sport 1 Suomi + V Sport 1 Sverige + V Sport 2 Suomi + V Sport Football + V Sport Golf + V Sport Live 1 + V Sport Live 2 + V Sport Live 3 + V Sport Live 4 + V Sport Live 5 + V Sport + Suomi + V Sport Premium + V Sport Ultra HD + V Sport Vinter + \ No newline at end of file diff --git a/sites/allente.se/allente.se_no.channels.xml b/sites/allente.se/allente.se_no.channels.xml index 3bfeb483..bc0e0003 100644 --- a/sites/allente.se/allente.se_no.channels.xml +++ b/sites/allente.se/allente.se_no.channels.xml @@ -1,75 +1,73 @@ - - - Aljazeera - BBC World News - Cartoon Network - CNBC - CNN - Discovery Channel - Disney Channel - Disney Junior - DR 2 - E! - EuroNews - Eurosport 1 - Eurosport - FEM - Kunskapskanalen - Matkanalen - Max - MTV 00s - MTV 80s - MTV Hits - MTV Nordic - National Geographic - National Geographic Wild - NFL Network - Nickelodeon - Nick Jr - Nicktoons - NRK1 - NRK2 - NRK3 - Sky News International - SVT 1 - SVT 2 - SVT 24 - SVT Barn - TV 2 - TV 2 - TV 2 Livsstil - TV 2 Nyhetskanalen - TV 2 Sport 1 - TV 2 Sport 2 - TV 2 Sport Premium - TV 2 Zebra - TV 3 Danmark - TV 3 Norge - TV 3 Sverige - TV 6 Norge - TV 6 Sverige - TV Norge - V 4 - V Film Action - V Film Family - V Film Hits - V Film Premiere - Viasat Explore - Viasat History HD - Viasat Nature - Vox - V Series - V Sport 1 - V Sport 2 - V Sport 3 - V Sport Golf - V Sport Live 1 - V Sport Live 2 - V Sport Live 3 - V Sport Live 4 - V Sport Live 5 - V Sport + - V Sport Ultra HD - - \ No newline at end of file + + Aljazeera + BBC World News + Cartoon Network + CNBC + CNN + Discovery Channel + Disney Channel + Disney Junior + DR 2 + E! + EuroNews + Eurosport 1 + Eurosport + FEM + Kunskapskanalen + Matkanalen + Max + MTV 00s + MTV 80s + MTV Hits + MTV Nordic + National Geographic + National Geographic Wild + NFL Network + Nickelodeon + Nick Jr + Nicktoons + NRK1 + NRK2 + NRK3 + Sky News International + SVT 1 + SVT 2 + SVT 24 + SVT Barn + TV 2 + TV 2 + TV 2 Livsstil + TV 2 Nyhetskanalen + TV 2 Sport 1 + TV 2 Sport 2 + TV 2 Sport Premium + TV 2 Zebra + TV 3 Danmark + TV 3 Norge + TV 3 Sverige + TV 6 Norge + TV 6 Sverige + TV Norge + V 4 + V Film Action + V Film Family + V Film Hits + V Film Premiere + Viasat Explore + Viasat History HD + Viasat Nature + Vox + V Series + V Sport 1 + V Sport 2 + V Sport 3 + V Sport Golf + V Sport Live 1 + V Sport Live 2 + V Sport Live 3 + V Sport Live 4 + V Sport Live 5 + V Sport + + V Sport Ultra HD + \ No newline at end of file diff --git a/sites/allente.se/allente.se_se.channels.xml b/sites/allente.se/allente.se_se.channels.xml index cc4d7f66..3461dac9 100644 --- a/sites/allente.se/allente.se_se.channels.xml +++ b/sites/allente.se/allente.se_se.channels.xml @@ -1,114 +1,112 @@ - - - Aljazeera - Animal Planet Sverige - ATG Live - BBC Earth HD - BBC Brit HD - BBC World News - Bloomberg TV - Boomerang - Cartoon Network - C More First - C More Fotboll - C More Hits - C More Hockey - C More Live - C More Live 2 - C More Live 3 - C More Live 4 - C More Live 5 - C More Mix - C More Series - C More Stars - CNBC - CNN - Discovery Channel Sverige - Discovery Science Sverige - Disney Channel - Disney Junior - Discovery+ Extra 1 - Discovery+ Extra 2 - Discovery+ Extra 3 - Discovery+ Extra 4 - Discovery+ Extra 5 - Discovery+ Extra 6 - Discovery+ Extra 7 - Discovery+ Extra 8 - DR 1 - DR 2 - DR Ramasjang - E! - EuroNews - Eurosport 1 - Eurosport 2 - Godare - God TV - History - H2 - Horse & Country TV - Investigation Discovery Sverige - Kanal 5 - Kanal 9 - Kanal 11 - Kunskapskanalen - MTV 00s - MTV 80s - MTV Hits - MTV Nordic - Motorvision - National Geographic - National Geographic Wild - NFL Network - Nickelodeon - Nick Jr - Nicktoons - NRK1 - NRK2 - NRK3 - Paramount Network - Paramount+ Movies - Paramount+ Series - SF-kanalen - Sjuan - Sky News International - Sportkanalen - SVT 1 - SVT 2 - SVT 24 - SVT Barn - TLC Sverige - TV 2 - TV 3 - TV 4 - TV 4 Fakta - TV 4 Film - TV 4 Guld - TV 6 - TV 8 - TV 10 - TV 12 - V Film Action - V Film Family - V Film Hits - V Film Premiere - Viasat Explore - Viasat History HD - Viasat Nature - V Series - V Sport 1 - V Sport Extra - V Sport Football - V Sport Golf - V Sport Live 1 - V Sport Live 2 - V Sport Live 3 - V Sport Live 4 - V Sport Live 5 - V Sport Motor - V Sport Premium - V Sport Ultra HD - V Sport Vinter - - + + Aljazeera + Animal Planet Sverige + ATG Live + BBC Earth HD + BBC Brit HD + BBC World News + Bloomberg TV + Boomerang + Cartoon Network + C More First + C More Fotboll + C More Hits + C More Hockey + C More Live + C More Live 2 + C More Live 3 + C More Live 4 + C More Live 5 + C More Mix + C More Series + C More Stars + CNBC + CNN + Discovery Channel Sverige + Discovery Science Sverige + Disney Channel + Disney Junior + Discovery+ Extra 1 + Discovery+ Extra 2 + Discovery+ Extra 3 + Discovery+ Extra 4 + Discovery+ Extra 5 + Discovery+ Extra 6 + Discovery+ Extra 7 + Discovery+ Extra 8 + DR 1 + DR 2 + DR Ramasjang + E! + EuroNews + Eurosport 1 + Eurosport 2 + Godare + God TV + History + H2 + Horse & Country TV + Investigation Discovery Sverige + Kanal 5 + Kanal 9 + Kanal 11 + Kunskapskanalen + MTV 00s + MTV 80s + MTV Hits + MTV Nordic + Motorvision + National Geographic + National Geographic Wild + NFL Network + Nickelodeon + Nick Jr + Nicktoons + NRK1 + NRK2 + NRK3 + Paramount Network + Paramount+ Movies + Paramount+ Series + SF-kanalen + Sjuan + Sky News International + Sportkanalen + SVT 1 + SVT 2 + SVT 24 + SVT Barn + TLC Sverige + TV 2 + TV 3 + TV 4 + TV 4 Fakta + TV 4 Film + TV 4 Guld + TV 6 + TV 8 + TV 10 + TV 12 + V Film Action + V Film Family + V Film Hits + V Film Premiere + Viasat Explore + Viasat History HD + Viasat Nature + V Series + V Sport 1 + V Sport Extra + V Sport Football + V Sport Golf + V Sport Live 1 + V Sport Live 2 + V Sport Live 3 + V Sport Live 4 + V Sport Live 5 + V Sport Motor + V Sport Premium + V Sport Ultra HD + V Sport Vinter + diff --git a/sites/andorradifusio.ad/andorradifusio.ad.channels.xml b/sites/andorradifusio.ad/andorradifusio.ad.channels.xml index 63556d68..5b24834c 100644 --- a/sites/andorradifusio.ad/andorradifusio.ad.channels.xml +++ b/sites/andorradifusio.ad/andorradifusio.ad.channels.xml @@ -1,6 +1,4 @@ - - - Andorra TV - - \ No newline at end of file + + Andorra TV + \ No newline at end of file diff --git a/sites/andorradifusio.ad/andorradifusio.ad.config.js b/sites/andorradifusio.ad/andorradifusio.ad.config.js index b0f7a33d..c20b2900 100644 --- a/sites/andorradifusio.ad/andorradifusio.ad.config.js +++ b/sites/andorradifusio.ad/andorradifusio.ad.config.js @@ -47,8 +47,8 @@ function parseItems(content, date) { .parent() .parent() const items = [] - const titles = column.find(`p`).toArray() - column.find(`h4`).each((i, time) => { + const titles = column.find('p').toArray() + column.find('h4').each((i, time) => { items.push({ time: $(time).text(), title: $(titles[i]).text() diff --git a/sites/andorradifusio.ad/andorradifusio.ad.test.js b/sites/andorradifusio.ad/andorradifusio.ad.test.js index 4abbf7a7..1e54024b 100644 --- a/sites/andorradifusio.ad/andorradifusio.ad.test.js +++ b/sites/andorradifusio.ad/andorradifusio.ad.test.js @@ -1,4 +1,4 @@ -// npx epg-grabber --config=sites/andorradifusio.ad/andorradifusio.ad.config.js --channels=sites/andorradifusio.ad/andorradifusio.ad.channels.xml --output=guide.xml +// npm run grab -- --site=andorradifusio.ad const { parser, url } = require('./andorradifusio.ad.config.js') const fs = require('fs') @@ -30,20 +30,20 @@ it('can parse response', () => { expect(results[0]).toMatchObject({ start: '2023-06-07T05:00:00.000Z', stop: '2023-06-07T06:00:00.000Z', - title: `Club Piolet` + title: 'Club Piolet' }) expect(results[20]).toMatchObject({ start: '2023-06-07T23:00:00.000Z', stop: '2023-06-08T00:00:00.000Z', - title: `Àrea Andorra Difusió` + title: 'Àrea Andorra Difusió' }) }) it('can handle empty guide', () => { const result = parser({ date, - content: `` + content: '' }) expect(result).toMatchObject([]) }) diff --git a/sites/arianaafgtv.com/arianaafgtv.com.channels.xml b/sites/arianaafgtv.com/arianaafgtv.com.channels.xml index 61f57c4d..41ee1df1 100644 --- a/sites/arianaafgtv.com/arianaafgtv.com.channels.xml +++ b/sites/arianaafgtv.com/arianaafgtv.com.channels.xml @@ -1,6 +1,4 @@ - - - Ariana Afghanistan International TV - - \ No newline at end of file + + Ariana Afghanistan International TV + \ No newline at end of file diff --git a/sites/arianaafgtv.com/arianaafgtv.com.config.js b/sites/arianaafgtv.com/arianaafgtv.com.config.js index 67e00e73..69a20807 100644 --- a/sites/arianaafgtv.com/arianaafgtv.com.config.js +++ b/sites/arianaafgtv.com/arianaafgtv.com.config.js @@ -11,9 +11,7 @@ dayjs.extend(customParseFormat) module.exports = { site: 'arianaafgtv.com', days: 2, - url() { - return `https://www.arianaafgtv.com/index.html` - }, + url: 'https://www.arianaafgtv.com/index.html', parser({ content, date }) { const programs = [] const items = parseItems(content, date) diff --git a/sites/arianatelevision.com/arianatelevision.com.channels.xml b/sites/arianatelevision.com/arianatelevision.com.channels.xml index 0caeebd5..99d2ffee 100644 --- a/sites/arianatelevision.com/arianatelevision.com.channels.xml +++ b/sites/arianatelevision.com/arianatelevision.com.channels.xml @@ -1,6 +1,4 @@ - - - Ariana TV National - - \ No newline at end of file + + Ariana TV National + \ No newline at end of file diff --git a/sites/arianatelevision.com/arianatelevision.com.config.js b/sites/arianatelevision.com/arianatelevision.com.config.js index 63091dc9..40bc9b79 100644 --- a/sites/arianatelevision.com/arianatelevision.com.config.js +++ b/sites/arianatelevision.com/arianatelevision.com.config.js @@ -4,7 +4,7 @@ const { DateTime } = require('luxon') module.exports = { site: 'arianatelevision.com', days: 2, - url: `https://www.arianatelevision.com/program-schedule/`, + url: 'https://www.arianatelevision.com/program-schedule/', parser({ content, date }) { const programs = [] const items = parseItems(content, date) @@ -37,8 +37,6 @@ function parseStart(item, date) { } function parseItems(content, date) { - const items = [] - const col = date.day() const $ = cheerio.load(content) const settings = $('#jtrt_table_settings_508').text() if (!settings) return [] diff --git a/sites/arianatelevision.com/arianatelevision.com.test.js b/sites/arianatelevision.com/arianatelevision.com.test.js index 829f0632..d6ff3722 100644 --- a/sites/arianatelevision.com/arianatelevision.com.test.js +++ b/sites/arianatelevision.com/arianatelevision.com.test.js @@ -1,4 +1,4 @@ -// npx epg-grabber --config=sites/arianatelevision.com/arianatelevision.com.config.js --channels=sites/arianatelevision.com/arianatelevision.com.channels.xml --output=guide.xml +// npm run grab -- --site=arianatelevision.com const { parser, url } = require('./arianatelevision.com.config.js') const dayjs = require('dayjs') @@ -18,7 +18,8 @@ it('can generate valid url', () => { }) it('can parse response', () => { - const content = `[[["Start","Saturday","Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","",""],["7:00","City Report","ICC T20 Highlights","ICC T20 Highlights","ICC T20 Highlights","ICC T20 Highlights","ICC T20 Highlights","ICC T20 Highlights","",""],["7:30","ICC T20 Highlights","Sport ","Sport ","Sport ","Sport ","Sport ","Sport ","",""],["15:00","ICC T20 World Cup","ICC T20 World Cup","ICC T20 World Cup","ICC T20 World Cup","ICC T20 World Cup","ICC T20 World Cup","ICC T20 World Cup","",""],["6:30","Quran and Hadis ","Falah","Falah","Falah","Falah","Falah","Falah","",""],["","\\n","","","","","","","",""]]]` + const content = + '[[["Start","Saturday","Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","",""],["7:00","City Report","ICC T20 Highlights","ICC T20 Highlights","ICC T20 Highlights","ICC T20 Highlights","ICC T20 Highlights","ICC T20 Highlights","",""],["7:30","ICC T20 Highlights","Sport ","Sport ","Sport ","Sport ","Sport ","Sport ","",""],["15:00","ICC T20 World Cup","ICC T20 World Cup","ICC T20 World Cup","ICC T20 World Cup","ICC T20 World Cup","ICC T20 World Cup","ICC T20 World Cup","",""],["6:30","Quran and Hadis ","Falah","Falah","Falah","Falah","Falah","Falah","",""],["","\\n","","","","","","","",""]]]' const result = parser({ content, date }).map(p => { p.start = p.start.toJSON() p.stop = p.stop.toJSON() @@ -29,22 +30,22 @@ it('can parse response', () => { { start: '2021-11-27T02:30:00.000Z', stop: '2021-11-27T03:00:00.000Z', - title: `City Report` + title: 'City Report' }, { start: '2021-11-27T03:00:00.000Z', stop: '2021-11-27T10:30:00.000Z', - title: `ICC T20 Highlights` + title: 'ICC T20 Highlights' }, { start: '2021-11-27T10:30:00.000Z', stop: '2021-11-28T02:00:00.000Z', - title: `ICC T20 World Cup` + title: 'ICC T20 World Cup' }, { start: '2021-11-28T02:00:00.000Z', stop: '2021-11-28T02:30:00.000Z', - title: `Quran and Hadis` + title: 'Quran and Hadis' } ]) }) @@ -53,7 +54,8 @@ it('can handle empty guide', () => { const result = parser({ date, channel, - content: `` + content: + '' }) expect(result).toMatchObject([]) }) diff --git a/sites/arirang.com/arirang.com.channels.xml b/sites/arirang.com/arirang.com.channels.xml index 140ab525..6d60a18b 100644 --- a/sites/arirang.com/arirang.com.channels.xml +++ b/sites/arirang.com/arirang.com.channels.xml @@ -1,8 +1,6 @@ - - - Arirang TV - Arirang UN - Arirang World - - \ No newline at end of file + + Arirang TV + Arirang UN + Arirang World + \ No newline at end of file diff --git a/sites/arirang.com/arirang.com.config.js b/sites/arirang.com/arirang.com.config.js index d0c133d5..2ee402c7 100644 --- a/sites/arirang.com/arirang.com.config.js +++ b/sites/arirang.com/arirang.com.config.js @@ -8,132 +8,146 @@ dayjs.extend(timezone) dayjs.extend(customParseFormat) module.exports = { - site: 'arirang.com', - output: 'arirang.com.guide.xml', - channels: 'arirang.com.channels.xml', - lang: 'en', - days: 7, - delay: 5000, - url: 'https://www.arirang.com/v1.0/open/external/proxy', + site: 'arirang.com', + output: 'arirang.com.guide.xml', + channels: 'arirang.com.channels.xml', + lang: 'en', + days: 7, + delay: 5000, + url: 'https://www.arirang.com/v1.0/open/external/proxy', - request: { + request: { + method: 'POST', + timeout: 5000, + cache: { ttl: 60 * 60 * 1000 }, + headers: { + Accept: 'application/json, text/plain, */*', + 'Content-Type': 'application/json', + Origin: 'https://www.arirang.com', + Referer: 'https://www.arirang.com/schedule', + 'User-Agent': + 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36' + }, + data: function (context) { + const { channel, date } = context + return { + address: 'https://script.arirang.com/api/v1/bis/listScheduleV3.do', method: 'POST', - timeout: 5000, - cache: { ttl: 60 * 60 * 1000 }, - headers: { - 'Accept': 'application/json, text/plain, */*', - 'Content-Type': 'application/json', - 'Origin': 'https://www.arirang.com', - 'Referer': 'https://www.arirang.com/schedule', - 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36' - }, - data: function (context) { - const { channel, date } = context - return { - 'address': 'https://script.arirang.com/api/v1/bis/listScheduleV3.do', - 'method': 'POST', - 'headers': {}, - 'body': { - 'data': { - 'dmParam': { - 'chanId': channel.site_id, - 'broadYmd': dayjs.tz(date, 'Asia/Seoul').format('YYYYMMDD'), - 'planNo': '1' - } - } - } + headers: {}, + body: { + data: { + dmParam: { + chanId: channel.site_id, + broadYmd: dayjs.tz(date, 'Asia/Seoul').format('YYYYMMDD'), + planNo: '1' } + } } - }, - - logo: function (context) { - return context.channel.logo - }, - - async parser(context) { - const programs = [] - const items = parseItems(context.content) - - for (let item of items) { - const programDetail = await parseProgramDetail(item) - - programs.push({ - title: item.displayNm, - start: parseStart(item), - stop: parseStop(item), - icon: parseIcon(programDetail), - category: parseCategory(programDetail), - description: parseDescription(programDetail) - }) - } - - return programs + } } + }, + + logo: function (context) { + return context.channel.logo + }, + + async parser(context) { + const programs = [] + const items = parseItems(context.content) + + for (let item of items) { + const programDetail = await parseProgramDetail(item) + + programs.push({ + title: item.displayNm, + start: parseStart(item), + stop: parseStop(item), + icon: parseIcon(programDetail), + category: parseCategory(programDetail), + description: parseDescription(programDetail) + }) + } + + return programs + } } function parseItems(content) { - if (content != '') { - const data = JSON.parse(content) - return (!data || !data.responseBody || !Array.isArray(data.responseBody.dsSchWeek)) ? [] : data.responseBody.dsSchWeek - } else { - return [] - } + if (content != '') { + const data = JSON.parse(content) + return !data || !data.responseBody || !Array.isArray(data.responseBody.dsSchWeek) + ? [] + : data.responseBody.dsSchWeek + } else { + return [] + } } function parseStart(item) { - return dayjs.tz(item.broadYmd + ' ' + item.broadHm, 'YYYYMMDD HHmm', 'Asia/Seoul') + return dayjs.tz(item.broadYmd + ' ' + item.broadHm, 'YYYYMMDD HHmm', 'Asia/Seoul') } function parseStop(item) { - return dayjs.tz(item.broadYmd + ' ' + item.broadHm, 'YYYYMMDD HHmm', 'Asia/Seoul').add(item.broadRun, 'minute') + return dayjs + .tz(item.broadYmd + ' ' + item.broadHm, 'YYYYMMDD HHmm', 'Asia/Seoul') + .add(item.broadRun, 'minute') } async function parseProgramDetail(item) { - return axios.post( - 'https://www.arirang.com/v1.0/open/program/detail', - { - 'bis_program_code': item.pgmCd + return axios + .post( + 'https://www.arirang.com/v1.0/open/program/detail', + { + bis_program_code: item.pgmCd + }, + { + headers: { + Accept: 'application/json, text/plain, */*', + 'Content-Type': 'application/json', + Origin: 'https://www.arirang.com', + Referer: 'https://www.arirang.com/schedule', + 'User-Agent': + 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36' }, - { - headers: { - 'Accept': 'application/json, text/plain, */*', - 'Content-Type': 'application/json', - 'Origin': 'https://www.arirang.com', - 'Referer': 'https://www.arirang.com/schedule', - 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36' - }, - timeout: 5000, - cache: { ttl: 60 * 1000 }, - } - ).then(function (response) { - return response.data - }).catch(function (error) { - // console.log(error) + timeout: 5000, + cache: { ttl: 60 * 1000 } + } + ) + .then(response => { + return response.data + }) + .catch(error => { + console.log(error) }) } function parseIcon(programDetail) { - if (programDetail && programDetail.image && programDetail.image[0].url) { - return programDetail.image[0].url - } else { - return '' - } + if (programDetail && programDetail.image && programDetail.image[0].url) { + return programDetail.image[0].url + } else { + return '' + } } function parseCategory(programDetail) { - if (programDetail && programDetail.category_Info && programDetail.category_Info[0].title) { - return programDetail.category_Info[0].title - } else { - return '' - } + if (programDetail && programDetail.category_Info && programDetail.category_Info[0].title) { + return programDetail.category_Info[0].title + } else { + return '' + } } function parseDescription(programDetail) { - if (programDetail && programDetail.content && programDetail.content[0] && programDetail.content[0].text) { - let description = programDetail.content[0].text - let regex = /(<([^>]+)>)/ig - return description.replace(regex, '') - } else { - return '' - } + if ( + programDetail && + programDetail.content && + programDetail.content[0] && + programDetail.content[0].text + ) { + let description = programDetail.content[0].text + let regex = /(<([^>]+)>)/gi + return description.replace(regex, '') + } else { + return '' + } } diff --git a/sites/arirang.com/arirang.com.test.js b/sites/arirang.com/arirang.com.test.js index f0d4d165..31d1b61b 100644 --- a/sites/arirang.com/arirang.com.test.js +++ b/sites/arirang.com/arirang.com.test.js @@ -1,4 +1,4 @@ -// npx epg-grabber --config=sites/arirang.com/arirang.com.config.js --channels=sites/arirang.com/arirang.com.channels.xml --output=guide.xml --days=2 +// npm run grab -- --site=arirang.com // npx jest arirang.com.test.js const { url, parser } = require('./arirang.com.config.js') @@ -7,53 +7,68 @@ const path = require('path') const axios = require('axios') const dayjs = require('dayjs') const utc = require('dayjs/plugin/utc') -const { program } = require('commander') dayjs.extend(utc) jest.mock('axios') const date = dayjs.tz('2023-08-25', 'Asia/Seoul').startOf('d') -const channel = { xmltv_id: 'ArirangWorld.kr', site_id: 'CH_W', name: 'Arirang World', lang: 'en', logo: 'https://i.imgur.com/5Aoithj.png' } +const channel = { + xmltv_id: 'ArirangWorld.kr', + site_id: 'CH_W', + name: 'Arirang World', + lang: 'en', + logo: 'https://i.imgur.com/5Aoithj.png' +} const content = fs.readFileSync(path.resolve(__dirname, '__data__/schedule.json'), 'utf8') const programDetail = fs.readFileSync(path.resolve(__dirname, '__data__/detail.json'), 'utf8') -const context = { 'channel': channel, 'content': content, 'date': date } +const context = { channel: channel, content: content, date: date } it('can generate valid url', () => { - expect(url).toBe('https://www.arirang.com/v1.0/open/external/proxy') + expect(url).toBe('https://www.arirang.com/v1.0/open/external/proxy') }) it('can handle empty guide', async () => { - const results = await parser({ 'channel': channel, 'content': '', 'date': date }) - expect(results).toMatchObject([]) + const results = await parser({ channel: channel, content: '', date: date }) + expect(results).toMatchObject([]) }) it('can parse response', async () => { - axios.post.mockImplementation((url, data) => { - if (url === 'https://www.arirang.com/v1.0/open/external/proxy' && JSON.stringify(data) === JSON.stringify({ "address": "https://script.arirang.com/api/v1/bis/listScheduleV3.do", "method": "POST", "headers": {}, "body": { "data": { "dmParam": { "chanId": "CH_W", "broadYmd": "20230825", "planNo": "1" } } } })) { - return Promise.resolve({ - data: JSON.parse(content) - }) - } else if (url === 'https://www.arirang.com/v1.0/open/program/detail' && JSON.stringify(data) === JSON.stringify({ "bis_program_code": "2023004T" })) { - return Promise.resolve({ - data: JSON.parse(programDetail) - }) - } else { - return Promise.resolve({ - data: '' - }) - } - }) + axios.post.mockImplementation((url, data) => { + if ( + url === 'https://www.arirang.com/v1.0/open/external/proxy' && + JSON.stringify(data) === + JSON.stringify({ + address: 'https://script.arirang.com/api/v1/bis/listScheduleV3.do', + method: 'POST', + headers: {}, + body: { data: { dmParam: { chanId: 'CH_W', broadYmd: '20230825', planNo: '1' } } } + }) + ) { + return Promise.resolve({ + data: JSON.parse(content) + }) + } else if ( + url === 'https://www.arirang.com/v1.0/open/program/detail' && + JSON.stringify(data) === JSON.stringify({ bis_program_code: '2023004T' }) + ) { + return Promise.resolve({ + data: JSON.parse(programDetail) + }) + } else { + return Promise.resolve({ + data: '' + }) + } + }) - const results = await parser(context) + const results = await parser(context) - expect(results[0]).toMatchObject( - { - title: "WITHIN THE FRAME [R]", - start: dayjs.tz(date, 'Asia/Seoul'), - stop: dayjs.tz(date, 'Asia/Seoul').add(30, 'minute'), - icon: "https://img.arirang.com/v1/AUTH_d52449c16d3b4bbca17d4fffd9fc44af/public/images/202308/2080840096998752900.png", - description: "NEWS", - category: "Current Affairs" - } - ) -}) \ No newline at end of file + expect(results[0]).toMatchObject({ + title: 'WITHIN THE FRAME [R]', + start: dayjs.tz(date, 'Asia/Seoul'), + stop: dayjs.tz(date, 'Asia/Seoul').add(30, 'minute'), + icon: 'https://img.arirang.com/v1/AUTH_d52449c16d3b4bbca17d4fffd9fc44af/public/images/202308/2080840096998752900.png', + description: 'NEWS', + category: 'Current Affairs' + }) +}) diff --git a/sites/artonline.tv/artonline.tv.channels.xml b/sites/artonline.tv/artonline.tv.channels.xml index abd0989f..ea81dc68 100644 --- a/sites/artonline.tv/artonline.tv.channels.xml +++ b/sites/artonline.tv/artonline.tv.channels.xml @@ -1,10 +1,8 @@ - - - ART Aflam 1 - ART Aflam 2 - ART Cinema - ART Hekayat - ART Hekayat 2 - - \ No newline at end of file + + ART Aflam 1 + ART Aflam 2 + ART Cinema + ART Hekayat + ART Hekayat 2 + \ No newline at end of file diff --git a/sites/artonline.tv/artonline.tv.config.js b/sites/artonline.tv/artonline.tv.config.js index 4edfdabc..54d5652a 100644 --- a/sites/artonline.tv/artonline.tv.config.js +++ b/sites/artonline.tv/artonline.tv.config.js @@ -51,14 +51,14 @@ module.exports = { } function parseStart(item) { - const [_, M, D, YYYY] = item.adddate.match(/(\d+)\/(\d+)\/(\d+) /) + const [, M, D, YYYY] = item.adddate.match(/(\d+)\/(\d+)\/(\d+) /) const [HH, mm] = item.start_Time.split(':') return dayjs.tz(`${YYYY}-${M}-${D}T${HH}:${mm}:00`, 'YYYY-M-DTHH:mm:ss', 'Asia/Riyadh') } function parseDuration(item) { - const [__, HH, mm, ss] = item.duration.match(/(\d+):(\d+):(\d+)/) + const [, HH, mm, ss] = item.duration.match(/(\d+):(\d+):(\d+)/) return parseInt(HH) * 3600 + parseInt(mm) * 60 + parseInt(ss) } diff --git a/sites/artonline.tv/artonline.tv.test.js b/sites/artonline.tv/artonline.tv.test.js index 60065a0b..17ab430c 100644 --- a/sites/artonline.tv/artonline.tv.test.js +++ b/sites/artonline.tv/artonline.tv.test.js @@ -1,4 +1,4 @@ -// npx epg-grabber --config=sites/artonline.tv/artonline.tv.config.js --channels=sites/artonline.tv/artonline.tv.channels.xml --output=guide.xml --days=2 +// npm run grab -- --site=artonline.tv const { parser, url, request } = require('./artonline.tv.config.js') const dayjs = require('dayjs') @@ -39,7 +39,8 @@ it('can generate valid request data for tomorrow', () => { }) it('can parse response', () => { - const content = `[{"id":158963,"eventid":null,"duration":"01:34:00","lang":"Arabic","title":"الراقصه و السياسي","description":"تقرر الراقصه سونيا انشاء دار حضانه للأطفال اليتامى و عندما تتقدم بمشورعها للمسئول يرفض فتتحداه ، تلجأ للوزير عبد الحميد رأفت تربطه بها علاقة قديمة ، يخشى على مركزه و يرفض مساعدتها فتقرر كتابة مذكراتها بمساعدة أحد الصحفيين ، يتخوف عبد الحميد و المسئولين ثم يفاجأ عبد الحميد بحصول سونيا على الموافقه للمشورع و البدء في تنفيذه و ذلك لعلاقتها بأحد كبار المسئولين .","thumbnail":"/UploadImages/Channel/ARTAFLAM1/03/AlRaqesaWaAlSeyasi.jpg","image":"0","start_Time":"00:30","adddate":"3/4/2022 12:00:00 AM","repeat1":null,"iD_genre":0,"iD_Show_Type":0,"iD_Channel":77,"iD_country":0,"iD_rating":0,"end_time":"02:04","season_Number":0,"epoisode_Number":0,"hasCatchup":0,"cmsid":0,"containerID":0,"imagePath":"../../UploadImages/Channel/ARTAFLAM1/3/","youtube":"0","published_at":"0","directed_by":"0","composition":"0","cast":"0","timeShow":null,"short_description":"تقرر الراقصه سونيا انشاء دار حضانه للأطفال اليتامى و عندما تتقدم بمشورعها للمسئول يرفض فتتحداه ، تلجأ للوزير عبد الحميد رأفت تربطه بها علاقة قديمة ، يخشى على مركزه و يرفض مساعدتها فتقرر كتابة مذكراتها بمساعدة أحد الصحفيين ، يتخوف عبد الحميد و المسئولين ثم يفاجأ عبد الحميد بحصول سونيا على الموافقه للمشورع و البدء في تنفيذه و ذلك لعلاقتها بأحد كبار المسئولين .","seOdescription":null,"tagseo":null,"channel_name":null,"pathimage":null,"pathThumbnail":null}]` + const content = + '[{"id":158963,"eventid":null,"duration":"01:34:00","lang":"Arabic","title":"الراقصه و السياسي","description":"تقرر الراقصه سونيا انشاء دار حضانه للأطفال اليتامى و عندما تتقدم بمشورعها للمسئول يرفض فتتحداه ، تلجأ للوزير عبد الحميد رأفت تربطه بها علاقة قديمة ، يخشى على مركزه و يرفض مساعدتها فتقرر كتابة مذكراتها بمساعدة أحد الصحفيين ، يتخوف عبد الحميد و المسئولين ثم يفاجأ عبد الحميد بحصول سونيا على الموافقه للمشورع و البدء في تنفيذه و ذلك لعلاقتها بأحد كبار المسئولين .","thumbnail":"/UploadImages/Channel/ARTAFLAM1/03/AlRaqesaWaAlSeyasi.jpg","image":"0","start_Time":"00:30","adddate":"3/4/2022 12:00:00 AM","repeat1":null,"iD_genre":0,"iD_Show_Type":0,"iD_Channel":77,"iD_country":0,"iD_rating":0,"end_time":"02:04","season_Number":0,"epoisode_Number":0,"hasCatchup":0,"cmsid":0,"containerID":0,"imagePath":"../../UploadImages/Channel/ARTAFLAM1/3/","youtube":"0","published_at":"0","directed_by":"0","composition":"0","cast":"0","timeShow":null,"short_description":"تقرر الراقصه سونيا انشاء دار حضانه للأطفال اليتامى و عندما تتقدم بمشورعها للمسئول يرفض فتتحداه ، تلجأ للوزير عبد الحميد رأفت تربطه بها علاقة قديمة ، يخشى على مركزه و يرفض مساعدتها فتقرر كتابة مذكراتها بمساعدة أحد الصحفيين ، يتخوف عبد الحميد و المسئولين ثم يفاجأ عبد الحميد بحصول سونيا على الموافقه للمشورع و البدء في تنفيذه و ذلك لعلاقتها بأحد كبار المسئولين .","seOdescription":null,"tagseo":null,"channel_name":null,"pathimage":null,"pathThumbnail":null}]' const result = parser({ content }).map(p => { p.start = p.start.toJSON() p.stop = p.stop.toJSON() diff --git a/sites/astro.com.my/astro.com.my.channels.xml b/sites/astro.com.my/astro.com.my.channels.xml index 72bca740..0b2b431c 100644 --- a/sites/astro.com.my/astro.com.my.channels.xml +++ b/sites/astro.com.my/astro.com.my.channels.xml @@ -1,143 +1,141 @@ - - - 8TV - - Adithya TV - Aljazeera - Animal Planet - Asian Food Network - Astro AEC - Astro AOD 311 - Astro AOD 352 - Astro AOD 353 - Astro AOD 354 - Astro AOD 355 - Astro Arena - Astro Arena 2 - Astro Aura - Astro Awani - Astro BollyOne HD - Astro Box Office Tayangan Hebat - Astro Box Office Thangathirai - Astro Ceria - Gemilang - Astro Citra - Astro Cricket - Astro Hua Hee Dai - Astro Oasis - Astro Prima - Astro Quan Jia HD - Astro Rania - Astro Ria - Astro Shuang Xing - Astro SuperSport - Astro SuperSport 2 - Astro SuperSport 3 - Astro SuperSport 4 - Astro SuperSport 5 - Astro Tutor TV PT3 - Astro Tutor TV SPM - Astro Tutor TV UPSR - Astro UHD - Astro Vaanavil - Astro Vellithirai - Astro Vinmeen HD - Astro Wah Lai Toi - Astro Warna - Astro Xiao Tai Yang - Awesome TV - AXN - BBC Earth - BBC First - BBC Lifestyle - BBC World News - beIN Sports HD - beIN Sports 2 - beIN Sports 3 - Bernama TV - Bloomberg TV - Boo - Boomerang - Cartoon Network HD - CCTV 4 - Celestial Classic Movies - Celestial Movies - CGTN - Chutti TV - Cinemax - CNA - CNBC Asia-Pacific - CNN - Colors - Colors Tamil - Crime + Investigation - CTI TV - Discovery Asia - Discovery Channel - DMAX - DW English - Egg Network - Eurosport - Food Network - France 24 English - Golf Channel - Go Shop Chinese - Go Shop Malay 111 - Go Shop Malay 118 - Go Shop Malay 120 - HBO - HBO Family - HBO Hits - HGTV - History - Hits - Hits Movies - Iqiyi - KBS World - Kix - K+ - Lifetime - Moonbug Kids - MTV - Nat Geo People - National Geographic - National Geographic Wild - NHK World Premium - Nickelodeon - Nick Jr - Njoi TV - NTV 7 - One - Paramount Network - Phoenix Chinese Channel - Phoenix InfoNews Channel - Premier Sports - PRIMEtime - RTM TV 1 - RTM TV2 - RTM TV Okey - Showcase Movies - Sky News UK - SPOTV - Star Vijay - Sun Music - Sun TV - Ta-Daa! - TLC - TV 3 - TV 9 - TV Alhijrah - TVB Classic - TVB Entertainment News - TVB Jade - TVBS Asia - TVB Xing He - TVN HD - TVN Movies - TVS - Warner TV - WWE Network - Zee Tamil - - + + + 8TV + Adithya TV + Aljazeera + Animal Planet + Asian Food Network + Astro AEC + Astro AOD 311 + Astro AOD 352 + Astro AOD 353 + Astro AOD 354 + Astro AOD 355 + Astro Arena + Astro Arena 2 + Astro Aura + Astro Awani + Astro BollyOne HD + Astro Box Office Tayangan Hebat + Astro Box Office Thangathirai + Astro Ceria + Gemilang + Astro Citra + Astro Cricket + Astro Hua Hee Dai + Astro Oasis + Astro Prima + Astro Quan Jia HD + Astro Rania + Astro Ria + Astro Shuang Xing + Astro SuperSport + Astro SuperSport 2 + Astro SuperSport 3 + Astro SuperSport 4 + Astro SuperSport 5 + Astro Tutor TV PT3 + Astro Tutor TV SPM + Astro Tutor TV UPSR + Astro UHD + Astro Vaanavil + Astro Vellithirai + Astro Vinmeen HD + Astro Wah Lai Toi + Astro Warna + Astro Xiao Tai Yang + Awesome TV + AXN + BBC Earth + BBC First + BBC Lifestyle + BBC World News + beIN Sports HD + beIN Sports 2 + beIN Sports 3 + Bernama TV + Bloomberg TV + Boo + Boomerang + Cartoon Network HD + Celestial Classic Movies + CCTV 4 + Celestial Movies + CGTN + Chutti TV + Cinemax + CNA + CNBC Asia-Pacific + CNN + Colors + Colors Tamil + Crime + Investigation + CTI TV + Discovery Asia + Discovery Channel + DMAX + DW English + Egg Network + TVB Entertainment News + Eurosport + Food Network + France 24 English + Golf Channel + Go Shop Chinese + Go Shop Malay 111 + Go Shop Malay 118 + Go Shop Malay 120 + HBO + HBO Family + HBO Hits + HGTV + History + Hits + Hits Movies + Iqiyi + TVB Jade + KBS World + Kix + K+ + Lifetime + Moonbug Kids + MTV + Nat Geo People + National Geographic + National Geographic Wild + NHK World Premium + Nickelodeon + Nick Jr + Njoi TV + NTV 7 + RTM TV Okey + One + Paramount Network + Phoenix Chinese Channel + Phoenix InfoNews Channel + Premier Sports + PRIMEtime + Showcase Movies + Sky News UK + SPOTV + Star Vijay + Sun Music + Sun TV + Ta-Daa! + TLC + RTM TV 1 + RTM TV2 + TV 3 + TV 9 + TV Alhijrah + TVB Classic + TVBS Asia + TVB Xing He + TVN HD + TVN Movies + TVS + Warner TV + WWE Network + Zee Tamil + diff --git a/sites/astro.com.my/astro.com.my.config.js b/sites/astro.com.my/astro.com.my.config.js index 628a4b47..2711880a 100644 --- a/sites/astro.com.my/astro.com.my.config.js +++ b/sites/astro.com.my/astro.com.my.config.js @@ -4,7 +4,7 @@ const utc = require('dayjs/plugin/utc') dayjs.extend(utc) -const API_ENDPOINT = `https://contenthub-api.eco.astro.com.my` +const API_ENDPOINT = 'https://contenthub-api.eco.astro.com.my' module.exports = { site: 'astro.com.my', @@ -41,13 +41,13 @@ module.exports = { } function parseEpisode(item) { - const [_, number] = item.title.match(/Ep(\d+)$/) || [null, null] + const [, number] = item.title.match(/Ep(\d+)$/) || [null, null] return number ? parseInt(number) : null } function parseSeason(details) { - const [_, season] = details.title ? details.title.match(/ S(\d+)/) || [null, null] : [null, null] + const [, season] = details.title ? details.title.match(/ S(\d+)/) || [null, null] : [null, null] return season ? parseInt(season) : null } @@ -116,7 +116,7 @@ async function loadProgramDetails(item) { const data = await axios .get(url) .then(r => r.data) - .catch(err => {}) + .catch(error => console.log(error.message)) if (!data) return {} return data.response || {} diff --git a/sites/astro.com.my/astro.com.my.test.js b/sites/astro.com.my/astro.com.my.test.js index 88a58265..5c615f51 100644 --- a/sites/astro.com.my/astro.com.my.test.js +++ b/sites/astro.com.my/astro.com.my.test.js @@ -1,4 +1,4 @@ -// npx epg-grabber --config=sites/astro.com.my/astro.com.my.config.js --channels=sites/astro.com.my/astro.com.my.channels.xml --output=guide.xml --timeout=30000 --days=2 +// npm run grab -- --site=astro.com.my const { parser, url } = require('./astro.com.my.config.js') const fs = require('fs') diff --git a/sites/bein.com/bein.com.channels.xml b/sites/bein.com/bein.com.channels.xml deleted file mode 100644 index 677ac1e0..00000000 --- a/sites/bein.com/bein.com.channels.xml +++ /dev/null @@ -1,162 +0,0 @@ - - - - - BeIn Sports News - BeIn Sports - BeIn Sports 1 - BeIn Sports 2 - BeIn Sports 3 - BeIn Sports 4 - BeIn Sports 5 - BeIn Sports 6 - BeIn Sports 7 - BeIn Sports Premium 1 - BeIn Sports Premium 2 - BeIn Sports Premium 3 - BeIn Sports Xtra 1 - BeIn Sports Xtra 2 - BeIn 4K - BeIN Sports AFC - BeIN Sports AFC 1 - BeIN Sports AFC 2 - BeIN Sports AFC 3 - BeIn Sports English 1 - BeIn Sports English 2 - BeIn Sports English 3 - BeIn NBA - BeIn Sports French 1 - BeIn Sports French 2 - BeIn Sports French 3 - beIN Sports Max 1 - beIN Sports Max 2 - beIN Sports Max 3 - beIN Sports Max 4 - beIN Sports Max 5 - beIN Sports Max 6 - Alkass One - Alkass Two - Alkass Three - Alkass Four - Alkass Five - Alkass Six - Alkass Seven - Alkass Eight - - BeIn Sports News - BeIn Sports - BeIn Sports 1 - BeIn Sports 2 - BeIn Sports 3 - BeIn Sports 4 - BeIn Sports 5 - BeIn Sports 6 - BeIn Sports 7 - BeIn Sports Premium 1 - BeIn Sports Premium 2 - BeIn Sports Premium 3 - BeIn Sports Xtra 1 - BeIn Sports Xtra 2 - BeIn 4K - BeIN Sports AFC - BeIN Sports AFC 1 - BeIN Sports AFC 2 - BeIN Sports AFC 3 - BeIn Sports English 1 - BeIn Sports English 2 - BeIn Sports English 3 - BeIn NBA - BeIn Sports French 1 - BeIn Sports French 2 - BeIn Sports French 3 - beIN Sports Max 1 - beIN Sports Max 2 - beIN Sports Max 3 - beIN Sports Max 4 - beIN Sports Max 5 - beIN Sports Max 6 - Alkass Three - Alkass One - Alkass Two - Alkass Four - Alkass Five - Alkass Six - Alkass Seven - Alkass Eight - - beIN Movies Premiere - beIN Movies Action - bein Movies Drama - beIN Movies Family - FOX Movies - FOX Action Movies - Star Movies - beIN Series 1 - beIN Series 2 - beIN Drama 1 - beIN Gourmet - Travel Channel - FOX - Food Network - HGTV - Star World - Fatafeat - FOX Life - MTV 80s - MTV 90s - Club MTV - Bloomberg TV - National Geographic - National Geographic Wild - BBC Earth - CNN - EuroNews - Discovery - be Junior - Jeem - Baraem - Cartoon Network - Cartoon Network Arabic - Cartoon Network Hindi - Baby TV - CBeebies - DreamWorks - - beIN Movies Premiere - beIN Movies Action - bein Movies Drama - beIN Movies Family - FOX Movies - FOX Action Movies - Star Movies - beIN Series 1 - beIN Series 2 - beIN Drama 1 - beIN Gourmet - Travel Channel - FOX - Food Network - HGTV - Star World - Fatafeat - MTV 80s - MTV 90s - Club MTV - be Junior - Bloomberg TV - National Geographic - National Geographic Wild - BBC Earth - Al Jazeera Documentary - CNN - EuroNews - Jeem - Baraem - CBeebies - Baby TV - Cartoon Network - Cartoon Network Arabic - Cartoon Network Hindi - DreamWorks - - diff --git a/sites/bein.com/bein.com.config.js b/sites/bein.com/bein.com.config.js index 6b895eaa..8c1552ec 100644 --- a/sites/bein.com/bein.com.config.js +++ b/sites/bein.com/bein.com.config.js @@ -4,7 +4,6 @@ const { DateTime } = require('luxon') module.exports = { site: 'bein.com', days: 2, - timeout: 30000, // 30 seconds request: { cache: { ttl: 60 * 60 * 1000 // 1 hour @@ -63,7 +62,7 @@ function parseCategory($item) { } function parseTime($item, date) { - let [_, time] = $item('.time') + let [, time] = $item('.time') .text() .match(/^(\d{2}:\d{2})/) || [null, null] if (!time) return null @@ -73,7 +72,7 @@ function parseTime($item, date) { } function parseItems(content, channel) { - const [_, channelId] = channel.site_id.split('#') + const [, channelId] = channel.site_id.split('#') const $ = cheerio.load(content) return $(`#channels_${channelId} .slider > ul:first-child > li`).toArray() diff --git a/sites/bein.com/bein.com.test.js b/sites/bein.com/bein.com.test.js index acb0bff1..73174712 100644 --- a/sites/bein.com/bein.com.test.js +++ b/sites/bein.com/bein.com.test.js @@ -1,4 +1,4 @@ -// npx epg-grabber --config=sites/bein.com/bein.com.config.js --channels=sites/bein.com/bein.com.channels.xml --output=guide.xml +// npm run grab -- --site=bein.com const fs = require('fs') const path = require('path') diff --git a/sites/bein.com/bein.com_ar.channels.xml b/sites/bein.com/bein.com_ar.channels.xml new file mode 100644 index 00000000..95a0d070 --- /dev/null +++ b/sites/bein.com/bein.com_ar.channels.xml @@ -0,0 +1,79 @@ + + + Al Jazeera Documentary + Alkass Eight + Alkass Five + Alkass Four + Alkass One + Alkass Seven + Alkass Six + Alkass Three + Alkass Two + Baby TV + Baraem + BBC Earth + BeIn 4K + beIN Drama 1 + beIN Gourmet + beIN Movies Premiere + beIN Movies Action + bein Movies Drama + beIN Movies Family + beIN Series 1 + beIN Series 2 + BeIn Sports + BeIn Sports 1 + BeIn Sports 2 + BeIn Sports 3 + BeIn Sports 4 + BeIn Sports 5 + BeIn Sports 6 + BeIn Sports 7 + BeIN Sports AFC + BeIN Sports AFC 1 + BeIN Sports AFC 2 + BeIN Sports AFC 3 + BeIn Sports English 1 + BeIn Sports English 2 + BeIn Sports English 3 + BeIn Sports French 1 + BeIn Sports French 2 + BeIn Sports French 3 + beIN Sports Max 1 + beIN Sports Max 2 + beIN Sports Max 3 + beIN Sports Max 4 + beIN Sports Max 5 + beIN Sports Max 6 + BeIn NBA + BeIn Sports News + BeIn Sports Premium 1 + BeIn Sports Premium 2 + BeIn Sports Premium 3 + BeIn Sports Xtra 1 + BeIn Sports Xtra 2 + be Junior + Bloomberg TV + Cartoon Network Arabic + Cartoon Network Hindi + Cartoon Network + CBeebies + Club MTV + CNN + DreamWorks + EuroNews + Fatafeat + Food Network + FOX Action Movies + FOX + FOX Movies + HGTV + Jeem + MTV 80s + MTV 90s + National Geographic + National Geographic Wild + Star Movies + Star World + Travel Channel + \ No newline at end of file diff --git a/sites/bein.com/bein.com_en.channels.xml b/sites/bein.com/bein.com_en.channels.xml new file mode 100644 index 00000000..29561d50 --- /dev/null +++ b/sites/bein.com/bein.com_en.channels.xml @@ -0,0 +1,80 @@ + + + Alkass Eight + Alkass Five + Alkass Four + Alkass One + Alkass Seven + Alkass Six + Alkass Three + Alkass Two + Baby TV + Baraem + BBC Earth + BeIn 4K + beIN Drama 1 + beIN Gourmet + beIN Movies Premiere + beIN Movies Action + bein Movies Drama + beIN Movies Family + beIN Series 1 + beIN Series 2 + BeIn Sports + BeIn Sports 1 + BeIn Sports 2 + BeIn Sports 3 + BeIn Sports 4 + BeIn Sports 5 + BeIn Sports 6 + BeIn Sports 7 + BeIN Sports AFC + BeIN Sports AFC 1 + BeIN Sports AFC 2 + BeIN Sports AFC 3 + BeIn Sports English 1 + BeIn Sports English 2 + BeIn Sports English 3 + BeIn Sports French 1 + BeIn Sports French 2 + BeIn Sports French 3 + beIN Sports Max 1 + beIN Sports Max 2 + beIN Sports Max 3 + beIN Sports Max 4 + beIN Sports Max 5 + beIN Sports Max 6 + BeIn NBA + BeIn Sports News + BeIn Sports Premium 1 + BeIn Sports Premium 2 + BeIn Sports Premium 3 + BeIn Sports Xtra 1 + BeIn Sports Xtra 2 + be Junior + Bloomberg TV + Cartoon Network Arabic + Cartoon Network Hindi + Cartoon Network + CBeebies + Club MTV + CNN + Discovery + DreamWorks + EuroNews + Fatafeat + Food Network + FOX Action Movies + FOX + FOX Life + FOX Movies + HGTV + Jeem + MTV 80s + MTV 90s + National Geographic + National Geographic Wild + Star Movies + Star World + Travel Channel + diff --git a/sites/beinsports.com/beinsports.com.config.js b/sites/beinsports.com/beinsports.com.config.js index deabaa1a..35e4783d 100644 --- a/sites/beinsports.com/beinsports.com.config.js +++ b/sites/beinsports.com/beinsports.com.config.js @@ -26,7 +26,7 @@ module.exports = { 'YYYY-MM-DD' )}` }, - parser: function ({ content, channel, date, cached }) { + parser: function ({ content, channel, date }) { let programs = [] const items = parseItems(content, channel) let i = 0 @@ -68,15 +68,15 @@ module.exports = { .then(r => r.data) .catch(console.log) const $ = cheerio.load(content) - const items = $(`.container > div, #epg_div > div`).toArray() + const items = $('.container > div, #epg_div > div').toArray() return items .map(item => { const $item = cheerio.load(item) const id = $item('*').attr('id') - if (!/^channels\_[0-9]+$/.test(id)) return null + if (!/^channels_[0-9]+$/.test(id)) return null const channelId = id.replace('channels_', '') const imgSrc = $item('img').attr('src') - const [_, __, name] = imgSrc.match(/(\/|)([a-z0-9-_.]+)(.png|.svg)$/i) || [null, null, ''] + const [, , name] = imgSrc.match(/(\/|)([a-z0-9-_.]+)(.png|.svg)$/i) || [null, null, ''] return { lang, @@ -103,7 +103,7 @@ function parseCategory($item) { function parseStart($item, date) { let time = $item('.time').text() if (!time) return null - let [_, start, period] = time.match(/^(\d{2}:\d{2})( AM| PM|)/) || [null, null, null] + let [, start, period] = time.match(/^(\d{2}:\d{2})( AM| PM|)/) || [null, null, null] if (!start) return null start = `${date.format('YYYY-MM-DD')} ${start}${period}` const format = period ? 'YYYY-MM-DD hh:mm A' : 'YYYY-MM-DD HH:mm' @@ -114,7 +114,7 @@ function parseStart($item, date) { function parseStop($item, date) { let time = $item('.time').text() if (!time) return null - let [_, stop, period] = time.match(/(\d{2}:\d{2})( AM| PM|)$/) || [null, null, null] + let [, stop, period] = time.match(/(\d{2}:\d{2})( AM| PM|)$/) || [null, null, null] if (!stop) return null stop = `${date.format('YYYY-MM-DD')} ${stop}${period}` const format = period ? 'YYYY-MM-DD hh:mm A' : 'YYYY-MM-DD HH:mm' @@ -123,7 +123,7 @@ function parseStop($item, date) { } function parseItems(content, channel) { - const [_, channelId] = channel.site_id.split('#') + const [, channelId] = channel.site_id.split('#') const $ = cheerio.load(content) return $(`#channels_${channelId} .slider > ul:first-child > li`).toArray() diff --git a/sites/beinsports.com/beinsports.com.test.js b/sites/beinsports.com/beinsports.com.test.js index db0d033c..a26de067 100644 --- a/sites/beinsports.com/beinsports.com.test.js +++ b/sites/beinsports.com/beinsports.com.test.js @@ -1,6 +1,6 @@ // npm run channels:parse -- --config=./sites/beinsports.com/beinsports.com.config.js --output=./sites/beinsports.com/beinsports.com_qa-ar.channels.xml --set=lang:ar --set=region:ar -// npx epg-grabber --config=sites/beinsports.com/beinsports.com.config.js --channels=sites/beinsports.com/beinsports.com_qa-en.channels.xml --output=guide.xml --timeout=30000 --days=2 -// npx epg-grabber --config=sites/beinsports.com/beinsports.com.config.js --channels=sites/beinsports.com/beinsports.com_us-en.channels.xml --output=guide.xml --timeout=30000 --days=2 +// npm run grab -- --site=beinsports.com +// npm run grab -- --site=beinsports.com const { parser, url } = require('./beinsports.com.config.js') const fs = require('fs') diff --git a/sites/beinsports.com/beinsports.com_au.channels.xml b/sites/beinsports.com/beinsports.com_au.channels.xml index 408f553f..6467c6a7 100644 --- a/sites/beinsports.com/beinsports.com_au.channels.xml +++ b/sites/beinsports.com/beinsports.com_au.channels.xml @@ -1,8 +1,6 @@ - - - BeIn Sports 1 Australia - BeIn Sports 2 Australia - BeIn Sports 3 Australia - - \ No newline at end of file + + BeIn Sports 1 Australia + BeIn Sports 2 Australia + BeIn Sports 3 Australia + \ No newline at end of file diff --git a/sites/beinsports.com/beinsports.com_fr.channels.xml b/sites/beinsports.com/beinsports.com_fr.channels.xml index 6bd42713..50516c43 100644 --- a/sites/beinsports.com/beinsports.com_fr.channels.xml +++ b/sites/beinsports.com/beinsports.com_fr.channels.xml @@ -1,15 +1,13 @@ - - - BeIN Sports 1 HD France - BeIN Sports 2 HD France - BeIN Sports 3 France - BeIN Sports Max 4 France - BeIN Sports Max 5 France - BeIN Sports Max 6 France - BeIN Sports Max 7 France - BeIN Sports Max 8 France - BeIN Sports Max 9 France - BeIN Sports Max 10 France - - + + BeIN Sports 1 HD France + BeIN Sports 2 HD France + BeIN Sports 3 France + BeIN Sports Max 4 France + BeIN Sports Max 5 France + BeIN Sports Max 6 France + BeIN Sports Max 7 France + BeIN Sports Max 8 France + BeIN Sports Max 9 France + BeIN Sports Max 10 France + diff --git a/sites/beinsports.com/beinsports.com_hk.channels.xml b/sites/beinsports.com/beinsports.com_hk.channels.xml index c98a4b95..ae0372bf 100644 --- a/sites/beinsports.com/beinsports.com_hk.channels.xml +++ b/sites/beinsports.com/beinsports.com_hk.channels.xml @@ -1,7 +1,5 @@ - - - BeIN Sports 1 Hong Kong - BeIN Sports 2 Hong Kong - - + + BeIN Sports 1 Hong Kong + BeIN Sports 2 Hong Kong + diff --git a/sites/beinsports.com/beinsports.com_id.channels.xml b/sites/beinsports.com/beinsports.com_id.channels.xml index cfbae1f5..31383e71 100644 --- a/sites/beinsports.com/beinsports.com_id.channels.xml +++ b/sites/beinsports.com/beinsports.com_id.channels.xml @@ -1,7 +1,5 @@ - - - BeIN Sports 1 Indonesia - BeIN Sports 3 Indonesia - - + + BeIN Sports 1 Indonesia + BeIN Sports 3 Indonesia + diff --git a/sites/beinsports.com/beinsports.com_my.channels.xml b/sites/beinsports.com/beinsports.com_my.channels.xml index 2646f46a..a5ee6c88 100644 --- a/sites/beinsports.com/beinsports.com_my.channels.xml +++ b/sites/beinsports.com/beinsports.com_my.channels.xml @@ -1,6 +1,4 @@ - - - BeIN Sports 1 Malaysia & Singapore - - + + BeIN Sports 1 Malaysia & Singapore + diff --git a/sites/beinsports.com/beinsports.com_ph.channels.xml b/sites/beinsports.com/beinsports.com_ph.channels.xml index fff70637..f73ff0e6 100644 --- a/sites/beinsports.com/beinsports.com_ph.channels.xml +++ b/sites/beinsports.com/beinsports.com_ph.channels.xml @@ -1,7 +1,5 @@ - - - BeIN Sports 1 Philippines - BeIN Sports 3 Philippines - - + + BeIN Sports 1 Philippines + BeIN Sports 3 Philippines + diff --git a/sites/beinsports.com/beinsports.com_qa-ar.channels.xml b/sites/beinsports.com/beinsports.com_qa-ar.channels.xml index 6f9a70f5..66437c45 100644 --- a/sites/beinsports.com/beinsports.com_qa-ar.channels.xml +++ b/sites/beinsports.com/beinsports.com_qa-ar.channels.xml @@ -1,30 +1,28 @@ - - - beIN SPORTS FTA - beIN SPORTS News - beIN SPORTS2 - beIN SPORTS3 - beIN SPORTS4 - beIN SPORTS5 - beIN SPORTS6 - beIN SPORTS7 - beIN SPORTS3 PREMIUM - beIN SPORTS XTRA1 - beIN SPORTS XTRA2 - beIN 4k - beIN SPORTS AFC - beIN SPORTS AFC1 - beIN SPORTS AFC2 - beIN SPORTS AFC3 - beIN SPORTS NBA - beIN SPORTS1 ENGLISH - beIN SPORTS2 ENGLISH - beIN SPORTS3 ENGLISH - beIN SPORTS1 FRENCH - beIN SPORTS2 FRENCH - beIN SPORTS3 FRENCH - beIN SPORTS MAX 1 - beIN SPORTS MAX 2 - - + + beIN SPORTS FTA + beIN SPORTS News + beIN SPORTS2 + beIN SPORTS3 + beIN SPORTS4 + beIN SPORTS5 + beIN SPORTS6 + beIN SPORTS7 + beIN SPORTS3 PREMIUM + beIN SPORTS XTRA1 + beIN SPORTS XTRA2 + beIN 4k + beIN SPORTS AFC + beIN SPORTS AFC1 + beIN SPORTS AFC2 + beIN SPORTS AFC3 + beIN SPORTS NBA + beIN SPORTS1 ENGLISH + beIN SPORTS2 ENGLISH + beIN SPORTS3 ENGLISH + beIN SPORTS1 FRENCH + beIN SPORTS2 FRENCH + beIN SPORTS3 FRENCH + beIN SPORTS MAX 1 + beIN SPORTS MAX 2 + diff --git a/sites/beinsports.com/beinsports.com_qa-en.channels.xml b/sites/beinsports.com/beinsports.com_qa-en.channels.xml index 36aac1b2..c90af9d9 100644 --- a/sites/beinsports.com/beinsports.com_qa-en.channels.xml +++ b/sites/beinsports.com/beinsports.com_qa-en.channels.xml @@ -1,24 +1,22 @@ - - - BeIn Sports - BeIn Sports News - BeIn Sports 2 - BeIn Sports 3 - BeIn Sports 4 - BeIn Sports 5 - BeIn Sports 6 - BeIn Sports 7 - BeIn Sports Premium 3 - BeIn Sports Xtra 1 - BeIn Sports Xtra 2 - BeIn 4K - BeIn NBA - BeIn Sports English 1 - BeIn Sports English 2 - BeIn Sports English 3 - BeIn Sports French 1 - BeIn Sports French 2 - BeIn Sports French 3 - - + + BeIn Sports + BeIn Sports News + BeIn Sports 2 + BeIn Sports 3 + BeIn Sports 4 + BeIn Sports 5 + BeIn Sports 6 + BeIn Sports 7 + BeIn Sports Premium 3 + BeIn Sports Xtra 1 + BeIn Sports Xtra 2 + BeIn 4K + BeIn NBA + BeIn Sports English 1 + BeIn Sports English 2 + BeIn Sports English 3 + BeIn Sports French 1 + BeIn Sports French 2 + BeIn Sports French 3 + diff --git a/sites/beinsports.com/beinsports.com_th.channels.xml b/sites/beinsports.com/beinsports.com_th.channels.xml index 9f251358..55b802cb 100644 --- a/sites/beinsports.com/beinsports.com_th.channels.xml +++ b/sites/beinsports.com/beinsports.com_th.channels.xml @@ -1,7 +1,5 @@ - - - BeIN Sports 1 Thailand - BeIN Sports 3 Thailand - - + + BeIN Sports 1 Thailand + BeIN Sports 3 Thailand + diff --git a/sites/beinsports.com/beinsports.com_us-en.channels.xml b/sites/beinsports.com/beinsports.com_us-en.channels.xml index 03c30bbc..b3009565 100644 --- a/sites/beinsports.com/beinsports.com_us-en.channels.xml +++ b/sites/beinsports.com/beinsports.com_us-en.channels.xml @@ -1,15 +1,13 @@ - - - BeIN Sports USA - BeIN Sports en Español - BeIN Sports Xtra USA - BeIN Sports Xtra en Español - BeIN Sports 3 USA - BeIN Sports 4 USA - BeIN Sports 5 USA - BeIN Sports 6 USA - BeIN Sports 7 USA - BeIN Sports 8 USA - - + + BeIN Sports USA + BeIN Sports en Español + BeIN Sports Xtra USA + BeIN Sports Xtra en Español + BeIN Sports 3 USA + BeIN Sports 4 USA + BeIN Sports 5 USA + BeIN Sports 6 USA + BeIN Sports 7 USA + BeIN Sports 8 USA + diff --git a/sites/beinsports.com/beinsports.com_us-es.channels.xml b/sites/beinsports.com/beinsports.com_us-es.channels.xml index f556373d..3feee0b6 100644 --- a/sites/beinsports.com/beinsports.com_us-es.channels.xml +++ b/sites/beinsports.com/beinsports.com_us-es.channels.xml @@ -1,15 +1,13 @@ - - - BeIN Sports USA - BeIN Sports en Español - BeIN Sports Xtra USA - BeIN Sports Xtra en Español - BeIN Sports 3 USA - BeIN Sports 4 USA - BeIN Sports 5 USA - BeIN Sports 6 USA - BeIN Sports 7 USA - BeIN Sports 8 USA - - + + BeIN Sports USA + BeIN Sports en Español + BeIN Sports Xtra USA + BeIN Sports Xtra en Español + BeIN Sports 3 USA + BeIN Sports 4 USA + BeIN Sports 5 USA + BeIN Sports 6 USA + BeIN Sports 7 USA + BeIN Sports 8 USA + diff --git a/sites/berrymedia.co.kr/berrymedia.co.kr.channels.xml b/sites/berrymedia.co.kr/berrymedia.co.kr.channels.xml index 8d09501d..fa4a0c7a 100644 --- a/sites/berrymedia.co.kr/berrymedia.co.kr.channels.xml +++ b/sites/berrymedia.co.kr/berrymedia.co.kr.channels.xml @@ -1,11 +1,9 @@ - - - BallTV - CookTV - GMTV - GTV - 생활체육TV - UHDDreamTV - - + + BallTV + CookTV + GMTV + GTV + 생활체육TV + UHDDreamTV + diff --git a/sites/berrymedia.co.kr/berrymedia.co.kr.config.js b/sites/berrymedia.co.kr/berrymedia.co.kr.config.js index f8b8f2a4..773de12d 100644 --- a/sites/berrymedia.co.kr/berrymedia.co.kr.config.js +++ b/sites/berrymedia.co.kr/berrymedia.co.kr.config.js @@ -86,7 +86,7 @@ function parseRating($item) { : null } -function parseItems(content, channel, date) { +function parseItems(content) { const $ = cheerio.load(content) return $('.sc_time dd').toArray() diff --git a/sites/berrymedia.co.kr/berrymedia.co.kr.test.js b/sites/berrymedia.co.kr/berrymedia.co.kr.test.js index 7396aafc..88f98a75 100644 --- a/sites/berrymedia.co.kr/berrymedia.co.kr.test.js +++ b/sites/berrymedia.co.kr/berrymedia.co.kr.test.js @@ -1,4 +1,4 @@ -// npx epg-grabber --config=sites/berrymedia.co.kr/berrymedia.co.kr.config.js --channels=sites/berrymedia.co.kr/berrymedia.co.kr.channels.xml --output=guide.xml --days=2 +// npm run grab -- --site=berrymedia.co.kr const { parser, url, request } = require('./berrymedia.co.kr.config.js') const fs = require('fs') @@ -49,7 +49,7 @@ it('can parse response', () => { expect(results[0]).toMatchObject({ start: '2023-01-25T15:00:00.000Z', stop: '2023-01-25T16:00:00.000Z', - title: `더트롯쇼`, + title: '더트롯쇼', category: '연예/오락', rating: { system: 'KMRB', @@ -60,7 +60,7 @@ it('can parse response', () => { expect(results[17]).toMatchObject({ start: '2023-01-26T13:50:00.000Z', stop: '2023-01-26T14:20:00.000Z', - title: `나는 자연인이다`, + title: '나는 자연인이다', category: '교양', rating: { system: 'KMRB', diff --git a/sites/bt.com/bt.com.channels.xml b/sites/bt.com/bt.com.channels.xml index 7181c220..91ead431 100644 --- a/sites/bt.com/bt.com.channels.xml +++ b/sites/bt.com/bt.com.channels.xml @@ -1,170 +1,168 @@ - - - - - 4seven - 5 Action - 5 Select - 5 Star - 5 USA - Al Jazeera English - BBC Alba - BBC Four - BBC News - BBC One Cambridgeshire - BBC One Channel Islands - BBC One East Midlands - BBC One HD - BBC One London - BBC One North East & Cumbria - BBC One North West - BBC One Oxford - BBC One Scotland - BBC One South - BBC One South East - BBC One South West - BBC One Wales - BBC One West - BBC One West Midlands - BBC One Yorks - BBC Parliament - BBC Scotland - BBC Two England - BBC Two Wales - Blaze UK - Boomerang UK - Cartoonito UK - Cartoon Network UK - CBBC - CBeebies UK - CBS Drama UK - CBS Justice UK - CBS Reality UK - Challenge UK - Channel 4 - Channel 5 - Channel 5 +1 - CITV - Clubland TV - Comedy Central UK - Create and Craft - Dave UK - Dave ja vu - DMAX UK - Drama UK - E4 UK - E4 Extra - E4+1 - Eurosport 1 UK - Eurosport 2 UK - Film 4 UK - Film 4 UK +1 - Food Network UK - GB News - Gems TV - Gold HD - Great! Movies - Great! Movies Action - Great! Movies Action + 1 - Great! Movies Classic - Great! Movies Classic +1 - Great! TV - Great! TV +1 - HGTV UK - Ideal World - ITV - ITV 2 - ITV 2 +1 - ITV 3 - ITV 3 +1 - ITV 4 - ITV 4 +1 - ITV Be - Jewellery Maker - Horror Channel UK - LFC TV - More 4 UK - More4+1 - MTV UK - National Geographic UK - Nickelodeon - Nick Jr UK - NickToons UK - Now 70's - Now 80's - Now 90's - PBS America - Pick UK - Pop - Pop Max - Quest Red UK - Quest Red UK +1 - Quest - Quest UK +1 - QVC UK Beauty - QVC Style UK - QVC UK - Really UK - S4C - Sky Arts HD - Sky Cinema Action HD - Sky Cinema Animation HD - Sky Cinema Comedy HD - Sky Cinema Drama HD - Sky Cinema Family HD - Sky Cinema Greats HD - Sky Cinema Hits HD - Sky Cinema Premiere HD - Sky Cinema Sci-Fi Horror HD - Sky Cinema Select - Sky Cinema Thriller HD - Sky Comedy - Sky Crime - Sky Documentaries - Sky History HD - Sky Max HD - Sky Nature - Sky News HD - Sky Sci-Fi - Sky Showcase HD - Sky Sports Action - Sky Sports Arena - Sky Sports Box Office - Sky Sports Cricket - Sky Sports F1 - Sky Sports Football - Sky Sports Golf - Sky Sports Main Event - Sky Sports Mix - Sky Sports News UK - Sky Sports Premier League - Sky Sports Racing - Sky Witness - Smithsonian Channel UK - STV - STV+1 - Talking Pictures TV - TBN UK - Tiny Pop - TJC - TNT Sports 1 - TNT Sports 10 - TNT Sports 2 - TNT Sports 3 - TNT Sports 4 - TNT Sports 5 - TNT Sports 6 - TNT Sports 7 - TNT Sports 8 - TNT Sports 9 - TNT Sports Box Office UK - TNT Sports Box Office 2 UK - TNT Sports Ultimate - Together TV - Viaplay Xtra - Xpanded TV - Yesterday - Yesterday+1 - - + + + + 4seven + 5 Action + 5 Select + 5 Star + 5 USA + Al Jazeera English + BBC Alba + BBC Four + BBC News + BBC One Cambridgeshire + BBC One Channel Islands + BBC One East Midlands + BBC One HD + BBC One London + BBC One North East & Cumbria + BBC One North West + BBC One Oxford + BBC One Scotland + BBC One South + BBC One South East + BBC One South West + BBC One Wales + BBC One West + BBC One West Midlands + BBC One Yorks + BBC Parliament + BBC Scotland + BBC Two England + BBC Two Wales + Blaze UK + Boomerang UK + Cartoonito UK + Cartoon Network UK + CBBC + CBeebies UK + CBS Drama UK + CBS Justice UK + CBS Reality UK + Challenge UK + Channel 4 + Channel 5 + Channel 5 +1 + CITV + Clubland TV + Comedy Central UK + Create and Craft + Dave UK + Dave ja vu + DMAX UK + Drama UK + E4 UK + E4 Extra + E4+1 + Eurosport 1 UK + Eurosport 2 UK + Film 4 UK + Film 4 UK +1 + Food Network UK + GB News + Gems TV + Gold HD + Great! Movies + Great! Movies Action + Great! Movies Action + 1 + Great! Movies Classic + Great! Movies Classic +1 + Great! TV + Great! TV +1 + HGTV UK + Ideal World + ITV + ITV 2 + ITV 2 +1 + ITV 3 + ITV 3 +1 + ITV 4 + ITV 4 +1 + ITV Be + Jewellery Maker + Horror Channel UK + LFC TV + More 4 UK + More4+1 + MTV UK + National Geographic UK + Nickelodeon + Nick Jr UK + NickToons UK + Now 70's + Now 80's + Now 90's + PBS America + Pick UK + Pop + Pop Max + Quest Red UK + Quest Red UK +1 + Quest + Quest UK +1 + QVC UK Beauty + QVC Style UK + QVC UK + Really UK + S4C + Sky Arts HD + Sky Cinema Action HD + Sky Cinema Animation HD + Sky Cinema Comedy HD + Sky Cinema Drama HD + Sky Cinema Family HD + Sky Cinema Greats HD + Sky Cinema Hits HD + Sky Cinema Premiere HD + Sky Cinema Sci-Fi Horror HD + Sky Cinema Select + Sky Cinema Thriller HD + Sky Comedy + Sky Crime + Sky Documentaries + Sky History HD + Sky Max HD + Sky Nature + Sky News HD + Sky Sci-Fi + Sky Showcase HD + Sky Sports Action + Sky Sports Arena + Sky Sports Box Office + Sky Sports Cricket + Sky Sports F1 + Sky Sports Football + Sky Sports Golf + Sky Sports Main Event + Sky Sports Mix + Sky Sports News UK + Sky Sports Premier League + Sky Sports Racing + Sky Witness + Smithsonian Channel UK + STV + STV+1 + Talking Pictures TV + TBN UK + Tiny Pop + TJC + TNT Sports 1 + TNT Sports 10 + TNT Sports 2 + TNT Sports 3 + TNT Sports 4 + TNT Sports 5 + TNT Sports 6 + TNT Sports 7 + TNT Sports 8 + TNT Sports 9 + TNT Sports Box Office UK + TNT Sports Box Office 2 UK + TNT Sports Ultimate + Together TV + Viaplay Xtra + Xpanded TV + Yesterday + Yesterday+1 + diff --git a/sites/bt.com/bt.com.config.js b/sites/bt.com/bt.com.config.js index e6120719..297bd80c 100644 --- a/sites/bt.com/bt.com.config.js +++ b/sites/bt.com/bt.com.config.js @@ -3,9 +3,6 @@ const dayjs = require('dayjs') module.exports = { site: 'bt.com', days: 2, - request: { - timeout: 30000 - }, url: function ({ date, channel }) { return `https://voila.metabroadcast.com/4/schedules/${ channel.site_id diff --git a/sites/bt.com/bt.com.test.js b/sites/bt.com/bt.com.test.js index 2b2e108f..c7f93d65 100644 --- a/sites/bt.com/bt.com.test.js +++ b/sites/bt.com/bt.com.test.js @@ -1,7 +1,6 @@ -// npx epg-grabber --config=sites/bt.com/bt.com.config.js --channels=sites/bt.com/bt.com.channels.xml --output=guide.xml --days=2 +// npm run grab -- --site=bt.com const { parser, url } = require('./bt.com.config.js') -const axios = require('axios') const dayjs = require('dayjs') const utc = require('dayjs/plugin/utc') const customParseFormat = require('dayjs/plugin/customParseFormat') @@ -21,7 +20,8 @@ it('can generate valid url', () => { }) it('can parse response', () => { - const content = `{"schedule":{"channel":{"title":"BBC One HD","id":"hsxv","uri":"http://api.youview.tv/channels/dvb://233a..4484","images":[{"uri":"https://images.metabroadcast.com?source=http%3A%2F%2Fimages-live.youview.tv%2Fimages%2Fentity%2F8c4c0357-d7ee-5d8a-8bc4-b177b6875128%2Fident%2F1_1024x532.png%3Fdefaultimg%3D0&ETag=r5vyecG6of%2BhCbHeEClx0Q%3D%3D","mime_type":"image/png","type":null,"color":"monochrome","theme":"light_monochrome","aspect_ratio":null,"availability_start":null,"availability_end":null,"width":1024,"height":532,"hasTitleArt":null,"source":null}],"available_from":[{"key":"api.youview.tv","name":"YouView JSON","country":"GB"}],"source":{"key":"api.youview.tv","name":"YouView JSON","country":"GB"},"same_as":[],"media_type":"video","broadcaster":null,"aliases":[{"namespace":"youview:serviceLocator","value":"dvb://233a..4484"},{"namespace":"youview:channel:id","value":"8c4c0357-d7ee-5d8a-8bc4-b177b6875128"}],"genres":[],"high_definition":true,"timeshifted":null,"regional":null,"related_links":[],"start_date":null,"advertised_from":null,"advertised_to":null,"short_description":null,"medium_description":null,"long_description":null,"region":null,"target_regions":[],"channel_type":"CHANNEL","interactive":false,"transmission_types":["DTT"],"quality":"HD","hdr":false},"source":"api.youview.tv","entries":[{"broadcast":{"aliases":[{"namespace":"api.youview.tv:slot","value":"dvb://233a..4484;76bc"},{"namespace":"dvb:event-locator","value":"dvb://233a..4484;76bc"},{"namespace":"dvb:pcrid","value":"crid://fp.bbc.co.uk/b/3Q30S2"},{"namespace":"youview:schedule_event:id","value":"79d318f3-b41a-582d-b089-7b0172538b42"}],"transmission_time":"2022-03-19T23:30:00.000Z","transmission_end_time":"2022-03-20T01:20:00.000Z","broadcast_duration":6600,"broadcast_on":"hsxv","schedule_date":null,"repeat":null,"subtitled":true,"signed":null,"audio_described":false,"high_definition":null,"widescreen":null,"surround":null,"live":null,"premiere":null,"continuation":null,"new_series":null,"new_episode":null,"new_one_off":null,"revised_repeat":null,"blackout_restriction":{"all":false}},"item":{"id":"n72nsw","type":"item","display_title":{"title":"The Finest Hours (2016)","subtitle":null},"year":null,"media_type":"video","specialization":"tv","source":{"key":"api.youview.tv","name":"YouView JSON","country":"GB"},"title":"The Finest Hours (2016)","description":"Drama based on a true story, recounting one of history's most daring coastguard rescue attempts. Stranded on a sinking oil tanker along with 30 other sailors, engineer Ray Sybert battles to buy his crew more time as Captain Bernie Webber and three of his colleagues tackle gigantic waves and gale-force winds in their astonishing bid to save the seamen.","image":"https://images.metabroadcast.com?source=http%3A%2F%2Fimages-live.youview.tv%2Fimages%2Fentity%2F52172983%2Fprimary%2F1_1024x576.jpg%3Fdefaultimg%3D0&ETag=z7ucT5kdAq7HuNQf%2FGTEJg%3D%3D","thumbnail":null,"duration":null,"container":null}}]},"terms_and_conditions":{"text":"Specific terms and conditions in your agreement with MetaBroadcast, and with any data provider, apply to your use of this data, and associated systems."},"results":1,"request":{"path":"/4/schedules/hsxv.json","parameters":{"annotations":"content.description","from":"2022-03-20T00:00:00Z","to":"2022-03-21T00:00:00Z","source":"api.youview.tv","key":"b4d2edb68da14dfb9e47b5465e99b1b1"}}}` + const content = + '{"schedule":{"channel":{"title":"BBC One HD","id":"hsxv","uri":"http://api.youview.tv/channels/dvb://233a..4484","images":[{"uri":"https://images.metabroadcast.com?source=http%3A%2F%2Fimages-live.youview.tv%2Fimages%2Fentity%2F8c4c0357-d7ee-5d8a-8bc4-b177b6875128%2Fident%2F1_1024x532.png%3Fdefaultimg%3D0&ETag=r5vyecG6of%2BhCbHeEClx0Q%3D%3D","mime_type":"image/png","type":null,"color":"monochrome","theme":"light_monochrome","aspect_ratio":null,"availability_start":null,"availability_end":null,"width":1024,"height":532,"hasTitleArt":null,"source":null}],"available_from":[{"key":"api.youview.tv","name":"YouView JSON","country":"GB"}],"source":{"key":"api.youview.tv","name":"YouView JSON","country":"GB"},"same_as":[],"media_type":"video","broadcaster":null,"aliases":[{"namespace":"youview:serviceLocator","value":"dvb://233a..4484"},{"namespace":"youview:channel:id","value":"8c4c0357-d7ee-5d8a-8bc4-b177b6875128"}],"genres":[],"high_definition":true,"timeshifted":null,"regional":null,"related_links":[],"start_date":null,"advertised_from":null,"advertised_to":null,"short_description":null,"medium_description":null,"long_description":null,"region":null,"target_regions":[],"channel_type":"CHANNEL","interactive":false,"transmission_types":["DTT"],"quality":"HD","hdr":false},"source":"api.youview.tv","entries":[{"broadcast":{"aliases":[{"namespace":"api.youview.tv:slot","value":"dvb://233a..4484;76bc"},{"namespace":"dvb:event-locator","value":"dvb://233a..4484;76bc"},{"namespace":"dvb:pcrid","value":"crid://fp.bbc.co.uk/b/3Q30S2"},{"namespace":"youview:schedule_event:id","value":"79d318f3-b41a-582d-b089-7b0172538b42"}],"transmission_time":"2022-03-19T23:30:00.000Z","transmission_end_time":"2022-03-20T01:20:00.000Z","broadcast_duration":6600,"broadcast_on":"hsxv","schedule_date":null,"repeat":null,"subtitled":true,"signed":null,"audio_described":false,"high_definition":null,"widescreen":null,"surround":null,"live":null,"premiere":null,"continuation":null,"new_series":null,"new_episode":null,"new_one_off":null,"revised_repeat":null,"blackout_restriction":{"all":false}},"item":{"id":"n72nsw","type":"item","display_title":{"title":"The Finest Hours (2016)","subtitle":null},"year":null,"media_type":"video","specialization":"tv","source":{"key":"api.youview.tv","name":"YouView JSON","country":"GB"},"title":"The Finest Hours (2016)","description":"Drama based on a true story, recounting one of history\'s most daring coastguard rescue attempts. Stranded on a sinking oil tanker along with 30 other sailors, engineer Ray Sybert battles to buy his crew more time as Captain Bernie Webber and three of his colleagues tackle gigantic waves and gale-force winds in their astonishing bid to save the seamen.","image":"https://images.metabroadcast.com?source=http%3A%2F%2Fimages-live.youview.tv%2Fimages%2Fentity%2F52172983%2Fprimary%2F1_1024x576.jpg%3Fdefaultimg%3D0&ETag=z7ucT5kdAq7HuNQf%2FGTEJg%3D%3D","thumbnail":null,"duration":null,"container":null}}]},"terms_and_conditions":{"text":"Specific terms and conditions in your agreement with MetaBroadcast, and with any data provider, apply to your use of this data, and associated systems."},"results":1,"request":{"path":"/4/schedules/hsxv.json","parameters":{"annotations":"content.description","from":"2022-03-20T00:00:00Z","to":"2022-03-21T00:00:00Z","source":"api.youview.tv","key":"b4d2edb68da14dfb9e47b5465e99b1b1"}}}' const result = parser({ content }).map(p => { p.start = p.start.toJSON() @@ -32,7 +32,8 @@ it('can parse response', () => { expect(result).toMatchObject([ { title: 'The Finest Hours (2016)', - description: `Drama based on a true story, recounting one of history's most daring coastguard rescue attempts. Stranded on a sinking oil tanker along with 30 other sailors, engineer Ray Sybert battles to buy his crew more time as Captain Bernie Webber and three of his colleagues tackle gigantic waves and gale-force winds in their astonishing bid to save the seamen.`, + description: + "Drama based on a true story, recounting one of history's most daring coastguard rescue attempts. Stranded on a sinking oil tanker along with 30 other sailors, engineer Ray Sybert battles to buy his crew more time as Captain Bernie Webber and three of his colleagues tackle gigantic waves and gale-force winds in their astonishing bid to save the seamen.", icon: 'https://images.metabroadcast.com?source=http%3A%2F%2Fimages-live.youview.tv%2Fimages%2Fentity%2F52172983%2Fprimary%2F1_1024x576.jpg%3Fdefaultimg%3D0&ETag=z7ucT5kdAq7HuNQf%2FGTEJg%3D%3D', season: null, episode: null, @@ -44,7 +45,8 @@ it('can parse response', () => { it('can handle empty guide', () => { const result = parser({ - content: `{"schedule":{"channel":{"title":"BBC One HD","id":"hsxv","uri":"http://api.youview.tv/channels/dvb://233a..4484","images":[{"uri":"https://images.metabroadcast.com?source=http%3A%2F%2Fimages-live.youview.tv%2Fimages%2Fentity%2F8c4c0357-d7ee-5d8a-8bc4-b177b6875128%2Fident%2F1_1024x532.png%3Fdefaultimg%3D0&ETag=r5vyecG6of%2BhCbHeEClx0Q%3D%3D","mime_type":"image/png","type":null,"color":"monochrome","theme":"light_monochrome","aspect_ratio":null,"availability_start":null,"availability_end":null,"width":1024,"height":532,"hasTitleArt":null,"source":null}],"available_from":[{"key":"api.youview.tv","name":"YouView JSON","country":"GB"}],"source":{"key":"api.youview.tv","name":"YouView JSON","country":"GB"},"same_as":[],"media_type":"video","broadcaster":null,"aliases":[{"namespace":"youview:serviceLocator","value":"dvb://233a..4484"},{"namespace":"youview:channel:id","value":"8c4c0357-d7ee-5d8a-8bc4-b177b6875128"}],"genres":[],"high_definition":true,"timeshifted":null,"regional":null,"related_links":[],"start_date":null,"advertised_from":null,"advertised_to":null,"short_description":null,"medium_description":null,"long_description":null,"region":null,"target_regions":[],"channel_type":"CHANNEL","interactive":false,"transmission_types":["DTT"],"quality":"HD","hdr":false},"source":"api.youview.tv","entries":[]},"terms_and_conditions":{"text":"Specific terms and conditions in your agreement with MetaBroadcast, and with any data provider, apply to your use of this data, and associated systems."},"results":1,"request":{"path":"/4/schedules/hsxv.json","parameters":{"annotations":"content.description","from":"2022-03-20T00:00:00Z","to":"2022-03-21T00:00:00Z","source":"api.youview.tv","key":"b4d2edb68da14dfb9e47b5465e99b1b1"}}}` + content: + '{"schedule":{"channel":{"title":"BBC One HD","id":"hsxv","uri":"http://api.youview.tv/channels/dvb://233a..4484","images":[{"uri":"https://images.metabroadcast.com?source=http%3A%2F%2Fimages-live.youview.tv%2Fimages%2Fentity%2F8c4c0357-d7ee-5d8a-8bc4-b177b6875128%2Fident%2F1_1024x532.png%3Fdefaultimg%3D0&ETag=r5vyecG6of%2BhCbHeEClx0Q%3D%3D","mime_type":"image/png","type":null,"color":"monochrome","theme":"light_monochrome","aspect_ratio":null,"availability_start":null,"availability_end":null,"width":1024,"height":532,"hasTitleArt":null,"source":null}],"available_from":[{"key":"api.youview.tv","name":"YouView JSON","country":"GB"}],"source":{"key":"api.youview.tv","name":"YouView JSON","country":"GB"},"same_as":[],"media_type":"video","broadcaster":null,"aliases":[{"namespace":"youview:serviceLocator","value":"dvb://233a..4484"},{"namespace":"youview:channel:id","value":"8c4c0357-d7ee-5d8a-8bc4-b177b6875128"}],"genres":[],"high_definition":true,"timeshifted":null,"regional":null,"related_links":[],"start_date":null,"advertised_from":null,"advertised_to":null,"short_description":null,"medium_description":null,"long_description":null,"region":null,"target_regions":[],"channel_type":"CHANNEL","interactive":false,"transmission_types":["DTT"],"quality":"HD","hdr":false},"source":"api.youview.tv","entries":[]},"terms_and_conditions":{"text":"Specific terms and conditions in your agreement with MetaBroadcast, and with any data provider, apply to your use of this data, and associated systems."},"results":1,"request":{"path":"/4/schedules/hsxv.json","parameters":{"annotations":"content.description","from":"2022-03-20T00:00:00Z","to":"2022-03-21T00:00:00Z","source":"api.youview.tv","key":"b4d2edb68da14dfb9e47b5465e99b1b1"}}}' }) expect(result).toMatchObject([]) }) diff --git a/sites/cablego.com.pe/cablego.com.pe.channels.xml b/sites/cablego.com.pe/cablego.com.pe.channels.xml index 0ceeaa32..71f22746 100644 --- a/sites/cablego.com.pe/cablego.com.pe.channels.xml +++ b/sites/cablego.com.pe/cablego.com.pe.channels.xml @@ -1,101 +1,99 @@ - - - AMERICA TV - ATV - ATV+ - BHTV - CONECTA2 TV - CONGRESO TV - DE PELICULA - DISTRITO COMEDIA - ECUADOR TV - EUROPA EUROPA - EXITOSA TV - GLOBAL - GOLDEN EDGE - KARIBEÑA - LATINA - NATIVA - OVACION - PANAMERICANA TV - PASIONES - PBO - TV PERU - USMP TV - VENUS - WILLAX - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AMERICA TV + ATV + ATV+ + BHTV + CONECTA2 TV + CONGRESO TV + DE PELICULA + DISTRITO COMEDIA + ECUADOR TV + EUROPA EUROPA + EXITOSA TV + GLOBAL + GOLDEN EDGE + KARIBEÑA + LATINA + NATIVA + OVACION + PANAMERICANA TV + PASIONES + PBO + TV PERU + USMP TV + VENUS + WILLAX + diff --git a/sites/cablego.com.pe/cablego.com.pe.test.js b/sites/cablego.com.pe/cablego.com.pe.test.js index e8846702..c1da93e9 100644 --- a/sites/cablego.com.pe/cablego.com.pe.test.js +++ b/sites/cablego.com.pe/cablego.com.pe.test.js @@ -1,5 +1,5 @@ // npm run channels:parse -- --config=./sites/cablego.com.pe/cablego.com.pe.config.js --output=./sites/cablego.com.pe/cablego.com.pe.channels.xml -// npx epg-grabber --config=sites/cablego.com.pe/cablego.com.pe.config.js --channels=sites/cablego.com.pe/cablego.com.pe.channels.xml --output=guide.xml --days=2 +// npm run grab -- --site=cablego.com.pe const { parser, url, request } = require('./cablego.com.pe.config.js') const fs = require('fs') diff --git a/sites/cableplus.com.uy/cableplus.com.uy.channels.xml b/sites/cableplus.com.uy/cableplus.com.uy.channels.xml index dd233e7a..a2c7e3b5 100644 --- a/sites/cableplus.com.uy/cableplus.com.uy.channels.xml +++ b/sites/cableplus.com.uy/cableplus.com.uy.channels.xml @@ -1,163 +1,161 @@ - - - 360 TV - A24 - AMERICA SPORTS - A+V - ARGENTINISIMA - BBC WORLD - BYUTV - SAETA - CANAL 26 - TV NACIONAL - CANAL 7 PUNTA DEL ESTE - CANAL RURAL - CARDINAL TV - CHARRUA TV - CLAN HD - CNN EN ESPAÑOL - CRONICA - DEUTSCHE WELLE (DEUTSCH+) - DW ESPAÑOL - CANAL DE LA REGIÓN - EL GARAGE - CANAL VASCO - FRANCE 24 ESPAÑOL - FRANCE 24 FRANCES - GALICIA TV - GOL TV - HBO MUNDI - HBO POP - HBO SIGNATURE - LA NACION + - MAROÑAS - PX SPORTS HD - RAI - RT TV - SIEMPRE CINE - SUN CHANNEL HD - TELEDOCE - TOONCAST - TRU TV - TEVECIUDAD - TVN CHILE - TV PUBLICA ARG - UCL - VTV - VTV + - WOBI TV - ZOOMOO - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 360 TV + A24 + AMERICA SPORTS + A+V + ARGENTINISIMA + BBC WORLD + BYUTV + SAETA + CANAL 26 + TV NACIONAL + CANAL 7 PUNTA DEL ESTE + CANAL RURAL + CARDINAL TV + CHARRUA TV + CLAN HD + CNN EN ESPAÑOL + CRONICA + DEUTSCHE WELLE (DEUTSCH+) + DW ESPAÑOL + CANAL DE LA REGIÓN + EL GARAGE + CANAL VASCO + FRANCE 24 ESPAÑOL + FRANCE 24 FRANCES + GALICIA TV + GOL TV + HBO MUNDI + HBO POP + HBO SIGNATURE + LA NACION + + MAROÑAS + PX SPORTS HD + RAI + RT TV + SIEMPRE CINE + SUN CHANNEL HD + TELEDOCE + TOONCAST + TRU TV + TEVECIUDAD + TVN CHILE + TV PUBLICA ARG + UCL + VTV + VTV + + WOBI TV + ZOOMOO + diff --git a/sites/cableplus.com.uy/cableplus.com.uy.config.js b/sites/cableplus.com.uy/cableplus.com.uy.config.js index 1b7df7fd..a47a7bbc 100644 --- a/sites/cableplus.com.uy/cableplus.com.uy.config.js +++ b/sites/cableplus.com.uy/cableplus.com.uy.config.js @@ -115,14 +115,14 @@ function parseItems(content, date) { let featuredItems = $('.vista-pc > .programacion-fila > .channel-programa') .filter(function () { - return $(this).find(`.grid_fecha_hora`).text().indexOf(date.format('DD-MM')) > -1 + return $(this).find('.grid_fecha_hora').text().indexOf(date.format('DD-MM')) > -1 }) .toArray() - let otherItems = $(`#owl-pc > .item-program`) + let otherItems = $('#owl-pc > .item-program') .filter(function () { return ( $(this) - .find(`.evento_titulo > .horario > p.fechaHora`) + .find('.evento_titulo > .horario > p.fechaHora') .text() .indexOf(date.format('DD/MM')) > -1 ) diff --git a/sites/cableplus.com.uy/cableplus.com.uy.test.js b/sites/cableplus.com.uy/cableplus.com.uy.test.js index 06459f4c..1608509d 100644 --- a/sites/cableplus.com.uy/cableplus.com.uy.test.js +++ b/sites/cableplus.com.uy/cableplus.com.uy.test.js @@ -1,5 +1,5 @@ // npm run channels:parse -- --config=./sites/cableplus.com.uy/cableplus.com.uy.config.js --output=./sites/cableplus.com.uy/cableplus.com.uy.channels.xml -// npx epg-grabber --config=sites/cableplus.com.uy/cableplus.com.uy.config.js --channels=sites/cableplus.com.uy/cableplus.com.uy.channels.xml --output=guide.xml --days=2 +// npm run grab -- --site=cableplus.com.uy const { parser, url, request } = require('./cableplus.com.uy.config.js') const fs = require('fs') @@ -53,7 +53,7 @@ it('can parse response', () => { expect(results[0]).toMatchObject({ start: '2023-02-12T09:30:00.000Z', stop: '2023-02-12T10:30:00.000Z', - title: `Revista agropecuaria`, + title: 'Revista agropecuaria', icon: 'https://www.reportv.com.ar/buscador/img/Programas/2797844.jpg', categories: [] }) @@ -61,7 +61,7 @@ it('can parse response', () => { expect(results[4]).toMatchObject({ start: '2023-02-12T12:30:00.000Z', stop: '2023-02-12T13:30:00.000Z', - title: `De pago en pago`, + title: 'De pago en pago', icon: 'https://www.reportv.com.ar/buscador/img/Programas/3772835.jpg', categories: ['Cultural'] }) diff --git a/sites/canalplus-caraibes.com/canalplus-caraibes.com.channels.xml b/sites/canalplus-caraibes.com/canalplus-caraibes.com.channels.xml index 070d6b35..0b820b01 100644 --- a/sites/canalplus-caraibes.com/canalplus-caraibes.com.channels.xml +++ b/sites/canalplus-caraibes.com/canalplus-caraibes.com.channels.xml @@ -1,132 +1,130 @@ - - - 6ter - 13ème Rue - Action - Alizés - A+ - ARTE Français - Automoto la chaîne - BBC World News Americas - Bblack! Caribbean - BeIn Sports 1 France - BeIn Sports 2 France - BeIn Sports 3 France - BeIn Sports Max 4 France - BeIn Sports Max 5 France - C8 - Canal 10 - Canal J - Canal + Caraïbes - Canal + Cinéma France - Canal + Kids - Canal + Séries France - Canal + Sport France - Cine + Classic - Cine + Club - Cine + Émotion - Cine + Famiz - Cine + Frisson - Cine + Premier - C News - CNN International Latin America - Comédie + - C Star - Discovery Channel France - Discovery Science France - Disney Channel France - Disney Junior France - Dorcel TV - E! France - English Club TV - Equidia - ES1 - ESPN 2 Caribbean - ESPN Caribbean - ETV - Eurosport 1 - Eurosport 2 - France 2 - France 3 - France 4 - France 5 - France 24 Français - Franceinfo: - Game One - Globo News - Golf + - Graphé TV - Guadeloupe 1ère - Gulli - Guyane 1ère - HBO Xtreme Latinoamérica - InfoSport + - IOTV - KMT - KTO - KTV Guyane - LCI - LCP Public Sénat - L'Équipe - Ludikids - M6 - Martinique 1ère - MCM France - Metropole - MTV France - MTV Hits France - National Geographic France - National Geographic Wild France - Nickelodeon France - Nick Jr Africa - Nollywood TV - Novelas TV - NRJ 12 - OCS choc - OCS City - OCS geants - OCS max - Paramount Channel France - Paris Première - Penthouse Black - Pink TV - Piwi + - Planète + - Planète + A&E - Planète + CI - RTL 9 - Seasons - - STVS 8.1 - Syfy France - Télé 20 - Telemicro Internacional - Telemundo - Tele Pacific - Tele Soleil - TéléToon + - Téva - TF 1 - TF 1 Séries Films - TFX - TMC - TNH - Toute l'Histoire - Trace Ayiti - Trace Caribbean - Trace Gospel - Trace Latina - Trace Urban - TV5Monde Amérique Latine - TV Breizh - Ushuaïa TV - ViàATV - Vixen - W9 - Wataaa TV - XXL - Zitata TV - Zouk TV - - \ No newline at end of file + + + 13ème Rue + 6ter + Action + Alizés + A+ + ARTE Français + Automoto la chaîne + BBC World News Americas + Bblack! Caribbean + BeIn Sports 1 France + BeIn Sports 2 France + BeIn Sports 3 France + BeIn Sports Max 4 France + BeIn Sports Max 5 France + C8 + Canal 10 + Canal J + Canal + Caraïbes + Canal + Cinéma France + Canal + Kids + Canal + Séries France + Canal + Sport France + Cine + Classic + Cine + Club + Cine + Émotion + Cine + Famiz + Cine + Frisson + Cine + Premier + C News + CNN International Latin America + Comédie + + C Star + Discovery Channel France + Discovery Science France + Disney Channel France + Disney Junior France + Dorcel TV + E! France + English Club TV + Equidia + ESPN 2 Caribbean + ESPN Caribbean + ETV + Eurosport 1 + Eurosport 2 + France 2 + France 24 Français + France 3 + France 4 + France 5 + Franceinfo: + Game One + Globo News + Golf + + Graphé TV + Guadeloupe 1ère + Gulli + Guyane 1ère + HBO Xtreme Latinoamérica + InfoSport + + IOTV + KMT + KTO + KTV Guyane + LCI + L'Équipe + Ludikids + M6 + Martinique 1ère + MCM France + Metropole + ES1 + MTV France + MTV Hits France + National Geographic France + National Geographic Wild France + Nickelodeon France + Nick Jr Africa + Nollywood TV + Novelas TV + NRJ 12 + OCS choc + OCS City + OCS geants + OCS max + Paramount Channel France + Paris Première + Penthouse Black + Pink TV + Piwi + + Planète + + Planète + A&E + Planète + CI + LCP Public Sénat + RTL 9 + Seasons + STVS 8.1 + Syfy France + Télé 20 + Telemicro Internacional + Telemundo + Tele Pacific + Tele Soleil + TéléToon + + Téva + TF 1 + TF 1 Séries Films + TFX + TMC + TNH + Toute l'Histoire + Trace Ayiti + Trace Caribbean + Trace Gospel + Trace Latina + Trace Urban + TV5Monde Amérique Latine + TV Breizh + Ushuaïa TV + ViàATV + Vixen + W9 + Wataaa TV + XXL + Zitata TV + Zouk TV + \ No newline at end of file diff --git a/sites/canalplus-caraibes.com/canalplus-caraibes.com.config.js b/sites/canalplus-caraibes.com/canalplus-caraibes.com.config.js index e229fa0b..33595d2f 100644 --- a/sites/canalplus-caraibes.com/canalplus-caraibes.com.config.js +++ b/sites/canalplus-caraibes.com/canalplus-caraibes.com.config.js @@ -2,7 +2,6 @@ const axios = require('axios') const cheerio = require('cheerio') const dayjs = require('dayjs') const utc = require('dayjs/plugin/utc') -const timezone = require('dayjs/plugin/timezone') dayjs.extend(utc) @@ -34,13 +33,13 @@ module.exports = { }, async channels() { const html = await axios - .get(`https://www.canalplus-caraibes.com/bl/guide-tv-ce-soir`) + .get('https://www.canalplus-caraibes.com/bl/guide-tv-ce-soir') .then(r => r.data) .catch(console.log) const $ = cheerio.load(html) const script = $('body > script:nth-child(2)').html() - const [_, json] = script.match(/window.APP_STATE=(.*);/) || [null, null] + const [, json] = script.match(/window.APP_STATE=(.*);/) || [null, null] const data = JSON.parse(json) const items = data.tvGuide.channels.byZapNumber diff --git a/sites/canalplus-caraibes.com/canalplus-caraibes.com.test.js b/sites/canalplus-caraibes.com/canalplus-caraibes.com.test.js index 1286336b..d2041367 100644 --- a/sites/canalplus-caraibes.com/canalplus-caraibes.com.test.js +++ b/sites/canalplus-caraibes.com/canalplus-caraibes.com.test.js @@ -1,5 +1,5 @@ // [Geo-blocked] node ./scripts/channels.js --config=./sites/canalplus-caraibes.com/canalplus-caraibes.com.config.js --output=./sites/canalplus-caraibes.com/canalplus-caraibes.com.channels.xml -// npx epg-grabber --config=sites/canalplus-caraibes.com/canalplus-caraibes.com.config.js --channels=sites/canalplus-caraibes.com/canalplus-caraibes.com.channels.xml --output=guide.xml --days=2 +// npm run grab -- --site=canalplus-caraibes.com const { parser, url } = require('./canalplus-caraibes.com.config.js') const axios = require('axios') @@ -31,7 +31,8 @@ it('can generate valid url for tomorrow', () => { }) it('can parse response', done => { - const content = `{"timeSlices":[{"contents":[{"title":"Rugby - Leinster / La Rochelle","subtitle":"Rugby","thirdTitle":"BEIN SPORTS 1 HD","startTime":1660815000,"endTime":1660816800,"onClick":{"displayTemplate":"miniDetail","displayName":"Rugby - Leinster / La Rochelle","URLPage":"https://service.canal-overseas.com/ott-frontend/vector/53001/event/140377765","URLVitrine":"https://service.canal-overseas.com/ott-frontend/vector/53001/program/224515801/recommendations"},"programID":224515801,"diffusionID":"140377765","URLImageDefault":"https://service.canal-overseas.com/image-api/v1/image/75fca4586fdc3458930dd1ab6fc2e643","URLImage":"https://service.canal-overseas.com/image-api/v1/image/7854e20fb6efecd398598653c57cc771"}],"timeSlice":"4"}]}` + const content = + '{"timeSlices":[{"contents":[{"title":"Rugby - Leinster / La Rochelle","subtitle":"Rugby","thirdTitle":"BEIN SPORTS 1 HD","startTime":1660815000,"endTime":1660816800,"onClick":{"displayTemplate":"miniDetail","displayName":"Rugby - Leinster / La Rochelle","URLPage":"https://service.canal-overseas.com/ott-frontend/vector/53001/event/140377765","URLVitrine":"https://service.canal-overseas.com/ott-frontend/vector/53001/program/224515801/recommendations"},"programID":224515801,"diffusionID":"140377765","URLImageDefault":"https://service.canal-overseas.com/image-api/v1/image/75fca4586fdc3458930dd1ab6fc2e643","URLImage":"https://service.canal-overseas.com/image-api/v1/image/7854e20fb6efecd398598653c57cc771"}],"timeSlice":"4"}]}' axios.get.mockImplementation(url => { if (url === 'https://service.canal-overseas.com/ott-frontend/vector/53001/event/140377765') { return Promise.resolve({ @@ -125,7 +126,8 @@ it('can parse response', done => { it('can handle empty guide', done => { parser({ - content: `{"currentPage":{"displayTemplate":"error","BOName":"Page introuvable"},"title":"Page introuvable","text":"La page que vous demandez est introuvable. Si le problème persiste, vous pouvez contacter l'assistance de CANAL+/CANALSAT.","code":404}` + content: + '{"currentPage":{"displayTemplate":"error","BOName":"Page introuvable"},"title":"Page introuvable","text":"La page que vous demandez est introuvable. Si le problème persiste, vous pouvez contacter l\'assistance de CANAL+/CANALSAT.","code":404}' }) .then(result => { expect(result).toMatchObject([]) diff --git a/sites/canalplus-haiti.com/canalplus-haiti.com.channels.xml b/sites/canalplus-haiti.com/canalplus-haiti.com.channels.xml index c17e7664..0216e59c 100644 --- a/sites/canalplus-haiti.com/canalplus-haiti.com.channels.xml +++ b/sites/canalplus-haiti.com/canalplus-haiti.com.channels.xml @@ -1,117 +1,115 @@ - - - 6ter - 13ème Rue - Action - Alizés - A+ - Automoto la chaîne - BBC World News Americas - Bblack! Caribbean - C8 - Canal 10 - Canal + Cinéma France - Canal + Haïti - Canal + Kids - Canal + Sport France - Cine + Classic - Cine + Club - Cine + Émotion - Cine + Famiz - Cine + Frisson - Cine + Premier - C News - CNN International Latin America - Comédie + - C Star - Cuisines - Discovery Channel France - Discovery Science France - Disney Channel France - Disney Junior France - Dorcel TV Africa - E! France - English Club TV - ES1 - ESPN 2 Caribbean - ESPN Caribbean - ETV - Eurosport 1 - Eurosport 2 - France 2 - France 3 - France 5 - France 24 Français - Franceinfo: - Game One - Globo News - Graphé TV - Guadeloupe 1ère - Guyane 1ère - Haiti Sports TV 1 - Haiti Sports TV 2 - HBO Xtreme Latinoamérica - InfoSport + - IOTV - KMT - KTO - KTV Guyane - LCI - LCP Public Sénat - L'Équipe - Ludikids - M6 - Martinique 1ère - MCM France - Metropole - MTV France - MTV Hits France - Nathan TV - National Geographic France - National Geographic Wild France - Nickelodeon France - Nick Jr Africa - Nollywood TV - Novelas TV - NRJ 12 - Paramount Channel France - Paris Première - Penthouse Black - Piwi + - Planète + - Planète + A&E - Planète + CI - RTL 9 - Seasons - - Studiocanal - STVS 8.1 - Syfy France - Télé 20 - Telemicro Internacional - Telemundo - Tele Pacific - Tele Soleil - TéléToon + - TF 1 - TF 1 Séries Films - TFX - TNH - Toute l'Histoire - Trace Ayiti - Trace Caribbean - Trace Gospel - Trace Latina - Trace Urban - TV5Monde Amérique Latine - TV Caraïbes - Ushuaïa TV - ViàATV - Vixen - Wataaa TV - XXL - Zitata TV - Zouk TV - - \ No newline at end of file + + + 13ème Rue + 6ter + Action + Alizés + A+ + Automoto la chaîne + BBC World News Americas + Bblack! Caribbean + C8 + Canal 10 + Canal + Cinéma France + Canal + Haïti + Canal + Kids + Canal + Sport France + Cine + Classic + Cine + Club + Cine + Émotion + Cine + Famiz + Cine + Frisson + Cine + Premier + C News + CNN International Latin America + Comédie + + C Star + Cuisines + Discovery Channel France + Discovery Science France + Disney Channel France + Disney Junior France + Dorcel TV Africa + E! France + English Club TV + ESPN 2 Caribbean + ESPN Caribbean + ETV + Eurosport 1 + Eurosport 2 + France 2 + France 24 Français + France 3 + France 5 + Franceinfo: + Game One + Globo News + Graphé TV + Guadeloupe 1ère + Guyane 1ère + Haiti Sports TV 1 + Haiti Sports TV 2 + HBO Xtreme Latinoamérica + InfoSport + + IOTV + KMT + KTO + KTV Guyane + LCI + L'Équipe + Ludikids + M6 + Martinique 1ère + MCM France + Metropole + ES1 + MTV France + MTV Hits France + Nathan TV + National Geographic France + National Geographic Wild France + Nickelodeon France + Nick Jr Africa + Nollywood TV + Novelas TV + NRJ 12 + Paramount Channel France + Paris Première + Penthouse Black + Piwi + + Planète + + Planète + A&E + Planète + CI + LCP Public Sénat + RTL 9 + Seasons + Studiocanal + STVS 8.1 + Syfy France + Télé 20 + Telemicro Internacional + Telemundo + Tele Pacific + Tele Soleil + TéléToon + + TF 1 + TF 1 Séries Films + TFX + TNH + Toute l'Histoire + Trace Ayiti + Trace Caribbean + Trace Gospel + Trace Latina + Trace Urban + TV5Monde Amérique Latine + TV Caraïbes + Ushuaïa TV + ViàATV + Vixen + Wataaa TV + XXL + Zitata TV + Zouk TV + \ No newline at end of file diff --git a/sites/canalplus-haiti.com/canalplus-haiti.com.config.js b/sites/canalplus-haiti.com/canalplus-haiti.com.config.js index 89279868..86b1aff5 100644 --- a/sites/canalplus-haiti.com/canalplus-haiti.com.config.js +++ b/sites/canalplus-haiti.com/canalplus-haiti.com.config.js @@ -33,13 +33,13 @@ module.exports = { }, async channels() { const html = await axios - .get(`https://www.canalplus-haiti.com/guide-tv-ce-soir`) + .get('https://www.canalplus-haiti.com/guide-tv-ce-soir') .then(r => r.data) .catch(console.log) const $ = cheerio.load(html) const script = $('body > script:nth-child(2)').html() - const [_, json] = script.match(/window.APP_STATE=(.*);/) || [null, null] + const [, json] = script.match(/window.APP_STATE=(.*);/) || [null, null] const data = JSON.parse(json) const items = data.tvGuide.channels.byZapNumber diff --git a/sites/canalplus-haiti.com/canalplus-haiti.com.test.js b/sites/canalplus-haiti.com/canalplus-haiti.com.test.js index f24e77b5..16d1d1d6 100644 --- a/sites/canalplus-haiti.com/canalplus-haiti.com.test.js +++ b/sites/canalplus-haiti.com/canalplus-haiti.com.test.js @@ -1,5 +1,5 @@ -// [Geo-blocked] npm run channels:parse --config=./sites/canalplus-haiti.com/canalplus-haiti.com.config.js --output=./sites/canalplus-haiti.com/canalplus-haiti.com.channels.xml -// npx epg-grabber --config=sites/canalplus-haiti.com/canalplus-haiti.com.config.js --channels=sites/canalplus-haiti.com/canalplus-haiti.com.channels.xml --output=guide.xml --days=2 +// [Geo-blocked] npm run channels:parse -- --config=./sites/canalplus-haiti.com/canalplus-haiti.com.config.js --output=./sites/canalplus-haiti.com/canalplus-haiti.com.channels.xml +// npm run grab -- --site=canalplus-haiti.com const { parser, url } = require('./canalplus-haiti.com.config.js') const axios = require('axios') @@ -165,7 +165,8 @@ it('can parse response', done => { it('can handle empty guide', done => { parser({ - content: `{"currentPage":{"displayTemplate":"error","BOName":"Page introuvable"},"title":"Page introuvable","text":"La page que vous demandez est introuvable. Si le problème persiste, vous pouvez contacter l'assistance de CANAL+/CANALSAT.","code":404}` + content: + '{"currentPage":{"displayTemplate":"error","BOName":"Page introuvable"},"title":"Page introuvable","text":"La page que vous demandez est introuvable. Si le problème persiste, vous pouvez contacter l\'assistance de CANAL+/CANALSAT.","code":404}' }) .then(result => { expect(result).toMatchObject([]) diff --git a/sites/canalplus-reunion.com/canalplus-reunion.com.channels.xml b/sites/canalplus-reunion.com/canalplus-reunion.com.channels.xml index 7e1653c7..f434f958 100644 --- a/sites/canalplus-reunion.com/canalplus-reunion.com.channels.xml +++ b/sites/canalplus-reunion.com/canalplus-reunion.com.channels.xml @@ -1,123 +1,121 @@ - - - 6ter - 13ème Rue - Action - Antenne Réunion TV - A+ - ARTE Français - Automoto la chaîne - BBC World News Africa - BeIn Sports 1 France - BeIn Sports 2 France - BeIn Sports 3 France - C8 - Canal + Cinéma Réunion - Canal + Décalé - Canal + Kids - Canal + Réunion - Canal + Séries Réunion - Canal + Sport Réunion - CGTN Français - Cine + Classic - Cine + Club - Cine + Émotion - Cine + Famiz - Cine + Frisson - Cine + Premier - C News - Colmax TV - Colors - Comédie + - C Star - Discovery Channel France - Discovery Science France - Disney Channel France - Disney Junior France - Dorcel TV Africa - E! France - English Club TV - Equidia - Eurosport 1 France - Eurosport 2 France - France 2 - France 3 - France 4 - France 5 - France 24 Français - Franceinfo: - Game One - Golf + - Gulli - Histoire TV - InfoSport + - Iqraa Africa & Europe - Kanal Austral TV - Kolo TV - KTO - Kwezi TV - LCI - LCP Assemblée Nationale - L'Équipe - Ludikids - M6 - Mayotte 1ère - MBS - Mezzo - MTV France - MTV Hits France - MTV India - National Geographic France - National Geographic Wild France - Nickelodeon France - Nickelodeon Junior France - Nollywood TV - Novegasy - Novelas TV - NRJ 12 - OCS choc - OCS City - OCS geants - OCS max - ORTC TV - Paramount Channel France - Paris Première - Penthouse Black - Piwi + - Planète + - Planète + A&E - Planète + CI - Réunion 1ère - RFM TV - RTA - RTL 9 - Seasons - Série Club - Syfy France - Télé Kréol - TéléToon + - Téva - TF 1 - TF 1 Séries Films - TFX - TMC - Trace Caribbean - Trace Urban Afrique - Trace Vanilla Islands - Trek - TV5Monde Afrique - TV Breizh - TV Malagasy - TV Plus Madagascar - TV Record Madagascar - Ushuaïa TV - Vixen - W9 - Wataaa TV - XXL - Zee Cinema Africa - Zee TV Africa - Zing UK - - \ No newline at end of file + + 13ème Rue + 6ter + Action + Antenne Réunion TV + A+ + ARTE Français + Automoto la chaîne + BBC World News Africa + BeIn Sports 1 France + BeIn Sports 2 France + BeIn Sports 3 France + C8 + Canal + Cinéma Réunion + Canal + Décalé + Canal + Kids + Canal + Réunion + Canal + Séries Réunion + Canal + Sport Réunion + CGTN Français + Cine + Classic + Cine + Club + Cine + Émotion + Cine + Famiz + Cine + Frisson + Cine + Premier + C News + Colmax TV + Colors + Comédie + + C Star + Discovery Channel France + Discovery Science France + Disney Channel France + Disney Junior France + Dorcel TV Africa + E! France + English Club TV + Equidia + Eurosport 1 France + Eurosport 2 France + France 2 + France 24 Français + France 3 + France 4 + France 5 + Franceinfo: + Game One + Golf + + Gulli + Histoire TV + InfoSport + + Iqraa Africa & Europe + Kanal Austral TV + Kolo TV + KTO + Kwezi TV + LCI + LCP Assemblée Nationale + L'Équipe + Ludikids + M6 + Mayotte 1ère + MBS + Mezzo + MTV France + MTV Hits France + MTV India + National Geographic France + National Geographic Wild France + Nickelodeon France + Nickelodeon Junior France + Nollywood TV + Novegasy + Novelas TV + NRJ 12 + OCS choc + OCS City + OCS geants + OCS max + ORTC TV + Paramount Channel France + Paris Première + Penthouse Black + Piwi + + Planète + + Planète + A&E + Planète + CI + Réunion 1ère + RFM TV + RTA + RTL 9 + Seasons + Série Club + Syfy France + Télé Kréol + TéléToon + + Téva + TF 1 + TF 1 Séries Films + TFX + TMC + Trace Caribbean + Trace Urban Afrique + Trace Vanilla Islands + Trek + TV5Monde Afrique + TV Breizh + TV Malagasy + TV Plus Madagascar + TV Record Madagascar + Ushuaïa TV + Vixen + W9 + Wataaa TV + XXL + Zee Cinema Africa + Zee TV Africa + Zing UK + \ No newline at end of file diff --git a/sites/canalplus-reunion.com/canalplus-reunion.com.test.js b/sites/canalplus-reunion.com/canalplus-reunion.com.test.js index 52772577..c6b2cb39 100644 --- a/sites/canalplus-reunion.com/canalplus-reunion.com.test.js +++ b/sites/canalplus-reunion.com/canalplus-reunion.com.test.js @@ -1,4 +1,4 @@ -// npx epg-grabber --config=sites/canalplus-reunion.com/canalplus-reunion.com.config.js --channels=sites/canalplus-reunion.com/canalplus-reunion.com.channels.xml --output=guide.xml --days=2 +// npm run grab -- --site=canalplus-reunion.com const { parser, url } = require('./canalplus-reunion.com.config.js') const axios = require('axios') @@ -149,7 +149,8 @@ it('can parse response', done => { it('can handle empty guide', done => { parser({ - content: `{"currentPage":{"displayTemplate":"error","BOName":"Page introuvable"},"title":"Page introuvable","text":"La page que vous demandez est introuvable. Si le problème persiste, vous pouvez contacter l'assistance de CANAL+/CANALSAT.","code":404}` + content: + '{"currentPage":{"displayTemplate":"error","BOName":"Page introuvable"},"title":"Page introuvable","text":"La page que vous demandez est introuvable. Si le problème persiste, vous pouvez contacter l\'assistance de CANAL+/CANALSAT.","code":404}' }) .then(result => { expect(result).toMatchObject([]) diff --git a/sites/canalplus.com/canalplus.com.channels.xml b/sites/canalplus.com/canalplus.com.channels.xml index f704a374..45e12803 100644 --- a/sites/canalplus.com/canalplus.com.channels.xml +++ b/sites/canalplus.com/canalplus.com.channels.xml @@ -1,326 +1,324 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - AL JAZEERA ENG - BBC WORLD NEWS - CNN INT. - FRANCE 24 ENG - NHK WORLD-JAPAN - 2STV - 6TER - AB1 - ACTION - AL JAZEERA ENG - ALTICE STUDIO - ANIMAUX - ARIRANG TV - ARTE - ASTROCENTER TV - AUTOMOTO LA CHAINE - BEIN SPORTS 1 - BEIN SPORTS 2 - BEIN SPORTS 3 - BEIN SPORTS MAX 10 - BEIN SPORTS MAX 4 - BEIN SPORTS MAX 5 - BEIN SPORTS MAX 6 - BEIN SPORTS MAX 7 - BEIN SPORTS MAX 8 - BEIN SPORTS MAX 9 - BET - BFM BUSINESS - BFM TV - BLOOMBERG TV - BLUE ZOOM - BOING - BOOMERANG - BSMART TV - C8 - CANAL ALPHA NE - CANAL J - CANAL+CINEMA - CANAL+DOCS - CANAL+FOOT - CANAL+FORMULA1 - CANAL+ - CANAL+GRAND ECRAN - CANAL+KIDS - CANAL+MOTOGP - CANAL+PREMIER LEAGUE - CANAL+SERIES - CANAL+ SPORT 2 (CH) - CANAL+SPORT360 - CANAL+SPORT - CANAL+TOP14 - CARTOON NETWORK - CHASSE ET PECHE - CHERIE 25 - CINE+ CLASSIC - CINE+ CLUB - CINE+ EMOTION - CINE+ FAMIZ - CINE+ FRISSON - CINE+ PREMIER - CLIQUE TV - CNBC - CNEWS - COLMAX TV - COMEDIE+ - COMEDY CENTRAL - CSTAR - CSTAR HITS FRANCE - ARD DAS ERSTE - DISNEY CHANNEL - DISNEY CHANNEL+1 - DISNEY JUNIOR - DORA TV - DORCEL TV - DORCEL XXX - EQUIDIA - EURONEWS - EUROSPORT 1 - EUROSPORT 2 - EUROSPORT 3 - EUROSPORT 360 1 - EUROSPORT 360 2 - EUROSPORT 360 3 - EUROSPORT 360 4 - EUROSPORT 360 5 - EUROSPORT 360 6 - EUROSPORT 360 7 - EUROSPORT 360 8 - EUROSPORT 4 - EUROSPORT 5 - EUROSPORT 6 - EUROSPORT 7 - EUROSPORT 8 - EUROSPORT 9 - FOOT+ 24/24 - FRANCE 2 - FRANCE 24 ENG - FRANCE 24 - FRANCE 3 - F3 ALPES - F3 ALSACE - F3 AQUITAINE - F3 AUVERGNE - F3 BNORMANDIE - F3 BOURGOGNE - F3 BRETAGNE - F3 CENTRE - F3 CHAMP ARDENNE - F3 CORSEVIASTELLA - F3 COTE D'AZUR - F3 FRANCHE COMTE - F3 HNORMANDIE - F3 LANGUEDOCROU - F3 LIMOUSIN - F3 LORRAINE - F3 MIDI PYRENEES - F3 NORD PDC - F3 NOUVELLE AQUITAINE - F3 PARIS IDF - F3 PAYS DE LA LOIRE - F3 PICARDIE - F3 POITOUCHAR - F3 PROV ALPES - F3 RHONE ALPES - FRANCE 4 - FRANCE 5 - FRANCEINFO: - GAME ONE - GOLF+ - GULLI - HISTOIRE TV - I24 NEWS - INFOSPORT+ - JACQUIE & MICHEL TV - J-ONE - LA CHAINE METEO - LA TELE - LCI - LCP - LEMAN BLEU - L'EQUIPE - LFM TV - M6 - M6 MUSIC - MANGAS - MAN X - MCM - MELODY - MEZZO - MEZZO LIVE - MGG TV - MTV - MTV HITS - MULTISPORTS 1 - MULTISPORTS 2 - MULTISPORTS 3 - MULTISPORTS 4 - MULTISPORTS 5 - MULTISPORTS 6 - MUSEUM - MY ZEN TV - NATIONAL GEO - NATIONAL GEOGRAPHIC WILD - NHK WORLD-JAPAN - NICKELODEON - NICKELODEON JUNIOR - NICKELODEON TEEN - NOLLYWOOD TV - NON STOP PEOPLE - NOVELAS TV - NRJ 12 - NRJ HITS - OCS CHOC - OCS CITY - OCS GEANTS - OCS MAX - OLYMPIA TV - ONE TV - ORF 1 - PARAMOUNT CHANNEL - PARIS PREMIERE - PENTHOUSE BLACK - PENTHOUSE - PINK X - PIWI+ - PLANETE+ - PLANETE+AVENTURE - PLANETE+CRIME - POLAR+ - RAI UNO - RFM TV - RMC DECOUVERTE - RMC SPORT 1 - RMC SPORT 2 - RMC SPORT 3 - RMC SPORT 4 - RMC SPORT LIVE 10 - RMC SPORT LIVE 11 - RMC SPORT LIVE 12 - RMC SPORT LIVE 13 - RMC SPORT LIVE 14 - RMC SPORT LIVE 5 - RMC SPORT LIVE 6 - RMC SPORT LIVE 7 - RMC SPORT LIVE 8 - RMC SPORT LIVE 9 - RMC STORY - ROUGE TV - RT FRANCE - RTL9 - SCIENCE ET VIE TV - SEASONS - SERIE CLUB - SRF 1 - CLASSICA - DJAZZ - TCM CINEMA - TELEBIELINGUE - TELETOON+ - TELETOON+1 - TEVA - TF1 - TF1 SERIES FILMS - TFX - TIJI - TMC - TOONAMI - TOUTE L'HISTOIRE - TRACE AFRICA - TRACE LATINA - TRACE URBAN - TV5 MONDE - TV BREIZH - USHUAIA TV - VICE TV - VIXEN - W9 - WARNER TV - XXL - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AL JAZEERA ENG + BBC WORLD NEWS + CNN INT. + FRANCE 24 ENG + NHK WORLD-JAPAN + 2STV + 6TER + AB1 + ACTION + AL JAZEERA ENG + ALTICE STUDIO + ANIMAUX + ARIRANG TV + ARTE + ASTROCENTER TV + AUTOMOTO LA CHAINE + BEIN SPORTS 1 + BEIN SPORTS 2 + BEIN SPORTS 3 + BEIN SPORTS MAX 10 + BEIN SPORTS MAX 4 + BEIN SPORTS MAX 5 + BEIN SPORTS MAX 6 + BEIN SPORTS MAX 7 + BEIN SPORTS MAX 8 + BEIN SPORTS MAX 9 + BET + BFM BUSINESS + BFM TV + BLOOMBERG TV + BLUE ZOOM + BOING + BOOMERANG + BSMART TV + C8 + CANAL ALPHA NE + CANAL J + CANAL+CINEMA + CANAL+DOCS + CANAL+FOOT + CANAL+FORMULA1 + CANAL+ + CANAL+GRAND ECRAN + CANAL+KIDS + CANAL+MOTOGP + CANAL+PREMIER LEAGUE + CANAL+SERIES + CANAL+ SPORT 2 (CH) + CANAL+SPORT360 + CANAL+SPORT + CANAL+TOP14 + CARTOON NETWORK + CHASSE ET PECHE + CHERIE 25 + CINE+ CLASSIC + CINE+ CLUB + CINE+ EMOTION + CINE+ FAMIZ + CINE+ FRISSON + CINE+ PREMIER + CLIQUE TV + CNBC + CNEWS + COLMAX TV + COMEDIE+ + COMEDY CENTRAL + CSTAR + CSTAR HITS FRANCE + ARD DAS ERSTE + DISNEY CHANNEL + DISNEY CHANNEL+1 + DISNEY JUNIOR + DORA TV + DORCEL TV + DORCEL XXX + EQUIDIA + EURONEWS + EUROSPORT 1 + EUROSPORT 2 + EUROSPORT 3 + EUROSPORT 360 1 + EUROSPORT 360 2 + EUROSPORT 360 3 + EUROSPORT 360 4 + EUROSPORT 360 5 + EUROSPORT 360 6 + EUROSPORT 360 7 + EUROSPORT 360 8 + EUROSPORT 4 + EUROSPORT 5 + EUROSPORT 6 + EUROSPORT 7 + EUROSPORT 8 + EUROSPORT 9 + FOOT+ 24/24 + FRANCE 2 + FRANCE 24 ENG + FRANCE 24 + FRANCE 3 + F3 ALPES + F3 ALSACE + F3 AQUITAINE + F3 AUVERGNE + F3 BNORMANDIE + F3 BOURGOGNE + F3 BRETAGNE + F3 CENTRE + F3 CHAMP ARDENNE + F3 CORSEVIASTELLA + F3 COTE D'AZUR + F3 FRANCHE COMTE + F3 HNORMANDIE + F3 LANGUEDOCROU + F3 LIMOUSIN + F3 LORRAINE + F3 MIDI PYRENEES + F3 NORD PDC + F3 NOUVELLE AQUITAINE + F3 PARIS IDF + F3 PAYS DE LA LOIRE + F3 PICARDIE + F3 POITOUCHAR + F3 PROV ALPES + F3 RHONE ALPES + FRANCE 4 + FRANCE 5 + FRANCEINFO: + GAME ONE + GOLF+ + GULLI + HISTOIRE TV + I24 NEWS + INFOSPORT+ + JACQUIE & MICHEL TV + J-ONE + LA CHAINE METEO + LA TELE + LCI + LCP + LEMAN BLEU + L'EQUIPE + LFM TV + M6 + M6 MUSIC + MANGAS + MAN X + MCM + MELODY + MEZZO + MEZZO LIVE + MGG TV + MTV + MTV HITS + MULTISPORTS 1 + MULTISPORTS 2 + MULTISPORTS 3 + MULTISPORTS 4 + MULTISPORTS 5 + MULTISPORTS 6 + MUSEUM + MY ZEN TV + NATIONAL GEO + NATIONAL GEOGRAPHIC WILD + NHK WORLD-JAPAN + NICKELODEON + NICKELODEON JUNIOR + NICKELODEON TEEN + NOLLYWOOD TV + NON STOP PEOPLE + NOVELAS TV + NRJ 12 + NRJ HITS + OCS CHOC + OCS CITY + OCS GEANTS + OCS MAX + OLYMPIA TV + ONE TV + ORF 1 + PARAMOUNT CHANNEL + PARIS PREMIERE + PENTHOUSE BLACK + PENTHOUSE + PINK X + PIWI+ + PLANETE+ + PLANETE+AVENTURE + PLANETE+CRIME + POLAR+ + RAI UNO + RFM TV + RMC DECOUVERTE + RMC SPORT 1 + RMC SPORT 2 + RMC SPORT 3 + RMC SPORT 4 + RMC SPORT LIVE 10 + RMC SPORT LIVE 11 + RMC SPORT LIVE 12 + RMC SPORT LIVE 13 + RMC SPORT LIVE 14 + RMC SPORT LIVE 5 + RMC SPORT LIVE 6 + RMC SPORT LIVE 7 + RMC SPORT LIVE 8 + RMC SPORT LIVE 9 + RMC STORY + ROUGE TV + RT FRANCE + RTL9 + SCIENCE ET VIE TV + SEASONS + SERIE CLUB + SRF 1 + CLASSICA + DJAZZ + TCM CINEMA + TELEBIELINGUE + TELETOON+ + TELETOON+1 + TEVA + TF1 + TF1 SERIES FILMS + TFX + TIJI + TMC + TOONAMI + TOUTE L'HISTOIRE + TRACE AFRICA + TRACE LATINA + TRACE URBAN + TV5 MONDE + TV BREIZH + USHUAIA TV + VICE TV + VIXEN + W9 + WARNER TV + XXL + diff --git a/sites/canalplus.com/canalplus.com.config.js b/sites/canalplus.com/canalplus.com.config.js index 0b38a6ef..1d719e26 100644 --- a/sites/canalplus.com/canalplus.com.config.js +++ b/sites/canalplus.com/canalplus.com.config.js @@ -66,7 +66,6 @@ module.exports = { gm: 'https://secure-webtv-static.canal-plus.com/metadata/cpafr/gm/all/v2.2/globalchannels.json', gn: 'https://secure-webtv-static.canal-plus.com/metadata/cpafr/gn/all/v2.2/globalchannels.json', gp: 'https://secure-webtv-static.canal-plus.com/metadata/cpafr/gp/all/v2.2/globalchannels.json', - gp: 'https://secure-webtv-static.canal-plus.com/metadata/cpant/gp/all/v2.2/globalchannels.json', gw: 'https://secure-webtv-static.canal-plus.com/metadata/cpafr/gw/all/v2.2/globalchannels.json', mf: 'https://secure-webtv-static.canal-plus.com/metadata/cpant/mf/all/v2.2/globalchannels.json', mg: 'https://secure-webtv-static.canal-plus.com/metadata/cpafr/mg/all/v2.2/globalchannels.json', diff --git a/sites/canalplus.com/canalplus.com.test.js b/sites/canalplus.com/canalplus.com.test.js index b6c35b71..7b905e5b 100644 --- a/sites/canalplus.com/canalplus.com.test.js +++ b/sites/canalplus.com/canalplus.com.test.js @@ -1,5 +1,5 @@ // npm run channels:parse -- --config=./sites/canalplus.com/canalplus.com.config.js --output=./sites/canalplus.com/canalplus.com.channels.xml -// npx epg-grabber --config=sites/canalplus.com/canalplus.com.config.js --channels=sites/canalplus.com/canalplus.com.channels.xml --output=guide.xml +// npm run grab -- --site=canalplus.com const { parser, url } = require('./canalplus.com.config.js') const fs = require('fs') @@ -97,7 +97,8 @@ it('can parse response', done => { start: '2023-01-12T06:28:00.000Z', stop: '2023-01-12T12:06:00.000Z', title: 'Le cercle', - description: `Tant qu'il y aura du cinéma, LE CERCLE sera là. C'est la seule émission télévisée de débats critiques 100% consacrée au cinéma et elle rentre dans sa 18e saison. Chaque semaine, elle offre des joutes enflammées, joyeuses et sans condescendance, sur les films à l'affiche ; et invite avec \"Le questionnaire du CERCLE\" les réalisatrices et réalisateurs à venir partager leur passion cinéphile.`, + description: + "Tant qu'il y aura du cinéma, LE CERCLE sera là. C'est la seule émission télévisée de débats critiques 100% consacrée au cinéma et elle rentre dans sa 18e saison. Chaque semaine, elle offre des joutes enflammées, joyeuses et sans condescendance, sur les films à l'affiche ; et invite avec \"Le questionnaire du CERCLE\" les réalisatrices et réalisateurs à venir partager leur passion cinéphile.", icon: 'https://thumb.canalplus.pro/http/unsafe/{resolutionXY}/filters:quality({imageQualityPercentage})/img-hapi.canalplus.pro:80/ServiceImage/ImageID/107297573', presenter: ['Lily Bloom'], rating: { @@ -109,7 +110,8 @@ it('can parse response', done => { start: '2023-01-12T12:06:00.000Z', stop: '2023-01-12T13:06:00.000Z', title: 'Illusions perdues', - description: `Pendant la Restauration, Lucien de Rubempré, jeune provincial d'Angoulême, se rêve poète. Il débarque à Paris en quête de gloire. Il a le soutien de Louise de Bargeton, une aristocrate qui croit en son talent. Pour gagner sa vie, Lucien trouve un emploi dans le journal dirigé par le peu scrupuleux Etienne Lousteau...`, + description: + "Pendant la Restauration, Lucien de Rubempré, jeune provincial d'Angoulême, se rêve poète. Il débarque à Paris en quête de gloire. Il a le soutien de Louise de Bargeton, une aristocrate qui croit en son talent. Pour gagner sa vie, Lucien trouve un emploi dans le journal dirigé par le peu scrupuleux Etienne Lousteau...", icon: 'https://thumb.canalplus.pro/http/unsafe/{resolutionXY}/filters:quality({imageQualityPercentage})/img-hapi.canalplus.pro:80/ServiceImage/ImageID/107356485', director: ['Xavier Giannoli'], actors: [ diff --git a/sites/cgates.lt/cgates.lt.channels.xml b/sites/cgates.lt/cgates.lt.channels.xml index 1200dd34..663bf1a2 100644 --- a/sites/cgates.lt/cgates.lt.channels.xml +++ b/sites/cgates.lt/cgates.lt.channels.xml @@ -1,124 +1,122 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Baby TV - BBC World News - Bloomberg Television - CBS Reality - CNBC Europe - CNN International - Discovery Channel HD - DocuBox HD - Duo 3 HD - Duo 6 HD - Epic Drama HD - Eurochannel - Euronews RU - Extreme Sports - Fashion TV - Fast&Fun Box HD - Fight Sports HD - FilmBox ArtHouse - FilmZone - France 24 - Game Toon HD - Jim Jam - KidZone Mini HD - KidZone TV - Luxe.TV HD - Mezzo - MTV 00s - MTV Hits - Playboy TV - Setanta Sports 1 HD - Smartzone HD - TV 1000 Action - TV 1000 - TV 1000 World Kino - TV3 Sport HD - TV3 Sport 2 HD - TV3 Sport Open HD - Vivid Touch - 1+1 - 1+2 - 2TV - 36.6 TV - Arirang TV - Balticum Auksinis - Balticum Platinum HD - Balticum TV - Blue Hustler - BTV HD - Nastojashcheje Vremya - Dacha - Delfi TV HD - Kanal 7 - Dzūkijos TV - Film UA Drama - FilmZone+ HD - TV3 Film HD - Gulli Girl - Info TV HD - Inter+ - Kus-Kus - Lietuvos ryto TV HD - LNK HD - LRT Lituanica - LRT Plius HD - LRT Televizija HD - Marijampolės TV - Šiaulių televizija - Sport 1 HD - Star Cinema - Star Family - Tiji - TV1 HD - TV3 HD - TV3 Plus HD - TV6 HD - TV8 HD - Bolt - TVP Info - TVP Polonia - ViP Comedy - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Baby TV + BBC World News + Bloomberg Television + CBS Reality + CNBC Europe + CNN International + Discovery Channel HD + DocuBox HD + Duo 3 HD + Duo 6 HD + Epic Drama HD + Eurochannel + Euronews RU + Extreme Sports + Fashion TV + Fast&Fun Box HD + Fight Sports HD + FilmBox ArtHouse + FilmZone + France 24 + Game Toon HD + Jim Jam + KidZone Mini HD + KidZone TV + Luxe.TV HD + Mezzo + MTV 00s + MTV Hits + Playboy TV + Setanta Sports 1 HD + Smartzone HD + TV 1000 Action + TV 1000 + TV 1000 World Kino + TV3 Sport HD + TV3 Sport 2 HD + TV3 Sport Open HD + Vivid Touch + 1+1 + 1+2 + 2TV + 36.6 TV + Arirang TV + Balticum Auksinis + Balticum Platinum HD + Balticum TV + Blue Hustler + BTV HD + Nastojashcheje Vremya + Dacha + Delfi TV HD + Kanal 7 + Dzūkijos TV + Film UA Drama + FilmZone+ HD + TV3 Film HD + Gulli Girl + Info TV HD + Inter+ + Kus-Kus + Lietuvos ryto TV HD + LNK HD + LRT Lituanica + LRT Plius HD + LRT Televizija HD + Marijampolės TV + Šiaulių televizija + Sport 1 HD + Star Cinema + Star Family + Tiji + TV1 HD + TV3 HD + TV3 Plus HD + TV6 HD + TV8 HD + Bolt + TVP Info + TVP Polonia + ViP Comedy + diff --git a/sites/cgates.lt/cgates.lt.config.js b/sites/cgates.lt/cgates.lt.config.js index 6251a3cc..efdc3ca2 100644 --- a/sites/cgates.lt/cgates.lt.config.js +++ b/sites/cgates.lt/cgates.lt.config.js @@ -42,7 +42,7 @@ module.exports = { }, async channels() { let html = await axios - .get(`https://www.cgates.lt/televizija/tv-programa-savaitei/`) + .get('https://www.cgates.lt/televizija/tv-programa-savaitei/') .then(r => r.data) .catch(console.log) let $ = cheerio.load(html) @@ -51,7 +51,7 @@ module.exports = { return items.map(item => { const name = $(item).find('h6').text().trim() const link = $(item).find('a').attr('href') - const [_, site_id] = link.match(/\/tv-kanalai\/(.*)\//) || [null, null] + const [, site_id] = link.match(/\/tv-kanalai\/(.*)\//) || [null, null] return { lang: 'lt', diff --git a/sites/cgates.lt/cgates.lt.test.js b/sites/cgates.lt/cgates.lt.test.js index 4a0390b1..ac1abbec 100644 --- a/sites/cgates.lt/cgates.lt.test.js +++ b/sites/cgates.lt/cgates.lt.test.js @@ -1,5 +1,5 @@ // npm run channels:parse -- --config=./sites/cgates.lt/cgates.lt.config.js --output=./sites/cgates.lt/cgates.lt.channels.xml -// npx epg-grabber --config=sites/cgates.lt/cgates.lt.config.js --channels=sites/cgates.lt/cgates.lt.channels.xml --output=guide.xml --days=2 +// npm run grab -- --site=cgates.lt const { parser, url } = require('./cgates.lt.config.js') const fs = require('fs') diff --git a/sites/chaines-tv.orange.fr/chaines-tv.orange.fr.channels.xml b/sites/chaines-tv.orange.fr/chaines-tv.orange.fr.channels.xml index 81c009e2..74b4e4ee 100644 --- a/sites/chaines-tv.orange.fr/chaines-tv.orange.fr.channels.xml +++ b/sites/chaines-tv.orange.fr/chaines-tv.orange.fr.channels.xml @@ -1,199 +1,197 @@ - - - 01 TV - 2M Monde - 3sat - 6ter - AB 1 - Action - Aljazeera English - Animaux - A+ Kids TV - ARTE Français - Automoto la chaîne - BBC Entertainment Europe - BBC World News Europe - BeIn Sports 1 France - BeIn Sports 2 France - BeIn Sports 3 France - BeIn Sports Max 4 France - BeIn Sports Max 5 France - BeIn Sports Max 6 France - BeIn Sports Max 7 France - BeIn Sports Max 8 France - BeIn Sports Max 9 France - BeIn Sports Max 10 France - BET France - BFM Business - BFM TV - Bloomberg TV Europe - Boing France - Boomerang France - Boomerang France +1 - C8 - Canal J - Canal + Cinéma France - Canal + Décalé - Canal + Docs - Canal + France - Canal + Grand Ecran - Canal + Kids - Canal + Séries - Canal + Sport - Canal Q - Cartoon Network France - Chasse & Pêche - Chérie 25 - Cine + Classic - Cine + Club - Cine + Émotion - Cine + Famiz - Cine + Frisson - Cine + Premier - Clique TV - Clubbing TV - CNBC Europe - C News - CNN International Europe - Comédie + - Comedy Central France - Crime District - C Star - Das Erste - Demain TV - Disney Channel France - Disney Channel France +1 - Disney Junior France - DW English - Equidia - ES1 - Eurochannel - EuroNews Français - FashionTV Europe - France 2 - France 3 - France 3 Alpes - France 3 Alsace - France 3 Aquitaine - France 3 Auvergne - France 3 Bourgogne - France 3 Bretagne - France 3 Centre-Val de Loire - France 3 Champagne-Ardenne - France 3 Corse Via Stella - France 3 Côte d'Azur - France 3 Franche-Comté - France 3 Languedoc-Roussillon - France 3 Limousin - France 3 Lorraine - France 3 Midi-Pyrénées - France 3 Nord Pas-de-Calais - France 3 Paris Ile-de-France - France 3 Pays de la Loire - France 3 Picardie - France 3 Poitou-Charentes - France 3 Provence-Alpes - France 3 Rhône-Alpes - France 4 - France 5 - France 24 English - France 24 Français - Franceinfo: - Game One - Game One +1 - Golf Channel France - Gulli - Histoire TV - I24 News Français - J-One - KTO - LCI - LCP Assemblée Nationale - LCP Public Sénat - L'Équipe - Lucky Jack.tv - Luxe TV - M6 - M6 Music - Maison & Travaux TV - Mangas - MCM France - Melody - Melody d'Afrique - Mezzo - Mezzo Live HD - MTV France - MTV Hits France - Museum - MyZen TV - National Geographic France - National Geographic Wild France - NHK World Japan - Nickelodeon France - Nickelodeon France +1 - Nickelodeon Junior France - Nickelodeon Teen - Nitro Deutschland - Nollywood TV - Novelas TV - NRJ 12 - NRJ Hits - OCS choc - OCS City - OCS geants - OCS max - Olympia TV - One - Paramount Channel Décalé - Paramount Channel France - Paris Première - Piwi + - Planète + - Planète + A&E - Planète + CI - Polar + - ProSieben Deutschland - Rai 1 - Rai 2 - Rai 3 - Rai News 24 - RMC Découverte - RMC Story - RTL 9 - RTL Zwei Deutschland - RTP Internacional Europa - Science & Vie TV - Série Club - Sport en France - Stingray Classica - Sunu Yeuf - Super RTL Deutschland - TCM Cinéma - TéléToon + - TéléToon + 1 - Téva - TF 1 - TF 1 +1 - TF 1 Séries Films - TFX - The Israeli Network - Tiji - TMC - TMC +1 - Toonami France - Toute l'Histoire - TV5Monde France Belgique Suisse - TV Breizh - TVE Internacional Europa - TV Pitchoun - Ultra Nature - Ushuaïa TV - Voxafrica Afrique - Vox Deutschland - W9 - Warner TV France - ZDF - ZDF Neo - - + + 01 TV + 2M Monde + 3sat + 6ter + AB 1 + Action + Aljazeera English + Animaux + A+ Kids TV + ARTE Français + Automoto la chaîne + BBC Entertainment Europe + BBC World News Europe + BeIn Sports 1 France + BeIn Sports 2 France + BeIn Sports 3 France + BeIn Sports Max 10 France + BeIn Sports Max 4 France + BeIn Sports Max 5 France + BeIn Sports Max 6 France + BeIn Sports Max 7 France + BeIn Sports Max 8 France + BeIn Sports Max 9 France + BET France + BFM Business + BFM TV + Bloomberg TV Europe + Boing France + Boomerang France + Boomerang France +1 + C8 + Canal J + Canal + Cinéma France + Canal + Décalé + Canal + Docs + Canal + France + Canal + Grand Ecran + Canal + Kids + Canal + Séries + Canal + Sport + Canal Q + Cartoon Network France + Chasse & Pêche + Chérie 25 + Cine + Classic + Cine + Club + Cine + Émotion + Cine + Famiz + Cine + Frisson + Cine + Premier + Clique TV + Clubbing TV + CNBC Europe + C News + CNN International Europe + Comédie + + Comedy Central France + Crime District + C Star + Das Erste + Demain TV + Disney Channel France + Disney Channel France +1 + Disney Junior France + DW English + Equidia + Eurochannel + EuroNews Français + FashionTV Europe + France 2 + France 24 English + France 24 Français + France 3 + France 3 Alpes + France 3 Alsace + France 3 Aquitaine + France 3 Auvergne + France 3 Bourgogne + France 3 Bretagne + France 3 Centre-Val de Loire + France 3 Champagne-Ardenne + France 3 Corse Via Stella + France 3 Côte d'Azur + France 3 Franche-Comté + France 3 Languedoc-Roussillon + France 3 Limousin + France 3 Lorraine + France 3 Midi-Pyrénées + France 3 Nord Pas-de-Calais + France 3 Paris Ile-de-France + France 3 Pays de la Loire + France 3 Picardie + France 3 Poitou-Charentes + France 3 Provence-Alpes + France 3 Rhône-Alpes + France 4 + France 5 + Franceinfo: + Game One + Game One +1 + Golf Channel France + Gulli + Histoire TV + I24 News Français + J-One + KTO + LCI + LCP Assemblée Nationale + L'Équipe + Lucky Jack.tv + Luxe TV + M6 + M6 Music + Maison & Travaux TV + Mangas + MCM France + Melody + Melody d'Afrique + Mezzo + Mezzo Live HD + ES1 + MTV France + MTV Hits France + Museum + MyZen TV + National Geographic France + National Geographic Wild France + NHK World Japan + Nickelodeon France + Nickelodeon France +1 + Nickelodeon Junior France + Nickelodeon Teen + Nitro Deutschland + Nollywood TV + Novelas TV + NRJ 12 + NRJ Hits + OCS choc + OCS City + OCS geants + OCS max + Olympia TV + One + Paramount Channel France + Paramount Channel Décalé + Paris Première + Piwi + + Planète + + Planète + A&E + Planète + CI + Polar + + ProSieben Deutschland + LCP Public Sénat + Rai 1 + Rai 2 + Rai 3 + Rai News 24 + RMC Découverte + RMC Story + RTL 9 + RTL Zwei Deutschland + RTP Internacional Europa + Science & Vie TV + Série Club + Sport en France + Stingray Classica + Sunu Yeuf + Super RTL Deutschland + TCM Cinéma + TéléToon + + TéléToon + 1 + Téva + TF 1 + TF 1 +1 + TF 1 Séries Films + TFX + The Israeli Network + Tiji + TMC + TMC +1 + Toonami France + Toute l'Histoire + TV5Monde France Belgique Suisse + TV Breizh + TVE Internacional Europa + TV Pitchoun + Ultra Nature + Ushuaïa TV + Voxafrica Afrique + Vox Deutschland + W9 + Warner TV France + ZDF + ZDF Neo + diff --git a/sites/chaines-tv.orange.fr/chaines-tv.orange.fr.test.js b/sites/chaines-tv.orange.fr/chaines-tv.orange.fr.test.js index dff67824..ff1ec431 100644 --- a/sites/chaines-tv.orange.fr/chaines-tv.orange.fr.test.js +++ b/sites/chaines-tv.orange.fr/chaines-tv.orange.fr.test.js @@ -1,6 +1,6 @@ -// npx epg-grabber --config=sites/chaines-tv.orange.fr/chaines-tv.orange.fr.config.js --channels=sites/chaines-tv.orange.fr/chaines-tv.orange.fr.channels.xml --output=guide.xml --days=2 +// npm run grab -- --site=chaines-tv.orange.fr -const { parser, url, request } = require('./chaines-tv.orange.fr.config.js') +const { parser, url } = require('./chaines-tv.orange.fr.config.js') const dayjs = require('dayjs') const utc = require('dayjs/plugin/utc') const customParseFormat = require('dayjs/plugin/customParseFormat') @@ -12,7 +12,8 @@ const channel = { site_id: '192', xmltv_id: 'TF1.fr' } -const content = `{"192":[{"id":1635062528017,"programType":"EPISODE","title":"Tête de liste","channelId":"192","channelZappingNumber":11,"covers":[{"format":"RATIO_16_9","url":"https://proxymedia.woopic.com/340/p/169_EMI_9697669.jpg"},{"format":"RATIO_4_3","url":"https://proxymedia.woopic.com/340/p/43_EMI_9697669.jpg"}],"diffusionDate":1636328100,"duration":2700,"csa":2,"synopsis":"Un tueur en série prend un plaisir pervers à prévenir les autorités de Tallahassee avant chaque nouveau meurtre. Rossi apprend le décès d'un de ses vieux amis.","languageVersion":"VM","hearingImpaired":true,"audioDescription":false,"season":{"number":10,"episodesCount":23,"serie":{"title":"Esprits criminels"}},"episodeNumber":12,"definition":"SD","links":[{"rel":"SELF","href":"https://rp-live.orange.fr/live-webapp/v3/applications/STB4PC/programs/1635062528017"}],"dayPart":"OTHER","catchupId":null,"genre":"Série","genreDetailed":"Série Suspense"}]}` +const content = + '{"192":[{"id":1635062528017,"programType":"EPISODE","title":"Tête de liste","channelId":"192","channelZappingNumber":11,"covers":[{"format":"RATIO_16_9","url":"https://proxymedia.woopic.com/340/p/169_EMI_9697669.jpg"},{"format":"RATIO_4_3","url":"https://proxymedia.woopic.com/340/p/43_EMI_9697669.jpg"}],"diffusionDate":1636328100,"duration":2700,"csa":2,"synopsis":"Un tueur en série prend un plaisir pervers à prévenir les autorités de Tallahassee avant chaque nouveau meurtre. Rossi apprend le décès d\'un de ses vieux amis.","languageVersion":"VM","hearingImpaired":true,"audioDescription":false,"season":{"number":10,"episodesCount":23,"serie":{"title":"Esprits criminels"}},"episodeNumber":12,"definition":"SD","links":[{"rel":"SELF","href":"https://rp-live.orange.fr/live-webapp/v3/applications/STB4PC/programs/1635062528017"}],"dayPart":"OTHER","catchupId":null,"genre":"Série","genreDetailed":"Série Suspense"}]}' it('can generate valid url', () => { const result = url({ channel, date }) @@ -28,7 +29,8 @@ it('can parse response', () => { start: '2021-11-07T23:35:00.000Z', stop: '2021-11-08T00:20:00.000Z', title: 'Tête de liste', - description: `Un tueur en série prend un plaisir pervers à prévenir les autorités de Tallahassee avant chaque nouveau meurtre. Rossi apprend le décès d'un de ses vieux amis.`, + description: + "Un tueur en série prend un plaisir pervers à prévenir les autorités de Tallahassee avant chaque nouveau meurtre. Rossi apprend le décès d'un de ses vieux amis.", category: 'Série Suspense', icon: 'https://proxymedia.woopic.com/340/p/169_EMI_9697669.jpg' } @@ -39,7 +41,8 @@ it('can handle empty guide', () => { const result = parser({ date, channel, - content: `{"code":60,"message":"Resource not found","param":{},"description":"L'URI demandé ou la ressource demandée n'existe pas.","stackTrace":null}` + content: + '{"code":60,"message":"Resource not found","param":{},"description":"L\'URI demandé ou la ressource demandée n\'existe pas.","stackTrace":null}' }) expect(result).toMatchObject([]) }) diff --git a/sites/clickthecity.com/clickthecity.com.channels.xml b/sites/clickthecity.com/clickthecity.com.channels.xml index f87b3679..2c355954 100644 --- a/sites/clickthecity.com/clickthecity.com.channels.xml +++ b/sites/clickthecity.com/clickthecity.com.channels.xml @@ -1,38 +1,36 @@ - - - - - a2z Channel 11 - ANC - Animax - AXN - Celestial Movies Pinoy - Cinema One - Cinemax - CNN Philippines - GEM - GMA - GTV - HBO - History - IBC TV 13 - Jeepney TV - Kapamilya Channel - K-Movies Pinoy - Liga - Metro Channel - MYX - National Geographic - Net 25 - Nickelodeon - PBO - PTV - Rock Entertainment - Rock Extreme - Tagalized Movie Channel - Telenovela Channel - TV5 - VIVA Cinema - - + + + + a2z Channel 11 + ANC + Animax + AXN + Celestial Movies Pinoy + Cinema One + Cinemax + CNN Philippines + GEM + GMA + GTV + HBO + History + IBC TV 13 + Jeepney TV + Kapamilya Channel + K-Movies Pinoy + Liga + Metro Channel + MYX + National Geographic + Net 25 + Nickelodeon + PBO + PTV + Rock Entertainment + Rock Extreme + Tagalized Movie Channel + Telenovela Channel + TV5 + VIVA Cinema + diff --git a/sites/clickthecity.com/clickthecity.com.config.js b/sites/clickthecity.com/clickthecity.com.config.js index 6846fe80..917495ea 100644 --- a/sites/clickthecity.com/clickthecity.com.config.js +++ b/sites/clickthecity.com/clickthecity.com.config.js @@ -47,7 +47,7 @@ module.exports = { }, async channels() { const html = await axios - .get(`https://www.clickthecity.com/tv/channels/`) + .get('https://www.clickthecity.com/tv/channels/') .then(r => r.data) .catch(console.log) const $ = cheerio.load(html) @@ -56,7 +56,7 @@ module.exports = { return items.map(item => { const name = $(item).find('.card-body').text().trim() const url = $(item).find('a').attr('href') - const [_, site_id] = url.match(/netid=(\d+)/) || [null, null] + const [, site_id] = url.match(/netid=(\d+)/) || [null, null] return { site_id, @@ -72,7 +72,7 @@ function parseTitle($item) { function parseStart($item, date) { const url = $item('td.cPrg > a').attr('href') || '' - let [_, time] = url.match(/starttime=(\d{1,2}%3A\d{2}\+(AM|PM))/) || [null, null] + let [, time] = url.match(/starttime=(\d{1,2}%3A\d{2}\+(AM|PM))/) || [null, null] if (!time) return null time = `${date.format('YYYY-MM-DD')} ${time.replace('%3A', ':').replace('+', ' ')}` @@ -81,7 +81,7 @@ function parseStart($item, date) { function parseStop($item, date) { const url = $item('td.cPrg > a').attr('href') || '' - let [_, time] = url.match(/endtime=(\d{1,2}%3A\d{2}\+(AM|PM))/) || [null, null] + let [, time] = url.match(/endtime=(\d{1,2}%3A\d{2}\+(AM|PM))/) || [null, null] if (!time) return null time = `${date.format('YYYY-MM-DD')} ${time.replace('%3A', ':').replace('+', ' ')}` @@ -91,7 +91,7 @@ function parseStop($item, date) { function parseItems(content) { const $ = cheerio.load(content) - return $(`#tvlistings > tbody > tr`) + return $('#tvlistings > tbody > tr') .filter(function () { return $(this).find('td.cPrg').length }) diff --git a/sites/clickthecity.com/clickthecity.com.test.js b/sites/clickthecity.com/clickthecity.com.test.js index b48453ba..33ae1deb 100644 --- a/sites/clickthecity.com/clickthecity.com.test.js +++ b/sites/clickthecity.com/clickthecity.com.test.js @@ -1,5 +1,5 @@ // npm run channels:parse -- --config=./sites/clickthecity.com/clickthecity.com.config.js --output=./sites/clickthecity.com/clickthecity.com.channels.xml -// npx epg-grabber --config=sites/clickthecity.com/clickthecity.com.config.js --channels=sites/clickthecity.com/clickthecity.com.channels.xml --output=guide.xml +// npm run grab -- --site=clickthecity.com const { parser, url, request } = require('./clickthecity.com.config.js') const fs = require('fs') @@ -49,13 +49,13 @@ it('can parse response', () => { expect(results[0]).toMatchObject({ start: '2023-06-11T21:00:00.000Z', stop: '2023-06-11T22:00:00.000Z', - title: `Word Of God` + title: 'Word Of God' }) expect(results[19]).toMatchObject({ start: '2023-06-12T15:30:00.000Z', stop: '2023-06-12T16:00:00.000Z', - title: `La Suerte De Loli` + title: 'La Suerte De Loli' }) }) @@ -63,7 +63,8 @@ it('can handle empty guide', () => { const result = parser({ date, channel, - content: `` + content: + '' }) expect(result).toMatchObject([]) }) diff --git a/sites/compulms.com/compulms.com.channels.xml b/sites/compulms.com/compulms.com.channels.xml index bc308e3c..9d9e6cd3 100644 --- a/sites/compulms.com/compulms.com.channels.xml +++ b/sites/compulms.com/compulms.com.channels.xml @@ -1,9 +1,7 @@ - - - EnerGeek Animate - EnerGeek Retro - EnerGeek Radio TV - EnerGeek Fanpop - - + + EnerGeek Animate + EnerGeek Retro + EnerGeek Radio TV + EnerGeek Fanpop + diff --git a/sites/compulms.com/compulms.com.test.js b/sites/compulms.com/compulms.com.test.js index 9e79ab92..92c1fae5 100644 --- a/sites/compulms.com/compulms.com.test.js +++ b/sites/compulms.com/compulms.com.test.js @@ -1,4 +1,4 @@ -// npx epg-grabber --config=sites/compulms.com/compulms.com.config.js --channels=sites/compulms.com/compulms.com.channels.xml --output=guide.xml --days=2 +// npm run grab -- --site=compulms.com const { parser, url } = require('./compulms.com.config.js') const fs = require('fs') diff --git a/sites/comteco.com.bo/comteco.com.bo.channels.xml b/sites/comteco.com.bo/comteco.com.bo.channels.xml index d2399342..e627a5f8 100644 --- a/sites/comteco.com.bo/comteco.com.bo.channels.xml +++ b/sites/comteco.com.bo/comteco.com.bo.channels.xml @@ -1,80 +1,78 @@ - - - - - - Abya Yala TV - A&E - AMC - Animal Planet - AXN - Az Mundo - Bolivia TV - Bolivia TV 7.2 Deportes - Bolivisión - Cadena A - Canal 24 Horas - Caracol TV - Cartoon Network - Cinecanal Este - Cinemax - CNN - Cubavisión - De Película - Discovery Channel - Discovery Home & Health Latinoamérica - Discovery Kids América Latina - Disney Channel - Disney Junior España - El Gourmet - El Trece - E! - EuroNews Español - Europa Europa - EWTN - Fox Sports 2 - Fox Sports 3 - Fox Sports Latin America - FXM - FX - HBO - History - HTV - Investigation Discovery - María+Visión - Más Chic - MTV Latino Norte - Nat Geo Kids - National Geographic - Nickelodeon - Record TV - Red Uno - RTP - SBT - Space México - Star Channel - Star Life - Studio Universal - TBS - TCM - Telefe Internacional - Telemundo - Telesur - TLC - Tlnovelas - TNT - TNT Series - Tooncast - TV Chile - TV Culturas - TVE - TV Globo Internacional - TV Perú - TyC Sports - Unitel Santa Cruz - Universal TV - VH1 East - Warner Channel - - \ No newline at end of file + + + + + Abya Yala TV + A&E + AMC + Animal Planet + AXN + Az Mundo + Bolivia TV + Bolivia TV 7.2 Deportes + Bolivisión + Cadena A + Canal 24 Horas + Caracol TV + Cartoon Network + Cinecanal Este + Cinemax + CNN + Cubavisión + De Película + Discovery Channel + Discovery Home & Health Latinoamérica + Discovery Kids América Latina + Disney Channel + Disney Junior España + El Gourmet + El Trece + E! + EuroNews Español + Europa Europa + EWTN + Fox Sports 2 + Fox Sports 3 + Fox Sports Latin America + FXM + FX + HBO + History + HTV + Investigation Discovery + María+Visión + Más Chic + MTV Latino Norte + Nat Geo Kids + National Geographic + Nickelodeon + Record TV + Red Uno + RTP + SBT + Space México + Star Channel + Star Life + Studio Universal + TBS + TCM + Telefe Internacional + Telemundo + Telesur + TLC + Tlnovelas + TNT + TNT Series + Tooncast + TV Chile + TV Culturas + TVE + TV Globo Internacional + TV Perú + TyC Sports + Unitel Santa Cruz + Universal TV + VH1 East + Warner Channel + \ No newline at end of file diff --git a/sites/comteco.com.bo/comteco.com.bo.test.js b/sites/comteco.com.bo/comteco.com.bo.test.js index d8701454..c0514bf4 100644 --- a/sites/comteco.com.bo/comteco.com.bo.test.js +++ b/sites/comteco.com.bo/comteco.com.bo.test.js @@ -1,4 +1,4 @@ -// npx epg-grabber --config=sites/comteco.com.bo/comteco.com.bo.config.js --channels=sites/comteco.com.bo/comteco.com.bo.channels.xml --output=guide.xml --days=2 +// npm run grab -- --site=comteco.com.bo const { parser, url, request } = require('./comteco.com.bo.config.js') const dayjs = require('dayjs') @@ -12,7 +12,8 @@ const channel = { site_id: 'ABYA YALA', xmltv_id: 'AbyaYalaTV.bo' } -const content = ` Canal Analógico: 48 ABYA YALA 00:00:00 Abya Yala noticias - 3ra edición 01:00:00 Cierre de emisión 23:00:00 Referentes Regresar a canales ` +const content = + ' Canal Analógico: 48 ABYA YALA 00:00:00 Abya Yala noticias - 3ra edición 01:00:00 Cierre de emisión 23:00:00 Referentes Regresar a canales ' it('can generate valid url', () => { expect(url({ channel })).toBe( @@ -48,17 +49,17 @@ it('can parse response', () => { { start: '2021-11-25T04:00:00.000Z', stop: '2021-11-25T05:00:00.000Z', - title: `Abya Yala noticias - 3ra edición` + title: 'Abya Yala noticias - 3ra edición' }, { start: '2021-11-25T05:00:00.000Z', stop: '2021-11-26T03:00:00.000Z', - title: `Cierre de emisión` + title: 'Cierre de emisión' }, { start: '2021-11-26T03:00:00.000Z', stop: '2021-11-26T03:30:00.000Z', - title: `Referentes` + title: 'Referentes' } ]) }) @@ -67,7 +68,7 @@ it('can handle empty guide', () => { const result = parser({ date, channel, - content: `` + content: '' }) expect(result).toMatchObject([]) }) diff --git a/sites/cosmote.gr/cosmote.gr.channels.xml b/sites/cosmote.gr/cosmote.gr.channels.xml index 2f8c7776..eaf51292 100644 --- a/sites/cosmote.gr/cosmote.gr.channels.xml +++ b/sites/cosmote.gr/cosmote.gr.channels.xml @@ -1,90 +1,88 @@ - - - 4E - Action 24 - Aigaio TV - Alarabiya - Aljazeera - Alpha TV - Ant1 - Baby TV - BBC Earth HD - BBC World News - Bloomberg TV - Blue Hustler - Body in Balance - CBS Reality - CNBC - CNN - Cosmote Cinema 1 - Cosmote Cinema 2 - Cosmote Cinema 3 - Cosmote History - Cosmote Series - Cosmote Series Marathon - Cosmote Sport 1 - Cosmote Sport 2 - Cosmote Sport 3 - Cosmote Sport 4 - Cosmote Sport 5 - Cosmote Sport 6 - Cosmote Sport 7 - Cosmote Sport 8 - Cosmote Sport 9 - Cosmote Sport Highlights - Crime + Investigation - Disney Channel Middle East - DW - Edge Sport HD - E! HD - Ena Channel - Epsilon TV - ERT 1 - ERT 2 - ERT 3 - ERT World - EuroNews English - EuroNews - FashionTV - Fox HD - Fox Life HD - France 24 English - France 24 Français - Ginx eSports TV - Vouli TV - Hustler HD - Kriti TV - Luxe TV HD - Mad TV - Mad Viral - Makedonia TV - Mega TV HD - Mezzo Live HD - Motorvision TV HD - MTV Global - MTV Live HD - National Geographic - National Geographic Wild HD - Nautical Channel - Nea TV - One Channel - Open Beyond TV - Penthouse Gold - Private TV - RT News - Sirina TV - SKAI - Smile TV - Star Channel - Star Kentrikis Elladas - Stingray CMusic - Stingray IConcerts - Vergina TV - VH1 Europe - Viasat Explore - Viasat History - Viasat Nature - Village Cinemas HD - - + + 4E + Action 24 + Aigaio TV + Alarabiya + Aljazeera + Alpha TV + Ant1 + Baby TV + BBC Earth HD + BBC World News + Bloomberg TV + Blue Hustler + Body in Balance + CBS Reality + CNBC + CNN + Cosmote Cinema 1 + Cosmote Cinema 2 + Cosmote Cinema 3 + Cosmote History + Cosmote Series + Cosmote Series Marathon + Cosmote Sport 1 + Cosmote Sport 2 + Cosmote Sport 3 + Cosmote Sport 4 + Cosmote Sport 5 + Cosmote Sport 6 + Cosmote Sport 7 + Cosmote Sport 8 + Cosmote Sport 9 + Cosmote Sport Highlights + Crime + Investigation + Disney Channel Middle East + DW + Edge Sport HD + E! HD + Ena Channel + Epsilon TV + ERT 1 + ERT 2 + ERT 3 + ERT World + EuroNews English + EuroNews + FashionTV + Fox HD + Fox Life HD + France 24 English + France 24 Français + Ginx eSports TV + Vouli TV + Hustler HD + Kriti TV + Luxe TV HD + Mad TV + Mad Viral + Makedonia TV + Mega TV HD + Mezzo Live HD + Motorvision TV HD + MTV Global + MTV Live HD + National Geographic + National Geographic Wild HD + Nautical Channel + Nea TV + One Channel + Open Beyond TV + Penthouse Gold + Private TV + RT News + Sirina TV + SKAI + Smile TV + Star Channel + Star Kentrikis Elladas + Stingray CMusic + Stingray IConcerts + Vergina TV + VH1 Europe + Viasat Explore + Viasat History + Viasat Nature + Village Cinemas HD + diff --git a/sites/cosmote.gr/cosmote.gr.config.js b/sites/cosmote.gr/cosmote.gr.config.js index 829f2eab..29ce29c4 100644 --- a/sites/cosmote.gr/cosmote.gr.config.js +++ b/sites/cosmote.gr/cosmote.gr.config.js @@ -4,9 +4,6 @@ const { DateTime } = require('luxon') module.exports = { site: 'cosmote.gr', days: 2, - request: { - timeout: 30000 // 30 seconds - }, url: function ({ date, channel }) { return `https://www.cosmotetv.gr/portal/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' @@ -55,7 +52,7 @@ function parseCategory($item) { .end() .text() .trim() - const [_, category] = typeString.match(/\| (.*)/) || [null, null] + const [, category] = typeString.match(/\| (.*)/) || [null, null] return category } diff --git a/sites/cosmote.gr/cosmote.gr.test.js b/sites/cosmote.gr/cosmote.gr.test.js index 882d6b7a..5b818650 100644 --- a/sites/cosmote.gr/cosmote.gr.test.js +++ b/sites/cosmote.gr/cosmote.gr.test.js @@ -1,4 +1,4 @@ -// npx epg-grabber --config=sites/cosmote.gr/cosmote.gr.config.js --channels=sites/cosmote.gr/cosmote.gr.channels.xml --output=guide.xml +// npm run grab -- --site=cosmote.gr const { parser, url } = require('./cosmote.gr.config.js') const fs = require('fs') @@ -35,14 +35,14 @@ it('can parse response', () => { expect(results[0]).toMatchObject({ start: '2023-06-07T20:30:00.000Z', stop: '2023-06-07T21:45:00.000Z', - title: `Τηλεφημερίδα`, + title: 'Τηλεφημερίδα', category: 'Εκπομπή - Μαγκαζίνο' }) expect(results[30]).toMatchObject({ start: '2023-06-08T19:45:00.000Z', stop: '2023-06-08T20:30:00.000Z', - title: `Μικρό Απόδειπνο`, + title: 'Μικρό Απόδειπνο', category: 'Special' }) }) @@ -58,14 +58,14 @@ it('can parse response when the guide starting before midnight', () => { expect(results[0]).toMatchObject({ start: '2023-06-07T21:30:00.000Z', stop: '2023-06-07T22:30:00.000Z', - title: `Καλύτερα Αργά`, + title: 'Καλύτερα Αργά', category: 'Ψυχαγωγική Εκπομπή' }) expect(results[22]).toMatchObject({ start: '2023-06-08T19:00:00.000Z', stop: '2023-06-08T21:30:00.000Z', - title: `Πίσω Από Τις Γραμμές`, + title: 'Πίσω Από Τις Γραμμές', category: 'Εκπομπή - Μαγκαζίνο' }) }) @@ -73,7 +73,7 @@ it('can parse response when the guide starting before midnight', () => { it('can handle empty guide', () => { const result = parser({ date, - content: `` + content: '' }) expect(result).toMatchObject([]) }) diff --git a/sites/delta.nl/delta.nl.channels.xml b/sites/delta.nl/delta.nl.channels.xml index add393a8..5af0b1e3 100644 --- a/sites/delta.nl/delta.nl.channels.xml +++ b/sites/delta.nl/delta.nl.channels.xml @@ -1,228 +1,226 @@ - - - 100% NL TV - 192 TV - 24 Kitchen - 3sat - AAVISIE - Albrandswaard TV - Aljazeera English - Altena TV - Animal Planet Europe - ARTE Deutsch - Assen TV - AT5 - ATOS TV - Babes TV - Baby TV Europe - BBC Entertainment Europe - BBC First Nederland - BBC One - BBC Two - BBC World News Europe - Beek TV - Bloomberg TV Europe - Boomerang Central & Eastern Europe - BR6 TV - Brazzers TV Europe - BredaNu TV - Canvas - Cartoon Network Nederland - Castricum TV - - Centraal TV - CGTN - CNN International Europe - Comedy Central Extra UK - Comedy Central Nederland - Crime + Investigation UK - Das Erste - Delta TV - Den Haag TV - Discovery Channel Nederland - Discovery Science - Disney Channel Nederland - DRTV - DTV Oss & Bernheze - Dusk - Één - E! Europe - ESPN 2 Nederland - ESPN 3 Nederland - ESPN Nederland - EuroNews English - Eurosport 1 - Eurosport 2 - Extreme Sports Channel - Family 7 - FashionTV Europe - Feel Good TV - Film 1 Action - Film 1 Drama - Film 1 Family - Film 1 Premiere - FilmBox Nederland - Fox NL - France 2 - France 24 Français - France 3 - Gemeente Westland TV - GL8 - GO-TV - Gouwestad TV - History Benelux - Hofstreek TV - HOi TV - Horse & Country TV - Hustler TV Europe - Ideaal TV - Ijsselmond TV - Insight TV - Investigation Discovery Europe - JenZ - Kabel Eins Deutschland - Ketnet - KIKA - Kontakt TV - L1 TV - Lansingerland TV - Loco TV - LOE TV - LOK TV - LON TV - LOS TV - Meiden van Holland Hard - Meppel TV - Mezzo - ML5 TV - MLA TV - MTV 00s - MTV 80s - MTV Hits Europe - MTV Live HD - MTV NL - National Geographic Nederland - National Geographic Wild Europe - Nautical Channel - NDR Fernsehen Hamburg - Net 5 - NHK World Japan - NH TV - Nickelodeon - Nick Jr - NickMusic - Nicktoons - NOOS TV - NPO 1 - NPO 1 Extra - NPO 2 - NPO 2 Extra - NPO 3 - NPO Nieuws - NPO Politiek - NPO Zappelin Extra - N-TV - Omroep Brabant TV - Omroep Flevoland TV - Omroep Hulst TV - Omroep Meierijstad TV - Omroep Tilburg TV - Omroep Venlo TV - Omroep Zeeland TV - Omrop Fryslân TV - ONS - Ons West Brabant TV - OPEN Rotterdam TV - Out TV - Passie XXX - Pebble TV - Phoenix CNE - Playboy TV Europe - P&M TV - ProSieben Deutschland - Pure Babes - Radio Aalsmeer TV - Rai 1 - Regio8 TV - Regio90 TV - RN7 - Ronde Venen TV - RTBF La Une - RTL 4 - RTL 5 - RTL 7 - RTL 8 - RTL Crime Nederland - RTL Deutschland - RTL Lounge - RTL Telekids - RTL Z - RTV 1 - RTV Arnhem TV - RTV Focus TV - RTV Horizon - RTV Oost - RTV Purmerend - RTV Rijnstreek TV - RTV Scheldemond - RTV Slingeland - RTV SLOS - RTV Utrecht - RTV Veluwezoom TV - Samen1 TV - Sat. 1 Deutschland - SBS 6 - SBS 9 - Schie TV - Schlager TV - Shorts TV - Siris TV - Slam! - SLOGO TV - SLOS TV - Slotstad TV - Spike Nederland - Stingray Classica - Stingray Djazz - Stingray IConcerts - Stingray Lite TV - StreekTV - Studio Alphen TV - SWR Fernsehen Baden-Württemberg - Tholen TV - Tipik - TLC Nederland - Trace Sport Stars - Trace Urban - TRT Türk - TV 538 - TV5Monde Europe - TV Berghem - TV Drenthe - TVE Internacional Europa - TV Gelderland - TV Krimpenerwaard - TV Noord - TV Nunspeet - TV Oranje - TV Rijnmond - TV Stichtse Vecht - TV West - Twente TV - Vechtdal TV - - Vox Deutschland - WDR Fernsehen Köln - WOS - ZDF - Ziggo Sport Docu - Ziggo Sport Golf - Ziggo Sport Racing - Ziggo Sport Select - Ziggo Sport Tennis - Ziggo Sport Voetbal - ZuidWest TV - ZVT-AVS - - + + + + Das Erste + Aljazeera English + Babes TV + BBC World News Europe + Bloomberg TV Europe + Brazzers TV Europe + CGTN + CNN International Europe + EuroNews English + Extreme Sports Channel + FashionTV Europe + MTV 00s + MTV 80s + MTV Live HD + Nautical Channel + NHK World Japan + Playboy TV Europe + Shorts TV + Trace Sport Stars + Trace Urban + France 24 Français + France 3 + RTBF La Une + 100% NL TV + 192 TV + 24 Kitchen + 3sat + AAVISIE + Albrandswaard TV + Altena TV + Animal Planet Europe + ARTE Deutsch + Assen TV + AT5 + ATOS TV + Baby TV Europe + BBC Entertainment Europe + BBC First Nederland + BBC One + BBC Two + Beek TV + Boomerang Central & Eastern Europe + BR6 TV + BredaNu TV + Canvas + Cartoon Network Nederland + Castricum TV + Centraal TV + Comedy Central Extra UK + Comedy Central Nederland + Crime + Investigation UK + Delta TV + Den Haag TV + Discovery Channel Nederland + Discovery Science + Disney Channel Nederland + DRTV + DTV Oss & Bernheze + Dusk + Één + E! Europe + ESPN 2 Nederland + ESPN 3 Nederland + ESPN Nederland + Eurosport 1 + Eurosport 2 + Family 7 + Feel Good TV + Film 1 Action + Film 1 Drama + Film 1 Family + Film 1 Premiere + FilmBox Nederland + Fox NL + France 2 + Gemeente Westland TV + GL8 + GO-TV + Gouwestad TV + History Benelux + Hofstreek TV + HOi TV + Horse & Country TV + Hustler TV Europe + Ideaal TV + Ijsselmond TV + Insight TV + Investigation Discovery Europe + JenZ + Kabel Eins Deutschland + Ketnet + KIKA + Kontakt TV + L1 TV + Lansingerland TV + Loco TV + LOE TV + LOK TV + LON TV + LOS TV + Meiden van Holland Hard + Meppel TV + Mezzo + ML5 TV + MLA TV + MTV Hits Europe + MTV NL + National Geographic Nederland + National Geographic Wild Europe + NDR Fernsehen Hamburg + Net 5 + NH TV + Nickelodeon + Nick Jr + NickMusic + Nicktoons + NOOS TV + NPO 1 + NPO 1 Extra + NPO 2 + NPO 2 Extra + NPO 3 + NPO Nieuws + NPO Politiek + NPO Zappelin Extra + N-TV + Omroep Brabant TV + Omroep Flevoland TV + Omroep Hulst TV + Omroep Meierijstad TV + Ons West Brabant TV + Omroep Tilburg TV + Omroep Venlo TV + Omroep Zeeland TV + Omrop Fryslân TV + ONS + OPEN Rotterdam TV + Out TV + Passie XXX + Pebble TV + Phoenix CNE + P&M TV + ProSieben Deutschland + Pure Babes + Radio Aalsmeer TV + Rai 1 + Regio8 TV + Regio90 TV + RN7 + Ronde Venen TV + RTL 4 + RTL 5 + RTL 7 + RTL 8 + RTL Crime Nederland + RTL Deutschland + RTL Lounge + RTL Telekids + RTL Z + RTV 1 + RTV Arnhem TV + TV Drenthe + RTV Focus TV + RTV Horizon + RTV Oost + RTV Purmerend + RTV Rijnstreek TV + RTV Scheldemond + RTV Slingeland + RTV SLOS + RTV Utrecht + RTV Veluwezoom TV + Samen1 TV + Sat. 1 Deutschland + SBS 6 + SBS 9 + Schie TV + Schlager TV + Siris TV + Slam! + SLOGO TV + SLOS TV + Slotstad TV + Spike Nederland + Stingray Classica + Stingray Djazz + Stingray IConcerts + Stingray Lite TV + StreekTV + Studio Alphen TV + SWR Fernsehen Baden-Württemberg + Tholen TV + Tipik + TLC Nederland + TRT Türk + TV 538 + TV5Monde Europe + TV Berghem + TVE Internacional Europa + TV Gelderland + TV Krimpenerwaard + TV Noord + TV Nunspeet + TV Oranje + TV Rijnmond + TV Stichtse Vecht + TV West + Twente TV + Vechtdal TV + Vox Deutschland + WDR Fernsehen Köln + WOS + ZDF + Ziggo Sport Docu + Ziggo Sport Golf + Ziggo Sport Racing + Ziggo Sport Select + Ziggo Sport Tennis + Ziggo Sport Voetbal + ZuidWest TV + ZVT-AVS + diff --git a/sites/delta.nl/delta.nl.test.js b/sites/delta.nl/delta.nl.test.js index 95fe631e..c4a49af9 100644 --- a/sites/delta.nl/delta.nl.test.js +++ b/sites/delta.nl/delta.nl.test.js @@ -1,7 +1,7 @@ -// npm run channels:parse --config=./sites/delta.nl/delta.nl.config.js --output=./sites/delta.nl/delta.nl.channels.xml -// npx epg-grabber --config=sites/delta.nl/delta.nl.config.js --channels=sites/delta.nl/delta.nl.channels.xml --output=guide.xml --days=2 +// npm run channels:parse -- --config=./sites/delta.nl/delta.nl.config.js --output=./sites/delta.nl/delta.nl.channels.xml +// npm run grab -- --site=delta.nl -const { parser, url, request } = require('./delta.nl.config.js') +const { parser, url } = require('./delta.nl.config.js') const axios = require('axios') const dayjs = require('dayjs') const utc = require('dayjs/plugin/utc') @@ -27,12 +27,13 @@ it('can parse response', done => { axios.get.mockImplementation(() => Promise.resolve({ data: JSON.parse( - `{"ID":"P~945cb98e-3d19-11ec-8456-953363d7a344","seriesID":"S~d37c4626-b691-11ea-ba69-255835135f02","channelID":"1","start":1636674960,"end":1636676520,"catchupAvailableUntil":1637279760,"title":"Eigen Huis & Tuin: Lekker Leven","description":"Nederlands lifestyleprogramma uit 2022 (ook in HD) met dagelijkse inspiratie voor een lekker leven in en om het huis.\\nPresentatrice Froukje de Both, kok Hugo Kennis en een team van experts, onder wie tuinman Tom Groot, geven praktische tips op het gebied van wonen, lifestyle, tuinieren en koken. Daarmee kun je zelf direct aan de slag om je leven leuker én gezonder te maken. Afl. 15 van seizoen 4.","images":{"thumbnail":{"url":"https://cdn.gvidi.tv/img/booxmedia/b291/561946.jpg"}},"additionalInformation":{"metadataID":"M~c512c206-95e5-11ec-87d8-494f70130311","externalMetadataID":"E~RTL4-89d99356_6599_4b65_a7a0_a93f39019645"},"parentalGuidance":{"kijkwijzer":["AL"]},"restrictions":{"startoverDisabled":false,"catchupDisabled":false,"recordingDisabled":false},"isFiller":false}` + '{"ID":"P~945cb98e-3d19-11ec-8456-953363d7a344","seriesID":"S~d37c4626-b691-11ea-ba69-255835135f02","channelID":"1","start":1636674960,"end":1636676520,"catchupAvailableUntil":1637279760,"title":"Eigen Huis & Tuin: Lekker Leven","description":"Nederlands lifestyleprogramma uit 2022 (ook in HD) met dagelijkse inspiratie voor een lekker leven in en om het huis.\\nPresentatrice Froukje de Both, kok Hugo Kennis en een team van experts, onder wie tuinman Tom Groot, geven praktische tips op het gebied van wonen, lifestyle, tuinieren en koken. Daarmee kun je zelf direct aan de slag om je leven leuker én gezonder te maken. Afl. 15 van seizoen 4.","images":{"thumbnail":{"url":"https://cdn.gvidi.tv/img/booxmedia/b291/561946.jpg"}},"additionalInformation":{"metadataID":"M~c512c206-95e5-11ec-87d8-494f70130311","externalMetadataID":"E~RTL4-89d99356_6599_4b65_a7a0_a93f39019645"},"parentalGuidance":{"kijkwijzer":["AL"]},"restrictions":{"startoverDisabled":false,"catchupDisabled":false,"recordingDisabled":false},"isFiller":false}' ) }) ) - const content = `{"1":[{"ID":"P~945cb98e-3d19-11ec-8456-953363d7a344","seriesID":"S~d37c4626-b691-11ea-ba69-255835135f02","channelID":"1","start":1636674960,"end":1636676520,"catchupAvailableUntil":1637279760,"title":"NOS Journaal","images":{"thumbnail":{"url":"https://cdn.gvidi.tv/img/booxmedia/e19c/static/NOS%20Journaal5.jpg"}},"additionalInformation":{"metadataID":"M~944f3c6e-3d19-11ec-9faf-2735f2e98d2a","externalMetadataID":"E~TV01-2026117420668"},"parentalGuidance":{"kijkwijzer":["AL"]},"restrictions":{"startoverDisabled":false,"catchupDisabled":false,"recordingDisabled":false},"isFiller":false}]}` + const content = + '{"1":[{"ID":"P~945cb98e-3d19-11ec-8456-953363d7a344","seriesID":"S~d37c4626-b691-11ea-ba69-255835135f02","channelID":"1","start":1636674960,"end":1636676520,"catchupAvailableUntil":1637279760,"title":"NOS Journaal","images":{"thumbnail":{"url":"https://cdn.gvidi.tv/img/booxmedia/e19c/static/NOS%20Journaal5.jpg"}},"additionalInformation":{"metadataID":"M~944f3c6e-3d19-11ec-9faf-2735f2e98d2a","externalMetadataID":"E~TV01-2026117420668"},"parentalGuidance":{"kijkwijzer":["AL"]},"restrictions":{"startoverDisabled":false,"catchupDisabled":false,"recordingDisabled":false},"isFiller":false}]}' parser({ date, channel, content }) .then(result => { @@ -57,7 +58,7 @@ it('can handle empty guide', done => { parser({ date, channel, - content: `{"code":500,"message":"Error retrieving guide"}` + content: '{"code":500,"message":"Error retrieving guide"}' }) .then(result => { expect(result).toMatchObject([]) diff --git a/sites/digiturk.com.tr/digiturk.com.tr.channels.xml b/sites/digiturk.com.tr/digiturk.com.tr.channels.xml index 568a9799..0954f4a5 100644 --- a/sites/digiturk.com.tr/digiturk.com.tr.channels.xml +++ b/sites/digiturk.com.tr/digiturk.com.tr.channels.xml @@ -1,135 +1,133 @@ - - - 360 HD - - A Haber HD - A News HD - A Para HD - A Spor HD - A2 HD - AL JAZEERA ENGLISH HD - Al Quran Al Kareem TV HD - Al Sunnah Al Nabawiyah TV HD - - ATV - - Baby TV - BBC EARTH HD - BBC Entertainment - BBC First - BBC World News HD - - beIN BOX OFFICE 1 - beIN GURME - beIN HOME & ENTERTAINMENT - beIN İZ HD - beIN MOVIES ACTION - beIN MOVIES ACTION 2 - beIN MOVIES FAMILY - beIN MOVIES PREMIERE - beIN MOVIES PREMIERE 2 - beIN MOVIES STARS - beIN MOVIES TURK - beIN SERIES COMEDY - beIN SERIES DRAMA - beIN SERIES SCI-FI - beIN SERIES VICE - beIN SPORTS 1 - beIN SPORTS 2 - beIN SPORTS 3 - beIN SPORTS 4 - beIN SPORTS 5 - beIN SPORTS HABER - beIN SPORTS MAX HD 1 - beIN SPORTS MAX HD 2 - BEYAZ TV HD - BLOOMBERG HD - Bloomberg HT HD - BOOMERANG HD - Cartoon Network - CBEEBIES HD - CGTN DOCUMENTARY HD - CGTN HD - CNN INTERNATIONAL - CNN TÜRK HD - Da Vinci - Digiturk 4K - Discovery Channel HD - Discovery Science HD - Disney Junior - Diyanet TV HD - DMAX HD - EKOTÜRK TV HD - EURONEWS - Eurosport 1 HD - Eurosport 2 HD - Fashion TV HD - FB TV HD - Flash Haber TV - FOX HD - France 24 HD - GS TV HD - HABER GLOBAL HD - HABERTURK HD - Halk TV - - - - KANAL 7 HD - Kanal D HD - - - KRT TV HD - - MCM Top HD - Mezzo HD - MinikaGO - MTV 00s - MTV Hits - MTV Live HD - Nat Geo Wild HD - National Geographic HD - Nick Jr. - Nickelodeon HD - NTV HD - - RAI UNO - - Show TV HD - - Star TV HD - - - TELE 1 HD - Teve2 HD - TGRT Haber HD - TJK TV - TLC HD - TRT 1 HD - TRT 2 HD - TRT 3 - TRT Spor - TRT Arabi - TRT AVAZ - TRT Belgesel HD - TRT Çocuk - TRT EBATV İLKOKUL HD - TRT EBATV LİSE HD - TRT EBATV ORTAOKUL HD - TRT Haber HD - TRT Kurdi - TRT Müzik - TRT SPOR HD - TRT SPOR YILDIZ - TRT TURK - TRT World HD - TV 100 HD - TV5 Monde Europe - TV8 HD - TVNET HD - Ülke TV HD - ULUSAL TV - VAV TV - Yaban TV - - \ No newline at end of file + + + + + + + + + + + + + + + + + AL JAZEERA ENGLISH HD + Baby TV + BBC Entertainment + BBC World News HD + BLOOMBERG HD + CGTN HD + CGTN DOCUMENTARY HD + CNN INTERNATIONAL + EURONEWS + Fashion TV HD + France 24 HD + TV5 Monde Europe + 360 HD + A2 HD + A Haber HD + Al Quran Al Kareem TV HD + Al Sunnah Al Nabawiyah TV HD + A News HD + A Para HD + A Spor HD + ATV + BBC EARTH HD + BBC First + beIN BOX OFFICE 1 + beIN GURME + beIN HOME & ENTERTAINMENT + beIN İZ HD + beIN MOVIES PREMIERE + beIN MOVIES ACTION + beIN MOVIES FAMILY + beIN MOVIES ACTION 2 + beIN MOVIES PREMIERE 2 + beIN MOVIES STARS + beIN MOVIES TURK + beIN SERIES COMEDY + beIN SERIES DRAMA + beIN SERIES SCI-FI + beIN SERIES VICE + beIN SPORTS 1 + beIN SPORTS 2 + beIN SPORTS 3 + beIN SPORTS 4 + beIN SPORTS 5 + beIN SPORTS HABER + beIN SPORTS MAX HD 1 + beIN SPORTS MAX HD 2 + BEYAZ TV HD + Bloomberg HT HD + BOOMERANG HD + Cartoon Network + CBEEBIES HD + CNN TÜRK HD + Da Vinci + Digiturk 4K + Discovery Channel HD + Discovery Science HD + Disney Junior + Diyanet TV HD + DMAX HD + EKOTÜRK TV HD + Eurosport 1 HD + Eurosport 2 HD + FB TV HD + Flash Haber TV + FOX HD + GS TV HD + HABER GLOBAL HD + HABERTURK HD + Halk TV + KANAL 7 HD + Kanal D HD + KRT TV HD + MCM Top HD + Mezzo HD + MinikaGO + MTV 00s + MTV Hits + MTV Live HD + Nat Geo Wild HD + National Geographic HD + Nickelodeon HD + Nick Jr. + NTV HD + RAI UNO + Show TV HD + Star TV HD + TELE 1 HD + Teve2 HD + TGRT Haber HD + TJK TV + TLC HD + TRT 1 HD + TRT 2 HD + TRT 3 - TRT Spor + TRT Arabi + TRT AVAZ + TRT Belgesel HD + TRT Çocuk + TRT EBATV İLKOKUL HD + TRT EBATV LİSE HD + TRT EBATV ORTAOKUL HD + TRT Haber HD + TRT Kurdi + TRT Müzik + TRT SPOR HD + TRT SPOR YILDIZ + TRT TURK + TRT World HD + TV 100 HD + TV8 HD + TVNET HD + Ülke TV HD + ULUSAL TV + VAV TV + Yaban TV + \ No newline at end of file diff --git a/sites/digiturk.com.tr/digiturk.com.tr.config.js b/sites/digiturk.com.tr/digiturk.com.tr.config.js index 253ad5dc..670fb569 100644 --- a/sites/digiturk.com.tr/digiturk.com.tr.config.js +++ b/sites/digiturk.com.tr/digiturk.com.tr.config.js @@ -32,7 +32,9 @@ module.exports = { site: 'digiturk.com.tr', days: 2, url: function ({ date, channel }) { - return `https://www.digiturk.com.tr/_Ajax/getBroadcast.aspx?channelNo=${channel.site_id}&date=${date.format('DD.MM.YYYY')}&tomorrow=false&primetime=false` + return `https://www.digiturk.com.tr/_Ajax/getBroadcast.aspx?channelNo=${ + channel.site_id + }&date=${date.format('DD.MM.YYYY')}&tomorrow=false&primetime=false` }, request: { method: 'GET', @@ -48,7 +50,7 @@ module.exports = { title: item.PName, // description: item.LongDescription, // category: parseCategory(item), - start :parseTime(item.PStartTime), + start: parseTime(item.PStartTime), stop: parseTime(item.PEndTime) }) }) @@ -59,8 +61,7 @@ module.exports = { } } - -function parseTime(time){ +function parseTime(time) { let timestamp = parseInt(time.replace('/Date(', '').replace('+0300)/', '')) return dayjs(timestamp) } @@ -72,5 +73,5 @@ function parseTime(time){ function parseItems(content) { if (!content) return [] const data = JSON.parse(content) - return (data && data.BChannels && data.BChannels[0].CPrograms) ? data.BChannels[0].CPrograms : [] + return data && data.BChannels && data.BChannels[0].CPrograms ? data.BChannels[0].CPrograms : [] } diff --git a/sites/digiturk.com.tr/digiturk.com.tr.test.js b/sites/digiturk.com.tr/digiturk.com.tr.test.js index 70329ac6..61f6c06f 100644 --- a/sites/digiturk.com.tr/digiturk.com.tr.test.js +++ b/sites/digiturk.com.tr/digiturk.com.tr.test.js @@ -1,4 +1,4 @@ -// npx epg-grabber --config=sites/digiturk.com.tr/digiturk.com.tr.config.js --channels=sites/digiturk.com.tr/digiturk.com.tr.channels.xml --output=guide.xml --days=2 +// npm run grab -- --site=digiturk.com.tr const { parser, url } = require('./digiturk.com.tr.config.js') const fs = require('fs') @@ -17,7 +17,9 @@ const channel = { it('can generate valid url', () => { const result = url({ date, channel }) - expect(result).toBe('https://www.digiturk.com.tr/_Ajax/getBroadcast.aspx?channelNo=14&date=19.01.2023&tomorrow=false&primetime=false') + expect(result).toBe( + 'https://www.digiturk.com.tr/_Ajax/getBroadcast.aspx?channelNo=14&date=19.01.2023&tomorrow=false&primetime=false' + ) }) it('can parse response', () => { @@ -42,6 +44,6 @@ it('can parse response', () => { }) it('can handle empty guide', () => { - const result = parser({ content: `` }) + const result = parser({ content: '' }) expect(result).toMatchObject([]) }) diff --git a/sites/directv.com.ar/directv.com.ar.channels.xml b/sites/directv.com.ar/directv.com.ar.channels.xml index 57b3a5da..20366efc 100644 --- a/sites/directv.com.ar/directv.com.ar.channels.xml +++ b/sites/directv.com.ar/directv.com.ar.channels.xml @@ -1,418 +1,416 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 24 Horas - A24 - A&E - AMC - América TV (ARG) - Animal Planet - Antena 3 Internacional - A3Cine HD - Atres Series - AXN - Baby TV HD - BBC World News - Bloomberg Television - Bravo TV - C5N Canal 5 Noticias (ARG) - Cable Noticias de Colombia - Canal 26 (ARG). - Televisión Pública Pampeana - EL TRES Rosario - Canal 7 de Jujuy - CANAL 9 - Canal A HD - Canal de la ciudad - Canal LUZ (ARG) - Canal 21 (ARG) - Canal Rural - Caracol Internacional - Cartoonito - Cartoon Network (Sur) - CGTN-Español - CINE.AR (ARG) - Cinecanal (ARG) - Cinelatino - Cinemax Sur - Magazine - CNN Chile - CNN en español - CNN International - Comedy Central - Crónica TV (ARG) - De Película - DeporTV - DHE - DSPORTS 2 - DSPORTS (ARG) - DSPORTS Fight - DSPORTS + - Discovery Channel (Sur) - Discovery Home & Health - Discovery Kids (Sur) - Discovery Theater HD - Discovery Turbo - Discovery World HD - Disney Channel (Sur) - Disney Junior Sur - DNews - Deutsche Welle - El Doce CANAL 12 DE CORDOBA - El Gourmet - Canal 9 (ARG) - EL SIETE - El Tiempo - El Trece (ARG) - Encuentro (ARG) - Encuentro Internacional - Enlace - E! Entertainment - ESPN 2 Latin Sur - ESPN 3 Sur - ESPN Argentina SD - ESPN Extra HD - ESPN Premium (SD) - Europa Europa HD - Eternal Word TV Network - Film & Arts - Food Network - FOX Sports 2 Argentina - FOX Sports 2 - FOX Sports 3 Argentina - FX - Glitz - Golden Edge - Golden TV - Golden HD - Golf Channel - HBO2 - HBO Family (Este) - HBO (Este) - HBO Mundi - HBO Plus (Este) - HBO Pop - HBO Signature - HBO Xtreme - Home & Garden TV HD - History 2 - History (Sur) - Hola TV - HTV - HustlerTV - Investigation Discovery - I-SAT - IVC Internacional - La Nacion + - Canal de las Estrellas - Lifetime - MÁS CHIC - MLB Extra Innings - MLB Extra Innings 2 - MTV Latino - Music Top HD - National Geographic (Sur) - NBA TV HD - NET TV (ARG) - NHK World TV - Nickelodeon - NICK JR - NTN 24 - Nuestra Tele noticias 24HS - OnDIRECTV (Sur) - PAKA PAKA (ARG) - Paramount Network - Pasiones - Playboy TV - PX Sports HD - Quiero Música en mi Idioma - RAI International - RCN Nuestra Tele - RTP Internacional - Sony Movies - Space (Sur) - STAR Channel - Studio Universal - SyFy - TBS Very Funny - Turner Classic Movies - Telediario Television - Telefe (ARG) - Canal 5 de Rosario - Telemax - Telemundo Internacional - Tierra Mia HD - TLC - Travel & Living Channel - TLNovelas - TN Todo Noticias - TNT Series - TNT (SUR) - TNT Sports - TRUTV - TV Chile - Tv Ciudad - TV Cortos HD - Globo Internacional - TV Perú - TV Perú Noticias HD - La TV Pública (ARG) - TyC Sports - Universal Cinema - Universal Comedy - Universal Crime Este - UNIVERSAL Cinema West - Universal Premiere Este - Universal Premiere Oeste - Universal Reality - Universal - Univision - Venus - VePLUS HD - Volver - VTV PLUS - Warner Channel - Warner Channel HD - ZEE TV - ZooMoo - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 24 Horas + A24 + A&E + AMC + América TV (ARG) + Animal Planet + Antena 3 Internacional + A3Cine HD + Atres Series + AXN + Baby TV HD + BBC World News + Bloomberg Television + Bravo TV + C5N Canal 5 Noticias (ARG) + Cable Noticias de Colombia + Canal 26 (ARG). + Televisión Pública Pampeana + EL TRES Rosario + Canal 7 de Jujuy + CANAL 9 + Canal A HD + Canal de la ciudad + Canal LUZ (ARG) + Canal 21 (ARG) + Canal Rural + Caracol Internacional + Cartoonito + Cartoon Network (Sur) + CGTN-Español + CINE.AR (ARG) + Cinecanal (ARG) + Cinelatino + Cinemax Sur + Magazine + CNN Chile + CNN en español + CNN International + Comedy Central + Crónica TV (ARG) + De Película + DeporTV + DHE + DSPORTS 2 + DSPORTS (ARG) + DSPORTS Fight + DSPORTS + + Discovery Channel (Sur) + Discovery Home & Health + Discovery Kids (Sur) + Discovery Theater HD + Discovery Turbo + Discovery World HD + Disney Channel (Sur) + Disney Junior Sur + DNews + Deutsche Welle + El Doce CANAL 12 DE CORDOBA + El Gourmet + Canal 9 (ARG) + EL SIETE + El Tiempo + El Trece (ARG) + Encuentro (ARG) + Encuentro Internacional + Enlace + E! Entertainment + ESPN 2 Latin Sur + ESPN 3 Sur + ESPN Argentina SD + ESPN Extra HD + ESPN Premium (SD) + Europa Europa HD + Eternal Word TV Network + Film & Arts + Food Network + FOX Sports 2 Argentina + FOX Sports 2 + FOX Sports 3 Argentina + FX + Glitz + Golden Edge + Golden TV + Golden HD + Golf Channel + HBO2 + HBO Family (Este) + HBO (Este) + HBO Mundi + HBO Plus (Este) + HBO Pop + HBO Signature + HBO Xtreme + Home & Garden TV HD + History 2 + History (Sur) + Hola TV + HTV + HustlerTV + Investigation Discovery + I-SAT + IVC Internacional + La Nacion + + Canal de las Estrellas + Lifetime + MÁS CHIC + MLB Extra Innings + MLB Extra Innings 2 + MTV Latino + Music Top HD + National Geographic (Sur) + NBA TV HD + NET TV (ARG) + NHK World TV + Nickelodeon + NICK JR + NTN 24 - Nuestra Tele noticias 24HS + OnDIRECTV (Sur) + PAKA PAKA (ARG) + Paramount Network + Pasiones + Playboy TV + PX Sports HD + Quiero Música en mi Idioma + RAI International + RCN Nuestra Tele + RTP Internacional + Sony Movies + Space (Sur) + STAR Channel + Studio Universal + SyFy + TBS Very Funny + Turner Classic Movies + Telediario Television + Telefe (ARG) + Canal 5 de Rosario + Telemax + Telemundo Internacional + Tierra Mia HD + TLC - Travel & Living Channel + TLNovelas + TN Todo Noticias + TNT Series + TNT (SUR) + TNT Sports + TRUTV + TV Chile + Tv Ciudad + TV Cortos HD + Globo Internacional + TV Perú + TV Perú Noticias HD + La TV Pública (ARG) + TyC Sports + Universal Cinema + Universal Comedy + Universal Crime Este + UNIVERSAL Cinema West + Universal Premiere Este + Universal Premiere Oeste + Universal Reality + Universal + Univision + Venus + VePLUS HD + Volver + VTV PLUS + Warner Channel + Warner Channel HD + ZEE TV + ZooMoo + diff --git a/sites/directv.com.ar/directv.com.ar.config.js b/sites/directv.com.ar/directv.com.ar.config.js index 380d4f60..9918e291 100644 --- a/sites/directv.com.ar/directv.com.ar.config.js +++ b/sites/directv.com.ar/directv.com.ar.config.js @@ -1,5 +1,4 @@ process.env['NODE_TLS_REJECT_UNAUTHORIZED'] = 0 -const axios = require('axios') const dayjs = require('dayjs') const utc = require('dayjs/plugin/utc') const timezone = require('dayjs/plugin/timezone') @@ -12,21 +11,22 @@ dayjs.extend(customParseFormat) module.exports = { site: 'directv.com.ar', days: 2, - url: `https://www.directv.com.ar/guia/ChannelDetail.aspx/GetProgramming`, + url: 'https://www.directv.com.ar/guia/ChannelDetail.aspx/GetProgramming', request: { method: 'POST', headers: { - 'Cookie': 'PGCSS=16; PGLang=S; PGCulture=es-AR;', - 'Accept': '*/*', + Cookie: 'PGCSS=16; PGLang=S; PGCulture=es-AR;', + Accept: '*/*', 'Accept-Language': 'es-419,es;q=0.9', - 'Connection': 'keep-alive', + Connection: 'keep-alive', 'Content-Type': 'application/json; charset=UTF-8', - 'Origin': 'https://www.directv.com.ar', - 'Referer': 'https://www.directv.com.ar/guia/ChannelDetail.aspx?id=1740&name=TLCHD', + Origin: 'https://www.directv.com.ar', + Referer: 'https://www.directv.com.ar/guia/ChannelDetail.aspx?id=1740&name=TLCHD', 'Sec-Fetch-Dest': 'empty', 'Sec-Fetch-Mode': 'cors', 'Sec-Fetch-Site': 'same-origin', - 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36', + 'User-Agent': + 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36', 'sec-ch-ua': '"Not.A/Brand";v="8", "Chromium";v="114", "Google Chrome";v="114"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"Windows"' diff --git a/sites/directv.com.ar/directv.com.ar.test.js b/sites/directv.com.ar/directv.com.ar.test.js index aea46225..95aa923b 100644 --- a/sites/directv.com.ar/directv.com.ar.test.js +++ b/sites/directv.com.ar/directv.com.ar.test.js @@ -1,4 +1,4 @@ -// npx epg-grabber --config=sites/directv.com.ar/directv.com.ar.config.js --channels=sites/directv.com.ar/directv.com.ar.channels.xml --output=guide.xml --days=2 +// npm run grab -- --site=directv.com.ar const { parser, url, request } = require('./directv.com.ar.config.js') const dayjs = require('dayjs') @@ -47,7 +47,8 @@ it('can generate valid request data', () => { }) it('can parse response', () => { - const content = `{"d":[{"ChannelSection":"","ChannelFullName":"A&E HD","IsFavorite":false,"ChannelName":"A&EHD","ChannelNumber":207,"ProgramList":[{"_channelSection":"","eventId":"120289890767","titleId":"SH0110397700000001","title":"Chicas guapas","programId":null,"description":"Un espacio destinado a la belleza y los distintos estilos de vida, que muestra el trabajo inspiracional de la moda latinoamericana.","episodeTitle":null,"channelNumber":120,"channelName":"AME2","channelFullName":"América TV (ARG)","channelSection":"","contentChannelID":120,"startTime":"/Date(-62135578800000)/","endTime":"/Date(-62135578800000)/","GMTstartTime":"/Date(-62135578800000)/","GMTendTime":"/Date(-62135578800000)/","css":16,"language":null,"tmsId":"SH0110397700000001","rating":"NR","categoryId":"Tipos de Programas","categoryName":0,"subCategoryId":0,"subCategoryName":"Series","serviceExpiration":"/Date(-62135578800000)/","crId":null,"promoUrl1":null,"promoUrl2":null,"price":0,"isPurchasable":"N","videoUrl":"","imageUrl":"https://dnqt2wx2urq99.cloudfront.net/ondirectv/LOGOS/Canales/AR/120.png","titleSecond":"Chicas guapas","isHD":"N","DetailsURL":null,"BuyURL":null,"ProgramServiceId":null,"SearchDateTime":null,"startTimeString":"6/19/2022 12:00:00 AM","endTimeString":"6/19/2022 12:15:00 AM","DurationInMinutes":null,"castDetails":null,"scheduleDetails":null,"seriesDetails":null,"processedSeasonDetails":null}]}]}` + const content = + '{"d":[{"ChannelSection":"","ChannelFullName":"A&E HD","IsFavorite":false,"ChannelName":"A&EHD","ChannelNumber":207,"ProgramList":[{"_channelSection":"","eventId":"120289890767","titleId":"SH0110397700000001","title":"Chicas guapas","programId":null,"description":"Un espacio destinado a la belleza y los distintos estilos de vida, que muestra el trabajo inspiracional de la moda latinoamericana.","episodeTitle":null,"channelNumber":120,"channelName":"AME2","channelFullName":"América TV (ARG)","channelSection":"","contentChannelID":120,"startTime":"/Date(-62135578800000)/","endTime":"/Date(-62135578800000)/","GMTstartTime":"/Date(-62135578800000)/","GMTendTime":"/Date(-62135578800000)/","css":16,"language":null,"tmsId":"SH0110397700000001","rating":"NR","categoryId":"Tipos de Programas","categoryName":0,"subCategoryId":0,"subCategoryName":"Series","serviceExpiration":"/Date(-62135578800000)/","crId":null,"promoUrl1":null,"promoUrl2":null,"price":0,"isPurchasable":"N","videoUrl":"","imageUrl":"https://dnqt2wx2urq99.cloudfront.net/ondirectv/LOGOS/Canales/AR/120.png","titleSecond":"Chicas guapas","isHD":"N","DetailsURL":null,"BuyURL":null,"ProgramServiceId":null,"SearchDateTime":null,"startTimeString":"6/19/2022 12:00:00 AM","endTimeString":"6/19/2022 12:15:00 AM","DurationInMinutes":null,"castDetails":null,"scheduleDetails":null,"seriesDetails":null,"processedSeasonDetails":null}]}]}' const result = parser({ content, channel }).map(p => { p.start = p.start.toJSON() p.stop = p.stop.toJSON() @@ -71,7 +72,7 @@ it('can parse response', () => { it('can handle empty guide', () => { const result = parser({ - content: ``, + content: '', channel }) expect(result).toMatchObject([]) diff --git a/sites/directv.com.uy/directv.com.uy.channels.xml b/sites/directv.com.uy/directv.com.uy.channels.xml index 01869235..94169e9e 100644 --- a/sites/directv.com.uy/directv.com.uy.channels.xml +++ b/sites/directv.com.uy/directv.com.uy.channels.xml @@ -1,148 +1,146 @@ - - - 24 Horas - AMC - Animal Planet - Antena 3 Internacional - A3Cine HD - Atres Series - AXN - Baby TV HD - BBC World News - Bloomberg Television - Canal 4 (URU) - Canal 5 (URU) - Canal 12 (URU) - Canal 10 (URU) - Cable Noticias de Colombia - Canal 26 (ARG). - Canal LUZ (ARG) - Canal 21 (ARG) - Caracol Internacional - Cartoonito - Cartoon Network (Sur) - CGTN-Español - Cinecanal (COL) - Cinelatino - Cinemax Sur - Magazine - CNN Chile - CNN en español - CNN International - Comedy Central - Crónica TV (ARG) - De Película - DHE - DIRECTV Sports 2 - DIRECTV Sports (URU) - DIRECTV Sports Fight - DIRECTV Sports + - Discovery Channel (Sur) - Discovery Kids (Sur) - Discovery Theater HD - Discovery Turbo - Discovery World HD - Disney Channel (Sur) - Disney Junior Sur - Deutsche Welle - El Gourmet - El Tiempo - Encuentro Internacional - Enlace - E! Entertainment - ESPN 2 Sur - ESPN - ESPN Extra HD - Europa Europa HD - Eternal Word TV Network - Food Network - FOX Sports 2 - FOX Sports 3 - FX - Glitz - Golden Edge - Golden TV - Golden HD - Golf Channel - HBO2 - HBO Family (Este) - HBO (Este) - HBO Mundi - HBO Plus (Este) - HBO Pop - HBO Signature - HBO Xtreme - Home & Garden TV HD - History 2 - History (Sur) - Hola TV - HTV - HustlerTV - Investigation Discovery - I-SAT - IVC Internacional - La Nacion + - Canal de las Estrellas - Lifetime - MÁS CHIC - MLB Extra Innings - MLB Extra Innings - MTV Latino - Music Top HD - National Geographic (Sur) - NBA TV HD - NHK World TV - Nickelodeon - NICK JR - NTN 24 - Nuestra Tele noticias 24HS - OnDIRECTV (Sur) - Paramount Network - Pasiones - Playboy TV - PX Sports HD - Quiero Música en mi Idioma - RAI International - RCN Nuestra Tele - RTP Internacional - Smithsonian Channel HD - - Space (Sur) - STAR Channel - Studio Universal - Sun Channel - SyFy - TBS Very Funny - Turner Classic Movies - Telemundo Internacional - Tierra Mia HD - TLC - Travel & Living Channel - TLNovelas - TN Todo Noticias - TNT Series - TNT Latin America - TRUTV - Tv Ciudad (URU) - TV Chile - TV Cortos HD - Globo Internacional - TV Perú - TV Perú Noticias HD - TYC International - Universal Cinema - Universal Comedy - Universal Crime Este - UNIVERSAL Cinema West - Universal Premiere Este - Universal Premiere Oeste - Universal Reality - Universal - Univision - Venus - VTV (URU) - VTV Plus (URU) - Warner Channel - ZEE TV - ZooMoo - - + + + 24 Horas + AMC + Animal Planet + Antena 3 Internacional + A3Cine HD + Atres Series + AXN + Baby TV HD + BBC World News + Bloomberg Television + Cable Noticias de Colombia + Canal 10 (URU) + Canal 26 (ARG). + Canal 4 (URU) + Canal 5 (URU) + Canal LUZ (ARG) + Canal 21 (ARG) + Caracol Internacional + Cartoonito + Cartoon Network (Sur) + CGTN-Español + Cinecanal (COL) + Cinelatino + Cinemax Sur + Magazine + CNN Chile + CNN en español + CNN International + Comedy Central + Crónica TV (ARG) + De Película + DHE + DIRECTV Sports 2 + DIRECTV Sports Fight + DIRECTV Sports + + DIRECTV Sports (URU) + Discovery Channel (Sur) + Discovery Kids (Sur) + Discovery Theater HD + Discovery Turbo + Discovery World HD + Disney Channel (Sur) + Disney Junior Sur + Deutsche Welle + El Gourmet + El Tiempo + Encuentro Internacional + Enlace + E! Entertainment + ESPN 2 Sur + ESPN + ESPN Extra HD + Europa Europa HD + Eternal Word TV Network + Food Network + FOX Sports 2 + FOX Sports 3 + FX + Glitz + Golden Edge + Golden TV + Golden HD + Golf Channel + HBO2 + HBO Family (Este) + HBO (Este) + HBO Mundi + HBO Plus (Este) + HBO Pop + HBO Signature + HBO Xtreme + Home & Garden TV HD + History 2 + History (Sur) + Hola TV + HTV + HustlerTV + Investigation Discovery + I-SAT + IVC Internacional + La Nacion + + Canal de las Estrellas + Lifetime + MÁS CHIC + MLB Extra Innings + MLB Extra Innings + MTV Latino + Music Top HD + National Geographic (Sur) + NBA TV HD + NHK World TV + Nickelodeon + NICK JR + NTN 24 - Nuestra Tele noticias 24HS + OnDIRECTV (Sur) + Paramount Network + Pasiones + Playboy TV + PX Sports HD + Quiero Música en mi Idioma + RAI International + RCN Nuestra Tele + RTP Internacional + Smithsonian Channel HD + Space (Sur) + STAR Channel + Studio Universal + Sun Channel + SyFy + TBS Very Funny + Turner Classic Movies + Canal 12 (URU) + Telemundo Internacional + Tierra Mia HD + TLC - Travel & Living Channel + TLNovelas + TN Todo Noticias + TNT Series + TNT Latin America + TRUTV + TV Chile + Tv Ciudad (URU) + TV Cortos HD + Globo Internacional + TV Perú + TV Perú Noticias HD + TYC International + Universal Cinema + Universal Comedy + Universal Crime Este + UNIVERSAL Cinema West + Universal Premiere Este + Universal Premiere Oeste + Universal Reality + Universal + Univision + Venus + VTV (URU) + VTV Plus (URU) + Warner Channel + ZEE TV + ZooMoo + diff --git a/sites/directv.com.uy/directv.com.uy.config.js b/sites/directv.com.uy/directv.com.uy.config.js index c03263a3..f1a828ac 100644 --- a/sites/directv.com.uy/directv.com.uy.config.js +++ b/sites/directv.com.uy/directv.com.uy.config.js @@ -1,4 +1,3 @@ -const axios = require('axios') const dayjs = require('dayjs') const utc = require('dayjs/plugin/utc') const timezone = require('dayjs/plugin/timezone') @@ -11,7 +10,7 @@ dayjs.extend(customParseFormat) module.exports = { site: 'directv.com.uy', days: 2, - url: `https://www.directv.com.uy/guia/ChannelDetail.aspx/GetProgramming`, + url: 'https://www.directv.com.uy/guia/ChannelDetail.aspx/GetProgramming', request: { method: 'POST', headers: { diff --git a/sites/directv.com.uy/directv.com.uy.test.js b/sites/directv.com.uy/directv.com.uy.test.js index f1a88ea7..146748e2 100644 --- a/sites/directv.com.uy/directv.com.uy.test.js +++ b/sites/directv.com.uy/directv.com.uy.test.js @@ -1,4 +1,4 @@ -// npx epg-grabber --config=sites/directv.com.uy/directv.com.uy.config.js --channels=sites/directv.com.uy/directv.com.uy.channels.xml --output=guide.xml --days=2 +// npm run grab -- --site=directv.com.uy const { parser, url, request } = require('./directv.com.uy.config.js') const fs = require('fs') @@ -71,7 +71,7 @@ it('can parse response', () => { it('can handle empty guide', () => { const result = parser({ - content: ``, + content: '', channel }) expect(result).toMatchObject([]) diff --git a/sites/directv.com/directv.com.channels.xml b/sites/directv.com/directv.com.channels.xml index bf11dbc3..a5b4d974 100644 --- a/sites/directv.com/directv.com.channels.xml +++ b/sites/directv.com/directv.com.channels.xml @@ -1,1048 +1,1046 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 5StarMAX HD - 88 Films - 88 TV - ACC Network - AccuWeather HD - ActionMax HD - A&E - Altitude Sports - AMC - AMC+ HD - American Heroes Channel - AVC (Infomercial) - Animal Planet - Antena 3 - Arirang TV - ASPIRE (HD) - Atreseries - AT&T SportsNet Pittsburgh - AT&T SportsNet Pittsburgh (Alternate) - AT&T SportsNet Rocky Mountain - AT&T SportsNet Rocky Mountain West - AT&T SportsNet Southwest - AT&T SportsNet Southwest (Alternate) - AXS TV HD - BabyFirst - BabyTV - Bally Sports Arizona - Bally Sports Arizona Extra - Bally Sports Arizona Extra 2 - Bally Sports Detroit - Bally Sports Florida - Bally Sports Great Lakes - Bally Sports Kansas City - Bally Sports Midwest - Bally Sports Midwest Extra - Bally Sports North - Bally Sports Ohio - Bally Sports Cincinnati - Bally Sports Ohio Extra - Bally Sports Oklahoma HD - Bally Sports San Diego - Bally Sports San Diego Extra - Bally Sports SoCal - Bally Sports SoCal Extra - Bally Sports South - Bally Sports Southeast - Bally Sports Southeast Extra - Bally Sports Southwest - Bally Sports Sun - Bally Sports Sun Extra - Bally Sports West - Bally Sports West Extra - Bally Sports Wisconsin HD - Bally Sports Wisconsin Extra - Bang U - BBC America - BBC World News HD - BET - BET Her - BET West HD - Bloomberg TV - Boomerang - BounceTV - Bravo - BYUtv - Multimedios - Caracol TV - Cartoon Network - Cartoon Network West - CBS Sports Network - CCTV4 - CGTN 2053 (99R) - Channel NECO International - Charming China 2055 - Cheddar News - Cinelatino - Cinemax - Cinemax West - Cleo TV - CMT - CNBC - CNBC World - CNN - Comedy Central - Comedy Central West HD - Comedy TV HD - Cooking Channel - Crime & Investigation HD - CSPAN - CSPAN 2 - Christian Television Net - CW Plus - Daystar - Destination America - Discovery - Discovery Family Channel - Discovery Life - Disney Channel (East) - Disney Channel (West) - Disney Junior - Disney XD - Dog TV - Ecuador TV - Ecuavisa Internacional - E! - Enlace - ESPN - ESPN2 - ESPN College Extra 793 HD - ESPN College Extra 794 HD - ESPN College Extra 795 HD - ESPN College Extra 796 HD - ESPN College Extra 797 HD - ESPN College Extra 798 HD - ESPNews - ESPNU - Estrella News - Estrella TV - EWTN - Family Entertainment Television - Flix - FM HD - Food Network - FOROtv - Fox Business Network - FOX News Channel - FOX Soccer Plus - FOX Sports 1 - FOX Sports 2 - Freeform - Free Speech TV - Fuse HD - FX - FX Movie - FXX - FYI - Game Show Network - GEM Shopping Network - Golf Channel - GolTV - Great American Family - GRIT - Hallmark - Hallmark Drama HD - Hallmark Movies & Mysteries HD - HBO 2 East - HBO 2 West - HBO Comedy HD - HBO East - HBO Family East - HBO Family West - HBO Signature - HBO West - HBO Zone HD - HDNET MOVIES - HGTV - History - History en Espanol - HLN - Hope Channel - Home Shopping Network - Hustler TV - IFC - IMPACT TV - INSP - Investigation Discovery - ION Television East HD - JBS - Jewelry Television (72) - Nippon TV HD - Justice Central HD - KABC (Los Angeles) ABC West - KBS Korea - KCBS (Los Angeles) CBS West - KTLA CW West - KTTV (Los Angeles) FOX West - Lifetime - LMN - LinkTV - Logo - Longhorn Network HD - Magnolia Network - Marquee Sports Network - MASN - MAVTV HD - MGM+ HD - MGM+ Hits East - MGM+ Marquee HD - MLB Network - MLB Network Alt. 213-1 - MoreMAX - MotorTrend HD - MovieMAX - MSNBC - MTV2 - MTV Classic - MTV - MTV Live HD - MTV West HD - Music Choice '70s - Music Choice '80s - Music Choice '90s - Music Choice Adult Alternative - Music Choice Alternative - Music Choice Blues - Music Choice Classic Country - Music Choice Classic Rock - Music Choice Contemporary Christian - Music Choice Country Hits - Music Choice Dance/EDM - Music Choice Easy Listening - Music Choice Gospel - Music Choice Hip-Hop And R&B - Music Choice Hit List - Music Choice Indie - Music Choice Jazz - Music Choice Kids Only! - Music Choice Light Classical - Music Choice Love Songs - Music Choice Max - Music Choice Metal - Music Choice Mexicana - Music Choice Musica Urbana - Music Choice Party Favorites - Music Choice Pop & Country - Music Choice Pop Hits - Music Choice Pop Latino - Music Choice Rap - Music Choice R&B Classics - Music Choice R&B Soul - Music Choice Reggae - Music Choice Rock - Music Choice Rock Hits - Music Choice Romances - Music Choice Singers & Swing - Music Choice Smooth Jazz - Music Choice Soft Rock - Music Choice Soundscapes - Music Choice Sounds of the Seasons - Music Choice Teen Beats - Music Choice Throwback Jamz - Music Choice Today's Country - Music Choice Toddler Tunes - Music Choice Tropicales - Music Choice Y2K - NASA TV - National Geographic - Nat Geo WILD - NBA League Pass 747 - NBA League Pass 748 - NBA League Pass 749 - NBA League Pass 750 - NBA League Pass 765 - NBA League Pass 766 - NBA League Pass 767 - NBA League Pass 768 - NBA TV - NBC Sports Bay Area - NBC Sports Bay Area Plus (Alternate 2) - NBC Sports Boston - NBC Sports California - NBC Sports Chicago - NBC Sports Chicago Plus 2 - NBC Sports Washington - NBC Sports Washington (Alternate) - NESN - Newsmax TV - NewsNation - NFL Network - NFL Red Zone 703 HD - NFL Sunday Ticket 705 - NFL Sunday Ticket 714 - NFL Sunday Ticket 715 - NFL Sunday Ticket 716 - NFL Sunday Ticket 717 - NFL Sunday Ticket 718 - NFL Sunday Ticket 706 - NFL Sunday Ticket 707 - NFL Sunday Ticket 708 - NFL Sunday Ticket 709 - NFL Sunday Ticket 710 - NFL Sunday Ticket 711 - NFL Sunday Ticket 712 - NFL Sunday Ticket 713 - NHL Center Ice 769 - NHL Center Ice 780 - NHL Center Ice 781 - NHL Center Ice 782 - NHL Center Ice 783 - NHL Center Ice 784 - NHL Center Ice 785 - NHL Center Ice 786 - NHL Center Ice 787 - NHL Center Ice 788 - NHL Center Ice 789 - NHL Center Ice 771 - NHL Center Ice 790 - NHL Center Ice 791 - NHL Center Ice 792 - NHL Center Ice 793 - NHL Center Ice 773 - NHL Center Ice 774 - NHL Center Ice 775 - NHL Center Ice 776 - NHL Center Ice 777 - NHL Center Ice 778 - NHL Center Ice 779 - NHL Network - NHL Network Alternate - Nickelodeon East - Nickelodeon West - Nick Jr. - Nicktoons - NRB - OPM TV - Outdoor Channel - Ovation - OWN - OWN West - Oxygen True Crime - Paramount Network - PBSNET - PBS Kids - Penthouse TV - Penthouse TV Monthly Offer - Peru Magico - Playboy TV HD - Playboy TV Monthly Offer - POP - Pursuit Channel - QVC - QVC2 - QVC3 - Reality Kings - ReelzChannel - Revolt HD - ROOT SPORTS Northwest - ROOT Sports Northwest Plus 2 - ROOT SPORTS Northwest Plus - Son Life Broadcasting HD - Science - Scientology Network - SEC Network - SEC Network Alternate - Shop HQ - Shop LC - SHOWTIME 2 - Showtime (E) - Showtime Extreme - Showtime FamilyZone - Showtime Next HD - Showtime Showcase HD - Showtime (W) - SHOxBET - Smithsonian Channel HD - Sony Movies - So Yummy - Spectrum SportsNet - Spectrum SportsNet LA - Sportsman Channel - SportsNet New York - Stadium College Sports Atlantic - Stadium College Sports Central - Stadium College Sports Pacific - STARZ Cinema HD - STARZ Comedy HD - STARZ East - STARZ Edge - STARZ Encore Action - STARZ Encore Black - STARZ Encore Classic - STARZ Encore - STARZ Encore Family - STARZ Encore Suspense - STARZ Encore West - STARZ Encore Westerns - STARZ in Black - STARZ Kids & Family HD - STARZ West - SundanceTV HD - SUR Peru - SYFY - Tastemade - TBS - TBS West HD - TCM - TCT Network - TeenNick - TeleCentro - Telefe - Tennis Channel - Cowboy Channel - TFC - The Filipino Channel (99R) - The Movie Channel East - The Movie Channel West - The Movie Channel Xtra HD - The Weather Channel - The WORD Network - ThrillerMAX HD - TLC - TNT - TNT West HD - Travel Channel - truTV - TV Chile - TVE - TV Land - TV One HD - Universal Kids - Living Faith Network - UPTV - USA Network - VePlus - VH1 - VICE - Videorola - Vivid TV - Vivid TV Monthly Offer - A3 Parkersburg 65 PBS (Virt) - WABC (New York) ABC East - WCBS (New York) CBS East - Parkersburg, WV WCHS ABC 8 SD - WE tv - Parkersburg, WV WIYE CBS 47 A3 HD - WNBC (New York) NBC East - WNYW (New York) FOX East - World Harvest Television - Parkersburg, WV WOVA FOX 22 A3 HD - Parkersburg, WV WTAP NBC 15 A3 HD - Parkersburg, WV WTAPDT2 MNT 17 A3 SD - Once Mexico - Yankee Ent. & Sports (YES) - Azteca America - Bandamax - Canal 22 Internacional - Centroamerica TV - Cine Estelar - Cine Mexicano - Cine Nostalgia - Sony Cine - CNN en Espanol - De Pelicula Clasico - De Pelicula - Discovery en Espanol - Discovery Familia - ESPN Deportes - FOX Deportes - Galavision - God TV - HBO Latino - HITN - Hola TV - Cinemax Latino HD - megaTV - Tr3S - Nat Geo Mundo - Universo - NTN 24 - Pasiones - Nuestra Tele - Starz Encore en Espanol - Telemundo East - Telemundo West - TUDN - TyC Sports - UniMas SD West - Univision East - Univision telenovelas - Univision West - Viendo Movies - WAPA America - ZooMoo - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5StarMAX HD + 88 Films + 88 TV + ACC Network + AccuWeather HD + ActionMax HD + A&E + Altitude Sports + AMC + AMC+ HD + American Heroes Channel + AVC (Infomercial) + Animal Planet + Antena 3 + Arirang TV + ASPIRE (HD) + Atreseries + AT&T SportsNet Pittsburgh + AT&T SportsNet Pittsburgh (Alternate) + AT&T SportsNet Rocky Mountain + AT&T SportsNet Rocky Mountain West + AT&T SportsNet Southwest + AT&T SportsNet Southwest (Alternate) + AXS TV HD + BabyFirst + BabyTV + Bally Sports Arizona + Bally Sports Arizona Extra + Bally Sports Arizona Extra 2 + Bally Sports Detroit + Bally Sports Florida + Bally Sports Great Lakes + Bally Sports Kansas City + Bally Sports Midwest + Bally Sports Midwest Extra + Bally Sports North + Bally Sports Ohio + Bally Sports Cincinnati + Bally Sports Ohio Extra + Bally Sports Oklahoma HD + Bally Sports San Diego + Bally Sports San Diego Extra + Bally Sports SoCal + Bally Sports SoCal Extra + Bally Sports South + Bally Sports Southeast + Bally Sports Southeast Extra + Bally Sports Southwest + Bally Sports Sun + Bally Sports Sun Extra + Bally Sports West + Bally Sports West Extra + Bally Sports Wisconsin HD + Bally Sports Wisconsin Extra + Bang U + BBC America + BBC World News HD + BET + BET Her + BET West HD + Bloomberg TV + Boomerang + BounceTV + Bravo + BYUtv + Multimedios + Caracol TV + Cartoon Network + Cartoon Network West + CBS Sports Network + CCTV4 + CGTN 2053 (99R) + Channel NECO International + Charming China 2055 + Cheddar News + Cinelatino + Cinemax + Cinemax West + Cleo TV + CMT + CNBC + CNBC World + CNN + Comedy Central + Comedy Central West HD + Comedy TV HD + Cooking Channel + Crime & Investigation HD + CSPAN + CSPAN 2 + Christian Television Net + CW Plus + Daystar + Destination America + Discovery + Discovery Family Channel + Discovery Life + Disney Channel (East) + Disney Channel (West) + Disney Junior + Disney XD + Dog TV + Ecuador TV + Ecuavisa Internacional + E! + Enlace + ESPN + ESPN2 + ESPN College Extra 793 HD + ESPN College Extra 794 HD + ESPN College Extra 795 HD + ESPN College Extra 796 HD + ESPN College Extra 797 HD + ESPN College Extra 798 HD + ESPNews + ESPNU + Estrella News + Estrella TV + EWTN + Family Entertainment Television + Flix + FM HD + Food Network + FOROtv + Fox Business Network + FOX News Channel + FOX Soccer Plus + FOX Sports 1 + FOX Sports 2 + Freeform + Free Speech TV + Fuse HD + FX + FX Movie + FXX + FYI + Game Show Network + GEM Shopping Network + Golf Channel + GolTV + Great American Family + GRIT + Hallmark + Hallmark Drama HD + Hallmark Movies & Mysteries HD + HBO 2 East + HBO 2 West + HBO Comedy HD + HBO East + HBO Family East + HBO Family West + HBO Signature + HBO West + HBO Zone HD + HDNET MOVIES + HGTV + History + History en Espanol + HLN + Hope Channel + Home Shopping Network + Hustler TV + IFC + IMPACT TV + INSP + Investigation Discovery + ION Television East HD + JBS + Jewelry Television (72) + Nippon TV HD + Justice Central HD + KABC (Los Angeles) ABC West + KBS Korea + KCBS (Los Angeles) CBS West + KTLA CW West + KTTV (Los Angeles) FOX West + Lifetime + LMN + LinkTV + Logo + Longhorn Network HD + Magnolia Network + Marquee Sports Network + MASN + MAVTV HD + MGM+ HD + MGM+ Hits East + MGM+ Marquee HD + MLB Network + MLB Network Alt. 213-1 + MoreMAX + MotorTrend HD + MovieMAX + MSNBC + MTV2 + MTV Classic + MTV + MTV Live HD + MTV West HD + Music Choice '70s + Music Choice '80s + Music Choice '90s + Music Choice Adult Alternative + Music Choice Alternative + Music Choice Blues + Music Choice Classic Country + Music Choice Classic Rock + Music Choice Contemporary Christian + Music Choice Country Hits + Music Choice Dance/EDM + Music Choice Easy Listening + Music Choice Gospel + Music Choice Hip-Hop And R&B + Music Choice Hit List + Music Choice Indie + Music Choice Jazz + Music Choice Kids Only! + Music Choice Light Classical + Music Choice Love Songs + Music Choice Max + Music Choice Metal + Music Choice Mexicana + Music Choice Musica Urbana + Music Choice Party Favorites + Music Choice Pop & Country + Music Choice Pop Hits + Music Choice Pop Latino + Music Choice Rap + Music Choice R&B Classics + Music Choice R&B Soul + Music Choice Reggae + Music Choice Rock + Music Choice Rock Hits + Music Choice Romances + Music Choice Singers & Swing + Music Choice Smooth Jazz + Music Choice Soft Rock + Music Choice Soundscapes + Music Choice Sounds of the Seasons + Music Choice Teen Beats + Music Choice Throwback Jamz + Music Choice Today's Country + Music Choice Toddler Tunes + Music Choice Tropicales + Music Choice Y2K + NASA TV + National Geographic + Nat Geo WILD + NBA League Pass 747 + NBA League Pass 748 + NBA League Pass 749 + NBA League Pass 750 + NBA League Pass 765 + NBA League Pass 766 + NBA League Pass 767 + NBA League Pass 768 + NBA TV + NBC Sports Bay Area + NBC Sports Bay Area Plus (Alternate 2) + NBC Sports Boston + NBC Sports California + NBC Sports Chicago + NBC Sports Chicago Plus 2 + NBC Sports Washington + NBC Sports Washington (Alternate) + NESN + Newsmax TV + NewsNation + NFL Network + NFL Red Zone 703 HD + NFL Sunday Ticket 705 + NFL Sunday Ticket 714 + NFL Sunday Ticket 715 + NFL Sunday Ticket 716 + NFL Sunday Ticket 717 + NFL Sunday Ticket 718 + NFL Sunday Ticket 706 + NFL Sunday Ticket 707 + NFL Sunday Ticket 708 + NFL Sunday Ticket 709 + NFL Sunday Ticket 710 + NFL Sunday Ticket 711 + NFL Sunday Ticket 712 + NFL Sunday Ticket 713 + NHL Center Ice 769 + NHL Center Ice 780 + NHL Center Ice 781 + NHL Center Ice 782 + NHL Center Ice 783 + NHL Center Ice 784 + NHL Center Ice 785 + NHL Center Ice 786 + NHL Center Ice 787 + NHL Center Ice 788 + NHL Center Ice 789 + NHL Center Ice 771 + NHL Center Ice 790 + NHL Center Ice 791 + NHL Center Ice 792 + NHL Center Ice 793 + NHL Center Ice 773 + NHL Center Ice 774 + NHL Center Ice 775 + NHL Center Ice 776 + NHL Center Ice 777 + NHL Center Ice 778 + NHL Center Ice 779 + NHL Network + NHL Network Alternate + Nickelodeon East + Nickelodeon West + Nick Jr. + Nicktoons + NRB + OPM TV + Outdoor Channel + Ovation + OWN + OWN West + Oxygen True Crime + Paramount Network + PBSNET + PBS Kids + Penthouse TV + Penthouse TV Monthly Offer + Peru Magico + Playboy TV HD + Playboy TV Monthly Offer + POP + Pursuit Channel + QVC + QVC2 + QVC3 + Reality Kings + ReelzChannel + Revolt HD + ROOT SPORTS Northwest + ROOT Sports Northwest Plus 2 + ROOT SPORTS Northwest Plus + Son Life Broadcasting HD + Science + Scientology Network + SEC Network + SEC Network Alternate + Shop HQ + Shop LC + SHOWTIME 2 + Showtime (E) + Showtime Extreme + Showtime FamilyZone + Showtime Next HD + Showtime Showcase HD + Showtime (W) + SHOxBET + Smithsonian Channel HD + Sony Movies + So Yummy + Spectrum SportsNet + Spectrum SportsNet LA + Sportsman Channel + SportsNet New York + Stadium College Sports Atlantic + Stadium College Sports Central + Stadium College Sports Pacific + STARZ Cinema HD + STARZ Comedy HD + STARZ East + STARZ Edge + STARZ Encore Action + STARZ Encore Black + STARZ Encore Classic + STARZ Encore + STARZ Encore Family + STARZ Encore Suspense + STARZ Encore West + STARZ Encore Westerns + STARZ in Black + STARZ Kids & Family HD + STARZ West + SundanceTV HD + SUR Peru + SYFY + Tastemade + TBS + TBS West HD + TCM + TCT Network + TeenNick + TeleCentro + Telefe + Tennis Channel + Cowboy Channel + TFC - The Filipino Channel (99R) + The Movie Channel East + The Movie Channel West + The Movie Channel Xtra HD + The Weather Channel + The WORD Network + ThrillerMAX HD + TLC + TNT + TNT West HD + Travel Channel + truTV + TV Chile + TVE + TV Land + TV One HD + Universal Kids + Living Faith Network + UPTV + USA Network + VePlus + VH1 + VICE + Videorola + Vivid TV + Vivid TV Monthly Offer + A3 Parkersburg 65 PBS (Virt) + WABC (New York) ABC East + WCBS (New York) CBS East + Parkersburg, WV WCHS ABC 8 SD + WE tv + Parkersburg, WV WIYE CBS 47 A3 HD + WNBC (New York) NBC East + WNYW (New York) FOX East + World Harvest Television + Parkersburg, WV WOVA FOX 22 A3 HD + Parkersburg, WV WTAP NBC 15 A3 HD + Parkersburg, WV WTAPDT2 MNT 17 A3 SD + Once Mexico + Yankee Ent. & Sports (YES) + Azteca America + Bandamax + Canal 22 Internacional + Centroamerica TV + Cine Estelar + Cine Mexicano + Cine Nostalgia + Sony Cine + CNN en Espanol + De Pelicula Clasico + De Pelicula + Discovery en Espanol + Discovery Familia + ESPN Deportes + FOX Deportes + Galavision + God TV + HBO Latino + HITN + Hola TV + Cinemax Latino HD + megaTV + Tr3S + Nat Geo Mundo + Universo + NTN 24 + Pasiones + Nuestra Tele + Starz Encore en Espanol + Telemundo East + Telemundo West + TUDN + TyC Sports + UniMas SD West + Univision East + Univision telenovelas + Univision West + Viendo Movies + WAPA America + ZooMoo + diff --git a/sites/directv.com/directv.com.config.js b/sites/directv.com/directv.com.config.js index f8b805db..3346a06c 100644 --- a/sites/directv.com/directv.com.config.js +++ b/sites/directv.com/directv.com.config.js @@ -13,17 +13,13 @@ module.exports = { ttl: 60 * 60 * 1000 // 1 hour }, headers: { - 'Accept-Language':'en-US,en;q=0.5', - 'Connection':'keep-alive', - }, + 'Accept-Language': 'en-US,en;q=0.5', + Connection: 'keep-alive' + } }, url({ date, channel }) { const [channelId, childId] = channel.site_id.split('#') - return `https://www.directv.com/json/channelschedule?channels=${ - channelId - }&startTime=${date.format()}&hours=24&chId=${ - childId - }` + return `https://www.directv.com/json/channelschedule?channels=${channelId}&startTime=${date.format()}&hours=24&chId=${childId}` }, async parser({ content, channel }) { const programs = [] @@ -52,7 +48,7 @@ module.exports = { }, async channels({ zip }) { const html = await axios - .get(`https://www.directv.com/guide`, { + .get('https://www.directv.com/guide', { headers: { cookie: `dtve-prospect-zip=${zip}` } @@ -62,7 +58,7 @@ module.exports = { const $ = cheerio.load(html) const script = $('#dtvClientData').html() - const [_, json] = script.match(/var dtvClientData = (.*);/) || [null, null] + const [, json] = script.match(/var dtvClientData = (.*);/) || [null, null] const data = JSON.parse(json) let items = data.guideData.channels diff --git a/sites/directv.com/directv.com.test.js b/sites/directv.com/directv.com.test.js index 1ea8c375..d84d8029 100644 --- a/sites/directv.com/directv.com.test.js +++ b/sites/directv.com/directv.com.test.js @@ -1,5 +1,5 @@ // node ./scripts/commands/parse-channels.js --config=./sites/directv.com/directv.com.config.js --output=./sites/directv.com/directv.com.channels.xml --set=zip:10001 -// npx epg-grabber --config=sites/directv.com/directv.com.config.js --channels=sites/directv.com/directv.com.channels.xml --output=guide.xml --days=2 +// npm run grab -- --site=directv.com const { parser, url } = require('./directv.com.config.js') const fs = require('fs') diff --git a/sites/dishtv.in/dishtv.in.channels.xml b/sites/dishtv.in/dishtv.in.channels.xml index 92af0391..ccc25b10 100644 --- a/sites/dishtv.in/dishtv.in.channels.xml +++ b/sites/dishtv.in/dishtv.in.channels.xml @@ -1,460 +1,458 @@ - - - 1 Sports - 9X Jhakaas - 9XM - 9X Tashan - Aaj Tak - Aakaash Aath - Aastha India - Aastha Bhajan - ABP Ananda - ABP Asmita - ABP Ganga - ABP Majha - ABP News India - ABZY COOL - Alankar TV - Aljazeera English - &FLIX - &Pictures - & privé HD - &Tv - Animal Planet India - Argus News - Arihant TV - Asianet - Asianet News - Assam Talks - B4U Bhojpuri - B4U Kadak - B4U Movies India - B4U Music India - Baby TV Asia - Balle Balle - BBC World News South Asia - Bflix Movies - Bhojpuri Cinema - Big Ganga - Big Magic - Bindass - Box Cinema - Cartoon Network India - Channel Divya - Channel WIN - Chardikla Time TV - Cinema TV - CNBC Awaaz - CNBC Bajar - CNBC TV18 - CNN International South Asia - CNN News 18 - Colors - Colors Bangla - Colors Bangla Cinema - COLORS CINEPLEX - Colors Cineplex Bollywood - Colors Gujarati - Colors Gujarati Cinema - Colors Infinity - Colors Marathi - Colors Odia - Colors Rishtey Asia - Comedy Central - CTVN AKD Plus - Dangal TV - DD Arun Prabha - DD Assam - DD Bangla - DD Bharati - DD Bihar - DD Chandana - DD Chhattisgarh - DD Girnar - DD Himachal Pradesh - DD Hissar - DD India - DD Jharkhand - DD Kashir - DD Kisan - DD Madhya Pradesh - DD Malayalam - DD Manipur - DD Meghalaya - DD Mizoram - DD Nagaland - DD National - DD News - DD Odia - DD Podhigai - DD Punjabi - DD Rajasthan - DD Retro - DD Sahyadri - DD Saptagiri - DD Sports - DD Tripura - DD Urdu - DD Uttarakhand - DD Uttar Pradesh - DD Yadagiri - Dhinchaak - Dhinchaak 2 - Dhoom Music - Digi Shala - Discovery Channel India - Discovery Kids India - Discovery Science - Discovery Turbo India - Dish Buzz - Dish Buzz 2 - Disney Channel India - Disney International HD - Disney Junior India - Dr Shuddhi - DY 36 - ENTER 10 BANGLA - Enterr10 Movies - Epic TV - ET Now - ET NOW SWADESH - ETV Telugu - Eurosport India - E-Vidya 6 - EZMall - Fakt Marathi - Filamchi - Flowers TV - Fox life - Gemini TV - GOOD NEWS TODAY - Gubbare - GULISTAN NEWS - Gyandarshan - Hare Krsna TV - History tv 18 - Hungama TV - IBC 24 - ILove - India News - India News Haryana - India News Uttar Pradesh - India Today - India TV - Indradhanu - Investigation Discovery India - Ishara TV - ISHWAR BHAKTI' - Jalsha Movies - Jinvani Channel - Jonack - Jyotish Duniya - Kalinga TV - Kanak News - KBS World - Khushboo TV Bangla - Kolkata TV - Lok Sabha TV - Lokshahi News - Maiboli - Manjari TV - Manoranjan Grand - Manoranjan Movies - Manoranjan TV - Marvel HQ - Mastiii - Mazhavil Manorama - MBC TV - Mh 1 Music - Mirror Now - MNX - Movie Plus - Movies Now - Movies Now + - MTV Beats - MTV India - Music India - Naaptol Tamil - Nandighosha TV - National Geographic Channel - National Geographic Wild - Naxatra News - NDTV 24x7 - NDTV India - Nepal 1 - News 18 Assam & North-East - News 18 Bengali - News 18 Bihar & Jharkhand - News 18 Gujarati - News 18 India - News 18 Lokmat - News 18 Madhya Pradesh & Chhattisgarh - News 18 Odia - News 18 Punjab & Haryana & Himachal Pradesh - News 18 Rajasthan - News 18 Urdu - News 18 Uttar Pradesh & Uttarakhand - News 24 - News Daily 24 - News India 24x7 - News Live - News Nation - News State UP & UK - NewsTime Bangla - News X - Nickelodeon India - Sonic Nickelodeon - Nick HD+ - Nick Jr India - NK TV24X7 - NORTH EAST LIVE - Odisha TV - Paras Gold - Peace of Mind TV - Pitaara - Pogo - Prag News - Prameya News 7 - Prarthana TV - Pratidin Time - Ptc Chakde - PTC Music - PTC News - PTC Punjabi - PTC Punjabi Gold - PTC Simran - Punjabi Hits - Rajya Sabha TV - RAMDHENU - Rang - Rengoni - Republic Bangla - Republic Bharat - Republic TV - Rishtey Cineplex - Romedy Now - Rongeen TV - R Plus - RT News - Rupasi Bangla - Saam TV - Sadhna TV - Sandesh News - Sangeet Bangla - Sangeet Bhojpuri - SANSAD TV HD - Sanskar TV - Santvani Channel - Satsang TV - Shemaroo Marathi Bana - Shemaroo TV - SHOWBOX - Shubh TV - SIDHARTH BHAKTI - Songdew TV - Sony Aath - Sony BBC Earth - SET India - Sony Marathi - Sony Max 2 - Sony Pal - SONY PIX - SONY SAB - SONY SPORTS TEN 1 - SONY SPORTS TEN 2 - SONY SPORTS TEN 3 - SONY SPORTS TEN 5 - Sony Wah - Sony Yay! - SPORTS18 1 - STAR BHARAT - Star Gold - Star Gold 2 - STAR GOLD SELECT - Star Jalsha - Star Maa - Star Maa Movies - Star Movies - STAR MOVIES SELECT - Star Plus - Star Pravah - Star Sports 1 - STAR SPORTS 1 HINDI - Star sports 2 - Star Sports 3 - Star Sports First - STAR SPORTS SELECT 1 - STAR SPORTS SELECT 2 - Star Utsav - Star Utsav Movies - Star World HD India - Star World Premiere HD - Sudarshan News - Sun Bangla - SUN MARATHI - Sun TV - Surya TV - SWADESH NEWS - Swayam Prabha 1 - Swayam Prabha 10 - Swayam Prabha 11 - Swayam Prabha 12 - Swayam Prabha 13 - Swayam Prabha 14 - Swayam Prabha 15 - Swayam Prabha 16 - Swayam Prabha 17 - Swayam Prabha 18 - Swayam Prabha 19 - Swayam Prabha 2 - Swayam Prabha 20 - Swayam Prabha 21 - Swayam Prabha 22 - Swayam Prabha 3 - Swayam Prabha 4 - Swayam Prabha 5 - Swayam Prabha 6 - Swayam Prabha 7 - Swayam Prabha 8 - Swayam Prabha 9 - Tarang Music - Tarang TV - The Q India - Times Now - Times Now World - TLC - Topper TV - Travel XP HD - TV 9 Bangla - TV9 Bharatvash - TV 9 Gujarati - TV 9 Kannada - TV 9 Marathi - Udaya TV - VANDE Gujarat 1 - VANDE Gujarat 10 - VANDE Gujarat 11 - VANDE Gujarat 12 - VANDE Gujarat 13 - VANDE Gujarat 14 - VANDE Gujarat 15 - VANDE Gujarat 16 - VANDE Gujarat 2 - VANDE Gujarat 3 - VANDE Gujarat 4 - VANDE Gujarat 5 - VANDE Gujarat 6 - VANDE Gujarat 7 - VANDE Gujarat 8 - VANDE Gujarat 9 - VEDIC - VH1 India - Vijay TV - VIP NEWS - VTV News - WION - Wow Cinema One - Zee 24 Ghanta - Zee 24 Kalak - Zee 24 Taas - Zee Action - Zee Anmol - Zee Anmol Cinema - ZEE Bangla - Zee Bangla Cinema - Zee Bihar Jharkhand - Zee Biskope - Zee Bollywood - Zee Business - Zee Cafe - Zee Chitramandir - Zee Cinema - Zee Cinema Asia - ZEE CINEMALU - Zee Classic - ZEE DELHI NCR HARYANA - Zee Hindustan - Zee Kannada - Zee Keralam - Zee Madhya Pradesh Chhattisgarh - ZEE Marathi - Zee News - Zee Odisha - Zee Punjab Haryana Himachal - Zee Punjabi - Zee Rajasthan - Zee Salaam - Zee Sarthak - ZEE TALKIES - Zee Tamil - Zee Telugu - Zee TV - Zee Uttar Pradesh Uttarakhand - Zee Vajwa - Zee Yuva - Zee Zest - Zing Asia - Zing Home - Zoom - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1 Sports + 9X Jhakaas + 9XM + 9X Tashan + Aaj Tak + Aakaash Aath + Aastha India + Aastha Bhajan + ABP Ananda + ABP Asmita + ABP Ganga + ABP Majha + ABP News India + ABZY COOL + Alankar TV + Aljazeera English + &FLIX + &Pictures + & privé HD + &Tv + Animal Planet India + Argus News + Arihant TV + Asianet + Asianet News + Assam Talks + B4U Bhojpuri + B4U Kadak + B4U Movies India + B4U Music India + Baby TV Asia + Balle Balle + BBC World News South Asia + Bflix Movies + Bhojpuri Cinema + Big Ganga + Big Magic + Bindass + Box Cinema + Cartoon Network India + Channel Divya + Channel WIN + Chardikla Time TV + Cinema TV + CNBC Awaaz + CNBC Bajar + CNBC TV18 + CNN International South Asia + CNN News 18 + Colors + Colors Bangla + Colors Bangla Cinema + COLORS CINEPLEX + Colors Cineplex Bollywood + Colors Gujarati + Colors Gujarati Cinema + Colors Infinity + Colors Marathi + Colors Odia + Colors Rishtey Asia + Comedy Central + CTVN AKD Plus + Dangal TV + DD Arun Prabha + DD Assam + DD Bangla + DD Bharati + DD Bihar + DD Chandana + DD Chhattisgarh + DD Girnar + DD Himachal Pradesh + DD Hissar + DD India + DD Jharkhand + DD Kashir + DD Kisan + DD Madhya Pradesh + DD Malayalam + DD Manipur + DD Meghalaya + DD Mizoram + DD Nagaland + DD National + DD News + DD Odia + DD Podhigai + DD Punjabi + DD Rajasthan + DD Retro + DD Sahyadri + DD Saptagiri + DD Sports + DD Tripura + DD Urdu + DD Uttarakhand + DD Uttar Pradesh + DD Yadagiri + Dhinchaak + Dhinchaak 2 + Dhoom Music + Digi Shala + Discovery Channel India + Discovery Kids India + Discovery Science + Discovery Turbo India + Dish Buzz + Dish Buzz 2 + Disney Channel India + Disney International HD + Disney Junior India + Dr Shuddhi + DY 36 + ENTER 10 BANGLA + Enterr10 Movies + Epic TV + ET Now + ET NOW SWADESH + ETV Telugu + Eurosport India + E-Vidya 6 + EZMall + Fakt Marathi + Filamchi + Flowers TV + Fox life + Gemini TV + GOOD NEWS TODAY + Gubbare + GULISTAN NEWS + Gyandarshan + Hare Krsna TV + History tv 18 + Hungama TV + IBC 24 + ILove + India News + India News Haryana + India News Uttar Pradesh + India Today + India TV + Indradhanu + Investigation Discovery India + Ishara TV + ISHWAR BHAKTI' + Jalsha Movies + Jinvani Channel + Jonack + Jyotish Duniya + Kalinga TV + Kanak News + KBS World + Khushboo TV Bangla + Kolkata TV + Lok Sabha TV + Lokshahi News + Maiboli + Manjari TV + Manoranjan Grand + Manoranjan Movies + Manoranjan TV + Marvel HQ + Mastiii + Mazhavil Manorama + MBC TV + Mh 1 Music + Mirror Now + MNX + Movie Plus + Movies Now + Movies Now + + MTV Beats + MTV India + Music India + Naaptol Tamil + Nandighosha TV + National Geographic Channel + National Geographic Wild + Naxatra News + NDTV 24x7 + NDTV India + Nepal 1 + News 18 Assam & North-East + News 18 Bengali + News 18 Bihar & Jharkhand + News 18 Gujarati + News 18 India + News 18 Lokmat + News 18 Madhya Pradesh & Chhattisgarh + News 18 Odia + News 18 Punjab & Haryana & Himachal Pradesh + News 18 Rajasthan + News 18 Urdu + News 18 Uttar Pradesh & Uttarakhand + News 24 + News Daily 24 + News India 24x7 + News Live + News Nation + News State UP & UK + NewsTime Bangla + News X + Nickelodeon India + Sonic Nickelodeon + Nick HD+ + Nick Jr India + NK TV24X7 + NORTH EAST LIVE + Odisha TV + Paras Gold + Peace of Mind TV + Pitaara + Pogo + Prag News + Prameya News 7 + Prarthana TV + Pratidin Time + Ptc Chakde + PTC Music + PTC News + PTC Punjabi + PTC Punjabi Gold + PTC Simran + Punjabi Hits + Rajya Sabha TV + RAMDHENU + Rang + Rengoni + Republic Bangla + Republic Bharat + Republic TV + Rishtey Cineplex + Romedy Now + Rongeen TV + R Plus + RT News + Rupasi Bangla + Saam TV + Sadhna TV + Sandesh News + Sangeet Bangla + Sangeet Bhojpuri + SANSAD TV HD + Sanskar TV + Santvani Channel + Satsang TV + Shemaroo Marathi Bana + Shemaroo TV + SHOWBOX + Shubh TV + SIDHARTH BHAKTI + Songdew TV + Sony Aath + Sony BBC Earth + SET India + Sony Marathi + Sony Max 2 + Sony Pal + SONY PIX + SONY SAB + SONY SPORTS TEN 1 + SONY SPORTS TEN 2 + SONY SPORTS TEN 3 + SONY SPORTS TEN 5 + Sony Wah + Sony Yay! + SPORTS18 1 + STAR BHARAT + Star Gold + Star Gold 2 + STAR GOLD SELECT + Star Jalsha + Star Maa + Star Maa Movies + Star Movies + STAR MOVIES SELECT + Star Plus + Star Pravah + Star Sports 1 + STAR SPORTS 1 HINDI + Star sports 2 + Star Sports 3 + Star Sports First + STAR SPORTS SELECT 1 + STAR SPORTS SELECT 2 + Star Utsav + Star Utsav Movies + Star World HD India + Star World Premiere HD + Sudarshan News + Sun Bangla + SUN MARATHI + Sun TV + Surya TV + SWADESH NEWS + Swayam Prabha 1 + Swayam Prabha 10 + Swayam Prabha 11 + Swayam Prabha 12 + Swayam Prabha 13 + Swayam Prabha 14 + Swayam Prabha 15 + Swayam Prabha 16 + Swayam Prabha 17 + Swayam Prabha 18 + Swayam Prabha 19 + Swayam Prabha 2 + Swayam Prabha 20 + Swayam Prabha 21 + Swayam Prabha 22 + Swayam Prabha 3 + Swayam Prabha 4 + Swayam Prabha 5 + Swayam Prabha 6 + Swayam Prabha 7 + Swayam Prabha 8 + Swayam Prabha 9 + Tarang Music + Tarang TV + The Q India + Times Now + Times Now World + TLC + Topper TV + Travel XP HD + TV 9 Bangla + TV9 Bharatvash + TV 9 Gujarati + TV 9 Kannada + TV 9 Marathi + Udaya TV + VANDE Gujarat 1 + VANDE Gujarat 10 + VANDE Gujarat 11 + VANDE Gujarat 12 + VANDE Gujarat 13 + VANDE Gujarat 14 + VANDE Gujarat 15 + VANDE Gujarat 16 + VANDE Gujarat 2 + VANDE Gujarat 3 + VANDE Gujarat 4 + VANDE Gujarat 5 + VANDE Gujarat 6 + VANDE Gujarat 7 + VANDE Gujarat 8 + VANDE Gujarat 9 + VEDIC + VH1 India + Vijay TV + VIP NEWS + VTV News + WION + Wow Cinema One + Zee 24 Ghanta + Zee 24 Kalak + Zee 24 Taas + Zee Action + Zee Anmol + Zee Anmol Cinema + ZEE Bangla + Zee Bangla Cinema + Zee Bihar Jharkhand + Zee Biskope + Zee Bollywood + Zee Business + Zee Cafe + Zee Chitramandir + Zee Cinema + Zee Cinema Asia + ZEE CINEMALU + Zee Classic + ZEE DELHI NCR HARYANA + Zee Hindustan + Zee Kannada + Zee Keralam + Zee Madhya Pradesh Chhattisgarh + ZEE Marathi + Zee News + Zee Odisha + Zee Punjab Haryana Himachal + Zee Punjabi + Zee Rajasthan + Zee Salaam + Zee Sarthak + ZEE TALKIES + Zee Tamil + Zee Telugu + Zee TV + Zee Uttar Pradesh Uttarakhand + Zee Vajwa + Zee Yuva + Zee Zest + Zing Asia + Zing Home + Zoom + diff --git a/sites/dishtv.in/dishtv.in.config.js b/sites/dishtv.in/dishtv.in.config.js index 82ce05bc..1df15998 100644 --- a/sites/dishtv.in/dishtv.in.config.js +++ b/sites/dishtv.in/dishtv.in.config.js @@ -12,7 +12,7 @@ dayjs.extend(customParseFormat) module.exports = { site: 'dishtv.in', days: 2, - url: `https://www.dishtv.in/WhatsonIndiaWebService.asmx/LoadPagginResultDataForProgram`, + url: 'https://www.dishtv.in/WhatsonIndiaWebService.asmx/LoadPagginResultDataForProgram', request: { method: 'POST', data({ channel, date }) { @@ -23,7 +23,7 @@ module.exports = { } } }, - parser: function ({ content, channel, date }) { + parser: function ({ content, date }) { let programs = [] const data = parseContent(content) const items = parseItems(data) @@ -44,7 +44,7 @@ module.exports = { }, async channels() { const channelguide = await axios - .get(`https://www.dishtv.in/channelguide/`) + .get('https://www.dishtv.in/channelguide/') .then(r => r.data) .catch(console.log) const $channelguide = cheerio.load(channelguide) @@ -60,7 +60,7 @@ module.exports = { const channels = {} const channelList = await axios - .post(`https://www.dishtv.in/WebServiceMethod.aspx/GetChannelListFromMobileAPI`, { + .post('https://www.dishtv.in/WebServiceMethod.aspx/GetChannelListFromMobileAPI', { strChannel: '' }) .then(r => r.data) @@ -82,7 +82,7 @@ module.exports = { for (let id of ids) { const promise = axios .post( - `https://www.dishtv.in/WhatsonIndiaWebService.asmx/LoadPagginResultDataForProgram`, + 'https://www.dishtv.in/WhatsonIndiaWebService.asmx/LoadPagginResultDataForProgram', { Channelarr: id, fromdate: date.format('YYYYMMDD[0000]'), @@ -117,10 +117,10 @@ function parseTitle(item) { return $('a').text() } -function parseStart(item, date) { +function parseStart(item) { const $ = cheerio.load(item) const onclick = $('i.fa-circle').attr('onclick') - const [_, time] = onclick.match(/RecordingEnteryOpen\('.*','.*','(.*)','.*',.*\)/) + const [, time] = onclick.match(/RecordingEnteryOpen\('.*','.*','(.*)','.*',.*\)/) return dayjs.tz(time, 'YYYYMMDDHHmm', 'Asia/Kolkata') } diff --git a/sites/dishtv.in/dishtv.in.test.js b/sites/dishtv.in/dishtv.in.test.js index a54bc646..124ffd56 100644 --- a/sites/dishtv.in/dishtv.in.test.js +++ b/sites/dishtv.in/dishtv.in.test.js @@ -1,5 +1,5 @@ // npm run channels:parse -- --config=./sites/dishtv.in/dishtv.in.config.js --output=./sites/dishtv.in/dishtv.in.channels.xml -// npx epg-grabber --config=sites/dishtv.in/dishtv.in.config.js --channels=sites/dishtv.in/dishtv.in.channels.xml --output=guide.xml +// npm run grab -- --site=dishtv.in const { parser, url, request } = require('./dishtv.in.config.js') const dayjs = require('dayjs') @@ -10,7 +10,8 @@ dayjs.extend(utc) const date = dayjs.utc('2021-11-05', 'YYYY-MM-DD').startOf('d') const channel = { site_id: '10000000075992337', xmltv_id: 'WomensActive.in' } -const content = `{"d":"\\u003cdiv class=\\"pgrid\\"\\u003e\\u003cdiv class=\\"img sm-30 grid\\"\\u003e\\u003cimg class=\\"chnl-logo\\" src=\\"http://imagesdishtvd2h.whatsonindia.com/dasimages/channel/landscape/360x270/hiyj8ndf.png\\" onclick=\\"ShowChannelGuid(\\u0027womens-active\\u0027,\\u002710000000075992337\\u0027);\\" /\\u003e\\u003cdiv class=\\"cnl-fav\\"\\u003e\\u003ca href=\\"javascript:;\\"\\u003e\\u003cem\\u003ech. no\\u003c/em\\u003e\\u003cspan\\u003e117\\u003c/span\\u003e\\u003c/a\\u003e\\u003c/div\\u003e\\u003ci class=\\"fa fa-heart Set_Favourite_Channel\\" aria-hidden=\\"true\\" title=\\"Set womens active channel as your favourite channel\\" onclick=\\"SetFavouriteChannel();\\"\\u003e\\u003c/i\\u003e\\u003c/div\\u003e\\u003cdiv class=\\"grid-wrap\\"\\u003e\\u003cdiv class=\\"sm-30 grid datatime\\" data-time=\\"24\\" data-starttime=\\"12:00 AM\\" data-endttime=\\"12:24 AM\\" data-reamintime=\\"0\\"\\u003e\\u003ca title=\\"Event Name: Cynthia Williams - Diwali Look Part 01\\r\\nStart Time: 12:00 AM\\r\\nDuration: 24min\\r\\nSynopsis: Learn diwali look by cynthia williams p1\\r\\n\\" href=\\"javascript:;\\" onclick=\\"ShowCurrentTime(\\u002730000000550913679\\u0027,\\u002710000000075992337\\u0027,\\u0027202111051200\\u0027)\\"\\u003eCynthia Williams - Diwali Look Part 01\\u003c/a\\u003e\\u003cdiv class=\\"cnlSerialIcon\\"\\u003e\\u003ci class=\\"fa fa-heart\\" aria-hidden=\\"true\\" title=\\"Set Favourite Serial\\" onclick=\\"SetFavouriteShow();\\"\\u003e\\u003c/i\\u003e\\u003ci class=\\"fa fa-clock-o\\" aria-hidden=\\"true\\" title=\\"Reminder Serial\\" onclick=\\"ReminderEnteryOpen(\\u002730000000550913679\\u0027,\\u002710000000075992337\\u0027,\\u0027202111050000\\u0027,\\u0027117\\u0027)\\"\\u003e\\u003c/i\\u003e\\u003ci class=\\"fa fa-circle\\" aria-hidden=\\"true\\" title=\\"Record Serial\\" onclick=\\"RecordingEnteryOpen(\\u002730000000550913679\\u0027,\\u002710000000075992337\\u0027,\\u0027202111050000\\u0027,\\u0027117\\u0027,30000000550913679)\\"\\u003e\\u003c/i\\u003e\\u003c/div\\u003e\\u003c/div\\u003e\\u003c/div\\u003e\\u003c/div\\u003e"}` +const content = + '{"d":"\\u003cdiv class=\\"pgrid\\"\\u003e\\u003cdiv class=\\"img sm-30 grid\\"\\u003e\\u003cimg class=\\"chnl-logo\\" src=\\"http://imagesdishtvd2h.whatsonindia.com/dasimages/channel/landscape/360x270/hiyj8ndf.png\\" onclick=\\"ShowChannelGuid(\\u0027womens-active\\u0027,\\u002710000000075992337\\u0027);\\" /\\u003e\\u003cdiv class=\\"cnl-fav\\"\\u003e\\u003ca href=\\"javascript:;\\"\\u003e\\u003cem\\u003ech. no\\u003c/em\\u003e\\u003cspan\\u003e117\\u003c/span\\u003e\\u003c/a\\u003e\\u003c/div\\u003e\\u003ci class=\\"fa fa-heart Set_Favourite_Channel\\" aria-hidden=\\"true\\" title=\\"Set womens active channel as your favourite channel\\" onclick=\\"SetFavouriteChannel();\\"\\u003e\\u003c/i\\u003e\\u003c/div\\u003e\\u003cdiv class=\\"grid-wrap\\"\\u003e\\u003cdiv class=\\"sm-30 grid datatime\\" data-time=\\"24\\" data-starttime=\\"12:00 AM\\" data-endttime=\\"12:24 AM\\" data-reamintime=\\"0\\"\\u003e\\u003ca title=\\"Event Name: Cynthia Williams - Diwali Look Part 01\\r\\nStart Time: 12:00 AM\\r\\nDuration: 24min\\r\\nSynopsis: Learn diwali look by cynthia williams p1\\r\\n\\" href=\\"javascript:;\\" onclick=\\"ShowCurrentTime(\\u002730000000550913679\\u0027,\\u002710000000075992337\\u0027,\\u0027202111051200\\u0027)\\"\\u003eCynthia Williams - Diwali Look Part 01\\u003c/a\\u003e\\u003cdiv class=\\"cnlSerialIcon\\"\\u003e\\u003ci class=\\"fa fa-heart\\" aria-hidden=\\"true\\" title=\\"Set Favourite Serial\\" onclick=\\"SetFavouriteShow();\\"\\u003e\\u003c/i\\u003e\\u003ci class=\\"fa fa-clock-o\\" aria-hidden=\\"true\\" title=\\"Reminder Serial\\" onclick=\\"ReminderEnteryOpen(\\u002730000000550913679\\u0027,\\u002710000000075992337\\u0027,\\u0027202111050000\\u0027,\\u0027117\\u0027)\\"\\u003e\\u003c/i\\u003e\\u003ci class=\\"fa fa-circle\\" aria-hidden=\\"true\\" title=\\"Record Serial\\" onclick=\\"RecordingEnteryOpen(\\u002730000000550913679\\u0027,\\u002710000000075992337\\u0027,\\u0027202111050000\\u0027,\\u0027117\\u0027,30000000550913679)\\"\\u003e\\u003c/i\\u003e\\u003c/div\\u003e\\u003c/div\\u003e\\u003c/div\\u003e\\u003c/div\\u003e"}' it('can generate valid url', () => { expect(url).toBe( @@ -39,6 +40,6 @@ it('can parse response', () => { }) it('can handle empty guide', () => { - const result = parser({ date, channel, content: `{"d":""}` }) + const result = parser({ date, channel, content: '{"d":""}' }) expect(result).toMatchObject([]) }) diff --git a/sites/dsmart.com.tr/dsmart.com.tr.channels.xml b/sites/dsmart.com.tr/dsmart.com.tr.channels.xml index e0cc7b8d..a43880e6 100644 --- a/sites/dsmart.com.tr/dsmart.com.tr.channels.xml +++ b/sites/dsmart.com.tr/dsmart.com.tr.channels.xml @@ -1,207 +1,205 @@ - - - a News - Baby TV - BBC World News - CNN International - Fashion TV - NBA TV - Trace Urban - 24Kitchen - 24 - 360 - a Haber - a Spor - ATV - BBC Earth - BBN Türk - Beyaz TV - Bloomberg HT - Boomerang - Cartoon Network - CNN Türk SD - Çocuk Smart - Da Vinci Learning - Discovery - Discovery Science - Disney Channel - Diyanet Tv - Dizi Smart Max - Dizi Smart Premium - DMAX - DocuBox - Euro D - Eurosport - Eurosport 2 - Fast & Fun - FB TV - FightBox - FilmBox - Flash Haber - FOXCRIME - FOX - FX - Haber Global - Haber Türk - Halk TV - Insight TV - Kanal 7 - Kanal D - Lider Tv - Love Nature - MovieSmart Classic - MovieSmart Premium - MovieSmart Premium 2 - MovieSmart Türk - National Geographic - National Geographic WILD - NTV - NR1 Türk - NR1 - Power TV - Show TV - Sinema TV 1001 - Sinema TV 1002 - Sinema TV 2 - Sinema TV Aile - Sinema TV Aile 2 - Sinema TV Aksiyon - Sinema TV Aksiyon 2 - Sinema TV Comedy - Sinema TV Comedy 2 - Sinema TV - Spor Smart - SPOR SMART 2 - S Sport - S Sport 2 - Star - Nature Escape - TAY TV - Tele 1 - teve2 - TGRT Haber - TLC - TMB - TRT 1 - trt 2 - TRT 3 Spor - TRT 4K - TRT Avaz - TRT Belgesel - TRT Çocuk - TRT Haber - TRT Kurdi - TRT Müzik - TRT Spor - Trt Spor Yıldız - TRT Türk - Tv 100 - TV4 - TV8 - TV 8,5 - TV Net - Uçankuş TV - Ülke TV - Vav Tv - Viasat History - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + a News + Baby TV + BBC World News + CNN International + Fashion TV + NBA TV + Trace Urban + 24Kitchen + 24 + 360 + a Haber + a Spor + ATV + BBC Earth + BBN Türk + Beyaz TV + Bloomberg HT + Boomerang + Cartoon Network + CNN Türk SD + Çocuk Smart + Da Vinci Learning + Discovery + Discovery Science + Disney Channel + Diyanet Tv + Dizi Smart Max + Dizi Smart Premium + DMAX + DocuBox + Euro D + Eurosport + Eurosport 2 + Fast & Fun + FB TV + FightBox + FilmBox + Flash Haber + FOXCRIME + FOX + FX + Haber Global + Haber Türk + Halk TV + Insight TV + Kanal 7 + Kanal D + Lider Tv + Love Nature + MovieSmart Classic + MovieSmart Premium + MovieSmart Premium 2 + MovieSmart Türk + National Geographic + National Geographic WILD + NTV + NR1 Türk + NR1 + Power TV + Show TV + Sinema TV 1001 + Sinema TV 1002 + Sinema TV 2 + Sinema TV Aile + Sinema TV Aile 2 + Sinema TV Aksiyon + Sinema TV Aksiyon 2 + Sinema TV Comedy + Sinema TV Comedy 2 + Sinema TV + Spor Smart + SPOR SMART 2 + S Sport + S Sport 2 + Star + Nature Escape + TAY TV + Tele 1 + teve2 + TGRT Haber + TLC + TMB + TRT 1 + trt 2 + TRT 3 Spor + TRT 4K + TRT Avaz + TRT Belgesel + TRT Çocuk + TRT Haber + TRT Kurdi + TRT Müzik + TRT Spor + Trt Spor Yıldız + TRT Türk + Tv 100 + TV4 + TV8 + TV 8,5 + TV Net + Uçankuş TV + Ülke TV + Vav Tv + Viasat History + diff --git a/sites/dsmart.com.tr/dsmart.com.tr.config.js b/sites/dsmart.com.tr/dsmart.com.tr.config.js index 353aa561..d545e226 100644 --- a/sites/dsmart.com.tr/dsmart.com.tr.config.js +++ b/sites/dsmart.com.tr/dsmart.com.tr.config.js @@ -17,10 +17,9 @@ module.exports = { return `${API_ENDPOINT}?page=${page}&limit=1&day=${date.format('YYYY-MM-DD')}` }, parser: function ({ content, channel }) { - let offset = -1 let programs = [] const items = parseItems(content, channel) - items.forEach((item, i) => { + items.forEach(item => { const prev = programs[programs.length - 1] let start if (prev) { @@ -90,7 +89,7 @@ function parseStart(item, date) { } function parseDuration(item) { - const [_, H, mm, ss] = item.duration.match(/(\d+):(\d+):(\d+)$/) + const [, H, mm, ss] = item.duration.match(/(\d+):(\d+):(\d+)$/) return parseInt(H) * 3600 + parseInt(mm) * 60 + parseInt(ss) } diff --git a/sites/dsmart.com.tr/dsmart.com.tr.test.js b/sites/dsmart.com.tr/dsmart.com.tr.test.js index 34e1b067..0b2cf669 100644 --- a/sites/dsmart.com.tr/dsmart.com.tr.test.js +++ b/sites/dsmart.com.tr/dsmart.com.tr.test.js @@ -1,5 +1,5 @@ // npm run channels:parse -- --config=./sites/dsmart.com.tr/dsmart.com.tr.config.js --output=./sites/dsmart.com.tr/dsmart.com.tr.channels.xml -// npx epg-grabber --config=sites/dsmart.com.tr/dsmart.com.tr.config.js --channels=sites/dsmart.com.tr/dsmart.com.tr.channels.xml --output=guide.xml --timeout=30000 --days=2 +// npm run grab -- --site=dsmart.com.tr const { parser, url } = require('./dsmart.com.tr.config.js') const dayjs = require('dayjs') @@ -35,7 +35,8 @@ it('can parse response', () => { stop: '2023-01-15T23:45:00.000Z', title: 'Bizi Ayıran Her Şey', category: 'sinema/genel', - description: `Issızlığın ortasında yer alan orta sınıf bir evde bir anne kız yaşamaktadır. Çevrelerindeki taşları insanlarla yaşadıkları çatışmalar, anne-kızın hayatını olumsuz yönde etkilemektedir. Kızının ansızın ortadan kaybolması, bu çatışmaların seviyesini artıracak ve anne, kızını bulmak için her türlü yola başvuracaktır.` + description: + 'Issızlığın ortasında yer alan orta sınıf bir evde bir anne kız yaşamaktadır. Çevrelerindeki taşları insanlarla yaşadıkları çatışmalar, anne-kızın hayatını olumsuz yönde etkilemektedir. Kızının ansızın ortadan kaybolması, bu çatışmaların seviyesini artıracak ve anne, kızını bulmak için her türlü yola başvuracaktır.' }) expect(results[1]).toMatchObject({ @@ -43,7 +44,8 @@ it('can parse response', () => { stop: '2023-01-16T01:30:00.000Z', title: 'Pixie', category: 'sinema/genel', - description: `Annesinin intikamını almak isteyen Pixie, dahiyane bir soygun planlar. Fakat işler planladığı gibi gitmeyince kendini İrlanda’nın vahşi gangsterleri tarafından kovalanan iki adamla birlikte kaçarken bulur.` + description: + 'Annesinin intikamını almak isteyen Pixie, dahiyane bir soygun planlar. Fakat işler planladığı gibi gitmeyince kendini İrlanda’nın vahşi gangsterleri tarafından kovalanan iki adamla birlikte kaçarken bulur.' }) expect(results[12]).toMatchObject({ @@ -51,7 +53,8 @@ it('can parse response', () => { stop: '2023-01-16T22:30:00.000Z', title: 'Seberg', category: 'sinema/genel', - description: `Başrolünde ünlü yıldız Kristen Stewart’ın yer aldığı politik gerilim, 1960’ların sonunda insan hakları aktivisti Hakim Jamal ile yaşadığı politik ve romantik ilişki sebebiyle FBI tarafından hedef alınan, Fransız Yeni Dalgası’nın sevilen yüzü ve Serseri Aşıklar’ın yıldızı Jean Seberg’ün çarpıcı hikayesini anlatıyor.` + description: + 'Başrolünde ünlü yıldız Kristen Stewart’ın yer aldığı politik gerilim, 1960’ların sonunda insan hakları aktivisti Hakim Jamal ile yaşadığı politik ve romantik ilişki sebebiyle FBI tarafından hedef alınan, Fransız Yeni Dalgası’nın sevilen yüzü ve Serseri Aşıklar’ın yıldızı Jean Seberg’ün çarpıcı hikayesini anlatıyor.' }) }) diff --git a/sites/dstv.com/dstv.com.channels.xml b/sites/dstv.com/dstv.com.channels.xml index 0340c9ad..ee6ab2f2 100644 --- a/sites/dstv.com/dstv.com.channels.xml +++ b/sites/dstv.com/dstv.com.channels.xml @@ -1,213 +1,211 @@ - - - 1 KZN - 1 Magic - Africa Magic Epic - Africa Magic Family - Africa Magic Hausa - Africa Magic Igbo - Africa Magic Showcase HD - Africa Magic Urban - Africa Magic Yoruba - Africanews - AFRO Music English - AIT - Al Jazeera - Arewa 24 - Arise News - B4U Movies - Bay TV - BBC Brit - BBC Earth HD - BBC Lifestyle - BBC World News - BET - Big Brother Mzansi HD - Bloomberg Television - Boomerang - Business Day - Cape Town TV - Cartoon Network - Cbeebies - CBS Justice - CBS Reality - CCTV 4 - CCTV Entertainment – Mandarin Entertainment Channel - CGTN News - CGTN Documentary - Channel O HD - China Movie Channel - Citi TV - CNBC Africa - CNN International - Comedy Central - Curiosity Channel - Da Vinci Kids - Day Star - Discovery Channel HD - Discovery Family HD - Disney Channel - Disney Junior - Dominion TV - Dove TV - Dumisa - Deutsche Welle - E! Entertainment - eTV Extra HD - Emmanuel TV - eMovies HD - eMovies Extra HD - eNews Channel Africa - ESPN 2 HD - ESPN - eToonz - e.TV HD - eTV Africa - EuroNews - EuroNews French - EuroNews German - Eternal Word Television Network - FAITH - Fashion One - FliekNet HD - Food Network - FOX Life - FOX HD - Galaxy TV - GauTV - Ginx eSports HD - Home and Garden TV HD - HIP TV - The History Channel - Honey - IGNITION - TV Mundial (P) - Discovery ID - ISLAM CHANNEL - Jim Jam - Joy News - K24 - KIX - Kyk NET HD - Kyk NET & Kie HD - KyKNet Nou - LAGOS TV - Lifetime Entertainment - Lumen Christi - Maisha Magic Bongo - Maisha Magic Plus HD - ME Channel - Mindset - MiTV - M-Net Movies 1 West HD - M Movies 1 - M-Net Movies 2 - M-Net Movies 3 - M-Net Movies 4 - M-Net Movies Men of Action HD - M-Net West HD - Moja Love HD - MovieRoom - MTV - MTV base - Mzansi Bioskop - Mzansi Magic HD - Mzansi Music - Mzansi Wethu HD - National Geographic Channel - NatGeo Wild - NDTV 24x7 - Newzroom Afrika - NHK - Nickelodeon - NickJr - NickTOONS - NTA 2 - NTA I - NTA News 24 - NTA Parliament - OGTV - One Gospel - ONMAX - Parliamentary Service - PBS Kids - Peoples Weather - Phoenix News and Entertainment - Cloud Plus - Plus TV Africa - POP Central - RAI International - Real Time - ROK - ROK 2 - ROK GH - Russia Today - SABC 1 HD - SABC 2 HD - SABC 3 HD - SABC News - SBN - SILVERBIRD - Sky News - Sound City - Soweto TV - Spice TV - Star Life - Studio Universal HD - Sunna TV - ACTION - SS Blitz Nigeria - CRICKET - SS Football Nigeria - SS Football Plus Nigeria - GOLF - SS Grandstand Nigeria - SS LaLiga Nigeria - SS Maximo 1 (P) - SS Maximo 2 (P) - MOTORSPORT - SS Premier League Nigeria - PSL - RUGBY - SS Tennis Nigeria - SS Variety 1 Nigeria - SS Variety 2 Nigeria - SS Variety 3 Nigeria - SS Variety 4 Nigeria - TBN - TeleMundo - Televista - TellyTrack - The Home Channel - Discovery TLC HD - TLNovelas - TNT Africa - TRACE Africa - Trace Gospel - Trace Jama - TRACE Muzika - TRACE Mziki - TRACE Naija - TRACE URBAN HD - Travel Channel - Trybe - Tshwane TV - TV5 Monde Afrique - TVC News Nigeria - Lesotho TV - Universal TV - URBAN TV - VIA HD - VUZU HD - WAP TV - Wasafi TV - Wazobia Max - WildEarth - WWE Channel - Zee World - Zhejiang TV - CGTN French - RTPi (P) - - + + 1 KZN + 1 Magic + Africa Magic Epic + Africa Magic Family + Africa Magic Hausa + Africa Magic Igbo + Africa Magic Showcase HD + Africa Magic Urban + Africa Magic Yoruba + Africanews + AFRO Music English + AIT + Al Jazeera + Arewa 24 + Arise News + B4U Movies + Bay TV + BBC Brit + BBC Earth HD + BBC Lifestyle + BBC World News + BET + Big Brother Mzansi HD + Bloomberg Television + Boomerang + Business Day + Cape Town TV + Cartoon Network + Cbeebies + CBS Justice + CBS Reality + CCTV 4 + CCTV Entertainment – Mandarin Entertainment Channel + CGTN News + CGTN Documentary + Channel O HD + China Movie Channel + Citi TV + CNBC Africa + CNN International + Comedy Central + Curiosity Channel + Da Vinci Kids + Day Star + Discovery Channel HD + Discovery Family HD + Disney Channel + Disney Junior + Dominion TV + Dove TV + Dumisa + Deutsche Welle + E! Entertainment + eTV Extra HD + Emmanuel TV + eMovies HD + eMovies Extra HD + eNews Channel Africa + ESPN 2 HD + ESPN + eToonz + e.TV HD + eTV Africa + EuroNews + EuroNews French + EuroNews German + Eternal Word Television Network + FAITH + Fashion One + FliekNet HD + Food Network + FOX Life + FOX HD + Galaxy TV + GauTV + Ginx eSports HD + Home and Garden TV HD + HIP TV + The History Channel + Honey + IGNITION + TV Mundial (P) + Discovery ID + ISLAM CHANNEL + Jim Jam + Joy News + K24 + KIX + Kyk NET HD + Kyk NET & Kie HD + KyKNet Nou + LAGOS TV + Lifetime Entertainment + Lumen Christi + Maisha Magic Bongo + Maisha Magic Plus HD + ME Channel + Mindset + MiTV + M-Net Movies 1 West HD + M Movies 1 + M-Net Movies 2 + M-Net Movies 3 + M-Net Movies 4 + M-Net Movies Men of Action HD + M-Net West HD + Moja Love HD + MovieRoom + MTV + MTV base + Mzansi Bioskop + Mzansi Magic HD + Mzansi Music + Mzansi Wethu HD + National Geographic Channel + NatGeo Wild + NDTV 24x7 + Newzroom Afrika + NHK + Nickelodeon + NickJr + NickTOONS + NTA 2 + NTA I + NTA News 24 + NTA Parliament + OGTV + One Gospel + ONMAX + Parliamentary Service + PBS Kids + Peoples Weather + Phoenix News and Entertainment + Cloud Plus + Plus TV Africa + POP Central + RAI International + Real Time + ROK + ROK 2 + ROK GH + Russia Today + SABC 1 HD + SABC 2 HD + SABC 3 HD + SABC News + SBN + SILVERBIRD + Sky News + Sound City + Soweto TV + Spice TV + Star Life + Studio Universal HD + Sunna TV + ACTION + SS Blitz Nigeria + CRICKET + SS Football Nigeria + SS Football Plus Nigeria + GOLF + SS Grandstand Nigeria + SS LaLiga Nigeria + SS Maximo 1 (P) + SS Maximo 2 (P) + MOTORSPORT + SS Premier League Nigeria + PSL + RUGBY + SS Tennis Nigeria + SS Variety 1 Nigeria + SS Variety 2 Nigeria + SS Variety 3 Nigeria + SS Variety 4 Nigeria + TBN + TeleMundo + Televista + TellyTrack + The Home Channel + Discovery TLC HD + TLNovelas + TNT Africa + TRACE Africa + Trace Gospel + Trace Jama + TRACE Muzika + TRACE Mziki + TRACE Naija + TRACE URBAN HD + Travel Channel + Trybe + Tshwane TV + TV5 Monde Afrique + TVC News Nigeria + Lesotho TV + Universal TV + URBAN TV + VIA HD + VUZU HD + WAP TV + Wasafi TV + Wazobia Max + WildEarth + WWE Channel + Zee World + Zhejiang TV + CGTN French + RTPi (P) + diff --git a/sites/dstv.com/dstv.com.config.js b/sites/dstv.com/dstv.com.config.js index a53b6103..8f7e62ae 100644 --- a/sites/dstv.com/dstv.com.config.js +++ b/sites/dstv.com/dstv.com.config.js @@ -27,7 +27,7 @@ module.exports = { 'YYYY-MM-DD' )}${packageName}&country=${region}` }, - async parser({ content, channel, cached }) { + async parser({ content, channel }) { let programs = [] const items = parseItems(content, channel) for (const item of items) { @@ -91,7 +91,7 @@ async function loadProgramDetails(item) { } function parseItems(content, channel) { - const [_, channelId] = channel.site_id.split('#') + const [, channelId] = channel.site_id.split('#') const data = JSON.parse(content) if (!data || !Array.isArray(data.Channels)) return [] const channelData = data.Channels.find(c => c.Number === channelId) diff --git a/sites/dstv.com/dstv.com.test.js b/sites/dstv.com/dstv.com.test.js index c796b2b0..b18bb6ab 100644 --- a/sites/dstv.com/dstv.com.test.js +++ b/sites/dstv.com/dstv.com.test.js @@ -1,5 +1,5 @@ // npm run channels:parse -- --config=./sites/dstv.com/dstv.com.config.js --output=./sites/dstv.com/dstv.com.channels.xml --set=country:zaf -// npx epg-grabber --config=sites/dstv.com/dstv.com.config.js --channels=sites/dstv.com/dstv.com.channels.xml --output=guide.xml --days=2 +// npm run grab -- --site=dstv.com const { parser, url } = require('./dstv.com.config.js') const axios = require('axios') @@ -101,7 +101,7 @@ it('can parse response for NG', async () => { it('can handle empty guide', done => { parser({ - content: `{"Total":0,"Channels":[]}`, + content: '{"Total":0,"Channels":[]}', channel: channelZA }) .then(result => { diff --git a/sites/elcinema.com/elcinema.com.channels.xml b/sites/elcinema.com/elcinema.com.channels.xml index ec2f3d13..83e36b51 100644 --- a/sites/elcinema.com/elcinema.com.channels.xml +++ b/sites/elcinema.com/elcinema.com.channels.xml @@ -1,238 +1,236 @@ - - - 2M Monde - Abu Dhabi Drama - Abu Dhabi TV - Al Aoula Middle East - Al Araby 2 TV - Al Dafrah TV - Al Hayat - Al Jadeed - Al Kahera Wal Nas - Al Kahera Wal Nas TV 2 - Al-Manar TV - Al-Nahar TV - Al-Nahar Drama - Alrai TV - Al Rasheed TV - Al-Saeedah - Al Safwa - Saudi TV - Alsharqiya TV - Alsumaria - Al Yawm - Amman TV - ART Aflam 1 - ART Aflam 2 - ART Cinema - ART Hekayat - ART Hekayat 2 - BeIn Drama 1 - BeIn Movies Premiere - BeIn Movies Action - BeIn Movies Drama - BeIn Movies Family - BeIn Series 1 - BeIn Series 2 - Cartoon Network Arabic - CBC - CBC Drama - CBC Sofra - Cima - Cinema 1 - Cinema 2 - Discovery Channel Middle East & Africa - Disney Channel Middle East - DMC - DMC Drama - Dubai One - Dubai TV - Dubai Zaman - Echorouk TV - El Mehwar Channel - Watania 1 - Emarat TV - E! Middle East - ETC TV - Fann - FX - IFilm Arabic - Kuwait TV - KTV Al Qurain - KTV Khallik Bilbait - Lana TV - LBC - LBC International - Maspero Zaman - MBC - MBC 2 - MBC 3 - MBC 4 - MBC 5 - MBC Action - MBC Bollywood - MBC Drama - MBC Maser - MBC Maser 2 - MBC Max - MBC Drama + - Mix Bel Araby - Mix Hollywood - MTV Alloubnaniya - Musawa - National Geographic Abu Dhabi - National Geographic Middle East - Nessma - Nile Comedy - Nile Drama - On Drama - On E - OSN Comedy - OSN Kids - OSN Action - OSN Movies - OSN Ya Hala - Rotana Cinema Egypt - Rotana Cinema KSA - Rotana Classic - Rotana Comedy - Rotana Drama - Rotana Khalijia - Rotana Kids - Rotana+ HD - Sada Elbalad - Sada Elbalad 2 - Sada Elbalad Drama - Sama Dubai - Sama TV - SBC - Sharjah TV - Star Movies Middle East - Star World Middle East - Syria Drama - Syria TV - Ten - Thikrayat TV - UTV - Watania 2 - Zee Aflam - Zee Alwan - 2M Monde - Abu Dhabi Drama - Abu Dhabi TV - Al Aoula Middle East - Al Araby 2 TV - Al Dafrah TV - Al Hayat - Al Jadeed - Al Kahera Wal Nas - Al Kahera Wal Nas TV 2 - Al-Manar TV - Al-Nahar TV - Al-Nahar Drama - Alrai TV - Al Rasheed TV - Al-Saeedah - Al Safwa - Saudi TV - Alsharqiya TV - Alsumaria - Al Yawm - Amman TV - ART Aflam 1 - ART Aflam 2 - ART Cinema - ART Hekayat - ART Hekayat 2 - BeIn Drama 1 - BeIn Movies Premiere - BeIn Movies Action - BeIn Movies Drama - BeIn Movies Family - BeIn Series 1 - BeIn Series 2 - Cartoon Network Arabic - CBC - CBC Drama - CBC Sofra - Cima - Cinema 1 - Cinema 2 - Discovery Channel Middle East & Africa - Disney Channel Middle East - DMC - DMC Drama - Dubai One - Dubai TV - Dubai Zaman - Echorouk TV - El Mehwar Channel - Watania 1 - Emarat TV - E! Middle East - ETC TV - Fann - FX - IFilm Arabic - Kuwait TV - KTV Al Qurain - KTV Khallik Bilbait - Lana TV - LBC - Maspero Zaman - MBC - MBC 2 - MBC 3 - MBC 4 - MBC 5 - MBC Action - MBC Bollywood - MBC Drama - MBC Maser - MBC Maser 2 - MBC Max - MBC Drama + - Mix Bel Araby - Mix Hollywood - MTV Alloubnaniya - Musawa - National Geographic Abu Dhabi - National Geographic Middle East - Nessma - Nile Comedy - Nile Drama - On Drama - On E - OSN Comedy - OSN Kids - OSN Action - OSN Movies - OSN Ya Hala - Rotana Cinema Egypt - Rotana Cinema KSA - Rotana Classic - Rotana Comedy - Rotana Drama - Rotana Khalijia - Rotana Kids - Rotana+ HD - Sada Elbalad - Sada Elbalad 2 - Sada Elbalad Drama - Sama Dubai - Sama TV - SBC - Sharjah TV - Star Movies Middle East - Star World Middle East - Syria Drama - Syria TV - Ten - Thikrayat TV - UTV - Watania 2 - Zee Aflam - Zee Alwan - - \ No newline at end of file + + 2M Monde + Abu Dhabi Drama + Abu Dhabi TV + Al Aoula Middle East + Al Araby 2 TV + Al Dafrah TV + Al Hayat + Al Jadeed + Al Kahera Wal Nas + Al Kahera Wal Nas TV 2 + Al-Manar TV + Al-Nahar TV + Al-Nahar Drama + Alrai TV + Al Rasheed TV + Al-Saeedah + Al Safwa + Saudi TV + Alsharqiya TV + Alsumaria + Al Yawm + Amman TV + ART Aflam 1 + ART Aflam 2 + ART Cinema + ART Hekayat + ART Hekayat 2 + BeIn Drama 1 + BeIn Movies Premiere + BeIn Movies Action + BeIn Movies Drama + BeIn Movies Family + BeIn Series 1 + BeIn Series 2 + Cartoon Network Arabic + CBC + CBC Drama + CBC Sofra + Cima + Cinema 1 + Cinema 2 + Discovery Channel Middle East & Africa + Disney Channel Middle East + DMC + DMC Drama + Dubai One + Dubai TV + Dubai Zaman + Echorouk TV + El Mehwar Channel + Watania 1 + Emarat TV + E! Middle East + ETC TV + Fann + FX + IFilm Arabic + Kuwait TV + KTV Al Qurain + KTV Khallik Bilbait + Lana TV + LBC + LBC International + Maspero Zaman + MBC + MBC 2 + MBC 3 + MBC 4 + MBC 5 + MBC Action + MBC Bollywood + MBC Drama + MBC Maser + MBC Maser 2 + MBC Max + MBC Drama + + Mix Bel Araby + Mix Hollywood + MTV Alloubnaniya + Musawa + National Geographic Abu Dhabi + National Geographic Middle East + Nessma + Nile Comedy + Nile Drama + On Drama + On E + OSN Comedy + OSN Kids + OSN Action + OSN Movies + OSN Ya Hala + Rotana Cinema Egypt + Rotana Cinema KSA + Rotana Classic + Rotana Comedy + Rotana Drama + Rotana Khalijia + Rotana Kids + Rotana+ HD + Sada Elbalad + Sada Elbalad 2 + Sada Elbalad Drama + Sama Dubai + Sama TV + SBC + Sharjah TV + Star Movies Middle East + Star World Middle East + Syria Drama + Syria TV + Ten + Thikrayat TV + UTV + Watania 2 + Zee Aflam + Zee Alwan + 2M Monde + Abu Dhabi Drama + Abu Dhabi TV + Al Aoula Middle East + Al Araby 2 TV + Al Dafrah TV + Al Hayat + Al Jadeed + Al Kahera Wal Nas + Al Kahera Wal Nas TV 2 + Al-Manar TV + Al-Nahar TV + Al-Nahar Drama + Alrai TV + Al Rasheed TV + Al-Saeedah + Al Safwa + Saudi TV + Alsharqiya TV + Alsumaria + Al Yawm + Amman TV + ART Aflam 1 + ART Aflam 2 + ART Cinema + ART Hekayat + ART Hekayat 2 + BeIn Drama 1 + BeIn Movies Premiere + BeIn Movies Action + BeIn Movies Drama + BeIn Movies Family + BeIn Series 1 + BeIn Series 2 + Cartoon Network Arabic + CBC + CBC Drama + CBC Sofra + Cima + Cinema 1 + Cinema 2 + Discovery Channel Middle East & Africa + Disney Channel Middle East + DMC + DMC Drama + Dubai One + Dubai TV + Dubai Zaman + Echorouk TV + El Mehwar Channel + Watania 1 + Emarat TV + E! Middle East + ETC TV + Fann + FX + IFilm Arabic + Kuwait TV + KTV Al Qurain + KTV Khallik Bilbait + Lana TV + LBC + Maspero Zaman + MBC + MBC 2 + MBC 3 + MBC 4 + MBC 5 + MBC Action + MBC Bollywood + MBC Drama + MBC Maser + MBC Maser 2 + MBC Max + MBC Drama + + Mix Bel Araby + Mix Hollywood + MTV Alloubnaniya + Musawa + National Geographic Abu Dhabi + National Geographic Middle East + Nessma + Nile Comedy + Nile Drama + On Drama + On E + OSN Comedy + OSN Kids + OSN Action + OSN Movies + OSN Ya Hala + Rotana Cinema Egypt + Rotana Cinema KSA + Rotana Classic + Rotana Comedy + Rotana Drama + Rotana Khalijia + Rotana Kids + Rotana+ HD + Sada Elbalad + Sada Elbalad 2 + Sada Elbalad Drama + Sama Dubai + Sama TV + SBC + Sharjah TV + Star Movies Middle East + Star World Middle East + Syria Drama + Syria TV + Ten + Thikrayat TV + UTV + Watania 2 + Zee Aflam + Zee Alwan + \ No newline at end of file diff --git a/sites/elcinema.com/elcinema.com.config.js b/sites/elcinema.com/elcinema.com.config.js index 5271e598..878362f9 100644 --- a/sites/elcinema.com/elcinema.com.config.js +++ b/sites/elcinema.com/elcinema.com.config.js @@ -11,7 +11,6 @@ dayjs.extend(utc) module.exports = { site: 'elcinema.com', - skip: true, // NOTE: the guide shows the wrong time (https://github.com/iptv-org/epg/issues/994) days: 2, url({ channel }) { const lang = channel.lang === 'en' ? 'en/' : '/' diff --git a/sites/elcinema.com/elcinema.com.test.js b/sites/elcinema.com/elcinema.com.test.js index a64a4eb8..d7ea6e93 100644 --- a/sites/elcinema.com/elcinema.com.test.js +++ b/sites/elcinema.com/elcinema.com.test.js @@ -1,6 +1,6 @@ -// npx epg-grabber --config=sites/elcinema.com/elcinema.com.config.js --channels=sites/elcinema.com/elcinema.com.channels.xml --output=guide.xml --days=2 +// npm run grab -- --site=elcinema.com -const { parser, url, request } = require('./elcinema.com.config.js') +const { parser, url } = require('./elcinema.com.config.js') const fs = require('fs') const path = require('path') const dayjs = require('dayjs') @@ -63,7 +63,7 @@ it('can handle empty guide', () => { const result = parser({ date, channel: channelEN, - content: `` + content: '' }) expect(result).toMatchObject([]) }) diff --git a/sites/ena.skylifetv.co.kr/ena.skylifetv.co.kr.channels.xml b/sites/ena.skylifetv.co.kr/ena.skylifetv.co.kr.channels.xml index a01dc207..1af380ed 100644 --- a/sites/ena.skylifetv.co.kr/ena.skylifetv.co.kr.channels.xml +++ b/sites/ena.skylifetv.co.kr/ena.skylifetv.co.kr.channels.xml @@ -1,11 +1,9 @@ - - - ENA - ENA PLAY - kids talk talk plus - OLIFE - ONCE - skyUHD - - + + ENA + ENA PLAY + kids talk talk plus + OLIFE + ONCE + skyUHD + diff --git a/sites/ena.skylifetv.co.kr/ena.skylifetv.co.kr.config.js b/sites/ena.skylifetv.co.kr/ena.skylifetv.co.kr.config.js index 86e3791f..d8401689 100644 --- a/sites/ena.skylifetv.co.kr/ena.skylifetv.co.kr.config.js +++ b/sites/ena.skylifetv.co.kr/ena.skylifetv.co.kr.config.js @@ -61,7 +61,7 @@ function parseStart($item, date) { return dayjs.tz(`${date.format('YYYY-MM-DD')} ${time}`, 'YYYY-MM-DD HH:mm', 'Asia/Seoul') } -function parseItems(content, channel, date) { +function parseItems(content) { const $ = cheerio.load(content) return $('.tbl_schedule > tbody > tr').toArray() diff --git a/sites/ena.skylifetv.co.kr/ena.skylifetv.co.kr.test.js b/sites/ena.skylifetv.co.kr/ena.skylifetv.co.kr.test.js index ecf7e5ae..12c9255c 100644 --- a/sites/ena.skylifetv.co.kr/ena.skylifetv.co.kr.test.js +++ b/sites/ena.skylifetv.co.kr/ena.skylifetv.co.kr.test.js @@ -1,4 +1,4 @@ -// npx epg-grabber --config=sites/ena.skylifetv.co.kr/ena.skylifetv.co.kr.config.js --channels=sites/ena.skylifetv.co.kr/ena.skylifetv.co.kr.channels.xml --output=guide.xml --days=2 +// npm run grab -- --site=ena.skylifetv.co.kr const { parser, url } = require('./ena.skylifetv.co.kr.config.js') const fs = require('fs') @@ -31,7 +31,7 @@ it('can parse response', () => { expect(results[0]).toMatchObject({ start: '2023-01-26T16:05:00.000Z', stop: '2023-01-26T17:20:00.000Z', - title: `법쩐 6화`, + title: '법쩐 6화', rating: { system: 'KMRB', value: '15' @@ -41,7 +41,7 @@ it('can parse response', () => { expect(results[17]).toMatchObject({ start: '2023-01-27T14:10:00.000Z', stop: '2023-01-27T15:25:00.000Z', - title: `남이 될 수 있을까 4화`, + title: '남이 될 수 있을까 4화', rating: { system: 'KMRB', value: '15' diff --git a/sites/entertainment.ie/entertainment.ie.channels.xml b/sites/entertainment.ie/entertainment.ie.channels.xml index f5f18067..f4201bbb 100644 --- a/sites/entertainment.ie/entertainment.ie.channels.xml +++ b/sites/entertainment.ie/entertainment.ie.channels.xml @@ -1,113 +1,111 @@ - - - - - - - - - - - - - - - - 4Music - Alibi - Animal Planet - BBC Four - BBC Three - Boomerang - Box Nation - Cartoon Network - CBBC - CBeebies - CBS Drama - CBS Reality - Challenge - Channel 4 - Channel 5 - Comedy Central Extra - Comedy Central - Dave - Discovery Channel - Discovery History - Discovery Science - Discovery Turbo - DMAX - Drama - E4 - E4 Extra - Eden - Eurosport 1 - Eurosport 2 - Free Sports - GOLD - Great! Movies - Great! TV - HorrorXtra - Investigation Discovery - ITV2 - ITV3 - ITV4 - La Liga TV - Legend - More4 - MTV - National Geographic - National Geographic Wild - Nickelodeon - Nicktoons - Pick - Premier Sports 1 - Premier Sports 2 - Really - RTÉ2 - RTÉ Jr - RTÉ One - Sky Arts - Sky Atlantic - Sky Cinema Comedy - Sky Cinema Drama - Sky Cinema Family - Sky Cinema Greats - Sky Cinema Hits - Sky Cinema Premiere - Sky Cinema Sci-Fi - Horror - Sky Cinema Thriller - Sky Comedy - Sky Crime - Sky Documentaries - Sky History - Sky History 2 - Sky Max - Sky Nature - Sky Replay - Sky Sci-Fi - Sky Showcase - Sky Sports Arena HD - Sky Sports Cricket - Sky Sports Football - Sky Sports Golf - Sky Sports Main Event - Sky Sports Mix - Sky Sports NFL - Sky Sports Premier League ROI - Sky Witness - TG4 - TLC - TNT Sports 1 - TNT Sports 2 - TNT Sports 3 - UTV - Virgin Media Four - Virgin Media More - Virgin Media One - Virgin Media Three - Virgin Media Two - W - Yesterday - - + + + + + + + + + + + + + + + 4Music + Alibi + Animal Planet + BBC Four + BBC Three + Boomerang + Box Nation + Cartoon Network + CBBC + CBeebies + CBS Drama + CBS Reality + Challenge + Channel 4 + Channel 5 + Comedy Central Extra + Comedy Central + Dave + Discovery Channel + Discovery History + Discovery Science + Discovery Turbo + DMAX + Drama + E4 + E4 Extra + Eden + Eurosport 1 + Eurosport 2 + Free Sports + GOLD + Great! Movies + Great! TV + HorrorXtra + Investigation Discovery + ITV2 + ITV3 + ITV4 + La Liga TV + Legend + More4 + MTV + National Geographic + National Geographic Wild + Nickelodeon + Nicktoons + Pick + Premier Sports 1 + Premier Sports 2 + Really + RTÉ2 + RTÉ Jr + RTÉ One + Sky Arts + Sky Atlantic + Sky Cinema Comedy + Sky Cinema Drama + Sky Cinema Family + Sky Cinema Greats + Sky Cinema Hits + Sky Cinema Premiere + Sky Cinema Sci-Fi - Horror + Sky Cinema Thriller + Sky Comedy + Sky Crime + Sky Documentaries + Sky History + Sky History 2 + Sky Max + Sky Nature + Sky Replay + Sky Sci-Fi + Sky Showcase + Sky Sports Arena HD + Sky Sports Cricket + Sky Sports Football + Sky Sports Golf + Sky Sports Main Event + Sky Sports Mix + Sky Sports NFL + Sky Sports Premier League ROI + Sky Witness + TG4 + TLC + TNT Sports 1 + TNT Sports 2 + TNT Sports 3 + UTV + Virgin Media Four + Virgin Media More + Virgin Media One + Virgin Media Three + Virgin Media Two + W + Yesterday + diff --git a/sites/entertainment.ie/entertainment.ie.config.js b/sites/entertainment.ie/entertainment.ie.config.js index 337c7872..0ac331d1 100644 --- a/sites/entertainment.ie/entertainment.ie.config.js +++ b/sites/entertainment.ie/entertainment.ie.config.js @@ -37,7 +37,7 @@ module.exports = { }, async channels() { const data = await axios - .get(`https://entertainment.ie/tv/all-channels/`) + .get('https://entertainment.ie/tv/all-channels/') .then(r => r.data) .catch(console.log) const $ = cheerio.load(data) @@ -73,7 +73,7 @@ function parseCategories($item) { function parseStart($item, date) { let d = $item('.text-holder > .btn-hold > .btn-wrap > a.btn-share').data('time') - let [_, time] = d ? d.split(', ') : [null, null] + let [, time] = d ? d.split(', ') : [null, null] return time ? DateTime.fromFormat(`${date.format('YYYY-MM-DD')} ${time}`, 'yyyy-MM-dd HH:mm', { @@ -91,5 +91,5 @@ function parseDuration($item) { function parseItems(content) { const $ = cheerio.load(content) - return $(`.info-list > li`).toArray() + return $('.info-list > li').toArray() } diff --git a/sites/entertainment.ie/entertainment.ie.test.js b/sites/entertainment.ie/entertainment.ie.test.js index c88911a1..4f027098 100644 --- a/sites/entertainment.ie/entertainment.ie.test.js +++ b/sites/entertainment.ie/entertainment.ie.test.js @@ -1,5 +1,5 @@ // npm run channels:parse -- --config=./sites/entertainment.ie/entertainment.ie.config.js --output=./sites/entertainment.ie/entertainment.ie.channels.xml -// npx epg-grabber --config=sites/entertainment.ie/entertainment.ie.config.js --channels=sites/entertainment.ie/entertainment.ie.channels.xml --output=guide.xml +// npm run grab -- --site=entertainment.ie const fs = require('fs') const path = require('path') diff --git a/sites/epg.i-cable.com/epg.i-cable.com.channels.xml b/sites/epg.i-cable.com/epg.i-cable.com.channels.xml index 6d34440a..a5567e69 100644 --- a/sites/epg.i-cable.com/epg.i-cable.com.channels.xml +++ b/sites/epg.i-cable.com/epg.i-cable.com.channels.xml @@ -1,168 +1,166 @@ - - - ABC Australia - Al Jazeera English - Animal Planet - Arirang TV - Asian Food Network [HD] - BBC Earth - BBC Lifestyle - BBC WorldNews - Bloomberg TV - Boomerang - Cartoon Network - CBeebies - CCTV-1 [HD] - CCTV-11-Opera - CCTV-News - CCTV-4 - CGTN - CGTN-Documentary [HD] - Channel Blue - Channel Fire - Ch News Asia - CNBC HK - CNNI - Da Vinci - Discovery Asia [HD] - Discovery - Discovery Sci - DMAX - Dragon TV - DreamWorks - DW (Deutsch) - DW (English) - Asia YOYO TV - ETTV AsiaNews - ETTV Asia - euronews(Eng) - euronews(Por) - Eurosport - EVE - Fashion TV - FIGHT SPORTS - France 24 English - France 24 French - Global Trekker [HD] - GRT GBA Satellite TV - HITS [HD] - HITS MOVIES [HD] - HK Int’l Business Ch - CNN HLN News - HOY TV - Hubei TV - Hunan TV International - CABLE Movies - Channel 18 - Cine p. - Family Entertainment Channel - i-CABLE Finance Info Channel - HD Channel 603 [HD] - Horse Racing 1 - Horse Racing 2 - i-CABLE Live News Channel - i-CABLE News Channel - Sports Channel - Sports Plus 1 - Sports Plus 2 - Sports Plus 3 - LFCTV - MTV Live - MyCineEu - National Geographic - Nat Geo Wild - NHK World-Japan - NHK World Pr - Nickelodeon - Nick Jr. - Outdoor Channel - Paramount Network Asia [HD] - Pet Club TV - Phoenix Chi - Phoenix Hong Kong Channel - PhoenixInfonews - ROCK Entertainment - ROCK Extreme [HD] - Russia Today - SZTV - Sky News - STAR Chinese Channel - Star Chinese Movies [HD] - TechStorm [HD] - Thrill - TLC - Travel Channel [HD] - tvN - WION - Zee Cinema - Zee TV - Zing - 動物星球頻道 - 亞洲美食頻道 [HD] - BBC Earth - BBC Lifestyle - Bloomberg TV - Boomerang 頻道 - 卡通頻道 - 中央電視台綜合頻道 [HD] - 中央電視台戲曲頻道 - 中央電視台新聞頻道 - 中央電視台中文國際頻道 - 歡樂台 - 惹火台 - 亞洲新聞台 - Discovery Asia [HD] - Discovery - Discovery科學頻道 - DMAX - 東方衛視國際頻道 - 夢工廠 - 東森亞洲衛視 - 東森亞洲幼幼台 - 東森亞洲新聞台 - euronews(Eng) - euronews(Por) - EVE - Global Trekker [HD] - 大灣區衛視 - HITS [HD] - HITS MOVIES [HD] - 香港國際財經台 - HOY TV - 湖北衛視 - 湖南廣播電視台國際頻道 - 有線電影台 - 有線18台 - Cine p. - 綜合娛樂台 - 財經資訊台 - 高清603台 [HD] - 賽馬1台 - 賽馬2台 - 直播新聞台 - 新聞台 - 體育台 - Sports Plus 1 - Sports Plus 2 - Sports Plus 3 - 光影歐洲 - 國家地理頻道 - 國家地理野生頻道 - Nickelodeon - Paramount Network Asia [HD] - 鳯凰衛視中文台 - 鳳凰衛視香港台 - 鳳凰衛視資訊台 - ROCK綜藝娛樂 - ROCK超極娛樂 [HD] - 深圳電視台 - 衛視中文台 - 衛視電影台 [HD] - 驚慄電影台 - 旅遊生活頻道 - 旅遊頻道 [HD] - tvN - Zee Cinema - - + + DW (Deutsch) + ABC Australia + Al Jazeera English + Animal Planet + Arirang TV + Asian Food Network [HD] + BBC Earth + BBC Lifestyle + BBC WorldNews + Bloomberg TV + Boomerang + Cartoon Network + CBeebies + CCTV-1 [HD] + CCTV-11-Opera + CCTV-News + CCTV-4 + CGTN + CGTN-Documentary [HD] + Channel Blue + Channel Fire + Ch News Asia + CNBC HK + CNNI + Da Vinci + Discovery Asia [HD] + Discovery + Discovery Sci + DMAX + Dragon TV + DreamWorks + DW (English) + ETTV Asia + Asia YOYO TV + ETTV AsiaNews + euronews(Eng) + euronews(Por) + Eurosport + EVE + Fashion TV + FIGHT SPORTS + France 24 English + Global Trekker [HD] + GRT GBA Satellite TV + HITS [HD] + HITS MOVIES [HD] + HK Int’l Business Ch + CNN HLN News + HOY TV + Hubei TV + Hunan TV International + CABLE Movies + Channel 18 + Cine p. + Family Entertainment Channel + i-CABLE Finance Info Channel + HD Channel 603 [HD] + Horse Racing 1 + Horse Racing 2 + i-CABLE Live News Channel + i-CABLE News Channel + Sports Channel + Sports Plus 1 + Sports Plus 2 + Sports Plus 3 + LFCTV + MTV Live + MyCineEu + National Geographic + Nat Geo Wild + NHK World-Japan + NHK World Pr + Nickelodeon + Nick Jr. + Outdoor Channel + Paramount Network Asia [HD] + Pet Club TV + Phoenix Chi + Phoenix Hong Kong Channel + PhoenixInfonews + ROCK Entertainment + ROCK Extreme [HD] + Russia Today + SZTV + Sky News + STAR Chinese Channel + Star Chinese Movies [HD] + TechStorm [HD] + Thrill + TLC + Travel Channel [HD] + tvN + WION + Zee Cinema + Zing + France 24 French + Zee TV + 動物星球頻道 + 亞洲美食頻道 [HD] + BBC Earth + BBC Lifestyle + Bloomberg TV + Boomerang 頻道 + 卡通頻道 + 中央電視台綜合頻道 [HD] + 中央電視台戲曲頻道 + 中央電視台新聞頻道 + 中央電視台中文國際頻道 + 歡樂台 + 惹火台 + 亞洲新聞台 + Discovery Asia [HD] + Discovery + Discovery科學頻道 + DMAX + 東方衛視國際頻道 + 夢工廠 + 東森亞洲衛視 + 東森亞洲幼幼台 + 東森亞洲新聞台 + euronews(Eng) + euronews(Por) + EVE + Global Trekker [HD] + 大灣區衛視 + HITS [HD] + HITS MOVIES [HD] + 香港國際財經台 + HOY TV + 湖北衛視 + 湖南廣播電視台國際頻道 + 有線電影台 + 有線18台 + Cine p. + 綜合娛樂台 + 財經資訊台 + 高清603台 [HD] + 賽馬1台 + 賽馬2台 + 直播新聞台 + 新聞台 + 體育台 + Sports Plus 1 + Sports Plus 2 + Sports Plus 3 + 光影歐洲 + 國家地理頻道 + 國家地理野生頻道 + Nickelodeon + Paramount Network Asia [HD] + 鳯凰衛視中文台 + 鳳凰衛視香港台 + 鳳凰衛視資訊台 + ROCK綜藝娛樂 + ROCK超極娛樂 [HD] + 深圳電視台 + 衛視中文台 + 衛視電影台 [HD] + 驚慄電影台 + 旅遊生活頻道 + 旅遊頻道 [HD] + tvN + Zee Cinema + 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 be016007..20074174 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 @@ -75,11 +75,13 @@ function parseStart(item, date) { return DateTime.fromFormat( `${date.format('YYYY-MM-DD')} ${item.time} ${meridiem}`, 'yyyy-MM-dd hh:mm a', - { zone: 'Asia/Hong_Kong' } + { + zone: 'Asia/Hong_Kong' + } ).toUTC() } -function parseItems(content, date) { +function parseItems(content) { const data = JSON.parse(content) if (!data || !Array.isArray(data.epgs)) return [] diff --git a/sites/epg.i-cable.com/epg.i-cable.com.test.js b/sites/epg.i-cable.com/epg.i-cable.com.test.js index bc573f02..8fc59b98 100644 --- a/sites/epg.i-cable.com/epg.i-cable.com.test.js +++ b/sites/epg.i-cable.com/epg.i-cable.com.test.js @@ -1,13 +1,13 @@ // npm run channels:parse -- --config=./sites/epg.i-cable.com/epg.i-cable.com.config.js --output=./sites/epg.i-cable.com/epg.i-cable.com.channels.xml --set=lang:zh -// npx epg-grabber --config=sites/epg.i-cable.com/epg.i-cable.com.config.js --channels=sites/epg.i-cable.com/epg.i-cable.com.channels.xml --output=guide.xml +// npm run grab -- --site=epg.i-cable.com const { parser, url } = require('./epg.i-cable.com.config.js') const fs = require('fs') const path = require('path') -const axios = require('axios') const dayjs = require('dayjs') const utc = require('dayjs/plugin/utc') const customParseFormat = require('dayjs/plugin/customParseFormat') + dayjs.extend(customParseFormat) dayjs.extend(utc) diff --git a/sites/firstmedia.com/firstmedia.com.channels.xml b/sites/firstmedia.com/firstmedia.com.channels.xml index 1d8634cb..6bdba625 100644 --- a/sites/firstmedia.com/firstmedia.com.channels.xml +++ b/sites/firstmedia.com/firstmedia.com.channels.xml @@ -1,193 +1,183 @@ - - - ABC Australia - Al Jazeera Arabic - Al Jazeera International - Al Quran Al Kareem - ANHUI TV - Animal Planet - Animax - ANTV - Arirang - Asian Food Network - AXN - BabyFirst - - - Berita Satu - Berita Satu World - - BLOOMBERG TELEVISION - Boomerang HD - Cartoon Network - CCTV 4 - Celestial Movie - CGTN - CGTN Documentary HD - Champions TV 1 - Champions TV 2 - Champions TV 3 - Champions TV 4 SD - Channel News Asia - Cinema World HD - Cinemax - Citra Biskop HD - Citra Dangdut HD - CItra Drama HD - Citra Entertainment HD - Citra Muslim HD - - Crime - Investigation HD - Da Vinci HD - DAAI TV - Discovery Asia HD - Discovery Channel - - DMAX HD - Dragon TV - Dream Works HD - DW Deutsch - DW English - eGG Channel - Eternal Word Television - Network (EWTN)) - Euronews - - Fashion TV - - Food Network HD - Fox News - France 24 - Galaxy HD - Galaxy Premium HD - Garuda TV - GEM - GMS Channel - GTV - HBO - HBO Family - HBO Hits - HBO Signature - HGTV HD - History HD - HITS HD - HITS MOVIES HD - - - Horee! HD - Hunan TV - IDX Channel HD - IMC - Indosiar - iNews - - Jakarta TV - Jak TV - Jawa Pos Media Televisi - JTV - Jiangsu TV - - KBS World - KIX HD - Kompas TV - Lifetime HD - - - Love Nature 4K - Love Nature HD - - Metro Globe Network - MGN - Metro TV - MNC News - MTV Asia - MTV Live HD - MyZen TV HD - National - Geographic Channel - National - Geographic Wild - NET. - NHK World Japan HD - NHK World Premium - Nick jr. - Nickelodeon - O Channel - ONE - Paramount Network - HD - Phoenix Chinese Channel - Phoenix Info News - - Premier Sports - Rai Italia - Rajawali TV - Reformed 21 - Rock Entertainment HD - Rock Extreme - Russia Today - SCTV - SEA Today HD - - - Shine - Smithsonian HD - SPOTV - SPOTV 2 - Star Chinese Channel - Star Gold - Star Plus - Stingray Djazz HD - Stingray Festival 4K - - Stingray Naturescape HD - Stingray Now 4K - - Sunnah TV - TBN Asia - Tech Storm HD - The Learning Channel - TLC - TRANS 7 - TRANS TV - TRT World - - TV 5 Monde Style HD - TV One - TV PARLEMEN - TV5 Monde - TV9 - TVB Xing He - TVBS Asia - TVBS News - TVN HD - TVN Movies HD - TVRI Nasional - USA Today HD - - Wion - Xing Kong China - Zee Action - Zee Bioskop - Zee Bollywood - Zee Cinema - ZEE TV - Zhejiang TV - - \ No newline at end of file + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ABC Australia + Al Jazeera Arabic + Al Jazeera International + Al Quran Al Kareem + Sunnah TV + ANHUI TV + Animal Planet + Animax + ANTV + Arirang + Asian Food Network + AXN + BabyFirst + Berita Satu + Berita Satu World + BLOOMBERG TELEVISION + Boomerang HD + Cartoon Network + CCTV 4 + Celestial Movie + CGTN + CGTN Documentary HD + Champions TV 1 + Champions TV 2 + Champions TV 3 + Champions TV 4 SD + Cinema World HD + Cinemax + Citra Biskop HD + Citra Dangdut HD + CItra Drama HD + Citra Entertainment HD + Citra Muslim HD + Channel News Asia + Crime Investigation HD + DAAI TV + Da Vinci HD + Discovery Asia HD + Discovery Channel + DMAX HD + Dragon TV + Dream Works HD + DW Deutsch + DW English + eGG Channel + Euronews + Eternal Word Television Network (EWTN)) + Fashion TV + Food Network HD + Fox News + France 24 + Galaxy HD + Galaxy Premium HD + Garuda TV + GEM + GMS Channel + GTV + HBO + HBO Family + HBO Hits + HBO Signature + HGTV HD + History HD + HITS HD + HITS MOVIES HD + Horee! HD + Hunan TV + IDX Channel HD + IMC + Indosiar + iNews + Jakarta TV - Jak TV + Jiangsu TV + Jawa Pos Media Televisi - JTV + KBS World + KIX HD + Kompas TV + Lifetime HD + Love Nature 4K + Love Nature HD + Metro Globe Network - MGN + Metro TV + MNC News + MTV Asia + MTV Live HD + MyZen TV HD + National Geographic Channel + National Geographic Wild + NET. + NHK World Japan HD + NHK World Premium + Nickelodeon + Nick jr. + O Channel + ONE + Paramount Network HD + Phoenix Chinese Channel + Phoenix Info News + Premier Sports + Rai Italia + Rajawali TV + Reformed 21 + Rock Entertainment HD + Rock Extreme + Russia Today + SCTV + SEA Today HD + Shine + Smithsonian HD + SPOTV + SPOTV 2 + Star Chinese Channel + Star Gold + Star Plus + Stingray Djazz HD + Stingray Festival 4K + Stingray Naturescape HD + Stingray Now 4K + TBN Asia + Tech Storm HD + The Learning Channel - TLC + TRANS 7 + TRANS TV + TRT World + TV5 Monde + TV 5 Monde Style HD + TV9 + TVBS Asia + TVBS News + TVB Xing He + TVN HD + TVN Movies HD + TV One + TVRI Nasional + TV PARLEMEN + USA Today HD + Wion + Xing Kong China + Zee Action + Zee Bioskop + Zee Bollywood + Zee Cinema + ZEE TV + Zhejiang TV + \ No newline at end of file diff --git a/sites/firstmedia.com/firstmedia.com.config.js b/sites/firstmedia.com/firstmedia.com.config.js index 604ee012..75237b1e 100644 --- a/sites/firstmedia.com/firstmedia.com.config.js +++ b/sites/firstmedia.com/firstmedia.com.config.js @@ -1,54 +1,52 @@ -const dayjs = require("dayjs"); -const timezone = require("dayjs/plugin/timezone"); -const utc = require('dayjs/plugin/utc'); +const dayjs = require('dayjs') +const timezone = require('dayjs/plugin/timezone') +const utc = require('dayjs/plugin/utc') -dayjs.extend(timezone); -dayjs.extend(utc); +dayjs.extend(timezone) +dayjs.extend(utc) module.exports = { - site: "firstmedia.com", + site: 'firstmedia.com', days: 1, - request: { - timeout: 30000 // 30 seconds - }, url: function ({ channel, date }) { - return `https://www.firstmedia.com/ajax/schedule?date=${date.format("DD/MM/YYYY") - }&channel=${channel.site_id}&start_time=1&end_time=24&need_channels=0`; + return `https://www.firstmedia.com/ajax/schedule?date=${date.format('DD/MM/YYYY')}&channel=${ + channel.site_id + }&start_time=1&end_time=24&need_channels=0` }, parser: function ({ content, channel }) { - if (!content || !channel) return []; + if (!content || !channel) return [] - let programs = []; - const items = parseItems(content, channel.site_id); - items.forEach((item) => { + let programs = [] + const items = parseItems(content, channel.site_id) + items.forEach(item => { programs.push({ title: parseTitle(item), description: parseDescription(item), start: parseStart(item).toISOString(), - stop: parseStop(item).toISOString(), - }); - }); + stop: parseStop(item).toISOString() + }) + }) - return programs; - }, -}; + return programs + } +} function parseItems(content, channel) { - return JSON.parse(content.trim()).entries[channel]; + return JSON.parse(content.trim()).entries[channel] } function parseTitle(item) { - return item.title; + return item.title } function parseDescription(item) { - return item.long_description; + return item.long_description } function parseStart(item) { - return dayjs.tz(item.start_time, "YYYY-MM-DD HH:mm:ss", "Asia/Jakarta"); + return dayjs.tz(item.start_time, 'YYYY-MM-DD HH:mm:ss', 'Asia/Jakarta') } function parseStop(item) { - return dayjs.tz(item.end_time, "YYYY-MM-DD HH:mm:ss", "Asia/Jakarta"); + return dayjs.tz(item.end_time, 'YYYY-MM-DD HH:mm:ss', 'Asia/Jakarta') } diff --git a/sites/firstmedia.com/firstmedia.com.test.js b/sites/firstmedia.com/firstmedia.com.test.js index 8792b5fa..821fdaac 100644 --- a/sites/firstmedia.com/firstmedia.com.test.js +++ b/sites/firstmedia.com/firstmedia.com.test.js @@ -7,25 +7,29 @@ const date = dayjs.utc('2023-06-18', 'DD/MM/YYYY').startOf('d') const channel = { site_id: '251', xmltv_id: 'ABCAustralia.au', lang: 'id' } it('can generate valid url', () => { - expect(url({ channel, date })).toBe('https://www.firstmedia.com/ajax/schedule?date=18/06/2023&channel=251&start_time=1&end_time=24&need_channels=0') + expect(url({ channel, date })).toBe( + 'https://www.firstmedia.com/ajax/schedule?date=18/06/2023&channel=251&start_time=1&end_time=24&need_channels=0' + ) }) it('can parse response', () => { - const content = `{"entries":{"251":[{"logo":"files/images/d/new-logo/channels/11-NEWS/ABC Australia SD-FirstMedia-Chl-251.jpg","name":"ABC Australia","id":"2a800e8a-fdcc-47b3-a4a6-58d1d122b326","channel_id":"a1840c59-6c92-8233-3a02-230246aae0c4","channel_no":251,"programme_id":null,"episode":null,"title":"China Tonight","slug":null,"date":"2023-06-13 00:00:00","start_time":"2023-06-13 10:55:00","end_time":"2023-06-13 11:30:00","length":2100,"description":"China Tonight","long_description":"China is a superpower that dominates global news but it's also home to 1.4 billion stories. Sam Yang is back for a new season, hearing from the people who make this extraordinary nation what it is today.","status":"0","created_by":null,"updated_by":null,"created_at":"2023-06-13 00:20:24","updated_at":"2023-06-13 00:20:24"}]}}` - const results = parser({ content, channel }) + const content = + '{"entries":{"251":[{"logo":"files/images/d/new-logo/channels/11-NEWS/ABC Australia SD-FirstMedia-Chl-251.jpg","name":"ABC Australia","id":"2a800e8a-fdcc-47b3-a4a6-58d1d122b326","channel_id":"a1840c59-6c92-8233-3a02-230246aae0c4","channel_no":251,"programme_id":null,"episode":null,"title":"China Tonight","slug":null,"date":"2023-06-13 00:00:00","start_time":"2023-06-13 10:55:00","end_time":"2023-06-13 11:30:00","length":2100,"description":"China Tonight","long_description":"China is a superpower that dominates global news but it\'s also home to 1.4 billion stories. Sam Yang is back for a new season, hearing from the people who make this extraordinary nation what it is today.","status":"0","created_by":null,"updated_by":null,"created_at":"2023-06-13 00:20:24","updated_at":"2023-06-13 00:20:24"}]}}' + const results = parser({ content, channel }) - expect(results).toMatchObject([ - { - start: '2023-06-13T03:55:00.000Z', - stop: '2023-06-13T04:30:00.000Z', - title: 'China Tonight', - description: 'China is a superpower that dominates global news but it\'s also home to 1.4 billion stories. Sam Yang is back for a new season, hearing from the people who make this extraordinary nation what it is today.' - } - ]) + expect(results).toMatchObject([ + { + start: '2023-06-13T03:55:00.000Z', + stop: '2023-06-13T04:30:00.000Z', + title: 'China Tonight', + description: + "China is a superpower that dominates global news but it's also home to 1.4 billion stories. Sam Yang is back for a new season, hearing from the people who make this extraordinary nation what it is today." + } + ]) }) it('can handle empty guide', () => { - const results = parser({ content: '' }) + const results = parser({ content: '' }) - expect(results).toMatchObject([]) -}) \ No newline at end of file + expect(results).toMatchObject([]) +}) diff --git a/sites/flixed.io/flixed.io.channels.xml b/sites/flixed.io/flixed.io.channels.xml index c64c7f1a..6f68e202 100644 --- a/sites/flixed.io/flixed.io.channels.xml +++ b/sites/flixed.io/flixed.io.channels.xml @@ -1,498 +1,496 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ABC News Live - ACC Network (East) - AccuWeather - A&E (East) - A&E (West) - Al Jazeera America - Altitude Sports and Entertainment Network - AMC (East) - AMC (West) - American Heroes Channel - Animal Planet - Antenna TV - ASPiRE HD - AT&T SportsNet Pittsburgh - AT&T SportsNet Rocky Mountain - AT&T SportsNet Southwest - AXS TV - Bally Sports Arizona - Bally Sports Detroit - Bally Sports Florida - Bally Sports Great Lakes - Bally Sports Indiana - Bally Sports Kansas City - Bally Sports Midwest - Illinois - Bally Sports New Orleans (North) - Bally Sports North - Bally Sports Ohio 1 (Cleveland feed) - Bally Sports Ohio 2 (Cincinnati feed) - Bally Sports Oklahoma - Bally Sports San Diego - Bally Sports SoCal - Bally Sports South - Main Feed - Bally Sports Southeast - Bally Sports Southwest (Main Feed) - Bally Sports Sun - Bally Sports West - Bally Sports Wisconsin - BBC America - BBC World News - beIN SPORTS 3 - beIN SPORTS 4 - beIN SPORTS 5 - beIN SPORTS 6 - beIN SPORTS 7 - beIN SPORTS 8 - beIN Sports HD - BET (East) - BET Her - BET Jams - BET Soul - BET (West) - Big Ten Network - Big Ten Network Overflow - Bloomberg Business Television - Boomerang - Bravo (East) - Bravo (West) - BYU-TV - Cartoon Network (East) - Cartoon Network (West) - CBS (East) - CBS News Streaming - CBS Sports Network - CBS (West) - Cheddar News - Cheddar U - Cinemax (East) - Cinemax (West) - Sony Cine - Cleo TV - CMT (East) - CMT (West) - CNBC - CNBC World - CNN - CNN International HD - Comedy Central (East) - Comedy Central (West) - Comet - Cooking Channel - COZI TV HD - Crime & Investigation Network HD - CSPAN - CSPAN2 - CW (Central) - CW (East) - Destination America - Discovery Channel (East) - Discovery Channel (West) - Discovery Family Channel - Discovery Life Channel - Disney Channel (East) - Disney Channel (West) - Disney Junior - Disney XD (East) - Disney XD (West) - Do-It-Yourself Network HD - E! Entertainment (East) - ESPN - ESPN2 - ESPN3 South - ESPNEWS - ESPNU - E! Entertainment (West) - The Fight Network HD - Food Network (East) - Food Network (West) - Fox Business - FOX (East) - Fox News Channel - Fox Soccer Plus HD - Fox Sports 1 - Fox Sports 2 - FOX (West) - Freeform (East) - Freeform (West) - Fubo Sports Network - Fuse - Fusion HD - FX - FXM - FXX - FYI - Game Show Network - getTV - GINX eSports TV US - Golf Channel - GOLTV (English) HD - Hallmark Channel (East) - Hallmark Channel (West) - Hallmark Drama - Hallmark Movies & Mysteries HD - HBO2 (East) - HBO2 (West) - HBO Comedy HD - HBO (East) - HBO Family (East) - HBO Family (West) - HBO Signature (East) - HBO Signature (West) - HBO (West) - HBO Zone HD - Home & Garden Television (East) - Home & Garden Television (West) - History (East) - History (West) - HLN - IFC - INSP - Investigation Discovery - ION Television (Central) - ION Television (East) - ION Television (West) - Law & Crime Stream - Lifetime (East) - LMN - Lifetime (West) - Logo HD - Longhorn Network HD - Marquee Sports Network HD - MASN - Mid Atlantic Sports Network - MavTV HD - MGM+ Drive-in HD - MGM+ HD (East) - MGM+ Hits HD - MGM+ Marquee - MGM+ HD (West) - MLB Network - MLB Network Strike Zone - MoreMAX (East) - MoreMAX (West) - MOTORTREND HD - MSG National - MSG Plus Zone 1 - MSG Plus HD Zone 2 - MTV2: Music Television (East) - MTV2: Music Television (West) - MTV Classic - MTV - Music Television (East) - MTVLIVE - MTV - Music Television (West) - National Geographic USA - National Geographic Wild - NBA TV - NBC (Central) - NBC (East) - LX - NBC Sports Bay Area - NBC Sports Bay Area Plus - NBC Sports Boston - NBC Sports California - NBC Sports Chicago HD - NBC Sports Northwest - NBC Sports Philadelphia - NBC Sports Washington - NBC Sports Washington Plus HD - NBC (West) - Newsmax TV HD - NewsNation SD - Newsy - NFL Network HD - NFL RedZone - NHL Network - Nickelodeon (East) - Nickelodeon (West) - Nick Jr - Nick Music - Nicktoons - Olympic Channel - One America News Network - Outdoor Channel - Outside Television HD - Ovation - Oprah Winfrey Network (East) - Oprah Winfrey Network (West) - Oxygen (East) - Oxygen (West) - Pac-12 Arizona HD - Pac-12 Bay Area HD - Pac-12 Los Angeles HD - Pac-12 Mountain HD - Pac-12 Network - Pac-12 Oregon HD - Pac-12 Washington HD - Paramount Network (East) - Paramount Network (West) - PBS (East) - PBS (West) - PeopleTV - POP - QVC - QVC2 - Revolt HD - ROOT Sports Northwest - Science - SEC Network HD - Showtime 2 (East) - Showtime 2 (West) - Showtime (East) - Showtime Extreme (East) - Showtime Extreme (West) - Showtime Familyzone HD - Showtime Next HD - Showtime Showcase (East) - Showtime Showcase (West) - Showtime (West) - Showtime Women HD - SHO x BET - Smithsonian HD Network - Sony Movie Channel HD - Spectrum SportsNet - Spectrum SportsNet LA - The Sportsman Channel HD - Sportsnet East - Sportsnet NY - Sportsnet Ontario - Sportsnet (Pacific) - Sportsnet MST - Stadium HD - Stadium College Sports Atlantic - Stadium College Sports Central - Stadium College Sports Pacific - Starz Cinema HD - Starz Comedy HD - Starz (East) - Starz Edge - Starz Encore Classic - Starz Encore (East) - Starz Encore (West) - Starz in Black - Starz Kids - Starz (West) - SundanceTV (East) - SundanceTV (West) - SYFY (East) - SYFY (West) - Tastemade [Str] - TBS (East) - TBS (West) - Turner Classic Movies - Teen Nick HD - Tennis Channel - The Movie Channel (East) - The Movie Channel (West) - The Movie Channel Extra (East) - The Movie Channel Extra (West) - The Weather Channel - TLC (East) - TLC (West) - TNT (East) - TNT (West) - The Travel Channel (East) - The Travel Channel (West) - Trinity Broadcasting Network - truTV (East) - truTV (West) - TSN1 - TSN2 - TSN3 - TSN4 - TSN5 - TV Land (East) - TV Land (West) - TyC Sports International English - Universal Kids HD - UPtv HD - USA Network (East) - USA Network (West) - VH1 (East) - VH1 (West) - Vice - Vegas Sports & Information Network (VSIN) - WE tv (East) - WE tv (West) - Yes Network - Baby TV - beIN Sports En Español - CNN en Español - Discovery en Español - Discovery Familia HD - El Gourmet - ESPN Deportes - Estrella TV - Fox Deportes HD - Galavision Cable Network (East) - Galavision Cable Network (West) - GOLTV International HD - HBO Latino - History Channel En Español - MTV España - Nat Geo Mundo - UNIVERSO HD - Telefe Internacional - Telemundo (East) - Telemundo (West) - TUDN - TyC Sports International - UniMas (East) - UniMas (West) - Univision Network (East) - Univision Network (West) - Video Rola HD - WAPA America - BeIN SPORTS 2 HD - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ABC News Live + ACC Network (East) + AccuWeather + A&E (East) + A&E (West) + Al Jazeera America + Altitude Sports and Entertainment Network + AMC (East) + AMC (West) + American Heroes Channel + Animal Planet + Antenna TV + ASPiRE HD + AT&T SportsNet Pittsburgh + AT&T SportsNet Rocky Mountain + AT&T SportsNet Southwest + AXS TV + Bally Sports Arizona + Bally Sports Detroit + Bally Sports Florida + Bally Sports Great Lakes + Bally Sports Indiana + Bally Sports Kansas City + Bally Sports Midwest - Illinois + Bally Sports New Orleans (North) + Bally Sports North + Bally Sports Ohio 1 (Cleveland feed) + Bally Sports Ohio 2 (Cincinnati feed) + Bally Sports Oklahoma + Bally Sports San Diego + Bally Sports SoCal + Bally Sports South - Main Feed + Bally Sports Southeast + Bally Sports Southwest (Main Feed) + Bally Sports Sun + Bally Sports West + Bally Sports Wisconsin + BBC America + BBC World News + beIN SPORTS 3 + beIN SPORTS 4 + beIN SPORTS 5 + beIN SPORTS 6 + beIN SPORTS 7 + beIN SPORTS 8 + beIN Sports HD + BET (East) + BET Her + BET Jams + BET Soul + BET (West) + Big Ten Network + Big Ten Network Overflow + Bloomberg Business Television + Boomerang + Bravo (East) + Bravo (West) + BYU-TV + Cartoon Network (East) + Cartoon Network (West) + CBS (East) + CBS News Streaming + CBS Sports Network + CBS (West) + Cheddar News + Cheddar U + Cinemax (East) + Cinemax (West) + Sony Cine + Cleo TV + CMT (East) + CMT (West) + CNBC + CNBC World + CNN + CNN International HD + Comedy Central (East) + Comedy Central (West) + Comet + Cooking Channel + COZI TV HD + Crime & Investigation Network HD + CSPAN + CSPAN2 + CW (Central) + CW (East) + Destination America + Discovery Channel (East) + Discovery Channel (West) + Discovery Family Channel + Discovery Life Channel + Disney Channel (East) + Disney Channel (West) + Disney Junior + Disney XD (East) + Disney XD (West) + Do-It-Yourself Network HD + E! Entertainment (East) + ESPN + ESPN2 + ESPN3 South + ESPNEWS + ESPNU + E! Entertainment (West) + The Fight Network HD + Food Network (East) + Food Network (West) + Fox Business + FOX (East) + Fox News Channel + Fox Soccer Plus HD + Fox Sports 1 + Fox Sports 2 + FOX (West) + Freeform (East) + Freeform (West) + Fubo Sports Network + Fuse + Fusion HD + FX + FXM + FXX + FYI + Game Show Network + getTV + GINX eSports TV US + Golf Channel + GOLTV (English) HD + Hallmark Channel (East) + Hallmark Channel (West) + Hallmark Drama + Hallmark Movies & Mysteries HD + HBO2 (East) + HBO2 (West) + HBO Comedy HD + HBO (East) + HBO Family (East) + HBO Family (West) + HBO Signature (East) + HBO Signature (West) + HBO (West) + HBO Zone HD + Home & Garden Television (East) + Home & Garden Television (West) + History (East) + History (West) + HLN + IFC + INSP + Investigation Discovery + ION Television (Central) + ION Television (East) + ION Television (West) + Law & Crime Stream + Lifetime (East) + LMN + Lifetime (West) + Logo HD + Longhorn Network HD + Marquee Sports Network HD + MASN - Mid Atlantic Sports Network + MavTV HD + MGM+ Drive-in HD + MGM+ HD (East) + MGM+ Hits HD + MGM+ Marquee + MGM+ HD (West) + MLB Network + MLB Network Strike Zone + MoreMAX (East) + MoreMAX (West) + MOTORTREND HD + MSG National + MSG Plus Zone 1 + MSG Plus HD Zone 2 + MTV2: Music Television (East) + MTV2: Music Television (West) + MTV Classic + MTV - Music Television (East) + MTVLIVE + MTV - Music Television (West) + National Geographic USA + National Geographic Wild + NBA TV + NBC (Central) + NBC (East) + LX + NBC Sports Bay Area + NBC Sports Bay Area Plus + NBC Sports Boston + NBC Sports California + NBC Sports Chicago HD + NBC Sports Northwest + NBC Sports Philadelphia + NBC Sports Washington + NBC Sports Washington Plus HD + NBC (West) + Newsmax TV HD + NewsNation SD + Newsy + NFL Network HD + NFL RedZone + NHL Network + Nickelodeon (East) + Nickelodeon (West) + Nick Jr + Nick Music + Nicktoons + Olympic Channel + One America News Network + Outdoor Channel + Outside Television HD + Ovation + Oprah Winfrey Network (East) + Oprah Winfrey Network (West) + Oxygen (East) + Oxygen (West) + Pac-12 Arizona HD + Pac-12 Bay Area HD + Pac-12 Los Angeles HD + Pac-12 Mountain HD + Pac-12 Network + Pac-12 Oregon HD + Pac-12 Washington HD + Paramount Network (East) + Paramount Network (West) + PBS (East) + PBS (West) + PeopleTV + POP + QVC + QVC2 + Revolt HD + ROOT Sports Northwest + Science + SEC Network HD + Showtime 2 (East) + Showtime 2 (West) + Showtime (East) + Showtime Extreme (East) + Showtime Extreme (West) + Showtime Familyzone HD + Showtime Next HD + Showtime Showcase (East) + Showtime Showcase (West) + Showtime (West) + Showtime Women HD + SHO x BET + Smithsonian HD Network + Sony Movie Channel HD + Spectrum SportsNet + Spectrum SportsNet LA + The Sportsman Channel HD + Sportsnet East + Sportsnet NY + Sportsnet Ontario + Sportsnet (Pacific) + Sportsnet MST + Stadium HD + Stadium College Sports Atlantic + Stadium College Sports Central + Stadium College Sports Pacific + Starz Cinema HD + Starz Comedy HD + Starz (East) + Starz Edge + Starz Encore Classic + Starz Encore (East) + Starz Encore (West) + Starz in Black + Starz Kids + Starz (West) + SundanceTV (East) + SundanceTV (West) + SYFY (East) + SYFY (West) + Tastemade [Str] + TBS (East) + TBS (West) + Turner Classic Movies + Teen Nick HD + Tennis Channel + The Movie Channel (East) + The Movie Channel (West) + The Movie Channel Extra (East) + The Movie Channel Extra (West) + The Weather Channel + TLC (East) + TLC (West) + TNT (East) + TNT (West) + The Travel Channel (East) + The Travel Channel (West) + Trinity Broadcasting Network + truTV (East) + truTV (West) + TSN1 + TSN2 + TSN3 + TSN4 + TSN5 + TV Land (East) + TV Land (West) + TyC Sports International English + Universal Kids HD + UPtv HD + USA Network (East) + USA Network (West) + VH1 (East) + VH1 (West) + Vice + Vegas Sports & Information Network (VSIN) + WE tv (East) + WE tv (West) + Yes Network + Baby TV + beIN Sports En Español + CNN en Español + Discovery en Español + Discovery Familia HD + El Gourmet + ESPN Deportes + Estrella TV + Fox Deportes HD + Galavision Cable Network (East) + Galavision Cable Network (West) + GOLTV International HD + HBO Latino + History Channel En Español + MTV España + Nat Geo Mundo + UNIVERSO HD + Telefe Internacional + Telemundo (East) + Telemundo (West) + TUDN + TyC Sports International + UniMas (East) + UniMas (West) + Univision Network (East) + Univision Network (West) + Video Rola HD + WAPA America + BeIN SPORTS 2 HD + diff --git a/sites/flixed.io/flixed.io.config.js b/sites/flixed.io/flixed.io.config.js index 6ae463f2..5dfb5e0a 100644 --- a/sites/flixed.io/flixed.io.config.js +++ b/sites/flixed.io/flixed.io.config.js @@ -40,6 +40,6 @@ function parseStop(item) { return dayjs(item.endTime) } -function parseItems(content, channel) { +function parseItems(content) { return JSON.parse(content) } diff --git a/sites/flixed.io/flixed.io.test.js b/sites/flixed.io/flixed.io.test.js index 9f501c0a..e22d4b15 100644 --- a/sites/flixed.io/flixed.io.test.js +++ b/sites/flixed.io/flixed.io.test.js @@ -1,4 +1,4 @@ -// npx epg-grabber --config=sites/flixed.io/flixed.io.config.js --channels=sites/flixed.io/flixed.io.channels.xml --output=guide.xml --days=1 +// npm run grab -- --site=flixed.io const { parser, url } = require('./flixed.io.config.js') const fs = require('fs') @@ -17,7 +17,7 @@ const channel = { it('can generate valid url', () => { expect(url({ date, channel })).toBe( - `https://tv-guide.vercel.app/api/stationAirings?stationId=108970&startDateTime=2023-01-19T00:00:00.000Z` + 'https://tv-guide.vercel.app/api/stationAirings?stationId=108970&startDateTime=2023-01-19T00:00:00.000Z' ) }) @@ -42,7 +42,7 @@ it('can parse response', () => { it('can handle empty guide', () => { const results = parser({ - content: `[]` + content: '[]' }) expect(results).toMatchObject([]) diff --git a/sites/foxsports.com.au/foxsports.com.au.channels.xml b/sites/foxsports.com.au/foxsports.com.au.channels.xml index d7bc38b2..6de80a18 100644 --- a/sites/foxsports.com.au/foxsports.com.au.channels.xml +++ b/sites/foxsports.com.au/foxsports.com.au.channels.xml @@ -1,21 +1,19 @@ - - - FOX Cricket - FOX Footy - FOX League - FOX Sports 503 - FOX Sports 505 - FOX Sports 506 - FOX Sports More - FOX Sports News - - - - - - - - - - \ No newline at end of file + + + + + + + + + + FOX Cricket + FOX Footy + FOX League + FOX Sports 503 + FOX Sports 505 + FOX Sports 506 + FOX Sports More + FOX Sports News + \ No newline at end of file diff --git a/sites/foxsports.com.au/foxsports.com.au.test.js b/sites/foxsports.com.au/foxsports.com.au.test.js index 77dfff52..52090f73 100644 --- a/sites/foxsports.com.au/foxsports.com.au.test.js +++ b/sites/foxsports.com.au/foxsports.com.au.test.js @@ -1,4 +1,4 @@ -// npx epg-grabber --config=sites/foxsports.com.au/foxsports.com.au.config.js --channels=sites/foxsports.com.au/foxsports.com.au.channels.xml --output=guide.xml --days=2 +// npm run grab -- --site=foxsports.com.au const { parser, url } = require('./foxsports.com.au.config.js') const dayjs = require('dayjs') @@ -17,7 +17,8 @@ it('can generate valid url', () => { }) it('can parse response', () => { - const content = `{"channel-programme":[{"id":"31cc8b4c-3711-49f0-bf22-2ec3993b0a07","programmeTitle":"NRL","title":"Eels v Titans","startTime":"2022-12-14T00:00:00+11:00","endTime":"2022-12-14T01:00:00+11:00","duration":60,"live":false,"genreId":"5c389cf4-8db7-4b52-9773-52355bd28559","channelId":2,"channelName":"FOX League","channelAbbreviation":"LEAGUE","programmeUID":235220,"round":"R1","statsMatchId":null,"closedCaptioned":true,"statsFixtureId":10207,"genreTitle":"Rugby League","parentGenreId":"a953f929-2d12-41a4-b0e9-97f401afff11","parentGenreTitle":"Sport","pmgId":"PMG01306944","statsSport":"league","type":"GAME","hiDef":true,"widescreen":true,"classification":"","synopsis":"The Eels and Titans have plenty of motivation this season after heartbreaking Finals losses in 2021. Parramatta has won their past five against Gold Coast.","preGameStartTime":null,"closeCaptioned":true}]}` + const content = + '{"channel-programme":[{"id":"31cc8b4c-3711-49f0-bf22-2ec3993b0a07","programmeTitle":"NRL","title":"Eels v Titans","startTime":"2022-12-14T00:00:00+11:00","endTime":"2022-12-14T01:00:00+11:00","duration":60,"live":false,"genreId":"5c389cf4-8db7-4b52-9773-52355bd28559","channelId":2,"channelName":"FOX League","channelAbbreviation":"LEAGUE","programmeUID":235220,"round":"R1","statsMatchId":null,"closedCaptioned":true,"statsFixtureId":10207,"genreTitle":"Rugby League","parentGenreId":"a953f929-2d12-41a4-b0e9-97f401afff11","parentGenreTitle":"Sport","pmgId":"PMG01306944","statsSport":"league","type":"GAME","hiDef":true,"widescreen":true,"classification":"","synopsis":"The Eels and Titans have plenty of motivation this season after heartbreaking Finals losses in 2021. Parramatta has won their past five against Gold Coast.","preGameStartTime":null,"closeCaptioned":true}]}' const result = parser({ content, channel }).map(p => { p.start = p.start.toJSON() @@ -29,7 +30,8 @@ it('can parse response', () => { { title: 'NRL', sub_title: 'Eels v Titans', - description: `The Eels and Titans have plenty of motivation this season after heartbreaking Finals losses in 2021. Parramatta has won their past five against Gold Coast.`, + description: + 'The Eels and Titans have plenty of motivation this season after heartbreaking Finals losses in 2021. Parramatta has won their past five against Gold Coast.', category: 'Rugby League', start: '2022-12-13T13:00:00.000Z', stop: '2022-12-13T14:00:00.000Z' @@ -40,7 +42,7 @@ it('can parse response', () => { it('can handle empty guide', () => { const result = parser( { - content: `{"channel-programme":[]}` + content: '{"channel-programme":[]}' }, channel ) diff --git a/sites/foxtel.com.au/foxtel.com.au.channels.xml b/sites/foxtel.com.au/foxtel.com.au.channels.xml index 8ee54930..a4f919e2 100644 --- a/sites/foxtel.com.au/foxtel.com.au.channels.xml +++ b/sites/foxtel.com.au/foxtel.com.au.channels.xml @@ -1,197 +1,195 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/sites/foxtel.com.au/foxtel.com.au.config.js b/sites/foxtel.com.au/foxtel.com.au.config.js index a93699b1..e8674256 100644 --- a/sites/foxtel.com.au/foxtel.com.au.config.js +++ b/sites/foxtel.com.au/foxtel.com.au.config.js @@ -3,7 +3,6 @@ const dayjs = require('dayjs') const cheerio = require('cheerio') module.exports = { - skip: true, // returns "Access Denied" or nothing site: 'foxtel.com.au', days: 2, url({ channel, date }) { @@ -17,13 +16,13 @@ module.exports = { Cookie: 'AAMC_foxtel_0=REGION|6' } }, - parser: function ({ content }) { + parser: function ({ content, date }) { let programs = [] const items = parseItems(content) for (let item of items) { const $item = cheerio.load(item) const prev = programs[programs.length - 1] - const start = parseStart($item) + let start = parseStart($item) if (prev) { if (start.isBefore(prev.start)) { start = start.add(1, 'd') @@ -48,7 +47,7 @@ module.exports = { }, async channels() { const data = await axios - .get(`https://www.foxtel.com.au/webepg/ws/foxtel/channels?regionId=8336`, { + .get('https://www.foxtel.com.au/webepg/ws/foxtel/channels?regionId=8336', { headers: { 'Accept-Language': 'en-US,en;', Cookie: 'AAMC_foxtel_0=REGION|6' @@ -58,11 +57,11 @@ module.exports = { .catch(console.log) return data.channels.forEach(item => { - let name = item.name.replace(/\+/g, '-').replace(/\&/g, '') + let name = item.name.replace(/\+/g, '-').replace(/&/g, '') const slug = name.replace(/[^a-z0-9\s]/gi, '').replace(/[^a-z0-9]/i, '-') return { - name: item.name.replace(/\&/g, '&'), + name: item.name.replace(/&/g, '&'), site_id: `${slug}/${item.channelTag}` } }) @@ -72,7 +71,7 @@ module.exports = { function parseSeason($item) { let seasonString = $item('.epg-event-description > div > abbr:nth-child(1)').attr('title') if (!seasonString) return null - let [_, season] = seasonString.match(/^Season: (\d+)/) || [null, null] + let [, season] = seasonString.match(/^Season: (\d+)/) || [null, null] return season ? parseInt(season) : null } @@ -80,7 +79,7 @@ function parseSeason($item) { function parseEpisode($item) { let episodeString = $item('.epg-event-description > div > abbr:nth-child(2)').attr('title') if (!episodeString) return null - let [_, episode] = episodeString.match(/^Episode: (\d+)/) || [null, null] + let [, episode] = episodeString.match(/^Episode: (\d+)/) || [null, null] return episode ? parseInt(episode) : null } @@ -104,14 +103,14 @@ function parseSubTitle($item) { .split(',') subtitle = subtitle.pop() - const [_, rating] = subtitle.match(/\(([^)]+)\)$/) || [null, null] + const [, rating] = subtitle.match(/\(([^)]+)\)$/) || [null, null] return subtitle.replace(`(${rating})`, '').trim() } function parseRating($item) { const subtitle = $item('.epg-event-description > div').text().trim() - const [_, rating] = subtitle.match(/\(([^)]+)\)$/) || [null, null] + const [, rating] = subtitle.match(/\(([^)]+)\)$/) || [null, null] return rating ? { @@ -131,5 +130,5 @@ function parseItems(content) { if (!content) return [] const $ = cheerio.load(content) - return $(`#epg-channel-events > a`).toArray() + return $('#epg-channel-events > a').toArray() } diff --git a/sites/foxtel.com.au/foxtel.com.au.test.js b/sites/foxtel.com.au/foxtel.com.au.test.js index a30f301a..a3779b7f 100644 --- a/sites/foxtel.com.au/foxtel.com.au.test.js +++ b/sites/foxtel.com.au/foxtel.com.au.test.js @@ -1,5 +1,5 @@ // npm run channels:parse -- --config=./sites/foxtel.com.au/foxtel.com.au.config.js --output=./sites/foxtel.com.au/foxtel.com.au.channels.xml -// npx epg-grabber --config=sites/foxtel.com.au/foxtel.com.au.config.js --channels=sites/foxtel.com.au/foxtel.com.au.channels.xml --output=guide.xml --days=2 +// npm run grab -- --site=foxtel.com.au const { parser, url, request } = require('./foxtel.com.au.config.js') const fs = require('fs') diff --git a/sites/frikanalen.no/frikanalen.no.channels.xml b/sites/frikanalen.no/frikanalen.no.channels.xml index 4cd7379b..ae3ce2fa 100644 --- a/sites/frikanalen.no/frikanalen.no.channels.xml +++ b/sites/frikanalen.no/frikanalen.no.channels.xml @@ -1,6 +1,4 @@ - - - Frikanalen - - \ No newline at end of file + + Frikanalen + \ No newline at end of file diff --git a/sites/frikanalen.no/frikanalen.no.test.js b/sites/frikanalen.no/frikanalen.no.test.js index 33606a0a..8c9fb2da 100644 --- a/sites/frikanalen.no/frikanalen.no.test.js +++ b/sites/frikanalen.no/frikanalen.no.test.js @@ -1,4 +1,4 @@ -// npx epg-grabber --config=sites/frikanalen.no/frikanalen.no.config.js --channels=sites/frikanalen.no/frikanalen.no.channels.xml --output=guide.xml --days=2 +// npm run grab -- --site=frikanalen.no const { parser, url } = require('./frikanalen.no.config.js') const dayjs = require('dayjs') @@ -20,7 +20,8 @@ it('can generate valid url', () => { }) it('can parse response', () => { - const content = `{"count":83,"next":null,"previous":null,"results":[{"id":135605,"video":{"id":626094,"name":"FSCONS 2017 - Keynote: TBA - Linda Sandvik","header":"Linda Sandvik's keynote at FSCONS 2017\\r\\n\\r\\nRecorded by NUUG for FSCONS.","description":null,"creator":"davidwnoble@gmail.com","organization":{"id":82,"name":"NUUG","homepage":"https://www.nuug.no/","description":"Forening NUUG er for alle som er interessert i fri programvare, åpne standarder og Unix-lignende operativsystemer.","postalAddress":"","streetAddress":"","editorId":2148,"editorName":"David Noble","editorEmail":"davidwnoble@gmail.com","editorMsisdn":"","fkmember":true},"duration":"00:57:55.640000","categories":["Samfunn"]},"schedulereason":5,"starttime":"2022-01-19T00:47:00+01:00","endtime":"2022-01-19T01:44:55.640000+01:00","duration":"00:57:55.640000"}]}` + const content = + '{"count":83,"next":null,"previous":null,"results":[{"id":135605,"video":{"id":626094,"name":"FSCONS 2017 - Keynote: TBA - Linda Sandvik","header":"Linda Sandvik\'s keynote at FSCONS 2017\\r\\n\\r\\nRecorded by NUUG for FSCONS.","description":null,"creator":"davidwnoble@gmail.com","organization":{"id":82,"name":"NUUG","homepage":"https://www.nuug.no/","description":"Forening NUUG er for alle som er interessert i fri programvare, åpne standarder og Unix-lignende operativsystemer.","postalAddress":"","streetAddress":"","editorId":2148,"editorName":"David Noble","editorEmail":"davidwnoble@gmail.com","editorMsisdn":"","fkmember":true},"duration":"00:57:55.640000","categories":["Samfunn"]},"schedulereason":5,"starttime":"2022-01-19T00:47:00+01:00","endtime":"2022-01-19T01:44:55.640000+01:00","duration":"00:57:55.640000"}]}' const result = parser({ content }).map(p => { p.start = p.start.toJSON() p.stop = p.stop.toJSON() @@ -31,9 +32,9 @@ it('can parse response', () => { { start: '2022-01-18T23:47:00.000Z', stop: '2022-01-19T00:44:55.640Z', - title: `FSCONS 2017 - Keynote: TBA - Linda Sandvik`, + title: 'FSCONS 2017 - Keynote: TBA - Linda Sandvik', category: ['Samfunn'], - description: `Linda Sandvik's keynote at FSCONS 2017\r\n\r\nRecorded by NUUG for FSCONS.` + description: "Linda Sandvik's keynote at FSCONS 2017\r\n\r\nRecorded by NUUG for FSCONS." } ]) }) @@ -42,7 +43,7 @@ it('can handle empty guide', () => { const result = parser({ date, channel, - content: `{"count":0,"next":null,"previous":null,"results":[]}` + content: '{"count":0,"next":null,"previous":null,"results":[]}' }) expect(result).toMatchObject([]) }) diff --git a/sites/gatotv.com/gatotv.com.channels.xml b/sites/gatotv.com/gatotv.com.channels.xml index 80a9fdae..6e9e1106 100644 --- a/sites/gatotv.com/gatotv.com.channels.xml +++ b/sites/gatotv.com/gatotv.com.channels.xml @@ -1,492 +1,490 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - M+ #0 - 24 Horas Chile - M+ Acción - ADN 40 - Adrenalina Sports Network - A&E Chile - A&E México - A&E PAN - Afizzionados - Agrotendencia TV - AMC Crime - AMC España - América Televisión Perú - America TV Argentina - Antena 3 de España - Antena 3 Internacional - 7 de República Dominicana - a+ - Aprende - Atreseries España - Atreseries Internacional - ATV - AXN Andes - AXN México - AXN Sur - AYM Sports - Azteca 7 - Azteca Guate - Azteca Uno - BabyFirst TV - Bandamax - Barça TV - beIN Sports en Español - Be Mad - BET Jams - BitMe - Boing España - 9 Noticias Paraguay - Cablenoticias - Calle 13 - 1 Colombia - 11 de Costa Rica - 12 de El Salvador - 13 de Chile - 2 de Nicaragua - 2 de El Salvador - 24 Horas - 27 de Guatemala - 3 de Guatemala - 4 de Costa Rica - 4 de El Salvador - 5 de Honduras - 6 de Costa Rica - 6 de El Salvador - Multimedios Costa Rica - Canal Antigua - Cocina - Canal Congreso Colombia - Institucional Colombia - Sur - Sur Andalucía - Tro - Caracol Internacional - Caracol Colombia - Cartoonito México - Cartoon Network México - Cartoon Network Atlántico Norte - Cartoon Network Pacífico - Cartoon Network Atlántico Sur - 37 de República Dominicana - CDN Deportes - Chilevisión (CHV) - Cinecanal México - Cinecanal Pacífico - Cinecanal Sur - CineClick - Cine Estelar - Cinelatino - Cinema Platino - Cinema + - Cinemax Chile - Cinemax México - Cinemax Panregional - Cine Mexicano - Cine Nostalgia - Cine Sony - Clan TVE - Claro Música - Classica - Castilla-La Mancha Media - CNN Chile - CNN en Español - CNN Internacional - 9 de República Dominicana - M+ Comedia - Comedy Central España - Concert Channel - Cosmopolitan España - Cuatro de España - Decasa - De Película Clásico - DHE - 15 de República Dominicana - Discovery Channel Chile - Discovery Channel México - Discovery Channel España - Discovery en Español - Discovery Familia - Discovery H&H MX - Discovery Kids Chile - Discovery Kids MX - Discovery Science LATAM - Discovery Theater LATAM. - Disney Channel Centro - Disney Channel Sur - Disney Channel España - Disney Junior Norte - Disney Junior Sur - Disney Junior España - Distrito Comedia - Divinity - Ecuador TV - Ecuavisa Ecuador - Ecuavisa Internacional - Efekto TV - El Financiero - Bloomberg - 13 de Argentina - Energy - ESNE TV - ESPN 2 Colombia - ESPN 2 México - ESPN 2 Norte - ESPN 3 Norte - ESPN 3 Sur - ESPN 4 Chile - ESPN 4 Norte - ESPN Chile - ESPN Colombia - ESPN Deportes - ESPN México - ESPN Norte - Estrella TV - ETB 1 - ETB 2 - Eurochannel - Europa Europa - Eurosport 1 España - Eurosport 2 España - Exa TV - Excelsior TV - 42 de Costa Rica - Foro TV - Fox Deportes - Fox News - Fox España - FUTV - FX Chile - FX México - Gamavisión - Golden Panregional - Golden Plus - Golden Premier - Golden Premier 2 - Golf Channel Latinoamérica - GolTV Lat. - Guatevisión - HBO 2 LATAM - HBO Family LATAM - HBO Latinoamérica - HBO Latino Este - HBO Mundi - HBO Plus - HBO Pop - HBO Signature LATAM - HBO Xtreme - Historia España - History 2 México - History 2 Panregional - History Chile - History en Español - History MX - History Panregional - HITN - HLN - ¡Hola! TV - HTV - Iberalia TV - Ingenio TV México - Inti Network - ID México - ID Panregional - Justicia TV - La 1 - La 2 - M+ LaLiga - laOtra - La Red TV Guatemala - 2 de México - Las Estrellas LATAM - La Sexta - La Tele Paraguay - Frecuencia Latina - Lifetime México - Lifetime PAN - María Visión - MC - Mega Chile - Mega España - Meganoticias MX - 12 de El Salvador - Mexiquense TV - Milenio - MTV 00s - MTV 80S - MTV Sur - MTV España - Multimedios Plus - National Geographic México - National Geographic España - Universo - Neox - NFL Network - NHK World - Nickelodeon México - Nickelodeon España - Nick Jr. España - NickMusic - Nova - Noticias PY - NTN24 - Odisea - Pakapaka - Panamericana Televisión - Pánico - Paraguay TV - Paramount Channel ES - Paravisión - Pasiones Estados Unidos - Pasiones Latinoamérica - Perú Mágico - PX Sports - RCN Novelas - Real Madrid TV - 4 de Panamá - RTS - Semillitas - Señal Colombia - Sky One México - Sky Sports 1 México - Sky Sports 16 - Sky Sports 24 - SNT - Sony México - Sorpresa - Space México - Space Panregional - Space Sur - Star Channel México - Studio Universal México - Studio Universal Panregional - Sundance TV España - Sur TV Itapúa Paraguay - Syfy España - TCM Panregional - TCM España - TC Televisión - TeenNick - Teleamazonas - 2 de República Dominicana - Teleantioquia - 7 y 4 de Honduras - Telecafé - Telecaribe - 13 de República Dominicana - Telecentro TV - Telecinco - Teledeporte - Telefé (Argentina) - Telefe Internacional - Telefórmula - Telefuturo - Telehit - Telehit Música - Teleislas - TeleMadrid - Telemetro - Telemicro - Telemundo México - Telenostalgia - 11 de Guatemala - Telepacífico - 11 de República Dominicana - 7 de Costa Rica - Teleunion - 29 de República Dominicana - 4 de Guadalajara - 7 de Guatemala - Tigo Sports Costa Rica - Tigo Sports El Salvador - Tigo Sports Guatemala - TLC MX - TLC Panregional - TLNovelas LATAM - TLNovelas México - TNT México - TNT Pacífico - TNT Sur - TNT España - TNT Sports 2 Chile - TNT Sports 3 Chile - Tooncast - 13 de Colombia - 13 de Paraguay - 13 de Costa Rica - truTV Lat. - Telesistema Informativo (TSI) - TUDN USA - TUDN México - TV5Monde - TV Canaria - TVC Deportes - TV Chile - TVE Internacional - TV Globo Internacional - 9 de Panamá - TVN Chile - 2 de Panamá - Televisión Pública Argentina - TVUNAM - TyC Sports - Unicable MX - Unicanal - Universal Cinema - Universal Comedy - Universal Crime - Universal Premiere - Universal Reality - Universal TV México - Universal TV Panregional - Univision TLNovelas - M+ #Vamos - Ve Plus Estados Unidos - Vía X - Vibra TV - Video Rola - ViendoMovies - 13 de Nicaragua - VTV Honduras - WAPA-TV - WAPA 2 Deportes - Willax TV - Punto 2 - WOBI - 13 de Puerto Rico - 4 de Monterrey - 22 de México - 11 de México - Zona Latina - ZOOM Colombia - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + M+ #0 + 24 Horas Chile + M+ Acción + ADN 40 + Adrenalina Sports Network + A&E Chile + A&E México + A&E PAN + Afizzionados + Agrotendencia TV + AMC Crime + AMC España + América Televisión Perú + America TV Argentina + Antena 3 de España + Antena 3 Internacional + 7 de República Dominicana + a+ + Aprende + Atreseries España + Atreseries Internacional + ATV + AXN Andes + AXN México + AXN Sur + AYM Sports + Azteca 7 + Azteca Guate + Azteca Uno + BabyFirst TV + Bandamax + Barça TV + beIN Sports en Español + Be Mad + BET Jams + BitMe + Boing España + 9 Noticias Paraguay + Cablenoticias + Calle 13 + 1 Colombia + 11 de Costa Rica + 12 de El Salvador + 13 de Chile + 2 de Nicaragua + 2 de El Salvador + 24 Horas + 27 de Guatemala + 3 de Guatemala + 4 de Costa Rica + 4 de El Salvador + 5 de Honduras + 6 de Costa Rica + 6 de El Salvador + Multimedios Costa Rica + Canal Antigua + Cocina + Canal Congreso Colombia + Institucional Colombia + Sur + Sur Andalucía + Tro + Caracol Internacional + Caracol Colombia + Cartoonito México + Cartoon Network México + Cartoon Network Atlántico Norte + Cartoon Network Pacífico + Cartoon Network Atlántico Sur + 37 de República Dominicana + CDN Deportes + Chilevisión (CHV) + Cinecanal México + Cinecanal Pacífico + Cinecanal Sur + CineClick + Cine Estelar + Cinelatino + Cinema Platino + Cinema + + Cinemax Chile + Cinemax México + Cinemax Panregional + Cine Mexicano + Cine Nostalgia + Cine Sony + Clan TVE + Claro Música + Classica + Castilla-La Mancha Media + CNN Chile + CNN en Español + CNN Internacional + 9 de República Dominicana + M+ Comedia + Comedy Central España + Concert Channel + Cosmopolitan España + Cuatro de España + Decasa + De Película Clásico + DHE + 15 de República Dominicana + Discovery Channel Chile + Discovery Channel México + Discovery Channel España + Discovery en Español + Discovery Familia + Discovery H&H MX + Discovery Kids Chile + Discovery Kids MX + Discovery Science LATAM + Discovery Theater LATAM. + Disney Channel Centro + Disney Channel Sur + Disney Channel España + Disney Junior Norte + Disney Junior Sur + Disney Junior España + Distrito Comedia + Divinity + Ecuador TV + Ecuavisa Ecuador + Ecuavisa Internacional + Efekto TV + El Financiero - Bloomberg + 13 de Argentina + Energy + ESNE TV + ESPN 2 Colombia + ESPN 2 México + ESPN 2 Norte + ESPN 3 Norte + ESPN 3 Sur + ESPN 4 Chile + ESPN 4 Norte + ESPN Chile + ESPN Colombia + ESPN Deportes + ESPN México + ESPN Norte + Estrella TV + ETB 1 + ETB 2 + Eurochannel + Europa Europa + Eurosport 1 España + Eurosport 2 España + Exa TV + Excelsior TV + 42 de Costa Rica + Foro TV + Fox Deportes + Fox News + Fox España + FUTV + FX Chile + FX México + Gamavisión + Golden Panregional + Golden Plus + Golden Premier + Golden Premier 2 + Golf Channel Latinoamérica + GolTV Lat. + Guatevisión + HBO 2 LATAM + HBO Family LATAM + HBO Latinoamérica + HBO Latino Este + HBO Mundi + HBO Plus + HBO Pop + HBO Signature LATAM + HBO Xtreme + Historia España + History 2 México + History 2 Panregional + History Chile + History en Español + History MX + History Panregional + HITN + HLN + ¡Hola! TV + HTV + Iberalia TV + Ingenio TV México + Inti Network + ID México + ID Panregional + Justicia TV + La 1 + La 2 + M+ LaLiga + laOtra + La Red TV Guatemala + 2 de México + Las Estrellas LATAM + La Sexta + La Tele Paraguay + Frecuencia Latina + Lifetime México + Lifetime PAN + María Visión + MC + Mega Chile + Mega España + Meganoticias MX + 12 de El Salvador + Mexiquense TV + Milenio + MTV 00s + MTV 80S + MTV Sur + MTV España + Multimedios Plus + National Geographic México + National Geographic España + Universo + Neox + NFL Network + NHK World + Nickelodeon México + Nickelodeon España + Nick Jr. España + NickMusic + Nova + Noticias PY + NTN24 + Odisea + Pakapaka + Panamericana Televisión + Pánico + Paraguay TV + Paramount Channel ES + Paravisión + Pasiones Estados Unidos + Pasiones Latinoamérica + Perú Mágico + PX Sports + RCN Novelas + Real Madrid TV + 4 de Panamá + RTS + Semillitas + Señal Colombia + Sky One México + Sky Sports 1 México + Sky Sports 16 + Sky Sports 24 + SNT + Sony México + Sorpresa + Space México + Space Panregional + Space Sur + Star Channel México + Studio Universal México + Studio Universal Panregional + Sundance TV España + Sur TV Itapúa Paraguay + Syfy España + TCM Panregional + TCM España + TC Televisión + TeenNick + Teleamazonas + 2 de República Dominicana + Teleantioquia + 7 y 4 de Honduras + Telecafé + Telecaribe + 13 de República Dominicana + Telecentro TV + Telecinco + Teledeporte + Telefé (Argentina) + Telefe Internacional + Telefórmula + Telefuturo + Telehit + Telehit Música + Teleislas + TeleMadrid + Telemetro + Telemicro + Telemundo México + Telenostalgia + 11 de Guatemala + Telepacífico + 11 de República Dominicana + 7 de Costa Rica + Teleunion + 29 de República Dominicana + 4 de Guadalajara + 7 de Guatemala + Tigo Sports Costa Rica + Tigo Sports El Salvador + Tigo Sports Guatemala + TLC MX + TLC Panregional + TLNovelas LATAM + TLNovelas México + TNT México + TNT Pacífico + TNT Sur + TNT España + TNT Sports 2 Chile + TNT Sports 3 Chile + Tooncast + 13 de Colombia + 13 de Paraguay + 13 de Costa Rica + truTV Lat. + Telesistema Informativo (TSI) + TUDN USA + TUDN México + TV5Monde + TV Canaria + TVC Deportes + TV Chile + TVE Internacional + TV Globo Internacional + 9 de Panamá + TVN Chile + 2 de Panamá + Televisión Pública Argentina + TVUNAM + TyC Sports + Unicable MX + Unicanal + Universal Cinema + Universal Comedy + Universal Crime + Universal Premiere + Universal Reality + Universal TV México + Universal TV Panregional + Univision TLNovelas + M+ #Vamos + Ve Plus Estados Unidos + Vía X + Vibra TV + Video Rola + ViendoMovies + 13 de Nicaragua + VTV Honduras + WAPA-TV + WAPA 2 Deportes + Willax TV + Punto 2 + WOBI + 13 de Puerto Rico + 4 de Monterrey + 22 de México + 11 de México + Zona Latina + ZOOM Colombia + diff --git a/sites/gatotv.com/gatotv.com.config.js b/sites/gatotv.com/gatotv.com.config.js index bff22d0f..fe4c327d 100644 --- a/sites/gatotv.com/gatotv.com.config.js +++ b/sites/gatotv.com/gatotv.com.config.js @@ -15,7 +15,6 @@ module.exports = { const items = parseItems(content) date = date.subtract(1, 'd') items.forEach((item, i) => { - const prev = programs[programs.length - 1] const $item = cheerio.load(item) let start = parseStart($item, date) if (i === 0 && start.hour >= 5) { @@ -41,7 +40,7 @@ module.exports = { }, async channels() { const data = await axios - .get(`https://www.gatotv.com/guia_tv/completa`) + .get('https://www.gatotv.com/guia_tv/completa') .then(response => response.data) .catch(console.log) diff --git a/sites/gatotv.com/gatotv.com.test.js b/sites/gatotv.com/gatotv.com.test.js index 814a7953..5f96e16e 100644 --- a/sites/gatotv.com/gatotv.com.test.js +++ b/sites/gatotv.com/gatotv.com.test.js @@ -1,7 +1,7 @@ // npm run channels:parse -- --config=./sites/gatotv.com/gatotv.com.config.js --output=./sites/gatotv.com/gatotv.com.channels.xml -// npx epg-grabber --config=sites/gatotv.com/gatotv.com.config.js --channels=sites/gatotv.com/gatotv.com.channels.xml --output=guide.xml +// npm run grab -- --site=gatotv.com -const { parser, url, request } = require('./gatotv.com.config.js') +const { parser, url } = require('./gatotv.com.config.js') const fs = require('fs') const path = require('path') const dayjs = require('dayjs') diff --git a/sites/getafteritmedia.com/getafteritmedia.com.channels.xml b/sites/getafteritmedia.com/getafteritmedia.com.channels.xml index 14c51aac..ef6aa3ad 100644 --- a/sites/getafteritmedia.com/getafteritmedia.com.channels.xml +++ b/sites/getafteritmedia.com/getafteritmedia.com.channels.xml @@ -1,10 +1,8 @@ - - - REV'N Eastern - REV'N Central - REV'N Mountain - REV'N Pacific - REV'N Web Feed - - + + REV'N Central + REV'N Eastern + REV'N Mountain + REV'N Pacific + REV'N Web Feed + diff --git a/sites/getafteritmedia.com/getafteritmedia.com.test.js b/sites/getafteritmedia.com/getafteritmedia.com.test.js index 7edb467e..5d95345f 100644 --- a/sites/getafteritmedia.com/getafteritmedia.com.test.js +++ b/sites/getafteritmedia.com/getafteritmedia.com.test.js @@ -1,4 +1,4 @@ -// npx epg-grabber --config=sites/getafteritmedia.com/getafteritmedia.com.config.js --channels=sites/getafteritmedia.com/getafteritmedia.com.channels.xml --output=guide.xml --days=2 +// npm run grab -- --site=getafteritmedia.com const { parser, url } = require('./getafteritmedia.com.config.js') const fs = require('fs') @@ -33,7 +33,7 @@ it('can parse response', () => { expect(results[0]).toMatchObject({ start: '2022-11-26T05:00:00.000Z', stop: '2022-11-26T05:30:00.000Z', - title: `The Appraisers` + title: 'The Appraisers' }) }) @@ -41,7 +41,7 @@ it('can handle empty guide', () => { const result = parser({ date, channel, - content: `` + content: '' }) expect(result).toMatchObject([]) }) diff --git a/sites/guidatv.sky.it/guidatv.sky.it.channels.xml b/sites/guidatv.sky.it/guidatv.sky.it.channels.xml index 1a8bdbe0..974ffd4c 100644 --- a/sites/guidatv.sky.it/guidatv.sky.it.channels.xml +++ b/sites/guidatv.sky.it/guidatv.sky.it.channels.xml @@ -1,168 +1,166 @@ - - - 20 Mediaset - 27 Twentyseven - ACI Sport Tv - Aljazeera English - Baby TV Europe - BBC World News - BFC Forbes - BIKE - Blaze HD - Bloomberg TV Europe - Boing Italia - Boomerang Italia - Boomerang Italia +1 - Caccia - Canale 5 - Cartoonito Italia - Cartoon Network India - Cartoon Network Italia +1 - Cielo - Cine 34 - Class CNBC - Classica HD - CNBC Europe - CNN International Europe - Comedy Central Italia - Comedy Central Italia +1 - Crime + Investigation Network Italia - DeA Junior - DeA Kids - DeA Kids +1 - Deejay TV - Discovery Channel Italia - Discovery Channel Italia +1 - DMAX Italia - Emilia-Romagna 24 - EQUtv - Euronews English - Eurosport 1 Italia - Eurosport 2 Italia - Explorer HD Channel - Fashion TV - Food Network Italia - Fox Business - Fox News Channel - France 24 English - France 24 Français - Frisbee - Gambero Rosso Channel - Giallo - HGTV Italia - History Italia - Horse TV - I24 News English - Inter TV - Iris - Italia 1 - Italia 2 - K2 - La 5 - La 7 - La 7 d - Lazio Style TV - Mediaset Extra - Milan TV - Motor Trend - MTV HD - MTV Music - National Geographic Italia - National Geographic Italia +1 - National Geographic Wild Italia - National Geographic Wild Italia +1 - Nickelodeon Italia - Nickelodeon Italia +1 - Nick Jr Italia - Nick Jr Italia +1 - Nove - Pesca - POP Economy - QVC Italia - Radio Freccia TV - Radio Italia Trend Tv HD - Radio Italia TV - Radio Monte Carlo TV - Radionorba TV - Rai 1 - Rai 2 - Rai 3 - Rai 4 - Rai 5 - Rai Gulp - Rai Movie - Rai News 24 - Rai Premium - Rai Sport - Rai Storia - Rai Yoyo - Real Time Italia - Rete 4 - RTL 102.5 RadioVisione - San Marino RTV - Sky Arte - Sky Atlantic - Sky Atlantic +1 - Sky Cinema 4K - Sky Cinema Action - Adventure Collection HD - Sky Cinema Comedy - Sky Cinema Drama - Sky Cinema Due - Sky Cinema Due +24 - Sky Cinema Family - Sky Cinema Romance - Sky Cinema Suspense - Sky Cinema Uno - Sky Cinema Uno +24 - Sky Documentaries HD - Sky Documentaries +1 HD - Sky Investigation HD - Sky Investigation +1 HD - Sky Meteo 24 - Sky Nature HD - Sky News International - Sky Serie HD - Sky Serie Anime HD - Sky Sport 10 - Sky Sport 11 - Sky Sport 24 - Sky Sport 2 - Sky Sport 3 - Sky Sport 4 - Sky Sport 4K - Sky Sport 5 - Sky Sport 6 - Sky Sport 7 - Sky Sport 8 - Sky Sport 9 - Sky Sport Action HD - Sky Sport Arena - Sky Sport F1 - Sky Sport Football - Sky Sport Moto GP - Sky Sport NBA - Sky Sport Serie A - Sky Sport Tennis HD - Sky Sport Uno - Sky TG24 HD - Sky Uno - Sky Uno +1 - Super! - Super Tennis - TgCom24 HD - TG Norba 24 - Top Crime - TRM h24 - TV 2000 - TV 8 - VH1 Italia - Virgin Radio TV - ZONA DAZN - ZONA DAZN 2 - ZONA DAZN 3 - ZONA DAZN 4 - ZONA DAZN 5 - - + + 20 Mediaset + 27 Twentyseven + ACI Sport Tv + Aljazeera English + Baby TV Europe + BBC World News + BFC Forbes + BIKE + Blaze HD + Bloomberg TV Europe + Boing Italia + Boomerang Italia + Boomerang Italia +1 + Caccia + Canale 5 + Cartoonito Italia + Cartoon Network India + Cartoon Network Italia +1 + Cielo + Cine 34 + Class CNBC + Classica HD + CNBC Europe + CNN International Europe + Comedy Central Italia + Comedy Central Italia +1 + Crime + Investigation Network Italia + DeA Junior + DeA Kids + DeA Kids +1 + Deejay TV + Discovery Channel Italia + Discovery Channel Italia +1 + DMAX Italia + Emilia-Romagna 24 + EQUtv + Euronews English + Eurosport 1 Italia + Eurosport 2 Italia + Explorer HD Channel + Fashion TV + Food Network Italia + Fox Business + Fox News Channel + France 24 English + France 24 Français + Frisbee + Gambero Rosso Channel + Giallo + HGTV Italia + History Italia + Horse TV + I24 News English + Inter TV + Iris + Italia 1 + Italia 2 + K2 + La 5 + La 7 + La 7 d + Lazio Style TV + Mediaset Extra + Milan TV + Motor Trend + MTV HD + MTV Music + National Geographic Italia + National Geographic Italia +1 + National Geographic Wild Italia + National Geographic Wild Italia +1 + Nickelodeon Italia + Nickelodeon Italia +1 + Nick Jr Italia + Nick Jr Italia +1 + Nove + Pesca + POP Economy + QVC Italia + Radio Freccia TV + Radio Italia Trend Tv HD + Radio Italia TV + Radio Monte Carlo TV + Radionorba TV + Rai 1 + Rai 2 + Rai 3 + Rai 4 + Rai 5 + Rai Gulp + Rai Movie + Rai News 24 + Rai Premium + Rai Sport + Rai Storia + Rai Yoyo + Real Time Italia + Rete 4 + RTL 102.5 RadioVisione + San Marino RTV + Sky Arte + Sky Atlantic + Sky Atlantic +1 + Sky Cinema 4K + Sky Cinema Action + Adventure Collection HD + Sky Cinema Comedy + Sky Cinema Drama + Sky Cinema Due + Sky Cinema Due +24 + Sky Cinema Family + Sky Cinema Romance + Sky Cinema Suspense + Sky Cinema Uno + Sky Cinema Uno +24 + Sky Documentaries HD + Sky Documentaries +1 HD + Sky Investigation HD + Sky Investigation +1 HD + Sky Meteo 24 + Sky Nature HD + Sky News International + Sky Serie HD + Sky Serie Anime HD + Sky Sport 10 + Sky Sport 11 + Sky Sport 24 + Sky Sport 2 + Sky Sport 3 + Sky Sport 4 + Sky Sport 4K + Sky Sport 5 + Sky Sport 6 + Sky Sport 7 + Sky Sport 8 + Sky Sport 9 + Sky Sport Action HD + Sky Sport Arena + Sky Sport F1 + Sky Sport Football + Sky Sport Moto GP + Sky Sport NBA + Sky Sport Serie A + Sky Sport Tennis HD + Sky Sport Uno + Sky TG24 HD + Sky Uno + Sky Uno +1 + Super! + Super Tennis + TgCom24 HD + TG Norba 24 + Top Crime + TRM h24 + TV 2000 + TV 8 + VH1 Italia + Virgin Radio TV + ZONA DAZN + ZONA DAZN 2 + ZONA DAZN 3 + ZONA DAZN 4 + ZONA DAZN 5 + diff --git a/sites/guidatv.sky.it/guidatv.sky.it.test.js b/sites/guidatv.sky.it/guidatv.sky.it.test.js index 86ca43e4..77e5ee23 100644 --- a/sites/guidatv.sky.it/guidatv.sky.it.test.js +++ b/sites/guidatv.sky.it/guidatv.sky.it.test.js @@ -1,4 +1,4 @@ -// npx epg-grabber --config=sites/guidatv.sky.it/guidatv.sky.it.config.js --channels=sites/guidatv.sky.it/guidatv.sky.it.channels.xml --output=guide.xml --days=2 +// npm run grab -- --site=guidatv.sky.it const { parser, url } = require('./guidatv.sky.it.config.js') const dayjs = require('dayjs') @@ -20,7 +20,8 @@ it('can generate valid url', () => { }) it('can parse response', () => { - const content = `{"events": [ { "channel": { "id": 10458, "logo": "/logo/545820mediasethd_Light_Fit.png", "logoPadding": "/logo/545820mediasethd_Light_Padding.png", "logoDark": "/logo/545820mediasethd_Dark_Fit.png", "logoDarkPadding": "/logo/545820mediasethd_Dark_Padding.png", "logoLight": "/logo/545820mediasethd_Light_Padding.png", "name": "20Mediaset HD", "number": 151, "category": { "id": 3, "name": "Intrattenimento" } }, "content": { "uuid": "77c630aa-4744-44cb-a88e-3e871c6b73d9", "contentTitle": "Distretto di Polizia", "episodeNumber": 26, "seasonNumber": 6, "url": "/serie-tv/distretto-di-polizia/stagione-6/episodio-26/77c630aa-4744-44cb-a88e-3e871c6b73d9", "genre": { "id": 1, "name": "Intrattenimento" }, "subgenre": { "id": 9, "name": "Fiction" }, "imagesMap": [ { "key": "background", "img": { "url": "/uuid/77c630aa-4744-44cb-a88e-3e871c6b73d9/background?md5ChecksumParam=88d3f48ce855316f4be25ab9bb846d32" } }, { "key": "cover", "img": { "url": "/uuid/77c630aa-4744-44cb-a88e-3e871c6b73d9/cover?md5ChecksumParam=61135b999a63e3d3f4a933b9edeb0c1b" } }, { "key": "scene", "img": { "url": "/uuid/77c630aa-4744-44cb-a88e-3e871c6b73d9/16-9?md5ChecksumParam=f41bfe414bec32505abdab19d00b8b43" } } ] }, "eventId": "139585132", "starttime": "2022-05-06T00:35:40Z", "endtime": "2022-05-06T01:15:40Z", "eventTitle": "Distretto di Polizia", "eventSynopsis": "S6 Ep26 La resa dei conti - Fino all'ultimo la sfida tra Ardenzi e Carrano, nemici di vecchia data, riserva clamorosi colpi di scena. E si scopre che non e' tutto come sembrava.", "epgEventTitle": "S6 Ep26 - Distretto di Polizia", "primeVision": false, "resolutions": [ { "resolutionType": "resolution4k", "value": false } ] }]}` + const content = + '{"events": [ { "channel": { "id": 10458, "logo": "/logo/545820mediasethd_Light_Fit.png", "logoPadding": "/logo/545820mediasethd_Light_Padding.png", "logoDark": "/logo/545820mediasethd_Dark_Fit.png", "logoDarkPadding": "/logo/545820mediasethd_Dark_Padding.png", "logoLight": "/logo/545820mediasethd_Light_Padding.png", "name": "20Mediaset HD", "number": 151, "category": { "id": 3, "name": "Intrattenimento" } }, "content": { "uuid": "77c630aa-4744-44cb-a88e-3e871c6b73d9", "contentTitle": "Distretto di Polizia", "episodeNumber": 26, "seasonNumber": 6, "url": "/serie-tv/distretto-di-polizia/stagione-6/episodio-26/77c630aa-4744-44cb-a88e-3e871c6b73d9", "genre": { "id": 1, "name": "Intrattenimento" }, "subgenre": { "id": 9, "name": "Fiction" }, "imagesMap": [ { "key": "background", "img": { "url": "/uuid/77c630aa-4744-44cb-a88e-3e871c6b73d9/background?md5ChecksumParam=88d3f48ce855316f4be25ab9bb846d32" } }, { "key": "cover", "img": { "url": "/uuid/77c630aa-4744-44cb-a88e-3e871c6b73d9/cover?md5ChecksumParam=61135b999a63e3d3f4a933b9edeb0c1b" } }, { "key": "scene", "img": { "url": "/uuid/77c630aa-4744-44cb-a88e-3e871c6b73d9/16-9?md5ChecksumParam=f41bfe414bec32505abdab19d00b8b43" } } ] }, "eventId": "139585132", "starttime": "2022-05-06T00:35:40Z", "endtime": "2022-05-06T01:15:40Z", "eventTitle": "Distretto di Polizia", "eventSynopsis": "S6 Ep26 La resa dei conti - Fino all\'ultimo la sfida tra Ardenzi e Carrano, nemici di vecchia data, riserva clamorosi colpi di scena. E si scopre che non e\' tutto come sembrava.", "epgEventTitle": "S6 Ep26 - Distretto di Polizia", "primeVision": false, "resolutions": [ { "resolutionType": "resolution4k", "value": false } ] }]}' const result = parser({ content }).map(p => { p.start = p.start.toJSON() p.stop = p.stop.toJSON() @@ -45,7 +46,7 @@ it('can parse response', () => { it('can handle empty guide', () => { const result = parser({ - content: `{"events":[],"total":0}` + content: '{"events":[],"total":0}' }) expect(result).toMatchObject([]) }) diff --git a/sites/guide.dstv.com/guide.dstv.com.channels.xml b/sites/guide.dstv.com/guide.dstv.com.channels.xml index 0bdaf11a..f08da374 100644 --- a/sites/guide.dstv.com/guide.dstv.com.channels.xml +++ b/sites/guide.dstv.com/guide.dstv.com.channels.xml @@ -1,326 +1,324 @@ - - - 1KZN TV - 1 Magic Africa - Abol TV - Addis Media Network - Adom TV - Africa Magic Epic - Africa Magic Family - Africa Magic Hausa - Africa Magic Igbo - Africa Magic Showcase Africa - Africa Magic Urban - Africa Magic Yoruba - Africanews - Afro Music Pop - Ahadu TV - AIT International - Akili Kids! - Aljazeera English - Amhara TV - Arewa 24 - Arise News - ARTS TV - Asham TV - AYV TV - B4U Movies UK - Baba TV - Balageru TV - BBC Brit South Africa - BBC Earth South Africa - BBC Lifestyle South Africa - BBC World News Africa - BBS TV - BET Africa - Big Brother Mzansi - Bloomberg TV Africa - Boomerang EMEA - Botswana TV - Bukedde TV 1 - BusinessDay TV - Camnet TV - Cape Town TV - Cartoon Network Middle East & Africa - CBeebies South Africa - CBS Justice Africa - CBS Reality Africa - CCTV 4 Europe - CCTV Entertainment - CGTN - CGTN Documentary - CGTN Français - Channel 44 - Channel O - Channels TV - Citizen TV - CNBC Africa - CNN International Europe - Comedy Central Africa - Curiosity Channel - Da Vinci - Daystar TV - Diamond TV - Discovery Channel Middle East & Africa - Discovery Family Africa - Disney Channel South Africa - Disney Junior South Africa - Dominion TV - Dove TV - Dumisa TV - DW Deutsch - E! Africa - EBS - Edu Channel - E Extra - Emmanuel TV - E Movies - E Movies Extra - ENews Channel Africa - ESPN 2 Africa - ESPN Africa - E Toonz - E TV - E TV Africa - ETV News - EuroNews English - EuroNews Français - EuroNews Deutsch - EuroNews Português - EWTN Africa - Asia - Faith Africa - Fana TV - FliekNet - Food Network EMEA - Galaxy TV - Gau TV - Ghana Learning TV - Ghana TV - Gh One TV - Ginx eSports TV International - HGTV South Africa - Hip TV - History Africa - Honey - Ignition - Inooro TV - Investigation Discovery Africa - Iqraa Africa & Europe - Islam Channel - ITV Networks - Jiangsu TV - JimJam Europe - Joy News - Joy Prime - K24 - Kameme TV - Kass TV - KBC Channel 1 - KBN - Kiss TV - Kix - KTN Home - KTN News - KykNet - KykNet & Kie - KykNet Nou! - Lagos TV - Lifetime Africa - Lumen Christi TV Network - Maisha Magic Bongo - Maisha Magic Movies - Maisha Magic Plus - Maisha Magic Poa - Mambo Moto TV - MBC - Me - Mibawa TV - Mindset Learn - MITV - M-Net East - M-Net Movies 1 East Africa - M-Net Movies 1 West Africa - M-Net Movies 2 - M-Net Movies 3 - M-Net Movies 4 - M-Net Movies Men of Action - M-Net South Africa - M-Net West - Moja Love - MovieRoom - Mpuma Kapa TV - MTV Africa - MTV Base Africa - My Channel Africa - Mzansi Bioskop - Mzansi Magic - Mzansi Magic Music - Mzansi Wethu - Nahoo TV - National Geographic South Africa - National Geographic Wild South Africa - NBC 2 - NBS TV - NDTV 24x7 - Newzroom Afrika - NHK World Japan - Nickelodeon Africa - Nick Jr Africa - NickToons Africa - Novela Magic - Now! TV - NTA 2 - NTA International - NTA News 24 - NTA Parliament - NTV - NTV Uganda - OBN - Ogun State TV - One Africa TV - One Gospel - OneZed - Parliament TV - Parliament TV - PBS Kids - Pearl Magic Prime - People's Weather - Plus TV Africa - Pop Central - Power TV - Racing 240 - Rai Italia Africa - Real Time Africa - Rok - Rok 2 - Rok GH - RT News - SABC 1 - SABC 2 - SABC 3 - SABC News - Salt TV - SBN International - Silverbird TV - Sky News International - Soundcity Africa - Soweto TV - Spice - SSBC TV - StarLife - STN - Studio Universal Africa - Sunna TV - SuperSport Action Africa - SuperSport Blitz Africa - SuperSport Cricket Africa - SuperSport Football Africa - SuperSport Football Plus Africa - SuperSport Golf Africa - SuperSport Grandstand Africa - SuperSport LaLiga Africa - SuperSport Máximo 1 Africa - SuperSport Máximo 2 Africa - SuperSport Motorsport Africa - SuperSport OTT - SuperSport OTT 2 - SuperSport OTT 3 - SuperSport OTT 4 - SuperSport OTT 5 - SuperSport OTT 6 - SuperSport OTT 7 - SuperSport OTT 8 - SuperSport Play - SuperSport Premier League Africa - SuperSport PSL - SuperSport Rugby Africa - SuperSport Tennis Africa - SuperSport Variety 1 Africa - SuperSport Variety 2 Africa - SuperSport Variety 3 Africa - SuperSport Variety 4 Africa - Tanzania Safari Channel - TBN Africa - Telemundo Africa - Televista - Tellytrack 1 - The Home Channel - TLC Africa - Tlnovelas Europa - TNT Africa - Trace Gospel English Speaking Africa - Trace Jama - Trace Muzika - Trace Mziki - Trace Naija - Travel Channel Europe - Trybe TV - Tshwane TV - TV 1 - TV 3 - TV 47 - TV5Monde Afrique - TV Africa - TVC News - TV E - TV Lesotho - TV Moçambique Internacional - TV West - UBC TV - United TV - Universal TV Africa - Urban TV - Via - Walta TV - Wap TV - Wasafi TV - Wazobia Max TV Nigeria - WildEarth - WWE Channel - Y254 - Yadah TV - Zambezi Magic - ZBC TV - Zee Alem - Zee World - ZNBC TV 1 - ZNBC TV 2 - Zodiak TV - Afro Music Channel - AXN Movies - AXN Portugal - Banda TV - Best Brasil - Boomerang Portugal - Boom TV - Canal Panda Portugal - Cine Mundo - Disney Junior Portugal - DSTV Pipoca - Fé TV - Fox Comedy Portugal - Fox Crime Portugal - Fox Life Portugal - Fox Movies Portugal - Fox Portugal - Luta Pela Fama - Media Mais TV - MundoFox - National Geographic Portugal - Palanca TV - Record News - RTP África - RTP Internacional Europa - Soico TV - Strong Live - SuperSport Máximo 360 - TLN Network - TPA 1 - TPA2 - Trace Toca - TVM - TV Miramar - TV Zimbo - - \ No newline at end of file + + 1KZN TV + 1 Magic Africa + Abol TV + Addis Media Network + Adom TV + Africa Magic Epic + Africa Magic Family + Africa Magic Hausa + Africa Magic Igbo + Africa Magic Showcase Africa + Africa Magic Urban + Africa Magic Yoruba + Africanews + Afro Music Pop + Ahadu TV + AIT International + Akili Kids! + Aljazeera English + Amhara TV + Arewa 24 + Arise News + ARTS TV + Asham TV + AYV TV + B4U Movies UK + Baba TV + Balageru TV + BBC Brit South Africa + BBC Earth South Africa + BBC Lifestyle South Africa + BBC World News Africa + BBS TV + BET Africa + Big Brother Mzansi + Bloomberg TV Africa + Boomerang EMEA + Botswana TV + Bukedde TV 1 + BusinessDay TV + Camnet TV + Cape Town TV + Cartoon Network Middle East & Africa + CBeebies South Africa + CBS Justice Africa + CBS Reality Africa + CCTV 4 Europe + CCTV Entertainment + CGTN + CGTN Documentary + CGTN Français + Channel 44 + Channel O + Channels TV + Citizen TV + CNBC Africa + CNN International Europe + Comedy Central Africa + Curiosity Channel + Da Vinci + Daystar TV + Diamond TV + Discovery Channel Middle East & Africa + Discovery Family Africa + Disney Channel South Africa + Disney Junior South Africa + Dominion TV + Dove TV + Dumisa TV + DW Deutsch + E! Africa + EBS + Edu Channel + E Extra + Emmanuel TV + E Movies + E Movies Extra + ENews Channel Africa + ESPN 2 Africa + ESPN Africa + E Toonz + E TV + E TV Africa + ETV News + EuroNews English + EuroNews Français + EuroNews Deutsch + EuroNews Português + EWTN Africa - Asia + Faith Africa + Fana TV + FliekNet + Food Network EMEA + Galaxy TV + Gau TV + Ghana Learning TV + Ghana TV + Gh One TV + Ginx eSports TV International + HGTV South Africa + Hip TV + History Africa + Honey + Ignition + Inooro TV + Investigation Discovery Africa + Iqraa Africa & Europe + Islam Channel + ITV Networks + Jiangsu TV + JimJam Europe + Joy News + Joy Prime + K24 + Kameme TV + Kass TV + KBC Channel 1 + KBN + Kiss TV + Kix + KTN Home + KTN News + KykNet + KykNet & Kie + KykNet Nou! + Lagos TV + Lifetime Africa + Lumen Christi TV Network + Maisha Magic Bongo + Maisha Magic Movies + Maisha Magic Plus + Maisha Magic Poa + Mambo Moto TV + MBC + Me + Mibawa TV + Mindset Learn + MITV + M-Net East + M-Net Movies 1 East Africa + M-Net Movies 1 West Africa + M-Net Movies 2 + M-Net Movies 3 + M-Net Movies 4 + M-Net Movies Men of Action + M-Net South Africa + M-Net West + Moja Love + MovieRoom + Mpuma Kapa TV + MTV Africa + MTV Base Africa + My Channel Africa + Mzansi Bioskop + Mzansi Magic + Mzansi Magic Music + Mzansi Wethu + Nahoo TV + National Geographic South Africa + National Geographic Wild South Africa + NBC 2 + NBS TV + NDTV 24x7 + Newzroom Afrika + NHK World Japan + Nickelodeon Africa + Nick Jr Africa + NickToons Africa + Novela Magic + Now! TV + NTA 2 + NTA International + NTA News 24 + NTA Parliament + NTV + NTV Uganda + OBN + Ogun State TV + One Africa TV + One Gospel + OneZed + Parliament TV + Parliament TV + PBS Kids + Pearl Magic Prime + People's Weather + Plus TV Africa + Pop Central + Power TV + Racing 240 + Rai Italia Africa + Real Time Africa + Rok + Rok 2 + Rok GH + RT News + SABC 1 + SABC 2 + SABC 3 + SABC News + Salt TV + SBN International + Silverbird TV + Sky News International + Soundcity Africa + Soweto TV + Spice + SSBC TV + StarLife + STN + Studio Universal Africa + Sunna TV + SuperSport Action Africa + SuperSport Blitz Africa + SuperSport Cricket Africa + SuperSport Football Africa + SuperSport Football Plus Africa + SuperSport Golf Africa + SuperSport Grandstand Africa + SuperSport LaLiga Africa + SuperSport Máximo 1 Africa + SuperSport Máximo 2 Africa + SuperSport Motorsport Africa + SuperSport OTT + SuperSport OTT 2 + SuperSport OTT 3 + SuperSport OTT 4 + SuperSport OTT 5 + SuperSport OTT 6 + SuperSport OTT 7 + SuperSport OTT 8 + SuperSport Play + SuperSport Premier League Africa + SuperSport PSL + SuperSport Rugby Africa + SuperSport Tennis Africa + SuperSport Variety 1 Africa + SuperSport Variety 2 Africa + SuperSport Variety 3 Africa + SuperSport Variety 4 Africa + Tanzania Safari Channel + TBN Africa + Telemundo Africa + Televista + Tellytrack 1 + The Home Channel + TLC Africa + Tlnovelas Europa + TNT Africa + Trace Gospel English Speaking Africa + Trace Jama + Trace Muzika + Trace Mziki + Trace Naija + Travel Channel Europe + Trybe TV + Tshwane TV + TV 1 + TV 3 + TV 47 + TV5Monde Afrique + TV Africa + TVC News + TV E + TV Lesotho + TV Moçambique Internacional + TV West + UBC TV + United TV + Universal TV Africa + Urban TV + Via + Walta TV + Wap TV + Wasafi TV + Wazobia Max TV Nigeria + WildEarth + WWE Channel + Y254 + Yadah TV + Zambezi Magic + ZBC TV + Zee Alem + Zee World + ZNBC TV 1 + ZNBC TV 2 + Zodiak TV + Afro Music Channel + AXN Movies + AXN Portugal + Banda TV + Best Brasil + Boomerang Portugal + Boom TV + Canal Panda Portugal + Cine Mundo + Disney Junior Portugal + DSTV Pipoca + Fé TV + Fox Comedy Portugal + Fox Crime Portugal + Fox Life Portugal + Fox Movies Portugal + Fox Portugal + Luta Pela Fama + Media Mais TV + MundoFox + National Geographic Portugal + Palanca TV + Record News + RTP África + RTP Internacional Europa + Soico TV + Strong Live + SuperSport Máximo 360 + TLN Network + TPA 1 + TPA2 + Trace Toca + TVM + TV Miramar + TV Zimbo + \ No newline at end of file diff --git a/sites/guide.dstv.com/guide.dstv.com.config.js b/sites/guide.dstv.com/guide.dstv.com.config.js index 44ad8d38..44ca692a 100644 --- a/sites/guide.dstv.com/guide.dstv.com.config.js +++ b/sites/guide.dstv.com/guide.dstv.com.config.js @@ -7,9 +7,9 @@ const customParseFormat = require('dayjs/plugin/customParseFormat') dayjs.extend(utc) dayjs.extend(customParseFormat) +// ERR: certificate has expired module.exports = { site: 'guide.dstv.com', - skip: true, // NOTE: website is down (HTTP Server Error 503) days: 2, request: { cache: { @@ -24,9 +24,9 @@ module.exports = { 'YYYY-MM-DD' )}` }, - parser({ content, date, channel, cached }) { + parser({ content, date, channel }) { const programs = [] - const items = parseItems(content, date, channel) + const items = parseItems(content, channel) items.forEach(item => { const prev = programs[programs.length - 1] let start = parseStart(item, date) @@ -70,13 +70,13 @@ module.exports = { } function parseStart(item, date) { - time = `${date.format('MM/DD/YYYY')} ${item.time}` + const time = `${date.format('MM/DD/YYYY')} ${item.time}` return dayjs.utc(time, 'MM/DD/YYYY HH:mm') } -function parseItems(content, date, channel) { - const [_, channelTag] = channel.site_id.split('#') +function parseItems(content, channel) { + const [, channelTag] = channel.site_id.split('#') const data = JSON.parse(content) const html = data[channelTag] if (!html) return [] diff --git a/sites/guide.dstv.com/guide.dstv.com.test.js b/sites/guide.dstv.com/guide.dstv.com.test.js index afd4c318..09b242e5 100644 --- a/sites/guide.dstv.com/guide.dstv.com.test.js +++ b/sites/guide.dstv.com/guide.dstv.com.test.js @@ -1,5 +1,5 @@ -// node ./scripts/commands/parse-channels.js --config=./sites/guide.dstv.com/guide.dstv.com.config.js --output=./sites/guide.dstv.com/guide.dstv.com.channels.xml --set=bouquet:c35aaecd-5dd1-480b-ae24-357e600a0e4d -// npx epg-grabber --config=sites/guide.dstv.com/guide.dstv.com.config.js --channels=sites/guide.dstv.com/guide.dstv.com.channels.xml --output=guide.xml --timeout=30000 --days=2 +// npm run grab -- --site=guide.dstv.com +// npm run channels:parse -- --config=./sites/guide.dstv.com/guide.dstv.com.config.js --output=./sites/guide.dstv.com/guide.dstv.com.channels.xml --set=bouquet:c35aaecd-5dd1-480b-ae24-357e600a0e4d const { parser, url } = require('./guide.dstv.com.config.js') const dayjs = require('dayjs') @@ -22,7 +22,8 @@ it('can generate valid url', () => { }) it('can parse response', () => { - const content = `{"M4H": " 21:30 Deadly Flight 08:25 I Still Believe 15:50 Despicable Me 20:35 The Foreigner "}` + const content = + "{\"M4H\": \" 21:30 Deadly Flight 08:25 I Still Believe 15:50 Despicable Me 20:35 The Foreigner \"}" const result = parser({ date, channel, content }).map(p => { p.start = p.start.toJSON() p.stop = p.stop.toJSON() @@ -53,6 +54,6 @@ it('can parse response', () => { }) it('can handle empty guide', () => { - const result = parser({ date, channel, content: `{}` }) + const result = parser({ date, channel, content: '{}' }) expect(result).toMatchObject([]) }) diff --git a/sites/hd-plus.de/hd-plus.de.channels.xml b/sites/hd-plus.de/hd-plus.de.channels.xml index c22c83fa..ee89d1b2 100644 --- a/sites/hd-plus.de/hd-plus.de.channels.xml +++ b/sites/hd-plus.de/hd-plus.de.channels.xml @@ -1,125 +1,123 @@ - - - 1-2-3 TV - 13th Street Deutschland - 3sat - Anixe HD Serie - ARD Alpha - ARTE Deutsch - AstroTV - ATV - ATV 2 - Augsburg TV - Sony AXN - Bayerisches Fernsehen Nord - Bibel TV - Bloomberg TV Europe - Boomerang Deutschland - Cartoon Network Deutschland - Channel 21 - Comedy Central Deutschland - Das Erste - Deluxe Music - Deutsches Musik Fernsehen - Die Neue Zeit TV - Discovery Channel Deutschland - Disney Channel Deutschland - DMAX Deutschland - E! Europe - EuroNews Deutsch - Eurosport 1 Germany - EWTN auf Deutsch - Franken Fernsehen - GoTV - Heimatkanal - History Deutschland - Hope TV Deutsch - HR Fernsehen - HSE - HSE Extra - JML Direct - Junior - Juwelo - Kabel Eins Classics - Kabel Eins Deutschland - KIKA - Kinowelt TV - K-TV - L TV - Motorvision TV - MTV Germany - MTV Hits Europe - MTV Live HD - München TV - National Geographic Deutschland - National Geographic Wild Deutschland - Nitro Deutschland - NPO 1 - NPO 2 - N-TV - One - ORF 1 - ORF 2 - ORF III - ORF Sport + - Pearl TV - Phoenix - ProSieben Deutschland - ProSieben Maxx Deutschland - Puls 4 - QVC Deutschland - QVC Zwei - RFO - RheinMain TV - RiC - Romance TV Deutschland - RTL Crime Deutschland - RTL Deutschland - RTL Living Deutschland - RTL Zwei Deutschland - Sat. 1 Deutschland - Sat. 1 Emotions - Sat. 1 Gold Deutschland - Servus TV Deutschland - Sixx Deutschland - Sky Atlantic - Sky Cinema Action - Sky Cinema Hits - Sky Cinema Nostalgie - Sky Comedy - Sky Krimi - Sky Sport 1 - Sky Sport 2 - Sky Sport Austria 1 - Sky Sport Bundesliga 1 - Sky Sport Bundesliga 2 - Sky Sport Bundesliga 3 - Sky Sport Bundesliga 4 - Sky Sport News - Sonnenklar TV - Sport 1 - Sport 1+ - Sportdigital Fussball - SRF 1 - SR Fernsehen - SRF Zwei - Stingray Classica - Super RTL Deutschland - Syfy Deutschland - Tagesschau 24 - Tele 5 - TLC Germany - TNT Film - TNT Serie - TVA Ostbayern - TV Oberfranken - Universal TV Deutschland - Vox Deutschland - Welt - Welt der Wunder TV - ZDF - ZDF Info - ZDF Neo - - + + 1-2-3 TV + 13th Street Deutschland + 3sat + Anixe HD Serie + ARD Alpha + ARTE Deutsch + AstroTV + ATV + ATV 2 + Augsburg TV + Bibel TV + Bloomberg TV Europe + Boomerang Deutschland + Bayerisches Fernsehen Nord + Cartoon Network Deutschland + Channel 21 + Comedy Central Deutschland + Das Erste + Deluxe Music + Deutsches Musik Fernsehen + Die Neue Zeit TV + Discovery Channel Deutschland + Disney Channel Deutschland + DMAX Deutschland + E! Europe + EuroNews Deutsch + Eurosport 1 Germany + EWTN auf Deutsch + Franken Fernsehen + GoTV + Heimatkanal + History Deutschland + Hope TV Deutsch + HR Fernsehen + HSE + HSE Extra + JML Direct + Junior + Juwelo + Kabel Eins Deutschland + Kabel Eins Classics + KIKA + Kinowelt TV + K-TV + L TV + Motorvision TV + MTV Germany + MTV Hits Europe + MTV Live HD + München TV + National Geographic Deutschland + National Geographic Wild Deutschland + Nitro Deutschland + NPO 1 + NPO 2 + N-TV + One + ORF 1 + ORF 2 + ORF III + ORF Sport + + Pearl TV + Phoenix + ProSieben Deutschland + ProSieben Maxx Deutschland + Puls 4 + QVC Zwei + QVC Deutschland + RFO + RheinMain TV + RiC + Romance TV Deutschland + RTL Crime Deutschland + RTL Deutschland + RTL Living Deutschland + RTL Zwei Deutschland + Sat. 1 Deutschland + Sat. 1 Emotions + Sat. 1 Gold Deutschland + Servus TV Deutschland + Sixx Deutschland + Sky Atlantic + Sky Cinema Action + Sky Cinema Hits + Sky Cinema Nostalgie + Sky Comedy + Sky Krimi + Sky Sport 1 + Sky Sport 2 + Sky Sport Austria 1 + Sky Sport Bundesliga 1 + Sky Sport Bundesliga 2 + Sky Sport Bundesliga 3 + Sky Sport Bundesliga 4 + Sky Sport News + Sonnenklar TV + Sony AXN + Sport 1 + Sport 1+ + Sportdigital Fussball + SRF 1 + SR Fernsehen + SRF Zwei + Stingray Classica + Super RTL Deutschland + Syfy Deutschland + Tagesschau 24 + Tele 5 + TLC Germany + TNT Film + TNT Serie + TVA Ostbayern + TV Oberfranken + Universal TV Deutschland + Vox Deutschland + Welt + Welt der Wunder TV + ZDF + ZDF Info + ZDF Neo + diff --git a/sites/hd-plus.de/hd-plus.de.test.js b/sites/hd-plus.de/hd-plus.de.test.js index bbb5c2be..d8cb96d4 100644 --- a/sites/hd-plus.de/hd-plus.de.test.js +++ b/sites/hd-plus.de/hd-plus.de.test.js @@ -1,4 +1,4 @@ -// npx epg-grabber --config=sites/hd-plus.de/hd-plus.de.config.js --channels=sites/hd-plus.de/hd-plus.de.channels.xml --output=guide.xml --days=2 +// npm run grab -- --site=hd-plus.de const { parser, url } = require('./hd-plus.de.config.js') const dayjs = require('dayjs') @@ -12,7 +12,8 @@ const channel = { site_id: '1-2-3-tv-hd', xmltv_id: '123tv.de' } -const content = ` 1-2-3.tv HD Titel Ausstrahlungszeit Ihre Lieblingsuhren Do 25.11 00:00 Ihre Lieblingsuhren Do 25.11 01:00 Flash DealsDo 25.11 06:00 ` +const content = + ' 1-2-3.tv HD Titel Ausstrahlungszeit Ihre Lieblingsuhren Do 25.11 00:00 Ihre Lieblingsuhren Do 25.11 01:00 Flash DealsDo 25.11 06:00 ' it('can generate valid url', () => { const today = dayjs.utc().startOf('d') @@ -30,17 +31,17 @@ it('can parse response', () => { { start: '2021-11-24T23:00:00.000Z', stop: '2021-11-25T00:00:00.000Z', - title: `Ihre Lieblingsuhren` + title: 'Ihre Lieblingsuhren' }, { start: '2021-11-25T00:00:00.000Z', stop: '2021-11-25T05:00:00.000Z', - title: `Ihre Lieblingsuhren` + title: 'Ihre Lieblingsuhren' }, { start: '2021-11-25T05:00:00.000Z', stop: '2021-11-25T06:00:00.000Z', - title: `Flash Deals` + title: 'Flash Deals' } ]) }) @@ -49,7 +50,7 @@ it('can handle empty guide', () => { const result = parser({ date, channel, - content: `` + content: '' }) expect(result).toMatchObject([]) }) diff --git a/sites/horizon.tv/horizon.tv.channels.xml b/sites/horizon.tv/horizon.tv.channels.xml index 571ebb74..add65f86 100644 --- a/sites/horizon.tv/horizon.tv.channels.xml +++ b/sites/horizon.tv/horizon.tv.channels.xml @@ -1,189 +1,187 @@ - - - RTVS 24 HD - 360 TuneBox HD - AMC HD - Animal Planet HD - Magyar ATV - Auto Motor Sport - BabesTV HD - Barrandov Krimi HD - Bober - Brazzers TV HD - Cartoon Network HD - Cinemax 2 HD - Cinemax HD - Club MTV - CNBC Europe HD - CNN - CNN Prima News HD - Cool TV - CS History - CS Mystery - CT 1 HD - CT 2 HD - CT 24 HD - CT sport HD - Current Time - Discovery HD - Discovery Science HD - Disney Channel - Docubox HD - Dom Kino - Dom Kino PREMIUM HD - DTX HD - ducktv HD - Duna - Duna World - Dvojka HD - Deutsche Welle - EroXXX HD - Espreso TV - Euronews HD - Euronews FR - Euronews HU - Eurosport 1 HD - Eurosport 2 HD - Extasy HD - Extreme Sports - FashionBox - Fashion TV HD - Fast & FunBox HD - Fem3 - Fightbox HD - FilmBox HD - FilmBox Arthouse - FilmBox Extra HD - FilmBox Family - FilmBox Premium HD - FilmBox Stars HD - Film+ CZ HD - FILM+ HU - Folklorika HD - Food Network HD - France 24 - HBO 2 HD - HBO 3 HD - HBO HD - HirTV - History HD - Hobby TV HD - Jednotka HD - JimJam - JOJ 24 HD - JOJ Cinema HD - Jojko HD - JOJ Plus HD - JOJ Sport HD - WAU HD - Kabel eins - Carousel - Kino Barrandov HD - Leo TV HD - m1 HD - m2 - m4 Sport HD - m5 - Markiza HD - Dajto HD - Doma HD - Mezzo - Minimax - Mnam TV HD - Mnau TV - MTV 00s - MTV 80s - MTV 90s - MTV Live HD - Muzika Pervogo - Muzsika TV - National Geographic HD - Nat Geo Wild HD - Nick Jr. - Nickelodeon - NickToons - Nitro - Nova International HD - Nova Sport 1 HD - Nova Sport 2 HD - O! - ORF 1 - ORF 2 - ORF III - Park TV - Pobeda - Poekhali! - Prima COOL HD - Prima KRIMI HD - Prima love HD - Prima MAX HD - Prima PLUS HD - Prima ZOOM HD - ProSieben - Reality Kings HD - RELAX - Retro Music TV - RTL Gold - RTL KETTŐ - RTL DE - RTL HÁROM - RTL - RTL Zwei - SAT 1 - SENZI HD - Sky News - Slager muzika - Slager original - Slager Premium HD - Slager TV - Sorozat+ - Spektrum HD - Spektrum home - RTVS Sport HD - Sport 1 HD - Sport 2 HD - Sport 5 - Story 4 - Super RTL - Super TV2 - TA3 HD - Telecafe - Seznam.cz TV HD - Fishing and Hunting - Travel Channel HD - TRT World - TurboTV HD - TV2 - TV2Sef - TV4 - TV8 - Barrandov TV HD - JOJ HD - TV LUX HD - Noe TV HD - TV Paprika - TV Paprika HU - TVP Polonia - TV Raj HD - TV Romana - TV Ruzinov HD - UATV - Viasat Explore HD - Viasat History HD - Viasat Nature HD - VOX - Vremja - WELT - - - - - - - - - - - - + + + + + + + + + + + + Kabel eins + Nitro + ORF 1 + ORF 2 + ORF III + ProSieben + RTL DE + RTL Zwei + SAT 1 + Super RTL + VOX + WELT + 360 TuneBox HD + BabesTV HD + Brazzers TV HD + Club MTV + CNBC Europe HD + CNN + Docubox HD + Deutsche Welle + EroXXX HD + Euronews HD + Extasy HD + Extreme Sports + FashionBox + Fashion TV HD + Fast & FunBox HD + Fightbox HD + FilmBox Arthouse + Mezzo + MTV 00s + MTV 80s + MTV 90s + MTV Live HD + Reality Kings HD + Sky News + TRT World + UATV + Euronews FR + France 24 + RTVS 24 HD + AMC HD + Animal Planet HD + Magyar ATV + Auto Motor Sport + Barrandov Krimi HD + Bober + Cartoon Network HD + Cinemax 2 HD + Cinemax HD + CNN Prima News HD + Cool TV + CS History + CS Mystery + CT 1 HD + CT 2 HD + CT 24 HD + CT sport HD + Current Time + Discovery HD + Discovery Science HD + Disney Channel + Dom Kino + Dom Kino PREMIUM HD + DTX HD + ducktv HD + Duna + Duna World + Dvojka HD + Espreso TV + Euronews HU + Eurosport 1 HD + Eurosport 2 HD + Fem3 + FilmBox HD + FilmBox Extra HD + FilmBox Family + FilmBox Premium HD + FilmBox Stars HD + Film+ CZ HD + FILM+ HU + Folklorika HD + Food Network HD + HBO 2 HD + HBO 3 HD + HBO HD + HirTV + History HD + Hobby TV HD + Jednotka HD + JimJam + JOJ 24 HD + JOJ Cinema HD + Jojko HD + JOJ Plus HD + JOJ Sport HD + WAU HD + Carousel + Kino Barrandov HD + Leo TV HD + m1 HD + m2 + m4 Sport HD + m5 + Markiza HD + Dajto HD + Doma HD + Minimax + Mnam TV HD + Mnau TV + Muzika Pervogo + Muzsika TV + National Geographic HD + Nat Geo Wild HD + Nickelodeon + Nick Jr. + NickToons + Nova International HD + Nova Sport 1 HD + Nova Sport 2 HD + O! + Park TV + Pobeda + Poekhali! + Prima COOL HD + Prima KRIMI HD + Prima love HD + Prima MAX HD + Prima PLUS HD + Prima ZOOM HD + RELAX + Retro Music TV + RTL Gold + RTL HÁROM + RTL + RTL KETTŐ + SENZI HD + Slager muzika + Slager original + Slager Premium HD + Slager TV + Sorozat+ + Spektrum HD + Spektrum home + RTVS Sport HD + Sport 1 HD + Sport 2 HD + Sport 5 + Story 4 + Super TV2 + TA3 HD + Telecafe + Seznam.cz TV HD + Fishing and Hunting + Travel Channel HD + TurboTV HD + TV2 + TV2Sef + TV4 + TV8 + Barrandov TV HD + JOJ HD + TV LUX HD + Noe TV HD + TV Paprika + TV Paprika HU + TVP Polonia + TV Raj HD + TV Romana + TV Ruzinov HD + Viasat Explore HD + Viasat History HD + Viasat Nature HD + Vremja + diff --git a/sites/horizon.tv/horizon.tv.config.js b/sites/horizon.tv/horizon.tv.config.js index 92474cfa..0444317c 100644 --- a/sites/horizon.tv/horizon.tv.config.js +++ b/sites/horizon.tv/horizon.tv.config.js @@ -1,7 +1,7 @@ const axios = require('axios') const dayjs = require('dayjs') -const API_ENDPOINT = `https://legacy-static.oesp.horizon.tv/oesp/v4/SK/slk/web` +const API_ENDPOINT = 'https://legacy-static.oesp.horizon.tv/oesp/v4/SK/slk/web' module.exports = { site: 'horizon.tv', @@ -87,7 +87,7 @@ function parseStop(item) { function parseItems(content, channel) { if (!content) return [] - const data = (typeof content === 'string') ? JSON.parse(content) : content + const data = typeof content === 'string' ? JSON.parse(content) : content if (!data || !Array.isArray(data.entries)) return [] const entity = data.entries.find(e => e.o === `lgi-obolite-sk-prod-master:${channel.site_id}`) return entity ? entity.l : [] @@ -142,4 +142,4 @@ function parseYear(detail) { if (!detail) return null if (!detail.program) return null return detail.program.year || null -} \ No newline at end of file +} diff --git a/sites/horizon.tv/horizon.tv.test.js b/sites/horizon.tv/horizon.tv.test.js index 1e3fc985..4a5a6758 100644 --- a/sites/horizon.tv/horizon.tv.test.js +++ b/sites/horizon.tv/horizon.tv.test.js @@ -1,5 +1,5 @@ // npm run channels:parse -- --config=./sites/horizon.tv/horizon.tv.config.js --output=./sites/horizon.tv/horizon.tv.channels.xml -// npx epg-grabber --config=sites/horizon.tv/horizon.tv.config.js --channels=sites/horizon.tv/horizon.tv.channels.xml --output=guide.xml --days=2 +// npm run grab -- --site=horizon.tv const { parser, url } = require('./horizon.tv.config.js') const axios = require('axios') @@ -24,38 +24,70 @@ it('can generate valid url', () => { }) it('can parse response', done => { - const content = `{"entryCount":184,"totalResults":184,"updated":1675790518889,"expires":1675791343825,"title":"EPG","periods":4,"periodStartTime":1675724400000,"periodEndTime":1675746000000,"entries":[{"o":"lgi-obolite-sk-prod-master:10024","l":[{"i":"crid:~~2F~~2Fport.cs~~2F122941980,imi:7ca159c917344e0dd3fbe1cd8db5ff8043d96a78","t":"Avengement","s":1675719300000,"e":1675724700000,"c":"lgi-obolite-sk-prod-master:genre-9","a":false,"r":true,"rm":true,"rs":0,"re":604800,"rst":"cloud","ra":false,"ad":[],"sl":[]}]}]}` + const content = + '{"entryCount":184,"totalResults":184,"updated":1675790518889,"expires":1675791343825,"title":"EPG","periods":4,"periodStartTime":1675724400000,"periodEndTime":1675746000000,"entries":[{"o":"lgi-obolite-sk-prod-master:10024","l":[{"i":"crid:~~2F~~2Fport.cs~~2F122941980,imi:7ca159c917344e0dd3fbe1cd8db5ff8043d96a78","t":"Avengement","s":1675719300000,"e":1675724700000,"c":"lgi-obolite-sk-prod-master:genre-9","a":false,"r":true,"rm":true,"rs":0,"re":604800,"rst":"cloud","ra":false,"ad":[],"sl":[]}]}]}' axios.get.mockImplementation(url => { - if (url === 'https://legacy-static.oesp.horizon.tv/oesp/v4/SK/slk/web/programschedules/20230207/2') { + if ( + url === 'https://legacy-static.oesp.horizon.tv/oesp/v4/SK/slk/web/programschedules/20230207/2' + ) { return Promise.resolve({ - data: JSON.parse(`{"entryCount":184,"totalResults":184,"updated":1675790518889,"expires":1675791376097,"title":"EPG","periods":4,"periodStartTime":1675746000000,"periodEndTime":1675767600000,"entries":[{"o":"lgi-obolite-sk-prod-master:10024","l":[{"i":"crid:~~2F~~2Fport.cs~~2F248281986,imi:e85129f9d1e211406a521df7a36f22237c22651b","t":"Zoom In","s":1675744500000,"e":1675746000000,"c":"lgi-obolite-sk-prod-master:genre-21","a":false,"r":true,"rm":true,"rs":0,"re":604800,"rst":"cloud","ra":false,"ad":[],"sl":[]}]}]}`) + data: JSON.parse( + '{"entryCount":184,"totalResults":184,"updated":1675790518889,"expires":1675791376097,"title":"EPG","periods":4,"periodStartTime":1675746000000,"periodEndTime":1675767600000,"entries":[{"o":"lgi-obolite-sk-prod-master:10024","l":[{"i":"crid:~~2F~~2Fport.cs~~2F248281986,imi:e85129f9d1e211406a521df7a36f22237c22651b","t":"Zoom In","s":1675744500000,"e":1675746000000,"c":"lgi-obolite-sk-prod-master:genre-21","a":false,"r":true,"rm":true,"rs":0,"re":604800,"rst":"cloud","ra":false,"ad":[],"sl":[]}]}]}' + ) }) - } else if (url === 'https://legacy-static.oesp.horizon.tv/oesp/v4/SK/slk/web/programschedules/20230207/3') { + } else if ( + url === 'https://legacy-static.oesp.horizon.tv/oesp/v4/SK/slk/web/programschedules/20230207/3' + ) { return Promise.resolve({ - data: JSON.parse(`{"entryCount":184,"totalResults":184,"updated":1675789948804,"expires":1675791024984,"title":"EPG","periods":4,"periodStartTime":1675767600000,"periodEndTime":1675789200000,"entries":[{"o":"lgi-obolite-sk-prod-master:10024","l":[{"i":"crid:~~2F~~2Fport.cs~~2F1379541,imi:5f806a2a0bc13e9745e14907a27116c60ea2c6ad","t":"Studentka","s":1675761000000,"e":1675767600000,"c":"lgi-obolite-sk-prod-master:genre-14","a":false,"r":true,"rm":true,"rs":0,"re":604800,"rst":"cloud","ra":false,"ad":[],"sl":[]}]}]}`) + data: JSON.parse( + '{"entryCount":184,"totalResults":184,"updated":1675789948804,"expires":1675791024984,"title":"EPG","periods":4,"periodStartTime":1675767600000,"periodEndTime":1675789200000,"entries":[{"o":"lgi-obolite-sk-prod-master:10024","l":[{"i":"crid:~~2F~~2Fport.cs~~2F1379541,imi:5f806a2a0bc13e9745e14907a27116c60ea2c6ad","t":"Studentka","s":1675761000000,"e":1675767600000,"c":"lgi-obolite-sk-prod-master:genre-14","a":false,"r":true,"rm":true,"rs":0,"re":604800,"rst":"cloud","ra":false,"ad":[],"sl":[]}]}]}' + ) }) - } else if (url === 'https://legacy-static.oesp.horizon.tv/oesp/v4/SK/slk/web/programschedules/20230207/4') { + } else if ( + url === 'https://legacy-static.oesp.horizon.tv/oesp/v4/SK/slk/web/programschedules/20230207/4' + ) { return Promise.resolve({ - data: JSON.parse(`{"entryCount":184,"totalResults":184,"updated":1675789948804,"expires":1675790973469,"title":"EPG","periods":4,"periodStartTime":1675789200000,"periodEndTime":1675810800000,"entries":[{"o":"lgi-obolite-sk-prod-master:10024","l":[{"i":"crid:~~2F~~2Fport.cs~~2F71927954,imi:f1b4b0285b72cf44cba74e1c62322a4c682385c7","t":"Zilionáři","s":1675785900000,"e":1675791900000,"c":"lgi-obolite-sk-prod-master:genre-9","a":false,"r":true,"rm":true,"rs":0,"re":604800,"rst":"cloud","ra":false,"ad":[],"sl":[]}]}]}`) + data: JSON.parse( + '{"entryCount":184,"totalResults":184,"updated":1675789948804,"expires":1675790973469,"title":"EPG","periods":4,"periodStartTime":1675789200000,"periodEndTime":1675810800000,"entries":[{"o":"lgi-obolite-sk-prod-master:10024","l":[{"i":"crid:~~2F~~2Fport.cs~~2F71927954,imi:f1b4b0285b72cf44cba74e1c62322a4c682385c7","t":"Zilionáři","s":1675785900000,"e":1675791900000,"c":"lgi-obolite-sk-prod-master:genre-9","a":false,"r":true,"rm":true,"rs":0,"re":604800,"rst":"cloud","ra":false,"ad":[],"sl":[]}]}]}' + ) }) - } else if (url === 'https://legacy-static.oesp.horizon.tv/oesp/v4/SK/slk/web/listings/crid:~~2F~~2Fport.cs~~2F122941980,imi:7ca159c917344e0dd3fbe1cd8db5ff8043d96a78') { + } else if ( + url === + 'https://legacy-static.oesp.horizon.tv/oesp/v4/SK/slk/web/listings/crid:~~2F~~2Fport.cs~~2F122941980,imi:7ca159c917344e0dd3fbe1cd8db5ff8043d96a78' + ) { return Promise.resolve({ - data: JSON.parse(`{"id":"crid:~~2F~~2Fport.cs~~2F122941980,imi:7ca159c917344e0dd3fbe1cd8db5ff8043d96a78","startTime":1675719300000,"endTime":1675724700000,"actualStartTime":1675719300000,"actualEndTime":1675724700000,"expirationDate":1676324100000,"stationId":"lgi-obolite-sk-prod-master:10024","imi":"imi:7ca159c917344e0dd3fbe1cd8db5ff8043d96a78","scCridImi":"crid:~~2F~~2Fport.cs~~2F122941980,imi:7ca159c917344e0dd3fbe1cd8db5ff8043d96a78","mediaGroupId":"crid:~~2F~~2Fport.cs~~2F122941980","program":{"id":"crid:~~2F~~2Fport.cs~~2F122941980","title":"Avengement","description":"Během propustky z vězení za účelem návštěvy umírající matky v nemocnici zločinec Cain Burgess (Scott Adkins) unikne svým dozorcům a mizí v ulicích Londýna. Jde o epickou cestu krve a bolesti za...","longDescription":"Během propustky z vězení za účelem návštěvy umírající matky v nemocnici zločinec Cain Burgess (Scott Adkins) unikne svým dozorcům a mizí v ulicích Londýna. Jde o epickou cestu krve a bolesti za dosažením vytoužené pomsty na těch, kteří z něj udělali chladnokrevného vraha.","medium":"Movie","categories":[{"id":"lgi-obolite-sk-prod-master:genre-9","title":"Drama","scheme":"urn:libertyglobal:metadata:cs:ContentCS:2014_1"},{"id":"lgi-obolite-sk-prod-master:genre-33","title":"Akcia","scheme":"urn:libertyglobal:metadata:cs:ContentCS:2014_1"}],"isAdult":false,"parentalRating":"18","cast":["Scott Adkins","Craig Fairbrass","Thomas Turgoose","Nick Moran","Kierston Wareing","Leo Gregory","Mark Strange","Luke LaFontaine","Beau Fowler","Dan Styles","Christopher Sciueref","Matt Routledge","Jane Thorne","Louis Mandylor","Terence Maynard","Greg Burridge","Michael Higgs","Damian Gallagher","Daniel Adegboyega","John Ioannou","Sofie Golding-Spittle","Joe Egan","Darren Swain","Lee Charles","Dominic Kinnaird","Ross O'Hennessy","Teresa Mahoney","Andrew Dunkelberger","Sam Hardy","Ivan Moy","Mark Sears","Phillip Ray Tommy"],"directors":["Jesse V. Johnson"],"images":[{"assetType":"HighResLandscape","assetTypes":["HighResLandscape"],"url":"http://62.179.125.152/SK/Images/hrl_3fa8387df870473fdacb1024635b52b2496b159c.jpg"},{"assetType":"HighResPortrait","assetTypes":["HighResPortrait"],"url":"http://62.179.125.152/SK/Images/hrp_19e3a660e637cd39e31046c284a66b3a95d698e4.jpg"},{"assetType":"boxCover","assetTypes":["boxCover"],"url":"http://62.179.125.152/SK/Images/bc_939160772e45a783fb3a19970696f5ebcb6e568b.jpg"},{"assetType":"boxart-small","assetTypes":["boxart-small"],"url":"http://62.179.125.152/SK/Images/bc_939160772e45a783fb3a19970696f5ebcb6e568b.jpg?w=75&h=108&mode=box"},{"assetType":"boxart-medium","assetTypes":["boxart-medium"],"url":"http://62.179.125.152/SK/Images/bc_939160772e45a783fb3a19970696f5ebcb6e568b.jpg?w=110&h=159&mode=box"},{"assetType":"boxart-xlarge","assetTypes":["boxart-xlarge"],"url":"http://62.179.125.152/SK/Images/bc_939160772e45a783fb3a19970696f5ebcb6e568b.jpg?w=210&h=303&mode=box"},{"assetType":"boxart-large","assetTypes":["boxart-large"],"url":"http://62.179.125.152/SK/Images/bc_939160772e45a783fb3a19970696f5ebcb6e568b.jpg?w=180&h=260&mode=box"}],"rootId":"crid:~~2F~~2Fport.cs~~2F122941980","parentalRatingDescription":[],"resolutions":[],"mediaGroupId":"crid:~~2F~~2Fport.cs~~2F122941980","shortDescription":"Během propustky z vězení za účelem návštěvy umírající matky v nemocnici zločinec Cain Burgess (Scott Adkins) unikne svým dozorcům a mizí v ulicích Londýna. Jde o epickou cestu krve a bolesti za...","mediaType":"FeatureFilm","year":"2019","videos":[],"videoStreams":[],"entitlements":["VIP","_OPEN_"],"currentProductIds":[],"currentTvodProductIds":[]},"rootId":"crid:~~2F~~2Fport.cs~~2F122941980","replayTvAvailable":true,"audioTracks":[],"ratings":[],"offersLatestExpirationDate":1676247300000,"replayTvStartOffset":0,"replayTvEndOffset":604800,"replayEnabledOnMobileClients":true,"replaySource":"cloud","isGoReplayableViaExternalApp":false}`) + data: JSON.parse( + '{"id":"crid:~~2F~~2Fport.cs~~2F122941980,imi:7ca159c917344e0dd3fbe1cd8db5ff8043d96a78","startTime":1675719300000,"endTime":1675724700000,"actualStartTime":1675719300000,"actualEndTime":1675724700000,"expirationDate":1676324100000,"stationId":"lgi-obolite-sk-prod-master:10024","imi":"imi:7ca159c917344e0dd3fbe1cd8db5ff8043d96a78","scCridImi":"crid:~~2F~~2Fport.cs~~2F122941980,imi:7ca159c917344e0dd3fbe1cd8db5ff8043d96a78","mediaGroupId":"crid:~~2F~~2Fport.cs~~2F122941980","program":{"id":"crid:~~2F~~2Fport.cs~~2F122941980","title":"Avengement","description":"Během propustky z vězení za účelem návštěvy umírající matky v nemocnici zločinec Cain Burgess (Scott Adkins) unikne svým dozorcům a mizí v ulicích Londýna. Jde o epickou cestu krve a bolesti za...","longDescription":"Během propustky z vězení za účelem návštěvy umírající matky v nemocnici zločinec Cain Burgess (Scott Adkins) unikne svým dozorcům a mizí v ulicích Londýna. Jde o epickou cestu krve a bolesti za dosažením vytoužené pomsty na těch, kteří z něj udělali chladnokrevného vraha.","medium":"Movie","categories":[{"id":"lgi-obolite-sk-prod-master:genre-9","title":"Drama","scheme":"urn:libertyglobal:metadata:cs:ContentCS:2014_1"},{"id":"lgi-obolite-sk-prod-master:genre-33","title":"Akcia","scheme":"urn:libertyglobal:metadata:cs:ContentCS:2014_1"}],"isAdult":false,"parentalRating":"18","cast":["Scott Adkins","Craig Fairbrass","Thomas Turgoose","Nick Moran","Kierston Wareing","Leo Gregory","Mark Strange","Luke LaFontaine","Beau Fowler","Dan Styles","Christopher Sciueref","Matt Routledge","Jane Thorne","Louis Mandylor","Terence Maynard","Greg Burridge","Michael Higgs","Damian Gallagher","Daniel Adegboyega","John Ioannou","Sofie Golding-Spittle","Joe Egan","Darren Swain","Lee Charles","Dominic Kinnaird","Ross O\'Hennessy","Teresa Mahoney","Andrew Dunkelberger","Sam Hardy","Ivan Moy","Mark Sears","Phillip Ray Tommy"],"directors":["Jesse V. Johnson"],"images":[{"assetType":"HighResLandscape","assetTypes":["HighResLandscape"],"url":"http://62.179.125.152/SK/Images/hrl_3fa8387df870473fdacb1024635b52b2496b159c.jpg"},{"assetType":"HighResPortrait","assetTypes":["HighResPortrait"],"url":"http://62.179.125.152/SK/Images/hrp_19e3a660e637cd39e31046c284a66b3a95d698e4.jpg"},{"assetType":"boxCover","assetTypes":["boxCover"],"url":"http://62.179.125.152/SK/Images/bc_939160772e45a783fb3a19970696f5ebcb6e568b.jpg"},{"assetType":"boxart-small","assetTypes":["boxart-small"],"url":"http://62.179.125.152/SK/Images/bc_939160772e45a783fb3a19970696f5ebcb6e568b.jpg?w=75&h=108&mode=box"},{"assetType":"boxart-medium","assetTypes":["boxart-medium"],"url":"http://62.179.125.152/SK/Images/bc_939160772e45a783fb3a19970696f5ebcb6e568b.jpg?w=110&h=159&mode=box"},{"assetType":"boxart-xlarge","assetTypes":["boxart-xlarge"],"url":"http://62.179.125.152/SK/Images/bc_939160772e45a783fb3a19970696f5ebcb6e568b.jpg?w=210&h=303&mode=box"},{"assetType":"boxart-large","assetTypes":["boxart-large"],"url":"http://62.179.125.152/SK/Images/bc_939160772e45a783fb3a19970696f5ebcb6e568b.jpg?w=180&h=260&mode=box"}],"rootId":"crid:~~2F~~2Fport.cs~~2F122941980","parentalRatingDescription":[],"resolutions":[],"mediaGroupId":"crid:~~2F~~2Fport.cs~~2F122941980","shortDescription":"Během propustky z vězení za účelem návštěvy umírající matky v nemocnici zločinec Cain Burgess (Scott Adkins) unikne svým dozorcům a mizí v ulicích Londýna. Jde o epickou cestu krve a bolesti za...","mediaType":"FeatureFilm","year":"2019","videos":[],"videoStreams":[],"entitlements":["VIP","_OPEN_"],"currentProductIds":[],"currentTvodProductIds":[]},"rootId":"crid:~~2F~~2Fport.cs~~2F122941980","replayTvAvailable":true,"audioTracks":[],"ratings":[],"offersLatestExpirationDate":1676247300000,"replayTvStartOffset":0,"replayTvEndOffset":604800,"replayEnabledOnMobileClients":true,"replaySource":"cloud","isGoReplayableViaExternalApp":false}' + ) }) - } else if (url === 'https://legacy-static.oesp.horizon.tv/oesp/v4/SK/slk/web/listings/crid:~~2F~~2Fport.cs~~2F248281986,imi:e85129f9d1e211406a521df7a36f22237c22651b') { + } else if ( + url === + 'https://legacy-static.oesp.horizon.tv/oesp/v4/SK/slk/web/listings/crid:~~2F~~2Fport.cs~~2F248281986,imi:e85129f9d1e211406a521df7a36f22237c22651b' + ) { return Promise.resolve({ - data: JSON.parse(`{"id":"crid:~~2F~~2Fport.cs~~2F248281986,imi:e85129f9d1e211406a521df7a36f22237c22651b","startTime":1675744500000,"endTime":1675746000000,"actualStartTime":1675744500000,"actualEndTime":1675746000000,"expirationDate":1676349300000,"stationId":"lgi-obolite-sk-prod-master:10024","imi":"imi:e85129f9d1e211406a521df7a36f22237c22651b","scCridImi":"crid:~~2F~~2Fport.cs~~2F248281986,imi:e85129f9d1e211406a521df7a36f22237c22651b","mediaGroupId":"crid:~~2F~~2Fport.cs~~2F41764266","program":{"id":"crid:~~2F~~2Fport.cs~~2F248281986","title":"Zoom In","description":"Film/Kino","longDescription":"Film/Kino","medium":"TV","categories":[{"id":"lgi-obolite-sk-prod-master:genre-21","title":"Hudba a umenie","scheme":"urn:libertyglobal:metadata:cs:ContentCS:2014_1"},{"id":"lgi-obolite-sk-prod-master:genre-14","title":"Film","scheme":"urn:libertyglobal:metadata:cs:ContentCS:2014_1"}],"isAdult":false,"parentalRating":"9","cast":[],"directors":[],"images":[{"assetType":"HighResLandscape","assetTypes":["HighResLandscape"],"url":"http://62.179.125.152/SK/Images/hrl_cbed64b557e83227a2292604cbcae2d193877b1c.jpg"},{"assetType":"HighResPortrait","assetTypes":["HighResPortrait"],"url":"http://62.179.125.152/SK/Images/hrp_cfe405e669385365846b69196e1e94caa3e60de0.jpg"},{"assetType":"boxCover","assetTypes":["boxCover"],"url":"http://62.179.125.152/SK/Images/bc_cfe405e669385365846b69196e1e94caa3e60de0.jpg"},{"assetType":"boxart-small","assetTypes":["boxart-small"],"url":"http://62.179.125.152/SK/Images/bc_cfe405e669385365846b69196e1e94caa3e60de0.jpg?w=75&h=108&mode=box"},{"assetType":"boxart-medium","assetTypes":["boxart-medium"],"url":"http://62.179.125.152/SK/Images/bc_cfe405e669385365846b69196e1e94caa3e60de0.jpg?w=110&h=159&mode=box"},{"assetType":"boxart-xlarge","assetTypes":["boxart-xlarge"],"url":"http://62.179.125.152/SK/Images/bc_cfe405e669385365846b69196e1e94caa3e60de0.jpg?w=210&h=303&mode=box"},{"assetType":"boxart-large","assetTypes":["boxart-large"],"url":"http://62.179.125.152/SK/Images/bc_cfe405e669385365846b69196e1e94caa3e60de0.jpg?w=180&h=260&mode=box"}],"parentId":"crid:~~2F~~2Fport.cs~~2F41764266_series","rootId":"crid:~~2F~~2Fport.cs~~2F41764266","parentalRatingDescription":[],"resolutions":[],"mediaGroupId":"crid:~~2F~~2Fport.cs~~2F41764266","shortDescription":"Film/Kino","mediaType":"Episode","year":"2010","seriesEpisodeNumber":"1302070535","seriesNumber":"1302080520","videos":[],"videoStreams":[],"entitlements":["VIP","_OPEN_"],"currentProductIds":[],"currentTvodProductIds":[]},"parentId":"crid:~~2F~~2Fport.cs~~2F41764266_series","rootId":"crid:~~2F~~2Fport.cs~~2F41764266","replayTvAvailable":true,"audioTracks":[],"ratings":[],"offersLatestExpirationDate":1675746000000,"replayTvStartOffset":0,"replayTvEndOffset":604800,"replayEnabledOnMobileClients":true,"replaySource":"cloud","isGoReplayableViaExternalApp":false}`) + data: JSON.parse( + '{"id":"crid:~~2F~~2Fport.cs~~2F248281986,imi:e85129f9d1e211406a521df7a36f22237c22651b","startTime":1675744500000,"endTime":1675746000000,"actualStartTime":1675744500000,"actualEndTime":1675746000000,"expirationDate":1676349300000,"stationId":"lgi-obolite-sk-prod-master:10024","imi":"imi:e85129f9d1e211406a521df7a36f22237c22651b","scCridImi":"crid:~~2F~~2Fport.cs~~2F248281986,imi:e85129f9d1e211406a521df7a36f22237c22651b","mediaGroupId":"crid:~~2F~~2Fport.cs~~2F41764266","program":{"id":"crid:~~2F~~2Fport.cs~~2F248281986","title":"Zoom In","description":"Film/Kino","longDescription":"Film/Kino","medium":"TV","categories":[{"id":"lgi-obolite-sk-prod-master:genre-21","title":"Hudba a umenie","scheme":"urn:libertyglobal:metadata:cs:ContentCS:2014_1"},{"id":"lgi-obolite-sk-prod-master:genre-14","title":"Film","scheme":"urn:libertyglobal:metadata:cs:ContentCS:2014_1"}],"isAdult":false,"parentalRating":"9","cast":[],"directors":[],"images":[{"assetType":"HighResLandscape","assetTypes":["HighResLandscape"],"url":"http://62.179.125.152/SK/Images/hrl_cbed64b557e83227a2292604cbcae2d193877b1c.jpg"},{"assetType":"HighResPortrait","assetTypes":["HighResPortrait"],"url":"http://62.179.125.152/SK/Images/hrp_cfe405e669385365846b69196e1e94caa3e60de0.jpg"},{"assetType":"boxCover","assetTypes":["boxCover"],"url":"http://62.179.125.152/SK/Images/bc_cfe405e669385365846b69196e1e94caa3e60de0.jpg"},{"assetType":"boxart-small","assetTypes":["boxart-small"],"url":"http://62.179.125.152/SK/Images/bc_cfe405e669385365846b69196e1e94caa3e60de0.jpg?w=75&h=108&mode=box"},{"assetType":"boxart-medium","assetTypes":["boxart-medium"],"url":"http://62.179.125.152/SK/Images/bc_cfe405e669385365846b69196e1e94caa3e60de0.jpg?w=110&h=159&mode=box"},{"assetType":"boxart-xlarge","assetTypes":["boxart-xlarge"],"url":"http://62.179.125.152/SK/Images/bc_cfe405e669385365846b69196e1e94caa3e60de0.jpg?w=210&h=303&mode=box"},{"assetType":"boxart-large","assetTypes":["boxart-large"],"url":"http://62.179.125.152/SK/Images/bc_cfe405e669385365846b69196e1e94caa3e60de0.jpg?w=180&h=260&mode=box"}],"parentId":"crid:~~2F~~2Fport.cs~~2F41764266_series","rootId":"crid:~~2F~~2Fport.cs~~2F41764266","parentalRatingDescription":[],"resolutions":[],"mediaGroupId":"crid:~~2F~~2Fport.cs~~2F41764266","shortDescription":"Film/Kino","mediaType":"Episode","year":"2010","seriesEpisodeNumber":"1302070535","seriesNumber":"1302080520","videos":[],"videoStreams":[],"entitlements":["VIP","_OPEN_"],"currentProductIds":[],"currentTvodProductIds":[]},"parentId":"crid:~~2F~~2Fport.cs~~2F41764266_series","rootId":"crid:~~2F~~2Fport.cs~~2F41764266","replayTvAvailable":true,"audioTracks":[],"ratings":[],"offersLatestExpirationDate":1675746000000,"replayTvStartOffset":0,"replayTvEndOffset":604800,"replayEnabledOnMobileClients":true,"replaySource":"cloud","isGoReplayableViaExternalApp":false}' + ) }) - } else if (url === 'https://legacy-static.oesp.horizon.tv/oesp/v4/SK/slk/web/listings/crid:~~2F~~2Fport.cs~~2F1379541,imi:5f806a2a0bc13e9745e14907a27116c60ea2c6ad') { + } else if ( + url === + 'https://legacy-static.oesp.horizon.tv/oesp/v4/SK/slk/web/listings/crid:~~2F~~2Fport.cs~~2F1379541,imi:5f806a2a0bc13e9745e14907a27116c60ea2c6ad' + ) { return Promise.resolve({ - data: JSON.parse(`{"id":"crid:~~2F~~2Fport.cs~~2F1379541,imi:5f806a2a0bc13e9745e14907a27116c60ea2c6ad","startTime":1675761000000,"endTime":1675767600000,"actualStartTime":1675761000000,"actualEndTime":1675767600000,"expirationDate":1676365800000,"stationId":"lgi-obolite-sk-prod-master:10024","imi":"imi:5f806a2a0bc13e9745e14907a27116c60ea2c6ad","scCridImi":"crid:~~2F~~2Fport.cs~~2F1379541,imi:5f806a2a0bc13e9745e14907a27116c60ea2c6ad","mediaGroupId":"crid:~~2F~~2Fport.cs~~2F1379541","program":{"id":"crid:~~2F~~2Fport.cs~~2F1379541","title":"Studentka","description":"Ambiciózní vysokoškolačka Valentina (Sophie Marceau) studuje literaturu na pařížské Sorbonně a právě se připravuje k závěrečným zkouškám. Žádný odpočinek, žádné volno, žádné večírky, téměř žádný...","longDescription":"Ambiciózní vysokoškolačka Valentina (Sophie Marceau) studuje literaturu na pařížské Sorbonně a právě se připravuje k závěrečným zkouškám. Žádný odpočinek, žádné volno, žádné večírky, téměř žádný spánek a především a hlavně ... žádná láska! Věří, že jedině tak obstojí před zkušební komisí. Jednoho dne se však odehraje něco, s čím nepočítala. Potká charismatického hudebníka Neda - a bláznivě se zamiluje. V tuto chvíli stojí před osudovým rozhodnutím: zahodí roky obrovského studijního nasazení, nebo odmítne lásku? Nebo se snad dá obojí skloubit dohromady?","medium":"Movie","categories":[{"id":"lgi-obolite-sk-prod-master:genre-14","title":"Film","scheme":"urn:libertyglobal:metadata:cs:ContentCS:2014_1"},{"id":"lgi-obolite-sk-prod-master:genre-4","title":"Komédia","scheme":"urn:libertyglobal:metadata:cs:ContentCS:2014_1"}],"isAdult":false,"parentalRating":"9","cast":["Sophie Marceauová","Vincent Lindon","Elisabeth Vitali","Elena Pompei","Jean-Claude Leguay","Brigitte Chamarande","Christian Pereira","Gérard Dacier","Roberto Attias","Beppe Chierici","Nathalie Mann","Anne Macina","Janine Souchon","Virginie Demians","Hugues Leforestier","Jacqueline Noëlle","Marc-André Brunet","Isabelle Caubère","André Chazel","Med Salah Cheurfi","Guillaume Corea","Eric Denize","Gilles Gaston-Dreyfuss","Benoît Gourley","Marc Innocenti","Najim Laouriga","Laurent Ledermann","Philippe Maygal","Dominique Pifarely","Ysé Tran"],"directors":["Francis De Gueltz","Dominique Talmon","Claude Pinoteau"],"images":[{"assetType":"HighResLandscape","assetTypes":["HighResLandscape"],"url":"http://62.179.125.152/SK/Images/hrl_a8abceaa59bbb0aae8031dcdd5deba03aba8a100.jpg"},{"assetType":"HighResPortrait","assetTypes":["HighResPortrait"],"url":"http://62.179.125.152/SK/Images/hrp_72b11621270454812ac8474698fc75670db4a49d.jpg"},{"assetType":"boxCover","assetTypes":["boxCover"],"url":"http://62.179.125.152/SK/Images/bc_72b11621270454812ac8474698fc75670db4a49d.jpg"},{"assetType":"boxart-small","assetTypes":["boxart-small"],"url":"http://62.179.125.152/SK/Images/bc_72b11621270454812ac8474698fc75670db4a49d.jpg?w=75&h=108&mode=box"},{"assetType":"boxart-medium","assetTypes":["boxart-medium"],"url":"http://62.179.125.152/SK/Images/bc_72b11621270454812ac8474698fc75670db4a49d.jpg?w=110&h=159&mode=box"},{"assetType":"boxart-xlarge","assetTypes":["boxart-xlarge"],"url":"http://62.179.125.152/SK/Images/bc_72b11621270454812ac8474698fc75670db4a49d.jpg?w=210&h=303&mode=box"},{"assetType":"boxart-large","assetTypes":["boxart-large"],"url":"http://62.179.125.152/SK/Images/bc_72b11621270454812ac8474698fc75670db4a49d.jpg?w=180&h=260&mode=box"}],"rootId":"crid:~~2F~~2Fport.cs~~2F1379541","parentalRatingDescription":[],"resolutions":[],"mediaGroupId":"crid:~~2F~~2Fport.cs~~2F1379541","shortDescription":"Ambiciózní vysokoškolačka Valentina (Sophie Marceau) studuje literaturu na pařížské Sorbonně a právě se připravuje k závěrečným zkouškám. Žádný odpočinek, žádné volno, žádné večírky, téměř žádný...","mediaType":"FeatureFilm","year":"1988","videos":[],"videoStreams":[],"entitlements":["VIP","_OPEN_"],"currentProductIds":[],"currentTvodProductIds":[]},"rootId":"crid:~~2F~~2Fport.cs~~2F1379541","replayTvAvailable":true,"audioTracks":[],"ratings":[],"offersLatestExpirationDate":1675767600000,"replayTvStartOffset":0,"replayTvEndOffset":604800,"replayEnabledOnMobileClients":true,"replaySource":"cloud","isGoReplayableViaExternalApp":false}`) + data: JSON.parse( + '{"id":"crid:~~2F~~2Fport.cs~~2F1379541,imi:5f806a2a0bc13e9745e14907a27116c60ea2c6ad","startTime":1675761000000,"endTime":1675767600000,"actualStartTime":1675761000000,"actualEndTime":1675767600000,"expirationDate":1676365800000,"stationId":"lgi-obolite-sk-prod-master:10024","imi":"imi:5f806a2a0bc13e9745e14907a27116c60ea2c6ad","scCridImi":"crid:~~2F~~2Fport.cs~~2F1379541,imi:5f806a2a0bc13e9745e14907a27116c60ea2c6ad","mediaGroupId":"crid:~~2F~~2Fport.cs~~2F1379541","program":{"id":"crid:~~2F~~2Fport.cs~~2F1379541","title":"Studentka","description":"Ambiciózní vysokoškolačka Valentina (Sophie Marceau) studuje literaturu na pařížské Sorbonně a právě se připravuje k závěrečným zkouškám. Žádný odpočinek, žádné volno, žádné večírky, téměř žádný...","longDescription":"Ambiciózní vysokoškolačka Valentina (Sophie Marceau) studuje literaturu na pařížské Sorbonně a právě se připravuje k závěrečným zkouškám. Žádný odpočinek, žádné volno, žádné večírky, téměř žádný spánek a především a hlavně ... žádná láska! Věří, že jedině tak obstojí před zkušební komisí. Jednoho dne se však odehraje něco, s čím nepočítala. Potká charismatického hudebníka Neda - a bláznivě se zamiluje. V tuto chvíli stojí před osudovým rozhodnutím: zahodí roky obrovského studijního nasazení, nebo odmítne lásku? Nebo se snad dá obojí skloubit dohromady?","medium":"Movie","categories":[{"id":"lgi-obolite-sk-prod-master:genre-14","title":"Film","scheme":"urn:libertyglobal:metadata:cs:ContentCS:2014_1"},{"id":"lgi-obolite-sk-prod-master:genre-4","title":"Komédia","scheme":"urn:libertyglobal:metadata:cs:ContentCS:2014_1"}],"isAdult":false,"parentalRating":"9","cast":["Sophie Marceauová","Vincent Lindon","Elisabeth Vitali","Elena Pompei","Jean-Claude Leguay","Brigitte Chamarande","Christian Pereira","Gérard Dacier","Roberto Attias","Beppe Chierici","Nathalie Mann","Anne Macina","Janine Souchon","Virginie Demians","Hugues Leforestier","Jacqueline Noëlle","Marc-André Brunet","Isabelle Caubère","André Chazel","Med Salah Cheurfi","Guillaume Corea","Eric Denize","Gilles Gaston-Dreyfuss","Benoît Gourley","Marc Innocenti","Najim Laouriga","Laurent Ledermann","Philippe Maygal","Dominique Pifarely","Ysé Tran"],"directors":["Francis De Gueltz","Dominique Talmon","Claude Pinoteau"],"images":[{"assetType":"HighResLandscape","assetTypes":["HighResLandscape"],"url":"http://62.179.125.152/SK/Images/hrl_a8abceaa59bbb0aae8031dcdd5deba03aba8a100.jpg"},{"assetType":"HighResPortrait","assetTypes":["HighResPortrait"],"url":"http://62.179.125.152/SK/Images/hrp_72b11621270454812ac8474698fc75670db4a49d.jpg"},{"assetType":"boxCover","assetTypes":["boxCover"],"url":"http://62.179.125.152/SK/Images/bc_72b11621270454812ac8474698fc75670db4a49d.jpg"},{"assetType":"boxart-small","assetTypes":["boxart-small"],"url":"http://62.179.125.152/SK/Images/bc_72b11621270454812ac8474698fc75670db4a49d.jpg?w=75&h=108&mode=box"},{"assetType":"boxart-medium","assetTypes":["boxart-medium"],"url":"http://62.179.125.152/SK/Images/bc_72b11621270454812ac8474698fc75670db4a49d.jpg?w=110&h=159&mode=box"},{"assetType":"boxart-xlarge","assetTypes":["boxart-xlarge"],"url":"http://62.179.125.152/SK/Images/bc_72b11621270454812ac8474698fc75670db4a49d.jpg?w=210&h=303&mode=box"},{"assetType":"boxart-large","assetTypes":["boxart-large"],"url":"http://62.179.125.152/SK/Images/bc_72b11621270454812ac8474698fc75670db4a49d.jpg?w=180&h=260&mode=box"}],"rootId":"crid:~~2F~~2Fport.cs~~2F1379541","parentalRatingDescription":[],"resolutions":[],"mediaGroupId":"crid:~~2F~~2Fport.cs~~2F1379541","shortDescription":"Ambiciózní vysokoškolačka Valentina (Sophie Marceau) studuje literaturu na pařížské Sorbonně a právě se připravuje k závěrečným zkouškám. Žádný odpočinek, žádné volno, žádné večírky, téměř žádný...","mediaType":"FeatureFilm","year":"1988","videos":[],"videoStreams":[],"entitlements":["VIP","_OPEN_"],"currentProductIds":[],"currentTvodProductIds":[]},"rootId":"crid:~~2F~~2Fport.cs~~2F1379541","replayTvAvailable":true,"audioTracks":[],"ratings":[],"offersLatestExpirationDate":1675767600000,"replayTvStartOffset":0,"replayTvEndOffset":604800,"replayEnabledOnMobileClients":true,"replaySource":"cloud","isGoReplayableViaExternalApp":false}' + ) }) - } else if (url === 'https://legacy-static.oesp.horizon.tv/oesp/v4/SK/slk/web/listings/crid:~~2F~~2Fport.cs~~2F71927954,imi:f1b4b0285b72cf44cba74e1c62322a4c682385c7') { + } else if ( + url === + 'https://legacy-static.oesp.horizon.tv/oesp/v4/SK/slk/web/listings/crid:~~2F~~2Fport.cs~~2F71927954,imi:f1b4b0285b72cf44cba74e1c62322a4c682385c7' + ) { return Promise.resolve({ - data: JSON.parse(`{"id":"crid:~~2F~~2Fport.cs~~2F71927954,imi:f1b4b0285b72cf44cba74e1c62322a4c682385c7","startTime":1675785900000,"endTime":1675791900000,"actualStartTime":1675785900000,"actualEndTime":1675791900000,"expirationDate":1676390700000,"stationId":"lgi-obolite-sk-prod-master:10024","imi":"imi:f1b4b0285b72cf44cba74e1c62322a4c682385c7","scCridImi":"crid:~~2F~~2Fport.cs~~2F71927954,imi:f1b4b0285b72cf44cba74e1c62322a4c682385c7","mediaGroupId":"crid:~~2F~~2Fport.cs~~2F71927954","program":{"id":"crid:~~2F~~2Fport.cs~~2F71927954","title":"Zilionáři","description":"David (Zach Galifianakis) je nekomplikovaný muž, který uvízl v monotónním životě. Den co den usedá za volant svého obrněného automobilu, aby odvážel obrovské sumy peněz jiných lidí. Jediným...","longDescription":"David (Zach Galifianakis) je nekomplikovaný muž, který uvízl v monotónním životě. Den co den usedá za volant svého obrněného automobilu, aby odvážel obrovské sumy peněz jiných lidí. Jediným vzrušujícím momentem v jeho životě je flirtování s kolegyní Kelly (Kristen Wiig), která ho však brzy zatáhne do těžko uvěřitelného dobrodružství. Skupinka nepříliš inteligentních loserů, pod vedením Steva (Owen Wilson), plánuje vyloupit banku a David jim v tom má samozřejmě pomoci. Navzdory absolutně amatérskému plánu se ale stane nemožné a oni mají najednou v kapse 17 miliónů dolarů. A protože tato partička je opravdu bláznivá, začne je hned ve velkém roztáčet. Peníze létají vzduchem za luxusní a kolikrát i zbytečné věci, ale nedochází jim, že pro policii tak zanechávají jasné stopy...","medium":"Movie","categories":[{"id":"lgi-obolite-sk-prod-master:genre-9","title":"Drama","scheme":"urn:libertyglobal:metadata:cs:ContentCS:2014_1"},{"id":"lgi-obolite-sk-prod-master:genre-33","title":"Akcia","scheme":"urn:libertyglobal:metadata:cs:ContentCS:2014_1"}],"isAdult":false,"parentalRating":"15","cast":["Zach Galifianakis","Kristen Wiigová","Owen Wilson","Kate McKinnon","Leslie Jones","Jason Sudeikis","Ross Kimball","Devin Ratray","Mary Elizabeth Ellisová","Jon Daly","Ken Marino","Daniel Zacapa","Tom Werme","Njema Williams","Nils Cruz","Michael Fraguada","Christian Gonzalez","Candace Blanchard","Karsten Friske","Dallas Edwards","Barry Ratcliffe","Shelton Grant","Laura Palka","Reegus Flenory","Wynn Reichert","Jill Jane Clements","Joseph S. Wilson","Jee An","Rhoda Griffisová","Nicole Dupre Sobchack"],"directors":["Scott August","Richard L. Fox","Michelle Malley-Campos","Sebastian Mazzola","Steven Ritzi","Pete Waterman","Jared Hess"],"images":[{"assetType":"HighResLandscape","assetTypes":["HighResLandscape"],"url":"http://62.179.125.152/SK/Images/hrl_fd098116bac1429318aaf5fdae498ce76e258782.jpg"},{"assetType":"HighResPortrait","assetTypes":["HighResPortrait"],"url":"http://62.179.125.152/SK/Images/hrp_6f857ae9375b3bcceb6353a5b35775f52cd85302.jpg"},{"assetType":"boxCover","assetTypes":["boxCover"],"url":"http://62.179.125.152/SK/Images/bc_3f5a24412c7f4f434094fa1147a304aa6a5ebda6.jpg"},{"assetType":"boxart-small","assetTypes":["boxart-small"],"url":"http://62.179.125.152/SK/Images/bc_3f5a24412c7f4f434094fa1147a304aa6a5ebda6.jpg?w=75&h=108&mode=box"},{"assetType":"boxart-medium","assetTypes":["boxart-medium"],"url":"http://62.179.125.152/SK/Images/bc_3f5a24412c7f4f434094fa1147a304aa6a5ebda6.jpg?w=110&h=159&mode=box"},{"assetType":"boxart-xlarge","assetTypes":["boxart-xlarge"],"url":"http://62.179.125.152/SK/Images/bc_3f5a24412c7f4f434094fa1147a304aa6a5ebda6.jpg?w=210&h=303&mode=box"},{"assetType":"boxart-large","assetTypes":["boxart-large"],"url":"http://62.179.125.152/SK/Images/bc_3f5a24412c7f4f434094fa1147a304aa6a5ebda6.jpg?w=180&h=260&mode=box"}],"rootId":"crid:~~2F~~2Fport.cs~~2F71927954","parentalRatingDescription":[],"resolutions":[],"mediaGroupId":"crid:~~2F~~2Fport.cs~~2F71927954","shortDescription":"David (Zach Galifianakis) je nekomplikovaný muž, který uvízl v monotónním životě. Den co den usedá za volant svého obrněného automobilu, aby odvážel obrovské sumy peněz jiných lidí. Jediným...","mediaType":"FeatureFilm","year":"2016","videos":[],"videoStreams":[],"entitlements":["VIP","_OPEN_"],"currentProductIds":[],"currentTvodProductIds":[]},"rootId":"crid:~~2F~~2Fport.cs~~2F71927954","replayTvAvailable":true,"audioTracks":[],"ratings":[],"offersLatestExpirationDate":1676187900000,"replayTvStartOffset":0,"replayTvEndOffset":604800,"replayEnabledOnMobileClients":true,"replaySource":"cloud","isGoReplayableViaExternalApp":false}`) + data: JSON.parse( + '{"id":"crid:~~2F~~2Fport.cs~~2F71927954,imi:f1b4b0285b72cf44cba74e1c62322a4c682385c7","startTime":1675785900000,"endTime":1675791900000,"actualStartTime":1675785900000,"actualEndTime":1675791900000,"expirationDate":1676390700000,"stationId":"lgi-obolite-sk-prod-master:10024","imi":"imi:f1b4b0285b72cf44cba74e1c62322a4c682385c7","scCridImi":"crid:~~2F~~2Fport.cs~~2F71927954,imi:f1b4b0285b72cf44cba74e1c62322a4c682385c7","mediaGroupId":"crid:~~2F~~2Fport.cs~~2F71927954","program":{"id":"crid:~~2F~~2Fport.cs~~2F71927954","title":"Zilionáři","description":"David (Zach Galifianakis) je nekomplikovaný muž, který uvízl v monotónním životě. Den co den usedá za volant svého obrněného automobilu, aby odvážel obrovské sumy peněz jiných lidí. Jediným...","longDescription":"David (Zach Galifianakis) je nekomplikovaný muž, který uvízl v monotónním životě. Den co den usedá za volant svého obrněného automobilu, aby odvážel obrovské sumy peněz jiných lidí. Jediným vzrušujícím momentem v jeho životě je flirtování s kolegyní Kelly (Kristen Wiig), která ho však brzy zatáhne do těžko uvěřitelného dobrodružství. Skupinka nepříliš inteligentních loserů, pod vedením Steva (Owen Wilson), plánuje vyloupit banku a David jim v tom má samozřejmě pomoci. Navzdory absolutně amatérskému plánu se ale stane nemožné a oni mají najednou v kapse 17 miliónů dolarů. A protože tato partička je opravdu bláznivá, začne je hned ve velkém roztáčet. Peníze létají vzduchem za luxusní a kolikrát i zbytečné věci, ale nedochází jim, že pro policii tak zanechávají jasné stopy...","medium":"Movie","categories":[{"id":"lgi-obolite-sk-prod-master:genre-9","title":"Drama","scheme":"urn:libertyglobal:metadata:cs:ContentCS:2014_1"},{"id":"lgi-obolite-sk-prod-master:genre-33","title":"Akcia","scheme":"urn:libertyglobal:metadata:cs:ContentCS:2014_1"}],"isAdult":false,"parentalRating":"15","cast":["Zach Galifianakis","Kristen Wiigová","Owen Wilson","Kate McKinnon","Leslie Jones","Jason Sudeikis","Ross Kimball","Devin Ratray","Mary Elizabeth Ellisová","Jon Daly","Ken Marino","Daniel Zacapa","Tom Werme","Njema Williams","Nils Cruz","Michael Fraguada","Christian Gonzalez","Candace Blanchard","Karsten Friske","Dallas Edwards","Barry Ratcliffe","Shelton Grant","Laura Palka","Reegus Flenory","Wynn Reichert","Jill Jane Clements","Joseph S. Wilson","Jee An","Rhoda Griffisová","Nicole Dupre Sobchack"],"directors":["Scott August","Richard L. Fox","Michelle Malley-Campos","Sebastian Mazzola","Steven Ritzi","Pete Waterman","Jared Hess"],"images":[{"assetType":"HighResLandscape","assetTypes":["HighResLandscape"],"url":"http://62.179.125.152/SK/Images/hrl_fd098116bac1429318aaf5fdae498ce76e258782.jpg"},{"assetType":"HighResPortrait","assetTypes":["HighResPortrait"],"url":"http://62.179.125.152/SK/Images/hrp_6f857ae9375b3bcceb6353a5b35775f52cd85302.jpg"},{"assetType":"boxCover","assetTypes":["boxCover"],"url":"http://62.179.125.152/SK/Images/bc_3f5a24412c7f4f434094fa1147a304aa6a5ebda6.jpg"},{"assetType":"boxart-small","assetTypes":["boxart-small"],"url":"http://62.179.125.152/SK/Images/bc_3f5a24412c7f4f434094fa1147a304aa6a5ebda6.jpg?w=75&h=108&mode=box"},{"assetType":"boxart-medium","assetTypes":["boxart-medium"],"url":"http://62.179.125.152/SK/Images/bc_3f5a24412c7f4f434094fa1147a304aa6a5ebda6.jpg?w=110&h=159&mode=box"},{"assetType":"boxart-xlarge","assetTypes":["boxart-xlarge"],"url":"http://62.179.125.152/SK/Images/bc_3f5a24412c7f4f434094fa1147a304aa6a5ebda6.jpg?w=210&h=303&mode=box"},{"assetType":"boxart-large","assetTypes":["boxart-large"],"url":"http://62.179.125.152/SK/Images/bc_3f5a24412c7f4f434094fa1147a304aa6a5ebda6.jpg?w=180&h=260&mode=box"}],"rootId":"crid:~~2F~~2Fport.cs~~2F71927954","parentalRatingDescription":[],"resolutions":[],"mediaGroupId":"crid:~~2F~~2Fport.cs~~2F71927954","shortDescription":"David (Zach Galifianakis) je nekomplikovaný muž, který uvízl v monotónním životě. Den co den usedá za volant svého obrněného automobilu, aby odvážel obrovské sumy peněz jiných lidí. Jediným...","mediaType":"FeatureFilm","year":"2016","videos":[],"videoStreams":[],"entitlements":["VIP","_OPEN_"],"currentProductIds":[],"currentTvodProductIds":[]},"rootId":"crid:~~2F~~2Fport.cs~~2F71927954","replayTvAvailable":true,"audioTracks":[],"ratings":[],"offersLatestExpirationDate":1676187900000,"replayTvStartOffset":0,"replayTvEndOffset":604800,"replayEnabledOnMobileClients":true,"replaySource":"cloud","isGoReplayableViaExternalApp":false}' + ) }) - } else { return Promise.resolve({ data: '' }) } @@ -74,11 +106,9 @@ it('can parse response', done => { start: '2023-02-06T21:35:00.000Z', stop: '2023-02-06T23:05:00.000Z', title: 'Avengement', - description: `Během propustky z vězení za účelem návštěvy umírající matky v nemocnici zločinec Cain Burgess (Scott Adkins) unikne svým dozorcům a mizí v ulicích Londýna. Jde o epickou cestu krve a bolesti za dosažením vytoužené pomsty na těch, kteří z něj udělali chladnokrevného vraha.`, - category: [ - 'Drama', - 'Akcia' - ], + description: + 'Během propustky z vězení za účelem návštěvy umírající matky v nemocnici zločinec Cain Burgess (Scott Adkins) unikne svým dozorcům a mizí v ulicích Londýna. Jde o epickou cestu krve a bolesti za dosažením vytoužené pomsty na těch, kteří z něj udělali chladnokrevného vraha.', + category: ['Drama', 'Akcia'], directors: ['Jesse V. Johnson'], actors: [ 'Scott Adkins', @@ -106,7 +136,7 @@ it('can parse response', done => { 'Darren Swain', 'Lee Charles', 'Dominic Kinnaird', - `Ross O'Hennessy`, + "Ross O'Hennessy", 'Teresa Mahoney', 'Andrew Dunkelberger', 'Sam Hardy', @@ -128,45 +158,42 @@ it('can parse response', done => { start: '2023-02-07T09:10:00.000Z', stop: '2023-02-07T11:00:00.000Z', title: 'Studentka', - description: 'Ambiciózní vysokoškolačka Valentina (Sophie Marceau) studuje literaturu na pařížské Sorbonně a právě se připravuje k závěrečným zkouškám. Žádný odpočinek, žádné volno, žádné večírky, téměř žádný spánek a především a hlavně ... žádná láska! Věří, že jedině tak obstojí před zkušební komisí. Jednoho dne se však odehraje něco, s čím nepočítala. Potká charismatického hudebníka Neda - a bláznivě se zamiluje. V tuto chvíli stojí před osudovým rozhodnutím: zahodí roky obrovského studijního nasazení, nebo odmítne lásku? Nebo se snad dá obojí skloubit dohromady?', + description: + 'Ambiciózní vysokoškolačka Valentina (Sophie Marceau) studuje literaturu na pařížské Sorbonně a právě se připravuje k závěrečným zkouškám. Žádný odpočinek, žádné volno, žádné večírky, téměř žádný spánek a především a hlavně ... žádná láska! Věří, že jedině tak obstojí před zkušební komisí. Jednoho dne se však odehraje něco, s čím nepočítala. Potká charismatického hudebníka Neda - a bláznivě se zamiluje. V tuto chvíli stojí před osudovým rozhodnutím: zahodí roky obrovského studijního nasazení, nebo odmítne lásku? Nebo se snad dá obojí skloubit dohromady?', category: ['Film', 'Komédia'], actors: [ - "Sophie Marceauová", - "Vincent Lindon", - "Elisabeth Vitali", - "Elena Pompei", - "Jean-Claude Leguay", - "Brigitte Chamarande", - "Christian Pereira", - "Gérard Dacier", - "Roberto Attias", - "Beppe Chierici", - "Nathalie Mann", - "Anne Macina", - "Janine Souchon", - "Virginie Demians", - "Hugues Leforestier", - "Jacqueline Noëlle", - "Marc-André Brunet", - "Isabelle Caubère", - "André Chazel", - "Med Salah Cheurfi", - "Guillaume Corea", - "Eric Denize", - "Gilles Gaston-Dreyfuss", - "Benoît Gourley", - "Marc Innocenti", - "Najim Laouriga", - "Laurent Ledermann", - "Philippe Maygal", - "Dominique Pifarely", - "Ysé Tran" - ], - directors: [ - "Francis De Gueltz", - "Dominique Talmon", - "Claude Pinoteau" + 'Sophie Marceauová', + 'Vincent Lindon', + 'Elisabeth Vitali', + 'Elena Pompei', + 'Jean-Claude Leguay', + 'Brigitte Chamarande', + 'Christian Pereira', + 'Gérard Dacier', + 'Roberto Attias', + 'Beppe Chierici', + 'Nathalie Mann', + 'Anne Macina', + 'Janine Souchon', + 'Virginie Demians', + 'Hugues Leforestier', + 'Jacqueline Noëlle', + 'Marc-André Brunet', + 'Isabelle Caubère', + 'André Chazel', + 'Med Salah Cheurfi', + 'Guillaume Corea', + 'Eric Denize', + 'Gilles Gaston-Dreyfuss', + 'Benoît Gourley', + 'Marc Innocenti', + 'Najim Laouriga', + 'Laurent Ledermann', + 'Philippe Maygal', + 'Dominique Pifarely', + 'Ysé Tran' ], + directors: ['Francis De Gueltz', 'Dominique Talmon', 'Claude Pinoteau'], date: '1988' }, { @@ -177,57 +204,57 @@ it('can parse response', done => { 'David (Zach Galifianakis) je nekomplikovaný muž, který uvízl v monotónním životě. Den co den usedá za volant svého obrněného automobilu, aby odvážel obrovské sumy peněz jiných lidí. Jediným vzrušujícím momentem v jeho životě je flirtování s kolegyní Kelly (Kristen Wiig), která ho však brzy zatáhne do těžko uvěřitelného dobrodružství. Skupinka nepříliš inteligentních loserů, pod vedením Steva (Owen Wilson), plánuje vyloupit banku a David jim v tom má samozřejmě pomoci. Navzdory absolutně amatérskému plánu se ale stane nemožné a oni mají najednou v kapse 17 miliónů dolarů. A protože tato partička je opravdu bláznivá, začne je hned ve velkém roztáčet. Peníze létají vzduchem za luxusní a kolikrát i zbytečné věci, ale nedochází jim, že pro policii tak zanechávají jasné stopy...', category: ['Drama', 'Akcia'], actors: [ - "Zach Galifianakis", - "Kristen Wiigová", - "Owen Wilson", - "Kate McKinnon", - "Leslie Jones", - "Jason Sudeikis", - "Ross Kimball", - "Devin Ratray", - "Mary Elizabeth Ellisová", - "Jon Daly", - "Ken Marino", - "Daniel Zacapa", - "Tom Werme", - "Njema Williams", - "Nils Cruz", - "Michael Fraguada", - "Christian Gonzalez", - "Candace Blanchard", - "Karsten Friske", - "Dallas Edwards", - "Barry Ratcliffe", - "Shelton Grant", - "Laura Palka", - "Reegus Flenory", - "Wynn Reichert", - "Jill Jane Clements", - "Joseph S. Wilson", - "Jee An", - "Rhoda Griffisová", - "Nicole Dupre Sobchack" + 'Zach Galifianakis', + 'Kristen Wiigová', + 'Owen Wilson', + 'Kate McKinnon', + 'Leslie Jones', + 'Jason Sudeikis', + 'Ross Kimball', + 'Devin Ratray', + 'Mary Elizabeth Ellisová', + 'Jon Daly', + 'Ken Marino', + 'Daniel Zacapa', + 'Tom Werme', + 'Njema Williams', + 'Nils Cruz', + 'Michael Fraguada', + 'Christian Gonzalez', + 'Candace Blanchard', + 'Karsten Friske', + 'Dallas Edwards', + 'Barry Ratcliffe', + 'Shelton Grant', + 'Laura Palka', + 'Reegus Flenory', + 'Wynn Reichert', + 'Jill Jane Clements', + 'Joseph S. Wilson', + 'Jee An', + 'Rhoda Griffisová', + 'Nicole Dupre Sobchack' ], directors: [ - "Scott August", - "Richard L. Fox", - "Michelle Malley-Campos", - "Sebastian Mazzola", - "Steven Ritzi", - "Pete Waterman", - "Jared Hess" + 'Scott August', + 'Richard L. Fox', + 'Michelle Malley-Campos', + 'Sebastian Mazzola', + 'Steven Ritzi', + 'Pete Waterman', + 'Jared Hess' ], date: '2016' } - ]) - done() - }) - .catch(done) + ]) + done() + }) + .catch(done) }) it('can handle empty guide', done => { parser({ - content: `[{"type":"PATH_PARAM","code":"period","reason":"INVALID"}]`, + content: '[{"type":"PATH_PARAM","code":"period","reason":"INVALID"}]', channel, date }) diff --git a/sites/i.mjh.nz/i.mjh.nz.config.js b/sites/i.mjh.nz/i.mjh.nz.config.js index 084748e9..0f81dbf6 100644 --- a/sites/i.mjh.nz/i.mjh.nz.config.js +++ b/sites/i.mjh.nz/i.mjh.nz.config.js @@ -13,7 +13,6 @@ module.exports = { site: 'i.mjh.nz', days: 2, request: { - timeout: 30000, // 30s cache: { ttl: 3 * 60 * 60 * 1000 // 3h }, @@ -24,7 +23,7 @@ module.exports = { return `${API_ENDPOINT}/${path}.xml` }, - parser: function ({ content, channel, date, cached }) { + parser: function ({ content, channel, date }) { const items = parseItems(content, channel, date) let programs = items.map(item => { @@ -94,7 +93,7 @@ function parseItems(content, channel, date) { try { const curr_day = date const next_day = date.add(1, 'd') - const [_, site_id] = channel.site_id.split('#') + const [, site_id] = channel.site_id.split('#') const data = parser.parse(content) if (!data || !Array.isArray(data.programs)) return [] diff --git a/sites/i.mjh.nz/i.mjh.nz.test.js b/sites/i.mjh.nz/i.mjh.nz.test.js index 678eb70c..c5ba8bc8 100644 --- a/sites/i.mjh.nz/i.mjh.nz.test.js +++ b/sites/i.mjh.nz/i.mjh.nz.test.js @@ -1,5 +1,5 @@ // npm run channels:parse -- --config=./sites/i.mjh.nz/i.mjh.nz.config.js --output=./sites/i.mjh.nz/i.mjh.nz_pluto.channels.xml --set=path:PlutoTV/all -// npx epg-grabber --config=sites/i.mjh.nz/i.mjh.nz.config.js --channels=sites/i.mjh.nz/i.mjh.nz_plex.channels.xml --output=guide.xml +// npm run grab -- --site=i.mjh.nz const { parser, url } = require('./i.mjh.nz.config.js') const fs = require('fs') @@ -42,7 +42,7 @@ it('can parse response', () => { it('can handle empty guide', () => { const result = parser({ - content: `404: Not Found`, + content: '404: Not Found', channel, date }) diff --git a/sites/i.mjh.nz/i.mjh.nz_foxtel.channels.xml b/sites/i.mjh.nz/i.mjh.nz_foxtel.channels.xml index c92ec090..606dfef1 100644 --- a/sites/i.mjh.nz/i.mjh.nz_foxtel.channels.xml +++ b/sites/i.mjh.nz/i.mjh.nz_foxtel.channels.xml @@ -1,88 +1,86 @@ - - - A&E - Animal Planet - BBC Earth - BBC First - UKTV - BBC World News - beIN SPORTS 1 - beIN SPORTS 2 - beIN SPORTS 3 - Bloomberg Television - Boomerang - BoxSets - Cartoon Network - CBeebies - Club MTV - CMT - CNBC - CNN International - CRIME+INVESTIGATION - Discovery Channel - Discovery Turbo - DreamWorks - E! - ESPN2 - ESPN - FOX8 - FOX ARENA - FOX Classics - FOX Comedy - FOX CRICKET - FOX Crime - FOX DOCOS - FOX Footy - FOX Funny - FOX League - FOX News - FOX One - FOX Sci Fi - FOX SHOWCASE - FOX Sleuth - Fox Sports 503 - Fox Sports 505 - Fox Sports 506 - Fox Sports More+ - FOX SPORTS NEWS - Movies Action - Movies Comedy - Movies Drama - Movies Family - Movies Greats - Movies Hits - Movies Kids - Movies Premiere - Movies Romance - Movies Thriller - GOOD. - HISTORY - Investigation Discovery - LifeStyle - LifeStyle Food - LifeStyle Home - LMN - MTV - MTV Classic - MTV Hits - National Geographic - Nat Geo WILD - NHK World - Nickelodeon - Nick Jr. - Nick Music - SKY NEWS UK - SKY NEWS - Sky News Extra - Sky Racing 1 - Sky Racing 2 - Sky Racing Thoroughbred Central - TLC - TVSN - Universal TV - - - - - + + + + + A&E + Animal Planet + BBC Earth + BBC First + UKTV + BBC World News + beIN SPORTS 1 + beIN SPORTS 2 + beIN SPORTS 3 + Bloomberg Television + Boomerang + BoxSets + Cartoon Network + CBeebies + Club MTV + CMT + CNBC + CNN International + CRIME+INVESTIGATION + Discovery Channel + Discovery Turbo + DreamWorks + E! + ESPN2 + ESPN + FOX8 + FOX ARENA + FOX Classics + FOX Comedy + FOX CRICKET + FOX Crime + FOX DOCOS + FOX Footy + FOX Funny + FOX League + FOX News + FOX One + FOX Sci Fi + FOX SHOWCASE + FOX Sleuth + Fox Sports 503 + Fox Sports 505 + Fox Sports 506 + Fox Sports More+ + FOX SPORTS NEWS + Movies Action + Movies Comedy + Movies Drama + Movies Family + Movies Greats + Movies Hits + Movies Kids + Movies Premiere + Movies Romance + Movies Thriller + GOOD. + HISTORY + Investigation Discovery + LifeStyle + LifeStyle Food + LifeStyle Home + LMN + MTV + MTV Classic + MTV Hits + National Geographic + Nat Geo WILD + NHK World + Nickelodeon + Nick Jr. + Nick Music + SKY NEWS UK + SKY NEWS + Sky News Extra + Sky Racing 1 + Sky Racing 2 + Sky Racing Thoroughbred Central + TLC + TVSN + Universal TV + diff --git a/sites/i.mjh.nz/i.mjh.nz_plex.channels.xml b/sites/i.mjh.nz/i.mjh.nz_plex.channels.xml index 41007070..5659de73 100644 --- a/sites/i.mjh.nz/i.mjh.nz_plex.channels.xml +++ b/sites/i.mjh.nz/i.mjh.nz_plex.channels.xml @@ -1,332 +1,330 @@ - - - 24 Hour Free Movies - ACL Cornhole TV - AFV Family - All Reality WE tv - AMC Thrillers - Antiques Roadshow UK - AsianCrush - AXS TV NOW - BABY SHARK TV - BACKSTAGE - BBC Food - beIN SPORTS XTRA - Bloomberg Quicktake - Camp Spoopy - Canela TV - Chicken Soup for the Soul - ChiveTV - Choppertown - CineLife - CINEPRIDE - Cine Sureño - Comedy Dynamics - CONtv - CONtv Anime - Cooking Panda - Crackle - Crime 360 - Dark Matter TV - Discover Film - Docurama - Dove - Edge Sport - Electric Now - Entrepreneur TV - Estrella News - Euronews Français - Euronews Deutsch - Euronews Italiano - Euronews Portuguese - Euronews Español - FailArmy - Fight Network - FrightFlix - Fubo Sports Network - FUEL TV - Galxy TV - Game Show Central - GFN TV - Glewed TV - GoTraveler - Gravitas Movies - GUSTOTV - Hallmark Movies & More - Hard Knocks - Hi-YAH! - Humor Mill - IMPACT Wrestling - Johnny Carson TV - Journy - Judge Faith - Juntos TV - Kidoodle TV - KidsFlix - Law & Crime - Love Nature - Made In Hollywood - MagellanTV NOW - Maverick Black Cinema - MAVTV Select - MHz Now - Midnight Pulp - Motorvision TV - MOVIESPHERE - MST3K - NBC News NOW - News 12 New York - Newsmax TV - Newsy - Nosey - Nosey Casos - Nosey Escándalos - Outdoor America - Outside - Party Tyme Karaoke - Pattrn - People are Awesome - PeopleTV - pocket.watch - Popstar! TV - QwestTV Classical - QwestTV Jazz & Beyond - QwestTV Mix - Real Nosey - Real Stories - RetroCrush - Reuters TV - Revry - RevryNews - Runtime - Ryan and Friends - Samuel Goldwyn Channel - Samuel Goldwyn Classics - Shorts TV - Shout! Factory TV Stream - Skills + Thrills - Slightly Off IFC - Sony Canal Novelas - So...Real - So Yummy - SportsGrid - Stadium - Stingray Classica Stream - Stingray CMusic - Stingray DJAZZ - Stingray Karaoke - Stingray Naturescape - Stories by AMC - Surf Now TV - Tankee - Tastemade - TG Junior - The Archive - The Boat Show - The Bob Ross Channel - The Carol Burnett Show - The Design Network - The Film Detective - The Pet Collective - The Preview Channel - This Old House - Times Now Navbharat - TODAY All Day - TokuSHOUTsu - Top Cine - Unbeaten - Unidentified - USA TODAY - USA TODAY Sportswire - Us Weekly TV - VICE - Wanted: Dead or Alive - Watch it Kid - Watch it SCREAM - Waypoint TV - WeatherSpy - WildEarth - Wonder - Wu Tang Collection - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 24 Hour Free Movies + ACL Cornhole TV + AFV Family + All Reality WE tv + AMC Thrillers + Antiques Roadshow UK + AsianCrush + AXS TV NOW + BABY SHARK TV + BACKSTAGE + BBC Food + beIN SPORTS XTRA + Bloomberg Quicktake + Camp Spoopy + Canela TV + Chicken Soup for the Soul + ChiveTV + Choppertown + CineLife + CINEPRIDE + Cine Sureño + Comedy Dynamics + CONtv + CONtv Anime + Cooking Panda + Crackle + Crime 360 + Dark Matter TV + Discover Film + Docurama + Dove + Edge Sport + Electric Now + Entrepreneur TV + Estrella News + Euronews Français + Euronews Deutsch + Euronews Italiano + Euronews Portuguese + Euronews Español + FailArmy + Fight Network + FrightFlix + Fubo Sports Network + FUEL TV + Galxy TV + Game Show Central + GFN TV + Glewed TV + GoTraveler + Gravitas Movies + GUSTOTV + Hallmark Movies & More + Hard Knocks + Hi-YAH! + Humor Mill + IMPACT Wrestling + Johnny Carson TV + Journy + Judge Faith + Kidoodle TV + KidsFlix + Law & Crime + Love Nature + Made In Hollywood + MagellanTV NOW + Maverick Black Cinema + MAVTV Select + MHz Now + Midnight Pulp + Motorvision TV + MOVIESPHERE + MST3K + NBC News NOW + News 12 New York + Newsmax TV + Newsy + Nosey + Nosey Casos + Nosey Escándalos + Outdoor America + Outside + Party Tyme Karaoke + Pattrn + People are Awesome + PeopleTV + pocket.watch + Popstar! TV + QwestTV Classical + QwestTV Jazz & Beyond + QwestTV Mix + Real Nosey + Real Stories + RetroCrush + Reuters TV + Revry + RevryNews + Runtime + Ryan and Friends + Samuel Goldwyn Channel + Samuel Goldwyn Classics + Shorts TV + Shout! Factory TV Stream + Skills + Thrills + Slightly Off IFC + Sony Canal Novelas + So...Real + So Yummy + SportsGrid + Stadium + Stingray Classica Stream + Stingray CMusic + Stingray DJAZZ + Stingray Karaoke + Stingray Naturescape + Stories by AMC + Surf Now TV + Tankee + Tastemade + TG Junior + The Archive + The Boat Show + The Bob Ross Channel + The Carol Burnett Show + The Design Network + The Film Detective + The Pet Collective + The Preview Channel + This Old House + Times Now Navbharat + TODAY All Day + TokuSHOUTsu + Top Cine + Unbeaten + Unidentified + USA TODAY + USA TODAY Sportswire + Us Weekly TV + VICE + Wanted: Dead or Alive + Watch it Kid + Watch it SCREAM + Waypoint TV + WeatherSpy + WildEarth + Wonder + Wu Tang Collection + Juntos TV + \ No newline at end of file diff --git a/sites/i.mjh.nz/i.mjh.nz_pluto.channels.xml b/sites/i.mjh.nz/i.mjh.nz_pluto.channels.xml index a33d75b1..58bf58e2 100644 --- a/sites/i.mjh.nz/i.mjh.nz_pluto.channels.xml +++ b/sites/i.mjh.nz/i.mjh.nz_pluto.channels.xml @@ -1,335 +1,333 @@ - - - 48 Hours - 70s Cinema - 80s Rewind - 90210 - 90s Throwback - Acapulco Shore - All Reality by WE tv - Always Funny Videos - Amantes del romance - America's Test Kitchen - America's Voice News - Anime All Day - Antiques Roadshow UK - Antiques Road Trip - Awesomeness TV - Baby Shark TV - Badass novelas - Bar Rescue - Baywatch - BBC Food - BBC Home - BBC Kids - Bebecito Bum y sus amigos - beIN SPORTS XTRA en español - beIN SPORTS XTRA - Bellator MMA - Best of Dr. Phil - Best of The Drew Barrymore Show - BET Her - BET Pluto TV - Beverly Hillbillies - Black Cinema - Black Classics - Black Ink Crew - Black Throwbacks - Blaze Live - Bloomberg TV - BNC GO - Bounce XL - BritBox Mysteries - British Comedy - British Drama - BUZZR - Cats 24/7 - CBS News - CBS News Baltimore - CBS News Bay Area - CBS News Boston - CBS News Chicago - CBS News Colorado - CBS News Detroit - CBS News DFW - CBS News Los Angeles - CBS News Miami - CBS News Minnesota - CBS News New York - CBS News Philly - CBS News Pittsburgh - CBS News Sacramento - CBS Sports HQ - Cheddar News - Cine adrenalina - Cine ¡¡jaja!! - Cine Premiere - Cine terror - Cine XOXO - Classica - Classic Movies Channel - Classic Toons TV - Classic TV Comedy - Classic TV Drama - Classic TV: Families - CMT Equal Play - CMT Pluto TV - CNN RePlay - Cold Case Files - Combate World - Comedy Central Animation - Comedy Central en español - Comedy Central Pluto TV - COPS - Court TV - Crime 360 - Crímenes imperfectos - CSI - CSI en español - Dabl - Dallas Cowboy Cheerleaders - Dark Shadows - Deal or No Deal - Degrassi - Demand Africa - Doctor Who Classic - Dogs 24/7 - Dog the Bounty Hunter - Dora TV - Emergencia 911 - Entre nosotras - Estrella News - EstrellaTV - ET Live - Euronews - FailArmy - Faith TV - Family Ties - Fear Factor - Fight - Find Out Why - Flicks of Fury - Foodies - Food TV - Forensic Files - Forever Kids - FOX Sports - Funny AF - Fuse Beat - G4 Select - Gameplay: Call of Duty - Gameplay: Fortnite - Gameplay: Roblox - Gameplay: Sports - Game Show Central - Garfield and Friends - GLORY Kickboxing - Gordon Ramsay's Hell's Kitchen - Grande-ish - Gunsmoke - Happy Days - Heartland - Hell's Kitchen en español - IGN - IMPACT Wrestling - Ink Master - Investiga - Iron Chef - Jersey Shore - Johnny Carson TV - Judge Nosey - Julia Child - Kartoon Channel! - K-Content by CJ ENM - Kevin Hart’s LOL! Network - Kids Movie Club - LEGO Kids TV - Little Baby Bum - Little Stars Universe - Lively Place - Live Music Replay - Logo Pluto TV - Love & Hip Hop - Lucha Libre AAA - Lupin the 3rd - Matlock - MAVTV Select - Midsomer Murders - MinecrafTV - Mi obsesión favorita - Mission Impossible - Misterios sin resolver - MLB - MLS - More TV Drama - More TV Sitcoms - MST3K - MTV Biggest Pop - MTV Block Party - MTV Dating - MTV en español - MTV Pluto TV - MTV Spankin' New - Mundo geek - Mundo paranormal - Mundo viajero - Narcos - Narcos en español - Naruto - Naruto en español - Naturescape - NBC News NOW - News 12 New York - Newsmax - Newsy - NFL Channel - Nick en español - Nick Jr. en español - Nick Jr. Pluto TV - Nick Pluto TV - Niños por BBC Kids - No Parents Allowed - Nosey - Nosey escándalos - Novelas con la abuela - Nuestra Visión - OAN Plus - One Piece - Paramount Movie Channel - Paramount+ Picks - PBR RidePass - Pelis y Popcorn - People Are Awesome - Perry Mason - PGA TOUR - Pluto TV Action - Pluto TV Action Sports - Pluto TV Animals - Pluto TV Backcountry - Pluto TV Best Life - Pluto TV Boxing - Pluto TV Cars - Pluto TV Celebrity - Pluto TV Comedy - Pluto TV Courtroom - Pluto TV Crime Drama - Pluto TV Crime Movies - Pluto TV Cult Films - Pluto TV Documentaries - Pluto TV Drama - Pluto TV Drama Life - Pluto TV Fantastic - Pluto TV Gamer - Pluto TV Game Shows - Pluto TV History - Pluto TV Home - Pluto TV Horror - Pluto TV Lives - Pluto TV Love Stories - Pluto TV Military - Pluto TV News - Pluto TV Paranormal - Pluto TV Pranks - Pluto TV Pro Wrestling - Pluto TV Reaction - Pluto TV Reality - Pluto TV Romance - Pluto TV Science - Pluto TV Sci-Fi - Pluto TV Soaps - Pluto TV Sports - Pluto TV Spotlight - Pluto TV Staff Picks - Pluto TV Suspense - Pluto TV Terror - Pluto TV Thrillers - Pluto TV Travel - Pluto TV True Crime - Pluto TV Vs. - Pluto TV Weddings - Pluto TV Westerns - pocket.watch - PokerGo - Rainbow Squad - Realmadrid tv - Rescue 911 - RiffTrax - Ryan and Friends - Sala de parejas - Séptimo arte - Series con Ñ - Shout! Factory TV - Showtime Selects - Skills + Thrills - Sky News - Slightly Off IFC - Slow TV - Smithsonian Channel Selects - Sony Canal Comedias - Sony Canal Escape Perfecto - Spike ¡extremo! - Spike Outdoors - Spike Pluto TV - Stand-Up TV - Star Trek - Stories by AMC - Survivor - TBN - Team Spirit - Teen Mom - Telefe noticias - Telemundo telenovelas clásicas - The Addams Family - The Amazing Race - The Andy Griffith Show - The Asylum - The Bob Ross Channel - The Carol Burnett Show - The Challenge - The Design Network - The First - The Love Boat - The New Detectives - The Pet Collective - The Price Is Right: The Barker Era - The Rifleman - The Walking Dead en español - This Old House - Three's Company - Tiny House Nation - TODAY All Day - TokuSHOUTsu - Top Gear en español - Tosh.0 - TOTALLY TURTLES - TV Land Drama - TV Land Sitcoms - TYT Network - Unsolved Mysteries - Vevo 2K - Vevo '70s - Vevo '80s - Vevo '90s - Vevo Country - Vevo Latino - Vevo Pop - Vevo R&B - Vevo Reggaetón & Trap - Vevo Retro Rock - Vevo True School Hip-Hop - VH1 Hip Hop Family - VH1 I Love Reality - Viaje a las estrellas - Voyager Documentaries - Wanted: Dead or Alive - WeatherNation - Western TV - Wild 'N Out - World Poker Tour - Yahoo Finance - Yo! MTV - Yu-Gi-Oh! - Yu-Gi-Oh! en español - - + + 48 Hours + 70s Cinema + 80s Rewind + 90210 + 90s Throwback + Acapulco Shore + All Reality by WE tv + Always Funny Videos + Amantes del romance + America's Test Kitchen + America's Voice News + Anime All Day + Antiques Roadshow UK + Antiques Road Trip + Awesomeness TV + Baby Shark TV + Badass novelas + Bar Rescue + Baywatch + BBC Food + BBC Home + BBC Kids + beIN SPORTS XTRA + beIN SPORTS XTRA en español + Bellator MMA + Best of Dr. Phil + Best of The Drew Barrymore Show + BET Her + BET Pluto TV + Beverly Hillbillies + Black Cinema + Black Classics + Black Ink Crew + Black Throwbacks + Blaze Live + Bloomberg TV + BNC GO + Bounce XL + BritBox Mysteries + British Comedy + British Drama + BUZZR + Cats 24/7 + CBS News + CBS News Baltimore + CBS News Bay Area + CBS News Boston + CBS News Chicago + CBS News Colorado + CBS News Detroit + CBS News DFW + CBS News Los Angeles + CBS News Miami + CBS News Minnesota + CBS News New York + CBS News Philly + CBS News Pittsburgh + CBS News Sacramento + CBS Sports HQ + Cheddar News + Cine adrenalina + Cine ¡¡jaja!! + Cine Premiere + Cine terror + Cine XOXO + Classica + Classic Movies Channel + Classic Toons TV + Classic TV Comedy + Classic TV Drama + Classic TV: Families + CMT Equal Play + CMT Pluto TV + CNN RePlay + Cold Case Files + Combate World + Comedy Central Animation + Comedy Central en español + Comedy Central Pluto TV + COPS + Court TV + Crime 360 + Crímenes imperfectos + CSI + CSI en español + Dabl + Dallas Cowboy Cheerleaders + Dark Shadows + Deal or No Deal + Degrassi + Demand Africa + Doctor Who Classic + Dogs 24/7 + Dog the Bounty Hunter + Dora TV + Emergencia 911 + Entre nosotras + Estrella News + EstrellaTV + ET Live + Euronews + FailArmy + Faith TV + Family Ties + Fear Factor + Fight + Find Out Why + Flicks of Fury + Foodies + Food TV + Forensic Files + Forever Kids + FOX Sports + Funny AF + Fuse Beat + G4 Select + Gameplay: Call of Duty + Gameplay: Fortnite + Gameplay: Roblox + Gameplay: Sports + Game Show Central + Garfield and Friends + GLORY Kickboxing + Gordon Ramsay's Hell's Kitchen + Grande-ish + Gunsmoke + Happy Days + Heartland + Hell's Kitchen en español + IGN + IMPACT Wrestling + Ink Master + Investiga + Iron Chef + Jersey Shore + Johnny Carson TV + Judge Nosey + Julia Child + Kartoon Channel! + K-Content by CJ ENM + Kevin Hart’s LOL! Network + Kids Movie Club + LEGO Kids TV + Little Baby Bum + Little Stars Universe + Lively Place + Live Music Replay + Logo Pluto TV + Love & Hip Hop + Lucha Libre AAA + Lupin the 3rd + Matlock + MAVTV Select + Midsomer Murders + MinecrafTV + Mi obsesión favorita + Mission Impossible + Misterios sin resolver + MLB + MLS + More TV Drama + More TV Sitcoms + MST3K + MTV Biggest Pop + MTV Block Party + MTV Dating + MTV en español + MTV Pluto TV + MTV Spankin' New + Mundo geek + Mundo paranormal + Mundo viajero + Narcos + Narcos en español + Naruto + Naruto en español + NBC News NOW + News 12 New York + Newsmax + Newsy + NFL Channel + Nick en español + Nick Jr. en español + Nick Jr. Pluto TV + Nick Pluto TV + Niños por BBC Kids + No Parents Allowed + Nosey + Nosey escándalos + Novelas con la abuela + Nuestra Visión + OAN Plus + One Piece + Paramount Movie Channel + Paramount+ Picks + PBR RidePass + Pelis y Popcorn + People Are Awesome + Perry Mason + PGA TOUR + Pluto TV Action + Pluto TV Action Sports + Pluto TV Animals + Pluto TV Backcountry + Pluto TV Best Life + Pluto TV Boxing + Pluto TV Cars + Pluto TV Celebrity + Pluto TV Comedy + Pluto TV Courtroom + Pluto TV Crime Drama + Pluto TV Crime Movies + Pluto TV Cult Films + Pluto TV Documentaries + Pluto TV Drama + Pluto TV Drama Life + Pluto TV Fantastic + Pluto TV Gamer + Pluto TV Game Shows + Pluto TV History + Pluto TV Home + Pluto TV Horror + Pluto TV Lives + Pluto TV Love Stories + Pluto TV Military + Pluto TV News + Pluto TV Paranormal + Pluto TV Pranks + Pluto TV Pro Wrestling + Pluto TV Reaction + Pluto TV Reality + Pluto TV Romance + Pluto TV Science + Pluto TV Sci-Fi + Pluto TV Soaps + Pluto TV Sports + Pluto TV Spotlight + Pluto TV Staff Picks + Pluto TV Suspense + Pluto TV Terror + Pluto TV Thrillers + Pluto TV Travel + Pluto TV True Crime + Pluto TV Vs. + Pluto TV Weddings + Pluto TV Westerns + pocket.watch + PokerGo + Rainbow Squad + Realmadrid tv + Rescue 911 + RiffTrax + Ryan and Friends + Sala de parejas + Séptimo arte + Series con Ñ + Shout! Factory TV + Showtime Selects + Skills + Thrills + Sky News + Slightly Off IFC + Slow TV + Smithsonian Channel Selects + Sony Canal Comedias + Sony Canal Escape Perfecto + Spike ¡extremo! + Spike Outdoors + Spike Pluto TV + Stand-Up TV + Star Trek + Naturescape + Stories by AMC + Survivor + TBN + Team Spirit + Teen Mom + Telefe noticias + Telemundo telenovelas clásicas + The Addams Family + The Amazing Race + The Andy Griffith Show + The Asylum + The Bob Ross Channel + The Carol Burnett Show + The Challenge + The Design Network + The First + The Love Boat + The New Detectives + The Pet Collective + The Price Is Right: The Barker Era + The Rifleman + The Walking Dead en español + This Old House + Three's Company + Tiny House Nation + TODAY All Day + TokuSHOUTsu + Top Gear en español + Tosh.0 + TOTALLY TURTLES + TV Land Drama + TV Land Sitcoms + TYT Network + Unsolved Mysteries + Vevo 2K + Vevo '70s + Vevo '80s + Vevo '90s + Vevo Country + Vevo Latino + Vevo Pop + Vevo R&B + Vevo Reggaetón & Trap + Vevo Retro Rock + Vevo True School Hip-Hop + VH1 Hip Hop Family + VH1 I Love Reality + Viaje a las estrellas + Voyager Documentaries + Wanted: Dead or Alive + WeatherNation + Western TV + Wild 'N Out + World Poker Tour + Yahoo Finance + Yo! MTV + Yu-Gi-Oh! + Yu-Gi-Oh! en español + Bebecito Bum y sus amigos + diff --git a/sites/i.mjh.nz/i.mjh.nz_samsung.channels.xml b/sites/i.mjh.nz/i.mjh.nz_samsung.channels.xml index 5b224f10..44daec79 100644 --- a/sites/i.mjh.nz/i.mjh.nz_samsung.channels.xml +++ b/sites/i.mjh.nz/i.mjh.nz_samsung.channels.xml @@ -1,229 +1,227 @@ - - - All Reality WE tv - Always Funny Videos - America's Test Kitchen - Anime All day - Asian Crush - Backstage - Baywatch - BBC Food - BBC Home - beIN SPORTS XTRA - Bloomberg Quicktake - Bounce XL - Brat TV - BUZZR - Cars - CBS News - Chicken Soup for the Soul - CHIVE TV - Cine Romantico - CINEVAULT: 80s - CINEVAULT: Westerns - Circle - Clarity 4K - Comedy Dynamics - Court TV - Crime 360 - Dallas Cowboys Cheer - Danger TV - Deal or No Deal - Degrassi - Dove Channel - Drama Life - Dry Bar Comedy - DUST - EDGEsport - ElectricNOW - Estrella News - FailArmy - Family Ties - Fear Factor - FilmRise Action - FilmRise Free Movies - FilmRise Western - Forensic Files - FOX SOUL - FTF - fubo Sports Network - FUEL TV - Game Show Central - Gravitas Movies - Gusto TV - Hallmark Movies & More - Heartland - Hollywire - HSN - Hungry - IGN - IMPACT Wrestling - Insight TV - InWonder - Journy - Kidoodle.TV - Law & Crime - LiveNOW from FOX - Loupe 4K - Love & Hip Hop - Love Nature 4K - Lucky Dog - Magellan TV Now - Maverick Black Cinema - MAVTV Select - MHz Now - Midnight Pulp - Midsomer Murders - MinecrafTV - MovieSphere - MTV Pluto TV - NBCLX - NBC News NOW - NEW KMOVIES - Newsmax TV - Newsy - Nick Pluto TV - Nosey - Outdoor America - Outside - Pac-12 Insider - Paramount Movie Channel - PBS KIDS - People Are Awesome - People TV - Pluto TV Fantastic - Pluto TV Westerns - pocket.watch - PowerNation - Pursuit UP - QVC - Real America's Voice - Revry - RiffTrax - Samsung Wild Life - Shout! Factory - Skills + Thrills - Sony Canal Comedias - Sony Canal Novelas - SportsGrid - Stadium - Stingray Naturescape - Stories by AMC - SURF NOW TV - Tastemade - Tastemade Travel - TG Junior - The Asylum - The Bob Ross Channel - The Challenge - The Design Network - The New Detectives - The Pet Collective - The Preview Channel - This Old House - Tiny House Nation - TODAY All Day - Toon Goggles - TV Land Drama - TV Land Sitcoms - TYT Network - Unidentified - Unsolved Mysteries - USA Today - Vevo 2K - Vevo Country - Vevo Hip-Hop - Vevo Latino - Vevo Pop - Vevo R&B - VICE - Waypoint TV - WeatherNation - WeatherSpy - Wild 'N Out - Wipeout Xtra - World Poker Tour - Xplore - ZooMoo - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + All Reality WE tv + Always Funny Videos + America's Test Kitchen + Anime All day + Asian Crush + Backstage + Baywatch + BBC Food + BBC Home + beIN SPORTS XTRA + Bloomberg Quicktake + Bounce XL + Brat TV + BUZZR + Cars + CBS News + Chicken Soup for the Soul + CHIVE TV + Cine Romantico + CINEVAULT: 80s + CINEVAULT: Westerns + Circle + Clarity 4K + Comedy Dynamics + Court TV + Crime 360 + Dallas Cowboys Cheer + Danger TV + Deal or No Deal + Degrassi + Dove Channel + Drama Life + Dry Bar Comedy + DUST + EDGEsport + ElectricNOW + Estrella News + FailArmy + Family Ties + Fear Factor + FilmRise Action + FilmRise Free Movies + FilmRise Western + Forensic Files + FOX SOUL + FTF + fubo Sports Network + FUEL TV + Game Show Central + Gravitas Movies + Gusto TV + Hallmark Movies & More + Heartland + Hollywire + HSN + Hungry + IGN + IMPACT Wrestling + Insight TV + InWonder + Journy + Kidoodle.TV + Law & Crime + LiveNOW from FOX + Loupe 4K + Love & Hip Hop + Love Nature 4K + Lucky Dog + Magellan TV Now + Maverick Black Cinema + MAVTV Select + MHz Now + Midnight Pulp + Midsomer Murders + MinecrafTV + MovieSphere + MTV Pluto TV + NBCLX + NBC News NOW + NEW KMOVIES + Newsmax TV + Newsy + Nick Pluto TV + Nosey + Outdoor America + Outside + Pac-12 Insider + Paramount Movie Channel + PBS KIDS + People Are Awesome + People TV + Pluto TV Fantastic + Pluto TV Westerns + pocket.watch + PowerNation + Pursuit UP + QVC + Real America's Voice + Revry + RiffTrax + Samsung Wild Life + Shout! Factory + Skills + Thrills + Sony Canal Comedias + Sony Canal Novelas + SportsGrid + Stadium + Stingray Naturescape + Stories by AMC + SURF NOW TV + Tastemade + Tastemade Travel + TG Junior + The Asylum + The Bob Ross Channel + The Challenge + The Design Network + The New Detectives + The Pet Collective + The Preview Channel + This Old House + Tiny House Nation + TODAY All Day + Toon Goggles + TV Land Drama + TV Land Sitcoms + TYT Network + Unidentified + Unsolved Mysteries + USA Today + Vevo 2K + Vevo Country + Vevo Hip-Hop + Vevo Latino + Vevo Pop + Vevo R&B + VICE + Waypoint TV + WeatherNation + WeatherSpy + Wild 'N Out + Wipeout Xtra + World Poker Tour + Xplore + ZooMoo + diff --git a/sites/i.mjh.nz/i.mjh.nz_skygo.channels.xml b/sites/i.mjh.nz/i.mjh.nz_skygo.channels.xml index c99e1ea2..93b473ec 100644 --- a/sites/i.mjh.nz/i.mjh.nz_skygo.channels.xml +++ b/sites/i.mjh.nz/i.mjh.nz_skygo.channels.xml @@ -1,104 +1,102 @@ - - - Al Jazeera - Animal Planet - BBC Earth - BBC UKTV - BBC World News - Bravo - Bravo PLUS 1 - Breeze TV - Cartoon Network - Cbeebies - CGTN - CGTN Documentary - CNBC - CNN - Colors - Comedy Central - Country TV - CI - Discovery - Discovery Turbo - E! - eden - eden +1 - ESPN 2 - ESPN HD - FACE TV - Firstlight - Fox News - HGTV - HISTORY - Hope Channel - ID - JONES! - JONES! too - Living - MTV 80s - MTV Hits - MTV - NAT GEO - Nickelodeon - Nick Jr. - Nick Music - Parliament TV - Prime - Prime PLUS 1 - Rialto - RT - Rush - Shine TV - Sky 5 - SKY Arena - Sky Arts - SKY Box Office - SKY Box Office 041 - SKY Box Office 042 - SKY Box Office 043 - Sky Box Sets - Sky Movies Action - Sky Movies Classics - Sky Movies Collection - Sky Movies Comedy - Sky Movies Family - Sky Movies Greats - Sky Movies Premiere - Sky News - Sky Sport 1 - Sky Sport 2 - Sky Sport 3 - Sky Sport 4 - Sky Sport 5 - Sky Sport 6 - Sky Sport 7 beIN SPORTS - Sky Sport 9 - Sky Sport Premier League - Sky Sport Select - SoHo - Star Gold - TAB Trackside 1 - TAB Trackside 2 - Te Reo - The Edge TV - Shopping Channel - Three - ThreePlusOne - TLC - TVNZ 1 - TVNZ 1+1 - TVNZ 2 - TVNZ 2+1 - TVNZ DUKE - DukePlus1 - Universal TV - Vibe - Whakaata Māori - - - - - - - + + + + + + + Al Jazeera + Animal Planet + BBC Earth + BBC UKTV + BBC World News + Bravo + Bravo PLUS 1 + Breeze TV + Cartoon Network + Cbeebies + CGTN + CGTN Documentary + CNBC + CNN + Colors + Comedy Central + Country TV + CI + Discovery + Discovery Turbo + E! + eden + eden +1 + ESPN 2 + ESPN HD + FACE TV + Firstlight + Fox News + HGTV + HISTORY + Hope Channel + ID + JONES! + JONES! too + Living + MTV 80s + MTV Hits + MTV + NAT GEO + Nickelodeon + Nick Jr. + Nick Music + Parliament TV + Prime + Prime PLUS 1 + Rialto + RT + Rush + Shine TV + Sky 5 + SKY Arena + Sky Arts + SKY Box Office + SKY Box Office 041 + SKY Box Office 042 + SKY Box Office 043 + Sky Box Sets + Sky Movies Action + Sky Movies Classics + Sky Movies Collection + Sky Movies Comedy + Sky Movies Family + Sky Movies Greats + Sky Movies Premiere + Sky News + Sky Sport 1 + Sky Sport 2 + Sky Sport 3 + Sky Sport 4 + Sky Sport 5 + Sky Sport 6 + Sky Sport 7 beIN SPORTS + Sky Sport 9 + Sky Sport Premier League + Sky Sport Select + SoHo + Star Gold + TAB Trackside 1 + TAB Trackside 2 + Te Reo + The Edge TV + Shopping Channel + Three + ThreePlusOne + TLC + TVNZ 1 + TVNZ 1+1 + TVNZ 2 + TVNZ 2+1 + TVNZ DUKE + DukePlus1 + Universal TV + Vibe + Whakaata Māori + diff --git a/sites/i.mjh.nz/i.mjh.nz_stirr.channels.xml b/sites/i.mjh.nz/i.mjh.nz_stirr.channels.xml index e6be0d12..60b7a3f5 100644 --- a/sites/i.mjh.nz/i.mjh.nz_stirr.channels.xml +++ b/sites/i.mjh.nz/i.mjh.nz_stirr.channels.xml @@ -1,111 +1,109 @@ - - - AccuWeather - AFV - American Classics - America vs. Addiction - beIN Sports Xtra - Buzzr - CHARGE - Cheddar - Chicken Soup For The Soul - CineLife - Circle - Classica - Comedy Dynamics - COMET - CONtv - Deal or No Deal - Dick Cavett - Docurama - Dove - DUST - Electric Now - EVRGRN - FailArmy - Filmrise Classic TV - Filmrise Free Movies - FOX Soul - Glewed TV - Gravitas - Horse Shopping Channel - HSN - It's Showtime at the Apollo - Johnny Carson TV - Law & Crime - LiveXLive - MagellanTV - MavTv - Midnight Pulp - Mystery Science Theater 3000 - NASATV - News 12 New York - Nosey - ONTV4U - Outdoor America - People Are Awesome - People TV - Popstar! TV - PursuitUp - Quicktake - QVC - RetroCrush - Revry - Shop LC - Shout Factory - So...Real - SportsGrid - Sportswire - Stadium - Stingray Classic Rock - Stingray Flashback 70s - Stingray Greatest Hits - Stingray Hit List - Stingray Hot Country - Stingray Pop Adult - Stingray Rock Alternative - Stingray Today's Latin Pop - Stingray Urban Beats - STIRR Classic TV - STIRR Horror Movies - STIRR | Movies - STIRR P.D. - STIRR Reality TV - STIRR Westerns - TBD - The Archive - The Bob Ross Channel - The Carol Burnett Show - The Country Network - Film Detective - The First - The Pet Collective - The Tim Conway Show - Unbeaten - USA Today - Waypoint - WeatherSpy - Wipeout Xtra - World Poker Tour - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + AccuWeather + AFV + American Classics + America vs. Addiction + beIN Sports Xtra + Buzzr + CHARGE + Cheddar + Chicken Soup For The Soul + CineLife + Circle + Classica + Comedy Dynamics + COMET + CONtv + Deal or No Deal + Dick Cavett + Docurama + Dove + DUST + Electric Now + EVRGRN + FailArmy + Filmrise Classic TV + Filmrise Free Movies + FOX Soul + Glewed TV + Gravitas + Horse Shopping Channel + HSN + It's Showtime at the Apollo + Johnny Carson TV + Law & Crime + LiveXLive + MagellanTV + MavTv + Midnight Pulp + Mystery Science Theater 3000 + NASATV + News 12 New York + Nosey + ONTV4U + Outdoor America + People Are Awesome + People TV + Popstar! TV + PursuitUp + Quicktake + QVC + RetroCrush + Revry + Shop LC + Shout Factory + So...Real + SportsGrid + Sportswire + Stadium + Stingray Classic Rock + Stingray Flashback 70s + Stingray Greatest Hits + Stingray Hit List + Stingray Hot Country + Stingray Pop Adult + Stingray Rock Alternative + Stingray Today's Latin Pop + Stingray Urban Beats + STIRR Classic TV + STIRR Horror Movies + STIRR | Movies + STIRR P.D. + STIRR Reality TV + STIRR Westerns + TBD + The Archive + The Bob Ross Channel + The Carol Burnett Show + The Country Network + Film Detective + The First + The Pet Collective + The Tim Conway Show + Unbeaten + USA Today + Waypoint + WeatherSpy + Wipeout Xtra + World Poker Tour + diff --git a/sites/i24news.tv/i24news.tv.channels.xml b/sites/i24news.tv/i24news.tv.channels.xml index da14f333..af7d40a6 100644 --- a/sites/i24news.tv/i24news.tv.channels.xml +++ b/sites/i24news.tv/i24news.tv.channels.xml @@ -1,8 +1,6 @@ - - - i24News Arabic - i24News English - i24 News Français - - + + i24News Arabic + i24News English + i24 News Français + diff --git a/sites/i24news.tv/i24news.tv.test.js b/sites/i24news.tv/i24news.tv.test.js index b74452e9..ab96ad07 100644 --- a/sites/i24news.tv/i24news.tv.test.js +++ b/sites/i24news.tv/i24news.tv.test.js @@ -1,4 +1,4 @@ -// npx epg-grabber --config=sites/i24news.tv/i24news.tv.config.js --channels=sites/i24news.tv/i24news.tv.channels.xml --output=guide.xml --days=2 +// npm run grab -- --site=i24news.tv const { parser, url } = require('./i24news.tv.config.js') const dayjs = require('dayjs') @@ -18,7 +18,8 @@ it('can generate valid url', () => { }) it('can parse response', () => { - const content = `[{"id":348995,"startHour":"22:30","endHour":"23:00","day":5,"firstDiffusion":false,"override":false,"show":{"parsedBody":[{"type":"text","text":"Special Edition"}],"id":131,"title":"تغطية خاصة","body":"Special Edition","slug":"Special-Edition-تغطية-خاصة","visible":true,"image":{"id":1142467,"credit":"","legend":"","href":"https://cdn.i24news.tv/uploads/a1/be/85/20/69/6f/32/1c/ed/b0/f8/5c/f6/1c/40/f9/a1be8520696f321cedb0f85cf61c40f9.png"}}},{"id":349023,"startHour":"15:00","endHour":"15:28","day":6,"firstDiffusion":false,"override":false,"show":{"parsedBody":[{"type":"text","text":"Special Edition"}],"id":131,"title":"تغطية خاصة","body":"Special Edition","slug":"Special-Edition-تغطية-خاصة","visible":true,"image":{"id":1142467,"credit":"","legend":"","href":"https://cdn.i24news.tv/uploads/a1/be/85/20/69/6f/32/1c/ed/b0/f8/5c/f6/1c/40/f9/a1be8520696f321cedb0f85cf61c40f9.png"}}}]` + const content = + '[{"id":348995,"startHour":"22:30","endHour":"23:00","day":5,"firstDiffusion":false,"override":false,"show":{"parsedBody":[{"type":"text","text":"Special Edition"}],"id":131,"title":"تغطية خاصة","body":"Special Edition","slug":"Special-Edition-تغطية-خاصة","visible":true,"image":{"id":1142467,"credit":"","legend":"","href":"https://cdn.i24news.tv/uploads/a1/be/85/20/69/6f/32/1c/ed/b0/f8/5c/f6/1c/40/f9/a1be8520696f321cedb0f85cf61c40f9.png"}}},{"id":349023,"startHour":"15:00","endHour":"15:28","day":6,"firstDiffusion":false,"override":false,"show":{"parsedBody":[{"type":"text","text":"Special Edition"}],"id":131,"title":"تغطية خاصة","body":"Special Edition","slug":"Special-Edition-تغطية-خاصة","visible":true,"image":{"id":1142467,"credit":"","legend":"","href":"https://cdn.i24news.tv/uploads/a1/be/85/20/69/6f/32/1c/ed/b0/f8/5c/f6/1c/40/f9/a1be8520696f321cedb0f85cf61c40f9.png"}}}]' const result = parser({ content, date }).map(p => { p.start = p.start.toJSON() p.stop = p.stop.toJSON() @@ -38,7 +39,7 @@ it('can parse response', () => { it('can handle empty guide', () => { const result = parser({ - content: `[]`, + content: '[]', date }) expect(result).toMatchObject([]) diff --git a/sites/indihometv.com/indihometv.com.channels.xml b/sites/indihometv.com/indihometv.com.channels.xml index d3dada9b..b1b4564a 100644 --- a/sites/indihometv.com/indihometv.com.channels.xml +++ b/sites/indihometv.com/indihometv.com.channels.xml @@ -1,157 +1,150 @@ - - - ABC Australia - Aljazeera - Animax - ANIPlus - ANTV - Arirang - Asian Food Network - ATV - AXN - Baby First - Bali TV - beIN Sports 1 - beIN Sports 3 - Berita Satu - Bioskop Indonesia - Bloomberg - Boomerang - Cartoon Network - CCTV4 - Celestial Movie - CGTN Documentary - Cinema World - Citra Dangdut - Citra Drama - News Asia - CNBC Asia - CNBC Indonesia - CNN Indonesia - CNN International - Crime Investigation - CTI Asia - Daai TV - Discovery Channel - Dreamworks - Dunia anak - Dunia Lain - DW (English) - Eat N Go - EBC Asia - egg network - Euronews - FashionTV - Fight Sport - France 24 - Galaxy - Galaxy Premium - HGTV - History - Horee - Horizon Sports - IDX - IMC - IndiKids - Indosiar - iNews - Panda TV - JakTV - JTV - KBS World - Kix - Kompas TV - Kplus - Lifetime - Lingua - Mentari TV - Metro TV - MNC News - MQTV - M Shop - MTATV - MTV Live - My Cinema - My Cinema Asia - My Family - MyKidz - Nat Geo - Nat Geo Wild - NBA - Net. - NHK World Japan - NHK World Premium - Nickelodeon - Nick Junior - Insert - Nusantara TV - O Channel - SONE - Outdoor Channel - Paramount - Rajawali TV - Rock Entertainment - Rock Extreme - Rodja TV - RRI NET - Ruang Trampil - SCTV - SEA Today - Seru! - SPOTV - SPOTV2 - Star Chinese Channel - Star Chinese Movies - Tawaf TV - Tech Storm - Thrill - TLC - Trans7 - TransTV - TRT World - TV5Monde - TV9 NU - TVBS News - TV Edukasi - MUI TV - TVN - TVN Movies - TV One - TVRI - UChannel - Usee Photo - UseePrime - Warner - ZBioskop - Zhejiang - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + ABC Australia + Aljazeera + Animax + ANIPlus + ANTV + Arirang + Asian Food Network + ATV + AXN + Baby First + Bali TV + beIN Sports 1 + beIN Sports 3 + Berita Satu + Bioskop Indonesia + Bloomberg + Boomerang + Cartoon Network + CCTV4 + Celestial Movie + CGTN Documentary + Cinema World + Citra Dangdut + Citra Drama + News Asia + CNBC Asia + CNBC Indonesia + CNN Indonesia + CNN International + Crime Investigation + CTI Asia + Daai TV + Discovery Channel + Dreamworks + Dunia anak + Dunia Lain + DW (English) + Eat N Go + EBC Asia + egg network + Euronews + FashionTV + Fight Sport + France 24 + Galaxy + Galaxy Premium + HGTV + History + Horee + Horizon Sports + IDX + IMC + IndiKids + Indonesiana TV + Indosiar + iNews + Panda TV + JakTV + JTV + KBS World + Kix + Kompas TV + Kplus + Lifetime + Lingua + Mentari TV + Metro TV + MNC News + MQTV + M Shop + MTATV + MTV Live + My Cinema + My Cinema Asia + My Family + MyKidz + Nat Geo + Nat Geo Wild + NBA + Net. + NHK World Japan + NHK World Premium + Nickelodeon + Nick Junior + Insert + Nusantara TV + O Channel + SONE + Outdoor Channel + Paramount + Rajawali TV + Rock Entertainment + Rock Extreme + Rodja TV + RRI NET + Ruang Trampil + SCTV + SEA Today + Seru! + SPOTV + SPOTV2 + Star Chinese Channel + Star Chinese Movies + Tawaf TV + Tech Storm + Thrill + TLC + Trans7 + TransTV + TRT World + TV5Monde + TV9 NU + TVBS News + TV Edukasi + MUI TV + TVN + TVN Movies + TV One + TVRI + UChannel + Usee Photo + UseePrime + Warner + ZBioskop + Zhejiang + \ No newline at end of file diff --git a/sites/indihometv.com/indihometv.com.config.js b/sites/indihometv.com/indihometv.com.config.js index a33c8bf9..618e909d 100644 --- a/sites/indihometv.com/indihometv.com.config.js +++ b/sites/indihometv.com/indihometv.com.config.js @@ -43,7 +43,7 @@ module.exports = { function parseStart($item, date) { const timeString = $item('p').text() - const [_, start] = timeString.match(/(\d{2}:\d{2}) -/) || [null, null] + const [, start] = timeString.match(/(\d{2}:\d{2}) -/) || [null, null] const dateString = `${date.format('YYYY-MM-DD')} ${start}` return dayjs.tz(dateString, 'YYYY-MM-DD HH:mm', 'Asia/Jakarta') @@ -51,7 +51,7 @@ function parseStart($item, date) { function parseStop($item, date) { const timeString = $item('p').text() - const [_, stop] = timeString.match(/- (\d{2}:\d{2})/) || [null, null] + const [, stop] = timeString.match(/- (\d{2}:\d{2})/) || [null, null] const dateString = `${date.format('YYYY-MM-DD')} ${stop}` return dayjs.tz(dateString, 'YYYY-MM-DD HH:mm', 'Asia/Jakarta') diff --git a/sites/indihometv.com/indihometv.com.test.js b/sites/indihometv.com/indihometv.com.test.js index 5c959f19..7d015d36 100644 --- a/sites/indihometv.com/indihometv.com.test.js +++ b/sites/indihometv.com/indihometv.com.test.js @@ -1,6 +1,6 @@ -// npx epg-grabber --config=sites/indihometv.com/indihometv.com.config.js --channels=sites/indihometv.com/indihometv.com.channels.xml --output=guide.xml --timeout=30000 --days=2 +// npm run grab -- --site=indihometv.com -const { parser, url, request } = require('./indihometv.com.config.js') +const { parser, url } = require('./indihometv.com.config.js') const dayjs = require('dayjs') const utc = require('dayjs/plugin/utc') dayjs.extend(utc) @@ -10,7 +10,8 @@ const channel = { site_id: 'metrotv', xmltv_id: 'MetroTV.id' } -const content = `07:00 - 07:05Headline News07:05 - 07:30Editorial Media Indonesia07:30 - 07:45Editorial Media Indonesia07:45 - 08:00Editorial Media Indonesia` +const content = + '07:00 - 07:05Headline News07:05 - 07:30Editorial Media Indonesia07:30 - 07:45Editorial Media Indonesia07:45 - 08:00Editorial Media Indonesia' it('can generate valid url', () => { expect(url({ channel })).toBe('https://www.indihometv.com/tvod/metrotv') @@ -51,7 +52,7 @@ it('can handle empty guide', () => { const result = parser({ date, channel, - content: `` + content: '' }) expect(result).toMatchObject([]) }) diff --git a/sites/ionplustv.com/ionplustv.com.channels.xml b/sites/ionplustv.com/ionplustv.com.channels.xml index 78693bf8..01fabc51 100644 --- a/sites/ionplustv.com/ionplustv.com.channels.xml +++ b/sites/ionplustv.com/ionplustv.com.channels.xml @@ -1,6 +1,4 @@ - - - ION Plus - - + + ION Plus + diff --git a/sites/ionplustv.com/ionplustv.com.config.js b/sites/ionplustv.com/ionplustv.com.config.js index d9c99696..6dab5fe1 100644 --- a/sites/ionplustv.com/ionplustv.com.config.js +++ b/sites/ionplustv.com/ionplustv.com.config.js @@ -1,4 +1,3 @@ -const axios = require('axios') const dayjs = require('dayjs') const cheerio = require('cheerio') const utc = require('dayjs/plugin/utc') @@ -67,7 +66,7 @@ function parseSubTitle($item) { } function parseRating($item) { - const [_, rating] = $item('.tv-rating') + const [, rating] = $item('.tv-rating') .text() .match(/([^(]+)/) || [null, null] @@ -92,7 +91,7 @@ function parseStart($item, date) { } function parseDuration($item) { - const [_, duration] = $item('.tv-rating') + const [, duration] = $item('.tv-rating') .text() .trim() .match(/\((\d+)/) || [null, null] @@ -104,5 +103,5 @@ function parseItems(content) { if (!content) return [] const $ = cheerio.load(content) - return $(`#accordion > div`).toArray() + return $('#accordion > div').toArray() } diff --git a/sites/ionplustv.com/ionplustv.com.test.js b/sites/ionplustv.com/ionplustv.com.test.js index 673373ef..076ca9f6 100644 --- a/sites/ionplustv.com/ionplustv.com.test.js +++ b/sites/ionplustv.com/ionplustv.com.test.js @@ -1,19 +1,16 @@ -// npx epg-grabber --config=sites/ionplustv.com/ionplustv.com.config.js --channels=sites/ionplustv.com/ionplustv.com.channels.xml --output=guide.xml --days=2 +// npm run grab -- --site=ionplustv.com -const { parser, url, request } = require('./ionplustv.com.config.js') +const { parser, url } = require('./ionplustv.com.config.js') const fs = require('fs') const path = require('path') const dayjs = require('dayjs') const utc = require('dayjs/plugin/utc') const customParseFormat = require('dayjs/plugin/customParseFormat') + dayjs.extend(customParseFormat) dayjs.extend(utc) const date = dayjs.utc('2022-11-08', 'YYYY-MM-DD').startOf('d') -const channel = { - site_id: '#', - xmltv_id: 'IONPlus.us' -} it('can generate valid url', () => { expect(url({ date })).toBe('https://ionplustv.com/schedule/2022-11-08') diff --git a/sites/ipko.com/ipko.com.channels.xml b/sites/ipko.com/ipko.com.channels.xml index 4bd7ee89..603827da 100644 --- a/sites/ipko.com/ipko.com.channels.xml +++ b/sites/ipko.com/ipko.com.channels.xml @@ -1,40 +1,38 @@ - - - - 24 Kitchen - ABC News - Baby TV - Bang Bang - BBC World News - Boomerang - CNN - Çufo - Discovery Channel - Discovery Science - Eurosport 1 - Explorer Histori - Explorer Natyra - Explorer Shkencë - Film Aksion - Film Dramë - Film Hits - Film Komedi - Film Thriller - Hayat - Junior TV - Kohavision - MTV Live - My Music - National Geographic - News 24 - Peace TV English - Rai 1 - Rai 2 - Rai 3 - RTK 1 - RTV 21 Sat - Stinët - Arta - - \ No newline at end of file + + + 24 Kitchen + ABC News + Baby TV + Bang Bang + BBC World News + Boomerang + CNN + Çufo + Discovery Channel + Discovery Science + Eurosport 1 + Explorer Histori + Explorer Natyra + Explorer Shkencë + Film Aksion + Film Dramë + Film Hits + Film Komedi + Film Thriller + Hayat + Junior TV + Kohavision + MTV Live + My Music + National Geographic + News 24 + Peace TV English + Rai 1 + Rai 2 + Rai 3 + RTK 1 + RTV 21 Sat + Stinët + Arta + \ No newline at end of file diff --git a/sites/ipko.com/ipko.com.test.js b/sites/ipko.com/ipko.com.test.js index 6235ce13..dc0517a8 100644 --- a/sites/ipko.com/ipko.com.test.js +++ b/sites/ipko.com/ipko.com.test.js @@ -1,4 +1,4 @@ -// npx epg-grabber --config=sites/ipko.com/ipko.com.config.js --channels=sites/ipko.com/ipko.com.channels.xml --days=2 --output=guide.xml +// npm run grab -- --site=ipko.com const { parser, url } = require('./ipko.com.config.js') const dayjs = require('dayjs') @@ -12,7 +12,8 @@ const channel = { site_id: '406', xmltv_id: 'RTK1.xk' } -const content = `{"element":{"1":[{"id":6367,"channel_id":406,"program_name":"Beautiful People 13","name_short":"","description":"Lin largohet nga Nju Meksiko për t'u vendosur në Nju Jork e për t'ia nisur nga fillimi: një punë të re, shtëpi të re dhe njohje të reja. Bashkë me të janë vajzat e saj, Sofia, një 16 vjeçare që shkëlqen në shkollë, dhe Kareni, 20 vjeçare, që do të bë","category":"Sezoni I","duration":150,"day":"Sun","left_distanc":165,"date":"00:55:00"}]}}` +const content = + '{"element":{"1":[{"id":6367,"channel_id":406,"program_name":"Beautiful People 13","name_short":"","description":"Lin largohet nga Nju Meksiko për t\'u vendosur në Nju Jork e për t\'ia nisur nga fillimi: një punë të re, shtëpi të re dhe njohje të reja. Bashkë me të janë vajzat e saj, Sofia, një 16 vjeçare që shkëlqen në shkollë, dhe Kareni, 20 vjeçare, që do të bë","category":"Sezoni I","duration":150,"day":"Sun","left_distanc":165,"date":"00:55:00"}]}}' it('can generate valid url', () => { const result = url({ date }) @@ -26,13 +27,14 @@ it('can parse response', () => { start: 'Sun, 24 Oct 2021 00:55:00 GMT', stop: 'Sun, 24 Oct 2021 01:45:00 GMT', title: 'Beautiful People 13', - description: `Lin largohet nga Nju Meksiko për t'u vendosur në Nju Jork e për t'ia nisur nga fillimi: një punë të re, shtëpi të re dhe njohje të reja. Bashkë me të janë vajzat e saj, Sofia, një 16 vjeçare që shkëlqen në shkollë, dhe Kareni, 20 vjeçare, që do të bë`, + description: + "Lin largohet nga Nju Meksiko për t'u vendosur në Nju Jork e për t'ia nisur nga fillimi: një punë të re, shtëpi të re dhe njohje të reja. Bashkë me të janë vajzat e saj, Sofia, një 16 vjeçare që shkëlqen në shkollë, dhe Kareni, 20 vjeçare, që do të bë", category: 'Sezoni I' } ]) }) it('can handle empty guide', () => { - const result = parser({ date, channel, content: `{"element":{"1":[{"no":"no"}]}}` }) + const result = parser({ date, channel, content: '{"element":{"1":[{"no":"no"}]}}' }) expect(result).toMatchObject([]) }) diff --git a/sites/kan.org.il/kan.org.il.channels.xml b/sites/kan.org.il/kan.org.il.channels.xml index d973bf3c..c89752bc 100644 --- a/sites/kan.org.il/kan.org.il.channels.xml +++ b/sites/kan.org.il/kan.org.il.channels.xml @@ -1,8 +1,6 @@ - - - כאן 11 - חינוכית - مكان - - + + مكان + כאן 11 + חינוכית + diff --git a/sites/kan.org.il/kan.org.il.config.js b/sites/kan.org.il/kan.org.il.config.js index cf114879..987b4aa3 100644 --- a/sites/kan.org.il/kan.org.il.config.js +++ b/sites/kan.org.il/kan.org.il.config.js @@ -8,7 +8,6 @@ dayjs.extend(timezone) 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 }) { diff --git a/sites/kan.org.il/kan.org.il.test.js b/sites/kan.org.il/kan.org.il.test.js index 42c53a74..c2aa9710 100644 --- a/sites/kan.org.il/kan.org.il.test.js +++ b/sites/kan.org.il/kan.org.il.test.js @@ -1,4 +1,4 @@ -// npx epg-grabber --config=sites/kan.org.il/kan.org.il.config.js --channels=sites/kan.org.il/kan.org.il.channels.xml --output=guide.xml --days=2 +// npm run grab -- --site=kan.org.il const { parser, url } = require('./kan.org.il.config.js') const dayjs = require('dayjs') @@ -20,7 +20,8 @@ it('can generate valid url', () => { }) it('can parse response', () => { - const content = `[{"title":"ארץ מולדת - בין תורכיה לבריטניה","start_time":"2022-03-06T00:05:37","end_time":"2022-03-06T00:27:12","id":"2598","age_category_desc":"0","epg_name":"ארץ מולדת","title1":"ארץ מולדת - בין תורכיה לבריטניה","chapter_number":"9","live_desc":"קבוצת תלמידים מתארגנת בפרוץ מלחמת העולם הראשונה להגיש עזרה לישוב. באמצעות התלמידים לומד הצופה על בעיותיו של הישוב בתקופת המלחמה, והתלבטותו בין נאמנות לשלטון העות'מאני לבין תקוותיו מהבריטים הכובשים.","Station_Radio":"0","Station_Id":"20","stationUrlScheme":"kan11://plugin/?type=player&plugin_identifier=kan_player&ds=general-provider%3A%2F%2FfetchData%3Ftype%3DFEED_JSON%26url%3DaHR0cHM6Ly93d3cua2FuLm9yZy5pbC9hcHBLYW4vbGl2ZVN0YXRpb25zLmFzaHg%3D&id=4","program_code":"3671","picture_code":"https://kanweb.blob.core.windows.net/download/pictures/2021/1/20/imgid=45847_Z.jpeg","program_image":"","station_image":"Logo_Image_Logo20_img__8.jpg","program_id":"","timezone":"2"}]` + const content = + '[{"title":"ארץ מולדת - בין תורכיה לבריטניה","start_time":"2022-03-06T00:05:37","end_time":"2022-03-06T00:27:12","id":"2598","age_category_desc":"0","epg_name":"ארץ מולדת","title1":"ארץ מולדת - בין תורכיה לבריטניה","chapter_number":"9","live_desc":"קבוצת תלמידים מתארגנת בפרוץ מלחמת העולם הראשונה להגיש עזרה לישוב. באמצעות התלמידים לומד הצופה על בעיותיו של הישוב בתקופת המלחמה, והתלבטותו בין נאמנות לשלטון העות\'מאני לבין תקוותיו מהבריטים הכובשים.","Station_Radio":"0","Station_Id":"20","stationUrlScheme":"kan11://plugin/?type=player&plugin_identifier=kan_player&ds=general-provider%3A%2F%2FfetchData%3Ftype%3DFEED_JSON%26url%3DaHR0cHM6Ly93d3cua2FuLm9yZy5pbC9hcHBLYW4vbGl2ZVN0YXRpb25zLmFzaHg%3D&id=4","program_code":"3671","picture_code":"https://kanweb.blob.core.windows.net/download/pictures/2021/1/20/imgid=45847_Z.jpeg","program_image":"","station_image":"Logo_Image_Logo20_img__8.jpg","program_id":"","timezone":"2"}]' const result = parser({ content }).map(p => { p.start = p.start.toJSON() p.stop = p.stop.toJSON() @@ -41,7 +42,7 @@ it('can parse response', () => { it('can handle empty guide', () => { const result = parser({ - content: `[]` + content: '[]' }) expect(result).toMatchObject([]) }) diff --git a/sites/knr.gl/knr.gl.channels.xml b/sites/knr.gl/knr.gl.channels.xml index 613fa396..cb03446e 100644 --- a/sites/knr.gl/knr.gl.channels.xml +++ b/sites/knr.gl/knr.gl.channels.xml @@ -1,6 +1,4 @@ - - - KNR TV - - \ No newline at end of file + + KNR TV + \ No newline at end of file diff --git a/sites/knr.gl/knr.gl.config.js b/sites/knr.gl/knr.gl.config.js index c123d78d..c9ca8fe2 100644 --- a/sites/knr.gl/knr.gl.config.js +++ b/sites/knr.gl/knr.gl.config.js @@ -40,7 +40,7 @@ function parseStart(item, date) { return dayjs.tz(time, 'YYYY-MM-DD HH:mm', 'America/Godthab') } -function parseItems(content, date) { +function parseItems(content) { const data = JSON.parse(content) if (!data.program_list) return [] const $ = cheerio.load(data.program_list) diff --git a/sites/knr.gl/knr.gl.test.js b/sites/knr.gl/knr.gl.test.js index 30ddc8dc..a0cb8cd4 100644 --- a/sites/knr.gl/knr.gl.test.js +++ b/sites/knr.gl/knr.gl.test.js @@ -1,4 +1,4 @@ -// npx epg-grabber --config=sites/knr.gl/knr.gl.config.js --channels=sites/knr.gl/knr.gl.channels.xml --output=guide.xml --days=2 +// npm run grab -- --site=knr.gl const { parser, url } = require('./knr.gl.config.js') const dayjs = require('dayjs') @@ -18,7 +18,8 @@ it('can generate valid url', () => { }) it('can parse response', () => { - const content = `{\"program_list\":\"\\u003Cdt class=\\u0022program\\u0022\\u003E\\u003Cstrong\\u003E08:00\\u003C\\\/strong\\u003E Meeqqanut - Toqqorsivimmiit\\u003C\\\/dt\\u003E\\u003Cdt class=\\u0022knr-program-pointer knr-program-togle-program\\u0022 data-program-id=\\u0022588574\\u0022 data-module-path=\\u0022sites\\\/knr\\\/modules\\\/custom\\\/knr_site\\u0022\\u003E\\u003Cimg height=\\u00229\\u0022 width=\\u00229\\u0022 id=\\u0022icon_588574\\u0022 alt=\\u0022View description\\u0022 src=\\u0022\\\/sites\\\/knr\\\/modules\\\/custom\\\/knr_site\\\/assets\\\/img\\\/plus.gif\\u0022\\u003E\\u003Cstrong\\u003E08:30\\u003C\\\/strong\\u003E ICC 2018 Piorsarsimassutikkut pisut (1:3)\\u003C\\\/dt\\u003E\\u003Cdd id=\\u0022program_588574\\u0022 style=\\u0022display: none;\\u0022\\u003E\\u003Cdiv class=\\u0022box\\u0022\\u003E2018 ICC ataatsimersuareernerata kingorna unnukkut piorsarsimassutsikkut pisut takutinneqarput. Aammalu illoqarfik Utqiagvik ilisaritinneqarluni. Ove Heilmann, Aannguaq Nielsen, Aannguaq Reimer-Johansen\\r\\nKNR 09.12.2018\\u003C\\\/div\\u003E\\u003C\\\/dd\\u003E\"}` + const content = + '{"program_list":"\\u003Cdt class=\\u0022program\\u0022\\u003E\\u003Cstrong\\u003E08:00\\u003C\\/strong\\u003E Meeqqanut - Toqqorsivimmiit\\u003C\\/dt\\u003E\\u003Cdt class=\\u0022knr-program-pointer knr-program-togle-program\\u0022 data-program-id=\\u0022588574\\u0022 data-module-path=\\u0022sites\\/knr\\/modules\\/custom\\/knr_site\\u0022\\u003E\\u003Cimg height=\\u00229\\u0022 width=\\u00229\\u0022 id=\\u0022icon_588574\\u0022 alt=\\u0022View description\\u0022 src=\\u0022\\/sites\\/knr\\/modules\\/custom\\/knr_site\\/assets\\/img\\/plus.gif\\u0022\\u003E\\u003Cstrong\\u003E08:30\\u003C\\/strong\\u003E ICC 2018 Piorsarsimassutikkut pisut (1:3)\\u003C\\/dt\\u003E\\u003Cdd id=\\u0022program_588574\\u0022 style=\\u0022display: none;\\u0022\\u003E\\u003Cdiv class=\\u0022box\\u0022\\u003E2018 ICC ataatsimersuareernerata kingorna unnukkut piorsarsimassutsikkut pisut takutinneqarput. Aammalu illoqarfik Utqiagvik ilisaritinneqarluni. Ove Heilmann, Aannguaq Nielsen, Aannguaq Reimer-Johansen\\r\\nKNR 09.12.2018\\u003C\\/div\\u003E\\u003C\\/dd\\u003E"}' const result = parser({ content, date }).map(p => { p.start = p.start.toJSON() p.stop = p.stop.toJSON() @@ -29,12 +30,12 @@ it('can parse response', () => { { start: '2021-11-22T11:00:00.000Z', stop: '2021-11-22T11:30:00.000Z', - title: `Meeqqanut - Toqqorsivimmiit` + title: 'Meeqqanut - Toqqorsivimmiit' }, { start: '2021-11-22T11:30:00.000Z', stop: '2021-11-22T12:30:00.000Z', - title: `ICC 2018 Piorsarsimassutikkut pisut (1:3)`, + title: 'ICC 2018 Piorsarsimassutikkut pisut (1:3)', description: '2018 ICC ataatsimersuareernerata kingorna unnukkut piorsarsimassutsikkut pisut takutinneqarput. Aammalu illoqarfik Utqiagvik ilisaritinneqarluni. Ove Heilmann, Aannguaq Nielsen, Aannguaq Reimer-Johansen KNR 09.12.2018' } @@ -45,7 +46,7 @@ it('can handle empty guide', () => { const result = parser({ date, channel, - content: `{"program_list":""}` + content: '{"program_list":""}' }) expect(result).toMatchObject([]) }) diff --git a/sites/kplus.vn/kplus.vn.channels.xml b/sites/kplus.vn/kplus.vn.channels.xml index f2a0882e..3c9b7673 100644 --- a/sites/kplus.vn/kplus.vn.channels.xml +++ b/sites/kplus.vn/kplus.vn.channels.xml @@ -1,31 +1,29 @@ - - - AFC - AXN HD - CARTOON NETWORK - DISCOVERY CHANNEL - VTVCab1-GIAITRITV - HBO HD - HTV7 - HTV9 - KBS WORLD - K+CINE HD - K+LIFE HD - K+PC HD - K+PM HD - NHK WORLD JAPAN - SCTV PHIMTONGHOP - VTC7-TODAY TV - TV5 MONDE - VTC1 - VTV2 - VTV3 HD - VTV4 - VTV6 HD - VTV7 - VTV8 - VTV9 - YOU TV - - + + AFC + AXN HD + CARTOON NETWORK + DISCOVERY CHANNEL + HBO HD + HTV7 + HTV9 + KBS WORLD + K+CINE HD + K+LIFE HD + K+PM HD + K+PC HD + NHK WORLD JAPAN + SCTV PHIMTONGHOP + VTC7-TODAY TV + TV5 MONDE + VTC1 + VTV2 + VTV3 HD + VTV4 + VTV6 HD + VTV7 + VTV8 + VTV9 + VTVCab1-GIAITRITV + YOU TV + diff --git a/sites/kplus.vn/kplus.vn.config.js b/sites/kplus.vn/kplus.vn.config.js index a1bc59e8..a134f1cd 100644 --- a/sites/kplus.vn/kplus.vn.config.js +++ b/sites/kplus.vn/kplus.vn.config.js @@ -6,12 +6,11 @@ const timezone = require('dayjs/plugin/timezone') dayjs.extend(timezone) dayjs.extend(utc) -const API_ENDPOINT = `https://www.kplus.vn/Schedule/getSchedule` +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: { headers: { diff --git a/sites/kplus.vn/kplus.vn.test.js b/sites/kplus.vn/kplus.vn.test.js index 6a855b35..ddadd447 100644 --- a/sites/kplus.vn/kplus.vn.test.js +++ b/sites/kplus.vn/kplus.vn.test.js @@ -1,5 +1,5 @@ // npm run channels:parse -- --config=sites/kplus.vn/kplus.vn.config.js --output=sites/kplus.vn/kplus.vn.channels.xml -// npx epg-grabber --config=sites/kplus.vn/kplus.vn.config.js --channels=sites/kplus.vn/kplus.vn.channels.xml --output=guide.xml --days=2 +// npm run grab -- --site=kplus.vn const { parser, url, request } = require('./kplus.vn.config.js') const dayjs = require('dayjs') @@ -32,7 +32,8 @@ it('can generate valid request data', () => { }) it('can parse response', () => { - const content = `{"SchedulesCount":1105,"ChannelsCount":28,"Schedules":[{"Id":12195,"ChannelId":7019,"ProgramId":35111026,"EpgProgramId":"1252496\\r","ShowingTime":"2022-03-15T06:15:00","EpgBroadcastId":"HD_ENT_DOC_LNO_21_2649421_2652183_4383385_OnAir","EpgId":"HD_ENT_DOC_LNO_21_2649421_2652183_4383385_OnAir","IsDeleted":false,"CreatedOn":"2022-03-15T06:22:45","UpdatedOn":"0001-01-01T00:00:00","Channel":{"Id":7019,"Name":"K+1 HD","Image":"https://kplus-website-production-cdn.azureedge.net/content/upload/7/images-mkt/logo-k-1-hd-new.png","LiveUrlSegment":"highlights/broadcast-schedule/K-1-HD","FeatureImage":"https://kplus-website-production-cdn.azureedge.net/content/upload/7/images-mkt/logo-k-1-hd-new.png","EpgId":null,"IsOTTEnabled":false,"StartOver":0,"DisplayOrder":0},"Program":{"Id":35111026,"Name":"WEEKLY FILMS AND STARS, EP740","BodyContent":"","Cast":"","Director":"","Duration":0,"EpgId":"93701","EpgProgramId":null,"Episode":0,"Genres":"Documentary","Images":"https://img.kplus.vn/images?filename=Media/HDVN/2022_02/ENT_DOC_LNO_21_2649421_2652183_2652183.jpg","IsFeatured":false,"IsOTTEnabled":true,"IsRebroadcast":false,"ShortDescription":"","SubTitle":"","Trailers":"","UrlSegment":"highlights/broadcast-schedule/93701/weekly-films-and-stars-ep740","CreatedOn":"2022-03-16T00:15:45","UpdatedOn":"2022-03-16T00:15:45","ParentalRating":null},"RelatedSchedules":null},{"Id":12196,"ChannelId":7019,"ProgramId":35111279,"EpgProgramId":"798685\\r","ShowingTime":"2022-03-15T07:00:00","EpgBroadcastId":"HD_MOV_COM__2632318_4383386_OnAir","EpgId":"HD_MOV_COM__2632318_4383386_OnAir","IsDeleted":false,"CreatedOn":"2022-03-15T07:02:46","UpdatedOn":"0001-01-01T00:00:00","Channel":{"Id":7019,"Name":"K+1 HD","Image":"https://kplus-website-production-cdn.azureedge.net/content/upload/7/images-mkt/logo-k-1-hd-new.png","LiveUrlSegment":"highlights/broadcast-schedule/K-1-HD","FeatureImage":"https://kplus-website-production-cdn.azureedge.net/content/upload/7/images-mkt/logo-k-1-hd-new.png","EpgId":null,"IsOTTEnabled":false,"StartOver":0,"DisplayOrder":0},"Program":{"Id":35111279,"Name":"ST. VINCENT","BodyContent":"","Cast":"Bill Murray, Melissa McCarthy, Naomi Watts","Director":"Theodore Melfi","Duration":0,"EpgId":"93959","EpgProgramId":null,"Episode":0,"Genres":"Comedy","Images":"https://img.kplus.vn/images?filename=Media/HDVN/2020_05/MOV_COM__2632318_2632318.jpg","IsFeatured":false,"IsOTTEnabled":true,"IsRebroadcast":false,"ShortDescription":"","SubTitle":"","Trailers":"","UrlSegment":"highlights/broadcast-schedule/93959/st-vincent","CreatedOn":"2022-03-16T00:15:45","UpdatedOn":"2022-03-16T00:15:45","ParentalRating":null},"RelatedSchedules":null}]}` + const content = + '{"SchedulesCount":1105,"ChannelsCount":28,"Schedules":[{"Id":12195,"ChannelId":7019,"ProgramId":35111026,"EpgProgramId":"1252496\\r","ShowingTime":"2022-03-15T06:15:00","EpgBroadcastId":"HD_ENT_DOC_LNO_21_2649421_2652183_4383385_OnAir","EpgId":"HD_ENT_DOC_LNO_21_2649421_2652183_4383385_OnAir","IsDeleted":false,"CreatedOn":"2022-03-15T06:22:45","UpdatedOn":"0001-01-01T00:00:00","Channel":{"Id":7019,"Name":"K+1 HD","Image":"https://kplus-website-production-cdn.azureedge.net/content/upload/7/images-mkt/logo-k-1-hd-new.png","LiveUrlSegment":"highlights/broadcast-schedule/K-1-HD","FeatureImage":"https://kplus-website-production-cdn.azureedge.net/content/upload/7/images-mkt/logo-k-1-hd-new.png","EpgId":null,"IsOTTEnabled":false,"StartOver":0,"DisplayOrder":0},"Program":{"Id":35111026,"Name":"WEEKLY FILMS AND STARS, EP740","BodyContent":"","Cast":"","Director":"","Duration":0,"EpgId":"93701","EpgProgramId":null,"Episode":0,"Genres":"Documentary","Images":"https://img.kplus.vn/images?filename=Media/HDVN/2022_02/ENT_DOC_LNO_21_2649421_2652183_2652183.jpg","IsFeatured":false,"IsOTTEnabled":true,"IsRebroadcast":false,"ShortDescription":"","SubTitle":"","Trailers":"","UrlSegment":"highlights/broadcast-schedule/93701/weekly-films-and-stars-ep740","CreatedOn":"2022-03-16T00:15:45","UpdatedOn":"2022-03-16T00:15:45","ParentalRating":null},"RelatedSchedules":null},{"Id":12196,"ChannelId":7019,"ProgramId":35111279,"EpgProgramId":"798685\\r","ShowingTime":"2022-03-15T07:00:00","EpgBroadcastId":"HD_MOV_COM__2632318_4383386_OnAir","EpgId":"HD_MOV_COM__2632318_4383386_OnAir","IsDeleted":false,"CreatedOn":"2022-03-15T07:02:46","UpdatedOn":"0001-01-01T00:00:00","Channel":{"Id":7019,"Name":"K+1 HD","Image":"https://kplus-website-production-cdn.azureedge.net/content/upload/7/images-mkt/logo-k-1-hd-new.png","LiveUrlSegment":"highlights/broadcast-schedule/K-1-HD","FeatureImage":"https://kplus-website-production-cdn.azureedge.net/content/upload/7/images-mkt/logo-k-1-hd-new.png","EpgId":null,"IsOTTEnabled":false,"StartOver":0,"DisplayOrder":0},"Program":{"Id":35111279,"Name":"ST. VINCENT","BodyContent":"","Cast":"Bill Murray, Melissa McCarthy, Naomi Watts","Director":"Theodore Melfi","Duration":0,"EpgId":"93959","EpgProgramId":null,"Episode":0,"Genres":"Comedy","Images":"https://img.kplus.vn/images?filename=Media/HDVN/2020_05/MOV_COM__2632318_2632318.jpg","IsFeatured":false,"IsOTTEnabled":true,"IsRebroadcast":false,"ShortDescription":"","SubTitle":"","Trailers":"","UrlSegment":"highlights/broadcast-schedule/93959/st-vincent","CreatedOn":"2022-03-16T00:15:45","UpdatedOn":"2022-03-16T00:15:45","ParentalRating":null},"RelatedSchedules":null}]}' const result = parser({ content, channel }).map(p => { p.start = p.start.toJSON() p.stop = p.stop.toJSON() @@ -59,7 +60,7 @@ it('can parse response', () => { it('can handle empty guide', () => { const result = parser({ - content: `{"SchedulesCount":0,"ChannelsCount":0,"Schedules":[],"Channels":[],"MinDuration":0}`, + content: '{"SchedulesCount":0,"ChannelsCount":0,"Schedules":[],"Channels":[],"MinDuration":0}', channel }) expect(result).toMatchObject([]) diff --git a/sites/kvf.fo/kvf.fo.channels.xml b/sites/kvf.fo/kvf.fo.channels.xml index 50db3342..83f0c57a 100644 --- a/sites/kvf.fo/kvf.fo.channels.xml +++ b/sites/kvf.fo/kvf.fo.channels.xml @@ -1,6 +1,4 @@ - - - KVF Sjónvarp - - \ No newline at end of file + + KVF Sjónvarp + \ No newline at end of file diff --git a/sites/kvf.fo/kvf.fo.test.js b/sites/kvf.fo/kvf.fo.test.js index 21f30534..637ea272 100644 --- a/sites/kvf.fo/kvf.fo.test.js +++ b/sites/kvf.fo/kvf.fo.test.js @@ -1,4 +1,4 @@ -// npx epg-grabber --config=sites/kvf.fo/kvf.fo.config.js --channels=sites/kvf.fo/kvf.fo.channels.xml --output=guide.xml --days=2 +// npm run grab -- --site=kvf.fo const { parser, url } = require('./kvf.fo.config.js') const fs = require('fs') @@ -30,7 +30,7 @@ it('can parse response', () => { expect(result[2]).toMatchObject({ start: '2021-11-21T18:05:00.000Z', stop: '2021-11-21T18:30:00.000Z', - title: `Letibygd 13` + title: 'Letibygd 13' }) }) @@ -38,7 +38,7 @@ it('can handle empty guide', () => { const result = parser({ date, channel, - content: ` ` + content: ' ' }) expect(result).toMatchObject([]) }) diff --git a/sites/m.tv.sms.cz/m.tv.sms.cz.channels.xml b/sites/m.tv.sms.cz/m.tv.sms.cz.channels.xml index fcff0588..216da1d2 100644 --- a/sites/m.tv.sms.cz/m.tv.sms.cz.channels.xml +++ b/sites/m.tv.sms.cz/m.tv.sms.cz.channels.xml @@ -1,531 +1,529 @@ - - - - BN TV Satelitski - AMC Cesko - Animal Planet - Auto Motor und Sport - AXN Black - AXN - AXN White - Barrandov Krimi - Canal + Domo - Canal + Séries France - Canal+ Sport 1 - Cartoon Network - CBS Reality Europe - CGTN Arabic - CGTN Russkij - Channel 5 - 5 Kanal - 8 Kanal International - Cinemax 2 - Cinemax - CNN Prima News - Cool TV - Credo TV - Crime + Investigation - CS Film - CS History - CS Horror - CS Mystery - CT 1 - CT 2 - CT 24 - CT 3 - CT art - CT :D - CT Sport - Dave UK - Deluxe Lounge - Deluxe Music - Digi Sport 1 Hungary - Digi Sport 2 Hungary - Discovery Channel - Discovery Science - Disney Channel - DM Sat - Doma Hrvatska - Dom Kino - Dom Kino Premium International - DTX - Duck TV SD - Duck TV Plus - Duna TV - Duna World - RTVS 2 - E! Europe - Enter Film - Epic Drama - Eska TV - EuroNews Russkiy - Eurosport 1 - Eurosport 2 - FashionBox HD - Fast & FunBox HD - Fem 3 - FilmBox Action - FilmBox Central Europe - FilmBox Extra HD Czechia - FilmBox Extra HD Polska - FilmBox Family - FilmBox Premium Czechia - FilmBox Stars Czechia - Film Café Hungary - Film Europe - Film Europe + - Film Mánia - Film + Czechia - Film + Hungary - Fokus TV - Folklorika - Fox Crime Hrvatska - Fox Life Hrvatska - Fox Movies Hrvatska - Galaxy 4 - Gold TV - Golf Channel Czechia - HaHa TV - HBO 2 - HBO 3 - HBO - HGTV - Hír TV - History Channel - HNTV - Hobby TV - Home TV - HRT 1 - HRT 2 - HRT 3 - HRT 4 - HRT International - H!t Music Channel Hungary - Inter - Investigation Discovery Europe - Iris - Italia 1 - Italia 2 - Izaura TV - RTVS 1 - JimJam Europe - Joj 24 - Joj Cinema - Joj Family - Jojko - Joj Plus - Joj Šport - Wau TV - Jugoton TV - Jurnal TV - K2 - Kabel Eins Deutschland - Karusel International - KHL - Kino Barrandov - Kino Polska - Kino TV - Lala TV - Leo TV - Leo TV Gold - Love Nature - Luxe TV - M1 - M2 - M4 Sport - M5 - TV Markíza - Dajto - TV Doma - Markíza International - Markíza Krimi - Mediaset Extra - Mezzo Live HD - Minimax Czechia - Minimax Hungary - Mini TV - Mňam TV - Mňau TV - Movistar Acción - Movistar Comedia - Movistar Deportes - Movistar Drama - Movistar Estrenos - Movistar Golf - MTV 00s - MTV Hungary - Music Box Ukraina - Muzika Pervogo - Muzsika TV - Náš REGION TV - National Geographic Hrvatska - National Geographic - National Geographic Wild - Nickelodeon Czechia - Nick Jr Czechia - Nicktoons Czechia - Nova Action - Nova Cinema - Nova Fun - Nova Gold - Nova International - Nova Lady - Nova Sport 1 - Nova Sport 2 - Nova Sport 3 - Nova Sport 4 - Nova TV - Novela TV - N-TV - Nuta TV - Telekanal O! - O2 TV Fotbal - O2 TV Sport - O2 TV Sport 2 - O2 TV Sport 3 - O2 TV Sport 4 - O2 TV Sport 5 - O2 TV Sport 6 - O2 TV Tenis - Óčko - Óčko Black - Óčko Expres - Óčko Star - One - ORF 1 - ORF 2 - ORF III - Paramount Network - Park TV - Pax TV - Poehali! International - Polonia 1 - Polo TV - Polsat - Polsat 2 - Polsat Café - Polsat News - Polsat News 2 - Polsat Play - Polsat Sport - Polsat Sport Extra - Power TV - Premier Sport 1 - Premier Sport 2 - Prima - Prima Cool - Prima Krimi - Prima Love - Prima Max - Prima Plus - Prima Show - Prima Star - Prima Zoom - Private TV - ProSieben Deutschland - Puls 2 - Racing UK SD - Rai 1 - Rai 2 - Rai 3 - Rai 5 - Rai Gulp - Rai Movie - Rai News 24 - Rai Premium - Rai Sport 1 - Rai Sport 2 - Rai Storia - Rai Yoyo - RBB Berlin - Rebel - Red Carpet - Redlight HD - Relax - Rete 4 - Retro Music TV - RT Documentary - RTL 2 Hrvatska - RTL 4 - RTL 5 - RTL Crime Hrvatska - RTL Hrvatska - RTL Gold - RTL HÁROM - RTL - RTL KETTŐ - RTL Kockica - RTL Living Hrvatska - RTL Passion Hrvatska - RTL Zwei Deutschland - RTR Planeta - RTVi Europe - Rossiya 24 - Sat. 1 Deutschland - Sat. 1 Gold Deutschland - Senzi - Sixx Deutschland - Slágr Muzika - Slágr Original - Slágr Premium - Sláger TV - Sony Max Hungary - Sony Movie Channel Hungary - Sorozat + - Spektrum Czech - Spektrum Home Czech - Spektrum Home - Spektrum - RTVS Šport - Sport 1 Czechia - Sport 1 Hungary - Sport 2 Czechia - Sport 2 Hungary - Sport 5 - Stingray IConcerts - Stopklatka TV - Story 4 - Super Polsat - Super RTL Deutschland - Super TV 2 - Superyacht TV - TA 3 - Tagesschau 24 - TBN Polska - Telecafé International - TV Seznam - TF 1 - The Fishing & Hunting Channel - TLC Pan Regional - TMC - Travel Channel Europe - Travelxp HD Europe - RTVS 3 - TTV - Tuki TV - Turbo TV - TV 1000 Balkan - TV 2 - TV 2000 - TV 2 Séf - TV3 - TV3CAT - TV 4 - TV 4 - TV 6 - TV 7 - TV Osem - TV Barrandov - TVC - TV Central - TVCG Sat - Televízia Dolný Kubín - TVE Internacional Europa - TV Joj - TV Lux - TVN - TVN 24 - TVN 7 - TV Natura - TV Noe - TV Nova - TVN Turbo - TVP 1 - TVP 2 - TVP ABC - TV Paprika Czech Republic - TV Paprika - TVP HD - TVP Historia - TVP Info - TVP Kultura - TV Povazie - TVP Polonia - TVP Rozrywka - TVP Seriale - TVP Sport - TV Puls - TV Raj - TV Republika - Rik - TV Romana - TVS - TV Severka - TV Slovenija 1 - TV Slovenija 2 - TV TRWAM - TV Vega - TV Východ - UA TV - Ukraïna 24 - Up Network - Viasat Explore - Viasat History - Viasat Nature - VTV 1 - VTV 2 - VTV 3 - VTV 4 - Water Planet - W Polsce PL - Z1 - Zoom - Zoom TV - 3sat - Anixe HD Serie - ARD Alpha - Das Erste - Disney Channel Deutschland - HR Fernsehen - KIKA - Nitro Deutschland - Phoenix - RTL Deutschland - Welt - ZDF - ZDF Info - ZDF Neo - 360 Tune Box - Aljazeera Channel - Aljazeera English - Animal Planet UK - Arirang World - Babes TV - Baby TV Europe - BBC Entertainment Europe - BBC Four - BBC One - BBC Two - BBC World News Europe - Bloomberg TV Europe - Blue Hustler Europe - Boomerang Central & Eastern Europe - Brazzers TV Europe - CBBC - CCTV 4 Europe - CCTV 9 - Club MTV - CNN International Europe - Crime + Investigation UK - Desire TV - Disney Junior - DocuBox HD - Dorcel TV - Dorcel XXX - Dusk - DW Deutsch - E4 UK - Eden - English Club TV - Erox HD - Eroxxx HD - Eurochannel - EuroNews English - EuroNews Magyar - EWTN Europe - Extasy TV - Extreme Sports Channel - FashionTV Europe - FightBox HD - Film 4 - FilmBox Arthouse Worldwide - Food Network EMEA - France 24 English - Fuel TV - Gametoon - Ginx eSports TV International - Hustler HD Europe - Hustler TV Europe - ITV London - ITV 2 - ITV 3 - ITV 4 - KBS World - Lounge TV - More 4 UK - MTV 80s - MTV 90s - MTV Hits Europe - MTV Live - MTV UK - MyZen TV - MyZen TV 4K - NASA TV Public - NASA TV UHD Public - National Geographic HD UK - Nautical Channel - NBA TV - NHK World Japan - Outdoor Channel - Passion XXX - Pick UK - Playboy TV Europe - Reality Kings TV - RTG TV - Sky Arts UK - Sky Atlantic UK - Sky Cinema Action - Sky Cinema Drama - Sky Cinema Family - Sky Cinema Greats - Sky Cinema Hits - Sky Cinema Premiere - Sky Cinema Sci-fi Horror - Sky Cinema Select - Sky Comedy UK - Sky Crime - Sky History 2 - Sky News UK - Sky News International - Sky One UK - Sky Sci-Fi - Sky Sports Cricket - Sky Sports F1 - Sky Sports Football UK - Sky Sports Golf UK - Sky Sports Main Event UK - Sky Sports News UK - Sky Sports Premier League UK - Sky Witness UK - Stars TV - Stingray Classica - Stingray CMusic - Stingray Djazz - SuperOne HD - Trace Sport Stars - True Amateurs - Wild TV - #0 - Canal 24 Horas - CGTN Español - CGTN Français - France 24 Français - France 3 - Mezzo - TV5Monde Europe - Aljazeera Balkans - ATV - Comedy Central Family Hungary - Comedy Central Hungary - La 5 - BVN Europa - 4 Fun Dance - 4 Fun Kids - 4 Fun TV - Adventure - Belarus 24 - Biznes 24 - Cartoon Network Polska - 7D7 - Bober International - Perviy kanal - RTVS 24 - Arcadia TV - Arena Sport 1 - Arena Sport 2 - Chuck TV - CNL Evropa - Life TV - - + + + BN TV Satelitski + AMC Cesko + Animal Planet + Auto Motor und Sport + AXN Black + AXN + AXN White + Barrandov Krimi + Canal + Domo + Canal + Séries France + Canal+ Sport 1 + Cartoon Network + CBS Reality Europe + CGTN Arabic + CGTN Russkij + Channel 5 + 5 Kanal + 8 Kanal International + Cinemax 2 + Cinemax + CNN Prima News + Cool TV + Credo TV + Crime + Investigation + CS Film + CS History + CS Horror + CS Mystery + CT 1 + CT 2 + CT 24 + CT 3 + CT art + CT :D + CT Sport + Dave UK + Deluxe Lounge + Deluxe Music + Digi Sport 1 Hungary + Digi Sport 2 Hungary + Discovery Channel + Discovery Science + Disney Channel + DM Sat + Doma Hrvatska + Dom Kino + Dom Kino Premium International + DTX + Duck TV SD + Duck TV Plus + Duna TV + Duna World + RTVS 2 + E! Europe + Enter Film + Epic Drama + Eska TV + EuroNews Russkiy + Eurosport 1 + Eurosport 2 + FashionBox HD + Fast & FunBox HD + Fem 3 + FilmBox Action + FilmBox Central Europe + FilmBox Extra HD Czechia + FilmBox Extra HD Polska + FilmBox Family + FilmBox Premium Czechia + FilmBox Stars Czechia + Film Café Hungary + Film Europe + Film Europe + + Film Mánia + Film + Czechia + Film + Hungary + Fokus TV + Folklorika + Fox Crime Hrvatska + Fox Life Hrvatska + Fox Movies Hrvatska + Galaxy 4 + Gold TV + Golf Channel Czechia + HaHa TV + HBO 2 + HBO 3 + HBO + HGTV + Hír TV + History Channel + HNTV + Hobby TV + Home TV + HRT 1 + HRT 2 + HRT 3 + HRT 4 + HRT International + H!t Music Channel Hungary + Inter + Investigation Discovery Europe + Iris + Italia 1 + Italia 2 + Izaura TV + RTVS 1 + JimJam Europe + Joj 24 + Joj Cinema + Joj Family + Jojko + Joj Plus + Joj Šport + Wau TV + Jugoton TV + Jurnal TV + K2 + Kabel Eins Deutschland + Karusel International + KHL + Kino Barrandov + Kino Polska + Kino TV + Lala TV + Leo TV + Leo TV Gold + Love Nature + Luxe TV + M1 + M2 + M4 Sport + M5 + TV Markíza + Dajto + TV Doma + Markíza International + Markíza Krimi + Mediaset Extra + Mezzo Live HD + Minimax Czechia + Minimax Hungary + Mini TV + Mňam TV + Mňau TV + Movistar Acción + Movistar Comedia + Movistar Deportes + Movistar Drama + Movistar Estrenos + Movistar Golf + MTV 00s + MTV Hungary + Music Box Ukraina + Muzika Pervogo + Muzsika TV + Náš REGION TV + National Geographic Hrvatska + National Geographic + National Geographic Wild + Nickelodeon Czechia + Nick Jr Czechia + Nicktoons Czechia + Nova Action + Nova Cinema + Nova Fun + Nova Gold + Nova International + Nova Lady + Nova Sport 1 + Nova Sport 2 + Nova Sport 3 + Nova Sport 4 + Nova TV + Novela TV + N-TV + Nuta TV + Telekanal O! + O2 TV Fotbal + O2 TV Sport + O2 TV Sport 2 + O2 TV Sport 3 + O2 TV Sport 4 + O2 TV Sport 5 + O2 TV Sport 6 + O2 TV Tenis + Óčko + Óčko Black + Óčko Expres + Óčko Star + One + ORF 1 + ORF 2 + ORF III + Paramount Network + Park TV + Pax TV + Poehali! International + Polonia 1 + Polo TV + Polsat + Polsat 2 + Polsat Café + Polsat News + Polsat News 2 + Polsat Play + Polsat Sport + Polsat Sport Extra + Power TV + Premier Sport 1 + Premier Sport 2 + Prima + Prima Cool + Prima Krimi + Prima Love + Prima Max + Prima Plus + Prima Show + Prima Star + Prima Zoom + Private TV + ProSieben Deutschland + Puls 2 + Racing UK SD + Rai 1 + Rai 2 + Rai 3 + Rai 5 + Rai Gulp + Rai Movie + Rai News 24 + Rai Premium + Rai Sport 1 + Rai Sport 2 + Rai Storia + Rai Yoyo + RBB Berlin + Rebel + Red Carpet + Redlight HD + Relax + Rete 4 + Retro Music TV + RT Documentary + RTL 2 Hrvatska + RTL 4 + RTL 5 + RTL Crime Hrvatska + RTL Hrvatska + RTL Gold + RTL HÁROM + RTL + RTL KETTŐ + RTL Kockica + RTL Living Hrvatska + RTL Passion Hrvatska + RTL Zwei Deutschland + RTR Planeta + RTVi Europe + Rossiya 24 + Sat. 1 Deutschland + Sat. 1 Gold Deutschland + Senzi + Sixx Deutschland + Slágr Muzika + Slágr Original + Slágr Premium + Sláger TV + Sony Max Hungary + Sony Movie Channel Hungary + Sorozat + + Spektrum Czech + Spektrum Home Czech + Spektrum Home + Spektrum + RTVS Šport + Sport 1 Czechia + Sport 1 Hungary + Sport 2 Czechia + Sport 2 Hungary + Sport 5 + Stingray IConcerts + Stopklatka TV + Story 4 + Super Polsat + Super RTL Deutschland + Super TV 2 + Superyacht TV + TA 3 + Tagesschau 24 + TBN Polska + Telecafé International + TV Seznam + TF 1 + The Fishing & Hunting Channel + TLC Pan Regional + TMC + Travel Channel Europe + Travelxp HD Europe + RTVS 3 + TTV + Tuki TV + Turbo TV + TV 1000 Balkan + TV 2 + TV 2000 + TV 2 Séf + TV3 + TV3CAT + TV 4 + TV 4 + TV 6 + TV 7 + TV Osem + TV Barrandov + TVC + TV Central + TVCG Sat + Televízia Dolný Kubín + TVE Internacional Europa + TV Joj + TV Lux + TVN + TVN 24 + TVN 7 + TV Natura + TV Noe + TV Nova + TVN Turbo + TVP 1 + TVP 2 + TVP ABC + TV Paprika Czech Republic + TV Paprika + TVP HD + TVP Historia + TVP Info + TVP Kultura + TV Povazie + TVP Polonia + TVP Rozrywka + TVP Seriale + TVP Sport + TV Puls + TV Raj + TV Republika + Rik + TV Romana + TVS + TV Severka + TV Slovenija 1 + TV Slovenija 2 + TV TRWAM + TV Vega + TV Východ + UA TV + Ukraïna 24 + Up Network + Viasat Explore + Viasat History + Viasat Nature + VTV 1 + VTV 2 + VTV 3 + VTV 4 + Water Planet + W Polsce PL + Z1 + Zoom + Zoom TV + 3sat + Anixe HD Serie + ARD Alpha + Das Erste + Disney Channel Deutschland + HR Fernsehen + KIKA + Nitro Deutschland + Phoenix + RTL Deutschland + Welt + ZDF + ZDF Info + ZDF Neo + 360 Tune Box + Aljazeera Channel + Aljazeera English + Animal Planet UK + Arirang World + Babes TV + Baby TV Europe + BBC Entertainment Europe + BBC Four + BBC One + BBC Two + BBC World News Europe + Bloomberg TV Europe + Blue Hustler Europe + Boomerang Central & Eastern Europe + Brazzers TV Europe + CBBC + CCTV 4 Europe + CCTV 9 + Club MTV + CNN International Europe + Crime + Investigation UK + Desire TV + Disney Junior + DocuBox HD + Dorcel TV + Dorcel XXX + Dusk + DW Deutsch + E4 UK + Eden + English Club TV + Erox HD + Eroxxx HD + Eurochannel + EuroNews English + EuroNews Magyar + EWTN Europe + Extasy TV + Extreme Sports Channel + FashionTV Europe + FightBox HD + Film 4 + FilmBox Arthouse Worldwide + Food Network EMEA + France 24 English + Fuel TV + Gametoon + Ginx eSports TV International + Hustler HD Europe + Hustler TV Europe + ITV London + ITV 2 + ITV 3 + ITV 4 + KBS World + Lounge TV + More 4 UK + MTV 80s + MTV 90s + MTV Hits Europe + MTV Live + MTV UK + MyZen TV + MyZen TV 4K + NASA TV Public + NASA TV UHD Public + National Geographic HD UK + Nautical Channel + NBA TV + NHK World Japan + Outdoor Channel + Passion XXX + Pick UK + Playboy TV Europe + Reality Kings TV + RTG TV + Sky Arts UK + Sky Atlantic UK + Sky Cinema Action + Sky Cinema Drama + Sky Cinema Family + Sky Cinema Greats + Sky Cinema Hits + Sky Cinema Premiere + Sky Cinema Sci-fi Horror + Sky Cinema Select + Sky Comedy UK + Sky Crime + Sky History 2 + Sky News UK + Sky News International + Sky One UK + Sky Sci-Fi + Sky Sports Cricket + Sky Sports F1 + Sky Sports Football UK + Sky Sports Golf UK + Sky Sports Main Event UK + Sky Sports News UK + Sky Sports Premier League UK + Sky Witness UK + Stars TV + Stingray Classica + Stingray CMusic + Stingray Djazz + SuperOne HD + Trace Sport Stars + True Amateurs + Wild TV + #0 + Canal 24 Horas + CGTN Español + CGTN Français + France 24 Français + France 3 + Mezzo + TV5Monde Europe + Aljazeera Balkans + ATV + Comedy Central Family Hungary + Comedy Central Hungary + La 5 + BVN Europa + 4 Fun Dance + 4 Fun Kids + 4 Fun TV + Adventure + Belarus 24 + Biznes 24 + Cartoon Network Polska + 7D7 + Bober International + Perviy kanal + RTVS 24 + Arcadia TV + Arena Sport 1 + Arena Sport 2 + Chuck TV + CNL Evropa + Life TV + 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 7e01c27a..fadfd686 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 @@ -13,7 +13,7 @@ module.exports = { parser: function ({ buffer, date }) { const programs = [] const items = parseItems(buffer) - items.forEach((item, i) => { + items.forEach(item => { const prev = programs[programs.length - 1] const $item = cheerio.load(item) let start = parseStart($item, date) diff --git a/sites/m.tv.sms.cz/m.tv.sms.cz.test.js b/sites/m.tv.sms.cz/m.tv.sms.cz.test.js index 49426b41..9346a5af 100644 --- a/sites/m.tv.sms.cz/m.tv.sms.cz.test.js +++ b/sites/m.tv.sms.cz/m.tv.sms.cz.test.js @@ -1,4 +1,4 @@ -// npx epg-grabber --config=sites/m.tv.sms.cz/m.tv.sms.cz.config.js --channels=sites/m.tv.sms.cz/m.tv.sms.cz.channels.xml --output=guide.xml +// npm run grab -- --site=m.tv.sms.cz const { parser, url } = require('./m.tv.sms.cz.config.js') const iconv = require('iconv-lite') @@ -34,14 +34,14 @@ it('can parse response', () => { expect(results[0]).toMatchObject({ start: '2023-06-11T03:21:00.000Z', stop: '2023-06-11T04:08:00.000Z', - title: `Conspiraciones al descubierto: La bomba atómica alemana y el hundimiento del Titanic`, + title: 'Conspiraciones al descubierto: La bomba atómica alemana y el hundimiento del Titanic', description: 'Documentales' }) expect(results[25]).toMatchObject({ start: '2023-06-12T02:23:00.000Z', stop: '2023-06-12T03:23:00.000Z', - title: `Rapa I (6)`, + title: 'Rapa I (6)', description: 'Series' }) }) @@ -50,7 +50,7 @@ it('can handle empty guide', () => { const result = parser({ buffer: iconv.encode( Buffer.from( - `` + '' ), 'win1250' ) diff --git a/sites/magentatv.at/magentatv.at.channels.xml b/sites/magentatv.at/magentatv.at.channels.xml index 57afa997..5663918c 100644 --- a/sites/magentatv.at/magentatv.at.channels.xml +++ b/sites/magentatv.at/magentatv.at.channels.xml @@ -1,219 +1,217 @@ - - - 1-2-3.tv - 13th Street HD - 3sat - Al Jazeera - ARD-alpha - ARTE Deutsch - ATV - ATV 2 - Auto Motor und Sport - Baby TV - BBC Entertainment Europe - BBC World News Europe - Bergblick - Bibel TV - Bloomberg - Blue Hustler Europe - Bon Gusto - Boomerang - Cartoon Network - CCTV 4 Europe - CGTN - Club MTV - CNBC - CNN - COMEDY CENTRAL - Crime + Investigation - Das Erste - DELUXE MUSIC - Disney Channel Deutschland - DMAX Austria - Duna TV - E! Europe - eSPORTS1 HD - euronews (D) - Eurosport 1 Germany - - Eurosport Turkey - Evil Angel TV - Extreme Sports Channel - Fashion TV - Film Klub - Fix&Foxi - France 24 (en francais) - GEO TV HD - GoTV - Gute Laune TV - Habertürk - Hayat TV - Heimatkanal - History Germany - HOME & GARDEN TV HD - HR Fernsehen - HRT TV 1 - HSE - HSE Extra - HSE Trend - HT 1 Innviertel - Hustler TV Europe - Kabel Eins Austria - Kabel Eins Classics - Kabel Eins Doku Austria - KIKA - Kinowelt TV HD - Klasik TV - Krone TV - K-TV - Kurier TV - Melodie TV - Motorvision - MTV - MTV 00s - MTV 80s - MTV 90s - MTV Hits Europe - MTV Live HD - N24 Doku - NatGeo HD - National Geographic Wild HD - Nick HD - Nick.Jr. - Nitro Austria - N-TV Austria - Oe24 TV - Okto TV - One - ORF 1 - ORF 2 Burgenland - ORF 2 Europe - ORF 2 Kärnten - ORF 2 NiederÖsterreich - ORF 2 OberÖsterreich - ORF 2 Salzburg - ORF 2 Steiermark - ORF 2 Tirol - ORF 2 Vorarlberg - ORF 2 Wien - ORF III - ORF Sport + - Phoenix - Pink Extra - Pink Film - Pink Music - Pink Plus - ProSieben Austria - ProSieben FUN HD - ProSieben Maxx Austria - Puls 24 - Puls 4 - QVC Deutschland - QVC Style Deutschland - QVC ZWEI - R9 - Rai Due - Rai Tre - Rai Uno - RBB Berlin - RiC - Romance TV - RTL Austria - RTL Crime Deutschland - RTL Living Deutschland - RTL Passion Deutschland - RTL Zwei Austria - RTLup - RTR Planeta - Sat. 1 Gold Österreich - Sat. 1 Österreich - SAT.1 emotions - Servus TV Österreich - Sixx Austria - Sky Atlantic HD - Sky Cinema Action HD - Sky Cinema Best Of HD - Sky Cinema Classics - Sky Cinema Family - Sky Cinema Fun - Sky Cinema Premieren +24 - Sky Cinema Premieren HD - Sky Cinema Special HD - Sky Cinema Thriller HD - Sky Comedy HD - Sky Crime HD - Sky Documentaries HD - Sky Krimi HD - Sky Nature HD - Sky One HD - Sky Replay - Sky Showcase - Sky Sport 1 HD - Sky Sport 10 HD - Sky Sport 11 HD - Sky Sport 12 HD - Sky Sport 13 HD - Sky Sport 14 HD - Sky Sport 2 HD - Sky Sport 3 HD - Sky Sport 4 HD - Sky Sport 5 HD - Sky Sport 6 HD - Sky Sport 7 HD - Sky Sport 8 HD - Sky Sport 9 HD - Sky Sport Austria 1 - Sky Sport Austria 2 - Sky Sport Austria 3 - Sky Sport Austria 4 - Sky Sport Austria 5 - Sky Sport Austria 6 - Sky Sport Austria 7 - Sky Sport Bundesliga 1 HD - Sky Sport Bundesliga 10 HD - Sky Sport Bundesliga 2 HD - Sky Sport Bundesliga 3 HD - Sky Sport Bundesliga 4 HD - Sky Sport Bundesliga 5 HD - Sky Sport Bundesliga 6 HD - Sky Sport Bundesliga 7 HD - Sky Sport Bundesliga 8 HD - Sky Sport Bundesliga 9 HD - Sky Sport F1 HD - Sky Sport Golf - Sky Sport News HD - Sky Sport Premier League - Spiegel Geschichte - Spiegel TV Wissen HD - Sport 1 - Sport 1+ - SPORTDIGITAL FUSSBALL - SR Fernsehen HD - Stingray All Day Party! - Stingray Classic R&B - Stingray Classic Rock - Super RTL Austria - SWR Fernsehen RP - SYFY HD - tagesschau24 HD - Tele 5 - Tirol TV - TLC Austria - Toxic TV - TRT World - TV Polonia - TV5MONDE Europe - Universal TV HD - Vesti - Volksmusik TV - Vox Austria - W24 - Warner TV Comedy HD - Warner TV Serie - WDR Fernsehen Köln - ZDF - ZDF Info - ZDF Neo - - + + + + Film Klub + Hayat TV + 1-2-3.tv + 13th Street HD + 3sat + ARD-alpha + ARTE Deutsch + ATV + ATV 2 + Auto Motor und Sport + Baby TV + Bergblick + Bibel TV + Bon Gusto + Boomerang + Cartoon Network + COMEDY CENTRAL + Crime + Investigation + Das Erste + DELUXE MUSIC + Disney Channel Deutschland + DMAX Austria + E! Europe + eSPORTS1 HD + euronews (D) + Eurosport 1 Germany + Evil Angel TV + Extreme Sports Channel + Fix&Foxi + GEO TV HD + GoTV + Gute Laune TV + Habertürk + Heimatkanal + HOME & GARDEN TV HD + History Germany + HR Fernsehen + HSE + HSE Extra + HSE Trend + HT 1 Innviertel + Kabel Eins Austria + Kabel Eins Doku Austria + Kabel Eins Classics + KIKA + Kinowelt TV HD + Krone TV + K-TV + Kurier TV + Melodie TV + Motorvision + MTV 00s + MTV 80s + MTV + N24 Doku + NatGeo HD + National Geographic Wild HD + Nick.Jr. + Nitro Austria + N-TV Austria + Oe24 TV + Okto TV + One + ORF 1 + ORF 2 Burgenland + ORF 2 Europe + ORF 2 Kärnten + ORF 2 NiederÖsterreich + ORF 2 OberÖsterreich + ORF 2 Salzburg + ORF 2 Steiermark + ORF 2 Tirol + ORF 2 Vorarlberg + ORF 2 Wien + ORF III + ORF Sport + + Phoenix + ProSieben Austria + ProSieben FUN HD + ProSieben Maxx Austria + Puls 24 + Puls 4 + QVC ZWEI + QVC Deutschland + QVC Style Deutschland + R9 + RBB Berlin + RiC + Romance TV + RTL Crime Deutschland + RTL Austria + RTL Living Deutschland + RTL Passion Deutschland + RTLup + RTL Zwei Austria + RTR Planeta + Sat. 1 Österreich + SAT.1 emotions + Sat. 1 Gold Österreich + Servus TV Österreich + Sixx Austria + Sky Atlantic HD + Sky Cinema Action HD + Sky Cinema Best Of HD + Sky Cinema Classics + Sky Cinema Family + Sky Cinema Fun + Sky Cinema Premieren HD + Sky Cinema Premieren +24 + Sky Cinema Special HD + Sky Cinema Thriller HD + Sky Comedy HD + Sky Crime HD + Sky Documentaries HD + Sky Krimi HD + Sky Nature HD + Sky One HD + Sky Replay + Sky Showcase + Sky Sport 10 HD + Sky Sport 11 HD + Sky Sport 12 HD + Sky Sport 13 HD + Sky Sport 14 HD + Sky Sport 1 HD + Sky Sport 2 HD + Sky Sport 3 HD + Sky Sport 4 HD + Sky Sport 5 HD + Sky Sport 6 HD + Sky Sport 7 HD + Sky Sport 8 HD + Sky Sport 9 HD + Sky Sport Austria 1 + Sky Sport Austria 2 + Sky Sport Austria 3 + Sky Sport Austria 4 + Sky Sport Austria 5 + Sky Sport Austria 6 + Sky Sport Austria 7 + Sky Sport Bundesliga 1 HD + Sky Sport Bundesliga 10 HD + Sky Sport Bundesliga 2 HD + Sky Sport Bundesliga 3 HD + Sky Sport Bundesliga 4 HD + Sky Sport Bundesliga 5 HD + Sky Sport Bundesliga 6 HD + Sky Sport Bundesliga 7 HD + Sky Sport Bundesliga 8 HD + Sky Sport Bundesliga 9 HD + Sky Sport F1 HD + Sky Sport Golf + Sky Sport News HD + Sky Sport Premier League + Spiegel Geschichte + Spiegel TV Wissen HD + Sport 1 + Sport 1+ + SPORTDIGITAL FUSSBALL + SR Fernsehen HD + Stingray All Day Party! + Stingray Classic R&B + Stingray Classic Rock + Super RTL Austria + SWR Fernsehen RP + SYFY HD + tagesschau24 HD + Tele 5 + Tirol TV + TLC Austria + Universal TV HD + Volksmusik TV + Vox Austria + W24 + Warner TV Comedy HD + Warner TV Serie + WDR Fernsehen Köln + ZDF + ZDF Info + ZDF Neo + Al Jazeera + BBC Entertainment Europe + BBC World News Europe + Bloomberg + Blue Hustler Europe + CCTV 4 Europe + CGTN + Club MTV + CNBC + CNN + Fashion TV + Hustler TV Europe + MTV 90s + MTV Hits Europe + MTV Live HD + TRT World + France 24 (en francais) + TV5MONDE Europe + HRT TV 1 + Duna TV + Rai Uno + Rai Due + Rai Tre + TV Polonia + Klasik TV + Pink Extra + Pink Film + Pink Music + Pink Plus + Toxic TV + Vesti + Eurosport Turkey + diff --git a/sites/magentatv.at/magentatv.at.config.js b/sites/magentatv.at/magentatv.at.config.js index 6e768fce..71f16b0e 100644 --- a/sites/magentatv.at/magentatv.at.config.js +++ b/sites/magentatv.at/magentatv.at.config.js @@ -21,25 +21,19 @@ module.exports = { if (!items.length) return programs const promises = [ axios.get( - `${API_STATIC_ENDPOINT}/de/events/segments/${date - .add(6, 'h') - .format('YYYYMMDDHHmmss')}`, + `${API_STATIC_ENDPOINT}/de/events/segments/${date.add(6, 'h').format('YYYYMMDDHHmmss')}`, { responseType: 'arraybuffer' } ), axios.get( - `${API_STATIC_ENDPOINT}/de/events/segments/${date - .add(12, 'h') - .format('YYYYMMDDHHmmss')}`, + `${API_STATIC_ENDPOINT}/de/events/segments/${date.add(12, 'h').format('YYYYMMDDHHmmss')}`, { responseType: 'arraybuffer' } ), axios.get( - `${API_STATIC_ENDPOINT}/de/events/segments/${date - .add(18, 'h') - .format('YYYYMMDDHHmmss')}`, + `${API_STATIC_ENDPOINT}/de/events/segments/${date.add(18, 'h').format('YYYYMMDDHHmmss')}`, { responseType: 'arraybuffer' } diff --git a/sites/magentatv.at/magentatv.at.test.js b/sites/magentatv.at/magentatv.at.test.js index 8785663c..de0c538a 100644 --- a/sites/magentatv.at/magentatv.at.test.js +++ b/sites/magentatv.at/magentatv.at.test.js @@ -1,5 +1,5 @@ // npm run channels:parse -- --config=./sites/magentatv.at/magentatv.at.config.js --output=./sites/magentatv.at/magentatv.at.channels.xml -// npx epg-grabber --config=sites/magentatv.at/magentatv.at.config.js --channels=sites/magentatv.at/magentatv.at.channels.xml --output=guide.xml --days=2 +// npm run grab -- --site=magentatv.at const { parser, url } = require('./magentatv.at.config.js') const fs = require('fs') @@ -91,7 +91,7 @@ it('can parse response', async () => { }) it('can handle empty guide', async () => { - let results = await parser({ content: ``, channel, date }) + let results = await parser({ content: '', channel, date }) expect(results).toMatchObject([]) }) diff --git a/sites/magentatv.de/magentatv.de.channels.xml b/sites/magentatv.de/magentatv.de.channels.xml index 1e923afc..17aa69f4 100644 --- a/sites/magentatv.de/magentatv.de.channels.xml +++ b/sites/magentatv.de/magentatv.de.channels.xml @@ -1,263 +1,261 @@ - - - 1-2-3.tv - 13TH STREET - 3sat - ALEX Berlin - allgäu.tv - altenburg.tv - Animal Planet - ANIXE HD Serie - ANIXE+ - ARD-alpha - ARTE - a.tv - auto motor und sport - Baby TV - Baden TV - Baden TV Süd - BBC World - Beate-Uhse.TV (Sky) - beIN iZ - beIN Movies Turk - Bergblick - Bibel TV - BILD - Blue Hustler - BonGusto - Boomerang - BR Fernsehen Nord - BR Fernsehen Süd - Cartoon Network - CEM TV - CHANNEL21 - Chemnitz Fernsehen - Classica (Sky) - CNN International - Comedy Central - Nick/Comedy Central+1 - Crime+Investigation - #dabeiTV - Das Erste - DELUXE MUSIC - Deutsches Musik Fernsehen - Discovery Channel - Disney Channel - DMAX - Dresden Fernsehen - DW - E! Entertainment - ems TV - eSPORTS1 - Euro D - Euronews Deutsch - Euronews Italiano - Euronews Russki - Eurosport 1 - Eurosport 2 - Eurostar TV - Extreme Sports - Fashion TV - FC BAYERN.TV LIVE - France 24 francais - Franken Fernsehen - Friesischer Rundfunk - GEO Television - Habertürk TV - Hamburg 1 - HAUPTSTADT.TV - Heimatkanal - HGTV - The HISTORY Channel - hr-fernsehen - HSE - iTVN - Jukebox - Junior (Sky) - Juwelo - Kabel Eins CLASSICS - Kabel Eins - Kabel Eins Doku - Kanal 7 - KiKA - KinoweltTV - K-TV - LAUSITZWELLE - Leipzig Fernsehen - L-TV - Lust pur - MagentaSport - Marco Polo TV - MDF.1 Fernsehen - MDR-Fernsehen Sachsen - MDR-Fernsehen Sachsen-Anhalt - MDR-Fernsehen Thüringen - More Than Sports TV - MOTORVISION.TV - MTV - münchen.tv - N24 Doku - Kinomir - National Geographic - National Geographic Wild - NDR Fernsehen Hamburg - NDR Fernsehen Mecklenburg-Vorpommern - NDR Fernsehen Niedersachsen - NDR Fernsehen Schleswig-Holstein - Nick Jr. - Nicktoons (Sky) - NIEDERBAYERN TV - DEG - NIEDERBAYERN TV - LA - NIEDERBAYERN TV - PA - NITRO - nrwision - n-tv - Oberpfalz TV - OF-TV - OK4 - OK54 Trier - OK-TV Ludwigshafen - OK:TV Mainz - OK Weinstraße - ONE - OstWest - Penthouse Passion - phoenix - Playboy Europe - ProSieben - ProSieben FUN - ProSieben MAXX - QVC - Radio Bremen TV - Rai 1 - Rai 2 - Rai 3 - rbb fernsehen Berlin - rbb fernsehen Brandenburg - Red Bull TV - Rennsteig.TV - RFH Regionalfernsehen Harz - RFO - Rhein-Main TV - RNF - Romance TV - RTL Crime - RTL - RTL Hessen - RTL Living - RTL HH SH - RTL HB NDS - RTL Passion - RTLup - RTL NRW - RTLZWEI - RTR Planeta - salve.tv - SAT.1 Bayern - SAT.1 - SAT.1 emotions - SAT.1 GOLD - SAT.1 HH SH - SAT.1 NDS Bremen - SAT.1 NRW - SAT.1 RhlPf Hessen - ServusTV - Shop LC - Show Max - Show Turk - sixx - SkyAtlantic - Sky Cinema Action - Sky Cinema Best of - Sky Cinema Classics - Sky Cinema Family - Sky Cinema Fun - Sky Cinema Mittelerde - Sky Cinema Premieren - Sky Cinema Premieren +24 - Sky Cinema Thriller - Sky Comedy - Sky Crime - Sky Documentaries - SkyKrimi - Sky Nature - Sky One - Sky Sport 1 - Sky Sport 10 - Sky Sport 11 - Sky Sport 2 - Sky Sport 3 - Sky Sport 4 - Sky Sport 5 - Sky Sport 6 - Sky Sport 7 - Sky Sport 8 - Sky Sport 9 - Sky Sport Bundesliga 1 - Sky Sport Bundesliga 10 - Sky Sport Bundesliga 2 - Sky Sport Bundesliga 3 - Sky Sport Bundesliga 4 - Sky Sport Bundesliga 5 - Sky Sport Bundesliga 6 - Sky Sport Bundesliga 7 - Sky Sport Bundesliga 8 - Sky Sport Bundesliga 9 - Sky Sport F1 - Sky Sport News - sonnenklar.TV - SONY AXN - SONY CHANNEL - Spiegel Geschichte - Spiegel TV Wissen - SPORT1 - SPORT1+ - SPORTDIGITAL FUSSBALL - SR Fernsehen - Studio 47 - Super RTL - SWR Fernsehen BW - SWR Fernsehen RP - SYFY - tagesschau24 - TELE 5 - TeleBom/TeleDom - TLC - TOGGO plus - TV8 Int - TVA Ostbayern - tv.berlin - tv.ingolstadt - TV Mainfranken - TV Mittelrhein - TV Oberfranken - TV Polonia - TV Westsachsen - ÜLKE TV - Universal TV - VOX - VOXup - Warner TV Comedy - Warner TV Film - Warner TV Serie - WDR Fernsehen Aachen - WDR Fernsehen Bielefeld - WDR Fernsehen Bonn - WDR Fernsehen Dortmund - WDR Fernsehen Duisburg - WDR Fernsehen Düsseldorf - WDR Fernsehen Essen - WDR Fernsehen Köln - WDR Fernsehen Münster - WDR Fernsehen Siegen - WDR Fernsehen Wuppertal - WELT - Welt der Wunder - wetter.com TV - WWTV - ZDF - ZDFinfo - ZDFneo - - + + 1-2-3.tv + 13TH STREET + SAT.1 Bayern + SAT.1 RhlPf Hessen + SAT.1 HH SH + SAT.1 NDS Bremen + 3sat + ALEX Berlin + allgäu.tv + altenburg.tv + Animal Planet + ANIXE HD Serie + ANIXE+ + ARD-alpha + ARTE + a.tv + auto motor und sport + Baby TV + Baden TV + Baden TV Süd + BBC World + Beate-Uhse.TV (Sky) + beIN iZ + beIN Movies Turk + Bergblick + Bibel TV + BILD + Blue Hustler + BonGusto + Boomerang + BR Fernsehen Nord + BR Fernsehen Süd + Cartoon Network + CEM TV + CHANNEL21 + Classica (Sky) + CNN International + Comedy Central + Nick/Comedy Central+1 + Crime+Investigation + #dabeiTV + Das Erste + DELUXE MUSIC + Deutsches Musik Fernsehen + Discovery Channel + Disney Channel + DMAX + DW + E! Entertainment + ems TV + eSPORTS1 + Euro D + Euronews Deutsch + Euronews Italiano + Euronews Russki + Eurosport 1 + Eurosport 2 + Eurostar TV + Extreme Sports + Fashion TV + FC BAYERN.TV LIVE + France 24 francais + Franken Fernsehen + Friesischer Rundfunk + GEO Television + Habertürk TV + Hamburg 1 + HAUPTSTADT.TV + Heimatkanal + HGTV + The HISTORY Channel + hr-fernsehen + HSE + iTVN + Jukebox + Junior (Sky) + Juwelo + Kabel Eins + Kabel Eins CLASSICS + Kabel Eins Doku + Kanal 7 + KiKA + KinoweltTV + K-TV + LAUSITZWELLE + L-TV + Lust pur + MagentaSport + Marco Polo TV + MDF.1 Fernsehen + MDR-Fernsehen Sachsen + MDR-Fernsehen Sachsen-Anhalt + MDR-Fernsehen Thüringen + More Than Sports TV + MOTORVISION.TV + MTV + münchen.tv + N24 Doku + Kinomir + National Geographic + National Geographic Wild + NDR Fernsehen Hamburg + NDR Fernsehen Mecklenburg-Vorpommern + NDR Fernsehen Niedersachsen + NDR Fernsehen Schleswig-Holstein + Nick Jr. + Nicktoons (Sky) + NIEDERBAYERN TV - DEG + NIEDERBAYERN TV - LA + NIEDERBAYERN TV - PA + NITRO + nrwision + n-tv + Oberpfalz TV + OF-TV + OK4 + OK54 Trier + OK-TV Ludwigshafen + OK:TV Mainz + OK Weinstraße + ONE + OstWest + Penthouse Passion + phoenix + Playboy Europe + ProSieben + ProSieben FUN + ProSieben MAXX + QVC + Radio Bremen TV + Rai 1 + Rai 2 + Rai 3 + rbb fernsehen Berlin + rbb fernsehen Brandenburg + Red Bull TV + Rennsteig.TV + RFH Regionalfernsehen Harz + RFO + Rhein-Main TV + RNF + Romance TV + RTL Crime + RTL + RTL Hessen + RTL Living + RTL HH SH + RTL HB NDS + RTL Passion + RTLup + RTL NRW + RTLZWEI + RTR Planeta + Chemnitz Fernsehen + Dresden Fernsehen + Leipzig Fernsehen + salve.tv + SAT.1 + SAT.1 emotions + SAT.1 GOLD + SAT.1 NRW + ServusTV + Shop LC + Show Max + Show Turk + sixx + SkyAtlantic + Sky Cinema Action + Sky Cinema Best of + Sky Cinema Classics + Sky Cinema Family + Sky Cinema Fun + Sky Cinema Mittelerde + Sky Cinema Premieren + Sky Cinema Premieren +24 + Sky Cinema Thriller + Sky Comedy + Sky Crime + Sky Documentaries + SkyKrimi + Sky Nature + Sky One + Sky Sport 10 + Sky Sport 11 + Sky Sport 1 + Sky Sport 2 + Sky Sport 3 + Sky Sport 4 + Sky Sport 5 + Sky Sport 6 + Sky Sport 7 + Sky Sport 8 + Sky Sport 9 + Sky Sport Bundesliga 1 + Sky Sport Bundesliga 10 + Sky Sport Bundesliga 2 + Sky Sport Bundesliga 3 + Sky Sport Bundesliga 4 + Sky Sport Bundesliga 5 + Sky Sport Bundesliga 6 + Sky Sport Bundesliga 7 + Sky Sport Bundesliga 8 + Sky Sport Bundesliga 9 + Sky Sport F1 + Sky Sport News + sonnenklar.TV + SONY AXN + SONY CHANNEL + Spiegel Geschichte + Spiegel TV Wissen + SPORT1 + SPORT1+ + SPORTDIGITAL FUSSBALL + SR Fernsehen + Studio 47 + Super RTL + SWR Fernsehen BW + SWR Fernsehen RP + SYFY + tagesschau24 + TELE 5 + TeleBom/TeleDom + TLC + TOGGO plus + TV8 Int + TVA Ostbayern + tv.berlin + tv.ingolstadt + TV Mainfranken + TV Mittelrhein + TV Oberfranken + TV Polonia + TV Westsachsen + ÜLKE TV + Universal TV + VOX + VOXup + Warner TV Comedy + Warner TV Film + Warner TV Serie + WDR Fernsehen Aachen + WDR Fernsehen Bielefeld + WDR Fernsehen Bonn + WDR Fernsehen Dortmund + WDR Fernsehen Duisburg + WDR Fernsehen Düsseldorf + WDR Fernsehen Essen + WDR Fernsehen Köln + WDR Fernsehen Münster + WDR Fernsehen Siegen + WDR Fernsehen Wuppertal + WELT + Welt der Wunder + wetter.com TV + WWTV + ZDF + ZDFinfo + ZDFneo + diff --git a/sites/magentatv.de/magentatv.de.config.js b/sites/magentatv.de/magentatv.de.config.js index ce6ffab1..4edefacc 100644 --- a/sites/magentatv.de/magentatv.de.config.js +++ b/sites/magentatv.de/magentatv.de.config.js @@ -8,8 +8,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`, + url: 'https://api.prod.sngtv.magentatv.de/EPG/JSON/PlayBillList', request: { method: 'POST', headers: { @@ -54,7 +53,7 @@ module.exports = { async channels() { const data = await axios .post( - `https://api.prod.sngtv.magentatv.de/EPG/JSON/AllChannel`, + 'https://api.prod.sngtv.magentatv.de/EPG/JSON/AllChannel', { channelNamespace: 2, filterlist: [ diff --git a/sites/magentatv.de/magentatv.de.test.js b/sites/magentatv.de/magentatv.de.test.js index 430577a2..42a30a11 100644 --- a/sites/magentatv.de/magentatv.de.test.js +++ b/sites/magentatv.de/magentatv.de.test.js @@ -1,5 +1,5 @@ // npm run channels:parse -- --config=./sites/magentatv.de/magentatv.de.config.js --output=./sites/magentatv.de/magentatv.de.channels.xml -// npx epg-grabber --config=sites/magentatv.de/magentatv.de.config.js --channels=sites/magentatv.de/magentatv.de.channels.xml --output=guide.xml --days=2 +// npm run grab -- --site=magentatv.de const { parser, url, request } = require('./magentatv.de.config.js') const dayjs = require('dayjs') @@ -50,7 +50,8 @@ it('can generate valid request data', () => { }) it('can parse response', () => { - const content = `{"playbilllist":[{"id":"30021745","name":"FBI: Special Crime Unit","introduce":"Nachdem ein Mann von einem Sprengstoffpaket getötet wurde, das zu ihm nach Hause geschickt wurde, versucht das Team, den Absender zu fassen und sein neuestes tödliches Paket abzufangen. Maggie hat Mühe, ihrer jüngeren Schwester zu vertrauen.","channelid":"255","starttime":"2022-03-09 01:00:00 UTC+01:00","endtime":"2022-03-09 01:45:00 UTC+01:00","genres":"Wissen,Natur und Tiere","pictures":[{"rel":"image","href":"http://ngiss.t-online.de/sweetprogrammanager/media/gracenote/1/9/p19740197_e_h9_af.jpg","description":"Brother's Keeper","imageType":"1","copyrightNotice":"(c) ProSiebenSat.1","mimeType":"image/jpeg","resolution":["1440","1080"]},{"rel":"image","href":"http://ngiss.t-online.de/sweetprogrammanager/media/gracenote/1/5/p15528073_i_h9_ae.jpg","description":"FBI","imageType":"13","copyrightNotice":"(c) ProSiebenSat.1","mimeType":"image/jpeg","resolution":["1440","1080"]},{"rel":"image","href":"http://ngiss.t-online.de/sweetprogrammanager/media/gracenote/1/9/p19740197_e_h8_af.jpg","description":"Brother's Keeper","imageType":"17","copyrightNotice":"(c) ProSiebenSat.1","mimeType":"image/jpeg","resolution":["1920","1080"]},{"rel":"image","href":"http://ngiss.t-online.de/sweetprogrammanager/media/gracenote/1/5/p15528073_i_h10_af.jpg","description":"FBI","imageType":"18","copyrightNotice":"(c) ProSiebenSat.1","mimeType":"image/jpeg","resolution":["1920","1080"]}]}]}` + const content = + '{"playbilllist":[{"id":"30021745","name":"FBI: Special Crime Unit","introduce":"Nachdem ein Mann von einem Sprengstoffpaket getötet wurde, das zu ihm nach Hause geschickt wurde, versucht das Team, den Absender zu fassen und sein neuestes tödliches Paket abzufangen. Maggie hat Mühe, ihrer jüngeren Schwester zu vertrauen.","channelid":"255","starttime":"2022-03-09 01:00:00 UTC+01:00","endtime":"2022-03-09 01:45:00 UTC+01:00","genres":"Wissen,Natur und Tiere","pictures":[{"rel":"image","href":"http://ngiss.t-online.de/sweetprogrammanager/media/gracenote/1/9/p19740197_e_h9_af.jpg","description":"Brother\'s Keeper","imageType":"1","copyrightNotice":"(c) ProSiebenSat.1","mimeType":"image/jpeg","resolution":["1440","1080"]},{"rel":"image","href":"http://ngiss.t-online.de/sweetprogrammanager/media/gracenote/1/5/p15528073_i_h9_ae.jpg","description":"FBI","imageType":"13","copyrightNotice":"(c) ProSiebenSat.1","mimeType":"image/jpeg","resolution":["1440","1080"]},{"rel":"image","href":"http://ngiss.t-online.de/sweetprogrammanager/media/gracenote/1/9/p19740197_e_h8_af.jpg","description":"Brother\'s Keeper","imageType":"17","copyrightNotice":"(c) ProSiebenSat.1","mimeType":"image/jpeg","resolution":["1920","1080"]},{"rel":"image","href":"http://ngiss.t-online.de/sweetprogrammanager/media/gracenote/1/5/p15528073_i_h10_af.jpg","description":"FBI","imageType":"18","copyrightNotice":"(c) ProSiebenSat.1","mimeType":"image/jpeg","resolution":["1920","1080"]}]}]}' const result = parser({ content }).map(p => { p.start = p.start.toJSON() p.stop = p.stop.toJSON() @@ -72,7 +73,7 @@ it('can parse response', () => { it('can handle empty guide', () => { const result = parser({ - content: `{"counttotal":"0"}` + content: '{"counttotal":"0"}' }) expect(result).toMatchObject([]) }) diff --git a/sites/magticom.ge/magticom.ge.channels.xml b/sites/magticom.ge/magticom.ge.channels.xml index 1cfeb586..56b55df4 100644 --- a/sites/magticom.ge/magticom.ge.channels.xml +++ b/sites/magticom.ge/magticom.ge.channels.xml @@ -1,119 +1,117 @@ - - - 360 Tune Box - BBC World News Europe - CNBC Europe - CNN International Europe - Erox HD - FashionBox HD - France 24 English - MTV 80s - MTV Russia - RT News - 2 TV - Adjarasport 1 - Adjarasport 2 - Ajara TV - Brazzers TV Europe - Chveni Magti - Comedy TV - Dardimandi - Enki Benki - Ertsulovneba - 1 TV - Formula - GDS TV - Gurjaani TV - Imedi TV - Kavkasia TV - Maestro - Magti Hiti - Magti Kino - Marao TV - Mtavari Arkhi - Obieqtivi TV - Palitra News - Pos TV - Qartuli Arkhi - Quality Channel - Redlight HD - Rioni TV - Rugby TV - Rustavi 2 - Saperavi TV HD - Setanta Sports Georgia - Setanta Sports + Georgia - Silk Universal - TV 25 - TV Pirveli - A1 - A2 - Amedia Hit - Amedia Premium - Armenia 1 TV - Avto 24 - Az TV - Bollywood TV Rossiya - Cartoon Network Russia & South East Europe - Cinéma - STS International - Nastoyashcheye Vremya - Da Vinci - Discovery Science Rossiya - DocuBox HD - Domashniy - Dom Kino - Dom Kino Premium - DTX Rossiya - Duck TV SD - EuroNews Russkiy - Evrokino - Fast & FunBox HD - FightBox HD - FilmBox Arthouse Worldwide - FilmBox Russia - Fox Russia - Pyatnitsa! International - Gulli Girl - Hollywood HD - Illusion + - Investigation Discovery Rossiya - Istoriya - Karusel International - Mezzo - Moya Planeta - Mult - National Geographic Russia - National Geographic Wild Russia - Nauka - Nickelodeon CIS - Nick Jr CIS - NST - Telekanal O! - Ohotnik i Rybolov - Paramount Channel Russia - Paramount Comedy Russia - Peretz International - RBK TV - RTR Planeta - RTVi Europe - Rossiya 24 - Rossiya K - Russkiy Illusion - Sarafan - Tiji Russia - TNT Music - TV 1000 Action - TV 1000 East - TV 1000 Russkoe Kino - TV XXI - Viasat Explore East - Viasat History - Viasat Nature East - Viasat Sport East - Zagorodny International - Zhivaya Planeta - - - \ No newline at end of file + + + 360 Tune Box + BBC World News Europe + CNBC Europe + CNN International Europe + Erox HD + FashionBox HD + France 24 English + MTV 80s + MTV Russia + RT News + 1 TV + 2 TV + Adjarasport 1 + Adjarasport 2 + Ajara TV + Brazzers TV Europe + Chveni Magti + Comedy TV + Dardimandi + Enki Benki + Ertsulovneba + Formula + GDS TV + Gurjaani TV + Imedi TV + Kavkasia TV + Maestro + Magti Hiti + Magti Kino + Marao TV + Mtavari Arkhi + Obieqtivi TV + Palitra News + Pos TV + Qartuli Arkhi + Quality Channel + Redlight HD + Rioni TV + Rugby TV + Rustavi 2 + Saperavi TV HD + Setanta Sports Georgia + Setanta Sports + Georgia + Silk Universal + TV 25 + TV Pirveli + A1 + A2 + Amedia Hit + Amedia Premium + Armenia 1 TV + Avto 24 + Az TV + Bollywood TV Rossiya + Cartoon Network Russia & South East Europe + Cinéma + STS International + Nastoyashcheye Vremya + Da Vinci + Discovery Science Rossiya + DocuBox HD + Domashniy + Dom Kino + Dom Kino Premium + DTX Rossiya + Duck TV SD + EuroNews Russkiy + Evrokino + Fast & FunBox HD + FightBox HD + FilmBox Arthouse Worldwide + FilmBox Russia + Fox Russia + Pyatnitsa! International + Gulli Girl + Hollywood HD + Illusion + + Investigation Discovery Rossiya + Istoriya + Karusel International + Mezzo + Moya Planeta + Mult + National Geographic Russia + National Geographic Wild Russia + Nauka + Nickelodeon CIS + Nick Jr CIS + NST + Telekanal O! + Ohotnik i Rybolov + Paramount Channel Russia + Paramount Comedy Russia + Peretz International + RBK TV + RTR Planeta + RTVi Europe + Rossiya 24 + Rossiya K + Russkiy Illusion + Sarafan + Tiji Russia + TNT Music + TV 1000 Action + TV 1000 East + TV 1000 Russkoe Kino + TV XXI + Viasat Explore East + Viasat History + Viasat Nature East + Viasat Sport East + Zagorodny International + Zhivaya Planeta + \ No newline at end of file diff --git a/sites/magticom.ge/magticom.ge.config.js b/sites/magticom.ge/magticom.ge.config.js index 661f54e9..61044471 100644 --- a/sites/magticom.ge/magticom.ge.config.js +++ b/sites/magticom.ge/magticom.ge.config.js @@ -42,9 +42,9 @@ module.exports = { return programs }, - async channels({ country, lang }) { + async channels() { const html = await axios - .get(`https://www.magticom.ge/en/tv/tv-services/tv-guide`) + .get('https://www.magticom.ge/en/tv/tv-services/tv-guide') .then(r => r.data) .catch(console.log) @@ -77,7 +77,9 @@ function parseItems(content) { let data try { data = JSON.parse(content) - } catch (err) {} + } catch (error) { + console.log(error.message) + } if (!data || !Array.isArray(data)) return [] return data diff --git a/sites/magticom.ge/magticom.ge.test.js b/sites/magticom.ge/magticom.ge.test.js index bdcf4a8d..9282ebde 100644 --- a/sites/magticom.ge/magticom.ge.test.js +++ b/sites/magticom.ge/magticom.ge.test.js @@ -1,5 +1,5 @@ -// node ./scripts/channels.js --config=./sites/magticom.ge/magticom.ge.config.js --output=./sites/magticom.ge/magticom.ge.channels.xml -// npx epg-grabber --config=sites/magticom.ge/magticom.ge.config.js --channels=sites/magticom.ge/magticom.ge.channels.xml --output=guide.xml --days=2 +// npm run channels:parse -- --config=./sites/magticom.ge/magticom.ge.config.js --output=./sites/magticom.ge/magticom.ge.channels.xml +// npm run grab -- --site=magticom.ge const { parser, url, request } = require('./magticom.ge.config.js') const dayjs = require('dayjs') @@ -37,7 +37,8 @@ it('can generate valid request data', () => { }) it('can parse response', () => { - const content = `[{\"id\":2313254118,\"channelId\":260,\"startTimestamp\":\"2021-11-22T07:00:00\",\"endTimestamp\":\"2021-11-22T09:00:00\",\"duration\":null,\"title\":\"\\u0425\\\/\\u0444 \\\"\\u041d\\u0435\\u0440\\u0430\\u0432\\u043d\\u044b\\u0439 \\u0431\\u0440\\u0430\\u043a\\\".\",\"subTitle\":\"\\u0425\\\/\\u0444 \\\"\\u041d\\u0435\\u0440\\u0430\\u0432\\u043d\\u044b\\u0439 \\u0431\\u0440\\u0430\\u043a\\\".\",\"info\":\"\\u0413\\u0443\\u0434\\u0436\\u0430\\u0440\\u0430\\u0442\\u0435\\u0446 \\u0425\\u0430\\u0441\\u043c\\u0443\\u043a\\u0445 \\u041f\\u0430\\u0442\\u0435\\u043b \\u043f\\u043e\\u0441\\u0441\\u043e\\u0440\\u0438\\u043b\\u0441\\u044f \\u0441 \\u043d\\u043e\\u0432\\u044b\\u043c \\u0441\\u043e\\u0441\\u0435\\u0434\\u043e\\u043c \\u0413\\u0443\\u0433\\u0433\\u0438 \\u0422\\u0430\\u043d\\u0434\\u043e\\u043d\\u043e\\u043c. \\u041d\\u043e \\u0438\\u043c \\u043f\\u0440\\u0438\\u0445\\u043e\\u0434\\u0438\\u0442\\u0441\\u044f \\u043f\\u043e\\u043c\\u0438\\u0440\\u0438\\u0442\\u044c\\u0441\\u044f, \\u043a\\u043e\\u0433\\u0434\\u0430 \\u0438\\u0445 \\u0434\\u0435\\u0442\\u0438 \\u0432\\u043b\\u044e\\u0431\\u043b\\u044f\\u044e\\u0442\\u0441\\u044f \\u0434\\u0440\\u0443\\u0433 \\u0432 \\u0434\\u0440\\u0443\\u0433\\u0430. \\u0420\\u0435\\u0436\\u0438\\u0441\\u0441\\u0435\\u0440: \\u0421\\u0430\\u043d\\u0434\\u0436\\u0430\\u0439 \\u0427\\u0445\\u0435\\u043b. \\u0410\\u043a\\u0442\\u0435\\u0440\\u044b: \\u0420\\u0438\\u0448\\u0438 \\u041a\\u0430\\u043f\\u0443\\u0440, \\u041f\\u0430\\u0440\\u0435\\u0448 \\u0420\\u0430\\u0432\\u0430\\u043b, \\u0412\\u0438\\u0440 \\u0414\\u0430\\u0441. 2017 \\u0433\\u043e\\u0434.\",\"pg\":null,\"year\":null,\"country\":null,\"imageUrl\":null,\"createdBy\":-200,\"creationTimestamp\":\"2021-11-21T18:04:52\",\"epgSourceId\":8,\"startDateStr\":\"20211122070000\",\"genreByGenreId\":null,\"languageByLanguageId\":{\"id\":3,\"name\":\"\\u10e0\\u10e3\\u10e1\\u10e3\\u10da\\u10d8\",\"orderIndex\":3,\"nameShort\":\"ru\"},\"externalId\":\"2021460000084132\",\"programHumanById\":[],\"date\":null,\"time\":null,\"startDate\":null,\"endDate\":null,\"longInfo\":\"\\u0413\\u0443\\u0434\\u0436\\u0430\\u0440\\u0430\\u0442\\u0435\\u0446 \\u0425\\u0430\\u0441\\u043c\\u0443\\u043a\\u0445 \\u041f\\u0430\\u0442\\u0435\\u043b \\u043f\\u043e\\u0441\\u0441\\u043e\\u0440\\u0438\\u043b\\u0441\\u044f \\u0441 \\u043d\\u043e\\u0432\\u044b\\u043c \\u0441\\u043e\\u0441\\u0435\\u0434\\u043e\\u043c \\u0413\\u0443\\u0433\\u0433\\u0438 \\u0422\\u0430\\u043d\\u0434\\u043e\\u043d\\u043e\\u043c. \\u041d\\u043e \\u0438\\u043c \\u043f\\u0440\\u0438\\u0445\\u043e\\u0434\\u0438\\u0442\\u0441\\u044f \\u043f\\u043e\\u043c\\u0438\\u0440\\u0438\\u0442\\u044c\\u0441\\u044f, \\u043a\\u043e\\u0433\\u0434\\u0430 \\u0438\\u0445 \\u0434\\u0435\\u0442\\u0438 \\u0432\\u043b\\u044e\\u0431\\u043b\\u044f\\u044e\\u0442\\u0441\\u044f \\u0434\\u0440\\u0443\\u0433 \\u0432 \\u0434\\u0440\\u0443\\u0433\\u0430. \\u0420\\u0435\\u0436\\u0438\\u0441\\u0441\\u0435\\u0440: \\u0421\\u0430\\u043d\\u0434\\u0436\\u0430\\u0439 \\u0427\\u0445\\u0435\\u043b. \\u0410\\u043a\\u0442\\u0435\\u0440\\u044b: \\u0420\\u0438\\u0448\\u0438 \\u041a\\u0430\\u043f\\u0443\\u0440, \\u041f\\u0430\\u0440\\u0435\\u0448 \\u0420\\u0430\\u0432\\u0430\\u043b, \\u0412\\u0438\\u0440 \\u0414\\u0430\\u0441. 2017 \\u0433\\u043e\\u0434.\"}]` + const content = + '[{"id":2313254118,"channelId":260,"startTimestamp":"2021-11-22T07:00:00","endTimestamp":"2021-11-22T09:00:00","duration":null,"title":"\\u0425\\/\\u0444 \\"\\u041d\\u0435\\u0440\\u0430\\u0432\\u043d\\u044b\\u0439 \\u0431\\u0440\\u0430\\u043a\\".","subTitle":"\\u0425\\/\\u0444 \\"\\u041d\\u0435\\u0440\\u0430\\u0432\\u043d\\u044b\\u0439 \\u0431\\u0440\\u0430\\u043a\\".","info":"\\u0413\\u0443\\u0434\\u0436\\u0430\\u0440\\u0430\\u0442\\u0435\\u0446 \\u0425\\u0430\\u0441\\u043c\\u0443\\u043a\\u0445 \\u041f\\u0430\\u0442\\u0435\\u043b \\u043f\\u043e\\u0441\\u0441\\u043e\\u0440\\u0438\\u043b\\u0441\\u044f \\u0441 \\u043d\\u043e\\u0432\\u044b\\u043c \\u0441\\u043e\\u0441\\u0435\\u0434\\u043e\\u043c \\u0413\\u0443\\u0433\\u0433\\u0438 \\u0422\\u0430\\u043d\\u0434\\u043e\\u043d\\u043e\\u043c. \\u041d\\u043e \\u0438\\u043c \\u043f\\u0440\\u0438\\u0445\\u043e\\u0434\\u0438\\u0442\\u0441\\u044f \\u043f\\u043e\\u043c\\u0438\\u0440\\u0438\\u0442\\u044c\\u0441\\u044f, \\u043a\\u043e\\u0433\\u0434\\u0430 \\u0438\\u0445 \\u0434\\u0435\\u0442\\u0438 \\u0432\\u043b\\u044e\\u0431\\u043b\\u044f\\u044e\\u0442\\u0441\\u044f \\u0434\\u0440\\u0443\\u0433 \\u0432 \\u0434\\u0440\\u0443\\u0433\\u0430. \\u0420\\u0435\\u0436\\u0438\\u0441\\u0441\\u0435\\u0440: \\u0421\\u0430\\u043d\\u0434\\u0436\\u0430\\u0439 \\u0427\\u0445\\u0435\\u043b. \\u0410\\u043a\\u0442\\u0435\\u0440\\u044b: \\u0420\\u0438\\u0448\\u0438 \\u041a\\u0430\\u043f\\u0443\\u0440, \\u041f\\u0430\\u0440\\u0435\\u0448 \\u0420\\u0430\\u0432\\u0430\\u043b, \\u0412\\u0438\\u0440 \\u0414\\u0430\\u0441. 2017 \\u0433\\u043e\\u0434.","pg":null,"year":null,"country":null,"imageUrl":null,"createdBy":-200,"creationTimestamp":"2021-11-21T18:04:52","epgSourceId":8,"startDateStr":"20211122070000","genreByGenreId":null,"languageByLanguageId":{"id":3,"name":"\\u10e0\\u10e3\\u10e1\\u10e3\\u10da\\u10d8","orderIndex":3,"nameShort":"ru"},"externalId":"2021460000084132","programHumanById":[],"date":null,"time":null,"startDate":null,"endDate":null,"longInfo":"\\u0413\\u0443\\u0434\\u0436\\u0430\\u0440\\u0430\\u0442\\u0435\\u0446 \\u0425\\u0430\\u0441\\u043c\\u0443\\u043a\\u0445 \\u041f\\u0430\\u0442\\u0435\\u043b \\u043f\\u043e\\u0441\\u0441\\u043e\\u0440\\u0438\\u043b\\u0441\\u044f \\u0441 \\u043d\\u043e\\u0432\\u044b\\u043c \\u0441\\u043e\\u0441\\u0435\\u0434\\u043e\\u043c \\u0413\\u0443\\u0433\\u0433\\u0438 \\u0422\\u0430\\u043d\\u0434\\u043e\\u043d\\u043e\\u043c. \\u041d\\u043e \\u0438\\u043c \\u043f\\u0440\\u0438\\u0445\\u043e\\u0434\\u0438\\u0442\\u0441\\u044f \\u043f\\u043e\\u043c\\u0438\\u0440\\u0438\\u0442\\u044c\\u0441\\u044f, \\u043a\\u043e\\u0433\\u0434\\u0430 \\u0438\\u0445 \\u0434\\u0435\\u0442\\u0438 \\u0432\\u043b\\u044e\\u0431\\u043b\\u044f\\u044e\\u0442\\u0441\\u044f \\u0434\\u0440\\u0443\\u0433 \\u0432 \\u0434\\u0440\\u0443\\u0433\\u0430. \\u0420\\u0435\\u0436\\u0438\\u0441\\u0441\\u0435\\u0440: \\u0421\\u0430\\u043d\\u0434\\u0436\\u0430\\u0439 \\u0427\\u0445\\u0435\\u043b. \\u0410\\u043a\\u0442\\u0435\\u0440\\u044b: \\u0420\\u0438\\u0448\\u0438 \\u041a\\u0430\\u043f\\u0443\\u0440, \\u041f\\u0430\\u0440\\u0435\\u0448 \\u0420\\u0430\\u0432\\u0430\\u043b, \\u0412\\u0438\\u0440 \\u0414\\u0430\\u0441. 2017 \\u0433\\u043e\\u0434."}]' const result = parser({ content }).map(p => { p.start = p.start.toJSON() p.stop = p.stop.toJSON() @@ -48,8 +49,9 @@ it('can parse response', () => { { start: '2021-11-22T03:00:00.000Z', stop: '2021-11-22T05:00:00.000Z', - title: `Х/ф "Неравный брак".`, - description: `Гуджаратец Хасмукх Пател поссорился с новым соседом Гугги Тандоном. Но им приходится помириться, когда их дети влюбляются друг в друга. Режиссер: Санджай Чхел. Актеры: Риши Капур, Пареш Равал, Вир Дас. 2017 год.` + title: 'Х/ф "Неравный брак".', + description: + 'Гуджаратец Хасмукх Пател поссорился с новым соседом Гугги Тандоном. Но им приходится помириться, когда их дети влюбляются друг в друга. Режиссер: Санджай Чхел. Актеры: Риши Капур, Пареш Равал, Вир Дас. 2017 год.' } ]) }) @@ -58,7 +60,7 @@ it('can handle empty guide', () => { const result = parser({ date, channel, - content: `[]` + content: '[]' }) expect(result).toMatchObject([]) }) diff --git a/sites/mako.co.il/mako.co.il.channels.xml b/sites/mako.co.il/mako.co.il.channels.xml index fa1ac649..c64de9ca 100644 --- a/sites/mako.co.il/mako.co.il.channels.xml +++ b/sites/mako.co.il/mako.co.il.channels.xml @@ -1,6 +1,4 @@ - - - Keshet 12 - - + + Keshet 12 + diff --git a/sites/mako.co.il/mako.co.il.config.js b/sites/mako.co.il/mako.co.il.config.js index a0ee67ae..0466dfb6 100644 --- a/sites/mako.co.il/mako.co.il.config.js +++ b/sites/mako.co.il/mako.co.il.config.js @@ -36,12 +36,6 @@ function parseStart(item) { return dayjs(item.StartTimeUTC) } -function parseStop(item) { - if (!item.end_time) return null - - return dayjs.tz(item.end_time, 'YYYY-MM-DDTHH:mm:ss', 'Asia/Jerusalem') -} - function parseItems(content, date) { const data = JSON.parse(content) if (!data || !Array.isArray(data.programs)) return [] diff --git a/sites/mako.co.il/mako.co.il.test.js b/sites/mako.co.il/mako.co.il.test.js index 990cf29b..da82beca 100644 --- a/sites/mako.co.il/mako.co.il.test.js +++ b/sites/mako.co.il/mako.co.il.test.js @@ -1,4 +1,4 @@ -// npx epg-grabber --config=sites/mako.co.il/mako.co.il.config.js --channels=sites/mako.co.il/mako.co.il.channels.xml --output=guide.xml --days=2 +// npm run grab -- --site=mako.co.il const { parser, url } = require('./mako.co.il.config.js') const dayjs = require('dayjs') @@ -8,17 +8,14 @@ dayjs.extend(customParseFormat) dayjs.extend(utc) const date = dayjs.utc('2022-03-07', 'YYYY-MM-DD').startOf('d') -const channel = { - site_id: '#', - xmltv_id: 'Keshet12.il' -} it('can generate valid url', () => { expect(url).toBe('https://www.mako.co.il/AjaxPage?jspName=EPGResponse.jsp') }) it('can parse response', () => { - const content = `{"programs":[{"DisplayEndTime":"06:15","MakoTVURL":"","HouseNumber":"L17165475","StartTimeUTC":1646539200000,"DurationMs":900000,"DisplayStartTime":"06:00","MobilePicture":"https://img.mako.co.il/2017/01/01/placeHolder.jpg","StartTime":"06/03/2022 06:00:00","RerunBroadcast":false,"Duration":"00:15","ProgramName":"כותרות הבוקר","Date":"06/03/2022 06:00:00","MakoProgramsURL":"","LiveBroadcast":true,"ProgramCode":134987,"Episode":"","Picture":"https://img.mako.co.il//2021/08/04/hadshot_haboker_im_niv_raskin.jpg","MakoShortName":"","hebrewDate":"6 במרץ","Season":"","day":"הערב","EventDescription":"","EnglishName":"cotrot,EP 46"},{"DisplayEndTime":"02:39","MakoTVURL":"","HouseNumber":"A168960","StartTimeUTC":1646613480000,"DurationMs":60000,"DisplayStartTime":"02:38","MobilePicture":"https://img.mako.co.il/2017/01/01/placeHolder.jpg","StartTime":"07/03/2022 02:38:00","RerunBroadcast":true,"Duration":"00:01","ProgramName":"רוקדים עם כוכבים - בר זומר","Date":"07/03/2022 02:38:00","MakoProgramsURL":"","LiveBroadcast":false,"ProgramCode":135029,"Episode":"","Picture":"https://img.mako.co.il/2022/02/13/DancingWithStars2022_EPG.jpg","MakoShortName":"","hebrewDate":"7 במרץ","Season":"","day":"מחר","EventDescription":"מהדורת החדשות המרכזית של הבוקר, האנשים הפרשנויות והכותרות שיעשו את היום.","EnglishName":"rokdim,EP 10"}]}` + const content = + '{"programs":[{"DisplayEndTime":"06:15","MakoTVURL":"","HouseNumber":"L17165475","StartTimeUTC":1646539200000,"DurationMs":900000,"DisplayStartTime":"06:00","MobilePicture":"https://img.mako.co.il/2017/01/01/placeHolder.jpg","StartTime":"06/03/2022 06:00:00","RerunBroadcast":false,"Duration":"00:15","ProgramName":"כותרות הבוקר","Date":"06/03/2022 06:00:00","MakoProgramsURL":"","LiveBroadcast":true,"ProgramCode":134987,"Episode":"","Picture":"https://img.mako.co.il//2021/08/04/hadshot_haboker_im_niv_raskin.jpg","MakoShortName":"","hebrewDate":"6 במרץ","Season":"","day":"הערב","EventDescription":"","EnglishName":"cotrot,EP 46"},{"DisplayEndTime":"02:39","MakoTVURL":"","HouseNumber":"A168960","StartTimeUTC":1646613480000,"DurationMs":60000,"DisplayStartTime":"02:38","MobilePicture":"https://img.mako.co.il/2017/01/01/placeHolder.jpg","StartTime":"07/03/2022 02:38:00","RerunBroadcast":true,"Duration":"00:01","ProgramName":"רוקדים עם כוכבים - בר זומר","Date":"07/03/2022 02:38:00","MakoProgramsURL":"","LiveBroadcast":false,"ProgramCode":135029,"Episode":"","Picture":"https://img.mako.co.il/2022/02/13/DancingWithStars2022_EPG.jpg","MakoShortName":"","hebrewDate":"7 במרץ","Season":"","day":"מחר","EventDescription":"מהדורת החדשות המרכזית של הבוקר, האנשים הפרשנויות והכותרות שיעשו את היום.","EnglishName":"rokdim,EP 10"}]}' const result = parser({ content, date }).map(p => { p.start = p.start.toJSON() p.stop = p.stop.toJSON() @@ -38,7 +35,7 @@ it('can parse response', () => { it('can handle empty guide', () => { const result = parser({ - content: `[]`, + content: '[]', date }) expect(result).toMatchObject([]) diff --git a/sites/maxtv.hrvatskitelekom.hr/maxtv.hrvatskitelekom.hr.channels.xml b/sites/maxtv.hrvatskitelekom.hr/maxtv.hrvatskitelekom.hr.channels.xml index 869b0ab3..f1941e2e 100644 --- a/sites/maxtv.hrvatskitelekom.hr/maxtv.hrvatskitelekom.hr.channels.xml +++ b/sites/maxtv.hrvatskitelekom.hr/maxtv.hrvatskitelekom.hr.channels.xml @@ -1,165 +1,163 @@ - - - 24 Kitchen Hrvatska - 3sat - Aljazeera Balkans - Arena Sport 10 Hrvatska - Arena Sport 1 Hrvatska - Arena Sport 2 Hrvatska - Arena Sport 3 Hrvatska - Arena Sport 4 Hrvatska - Arena Sport 5 Hrvatska - Arena Sport 6 Hrvatska - Arena Sport 7 Hrvatska - Arena Sport 8 Hrvatska - Arena Sport 9 Hrvatska - Aurora TV - Baby TV Europe - Balkanika Music TV - BBC Earth Romania - BHT 1 - Blue Hustler Europe - Boomerang Central & Eastern Europe - Brazzers TV Europe - Cartoon Network Russia & South East Europe - CBS Reality Europe - CGTN - Cinemax 2 - Cinemax - CineStar TV 1 Hrvatska - CineStar TV Action Hrvatska - CineStar TV Fantasy - CineStar TV Premiere 1 - CineStar TV Premiere 2 - Club MTV - CMC TV - CNBC Europe - CNN International Europe - Crime & Investigation UK - Das Erste - Da Vinci - DM Sat - Doma Hrvatska - DW English - E! Europe - Epic Drama - EuroNews English - Extreme Sports Channel - FashionTV Europe - Federalna TV - Fox Crime Hrvatska - Fox Hrvatska - Fox Life Hrvatska - Fox Movies Hrvatska - France 24 English - France 24 Français - Grand - Happy - Hayat - HNTV - HRT 1 - HRT 2 - HRT 3 - HRT 4 - Hustler TV Europe - Jugoton TV - KIKA - Kino TV - Klasik TV - Kreator TV - Laudato TV - Lov i ribolov - Luxe TV - M1 Film - M1 Gold - María+Visión Medjugorje - Mediaset Italia - Mini TV - MTV 00s - MTV 80s - MTV Hits Europe - MyZen TV - N1 Hrvatska - Narodni - National Geographic - National Geographic Wild - Nautical Channel - Nickelodeon - Nick Jr - NickMusic - Nicktoons România - Nova TV - NTV Mir - OTV Valentino - Pickbox TV - Pikaboo - Pink BH - Pink Extra - Pink Fashion - Pink Film - Pink Folk 1 - Pink Koncert - Pink M - Pink Music - Pink Music 2 - Pink Plus - Pink TV - Pink World - Private TV - ProSieben Deutschland - Rai 1 - Rai 2 - Rai 3 - Rai Scuola - RTL 2 Hrvatska - RTL Crime Hrvatska - RTL Deutschland - RTL Hrvatska - RTL Kockica - RTL Living Hrvatska - RTL Passion Hrvatska - RTL Zwei Deutschland - RT News - RTS 1 - RTS 2 - RTS 3 - RTS Svet - Sat. 1 Deutschland - Sky News UK - Sport 1 - Sport Klub 1 Hrvatska - Sport Klub 2 Srbija - - - - - - - - Sportska TV - Stingray Classica - Stingray Djazz - Super RTL Deutschland - TRT World - TV 1000 Balkan - TV5Monde Europe - TVCG Sat - TVE Internacional Europa - TV Koper-Capodistria - TV Slovenija 1 - TV Slovenija 2 - Vavoom - Viasat Explore East - Viasat History - Viasat Nature East - Vivid Red - Vivid Touch - Vivid TV Europe - Vox Deutschland - Woman - Z1 - ZDF - Zdrava TV 7 Hrvatska - - + + + + + + + + + Das Erste + DW English + Sat. 1 Deutschland + Sport 1 + ZDF + Baby TV Europe + Balkanika Music TV + Blue Hustler Europe + Brazzers TV Europe + Cartoon Network Russia & South East Europe + CBS Reality Europe + CGTN + Club MTV + CNBC Europe + CNN International Europe + EuroNews English + Extreme Sports Channel + FashionTV Europe + France 24 English + Grand + Hustler TV Europe + MTV 00s + Nautical Channel + Sky News UK + Stingray Classica + Stingray Djazz + Vivid Red + Vivid Touch + Vivid TV Europe + France 24 Français + TV5Monde Europe + 24 Kitchen Hrvatska + 3sat + Aljazeera Balkans + Arena Sport 10 Hrvatska + Arena Sport 1 Hrvatska + Arena Sport 2 Hrvatska + Arena Sport 3 Hrvatska + Arena Sport 4 Hrvatska + Arena Sport 5 Hrvatska + Arena Sport 6 Hrvatska + Arena Sport 7 Hrvatska + Arena Sport 8 Hrvatska + Arena Sport 9 Hrvatska + Aurora TV + BBC Earth Romania + BHT 1 + Boomerang Central & Eastern Europe + Cinemax 2 + Cinemax + CineStar TV 1 Hrvatska + CineStar TV Action Hrvatska + CineStar TV Fantasy + CineStar TV Premiere 1 + CineStar TV Premiere 2 + CMC TV + Crime & Investigation UK + Da Vinci + DM Sat + Doma Hrvatska + E! Europe + Epic Drama + Federalna TV + Fox Crime Hrvatska + Fox Hrvatska + Fox Life Hrvatska + Fox Movies Hrvatska + Happy + Hayat + HNTV + HRT 1 + HRT 2 + HRT 3 + HRT 4 + Jugoton TV + KIKA + Kino TV + Klasik TV + Kreator TV + Laudato TV + Lov i ribolov + Luxe TV + M1 Film + M1 Gold + María+Visión Medjugorje + Mediaset Italia + Mini TV + MTV 80s + MTV Hits Europe + MyZen TV + N1 Hrvatska + Narodni + National Geographic + National Geographic Wild + Nickelodeon + Nick Jr + NickMusic + Nicktoons România + Nova TV + NTV Mir + OTV Valentino + Pickbox TV + Pikaboo + Pink BH + Pink Extra + Pink Fashion + Pink Film + Pink Folk 1 + Pink Koncert + Pink M + Pink Music + Pink Music 2 + Pink Plus + Pink TV + Pink World + Private TV + ProSieben Deutschland + RT News + RTL 2 Hrvatska + RTL Crime Hrvatska + RTL Hrvatska + RTL Deutschland + RTL Kockica + RTL Living Hrvatska + RTL Passion Hrvatska + RTL Zwei Deutschland + RTS 1 + RTS 2 + RTS 3 + RTS Svet + Sport Klub 1 Hrvatska + Sport Klub 2 Srbija + Sportska TV + Super RTL Deutschland + TRT World + TV 1000 Balkan + TVCG Sat + TVE Internacional Europa + TV Koper-Capodistria + TV Slovenija 1 + TV Slovenija 2 + Vavoom + Viasat Explore East + Viasat History + Viasat Nature East + Vox Deutschland + Woman + Z1 + Zdrava TV 7 Hrvatska + Rai 1 + Rai 2 + Rai 3 + Rai Scuola + diff --git a/sites/maxtv.hrvatskitelekom.hr/maxtv.hrvatskitelekom.hr.test.js b/sites/maxtv.hrvatskitelekom.hr/maxtv.hrvatskitelekom.hr.test.js index 16402b31..6388c9b7 100644 --- a/sites/maxtv.hrvatskitelekom.hr/maxtv.hrvatskitelekom.hr.test.js +++ b/sites/maxtv.hrvatskitelekom.hr/maxtv.hrvatskitelekom.hr.test.js @@ -1,4 +1,4 @@ -// npx epg-grabber --config=sites/maxtv.hrvatskitelekom.hr/maxtv.hrvatskitelekom.hr.config.js --channels=sites/maxtv.hrvatskitelekom.hr/maxtv.hrvatskitelekom.hr.channels.xml --output=guide.xml --days=2 +// npm run grab -- --site=maxtv.hrvatskitelekom.hr const { parser, url, request } = require('./maxtv.hrvatskitelekom.hr.config.js') const dayjs = require('dayjs') @@ -12,7 +12,8 @@ const channel = { site_id: '316', xmltv_id: '24KitchenCroatia.hr' } -const content = `{"status":{"code":200,"message":"OK","authType":"Unauthenticated","ottSessionToken":null},"data":[{"channelId":"316","title":"24Kitchen","logo":"http://ottepg5.nexttv.ht.hr:33200/EPG/jsp/images/universal/film/logo/fileEntity/20161109/000200/XTV100002173/493d03f8-0f08-4932-8371-e5b57d96f17d.png","chanNumber":500,"hasCatchup":false,"ottChannel":true,"userSubscribed":false,"shows":[{"showId":"-1","title":"Nema informacija","startTime":1636952400,"endTime":1636967400,"category":"ostalo","hasReminder":false,"hasRecording":false,"hasSeriesRecording":false,"userOttPlayable":false,"userLocked":false,"isPPV":false,"buyPrice":""},{"showId":"17298142","title":"Najčudniji svjetski restorani","startTime":1636952400,"endTime":1636952700,"category":"Kulinarski","hasReminder":false,"hasRecording":false,"hasSeriesRecording":false,"userOttPlayable":false,"userLocked":false,"isPPV":false,"buyPrice":""}]}]}` +const content = + '{"status":{"code":200,"message":"OK","authType":"Unauthenticated","ottSessionToken":null},"data":[{"channelId":"316","title":"24Kitchen","logo":"http://ottepg5.nexttv.ht.hr:33200/EPG/jsp/images/universal/film/logo/fileEntity/20161109/000200/XTV100002173/493d03f8-0f08-4932-8371-e5b57d96f17d.png","chanNumber":500,"hasCatchup":false,"ottChannel":true,"userSubscribed":false,"shows":[{"showId":"-1","title":"Nema informacija","startTime":1636952400,"endTime":1636967400,"category":"ostalo","hasReminder":false,"hasRecording":false,"hasSeriesRecording":false,"userOttPlayable":false,"userLocked":false,"isPPV":false,"buyPrice":""},{"showId":"17298142","title":"Najčudniji svjetski restorani","startTime":1636952400,"endTime":1636952700,"category":"Kulinarski","hasReminder":false,"hasRecording":false,"hasSeriesRecording":false,"userOttPlayable":false,"userLocked":false,"isPPV":false,"buyPrice":""}]}]}' it('can generate valid url', () => { expect(url).toBe('https://player.maxtvtogo.tportal.hr:8082/OTT4Proxy/proxy/epg/shows') @@ -47,7 +48,8 @@ it('can handle empty guide', () => { const result = parser({ date, channel, - content: `{"status":{"code":200,"message":"OK","authType":"Unauthenticated","ottSessionToken":null},"data":[]}` + content: + '{"status":{"code":200,"message":"OK","authType":"Unauthenticated","ottSessionToken":null},"data":[]}' }) expect(result).toMatchObject([]) }) diff --git a/sites/maxtvgo.mk/maxtvgo.mk.channels.xml b/sites/maxtvgo.mk/maxtvgo.mk.channels.xml index a01ce968..79bd7982 100644 --- a/sites/maxtvgo.mk/maxtvgo.mk.channels.xml +++ b/sites/maxtvgo.mk/maxtvgo.mk.channels.xml @@ -1,56 +1,54 @@ - - - Alfa TV - Aljazeera Balkans - Alsat-M - Arena Fight - Arena Premium 1 - Arena Premium 2 - Arena Premium 3 - Arena Sport 1 - Arena Sport 2 - Arena Sport 3 - Arena Sport 4 - Arena Sport 5 - Balkanika Music TV - Balkan Music TV - Da Vinci - DM Sat - Fox Crime - Fox Life - Fox Movies - Fox - Hayat Folk - Kanal 5 - Klan Macedonia - M1 Film - M1 Gold - Minimax Serbia - MRT 1 - MRT 2 - MRT 3 - MRT 4 - MRT 5 - MRT Sobraniski kanal - MTV 00s - MTV 80s - Nasa TV - National Geographic Channel HD - National Geographic Wild - Sitel TV - Telma - Tera TV - Tring Action - Tring Fantasy - TV 24 - TV 1000 Balkan - TV Edo - TV Iris - TV Shenja - TV Sonce - Viasat Explore - Viasat History HD - Viasat Nature - - \ No newline at end of file + + Alfa TV + Aljazeera Balkans + Alsat-M + Arena Fight + Arena Premium 1 + Arena Sport 1 + Arena Premium 2 + Arena Sport 2 + Arena Premium 3 + Arena Sport 3 + Arena Sport 4 + Arena Sport 5 + Balkanika Music TV + Balkan Music TV + Da Vinci + DM Sat + Fox Crime + Fox Life + Fox Movies + Fox + Hayat Folk + Kanal 5 + Klan Macedonia + M1 Film + M1 Gold + Minimax Serbia + MRT 1 + MRT 2 + MRT 3 + MRT 4 + MRT 5 + MRT Sobraniski kanal + MTV 00s + MTV 80s + Nasa TV + National Geographic Channel HD + National Geographic Wild + Sitel TV + Telma + Tera TV + Tring Action + Tring Fantasy + TV 1000 Balkan + TV 24 + TV Edo + TV Iris + TV Shenja + TV Sonce + Viasat Explore + Viasat History HD + Viasat Nature + \ No newline at end of file diff --git a/sites/maxtvgo.mk/maxtvgo.mk.config.js b/sites/maxtvgo.mk/maxtvgo.mk.config.js index 934d99fa..83991ae0 100644 --- a/sites/maxtvgo.mk/maxtvgo.mk.config.js +++ b/sites/maxtvgo.mk/maxtvgo.mk.config.js @@ -30,10 +30,10 @@ module.exports = { return programs }, - async channels({ country, lang }) { + async channels() { const channels = await axios .get( - `https://prd-static-mkt.spectar.tv/rev-1636968171/client_api.php/channel/all/application_id/deep_blue/device_configuration/2/instance_id/1/language/mk/http_proto/https/format/json` + 'https://prd-static-mkt.spectar.tv/rev-1636968171/client_api.php/channel/all/application_id/deep_blue/device_configuration/2/instance_id/1/language/mk/http_proto/https/format/json' ) .then(r => r.data) .catch(console.log) @@ -64,7 +64,7 @@ function parseIcon(item) { return item.icon['@attributes'].src } -function parseItems(content, channel) { +function parseItems(content) { const data = JSON.parse(content) if (!data || !Array.isArray(data.programme)) return [] diff --git a/sites/maxtvgo.mk/maxtvgo.mk.test.js b/sites/maxtvgo.mk/maxtvgo.mk.test.js index d0e227e7..18c7fa97 100644 --- a/sites/maxtvgo.mk/maxtvgo.mk.test.js +++ b/sites/maxtvgo.mk/maxtvgo.mk.test.js @@ -1,5 +1,5 @@ -// node ./scripts/channels.js --config=./sites/maxtvgo.mk/maxtvgo.mk.config.js --output=./sites/maxtvgo.mk/maxtvgo.mk.channels.xml -// npx epg-grabber --config=sites/maxtvgo.mk/maxtvgo.mk.config.js --channels=sites/maxtvgo.mk/maxtvgo.mk.channels.xml --output=guide.xml --days=2 +// npm run channels:parse -- --config=./sites/maxtvgo.mk/maxtvgo.mk.config.js --output=./sites/maxtvgo.mk/maxtvgo.mk.channels.xml +// npm run grab -- --site=maxtvgo.mk const { parser, url } = require('./maxtvgo.mk.config.js') const dayjs = require('dayjs') @@ -21,7 +21,8 @@ it('can generate valid url', () => { }) it('can parse response', () => { - const content = `{"programme":[{"@attributes":{"channel":"105","id":"21949063","start":"20211116231000 +0100","stop":"20211117010000 +0100","disable_catchup":"0","is_adult":"0"},"title":"Палмето - игран филм","original-title":{"@attributes":{"lang":""}},"sub-title":{"@attributes":{"lang":""}},"category_id":"11","category":"Останато","desc":"Екстремниот рибар, Џереми Вејд, е во потрага по слатководни риби кои јадат човечко месо. Со форензички методи, Џереми им илустрира на гледачите како овие нови чудовишта се создадени да убиваат.","icon":{"@attributes":{"src":"https:\/\/prd-static-mkt.spectar.tv\/rev-1636968170\/image_transform.php\/transform\/1\/epg_program_id\/21949063\/instance_id\/1"}},"episode_num":{},"date":"0","star-rating":{"value":{}},"rating":{"@attributes":{"system":""},"value":"0+"},"linear_channel_rating":"0+","genres":{},"credits":{}}]}` + const content = + '{"programme":[{"@attributes":{"channel":"105","id":"21949063","start":"20211116231000 +0100","stop":"20211117010000 +0100","disable_catchup":"0","is_adult":"0"},"title":"Палмето - игран филм","original-title":{"@attributes":{"lang":""}},"sub-title":{"@attributes":{"lang":""}},"category_id":"11","category":"Останато","desc":"Екстремниот рибар, Џереми Вејд, е во потрага по слатководни риби кои јадат човечко месо. Со форензички методи, Џереми им илустрира на гледачите како овие нови чудовишта се создадени да убиваат.","icon":{"@attributes":{"src":"https://prd-static-mkt.spectar.tv/rev-1636968170/image_transform.php/transform/1/epg_program_id/21949063/instance_id/1"}},"episode_num":{},"date":"0","star-rating":{"value":{}},"rating":{"@attributes":{"system":""},"value":"0+"},"linear_channel_rating":"0+","genres":{},"credits":{}}]}' const result = parser({ content }).map(p => { p.start = p.start.toJSON() p.stop = p.stop.toJSON() @@ -42,7 +43,8 @@ it('can parse response', () => { }) it('can parse response with no description', () => { - const content = `{"programme":[{"@attributes":{"channel":"105","id":"21949063","start":"20211116231000 +0100","stop":"20211117010000 +0100","disable_catchup":"0","is_adult":"0"},"title":"Палмето - игран филм","original-title":{"@attributes":{"lang":""}},"sub-title":{"@attributes":{"lang":""}},"category_id":"11","category":"Останато","desc":{},"icon":{"@attributes":{"src":"https:\/\/prd-static-mkt.spectar.tv\/rev-1636968170\/image_transform.php\/transform\/1\/epg_program_id\/21949063\/instance_id\/1"}},"episode_num":{},"date":"0","star-rating":{"value":{}},"rating":{"@attributes":{"system":""},"value":"0+"},"linear_channel_rating":"0+","genres":{},"credits":{}}]}` + const content = + '{"programme":[{"@attributes":{"channel":"105","id":"21949063","start":"20211116231000 +0100","stop":"20211117010000 +0100","disable_catchup":"0","is_adult":"0"},"title":"Палмето - игран филм","original-title":{"@attributes":{"lang":""}},"sub-title":{"@attributes":{"lang":""}},"category_id":"11","category":"Останато","desc":{},"icon":{"@attributes":{"src":"https://prd-static-mkt.spectar.tv/rev-1636968170/image_transform.php/transform/1/epg_program_id/21949063/instance_id/1"}},"episode_num":{},"date":"0","star-rating":{"value":{}},"rating":{"@attributes":{"system":""},"value":"0+"},"linear_channel_rating":"0+","genres":{},"credits":{}}]}' const result = parser({ content }).map(p => { p.start = p.start.toJSON() p.stop = p.stop.toJSON() @@ -65,7 +67,7 @@ it('can handle empty guide', () => { const result = parser({ date, channel, - content: `{"@attributes":{"source-info-name":"maxtvgo.mk","generator-info-name":"spectar_epg"}}` + content: '{"@attributes":{"source-info-name":"maxtvgo.mk","generator-info-name":"spectar_epg"}}' }) expect(result).toMatchObject([]) }) diff --git a/sites/mbc.net/mbc.net.channels.xml b/sites/mbc.net/mbc.net.channels.xml index 3d932ceb..59c83549 100644 --- a/sites/mbc.net/mbc.net.channels.xml +++ b/sites/mbc.net/mbc.net.channels.xml @@ -1,22 +1,20 @@ - - - MBC - MBC 2 - MBC 4 - MBC 5 - MBC Action - MBC Bollywood - MBC Drama - MBC Drama + - MBC Drama USA - MBC Iraq - MBC Maser - MBC Maser 2 - MBC Maser USA - MBC Max - MBC + Power - MBC USA - Wanasah - - \ No newline at end of file + + MBC + MBC USA + MBC 2 + MBC 4 + MBC 5 + MBC Action + MBC Bollywood + MBC Drama + MBC Drama USA + MBC Iraq + MBC Maser + MBC Maser 2 + MBC Maser USA + MBC Max + MBC Drama + + MBC + Power + Wanasah + \ No newline at end of file diff --git a/sites/mbc.net/mbc.net.config.js b/sites/mbc.net/mbc.net.config.js index f94d0e0a..b8ddf0ed 100644 --- a/sites/mbc.net/mbc.net.config.js +++ b/sites/mbc.net/mbc.net.config.js @@ -3,13 +3,12 @@ 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 .add(1, 'd') .valueOf()}&channel=${channel.site_id}` }, - parser: function ({ content, channel, date }) { + parser: function ({ content }) { let programs = [] const items = parseItems(content) items.forEach(item => { diff --git a/sites/mbc.net/mbc.net.test.js b/sites/mbc.net/mbc.net.test.js index 70b1dd65..554e61c0 100644 --- a/sites/mbc.net/mbc.net.test.js +++ b/sites/mbc.net/mbc.net.test.js @@ -1,4 +1,4 @@ -// npx epg-grabber --config=sites/mbc.net/mbc.net.config.js --channels=sites/mbc.net/mbc.net.channels.xml --output=guide.xml --days=2 +// npm run grab -- --site=mbc.net const { parser, url } = require('./mbc.net.config.js') const dayjs = require('dayjs') @@ -12,7 +12,8 @@ const channel = { site_id: 'mbc1', xmltv_id: 'MBC.ae' } -const content = `[{"id":3140240,"channelBCMId":"1","channelLabel":"MBC1","showPageTitle":"اختطاف","showPageGenreInArabic":" دراما","showPageAboutInArabic":".يستضيف برنامج تلفزيوني والدة لينا وشقيقتها، ولدى مشاهدتها الحلقة، تكتشف والدة ماجد الحقيقة، بينما تتعرض العنود لحادث سير مروع","startTime":1636155131000,"endTime":1636157806000,"startTimeInMilliseconds":1636155131000,"endTimeInMilliseconds":1636157806200,"premiereMode":"Fast Repeat","showingNow":false}]` +const content = + '[{"id":3140240,"channelBCMId":"1","channelLabel":"MBC1","showPageTitle":"اختطاف","showPageGenreInArabic":" دراما","showPageAboutInArabic":".يستضيف برنامج تلفزيوني والدة لينا وشقيقتها، ولدى مشاهدتها الحلقة، تكتشف والدة ماجد الحقيقة، بينما تتعرض العنود لحادث سير مروع","startTime":1636155131000,"endTime":1636157806000,"startTimeInMilliseconds":1636155131000,"endTimeInMilliseconds":1636157806200,"premiereMode":"Fast Repeat","showingNow":false}]' it('can generate valid url', () => { const result = url({ date, channel }) @@ -39,7 +40,7 @@ it('can handle empty guide', () => { const result = parser({ date, channel, - content: `[]` + content: '[]' }) expect(result).toMatchObject([]) }) diff --git a/sites/mediagenie.co.kr/mediagenie.co.kr.channels.xml b/sites/mediagenie.co.kr/mediagenie.co.kr.channels.xml index 8e439f16..8c92688c 100644 --- a/sites/mediagenie.co.kr/mediagenie.co.kr.channels.xml +++ b/sites/mediagenie.co.kr/mediagenie.co.kr.channels.xml @@ -1,10 +1,8 @@ - - - CHING - ENA DRAMA - ENA STORY - Healthmedi - ONT - - + + CHING + ENA DRAMA + ENA STORY + Healthmedi + ONT + diff --git a/sites/mediagenie.co.kr/mediagenie.co.kr.config.js b/sites/mediagenie.co.kr/mediagenie.co.kr.config.js index 9a4d545f..32f85cbe 100644 --- a/sites/mediagenie.co.kr/mediagenie.co.kr.config.js +++ b/sites/mediagenie.co.kr/mediagenie.co.kr.config.js @@ -11,7 +11,6 @@ dayjs.extend(customParseFormat) module.exports = { site: 'mediagenie.co.kr', days: 1, - skip: true, // NOTE: the guide appears on the site after the end of the daily update (https://github.com/iptv-org/epg/actions/workflows/mediagenie.co.kr.yml) url({ channel, date }) { return `https://mediagenie.co.kr/${channel.site_id}/?qd=${date.format('YYYYMMDD')}` }, @@ -22,11 +21,11 @@ module.exports = { }, parser({ content, date }) { const programs = [] - const items = parseItems(content, date) + const items = parseItems(content) items.forEach(item => { const $item = cheerio.load(item) const prev = programs[programs.length - 1] - const start = parseStart($item, date) + let start = parseStart($item, date) if (!start) return if (prev) { if (start.isBefore(prev.start)) { @@ -71,7 +70,7 @@ function parseStart($item, date) { return dayjs.tz(`${date.format('YYYY-MM-DD')} ${time}`, 'YYYY-MM-DD HH:mm', 'Asia/Seoul') } -function parseItems(content, channel, date) { +function parseItems(content) { const $ = cheerio.load(content) return $('.tbl > tbody > tr').toArray() diff --git a/sites/mediagenie.co.kr/mediagenie.co.kr.test.js b/sites/mediagenie.co.kr/mediagenie.co.kr.test.js index 595fff26..a50aa036 100644 --- a/sites/mediagenie.co.kr/mediagenie.co.kr.test.js +++ b/sites/mediagenie.co.kr/mediagenie.co.kr.test.js @@ -1,4 +1,4 @@ -// npx epg-grabber --config=sites/mediagenie.co.kr/mediagenie.co.kr.config.js --channels=sites/mediagenie.co.kr/mediagenie.co.kr.channels.xml --output=guide.xml --days=2 +// npm run grab -- --site=mediagenie.co.kr const { parser, url, request } = require('./mediagenie.co.kr.config.js') const fs = require('fs') @@ -37,7 +37,7 @@ it('can parse response', () => { expect(results[0]).toMatchObject({ start: '2023-01-24T15:20:00.000Z', stop: '2023-01-24T16:34:00.000Z', - title: `대행사`, + title: '대행사', rating: { system: 'KMRB', value: '15' @@ -47,7 +47,7 @@ it('can parse response', () => { expect(results[16]).toMatchObject({ start: '2023-01-25T14:27:00.000Z', stop: '2023-01-25T14:57:00.000Z', - title: `법쩐`, + title: '법쩐', rating: { system: 'KMRB', value: '15' diff --git a/sites/mediaklikk.hu/mediaklikk.hu.channels.xml b/sites/mediaklikk.hu/mediaklikk.hu.channels.xml index e45b2162..677d9f4a 100644 --- a/sites/mediaklikk.hu/mediaklikk.hu.channels.xml +++ b/sites/mediaklikk.hu/mediaklikk.hu.channels.xml @@ -1,13 +1,11 @@ - - - Duna - Duna World - M1 - M2 - M3 - M4 Sport - M4 Sport + - M5 - - \ No newline at end of file + + Duna + Duna World + M1 + M2 + M3 + M4 Sport + M4 Sport + + M5 + \ No newline at end of file diff --git a/sites/mediaklikk.hu/mediaklikk.hu.config.js b/sites/mediaklikk.hu/mediaklikk.hu.config.js index 7a024c15..c525911a 100644 --- a/sites/mediaklikk.hu/mediaklikk.hu.config.js +++ b/sites/mediaklikk.hu/mediaklikk.hu.config.js @@ -72,7 +72,7 @@ function parseDescription($item) { function parseIcon($item) { const backgroundImage = $item('.program_about > .program_photo').css('background-image') if (!backgroundImage) return null - const [_, icon] = backgroundImage.match(/url\(\'(.*)'\)/) || [null, null] + const [, icon] = backgroundImage.match(/url\('(.*)'\)/) || [null, null] if (!icon) return null return `https:${icon}` diff --git a/sites/mediaklikk.hu/mediaklikk.hu.test.js b/sites/mediaklikk.hu/mediaklikk.hu.test.js index ccc351a3..08b76e2c 100644 --- a/sites/mediaklikk.hu/mediaklikk.hu.test.js +++ b/sites/mediaklikk.hu/mediaklikk.hu.test.js @@ -1,4 +1,4 @@ -// npx epg-grabber --config=sites/mediaklikk.hu/mediaklikk.hu.config.js --channels=sites/mediaklikk.hu/mediaklikk.hu.channels.xml --output=guide.xml --days=2 +// npm run grab -- --site=mediaklikk.hu const { parser, url, request } = require('./mediaklikk.hu.config.js') const fs = require('fs') @@ -48,7 +48,7 @@ it('can parse response', () => { expect(results[0]).toMatchObject({ start: '2022-10-27T22:00:46.000Z', stop: '2022-10-27T22:54:00.000Z', - title: `A hegyi doktor - I. évad`, + title: 'A hegyi doktor - I. évad', description: 'Maxl iskolatársának, Vroninak az anyja egy autóbalesetben meghal. A 20 éves testvér, Vinzenz magához szeretné venni a lányt, ám a gyámüggyel problémái akadnak, ezért megpróbálja elszöktetni.(Eredeti hang digitálisan.)', icon: 'https://mediaklikk.hu/wp-content/uploads/sites/4/2019/10/A-hegyi-doktor-I-évad-e1571318391226-150x150.jpg' @@ -57,7 +57,7 @@ it('can parse response', () => { expect(results[56]).toMatchObject({ start: '2022-10-28T20:35:05.000Z', stop: '2022-10-28T21:05:05.000Z', - title: `Szemtől szemben (1967)`, + title: 'Szemtől szemben (1967)', description: 'Brad Fletcher bostoni történelemtanár, aki a délnyugati határvidéken kúrálja tüdőbetegségét, egy véletlen folytán összeakad Beauregard Bennett körözött útonállóval, akit végül maga segít a menekülésben. A tanárt lenyűgözi a törvényen kívüliek világa és felismeri, hogy értelmi felsőbbrendűségével bámulatosan tudja irányítani az embereket. Bennett csakhamar azt veszi észre, hogy a peremre szorult saját bandájában. Eközben a Pinkerton ügynökség beépített embere is csapdába igyekszik csalni mindnyájukat.' }) @@ -67,7 +67,7 @@ it('can handle empty guide', () => { const result = parser({ date, channel, - content: `` + content: '' }) expect(result).toMatchObject([]) }) diff --git a/sites/mediaset.it/mediaset.it.channels.xml b/sites/mediaset.it/mediaset.it.channels.xml index 0c3fb35d..5a3e9783 100644 --- a/sites/mediaset.it/mediaset.it.channels.xml +++ b/sites/mediaset.it/mediaset.it.channels.xml @@ -1,20 +1,18 @@ - - - 20 Mediaset - Boing Italia - Canale 5 - Cartoonito Italia - Focus - Iris - Italia 1 - Italia 2 - La 5 - Mediaset Extra - Premium Action - Premium Crime - Rete 4 - TGCom 24 - Top Crime - - \ No newline at end of file + + 20 Mediaset + Boing Italia + Canale 5 + Cartoonito Italia + Focus + Iris + Italia 1 + Italia 2 + La 5 + Mediaset Extra + Premium Action + Premium Crime + Rete 4 + TGCom 24 + Top Crime + \ No newline at end of file diff --git a/sites/melita.com/melita.com.channels.xml b/sites/melita.com/melita.com.channels.xml index a99e43c3..d147c8ef 100644 --- a/sites/melita.com/melita.com.channels.xml +++ b/sites/melita.com/melita.com.channels.xml @@ -1,123 +1,121 @@ - - - Al Jazeera Arabic - Al Jazeera English - Animal Planet HD - Baby TV - BBC Earth HD - BBC Entertainment - BBC World News HD - Bloomberg - Boing - Boomerang - Caccia e Pesca - Canale 5 HD - Canale Italia - Cartoonito - Cartoon Network - CBeeBies HD - CBS Reality - CGTN - Channel One Russia - Cielo - TV Moda - Club MTV - C Music TV - CNBC - CNN International - Crime + Investigation - Daystar Network HD - Discovery HD - Discovery Channel - Discovery Science - Disney Channel - Disney Junior - Dubai One - Duck TV - Deutsche Welle HD - E! Entertainment HD - Euronews HD - Eurosport HD - Eurosport 2 - EWTN - Extreme Sports - FTV HD - f Living - Food Network HD - FOX HD - FOX LIFE HD - France 2 HD - France 24 in English - France 24 in French - Ginx TV - GOD TV - GREAT! Movies Action - HGTV HD - HISTORY HD - ID HD - Iris - Italia 1 HD - Italia 2 - ITV Shopping - JimJam - La 5 - LBC Europe - Luxe TV HD - Mediaset Extra - Mediaset Italia - Melita More - Mezzo HD - MTV 00s - MTV 80s - MTV 90s - MTV - MTV Hits - MTV Live HD - National Geographic HD - Nat Geo Wild HD - NET HD - Nickelodeon HD - Nick Junior Global - ONE HD - Parliament Channel - Rai Uno - Rai Due - Rai Tre - Rai News - Rai Scuola - Rai Storia - Rete 4 HD - Russia Today - Radio TV - RTL - RTL II - RTR Planeta - Sky News HD - Smash TV - iConcerts HD - TGCOM 24 - TLC - Top Crime - TRACE Urban HD - Travel HD - TRT Turk - TRT World HD - TSN1 - TSN2 - TSN3 - TSN4 - TSN5 - TSN6 - TSN7 - TSN8 - TV 2000 - TV5 Monde - TVM HD - TVMNEWS+ - Xejk - TVE Internacional - BVN Europa - - - + + + RTL + RTL II + Al Jazeera Arabic + Al Jazeera English + Animal Planet HD + Baby TV + BBC Earth HD + BBC Entertainment + BBC World News HD + Bloomberg + Boomerang + Cartoonito + Cartoon Network + CBeeBies HD + CBS Reality + CGTN + Channel One Russia + Club MTV + C Music TV + CNBC + CNN International + Crime + Investigation + Daystar Network HD + Discovery HD + Discovery Channel + Discovery Science + Disney Channel + Disney Junior + Dubai One + Duck TV + Deutsche Welle HD + E! Entertainment HD + Euronews HD + Eurosport HD + Eurosport 2 + EWTN + Extreme Sports + FTV HD + f Living + Food Network HD + FOX HD + FOX LIFE HD + France 24 in English + Ginx TV + GOD TV + GREAT! Movies Action + HGTV HD + HISTORY HD + ID HD + Iris + ITV Shopping + JimJam + LBC Europe + Luxe TV HD + Melita More + MTV 00s + MTV 80s + MTV 90s + MTV + MTV Hits + MTV Live HD + National Geographic HD + Nat Geo Wild HD + NET HD + Nickelodeon HD + Nick Junior Global + ONE HD + Parliament Channel + Russia Today + RTR Planeta + Sky News HD + Smash TV + iConcerts HD + TLC + TRACE Urban HD + Travel HD + TSN1 + TSN2 + TSN3 + TSN4 + TSN5 + TSN6 + TSN7 + TSN8 + TVE Internacional + France 2 HD + France 24 in French + Mezzo HD + TV5 Monde + Boing + Caccia e Pesca + Canale 5 HD + Canale Italia + Cielo + TV Moda + Italia 1 HD + Italia 2 + La 5 + Mediaset Extra + Mediaset Italia + Rai Uno + Rai Due + Rai Tre + Rai News + Rai Scuola + Rai Storia + Rete 4 HD + Radio TV + TGCOM 24 + Top Crime + TV 2000 + TVM HD + TVMNEWS+ + Xejk + BVN Europa + TRT Turk + TRT World HD + diff --git a/sites/melita.com/melita.com.test.js b/sites/melita.com/melita.com.test.js index db358f97..3fa48f75 100644 --- a/sites/melita.com/melita.com.test.js +++ b/sites/melita.com/melita.com.test.js @@ -1,5 +1,5 @@ // npm run channels:parse -- --config=./sites/melita.com/melita.com.config.js --output=./sites/melita.com/melita.com.channels.xml -// npx epg-grabber --config=sites/melita.com/melita.com.config.js --channels=sites/melita.com/melita.com.channels.xml --output=guide.xml --days=2 +// npm run grab -- --site=melita.com const { parser, url } = require('./melita.com.config.js') const dayjs = require('dayjs') @@ -21,7 +21,8 @@ it('can generate valid url', () => { }) it('can parse response', () => { - const content = `{"schedules":[{"id":"138dabff-131a-42a0-9373-203545933dd0","published":{"start":"2022-04-20T06:25:00Z","end":"2022-04-20T06:45:00Z"},"program":"ae52299a-3c99-4d34-9932-e21d383f9800","live":false,"blackouts":[]}],"programs":[{"id":"ae52299a-3c99-4d34-9932-e21d383f9800","title":"How I Met Your Mother","shortSynopsis":"Symphony of Illumination - Robin gets some bad news and decides to keep it to herself. Marshall decorates the house.","posterImage":"https://androme.melitacable.com/media/images/epg/bc/07/p8953134_e_h10_ad.jpg","episode":12,"episodeTitle":"Symphony of Illumination","season":"fdd6e42c-97f9-4d7a-aaca-78b53378f960","genres":["3.5.7.3"],"tags":["comedy"],"adult":false}],"seasons":[{"id":"fdd6e42c-97f9-4d7a-aaca-78b53378f960","title":"How I Met Your Mother","adult":false,"season":7,"series":"858c535a-abbb-451b-807a-94196997ea2d"}],"series":[{"id":"858c535a-abbb-451b-807a-94196997ea2d","title":"How I Met Your Mother","adult":false}]}` + const content = + '{"schedules":[{"id":"138dabff-131a-42a0-9373-203545933dd0","published":{"start":"2022-04-20T06:25:00Z","end":"2022-04-20T06:45:00Z"},"program":"ae52299a-3c99-4d34-9932-e21d383f9800","live":false,"blackouts":[]}],"programs":[{"id":"ae52299a-3c99-4d34-9932-e21d383f9800","title":"How I Met Your Mother","shortSynopsis":"Symphony of Illumination - Robin gets some bad news and decides to keep it to herself. Marshall decorates the house.","posterImage":"https://androme.melitacable.com/media/images/epg/bc/07/p8953134_e_h10_ad.jpg","episode":12,"episodeTitle":"Symphony of Illumination","season":"fdd6e42c-97f9-4d7a-aaca-78b53378f960","genres":["3.5.7.3"],"tags":["comedy"],"adult":false}],"seasons":[{"id":"fdd6e42c-97f9-4d7a-aaca-78b53378f960","title":"How I Met Your Mother","adult":false,"season":7,"series":"858c535a-abbb-451b-807a-94196997ea2d"}],"series":[{"id":"858c535a-abbb-451b-807a-94196997ea2d","title":"How I Met Your Mother","adult":false}]}' const result = parser({ content }).map(p => { p.start = p.start.toJSON() p.stop = p.stop.toJSON() @@ -45,7 +46,7 @@ it('can parse response', () => { it('can handle empty guide', () => { const result = parser({ - content: `{}` + content: '{}' }) expect(result).toMatchObject([]) }) diff --git a/sites/meo.pt/meo.pt.channels.xml b/sites/meo.pt/meo.pt.channels.xml index e469d7c9..56de7099 100644 --- a/sites/meo.pt/meo.pt.channels.xml +++ b/sites/meo.pt/meo.pt.channels.xml @@ -1,206 +1,204 @@ - - - 24 Kitchen - 3sat - A Bola TV - ADVNCE - Afro Music Channel - Aljazeera English - Alma Lusa - AMC - Antena 3 Internacional - ARTE Français - AR TV Canal Parlamento - Atrecine - Atreseries - AXN Movies - AXN - AXN White - Baby TV - BBC Entertainment - Benfica TV - BFM Business - BFM TV - Biggs - Blaze - Bloomberg TV - BNT 4 - Body Sex HD - Bom Som TV - Boomerang - BVN - Caçavision - Canal 11 - Canal 24 Horas - Canal Cocina - Canal Hollywood - Canal Panda - Canal Q - Canal Um Europa - Cartoon Network - Caza y Pesca - CBS Reality - CCTV 4 Europe - CGTN - CGTN Documentary - Perviy kanal - Cine Mundo - Clubbing TV - CM TV - CNBC Europe - CNN - CNN Portugal - Cubavisión Internacional - Das Erste - Decasa - Discovery Channel - Disney Channel - Disney Junior - Dizi - Dog TV - DW Deutsch - DW English - E! - Eleven 1 - Eleven 2 - Eleven 3 - Eleven 4 - Eleven 5 - Eleven 6 - EuroNews English - EuroNews Deutsch - EuroNews - Eurosport 1 - Eurosport 2 - FashionTV - Fight Sports - Fox Comedy - Fox Crime - Fox Life - Fox Movies - Fox - France 2 - France 24 English - France 24 Français - France 3 - France 5 - Fuel TV - Galicia TV - Gametoon - Globo News - História - Hot Man - Hot Taboo - Hot - I24 News English - I24 News Français - Inter + - JimJam - KBS World - KIKA - Kuriakos TV - LocalVisão TV - Lolly Kids - Más Chic - MCM Pop - MCM Top - Mezzo - Mezzo Live HD - MTV 00s - MTV Live HD - MTV - National Geographic - National Geographic Wild - NBA TV - NHK World Japan - Nickelodeon - Odisseia - Panda Kids - Penthouse Gold - PFC - Phoenix CNE - Playboy TV - Porto Canal - Pro TV - Rai 1 - Rai 2 - Rai 3 - Rai News 24 - Rai Scuola - Rai Storia - Record News - Record TV - Rede Globo - RT News - RTP 1 - RTP 2 - RTP 3 - RTP Açores - RTP África - RTP Madeira - RTP Memória - Rybalka Telekanal - Sextreme - SIC - SIC Caras - SIC K - SIC Mulher - SIC Notícias - SIC Radical - Sky News - Sol Música - Somos - SET Asia - Sony Max UK - S+ - Sporting TV - Sport TV 1 - Sport TV 2 - Sport TV 3 - Sport TV 4 - Sport TV 5 - Sport TV 6 - Sport TV + - Star Cinema - Star Family - Stingray Classica - Stingray Djazz - Stingray IConcerts - Stingray Loud - Stingray Retro - Syfy - TCV - Telesur - TLC - Toros TV - TPA - Trace Brazuca - Trace Toca - Trace Urban - TRT World - TV 2 - TV5Monde Europe - TV Canção Nova - TVCine Action - TVCine Edition - TVCine Emotion - TVCine Top - TVE Internacional - TVI - TVI 24 - TVI Ficção - TVI Reality - TV Verdade - Ukraïna 24 - Ukraine 1 - Ukraine 2 - Venus - Vivid Red - X Sport - ZDF - ZDFNEO - Zee Cinema - Zee TV - - + + EuroNews Deutsch + France 24 English + KBS World + MTV 00s + MTV Live HD + NHK World Japan + Sky News + TPA + TRT World + 24 Kitchen + 3sat + A Bola TV + ADVNCE + Afro Music Channel + Aljazeera English + Alma Lusa + AMC + Antena 3 Internacional + ARTE Français + AR TV Canal Parlamento + Atrecine + Atreseries + AXN Movies + AXN + AXN White + Baby TV + BBC Entertainment + Benfica TV + BFM Business + BFM TV + Biggs + Blaze + Bloomberg TV + BNT 4 + Body Sex HD + Bom Som TV + Boomerang + BVN + Caçavision + Canal 11 + Canal 24 Horas + Canal Cocina + Canal Hollywood + Canal Panda + Canal Q + Canal Um Europa + Cartoon Network + Caza y Pesca + CBS Reality + CCTV 4 Europe + CGTN + CGTN Documentary + Perviy kanal + Cine Mundo + Clubbing TV + CM TV + CNBC Europe + CNN + CNN Portugal + Cubavisión Internacional + Das Erste + Decasa + Discovery Channel + Disney Channel + Disney Junior + Dizi + Dog TV + DW Deutsch + DW English + E! + Eleven 1 + Eleven 2 + Eleven 3 + Eleven 4 + Eleven 5 + Eleven 6 + EuroNews English + EuroNews + Eurosport 1 + Eurosport 2 + FashionTV + Fight Sports + Fox Comedy + Fox Crime + Fox Life + Fox Movies + Fox + France 2 + France 24 Français + France 3 + France 5 + Fuel TV + Galicia TV + Gametoon + Globo News + História + Hot Man + Hot Taboo + Hot + I24 News English + I24 News Français + Inter + + JimJam + KIKA + Kuriakos TV + LocalVisão TV + Lolly Kids + Más Chic + MCM Pop + MCM Top + Mezzo + Mezzo Live HD + MTV + National Geographic + National Geographic Wild + NBA TV + Nickelodeon + Odisseia + Panda Kids + Penthouse Gold + PFC + Phoenix CNE + Playboy TV + Porto Canal + Pro TV + Rai 1 + Rai 2 + Rai 3 + Rai News 24 + Rai Scuola + Rai Storia + Record News + Record TV + Rede Globo + RT News + RTP 1 + RTP 2 + RTP 3 + RTP Açores + RTP África + RTP Madeira + RTP Memória + Rybalka Telekanal + Sextreme + SIC + SIC Caras + SIC K + SIC Mulher + SIC Notícias + SIC Radical + Sol Música + Somos + SET Asia + Sony Max UK + S+ + Sporting TV + Sport TV 1 + Sport TV 2 + Sport TV 3 + Sport TV 4 + Sport TV 5 + Sport TV 6 + Sport TV + + Star Cinema + Star Family + Stingray Classica + Stingray Djazz + Stingray IConcerts + Stingray Loud + Stingray Retro + Syfy + TCV + Telesur + TLC + Toros TV + Trace Brazuca + Trace Toca + Trace Urban + TV 2 + TV5Monde Europe + TV Canção Nova + TVCine Action + TVCine Edition + TVCine Emotion + TVCine Top + TVE Internacional + TVI + TVI 24 + TVI Ficção + TVI Reality + TV Verdade + Ukraïna 24 + Ukraine 1 + Ukraine 2 + Venus + Vivid Red + X Sport + ZDF + ZDFNEO + Zee Cinema + Zee TV + diff --git a/sites/meo.pt/meo.pt.config.js b/sites/meo.pt/meo.pt.config.js index c899d3a4..baa87c55 100644 --- a/sites/meo.pt/meo.pt.config.js +++ b/sites/meo.pt/meo.pt.config.js @@ -3,7 +3,7 @@ const { DateTime } = require('luxon') module.exports = { site: 'meo.pt', days: 2, - url: `https://authservice.apps.meo.pt/Services/GridTv/GridTvMng.svc/getProgramsFromChannels`, + url: 'https://authservice.apps.meo.pt/Services/GridTv/GridTvMng.svc/getProgramsFromChannels', request: { method: 'POST', headers: { diff --git a/sites/meo.pt/meo.pt.test.js b/sites/meo.pt/meo.pt.test.js index e80f27ac..e4fe3ccb 100644 --- a/sites/meo.pt/meo.pt.test.js +++ b/sites/meo.pt/meo.pt.test.js @@ -1,4 +1,4 @@ -// npx epg-grabber --config=sites/meo.pt/meo.pt.config.js --channels=sites/meo.pt/meo.pt.channels.xml --output=guide.xml +// npm run grab -- --site=meo.pt const { parser, url, request } = require('./meo.pt.config.js') const fs = require('fs') diff --git a/sites/mewatch.sg/mewatch.sg.channels.xml b/sites/mewatch.sg/mewatch.sg.channels.xml index a2883a8d..0db4e147 100644 --- a/sites/mewatch.sg/mewatch.sg.channels.xml +++ b/sites/mewatch.sg/mewatch.sg.channels.xml @@ -1,22 +1,20 @@ - - - Channel 5 - Channel 8 - Channel U - Suria - Vasantham - CNA - oktolidays - eGG Network - Animax - GEM - HBO - HBO Hits - HBO Family - HBO Signature - Cinemax - LIVE 1 - LIVE 2 - - + + Animax + Channel 5 + Channel 8 + Channel U + Cinemax + CNA + eGG Network + GEM + HBO + HBO Family + HBO Hits + HBO Signature + LIVE 1 + LIVE 2 + oktolidays + Suria + Vasantham + diff --git a/sites/mewatch.sg/mewatch.sg.config.js b/sites/mewatch.sg/mewatch.sg.config.js index a8dc1363..baf58b9a 100644 --- a/sites/mewatch.sg/mewatch.sg.config.js +++ b/sites/mewatch.sg/mewatch.sg.config.js @@ -40,7 +40,7 @@ function parseStop(item) { function parseRating(info) { const classification = info.classification if (classification && classification.code) { - const [_, system, value] = classification.code.match(/^([A-Z]+)\-([A-Z0-9]+)/) || [ + const [, system, value] = classification.code.match(/^([A-Z]+)-([A-Z0-9]+)/) || [ null, null, null diff --git a/sites/mewatch.sg/mewatch.sg.test.js b/sites/mewatch.sg/mewatch.sg.test.js index e7c92a9f..ca944c90 100644 --- a/sites/mewatch.sg/mewatch.sg.test.js +++ b/sites/mewatch.sg/mewatch.sg.test.js @@ -1,4 +1,4 @@ -// npx epg-grabber --config=sites/mewatch.sg/mewatch.sg.config.js --channels=sites/mewatch.sg/mewatch.sg.channels.xml --output=guide.xml --days=2 +// npm run grab -- --site=mewatch.sg const { parser, url } = require('./mewatch.sg.config.js') const dayjs = require('dayjs') @@ -20,7 +20,8 @@ it('can generate valid url', () => { }) it('can parse response', () => { - const content = `[{"channelId":"97098","startDate":"2022-06-11T21:00:00.000Z","endDate":"2022-06-12T21:00:00.000Z","schedules":[{"channelId":"97098","customId":"37040748","endDate":"2022-06-11T21:30:00Z","id":"788a7dd","live":false,"startDate":"2022-06-11T21:00:00Z","isGap":false,"InteractiveType":"0","item":{"type":"episode","title":"Open Homes S3 - EP 2","blackoutMessage":"Programme is not available for live streaming.","description":"Mike heads down to the Sydney beaches to visit a beachside renovation with all the bells and whistles, we see a kitchen tip and recipe anyone can do at home. We finish up in the prestigious Byron bay to visit a multi million dollar award winning home.","classification":{"code":"IMDA-G (Violence)","name":"G (Violence)"},"episodeNumber":2,"episodeTitle":"Collaroy, Sydney","seasonNumber":3,"images":{"wallpaper":"https://production.togglestatic.com/shain/v1/dataservice/ResizeImage/$value?Format='jpg'&Quality=85&ImageId='4853691'&EntityType='LinearSchedule'&EntityId='788a7dd9-9b12-446f-91b4-c8ac9fec95e5'&Width=1280&Height=720&device=web_browser&subscriptions=Anonymous&segmentationTags=all","tile":"https://production.togglestatic.com/shain/v1/dataservice/ResizeImage/$value?Format='jpg'&Quality=85&ImageId='4853697'&EntityType='LinearSchedule'&EntityId='788a7dd9-9b12-446f-91b4-c8ac9fec95e5'&Width=1280&Height=720&device=web_browser&subscriptions=Anonymous&segmentationTags=all"},"enableCatchUp":true,"enableStartOver":false,"enableSeeking":false,"programSource":"ACQUIRED","simulcast":"LOCAL","masterReferenceKey":"0CH50CH5A0105567800020A0000000000P3254400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"}}]}]` + const content = + '[{"channelId":"97098","startDate":"2022-06-11T21:00:00.000Z","endDate":"2022-06-12T21:00:00.000Z","schedules":[{"channelId":"97098","customId":"37040748","endDate":"2022-06-11T21:30:00Z","id":"788a7dd","live":false,"startDate":"2022-06-11T21:00:00Z","isGap":false,"InteractiveType":"0","item":{"type":"episode","title":"Open Homes S3 - EP 2","blackoutMessage":"Programme is not available for live streaming.","description":"Mike heads down to the Sydney beaches to visit a beachside renovation with all the bells and whistles, we see a kitchen tip and recipe anyone can do at home. We finish up in the prestigious Byron bay to visit a multi million dollar award winning home.","classification":{"code":"IMDA-G (Violence)","name":"G (Violence)"},"episodeNumber":2,"episodeTitle":"Collaroy, Sydney","seasonNumber":3,"images":{"wallpaper":"https://production.togglestatic.com/shain/v1/dataservice/ResizeImage/$value?Format=\'jpg\'&Quality=85&ImageId=\'4853691\'&EntityType=\'LinearSchedule\'&EntityId=\'788a7dd9-9b12-446f-91b4-c8ac9fec95e5\'&Width=1280&Height=720&device=web_browser&subscriptions=Anonymous&segmentationTags=all","tile":"https://production.togglestatic.com/shain/v1/dataservice/ResizeImage/$value?Format=\'jpg\'&Quality=85&ImageId=\'4853697\'&EntityType=\'LinearSchedule\'&EntityId=\'788a7dd9-9b12-446f-91b4-c8ac9fec95e5\'&Width=1280&Height=720&device=web_browser&subscriptions=Anonymous&segmentationTags=all"},"enableCatchUp":true,"enableStartOver":false,"enableSeeking":false,"programSource":"ACQUIRED","simulcast":"LOCAL","masterReferenceKey":"0CH50CH5A0105567800020A0000000000P3254400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"}}]}]' const result = parser({ content, channel }).map(p => { p.start = p.start.toJSON() p.stop = p.stop.toJSON() @@ -34,7 +35,7 @@ it('can parse response', () => { title: 'Open Homes S3 - EP 2', description: 'Mike heads down to the Sydney beaches to visit a beachside renovation with all the bells and whistles, we see a kitchen tip and recipe anyone can do at home. We finish up in the prestigious Byron bay to visit a multi million dollar award winning home.', - icon: `https://production.togglestatic.com/shain/v1/dataservice/ResizeImage/$value?Format='jpg'&Quality=85&ImageId='4853697'&EntityType='LinearSchedule'&EntityId='788a7dd9-9b12-446f-91b4-c8ac9fec95e5'&Width=1280&Height=720&device=web_browser&subscriptions=Anonymous&segmentationTags=all`, + icon: "https://production.togglestatic.com/shain/v1/dataservice/ResizeImage/$value?Format='jpg'&Quality=85&ImageId='4853697'&EntityType='LinearSchedule'&EntityId='788a7dd9-9b12-446f-91b4-c8ac9fec95e5'&Width=1280&Height=720&device=web_browser&subscriptions=Anonymous&segmentationTags=all", episode: 2, season: 3, rating: { @@ -47,7 +48,8 @@ it('can parse response', () => { it('can handle empty guide', () => { const result = parser({ - content: `[{"channelId":"9798","startDate":"2022-06-11T21:00:00.000Z","endDate":"2022-06-12T21:00:00.000Z","schedules":[]}]`, + content: + '[{"channelId":"9798","startDate":"2022-06-11T21:00:00.000Z","endDate":"2022-06-12T21:00:00.000Z","schedules":[]}]', channel }) expect(result).toMatchObject([]) diff --git a/sites/mi.tv/mi.tv.config.js b/sites/mi.tv/mi.tv.config.js index 6de2b808..946d10e1 100644 --- a/sites/mi.tv/mi.tv.config.js +++ b/sites/mi.tv/mi.tv.config.js @@ -66,7 +66,7 @@ function parseDescription($item) { function parseIcon($item) { const backgroundImage = $item('a > div.image-parent > div.image').css('background-image') - const [_, icon] = backgroundImage.match(/url\(\'(.*)'\)/) || [null, null] + const [, icon] = backgroundImage.match(/url\('(.*)'\)/) || [null, null] return icon } diff --git a/sites/mi.tv/mi.tv.test.js b/sites/mi.tv/mi.tv.test.js index bed90649..5a4a1be0 100644 --- a/sites/mi.tv/mi.tv.test.js +++ b/sites/mi.tv/mi.tv.test.js @@ -1,4 +1,4 @@ -// npx epg-grabber --config=sites/mi.tv/mi.tv.config.js --channels=sites/mi.tv/mi.tv_ar.channels.xml --output=guide.xml --days=2 +// npm run grab -- --site=mi.tv const { parser, url } = require('./mi.tv.config.js') const dayjs = require('dayjs') @@ -12,7 +12,8 @@ const channel = { site_id: 'ar#24-7-canal-de-noticias', xmltv_id: '247CanaldeNoticias.ar' } -const content = ` Programación 24/7 Canal de Noticias Miércoles 24 de noviembre 03:00 Trasnoche de 24/7 Interés general Lo más visto de la semana en nuestra pantalla. 23:00 Noticiero central - Segunda edición Noticiero Cerramos el día con un completo resumen de los temas más relevantes con columnistas y análisis especiales para terminar el día. 01:00 Plus energético Cultural La energía tiene mucho para mostrar. Este programa reúne a las principales empresas y protagonistas de la actividad que esta revolucionando la región. ` +const content = + ' Programación 24/7 Canal de Noticias Miércoles 24 de noviembre 03:00 Trasnoche de 24/7 Interés general Lo más visto de la semana en nuestra pantalla. 23:00 Noticiero central - Segunda edición Noticiero Cerramos el día con un completo resumen de los temas más relevantes con columnistas y análisis especiales para terminar el día. 01:00 Plus energético Cultural La energía tiene mucho para mostrar. Este programa reúne a las principales empresas y protagonistas de la actividad que esta revolucionando la región. ' it('can generate valid url', () => { expect(url({ channel, date })).toBe( @@ -31,7 +32,7 @@ it('can parse response', () => { { start: '2021-11-24T03:00:00.000Z', stop: '2021-11-24T23:00:00.000Z', - title: `Trasnoche de 24/7`, + title: 'Trasnoche de 24/7', category: 'Interés general', description: 'Lo más visto de la semana en nuestra pantalla.', icon: 'https://cdn.mitvstatic.com/programs/fallback_other_l_m.jpg' @@ -39,17 +40,19 @@ it('can parse response', () => { { start: '2021-11-24T23:00:00.000Z', stop: '2021-11-25T01:00:00.000Z', - title: `Noticiero central - Segunda edición`, + title: 'Noticiero central - Segunda edición', category: 'Noticiero', - description: `Cerramos el día con un completo resumen de los temas más relevantes con columnistas y análisis especiales para terminar el día.`, + description: + 'Cerramos el día con un completo resumen de los temas más relevantes con columnistas y análisis especiales para terminar el día.', icon: 'https://cdn.mitvstatic.com/programs/fallback_other_l_m.jpg' }, { start: '2021-11-25T01:00:00.000Z', stop: '2021-11-25T02:00:00.000Z', - title: `Plus energético`, + title: 'Plus energético', category: 'Cultural', - description: `La energía tiene mucho para mostrar. Este programa reúne a las principales empresas y protagonistas de la actividad que esta revolucionando la región.`, + description: + 'La energía tiene mucho para mostrar. Este programa reúne a las principales empresas y protagonistas de la actividad que esta revolucionando la región.', icon: 'https://cdn.mitvstatic.com/programs/fallback_other_l_m.jpg' } ]) @@ -59,7 +62,7 @@ it('can handle empty guide', () => { const result = parser({ date, channel, - content: `` + content: '' }) expect(result).toMatchObject([]) }) diff --git a/sites/mi.tv/mi.tv_ar.channels.xml b/sites/mi.tv/mi.tv_ar.channels.xml index 0f82f6cc..a3a12ac2 100644 --- a/sites/mi.tv/mi.tv_ar.channels.xml +++ b/sites/mi.tv/mi.tv_ar.channels.xml @@ -1,164 +1,162 @@ - - - 24/7 Canal de Noticias - A24 - A&E Mundo - AMC - América Sports - América TV - Animal Planet - Argentinísima Satelital - Atrecine - Atreseries - Az Corazón - Baby TV Latin America - Bloomberg TV - C5N - Canal 10 Córdoba - Canal 20 Villa Maria - Canal 26 - Canal 4 - Canal (á) - Canal de la Ciudad - Canal DHE - Canal Luz - Canal Orbe 21 - Canal Rural - Canal U - Cartoon Network - Cine.ar - Cinecanal - CineLatino - Cinemax - Ciudad Magazine - CM El Canal de la Música - CN23 - CNN Chile - CNN en Español - CNN - Comedy Central - Conexión Educativa - Construir TV - Crónica TV - De Película - DeporTV - Discovery Channel - Discovery World HD - Discovery Home & Health - Discovery Kids - Discovery Science - Discovery Theater HD - Discovery Turbo - Disney Channel - E! - El Gourmet - El Nueve - El Trece - El Trece Internacional - Encuentro - ESPN Premium - Europa Europa - EWTN - Film & Arts - Food Network - Fox Sports 2 - Fox Sports 3 - Fox Sports HD - France 24 Español - FX - FXM - Galicia TV - Garage TV - Glitz - Golden Edge - Golden - Golf Channel - Gol TV - HAPSATV - HBO 2 - HBO Family - HBO Mundi - HBO Plus Panamericano HD - HBO Pop - HBO Signature - HBO Xtreme - HGTV - Hispan TV - H2 - History - Hola! TV - HTV - Investigation Discovery - I-Sat - IVC - Las Estrellas - Lifetime - LN+ - Más Chic - Metro - MTV Hits - MTV - Much - MusicTop - Nat Geo Kids - National Geographic - National Geographic Wild - NBA TV - Net TV - Nickelodeon - Nick Jr - Nicktoons - Pakapaka - Paramount Network - Pasiones - Penthouse Gold - Playboy TV - Quiero Musica en mi Idioma - Rai Italia - RT HD - Smithsonian Channel - Sony Channel - Space - Star Channel - Studio Universal - TBS - TCM - Tec TV - Telediario TV - Telefe - Telefe Córdoba - Telefe Rosario - Telefe Santa Fe - TeleHit - Telemax - Telemundo - Telesur - TLC - Tlnovelas - TN - TNT - TNT Series - TNT Sports - Tooncast - Tru TV - Turismo Visión Argentina - TV5Monde - TV Ciudad - TV Cortos - TVE - TV Globo - TV Nacional Uruguay - TV Pública - TyC Sports - TyC Sports 2 - Universal TV - Uruguay Natural TV - Venus - Viajar - Volver - VTV - Warner Channel - ZooMoo - - + + 24/7 Canal de Noticias + A24 + A&E Mundo + AMC + América Sports + América TV + Animal Planet + Argentinísima Satelital + Atrecine + Atreseries + Az Corazón + Baby TV Latin America + Bloomberg TV + C5N + Canal 10 Córdoba + Canal 20 Villa Maria + Canal 26 + Canal 4 + TV Nacional Uruguay + Canal (á) + Canal de la Ciudad + Canal Luz + Canal Orbe 21 + Canal Rural + Canal U + Cartoon Network + Cine.ar + Cinecanal + CineLatino + Cinemax + Ciudad Magazine + CM El Canal de la Música + CN23 + CNN Chile + CNN en Español + CNN + Comedy Central + Conexión Educativa + Construir TV + Crónica TV + De Película + DeporTV + Canal DHE + Discovery Channel + Discovery Home & Health + Discovery Kids + Discovery Science + Discovery Theater HD + Discovery Turbo + Discovery World HD + Disney Channel + E! + El Gourmet + El Nueve + El Trece + El Trece Internacional + Encuentro + ESPN Premium + Europa Europa + EWTN + Film & Arts + Food Network + Fox Sports 2 + Fox Sports 3 + Fox Sports HD + France 24 Español + FXM + FX + Galicia TV + Garage TV + Glitz + Golden Edge + Golden + Golf Channel + Gol TV + HAPSATV + HBO 2 + HBO Family + HBO Mundi + HBO Plus Panamericano HD + HBO Pop + HBO Signature + HBO Xtreme + HGTV + Hispan TV + H2 + History + Hola! TV + HTV + Investigation Discovery + I-Sat + IVC + LN+ + Las Estrellas + Lifetime + Más Chic + Metro + MTV Hits + MTV + Much + MusicTop + Nat Geo Kids + National Geographic + National Geographic Wild + NBA TV + Net TV + Nickelodeon + Nick Jr + Nicktoons + Pakapaka + Paramount Network + Pasiones + Penthouse Gold + Playboy TV + Quiero Musica en mi Idioma + Rai Italia + RT HD + Smithsonian Channel + Sony Channel + Space + Star Channel + Studio Universal + TBS + TCM + Tec TV + Telediario TV + Telefe + Telefe Córdoba + Telefe Rosario + Telefe Santa Fe + TeleHit + Telemax + Telemundo + Telesur + TLC + Tlnovelas + TN + TNT Series + TNT + TNT Sports + Tooncast + Tru TV + Turismo Visión Argentina + TV5Monde + TV Ciudad + TV Cortos + TVE + TV Globo + TV Pública + TyC Sports + TyC Sports 2 + Universal TV + Uruguay Natural TV + Venus + Viajar + Volver + VTV + Warner Channel + ZooMoo + diff --git a/sites/mi.tv/mi.tv_br.channels.xml b/sites/mi.tv/mi.tv_br.channels.xml index 8035791e..9dbbbb37 100644 --- a/sites/mi.tv/mi.tv_br.channels.xml +++ b/sites/mi.tv/mi.tv_br.channels.xml @@ -1,260 +1,258 @@ - - - A&E - Agro+ HD - Amazon Sat - AMC Brasil - Animal Planet - Arte 1 - AXN - Baby TV - Band Amazonas - Band Bahia - Band Curitiba - Band News - Band São Paulo - Band Sports - BBC World News Americas - Bis - - Boas Novas - Boa Vontade TV - Boomerang - Canal Brasil - Canal do Boi - Canal Futura - Canal Off - Canal Rural - Canal Viva - Cartoon Network Brasil - CGTN - Chef TV - CineBrasil TV - Cinemax Brasil - CNN Brasil - CNN International Asia Pacific - Comedy Central Brasil - Conmebol TV 1 - Conmebol TV 2 - Conmebol TV 3 - Conmebol TV 4 - Curta! - Discovery Channel Brasil - Discovery Home & Health Brasil - Discovery Kids Brasil - Discovery Science Brasil - Discovery Theater - Discovery Turbo Brasil - Discovery World Brasil - Disney Channel Brasil - Dog TV - DW Deutsch - E! Brasil - EPTV Sul de Minas - ESPN - ESPN Brasil - ESPN Extra - Eurochannel - FashionTV Brazil - Film & Arts Brasil - Fish TV - Food Network Brasil - Fox News Channel - Fox Sports 2 Brasil - Fox Sports Brasil - FX Brasil - Globo News - Gloob - Gloobinho - GNT - HBO 2 Brasil - HBO Brasil - HBO Family Brasil - HBO Mundi Brasil - HBO Plus Brasil - HBO Pop Brasil - HBO Signature Brasil - HBO Xtreme Brasil - HGTV Brasil - History 2 Brasil - History Brasil - Ideal TV - Inter TV Alto Litoral - Inter TV Cabugi - Inter TV Grande Minas - Inter TV Serramar - Investigação Discovery - I-Sat - Jovem Pan News - Lifetime Brasil - Loading - Mais na Tela - Megapix - MTV Brasil - MTV Live HD - Multishow - Music Box Brazil - Nat Geo Kids - National Geographic - National Geographic Wild - NHK World Japan - Nickelodeon - Nick Jr - NSC TV Blumenau HD - NSC TV Chapecó - NSC TV Criciúma - NSC TV Florianópolis HD - NSC TV Joinville HD - Paramount Network - Playboy TV Brazil - Premiere Clubes - Prime Box Brazil - Rai - RBA TV HD - RBI TV - RBS TV Porto Alegre HD - RBS TV RS - RBS TV Santa Maria - Record Belém - Record Cabrália - Record Goiás - Record Itapoan - Record Minas HD - Record Nacional - Record News - Record Paulista HD - Record Rio HD - Record Rio Grande do Sul HD - Record São Paulo HD - Rede 21 HD - Rede Amazônica - Rede Amazônica Manaus HD - Rede Brasil - Rede CNT Rio de Janeiro HD - Rede Família - Rede Gênesis - Rede Globo HD - Rede Gospel - Rede Internacional de TV - Rede Massa - Rede Meio Norte - Rede Minas - Rede Século 21 - Rede Super - Rede TV! - Rede TV! Rondônia - Rede Vida - RPC TV Curitiba - RPC TV Foz do Iguaçu - RPC TV Maringá - RPC TV Paranavaí - RPC TV Ponta Grossa - RTPi Brasil - SBN International - SBT MS - SBT Nacional - SBT Pará - SBT Rio - SESC TV - Sextreme - Sexy Hot - SIC Internacional - SIC TV - Smithsonian Channel HD Brasil - Sony Channel - Space - SporTV - SporTV 2 - SporTV 3 - Star Channel - Star Hits - Star Life - Studio Universal - Syfy - TBS - TCM - Telecine Action - Telecine Cult - Telecine Fun - Telecine Pipoca - Telecine Premium - Telecine Touch - Telefe Internacional - Terra Viva - TLC - TNT - TNT Series - Tooncast - Trace Brazuca - Travel Box Brazil - Tru TV - TV A Crítica - TV ALESP - TV Amapá - TV Anhanguera HD - TV Antena 10 - TV Aparecida - TV Aratu - TV Assembléia Ceará HD - TV Assembléia Minas Gerais - TV Atalaia - TV Bahia - TV Brasil - TV Cabo Branco - TV Câmara - TV Canção Nova - TV Capixaba - TV Ceará - TV Centro América Cuiabá - TV Cidade São Luíz HD - TV Cidade Verde Cuiabá HD - TV Clube - TV Correio - TV Cultura - TV Diário - TV Difusora São Luís - TVE - TVE Bahia - TVE - TV Em Tempo HD - TV Escola - TV Gazeta - TV Globo Brasília - TV Globo Nordeste HD - TV Globo Rio de Janeiro - TV Globo São Paulo - TV Goiânia Band - TV Guará HD - TV Horizonte - TV Iguaçu HD - TV Jangadeiro - TV Jornal Caruaru - TV Justiça - TV Liberal - TV Novo Tempo - TV Pajuçara - TV Pampa HD - TV Paranaíba HD - TV Paraná Turismo HD - TV Ponta Negra - TV Rá Tim Bum - TV Rio Sul HD - TV Rondônia - TV Santa Cruz HD - TV Senado - TV Sergipe HD - TV Serra Dourada HD - TVT - TV Tribuna - TV Tropical - TV União Fortaleza - TV Verdes Mares - Universal TV - Univesp TV - VH1 - Warner Channel - WooHoo - ZooMoo - - + + + A&E + Agro+ HD + Amazon Sat + AMC Brasil + Animal Planet + Arte 1 + AXN + Baby TV + Band Amazonas + Band Bahia + Band Curitiba + Band News + Band São Paulo + Band Sports + BBC World News Americas + Bis + Boas Novas + Boa Vontade TV + Boomerang + Canal Brasil + Canal do Boi + Canal Futura + Canal Off + Canal Rural + Canal Viva + Cartoon Network Brasil + CGTN + Chef TV + CineBrasil TV + Cinemax Brasil + CNN Brasil + CNN International Asia Pacific + Comedy Central Brasil + Conmebol TV 1 + Conmebol TV 2 + Conmebol TV 3 + Conmebol TV 4 + Curta! + Discovery Channel Brasil + Discovery Home & Health Brasil + Discovery Kids Brasil + Discovery Science Brasil + Discovery Theater + Discovery Turbo Brasil + Discovery World Brasil + Disney Channel Brasil + Dog TV + DW Deutsch + E! Brasil + EPTV Sul de Minas + ESPN + ESPN Brasil + ESPN Extra + Eurochannel + FashionTV Brazil + Film & Arts Brasil + Fish TV + Food Network Brasil + Fox News Channel + Fox Sports 2 Brasil + Fox Sports Brasil + FX Brasil + Globo News + Gloob + Gloobinho + GNT + HBO 2 Brasil + HBO Brasil + HBO Family Brasil + HBO Mundi Brasil + HBO Plus Brasil + HBO Pop Brasil + HBO Signature Brasil + HBO Xtreme Brasil + HGTV Brasil + History 2 Brasil + History Brasil + Ideal TV + Inter TV Alto Litoral + Inter TV Cabugi + Inter TV Grande Minas + Inter TV Serramar + Investigação Discovery + I-Sat + Jovem Pan News + Lifetime Brasil + Loading + Mais na Tela + Megapix + MTV Brasil + MTV Live HD + Multishow + Music Box Brazil + Nat Geo Kids + National Geographic + National Geographic Wild + NHK World Japan + Nickelodeon + Nick Jr + NSC TV Blumenau HD + NSC TV Chapecó + NSC TV Criciúma + NSC TV Florianópolis HD + NSC TV Joinville HD + Paramount Network + Playboy TV Brazil + Premiere Clubes + Prime Box Brazil + Rai + RBA TV HD + RBI TV + RBS TV Porto Alegre HD + RBS TV RS + RBS TV Santa Maria + Record News + Record Nacional + Record Belém + Record Cabrália + Record Goiás + Record Itapoan + Record Minas HD + Record Paulista HD + Record Rio HD + Record Rio Grande do Sul HD + Record São Paulo HD + Rede 21 HD + Rede Amazônica + Rede Amazônica Manaus HD + Rede Brasil + Rede CNT Rio de Janeiro HD + Rede Família + Rede Gênesis + Rede Globo HD + Rede Gospel + Rede Internacional de TV + Rede Massa + Rede Meio Norte + Rede Minas + Rede Século 21 + Rede Super + Rede TV! + Rede TV! Rondônia + Rede Vida + RPC TV Curitiba + RPC TV Foz do Iguaçu + RPC TV Maringá + RPC TV Paranavaí + RPC TV Ponta Grossa + RTPi Brasil + SBN International + SBT MS + SBT Nacional + SBT Pará + SBT Rio + SESC TV + Sextreme + Sexy Hot + SIC Internacional + SIC TV + Smithsonian Channel HD Brasil + Sony Channel + Space + SporTV + SporTV 2 + SporTV 3 + Star Channel + Star Hits + Star Life + Studio Universal + Syfy + TBS + TCM + Telecine Action + Telecine Cult + Telecine Fun + Telecine Pipoca + Telecine Premium + Telecine Touch + Telefe Internacional + Terra Viva + TLC + TNT + TNT Series + Tooncast + Trace Brazuca + Travel Box Brazil + Tru TV + TV A Crítica + TV ALESP + TV Amapá + TV Anhanguera HD + TV Antena 10 + TV Aparecida + TV Aratu + TV Assembléia Ceará HD + TV Assembléia Minas Gerais + TV Atalaia + TV Bahia + TV Brasil + TV Cabo Branco + TV Câmara + TV Canção Nova + TV Capixaba + TV Ceará + TV Centro América Cuiabá + TV Cidade São Luíz HD + TV Cidade Verde Cuiabá HD + TV Clube + TV Correio + TV Cultura + TV Diário + TV Difusora São Luís + TVE Bahia + TVE + TV Em Tempo HD + TVE + TV Escola + TV Gazeta + TV Globo Brasília + TV Globo Nordeste HD + TV Globo Rio de Janeiro + TV Globo São Paulo + TV Goiânia Band + TV Guará HD + TV Horizonte + TV Iguaçu HD + TV Jangadeiro + TV Jornal Caruaru + TV Justiça + TV Liberal + TV Novo Tempo + TV Pajuçara + TV Pampa HD + TV Paranaíba HD + TV Paraná Turismo HD + TV Ponta Negra + TV Rá Tim Bum + TV Rio Sul HD + TV Rondônia + TV Santa Cruz HD + TV Senado + TV Sergipe HD + TV Serra Dourada HD + TVT + TV Tribuna + TV Tropical + TV União Fortaleza + TV Verdes Mares + Universal TV + Univesp TV + VH1 + Warner Channel + WooHoo + ZooMoo + diff --git a/sites/mi.tv/mi.tv_cl.channels.xml b/sites/mi.tv/mi.tv_cl.channels.xml index 93f565c0..e825e0e0 100644 --- a/sites/mi.tv/mi.tv_cl.channels.xml +++ b/sites/mi.tv/mi.tv_cl.channels.xml @@ -1,84 +1,82 @@ - - - 13C - 24 Horas - AMC - America Sports - ARTV - Az Cinema - Azteca Uno - Boomerang - Canal 13 - Canal 24 Horas - Canal 7 Jujuy - Canal 9 Bío-Bío Televisión - Canal del Sur - Canal Ecool - Canal ISB - Canal Vasco - Caracol TV Internacional - Cartoon Network - CCTV 4 - CDF Básico - CDF HD - CDF Premium - CDO Básico - CDO HD - CDO Premium - ChileVisión - Concert Channel - Diputados TV - Discovery Channel - Discovery Kids - El Gourmet - Enlace - ESPN 2 - ESPN 3 - ESPN 4 - ETC TV - EuroNews - Fox Sports 1 HD - Fox Sports 2 - Fox Sports - France 24 English - FunBox - FX - FXM - HBO - La Red - María+Visión - Mega - National Geographic - NHK World Premium - Rec TV - RMS - Space - Star Action +3 - Star Channel - Star Cinema - Star Classics - Star Comedy - Star Fun +3 - Star Hits - Star Life - Star Series +3 - Studio Universal - TBS - TCM - Teletrak - TNT - TVN - TV Nuevo Tiempo - TV Senado - TVU - TyC Sports - UCV TV - Ufrovisión - Unicable - Universal TV - Vía X - Warner Channel - Zona Latina - - + + 13C + 24 Horas + AMC + America Sports + ARTV + Az Cinema + Azteca Uno + Boomerang + Canal 13 + Canal 24 Horas + Canal 7 Jujuy + Canal 9 Bío-Bío Televisión + Canal del Sur + Canal Ecool + Canal ISB + Canal Vasco + Caracol TV Internacional + Cartoon Network + CCTV 4 + CDF Básico + CDF HD + CDF Premium + CDO Básico + CDO HD + CDO Premium + ChileVisión + Concert Channel + Diputados TV + Discovery Channel + Discovery Kids + El Gourmet + Enlace + ESPN 2 + ESPN 3 + ESPN 4 + ETC TV + EuroNews + Fox Sports 1 HD + Fox Sports 2 + Fox Sports + France 24 English + FunBox + FX + FXM + HBO + La Red + María+Visión + Mega + National Geographic + NHK World Premium + TV Nuevo Tiempo + Rec TV + RMS + Space + Star Action +3 + Star Channel + Star Cinema + Star Classics + Star Comedy + Star Fun +3 + Star Hits + Star Life + Star Series +3 + Studio Universal + TBS + TCM + Teletrak + TNT + TVN + TV Senado + TVU + TyC Sports + UCV TV + Ufrovisión + Unicable + Universal TV + Vía X + Warner Channel + Zona Latina + diff --git a/sites/mi.tv/mi.tv_co.channels.xml b/sites/mi.tv/mi.tv_co.channels.xml index 0081b927..baa2c78c 100644 --- a/sites/mi.tv/mi.tv_co.channels.xml +++ b/sites/mi.tv/mi.tv_co.channels.xml @@ -1,46 +1,44 @@ - - - Aliento Vision - AXN - Az Mundo HD - Canal 1 - Canal C - Canal CaliTV - Canal Capital - Canal Cartagena - Canal TRO - Canal U - Caracol TV - Comedy Central HD - Cosmovisión - Cristovisión - Discovery Kids - Enlace Juvenil - Fashion One HD - Fox Sports 2 HD - FX HD - Golden Premier HD - HBO HD Este - Investigation Discovery HD - MTV Live HD - RCN TV HD - - Star Action - Star Channel - Star Fun - Star Life - Star Series - Sun Channel - Teleantioquia HD - Telemedellín HD - Tele Nostalgia - Tele Vid HD - TLC - TNT Series - Trace Sport Stars - Trece - Ve Plus - Win Sports HD - - + + + Aliento Vision + AXN + Az Mundo HD + Canal CaliTV + Canal 1 + Canal C + Canal Capital + Canal Cartagena + RCN TV HD + Canal TRO + Canal U + Caracol TV + Comedy Central HD + Cosmovisión + Cristovisión + Discovery Kids + Enlace Juvenil + Fashion One HD + Fox Sports 2 HD + FX HD + Golden Premier HD + HBO HD Este + Investigation Discovery HD + MTV Live HD + Star Action + Star Channel + Star Fun + Star Life + Star Series + Sun Channel + Teleantioquia HD + Telemedellín HD + Tele Nostalgia + Tele Vid HD + TLC + TNT Series + Trace Sport Stars + Trece + Ve Plus + Win Sports HD + diff --git a/sites/mi.tv/mi.tv_gt.channels.xml b/sites/mi.tv/mi.tv_gt.channels.xml index 11708283..8332c413 100644 --- a/sites/mi.tv/mi.tv_gt.channels.xml +++ b/sites/mi.tv/mi.tv_gt.channels.xml @@ -1,23 +1,21 @@ - - - Cablenoticias - Canal Antigua - Cartoon Network - Cinecanal - Discovery Home & Health - Distrito Comedia - Guatevisión - MTV Latino - MultiPremier - National Geographic - - Star Life - TDN - Telemicro Internacional - Televen - TNT - TV Agro - XTime Channel - - + + + Cablenoticias + Canal Antigua + Cartoon Network + Cinecanal + Discovery Home & Health + Distrito Comedia + Guatevisión + MTV Latino + MultiPremier + National Geographic + Star Life + TDN + Telemicro Internacional + Televen + TNT + TV Agro + XTime Channel + diff --git a/sites/mi.tv/mi.tv_hn.channels.xml b/sites/mi.tv/mi.tv_hn.channels.xml index cb77ccbb..acc8ea78 100644 --- a/sites/mi.tv/mi.tv_hn.channels.xml +++ b/sites/mi.tv/mi.tv_hn.channels.xml @@ -1,27 +1,25 @@ - - - 3ABN Latino - Alfa & Omega Vision - Azteca 7 - Bandamax - Bethel TV - Canal 11 - CCI Channel - CDM - Cinecanal - Cubavisión - Disney Channel - DTV - Fox Sports - Gol TV - HCH - Studio Universal - Telecadena 7 y 4 - Teleceiba - Telesistema 3 y 7 - Televicentro - Universal TV - VTV - - + + 3ABN Latino + Alfa & Omega Vision + Azteca 7 + Bandamax + Bethel TV + Canal 11 + CCI Channel + CDM + Cinecanal + Cubavisión + Disney Channel + DTV + Fox Sports + Gol TV + HCH + Studio Universal + Telecadena 7 y 4 + Teleceiba + Telesistema 3 y 7 + Televicentro + Universal TV + VTV + diff --git a/sites/mi.tv/mi.tv_mx.channels.xml b/sites/mi.tv/mi.tv_mx.channels.xml index a37881a7..b7db8741 100644 --- a/sites/mi.tv/mi.tv_mx.channels.xml +++ b/sites/mi.tv/mi.tv_mx.channels.xml @@ -1,31 +1,29 @@ - - - AMC - Azteca 7 - Boomerang - Canal 22 Metropolitana y Nacional - El Nu9ve - Las Estrellas - Canal 5 - Cartoon Network - Cine Mexicano - De Pelicula HD - Discovery Channel - Disney Channel - El Financiero Bloomberg - Foro TV - Milenio TV - Nu Music - Once México - Space - Star Channel - Star Life - Studio Universal - Tlnovelas - TNT - Universal TV - Warner Channel - WOBI TV - - + + AMC + Azteca 7 + Boomerang + Canal 22 Metropolitana y Nacional + Canal 5 + Cartoon Network + Cine Mexicano + De Pelicula HD + Discovery Channel + Disney Channel + El Financiero Bloomberg + El Nu9ve + Foro TV + Las Estrellas + Milenio TV + Nu Music + Space + Star Channel + Star Life + Studio Universal + Tlnovelas + TNT + Universal TV + Warner Channel + WOBI TV + Once México + diff --git a/sites/mi.tv/mi.tv_pe.channels.xml b/sites/mi.tv/mi.tv_pe.channels.xml index 850fc648..40fcb0d5 100644 --- a/sites/mi.tv/mi.tv_pe.channels.xml +++ b/sites/mi.tv/mi.tv_pe.channels.xml @@ -1,24 +1,22 @@ - - - - ATV - ATV+ - ATV Sur - BYU TV - City TV - DW Deutsch+ - Global TV - Latele - Latina - Más Chic - Mi Gente TV - Nickelodeon - Panamericana TV - Rumba TV - Telefuturo - TV Perú - Unitel - Willax TV - - + + + ATV + ATV+ + ATV Sur + BYU TV + City TV + DW Deutsch+ + Global TV + Latele + Latina + Más Chic + Mi Gente TV + Nickelodeon + Panamericana TV + Rumba TV + Telefuturo + TV Perú + Unitel + Willax TV + diff --git a/sites/mi.tv/mi.tv_sv.channels.xml b/sites/mi.tv/mi.tv_sv.channels.xml index 92cb7fa2..8a9e0ca4 100644 --- a/sites/mi.tv/mi.tv_sv.channels.xml +++ b/sites/mi.tv/mi.tv_sv.channels.xml @@ -1,17 +1,15 @@ - - - Canal 2 - Canal 4 - Canal 6 - Canal 10 - Canal 12 - Canal Claro - Gentevé - Megavisión Canal 19 - Megavisión Canal 21 - TVO Canal 23 - TVX - VTV Canal 35 - - + + Canal 10 + Canal 12 + Canal 2 + Canal 4 + Canal 6 + Canal Claro + Gentevé + Megavisión Canal 19 + Megavisión Canal 21 + TVO Canal 23 + TVX + VTV Canal 35 + diff --git a/sites/mncvision.id/mncvision.id.channels.xml b/sites/mncvision.id/mncvision.id.channels.xml index c01defef..fe2fbb6b 100644 --- a/sites/mncvision.id/mncvision.id.channels.xml +++ b/sites/mncvision.id/mncvision.id.channels.xml @@ -1,199 +1,197 @@ - - - ABC Australia - Aljazeera - Animal Planet - Animax Asia - ANTV - Arirang - Asian Food Network - AXN - Baby TV - BBC Earth - BBC World News - BeIn Sports 1 - BeIn Sports 3 - BTV - Besmart - Bloomberg TV - Boomerang - Cartoon - CBeebies - Celestial Classic Movies - Celestial Movies - CGTN - CGTN Documentary - Cinemax - CNA - CNBC - CNN International - Crime + Investigation - Discovery Channel - DW English - Ent - Fight Sports - FMN - Fox News Channel - France 24 - Galaxy - Galaxy Premium - GTV - HBO Asia - HBO Family Asia - HBO Hits - HBO Signature Asia - HGTV Asia - History - Hits - Hits Movies - IDX Channel - Ie - IMC - Indosiar - INews - Jak TV - Kids TV - Kix - Kompas TV - Life - Lifestyle & Fashion - Lifetime Asia - Metro TV - Miao Mi - MNC News - MNC Sports - MNC Sports 2 - MNC Sports 3 - MNC TV - M Shop Signature - M Shop Super Sale! - Music TV - Muslim TV - National Geographic - National Geographic Wild - NET - NHK World Japan - NHK World Premium - Nickelodeon - Nick Jr Asia - OK TV - One - Quran TV - RCTI - SCTV - SEA Today - Soccer Channel - SPOTV - SPOTV 2 - Tawaf TV - Thrill - TLC - Trans 7 - Trans TV - tvN - tvN Movies - TVOne - TVRI Nasional - Vision Prime - Warner TV - Zee Bioskop - ABC Australia - Aljazeera - Animal Planet - Animax - ANTV - Arirang World - Asian Food Network - AXN - Baby TV - BBC Earth - BBC World News - BeIn Sports 1 - BeIn Sports 3 - BTV - Besmart - Bloomberg TV - Boomerang - Cartoon Network - CBeebies Asia - Celestial Classic Movies - Celestial Movies - CGTN - CGTN Documentary - Cinemax Asia - CNA - CNBC - CNN International - Crime + Investigation - Discovery Channel - DW English - Ent - Fight Sports - FMN - Fox News Channel - France 24 - Galaxy - Galaxy Premium - GTV - HBO - HBO Family - HBO Hits - HBO Signature - HGTV - History - Hits - Hits Movies - IDX Channel - Ie - IMC - Indosiar - INews - Jak TV - Kids TV - Kix - Kompas TV - Life - Lifestyle & Fashion - Lifetime - Metro TV - Miao Mi - MNC News - MNC Sports - MNC Sports 2 - MNC Sports 3 - MNC TV - M Shop Signature - M Shop Super Sale! - Music TV - Muslim TV - National Geographic - National Geographic Wild - NET - NHK World Japan - NHK World Premium - Nickelodeon - Nick Jr - OK TV - One - Quran TV - RCTI - SCTV - SEA Today - Soccer Channel - SPOTV - SPOTV 2 - Tawaf TV - Thrill - TLC - Trans 7 - Trans TV - tvN - tvN Movies - TVOne - TVRI Nasional - Vision Prime - Warner TV - Zee Bioskop - - + + ABC Australia + Aljazeera + Animal Planet + Animax Asia + ANTV + Arirang + Asian Food Network + AXN + Baby TV + BBC Earth + BBC World News + BeIn Sports 1 + BeIn Sports 3 + BTV + Besmart + Bloomberg TV + Boomerang + Cartoon + CBeebies + Celestial Classic Movies + Celestial Movies + CGTN + CGTN Documentary + Cinemax + CNA + CNBC + CNN International + Crime + Investigation + Discovery Channel + DW English + Ent + Fight Sports + FMN + Fox News Channel + France 24 + Galaxy + Galaxy Premium + GTV + HBO Asia + HBO Family Asia + HBO Hits + HBO Signature Asia + HGTV Asia + History + Hits + Hits Movies + IDX Channel + Ie + IMC + Indosiar + INews + Jak TV + Kids TV + Kix + Kompas TV + Life + Lifestyle & Fashion + Lifetime Asia + Metro TV + Miao Mi + MNC News + MNC Sports + MNC Sports 2 + MNC Sports 3 + MNC TV + M Shop Signature + M Shop Super Sale! + Music TV + Muslim TV + National Geographic + National Geographic Wild + NET + NHK World Japan + NHK World Premium + Nickelodeon + Nick Jr Asia + OK TV + One + Quran TV + RCTI + SCTV + SEA Today + Soccer Channel + SPOTV + SPOTV 2 + Tawaf TV + Thrill + TLC + Trans 7 + Trans TV + tvN + tvN Movies + TVOne + TVRI Nasional + Vision Prime + Warner TV + Zee Bioskop + ABC Australia + Aljazeera + Animal Planet + Animax + ANTV + Arirang World + Asian Food Network + AXN + Baby TV + BBC Earth + BBC World News + BeIn Sports 1 + BeIn Sports 3 + BTV + Besmart + Bloomberg TV + Boomerang + Cartoon Network + CBeebies Asia + Celestial Classic Movies + Celestial Movies + CGTN + CGTN Documentary + Cinemax Asia + CNA + CNBC + CNN International + Crime + Investigation + Discovery Channel + DW English + Ent + Fight Sports + FMN + Fox News Channel + France 24 + Galaxy + Galaxy Premium + GTV + HBO + HBO Family + HBO Hits + HBO Signature + HGTV + History + Hits + Hits Movies + IDX Channel + Ie + IMC + Indosiar + INews + Jak TV + Kids TV + Kix + Kompas TV + Life + Lifestyle & Fashion + Lifetime + Metro TV + Miao Mi + MNC News + MNC Sports + MNC Sports 2 + MNC Sports 3 + MNC TV + M Shop Signature + M Shop Super Sale! + Music TV + Muslim TV + National Geographic + National Geographic Wild + NET + NHK World Japan + NHK World Premium + Nickelodeon + Nick Jr + OK TV + One + Quran TV + RCTI + SCTV + SEA Today + Soccer Channel + SPOTV + SPOTV 2 + Tawaf TV + Thrill + TLC + Trans 7 + Trans TV + tvN + tvN Movies + TVOne + TVRI Nasional + Vision Prime + Warner TV + Zee Bioskop + diff --git a/sites/mncvision.id/mncvision.id.config.js b/sites/mncvision.id/mncvision.id.config.js index 012dad43..1b5949f4 100644 --- a/sites/mncvision.id/mncvision.id.config.js +++ b/sites/mncvision.id/mncvision.id.config.js @@ -88,14 +88,14 @@ module.exports = { function parseSeason($item) { const title = parseTitle($item) - const [_, season] = title.match(/ S(\d+)/) || [null, null] + const [, season] = title.match(/ S(\d+)/) || [null, null] return season ? parseInt(season) : null } function parseEpisode($item) { const title = parseTitle($item) - const [_, episode] = title.match(/ Ep (\d+)/) || [null, null] + const [, episode] = title.match(/ Ep (\d+)/) || [null, null] return episode ? parseInt(episode) : null } @@ -158,7 +158,7 @@ function loadLangCookies(channel) { return axios .get(url, { timeout: 30000 }) .then(r => parseCookies(r.headers)) - .catch(err => null) + .catch(error => console.log(error.message)) } async function loadDescription($item, cookies) { @@ -170,7 +170,7 @@ async function loadDescription($item, cookies) { timeout: 30000 }) .then(r => r.data) - .catch(err => null) + .catch(error => console.log(error.message)) if (!content) return null const $page = cheerio.load(content) diff --git a/sites/mncvision.id/mncvision.id.test.js b/sites/mncvision.id/mncvision.id.test.js index f2638a59..81995497 100644 --- a/sites/mncvision.id/mncvision.id.test.js +++ b/sites/mncvision.id/mncvision.id.test.js @@ -1,5 +1,5 @@ -// npm run channels:parse --config=./sites/mncvision.id/mncvision.id.config.js --output=./sites/mncvision.id/mncvision.id.channels.xml -// npx epg-grabber --config=sites/mncvision.id/mncvision.id.config.js --channels=sites/mncvision.id/mncvision.id.channels.xml --output=guide.xml --timeout=30000 --days=2 +// npm run channels:parse -- --config=./sites/mncvision.id/mncvision.id.config.js --output=./sites/mncvision.id/mncvision.id.channels.xml +// npm run grab -- --site=mncvision.id const { parser, url, request } = require('./mncvision.id.config.js') const fs = require('fs') diff --git a/sites/moji.id/moji.id.channels.xml b/sites/moji.id/moji.id.channels.xml index 5157482b..61747315 100644 --- a/sites/moji.id/moji.id.channels.xml +++ b/sites/moji.id/moji.id.channels.xml @@ -1,7 +1,4 @@ - - - Moji - - \ No newline at end of file + + Moji + \ No newline at end of file diff --git a/sites/moji.id/moji.id.config.js b/sites/moji.id/moji.id.config.js index b9c4ffe3..d5656ce1 100644 --- a/sites/moji.id/moji.id.config.js +++ b/sites/moji.id/moji.id.config.js @@ -11,94 +11,112 @@ dayjs.extend(customParseFormat) const currentYear = new Date().getFullYear() module.exports = { - site: 'moji.id', - days: 4, - output: 'moji.id.guide.xml', - channels: 'moji.id.channels.xml', - lang: 'en', - delay: 5000, + site: 'moji.id', + days: 4, + output: 'moji.id.guide.xml', + channels: 'moji.id.channels.xml', + lang: 'en', + delay: 5000, - url: function () { - return 'https://moji.id/schedule' - }, + url: function () { + return 'https://moji.id/schedule' + }, - request: { - method: 'GET', - timeout: 5000, - cache: { ttl: 60 * 60 * 1000 }, - headers: { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36' } - }, - - logo: function (context) { - return context.channel.logo - }, - - parser: function (context) { - const programs = [] - const items = parseItems(context) - - items.forEach(function(item, i) { - programs.push({ - title: item.progTitle, - description: item.progDesc, - start: item.progStart, - stop: item.progStop - }) - }) - - return programs + request: { + method: 'GET', + timeout: 5000, + cache: { ttl: 60 * 60 * 1000 }, + headers: { + 'User-Agent': + 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36' } + }, + + logo: function (context) { + return context.channel.logo + }, + + parser: function (context) { + const programs = [] + const items = parseItems(context) + + items.forEach(item => { + programs.push({ + title: item.progTitle, + description: item.progDesc, + start: item.progStart, + stop: item.progStop + }) + }) + + return programs + } } function parseItems(context) { - const $ = cheerio.load(context.content) - const schDayMonths = $('.date-slider .month').toArray() - const schPrograms = $('.desc-slider .list-slider').toArray() - const monthDate = dayjs(context.date).format('MMM DD') - const items = []; + const $ = cheerio.load(context.content) + const schDayMonths = $('.date-slider .month').toArray() + const schPrograms = $('.desc-slider .list-slider').toArray() + const monthDate = dayjs(context.date).format('MMM DD') + const items = [] - schDayMonths.forEach(function(schDayMonth, i) { - if (monthDate == $(schDayMonth).text()) { - let schDayPrograms = $(schPrograms[i]).find('.accordion').toArray() - schDayPrograms.forEach(function(program, i) { - let itemDay = { - progStart: parseStart(schDayMonth, program), - progStop: parseStop(schDayMonth, program, schDayPrograms[i+1]), - progTitle: parseTitle(program), - progDesc: parseDescription(program) - }; - items.push(itemDay) - }) + schDayMonths.forEach(function (schDayMonth, i) { + if (monthDate == $(schDayMonth).text()) { + let schDayPrograms = $(schPrograms[i]).find('.accordion').toArray() + schDayPrograms.forEach(function (program, i) { + let itemDay = { + progStart: parseStart(schDayMonth, program), + progStop: parseStop(schDayMonth, program, schDayPrograms[i + 1]), + progTitle: parseTitle(program), + progDesc: parseDescription(program) } - }) + items.push(itemDay) + }) + } + }) - return items + return items } function parseTitle(item) { - return cheerio.load(item)('.name-prog').text() + return cheerio.load(item)('.name-prog').text() } function parseDescription(item) { - return cheerio.load(item)('.content-acc span').text() + return cheerio.load(item)('.content-acc span').text() } function parseStart(schDayMonth, item) { - let monthDate = cheerio.load(schDayMonth).text().split(' ') - let startTime = cheerio.load(item)('.pkl').text() - let progStart = dayjs.tz(currentYear + ' ' + monthDate[0] + ' ' + monthDate[1] + ' ' + startTime, 'YYYY MMM DD HH:mm', 'Asia/Jakarta') - return progStart + let monthDate = cheerio.load(schDayMonth).text().split(' ') + let startTime = cheerio.load(item)('.pkl').text() + let progStart = dayjs.tz( + currentYear + ' ' + monthDate[0] + ' ' + monthDate[1] + ' ' + startTime, + 'YYYY MMM DD HH:mm', + 'Asia/Jakarta' + ) + return progStart } function parseStop(schDayMonth, itemCurrent, itemNext) { - let monthDate = cheerio.load(schDayMonth).text().split(' ') - - if (itemNext) { - let stopTime = cheerio.load(itemNext)('.pkl').text() - return dayjs.tz(currentYear + ' ' + monthDate[0] + ' ' + monthDate[1] + ' ' + stopTime, 'YYYY MMM DD HH:mm', 'Asia/Jakarta') - } - else - { - return dayjs.tz(currentYear + ' ' + monthDate[0] + ' ' + (parseInt(monthDate[1]) + 1).toString().padStart(2, '0') + ' 00:00', 'YYYY MMM DD HH:mm', 'Asia/Jakarta') - } -} \ No newline at end of file + let monthDate = cheerio.load(schDayMonth).text().split(' ') + + if (itemNext) { + let stopTime = cheerio.load(itemNext)('.pkl').text() + return dayjs.tz( + currentYear + ' ' + monthDate[0] + ' ' + monthDate[1] + ' ' + stopTime, + 'YYYY MMM DD HH:mm', + 'Asia/Jakarta' + ) + } else { + return dayjs.tz( + currentYear + + ' ' + + monthDate[0] + + ' ' + + (parseInt(monthDate[1]) + 1).toString().padStart(2, '0') + + ' 00:00', + 'YYYY MMM DD HH:mm', + 'Asia/Jakarta' + ) + } +} diff --git a/sites/moji.id/moji.id.test.js b/sites/moji.id/moji.id.test.js index b579aa37..51182732 100644 --- a/sites/moji.id/moji.id.test.js +++ b/sites/moji.id/moji.id.test.js @@ -1,4 +1,4 @@ -// npx epg-grabber --config=sites/moji.id/moji.id.config.js --channels=sites/moji.id/moji.id.channels.xml --output=guide.xml --days=2 +// npm run grab -- --site=moji.id // npx jest moji.id.test.js const { url, parser } = require('./moji.id.config.js') @@ -7,33 +7,32 @@ const utc = require('dayjs/plugin/utc') dayjs.extend(utc) const date = dayjs.utc('2023-08-18', 'YYYY-MM-DD').startOf('d') -const channel = { site_id: '0', xmltv_id: 'moji.id', lang: 'en', logo: 'https://moji.id/site/uploads/logo/62f9387ce00a2-224-x-71.png' } - -const content = `scheduleFriAug 18SatAug 19SunAug 20Jam TayangProgram00:00TRUSTInformasi seputar menjaga vitalitas pria00:302023 AVC CHALLENGE CUP FOR WOMEN (RECORDED)India Vs. Vietnam02:30ONE CHAMPIONSHIP 2021Siaran laga-laga pertandingan tinju gaya bebas internasional. Meyuguhkan pertarungan sengit dari para petarung profeisional kelas dunia.03:30VOLLEYBALL NATION'S LEAGUE 2023 (RECORDED)TURKI vs BRAZIL05:00MOJI SPORTMOJI SPORT06:15LIPUTAN 6 PAGI MOJIKompilasi ragam berita hard news dan soft news baik dari dalam negeri maupun internasional juga info prediksi cuaca di wilayah Indonesia07:00UNGKAPLiputan investigasi seputar berbagai topik dan peristiwa hangat serta kontroversial yang terjadi di Indonesia08:00PIALA KAPOLRI 2023 PUTRI (LIVE)PIALA KAPOLRI 2023 PUTRI (LIVE)10:30SERIES PAGIGANTENG GANTENG SERIGALA12:30DIAM-DIAM SUKADIAM-DIAM SUKA13:30PIALA KAPOLRI 2023 PUTRA (LIVE)PIALA KAPOLRI 2023 PUTRA (LIVE)16:00PIALA KAPOLRI 2023 PUTRI (LIVE)PIALA KAPOLRI 2023 PUTRI (LIVE)18:00PIALA KAPOLRI 2023 PUTRA (LIVE)PIALA KAPOLRI 2023 PUTRA (LIVE)20:00MOJI DRAMA (CHHOTI SARDARNI)CHHOTI SARDARNI21:30SINEMA MALAM (BIDADARI CANTIK DI RUMAH KOST)(BIDADARI CANTIK DI RUMAH KOST23:00TRUSTInformasi seputar menjaga vitalitas pria23:30TRUSTInformasi seputar menjaga vitalitas pria00:00TRUSTInformasi seputar menjaga vitalitas pria00:30UNGKAPLiputan investigasi seputar berbagai topik dan peristiwa hangat serta kontroversial yang terjadi di Indonesia01:00EXCLUSIVE INTERVIEWPETER SCHMEICHEL01:30PREMIER LEAGUE (LIVE)NOTT'M FOREST VS SHEFFIELD UTD03:30VOLLEYBALL NATION'S LEAGUE 2023 FOR WOMEN (RECORDED)GERMANY vs USA05:00MOJI SPORTMOJI SPORT06:15LIPUTAN 6 PAGI MOJIKompilasi ragam berita hard news dan soft news baik dari dalam negeri maupun internasional juga info prediksi cuaca di wilayah Indonesia07:00UNGKAPLiputan investigasi seputar berbagai topik dan peristiwa hangat serta kontroversial yang terjadi di Indonesia08:00TRUSTInformasi Kesehatan08:30TRUSTInformasi Kesehatan09:00MASAK APA CEU?Jenny Hendrawati, seorang koki selebritis, menyajikan beraneka hidangan internasional serta membagikan tips-tips seputar dunia memasak yang mudah diikuti oleh para pemirsa di rumah.09:30BISIK PAGIberbagai berita dan perkembangan terbaru dari sederet kasus yang menimpa sejumlah sosok ternama di Indonesia.10:30GANTENG GANTENG SERIGALAGANTENG GANTENG SERIGALA11:30PIALA KAPOLRI 2023 PUTRI (LIVE)PIALA KAPOLRI 2023 PUTRI (LIVE)14:00PIALA KAPOLRI 2023 PUTRA (LIVE)PIALA KAPOLRI 2023 PUTRA (LIVE)16:00PIALA KAPOLRI 2023 PUTRI (LIVE)PIALA KAPOLRI 2023 PUTRI (LIVE)18:00PIALA KAPOLRI 2023 PUTRA (LIVE)PIALA KAPOLRI 2023 PUTRA (LIVE)20:00MOJI DRAMA (CHHOTI SARDARNI)CHHOTI SARDARNI20:45PREMIER LEAGUE (LIVE)WOLVES VS BRIGHTON00:00TRUSTInformasi seputar menjaga vitalitas pria00:302023 AVC CHALLENGE CUP FOR WOMEN (RECORDED)Chinese Taipei Vs. India02:30ONE CHAMPIONSHIP 2021Siaran laga-laga pertandingan tinju gaya bebas internasional. Meyuguhkan pertarungan sengit dari para petarung profeisional kelas dunia.03:30VOLLEYBALL NATION'S LEAGUE 2023 FOR WOMEN (RECORDED)THAILAND vs JAPAN05:00MOJI SPORTMOJI SPORT06:15LIPUTAN 6 PAGI MOJIKompilasi ragam berita hard news dan soft news baik dari dalam negeri maupun internasional juga info prediksi cuaca di wilayah Indonesia07:00UNGKAPLiputan investigasi seputar berbagai topik dan peristiwa hangat serta kontroversial yang terjadi di Indonesia08:00TRUSTInformasi Kesehatan08:30TRUSTInformasi Kesehatan09:00MASAK APA CEU?Jenny Hendrawati, seorang koki selebritis, menyajikan beraneka hidangan internasional serta membagikan tips-tips seputar dunia memasak yang mudah diikuti oleh para pemirsa di rumah.09:30BISIK PAGIberbagai berita dan perkembangan terbaru dari sederet kasus yang menimpa sejumlah sosok ternama di Indonesia.10:30GANTENG GANTENG SERIGALAGANTENG GANTENG SERIGALA12:30DIAM-DIAM SUKADIAM-DIAM SUKA14:30SINEMA SIANGFTV16:00SEA VLEAGUE (RECORDED)PHILIPPINES VS INDONESIA18:00NETIZEN UPDATEberbagai berita dan perkembangan terbaru dari sederet kasus yang menimpa sejumlah sosok ternama di Indonesia.19:00MOJI DRAMA (CHHOTI SARDARNI)CHHOTI SARDARNI21:00MOJI MOVIE (LONDON LOVE STORY)LONDON LOVE STORY23:00TRUSTInformasi seputar menjaga vitalitas pria23:30TRUSTInformasi seputar menjaga vitalitas pria` - -const context = { - 'content': content, - 'date': date +const channel = { + site_id: '0', + xmltv_id: 'moji.id', + lang: 'en', + logo: 'https://moji.id/site/uploads/logo/62f9387ce00a2-224-x-71.png' } +const content = + 'scheduleFriAug 18SatAug 19SunAug 20Jam TayangProgram00:00TRUSTInformasi seputar menjaga vitalitas pria00:302023 AVC CHALLENGE CUP FOR WOMEN (RECORDED)India Vs. Vietnam02:30ONE CHAMPIONSHIP 2021Siaran laga-laga pertandingan tinju gaya bebas internasional. Meyuguhkan pertarungan sengit dari para petarung profeisional kelas dunia.03:30VOLLEYBALL NATION\'S LEAGUE 2023 (RECORDED)TURKI vs BRAZIL05:00MOJI SPORTMOJI SPORT06:15LIPUTAN 6 PAGI MOJIKompilasi ragam berita hard news dan soft news baik dari dalam negeri maupun internasional juga info prediksi cuaca di wilayah Indonesia07:00UNGKAPLiputan investigasi seputar berbagai topik dan peristiwa hangat serta kontroversial yang terjadi di Indonesia08:00PIALA KAPOLRI 2023 PUTRI (LIVE)PIALA KAPOLRI 2023 PUTRI (LIVE)10:30SERIES PAGIGANTENG GANTENG SERIGALA12:30DIAM-DIAM SUKADIAM-DIAM SUKA13:30PIALA KAPOLRI 2023 PUTRA (LIVE)PIALA KAPOLRI 2023 PUTRA (LIVE)16:00PIALA KAPOLRI 2023 PUTRI (LIVE)PIALA KAPOLRI 2023 PUTRI (LIVE)18:00PIALA KAPOLRI 2023 PUTRA (LIVE)PIALA KAPOLRI 2023 PUTRA (LIVE)20:00MOJI DRAMA (CHHOTI SARDARNI)CHHOTI SARDARNI21:30SINEMA MALAM (BIDADARI CANTIK DI RUMAH KOST)(BIDADARI CANTIK DI RUMAH KOST23:00TRUSTInformasi seputar menjaga vitalitas pria23:30TRUSTInformasi seputar menjaga vitalitas pria00:00TRUSTInformasi seputar menjaga vitalitas pria00:30UNGKAPLiputan investigasi seputar berbagai topik dan peristiwa hangat serta kontroversial yang terjadi di Indonesia01:00EXCLUSIVE INTERVIEWPETER SCHMEICHEL01:30PREMIER LEAGUE (LIVE)NOTT\'M FOREST VS SHEFFIELD UTD03:30VOLLEYBALL NATION\'S LEAGUE 2023 FOR WOMEN (RECORDED)GERMANY vs USA05:00MOJI SPORTMOJI SPORT06:15LIPUTAN 6 PAGI MOJIKompilasi ragam berita hard news dan soft news baik dari dalam negeri maupun internasional juga info prediksi cuaca di wilayah Indonesia07:00UNGKAPLiputan investigasi seputar berbagai topik dan peristiwa hangat serta kontroversial yang terjadi di Indonesia08:00TRUSTInformasi Kesehatan08:30TRUSTInformasi Kesehatan09:00MASAK APA CEU?Jenny Hendrawati, seorang koki selebritis, menyajikan beraneka hidangan internasional serta membagikan tips-tips seputar dunia memasak yang mudah diikuti oleh para pemirsa di rumah.09:30BISIK PAGIberbagai berita dan perkembangan terbaru dari sederet kasus yang menimpa sejumlah sosok ternama di Indonesia.10:30GANTENG GANTENG SERIGALAGANTENG GANTENG SERIGALA11:30PIALA KAPOLRI 2023 PUTRI (LIVE)PIALA KAPOLRI 2023 PUTRI (LIVE)14:00PIALA KAPOLRI 2023 PUTRA (LIVE)PIALA KAPOLRI 2023 PUTRA (LIVE)16:00PIALA KAPOLRI 2023 PUTRI (LIVE)PIALA KAPOLRI 2023 PUTRI (LIVE)18:00PIALA KAPOLRI 2023 PUTRA (LIVE)PIALA KAPOLRI 2023 PUTRA (LIVE)20:00MOJI DRAMA (CHHOTI SARDARNI)CHHOTI SARDARNI20:45PREMIER LEAGUE (LIVE)WOLVES VS BRIGHTON00:00TRUSTInformasi seputar menjaga vitalitas pria00:302023 AVC CHALLENGE CUP FOR WOMEN (RECORDED)Chinese Taipei Vs. India02:30ONE CHAMPIONSHIP 2021Siaran laga-laga pertandingan tinju gaya bebas internasional. Meyuguhkan pertarungan sengit dari para petarung profeisional kelas dunia.03:30VOLLEYBALL NATION\'S LEAGUE 2023 FOR WOMEN (RECORDED)THAILAND vs JAPAN05:00MOJI SPORTMOJI SPORT06:15LIPUTAN 6 PAGI MOJIKompilasi ragam berita hard news dan soft news baik dari dalam negeri maupun internasional juga info prediksi cuaca di wilayah Indonesia07:00UNGKAPLiputan investigasi seputar berbagai topik dan peristiwa hangat serta kontroversial yang terjadi di Indonesia08:00TRUSTInformasi Kesehatan08:30TRUSTInformasi Kesehatan09:00MASAK APA CEU?Jenny Hendrawati, seorang koki selebritis, menyajikan beraneka hidangan internasional serta membagikan tips-tips seputar dunia memasak yang mudah diikuti oleh para pemirsa di rumah.09:30BISIK PAGIberbagai berita dan perkembangan terbaru dari sederet kasus yang menimpa sejumlah sosok ternama di Indonesia.10:30GANTENG GANTENG SERIGALAGANTENG GANTENG SERIGALA12:30DIAM-DIAM SUKADIAM-DIAM SUKA14:30SINEMA SIANGFTV16:00SEA VLEAGUE (RECORDED)PHILIPPINES VS INDONESIA18:00NETIZEN UPDATEberbagai berita dan perkembangan terbaru dari sederet kasus yang menimpa sejumlah sosok ternama di Indonesia.19:00MOJI DRAMA (CHHOTI SARDARNI)CHHOTI SARDARNI21:00MOJI MOVIE (LONDON LOVE STORY)LONDON LOVE STORY23:00TRUSTInformasi seputar menjaga vitalitas pria23:30TRUSTInformasi seputar menjaga vitalitas pria' + it('can generate valid url', () => { - expect(url({ channel, date })).toBe('https://moji.id/schedule') + expect(url({ channel, date })).toBe('https://moji.id/schedule') }) it('can handle empty guide', () => { - const results = parser({ content: '' }) - expect(results).toMatchObject([]) + const results = parser({ content: '' }) + expect(results).toMatchObject([]) }) it('can parse response', () => { - const results = parser({ content: content, date: date }) + const results = parser({ content: content, date: date }) - expect(results[0]).toMatchObject( - { - title: 'TRUST', - start: dayjs.tz('2023 Aug 18 00:00', 'YYYY MMM DD HH:mm', 'Asia/Jakarta'), - stop: dayjs.tz('2023 Aug 18 00:30', 'YYYY MMM DD HH:mm', 'Asia/Jakarta'), - description: 'Informasi seputar menjaga vitalitas pria' - } - ) -}) \ No newline at end of file + expect(results[0]).toMatchObject({ + title: 'TRUST', + start: dayjs.tz('2023 Aug 18 00:00', 'YYYY MMM DD HH:mm', 'Asia/Jakarta'), + stop: dayjs.tz('2023 Aug 18 00:30', 'YYYY MMM DD HH:mm', 'Asia/Jakarta'), + description: 'Informasi seputar menjaga vitalitas pria' + }) +}) diff --git a/sites/mon-programme-tv.be/mon-programme-tv.be.channels.xml b/sites/mon-programme-tv.be/mon-programme-tv.be.channels.xml index 4b688005..3a7d1f6e 100644 --- a/sites/mon-programme-tv.be/mon-programme-tv.be.channels.xml +++ b/sites/mon-programme-tv.be/mon-programme-tv.be.channels.xml @@ -1,116 +1,114 @@ - - - - - - - - - - - - 13EME RUE - AB3 - ABXPLORE - ACTION - ALTICE STUDIO - ANIMAUX - ARTE - AUTOMOTO - BBC ENTERTAINMENT - BE 1 - BE CINE - BE SERIES - BFM TV - BOING - BOOMERANG - C8 - CANAL J - CANVAS - CARTOON NETWORK - CHASSE & PECHE - CINE + CLASSIC BE - CINE + FRISSON BE - CINE + PREMIER BE - CLUB RTL - CNEWS - COMEDIE + - CSTAR - DISCOVERY CHANNEL - DISNEY CHANNEL - DISNEY JUNIOR - EEN - E! ENTERTAINMENT - EQUIDIA - EUROSPORT - EUROSPORT NL - EUROSPORT 2 - FRANCE 2 - FRANCE 24 - FRANCE 3 - FRANCE 4 - FRANCE 5 - GAME ONE - GULLI - HISTOIRE - KETNET - KTO - LA TROIS - LA UNE (RTBF) - LCI - LN24 - M6 - M6 MUSIC - MANGAS - MELODY - MEZZO - MTV - NATIONAL GEOGRAPHIC CHANNEL - NATIONAL GEOGRAPHIC WILD - NAUTICAL CHANNEL - NICKELODEON - NJAM ! - NPO1 - NPO2 - NPO3 - PARAMOUNT CHANNEL - PIWI + - PLANETE + - PLANETE+ AE - PLANETE+ CI - VIER - VIJF - PLAYBOY TV - PLUG RTL - RAI 1 - RMC SPORT 2 - RTL TVI - RTS UN - RTS DEUX - SCIENCE & VIE TV - STUDIO100tv - SYFY - TCM CINEMA - TELETOON + - TF1 - TF1 Séries Films - TIJI - TIPIK - TMC - TOUTE L'HISTOIRE - TRACE URBAN - TV5 MONDE - TV BREIZH - USHUAIA TV - VOO Sport World 1 - VOO Sport World 2 - VOO Sport World 3 - VTM - VTM2 - VTM3 - VTM4 - VTM KIDS - Warner TV - - + + + + + + + + + + + 13EME RUE + AB3 + ABXPLORE + ACTION + ALTICE STUDIO + ANIMAUX + ARTE + AUTOMOTO + BBC ENTERTAINMENT + BE 1 + BE CINE + BE SERIES + BFM TV + BOING + BOOMERANG + C8 + CANAL J + CANVAS + CARTOON NETWORK + CHASSE & PECHE + CINE + CLASSIC BE + CINE + FRISSON BE + CINE + PREMIER BE + CLUB RTL + CNEWS + COMEDIE + + CSTAR + DISCOVERY CHANNEL + DISNEY CHANNEL + DISNEY JUNIOR + EEN + E! ENTERTAINMENT + EQUIDIA + EUROSPORT + EUROSPORT NL + EUROSPORT 2 + FRANCE 2 + FRANCE 24 + FRANCE 3 + FRANCE 4 + FRANCE 5 + GAME ONE + GULLI + HISTOIRE + KETNET + KTO + LA TROIS + LA UNE (RTBF) + LCI + LN24 + M6 + M6 MUSIC + MANGAS + MELODY + MEZZO + MTV + NATIONAL GEOGRAPHIC CHANNEL + NATIONAL GEOGRAPHIC WILD + NAUTICAL CHANNEL + NICKELODEON + NJAM ! + NPO1 + NPO2 + NPO3 + PARAMOUNT CHANNEL + PIWI + + PLANETE + + PLANETE+ AE + PLANETE+ CI + VIER + VIJF + PLAYBOY TV + PLUG RTL + RAI 1 + RMC SPORT 2 + RTL TVI + RTS UN + RTS DEUX + SCIENCE & VIE TV + STUDIO100tv + SYFY + TCM CINEMA + TELETOON + + TF1 + TF1 Séries Films + TIJI + TIPIK + TMC + TOUTE L'HISTOIRE + TRACE URBAN + TV5 MONDE + TV BREIZH + USHUAIA TV + VOO Sport World 1 + VOO Sport World 2 + VOO Sport World 3 + VTM + VTM2 + VTM3 + VTM4 + VTM KIDS + Warner TV + diff --git a/sites/mon-programme-tv.be/mon-programme-tv.be.config.js b/sites/mon-programme-tv.be/mon-programme-tv.be.config.js index f1e7d856..72c8f6b3 100644 --- a/sites/mon-programme-tv.be/mon-programme-tv.be.config.js +++ b/sites/mon-programme-tv.be/mon-programme-tv.be.config.js @@ -44,7 +44,7 @@ module.exports = { }, async channels() { const data = await axios - .get(`https://www.mon-programme-tv.be/chaine/toutes-les-chaines-television.html`) + .get('https://www.mon-programme-tv.be/chaine/toutes-les-chaines-television.html') .then(r => r.data) .catch(console.log) const $ = cheerio.load(data) diff --git a/sites/mon-programme-tv.be/mon-programme-tv.be.test.js b/sites/mon-programme-tv.be/mon-programme-tv.be.test.js index b4a07f3d..c9f56deb 100644 --- a/sites/mon-programme-tv.be/mon-programme-tv.be.test.js +++ b/sites/mon-programme-tv.be/mon-programme-tv.be.test.js @@ -1,5 +1,5 @@ // npm run channels:parse -- --config=./sites/mon-programme-tv.be/mon-programme-tv.be.config.js --output=./sites/mon-programme-tv.be/mon-programme-tv.be.channels.xml -// npx epg-grabber --config=sites/mon-programme-tv.be/mon-programme-tv.be.config.js --channels=sites/mon-programme-tv.be/mon-programme-tv.be.channels.xml --output=guide.xml --days=2 +// npm run grab -- --site=mon-programme-tv.be const { parser, url } = require('./mon-programme-tv.be.config.js') const fs = require('fs') diff --git a/sites/movistarplus.es/movistarplus.es.channels.xml b/sites/movistarplus.es/movistarplus.es.channels.xml index dddfa6f6..d3716a77 100644 --- a/sites/movistarplus.es/movistarplus.es.channels.xml +++ b/sites/movistarplus.es/movistarplus.es.channels.xml @@ -1,187 +1,185 @@ - - - #0 - 3/24 - 7 Televisión Región de Murcia - 8 TV Cádiz - Aljazeera English - Alquiler 1 - Alquiler HD - AMC España - Antena 3 - À Punt - Aragón TV - Aragón TV Internacional - Atreseries - AXN España - AXN White España - Baby TV Latin America - Barça TV - BBC World News Europe - Be Mad - betevé - Blaze España - Bloomberg TV Europe - Boing España - Bom Cine - Calle 13 - Canal 24 Horas - Canal Cocina - Canal Extremadura - Canal Extremadura Satélite - Canal Hollywood España - Canal Panda España - Canal Sur - Canal Sur Andalucía - Caza y Pesca - CGTN Español - Clan TVE - TV Castilla-La Mancha - CNBC Europe - CNC World English - CNN International Europe - Comedy Central España - Cosmopolitan TV España - Cuatro - Cubavisión Internacional - Dark - DAZN 1 España - DAZN 2 España - DAZN 3 España - DAZN 4 España - DAZN F1 - Decasa - Discovery Channel Iberia - Disney Channel España - Disney Junior España - Divinity - DKiss - DMAX España - DreamWorks TV - EITB Basque - El33/SX3 - El Garage TV - El Toro TV - Energy - Esport3 - ETB 1 - ETB 2 - ETB 3 - EuroNews Español - Eurosport 1 - Eurosport 2 - EWTN España - Latinoamérica - Factoria de Ficción - Fox News Channel - Fox España - France 24 Español - Canal Fútbol Replay - Galicia TV Europa - Gol - Historia España - Horse TV - IB3 Global - Iberalia TV - La 1 - La 2 - La 7 - La Ocho TV - LaOtra - La Resistencia - Las Estrellas Europa - La Sexta - Movistar Liga de Campeones 10 - Movistar Liga de Campeones 11 - Movistar Liga de Campeones 12 - Movistar Liga de Campeones 9 - Mega - Mezzo - Mezzo Live HD - Movistar Acción - Movistar Cine Español - Movistar Clásicos - Movistar Comedia - Movistar Deportes - Movistar Deportes 1 - Movistar Deportes 2 - Movistar Deportes 3 - Movistar Deportes 4 - Movistar Deportes 5 - Movistar Deportes 6 - Movistar Deportes 7 - Movistar Drama - Movistar Estrenos - Movistar Estrenos 2 - Movistar Fest - Movistar Golf - Movistar LaLiga - Movistar LaLiga 1 - Movistar LaLiga 10 - Movistar LaLiga 2 - Movistar LaLiga 3 - Movistar LaLiga 4 - Movistar LaLiga 5 - Movistar LaLiga 6 - Movistar LaLiga 7 - Movistar LaLiga 8 - Movistar LaLiga 9 - Movistar LaLiga UHD - Movistar Liga de Campeones - Movistar Liga de Campeones 1 - Movistar Liga de Campeones 2 - Movistar Liga de Campeones 3 - Movistar Liga de Campeones 4 - Movistar Liga de Campeones 5 - Movistar Liga de Campeones 6 - Movistar Liga de Campeones 7 - Movistar Liga de Campeones 8 - Movistar Liga de Campeones UHD - Movistar Series - Movistar Series 2 - MTV 00s - MTV España - National Geographic España - National Geographic Wild España - Nautical Channel - Negocios TV - Neox - NHK World Japan - Nickelodeon Iberia - Nick Jr España - Nova - Odisea - Movistar Los Oscar - Paramount Channel España - Playboy TV Iberia - RCN Nuestra Tele Internacional - Real Madrid TV Español - Sky News International - Sol Música - Somos - Stingray Classica - Sundance TV España - Syfy España - TCM España - Telecinco - Teledeporte - Telefe Internacional - Telemadrid - Telesur - Ten - TNT España - Toros TV - TPA 7 - Trece TV - TV3 - TV3CAT - TV5Monde Europe - TV Canaria - TV Chile - tvG2 - TVG Europa - U-Beat - #Vamos - Xtrm - - + + #0 + 3/24 + 7 Televisión Región de Murcia + 8 TV Cádiz + Aljazeera English + Alquiler 1 + Alquiler HD + AMC España + Antena 3 + À Punt + Aragón TV + Aragón TV Internacional + Atreseries + AXN España + AXN White España + Baby TV Latin America + Barça TV + BBC World News Europe + Be Mad + betevé + Blaze España + Bloomberg TV Europe + Boing España + Bom Cine + Calle 13 + Canal 24 Horas + Canal Cocina + Canal Extremadura + Canal Extremadura Satélite + Canal Hollywood España + Canal Panda España + Canal Sur + Canal Sur Andalucía + Caza y Pesca + CGTN Español + Clan TVE + TV Castilla-La Mancha + CNBC Europe + CNC World English + CNN International Europe + Comedy Central España + Cosmopolitan TV España + Cuatro + Cubavisión Internacional + Dark + DAZN 1 España + DAZN 2 España + DAZN 3 España + DAZN 4 España + DAZN F1 + Decasa + Discovery Channel Iberia + Disney Channel España + Disney Junior España + Divinity + DKiss + DMAX España + DreamWorks TV + EITB Basque + El33/SX3 + El Garage TV + El Toro TV + Energy + Esport3 + ETB 1 + ETB 2 + ETB 3 + EuroNews Español + Eurosport 1 + Eurosport 2 + EWTN España - Latinoamérica + Factoria de Ficción + Fox News Channel + Fox España + France 24 Español + Canal Fútbol Replay + Galicia TV Europa + Gol + Historia España + Horse TV + IB3 Global + Iberalia TV + La 1 + La 2 + La 7 + La Ocho TV + LaOtra + La Resistencia + Las Estrellas Europa + La Sexta + Movistar Liga de Campeones 10 + Movistar Liga de Campeones 11 + Movistar Liga de Campeones 12 + Movistar Liga de Campeones 9 + Mega + Mezzo + Mezzo Live HD + Movistar Acción + Movistar Cine Español + Movistar Clásicos + Movistar Comedia + Movistar Deportes + Movistar Deportes 1 + Movistar Deportes 2 + Movistar Deportes 3 + Movistar Deportes 4 + Movistar Deportes 5 + Movistar Deportes 6 + Movistar Deportes 7 + Movistar Drama + Movistar Estrenos + Movistar Estrenos 2 + Movistar Fest + Movistar Golf + Movistar LaLiga + Movistar LaLiga 1 + Movistar LaLiga 10 + Movistar LaLiga 2 + Movistar LaLiga 3 + Movistar LaLiga 4 + Movistar LaLiga 5 + Movistar LaLiga 6 + Movistar LaLiga 7 + Movistar LaLiga 8 + Movistar LaLiga 9 + Movistar LaLiga UHD + Movistar Liga de Campeones + Movistar Liga de Campeones 1 + Movistar Liga de Campeones 2 + Movistar Liga de Campeones 3 + Movistar Liga de Campeones 4 + Movistar Liga de Campeones 5 + Movistar Liga de Campeones 6 + Movistar Liga de Campeones 7 + Movistar Liga de Campeones 8 + Movistar Liga de Campeones UHD + Movistar Series + Movistar Series 2 + MTV 00s + MTV España + National Geographic España + National Geographic Wild España + Nautical Channel + Negocios TV + Neox + NHK World Japan + Nickelodeon Iberia + Nick Jr España + Nova + Odisea + Movistar Los Oscar + Paramount Channel España + Playboy TV Iberia + RCN Nuestra Tele Internacional + Real Madrid TV Español + Sky News International + Sol Música + Somos + Stingray Classica + Sundance TV España + Syfy España + TCM España + Telecinco + Teledeporte + Telefe Internacional + Telemadrid + Telesur + Ten + TNT España + Toros TV + TPA 7 + Trece TV + TV3 + TV3CAT + TV5Monde Europe + TV Canaria + TV Chile + tvG2 + TVG Europa + U-Beat + #Vamos + Xtrm + diff --git a/sites/movistarplus.es/movistarplus.es.config.js b/sites/movistarplus.es/movistarplus.es.config.js index fa341c73..d0c1f9ac 100644 --- a/sites/movistarplus.es/movistarplus.es.config.js +++ b/sites/movistarplus.es/movistarplus.es.config.js @@ -15,12 +15,16 @@ module.exports = { let startTime = DateTime.fromFormat( `${guideDate.format('YYYY-MM-DD')} ${item.HORA_INICIO}`, 'yyyy-MM-dd HH:mm', - { zone: 'Europe/Madrid' } + { + zone: 'Europe/Madrid' + } ).toUTC() let stopTime = DateTime.fromFormat( `${guideDate.format('YYYY-MM-DD')} ${item.HORA_FIN}`, 'yyyy-MM-dd HH:mm', - { zone: 'Europe/Madrid' } + { + zone: 'Europe/Madrid' + } ).toUTC() if (stopTime < startTime) { guideDate = guideDate.add(1, 'd') diff --git a/sites/movistarplus.es/movistarplus.es.test.js b/sites/movistarplus.es/movistarplus.es.test.js index 5d6915f8..88f665b2 100644 --- a/sites/movistarplus.es/movistarplus.es.test.js +++ b/sites/movistarplus.es/movistarplus.es.test.js @@ -1,6 +1,6 @@ -// npx epg-grabber --config=sites/movistarplus.es/movistarplus.es.config.js --channels=sites/movistarplus.es/movistarplus.es.channels.xml --output=guide.xml +// npm run grab -- --site=movistarplus.es -const { parser, url, request } = require('./movistarplus.es.config.js') +const { parser, url } = require('./movistarplus.es.config.js') const dayjs = require('dayjs') const utc = require('dayjs/plugin/utc') const customParseFormat = require('dayjs/plugin/customParseFormat') @@ -18,7 +18,8 @@ it('can generate valid url', () => { }) it('can parse response', () => { - const content = `{"success":"true","msg":"","data":{"TVE-CODE":{"DATOS_CADENA":{"CODIGO":"TVE","MARCA":"TVE","NOMBRE":"LA 1","URL":"https://www.movistarplus.es/canal?nombre=LA%2B1&id=TVE","DIAL_PRINCIPAL":["01"],"DIALES":[1],"UID":null,"CASID":null,"SERVICEUID":null,"SERVICEUID2":null,"SERVICEID":null,"ESVIRTUAL":null,"ESSATELITE":null,"UPSELLING":null,"puntoReproduccion":null},"PROGRAMAS":[{"DIRECTO":false,"TEMPORADA":"","TITULO":"Telediario Matinal","GENERO":"Información","CODIGO_GENERO":"IF","DURACION":150,"DURACION_VISUAL":150,"HORA_INICIO":"06:00","HORA_FIN":"08:30","ELEMENTO":"1709045","EVENTO":"99422566","ShowId":null,"x1":0,"x2":0,"Disponible":null,"URL":"https://www.movistarplus.es/ficha/telediario-matinal?tipo=R&id=99422566"},{"DIRECTO":false,"TEMPORADA":"","TITULO":"Las Claves del Siglo XXI: Episodio 8","GENERO":"Información","CODIGO_GENERO":"IF","DURACION":135,"DURACION_VISUAL":135,"HORA_INICIO":"22:15","HORA_FIN":"00:30","ELEMENTO":"2051356","EVENTO":"99422634","ShowId":null,"x1":0,"x2":0,"Disponible":null,"URL":"https://www.movistarplus.es/ficha/las-claves-del-siglo-xxi-t1/episodio-8?tipo=R&id=99422634"},{"DIRECTO":false,"TEMPORADA":"","TITULO":"Noticias 24H","GENERO":"Información","CODIGO_GENERO":"IF","DURACION":170,"DURACION_VISUAL":170,"HORA_INICIO":"03:10","HORA_FIN":"06:00","ELEMENTO":"518403","EVENTO":"99422646","ShowId":null,"x1":0,"x2":0,"Disponible":null,"URL":"https://www.movistarplus.es/ficha/noticias-24h?tipo=R&id=99422646"}]}}}` + const content = + '{"success":"true","msg":"","data":{"TVE-CODE":{"DATOS_CADENA":{"CODIGO":"TVE","MARCA":"TVE","NOMBRE":"LA 1","URL":"https://www.movistarplus.es/canal?nombre=LA%2B1&id=TVE","DIAL_PRINCIPAL":["01"],"DIALES":[1],"UID":null,"CASID":null,"SERVICEUID":null,"SERVICEUID2":null,"SERVICEID":null,"ESVIRTUAL":null,"ESSATELITE":null,"UPSELLING":null,"puntoReproduccion":null},"PROGRAMAS":[{"DIRECTO":false,"TEMPORADA":"","TITULO":"Telediario Matinal","GENERO":"Información","CODIGO_GENERO":"IF","DURACION":150,"DURACION_VISUAL":150,"HORA_INICIO":"06:00","HORA_FIN":"08:30","ELEMENTO":"1709045","EVENTO":"99422566","ShowId":null,"x1":0,"x2":0,"Disponible":null,"URL":"https://www.movistarplus.es/ficha/telediario-matinal?tipo=R&id=99422566"},{"DIRECTO":false,"TEMPORADA":"","TITULO":"Las Claves del Siglo XXI: Episodio 8","GENERO":"Información","CODIGO_GENERO":"IF","DURACION":135,"DURACION_VISUAL":135,"HORA_INICIO":"22:15","HORA_FIN":"00:30","ELEMENTO":"2051356","EVENTO":"99422634","ShowId":null,"x1":0,"x2":0,"Disponible":null,"URL":"https://www.movistarplus.es/ficha/las-claves-del-siglo-xxi-t1/episodio-8?tipo=R&id=99422634"},{"DIRECTO":false,"TEMPORADA":"","TITULO":"Noticias 24H","GENERO":"Información","CODIGO_GENERO":"IF","DURACION":170,"DURACION_VISUAL":170,"HORA_INICIO":"03:10","HORA_FIN":"06:00","ELEMENTO":"518403","EVENTO":"99422646","ShowId":null,"x1":0,"x2":0,"Disponible":null,"URL":"https://www.movistarplus.es/ficha/noticias-24h?tipo=R&id=99422646"}]}}}' const result = parser({ content, channel, date }).map(p => { p.start = p.start.toJSON() p.stop = p.stop.toJSON() @@ -29,19 +30,19 @@ it('can parse response', () => { start: '2022-03-11T05:00:00.000Z', stop: '2022-03-11T07:30:00.000Z', category: 'Información', - title: `Telediario Matinal` + title: 'Telediario Matinal' }, { start: '2022-03-11T21:15:00.000Z', stop: '2022-03-11T23:30:00.000Z', category: 'Información', - title: `Las Claves del Siglo XXI: Episodio 8` + title: 'Las Claves del Siglo XXI: Episodio 8' }, { start: '2022-03-12T02:10:00.000Z', stop: '2022-03-12T05:00:00.000Z', category: 'Información', - title: `Noticias 24H` + title: 'Noticias 24H' } ]) }) @@ -50,7 +51,7 @@ it('can handle empty guide', () => { const result = parser({ date, channel, - content: `{"success":"true","msg":"","data":{}}` + content: '{"success":"true","msg":"","data":{}}' }) expect(result).toMatchObject([]) }) diff --git a/sites/mtel.ba/mtel.ba.channels.xml b/sites/mtel.ba/mtel.ba.channels.xml index 64c35954..d7dfbf91 100644 --- a/sites/mtel.ba/mtel.ba.channels.xml +++ b/sites/mtel.ba/mtel.ba.channels.xml @@ -1,173 +1,171 @@ - - - - - 101 TV - 24 Kitchen - Agro TV - Aljazeera Balkans - Amari TV - Animal Planet - Arena Esport - Arena Fight - Arena Sport 1 - Arena Sport 1x2 - Arena Sport 2 - Arena Sport 3 - Arena Sport 4 - B92 - Balkan Trip - BHT 1 - BN Music - BN - Boomerang Central & Eastern Europe - Cafe & Club - CBS Reality Europe - CineStar TV 1 Srbija - CineStar TV Action Srbija - CineStar TV Comedy - CineStar TV Fantasy - Decija TV - Dexy TV - Discovery Channel Srbija - Discovery Science - Dizi - DM Sat - Dox TV - EG Melody - EX YU Melody - FashionTV Europe - FilmBox Arthouse Worldwide - FilmBox Extra HD Adria - FilmBox Stars Adria - Film Klub - Folk Melody - Food Network EMEA - Fox Srbija - France 24 Français - Happy Reality 1 - Happy Reality 2 - Hayatovci - Hayat Plus - Hits Melody - HRT 1 - HRT 2 - Hype TV - Investigation Discovery Europe - Jeka - K3 - K CN 3 - Kitchen TV - Klasik TV - Kurir TV - Kuvo TV - Melos TV - Muzzik - National Geographic - National Geographic Wild - Nicktoons Adria - OTV Valentino - Pink Action - Pink BH - Pink Classic - Pink Comedy - Pink Crime & Mystery - Pink Extra - Pink Family - Pink Film - Pink Horror - Pink Koncert - Pink Kuvar - Pink Movies - Pink Pedia - Pink Reality - Pink Sci-Fi & Fantasy - Pink Srbija - Pink Serije - Pink Show - Pink Soap - Pink Style - Pink Thriller - Pink Western - Pink World - Pink Zabava - Pop Melody - Prva Files - Prva Kick - Prva Life - Prva Max - Prva Srpska TV - Prva World - Red TV - Rock & Roll - RTL Hrvatska - RTL KETTŐ - RTL Kockica - RTL Living Hrvatska - RTR Planeta - RTRS TV - RTS 2 - RTS Klasika - RTS Kolo - RTS Nauka - RTS Poletarac - RTS Svet - RTV 2 - Rossiya 24 - Sat. 1 Deutschland - SOS Kanal Plus - Super Sat - Superstar - Tanjug TV - Tb1 - TLC Balkan - Toxic Folk - Toxic TV - Travel Channel Europe - Tropik TV - TV Arena - TV Niksic - TV One - TV Partizan - TV Simić - Viasat Explore East - Viasat History - Viasat Nature East - World Wild Muzzik - Zdravlje TV - Zvezda TV - 360 Tune Box - Adult Channel 1 - Adult Channel 2 - Adult Channel 3 - Adult Channel 4 - Adult Channel 5 - Adult Channel 6 - Adult Channel 7 - Babes TV - Baby TV Europe - Bang U - CGTN - CNN International Europe - DocuBox HD - English Club TV - Erotic - Erotic 2 - Erotic 3 - Erotic 4 - Erotic 7 - Erotic 8 - Erox HD - Eroxxx HD - Extreme Sports Channel - JimJam Europe - LFC TV - MTV 00s - MTV 80s - MTV Global - MTV Hits Europe - Reality Kings TV - RT News - - \ No newline at end of file + + + + 101 TV + 24 Kitchen + Agro TV + Aljazeera Balkans + Amari TV + Animal Planet + Arena Esport + Arena Fight + Arena Sport 1 + Arena Sport 1x2 + Arena Sport 2 + Arena Sport 3 + Arena Sport 4 + B92 + Balkan Trip + BHT 1 + BN Music + BN + Boomerang Central & Eastern Europe + Cafe & Club + CBS Reality Europe + CineStar TV 1 Srbija + CineStar TV Action Srbija + CineStar TV Comedy + CineStar TV Fantasy + Decija TV + Dexy TV + Discovery Channel Srbija + Discovery Science + Dizi + DM Sat + Dox TV + EG Melody + EX YU Melody + FashionTV Europe + FilmBox Arthouse Worldwide + FilmBox Extra HD Adria + FilmBox Stars Adria + Film Klub + Folk Melody + Food Network EMEA + Fox Srbija + France 24 Français + Happy Reality 1 + Happy Reality 2 + Hayatovci + Hayat Plus + Hits Melody + HRT 1 + HRT 2 + Hype TV + Investigation Discovery Europe + Jeka + K3 + K CN 3 + Kitchen TV + Klasik TV + Kurir TV + Kuvo TV + Melos TV + Muzzik + National Geographic + National Geographic Wild + Nicktoons Adria + OTV Valentino + Pink Action + Pink BH + Pink Classic + Pink Comedy + Pink Crime & Mystery + Pink Extra + Pink Family + Pink Film + Pink Horror + Pink Koncert + Pink Kuvar + Pink Movies + Pink Pedia + Pink Reality + Pink Sci-Fi & Fantasy + Pink Srbija + Pink Serije + Pink Show + Pink Soap + Pink Style + Pink Thriller + Pink Western + Pink World + Pink Zabava + Pop Melody + Prva Files + Prva Kick + Prva Life + Prva Max + Prva Srpska TV + Prva World + Red TV + Rock & Roll + RTL Hrvatska + RTL KETTŐ + RTL Kockica + RTL Living Hrvatska + RTR Planeta + RTRS TV + RTS 2 + RTS Klasika + RTS Kolo + RTS Nauka + RTS Poletarac + RTS Svet + RTV 2 + Rossiya 24 + Sat. 1 Deutschland + SOS Kanal Plus + Super Sat + Superstar + Tanjug TV + Tb1 + TLC Balkan + Toxic Folk + Toxic TV + Travel Channel Europe + Tropik TV + TV Arena + TV Niksic + TV One + TV Partizan + TV Simić + Viasat Explore East + Viasat History + Viasat Nature East + World Wild Muzzik + Zdravlje TV + Zvezda TV + 360 Tune Box + Adult Channel 1 + Adult Channel 2 + Adult Channel 3 + Adult Channel 4 + Adult Channel 5 + Adult Channel 6 + Adult Channel 7 + Babes TV + Baby TV Europe + Bang U + CGTN + CNN International Europe + DocuBox HD + English Club TV + Erotic + Erotic 2 + Erotic 3 + Erotic 4 + Erotic 7 + Erotic 8 + Erox HD + Eroxxx HD + Extreme Sports Channel + JimJam Europe + LFC TV + MTV 00s + MTV 80s + MTV Global + MTV Hits Europe + Reality Kings TV + RT News + \ No newline at end of file diff --git a/sites/mtel.ba/mtel.ba.config.js b/sites/mtel.ba/mtel.ba.config.js index 7c50b8a2..33f13ab4 100644 --- a/sites/mtel.ba/mtel.ba.config.js +++ b/sites/mtel.ba/mtel.ba.config.js @@ -44,7 +44,7 @@ function parseStop(item) { } function parseContent(content, channel) { - const [_, channelId] = channel.site_id.split('#') + const [, channelId] = channel.site_id.split('#') const data = JSON.parse(content) if (!data || !Array.isArray(data.channels)) return null diff --git a/sites/mtel.ba/mtel.ba.test.js b/sites/mtel.ba/mtel.ba.test.js index f6f7cf74..765979ee 100644 --- a/sites/mtel.ba/mtel.ba.test.js +++ b/sites/mtel.ba/mtel.ba.test.js @@ -1,4 +1,4 @@ -// npx epg-grabber --config=sites/mtel.ba/mtel.ba.config.js --channels=sites/mtel.ba/mtel.ba.channels.xml --output=guide.xml --days=2 +// npm run grab -- --site=mtel.ba const { parser, url, request } = require('./mtel.ba.config.js') const dayjs = require('dayjs') @@ -12,7 +12,8 @@ const channel = { site_id: '001#11', xmltv_id: 'RTRSTV.ba' } -const content = `{"page":0,"total_pages":1,"date":"2021-11-10","channels":[{"id":"11","name":"RTRS","description":null,"link":null,"image":"https:\/\/mtel.ba\/oec\/images\/tv_channels\/c3556aa629b00325aaaea622abfb1070.png","position":"001","items":[{"id_channel":"11","title":"\u0160uma","description":"Krajem decembra 1947. godine jugoslovenski predsjednik Josip Broz Tito prvi put je posjetio Rumuniju. Da bi u\u010dvrstili novo socijalisti\u010dko prijateljstvo, rumunski zvani\u010dnici su poklonili Titu sliku velikog rumunskog umjetnika Jona Andreskua pod nazivom \u0160uma. Mnogo godina kasnije ta slika je umje\u0161ana u napetu \u0161pijunsku pri\u010du i otkriva tajnu koja \u0107e uzdrmati temelje i Jugoslavije i Rumunije. Film je svjedok kompleksnosti i raznovrsnosti glasova koji \u010dine ono \u0161to zovemo stvarno\u0161\u0107u.","start":"00:00:00","duration":"46.00","full_start":"2021-11-09 23:29:00","full_end":"2021-11-10 00:46:00","image":"https:\/\/mtel.ba\/oec\/images\/epg\/60881491.jpg","category":"Televizijski film","subcategory":"Dokumentarna drama"},{"id_channel":"11","title":"Nema informacija o programu","description":"","start":"07:32:00","duration":"988.00","full_start":"2021-11-10 07:32:00","full_end":"2021-11-10 24:00:00","image":"","category":"","subcategory":""}]}]}` +const content = + '{"page":0,"total_pages":1,"date":"2021-11-10","channels":[{"id":"11","name":"RTRS","description":null,"link":null,"image":"https://mtel.ba/oec/images/tv_channels/c3556aa629b00325aaaea622abfb1070.png","position":"001","items":[{"id_channel":"11","title":"\u0160uma","description":"Krajem decembra 1947. godine jugoslovenski predsjednik Josip Broz Tito prvi put je posjetio Rumuniju. Da bi u\u010dvrstili novo socijalisti\u010dko prijateljstvo, rumunski zvani\u010dnici su poklonili Titu sliku velikog rumunskog umjetnika Jona Andreskua pod nazivom \u0160uma. Mnogo godina kasnije ta slika je umje\u0161ana u napetu \u0161pijunsku pri\u010du i otkriva tajnu koja \u0107e uzdrmati temelje i Jugoslavije i Rumunije. Film je svjedok kompleksnosti i raznovrsnosti glasova koji \u010dine ono \u0161to zovemo stvarno\u0161\u0107u.","start":"00:00:00","duration":"46.00","full_start":"2021-11-09 23:29:00","full_end":"2021-11-10 00:46:00","image":"https://mtel.ba/oec/images/epg/60881491.jpg","category":"Televizijski film","subcategory":"Dokumentarna drama"},{"id_channel":"11","title":"Nema informacija o programu","description":"","start":"07:32:00","duration":"988.00","full_start":"2021-11-10 07:32:00","full_end":"2021-11-10 24:00:00","image":"","category":"","subcategory":""}]}]}' it('can generate valid url', () => { expect(url({ channel, date })).toBe( @@ -34,7 +35,8 @@ it('can parse response', () => { stop: '2021-11-09T23:46:00.000Z', title: 'Šuma', icon: 'https://mtel.ba/oec/images/epg/60881491.jpg', - description: `Krajem decembra 1947. godine jugoslovenski predsjednik Josip Broz Tito prvi put je posjetio Rumuniju. Da bi učvrstili novo socijalističko prijateljstvo, rumunski zvaničnici su poklonili Titu sliku velikog rumunskog umjetnika Jona Andreskua pod nazivom Šuma. Mnogo godina kasnije ta slika je umješana u napetu špijunsku priču i otkriva tajnu koja će uzdrmati temelje i Jugoslavije i Rumunije. Film je svjedok kompleksnosti i raznovrsnosti glasova koji čine ono što zovemo stvarnošću.`, + description: + 'Krajem decembra 1947. godine jugoslovenski predsjednik Josip Broz Tito prvi put je posjetio Rumuniju. Da bi učvrstili novo socijalističko prijateljstvo, rumunski zvaničnici su poklonili Titu sliku velikog rumunskog umjetnika Jona Andreskua pod nazivom Šuma. Mnogo godina kasnije ta slika je umješana u napetu špijunsku priču i otkriva tajnu koja će uzdrmati temelje i Jugoslavije i Rumunije. Film je svjedok kompleksnosti i raznovrsnosti glasova koji čine ono što zovemo stvarnošću.', category: 'Televizijski film' } ]) @@ -44,7 +46,8 @@ it('can handle empty guide', () => { const result = parser({ date, channel, - content: `{"message":"Tra\u017eeni termin nije prona\u0111en.\u003Cbr\u003E\u003Cbr\u003EProverite da li ste upisali pravilno ili poku\u0161ajte sa nekim drugim terminom."}` + content: + '{"message":"Tra\u017eeni termin nije prona\u0111en.\u003Cbr\u003E\u003Cbr\u003EProverite da li ste upisali pravilno ili poku\u0161ajte sa nekim drugim terminom."}' }) expect(result).toMatchObject([]) }) diff --git a/sites/mts.rs/mts.rs.channels.xml b/sites/mts.rs/mts.rs.channels.xml index bf89733c..4545b823 100644 --- a/sites/mts.rs/mts.rs.channels.xml +++ b/sites/mts.rs/mts.rs.channels.xml @@ -1,353 +1,351 @@ - - - - - 101 TV - 24 Kitchen - 360 Tune Box - Agro TV - Aljazeera Balkans - Alternativna TV - Animal Planet - Arena Esport - Arena Fight - Arena Premium 1 - Arena Sport 1 - Arena Sport 1x2 - Arena Premium 2 - Arena Sport 2 - Arena Premium 3 - Arena Sport 3 - Arena Sport 4 - Arena Sport 5 - Arena Sport 6 - Arena Sport 7 - Arena Sport 8 - AXN - AXN Spin - B92 - Baby TV Europe - Balkan Trip - Balkan TV - BBC Earth - Bloomberg TV - BN Music - BN - Boomerang - Bravo Music - B TV - Cafe & Club - CBS Reality - CCTV 4 Europe - CGTN - CineStar TV 1 Srbija - CineStar TV Action Srbija - CineStar TV Comedy - CineStar TV Fantasy - Club MTV - CNBC Europe - CNN International Europe - Cool TV - Crime + Investigation UK - Da Vinci - Decija TV - Dexy TV - Discovery Channel Srbija - Discovery Science - Disney Channel Polska - Dizi - DM Sat - DocuBox HD - Dox TV - Duck TV SD - Duna TV - Dunav TV - Duna World - eduTV - E! Europe - Epic Drama - EuroNews English - EuroNews Serbia - Eurosport 1 - Eurosport 2 - Extreme Sports Channel - Face TV - FashionBox HD - Fashion TV Europe - Fast & FunBox HD - Federalna TV - FightBox HD - Fight Network - Film 4 - FilmBox Arthouse Worldwide - FilmBox Extra HD Adria - FilmBox Stars Adria - Film Klub - Film Klub Extra - Film + Hungary - Food Network EMEA - Fox Crime Srbija - Fox Life Srbija - Fox Movies Srbija - Fox News Channel - Fox Srbija - France 24 English - Gametoon - Gradska M TV - Ha Ha - Happy - Happy Reality 1 - Happy Reality 2 - Hayat - Hayat Folk - Hayat Music - Hayatovci - Hayat Plus - HGTV Pan Regional - History 2 Polska - Humana TV Plus - Hype TV - Investigation Discovery Europe - Jeka - JimJam Europe - K1 - K23 TV - K3 - KA TV - Kazbuka - K CN 1 - K CN 2 - K CN 3 - K CN Istok - K CN K - K CN Raška - K CN Zapad - Kitchen TV - Klasik TV - Kurir TV - Kuvo TV - LFC TV - Lol - M1 - M2 - M4 Sport - M5 - Minimax Romania - Mostnet - Motorvision TV - MTV 00s - MTV 80s - MTV 90s - MTV Global - MTV Hits Europe - Muzsika TV - Muzzik - National Geographic - Nat Geo Wild - NBA TV - Nickelodeon - Nick Jr - Nicktoons Adria - TV Nova - Novosadska TV - NTV - OBN - OKK - Pannon TV - Pink Action - Pink Classic - Pink Comedy - Pink Crime & Mystery - Pink Extra - Pink Family - Pink Fashion - Pink Film - Pink Folk 1 - Pink Folk 2 - Pink Hits - Pink Hits 2 - Pink Horror - Pink Kids - Pink Koncert - Pink Kuvar - Pink M - Pink Movies - Pink Music - Pink Music 2 - Pink n Roll - Pink Pedia - Pink Plus - Pink Premium - Pink Reality - Pink Romance - Pink Sci-Fi & Fantasy - Pink Srbija - Pink Serije - Pink Show - Pink Soap - Pink Style - Pink Super Kids - Pink Thriller - Pink Western - Pink World - Pink Zabava - Prva Files - Prva Kick - Prva Life - Prva Max - Prva Srpska TV - Prva TV Crna Gora - Prva World - Red TV - Rock & Roll - RT News - RT Documentary - RTL Hrvatska - RTL Croatia World - RTL Deutschland - RTL Gold - RTL HÁROM - RTL - RTL KETTŐ - RTL Kockica - RTP - RTR Planeta - RTRS TV - RTS 1 - RTS 2 - RTS 3 - RTS Drama - RTS Klasika - RTS Kolo - RTS Muzika - RTS Nauka - RTS Poletarac - RTS Trezor - RTS Zivot - RTV 1 - RTV 2 - RTV Bap - RTV Bosphorus - RTV Melos - RTV SP - RTV Sreće - RTV Subotica - RTV Šumadija - Rossiya 24 - Sandžačka TV Mreža - Sandžak TV - SAT TV - Scifi Srbija - Sorozat + - SOS Kanal Plus - Sremska TV - Story 4 - Studio B - Super D+ - Super Sat - Superstar 2 - Superstar - Super TV 2 - T1 - Tanjug TV - Telebet - Televizija Fokus - Televizija Plus - TLC Balkan - TMS Televizija Telemark - Toxic Folk - Toxic Rap - Toxic TV - Travel Channel Europe - Turizam TV - TV 1000 Balkan - TV 2 - TV 4S - TV5Monde Europe - TV 5 Uzice - TV Apatin - TV AS - TV Bačka - TV Banat - TV Bečej - TV Belle Amie - TV Bor - TV Bujanovac - TV Caribrod - TVCG Sat - TV Cink - TV City - TV Delta - TV Diskos - TV DR - TV Duga + - TV Fruška Gora - TV Galaksija 32 - TV Gem - TV GM Plus - TV Hit Plus Batočina - TV Hram - TV Info 24 Plus - TV Istok - TV Jasenica - TV K-1 - TV K9 - TV Kanal 25 - TV Kanal M - TV Kikinda - TV Kladovo - TV Koreni - TV Kragujevac - TV Kraljevo - TV Kruševac - TV Lav - TV Lav Plus - TV Leskovac - TV Lotel Plus - TV Mag - TV Marš - TV Mix - TV Most - TV Novi Bečej - TV Novi Pazar - TV Palma Plus - TV Pančevo - TV Partizan - TV P Canal - TV Petrovec - TV Pirot - TV Podrinje - TV Požega - TV Priboj - TV Q - TV Rača - TV Ras - TV Ritam - TV Šabac - TV Santos - TV Skay - TV Sunce - TV Trans - TV Trstenik - VA Plus - TV Vranje - TV Vrnjačka Banja - TV Vujic - TV YU Eco - TV Zlatar - TV Zona Plus - Vesti - Viasat Explore East - Viasat History - Viasat Nature East - Vranjska Plus - World Wild Muzzik - Zadruga 1 - Zadruga 2 - Zadruga 3 - Zadruga 4 - Zdravlje TV - Zvezda TV - - \ No newline at end of file + + + + 101 TV + 24 Kitchen + 360 Tune Box + Agro TV + Aljazeera Balkans + Alternativna TV + Animal Planet + Arena Esport + Arena Fight + Arena Premium 1 + Arena Sport 1 + Arena Sport 1x2 + Arena Premium 2 + Arena Sport 2 + Arena Premium 3 + Arena Sport 3 + Arena Sport 4 + Arena Sport 5 + Arena Sport 6 + Arena Sport 7 + Arena Sport 8 + AXN + AXN Spin + B92 + Baby TV Europe + Balkan Trip + Balkan TV + BBC Earth + Bloomberg TV + BN Music + BN + Boomerang + Bravo Music + B TV + Cafe & Club + CBS Reality + CCTV 4 Europe + CGTN + CineStar TV 1 Srbija + CineStar TV Action Srbija + CineStar TV Comedy + CineStar TV Fantasy + Club MTV + CNBC Europe + CNN International Europe + Cool TV + Crime + Investigation UK + Da Vinci + Decija TV + Dexy TV + Discovery Channel Srbija + Discovery Science + Disney Channel Polska + Dizi + DM Sat + DocuBox HD + Dox TV + Duck TV SD + Duna TV + Dunav TV + Duna World + eduTV + E! Europe + Epic Drama + EuroNews English + EuroNews Serbia + Eurosport 1 + Eurosport 2 + Extreme Sports Channel + Face TV + FashionBox HD + Fashion TV Europe + Fast & FunBox HD + Federalna TV + FightBox HD + Fight Network + Film 4 + FilmBox Arthouse Worldwide + FilmBox Extra HD Adria + FilmBox Stars Adria + Film Klub + Film Klub Extra + Film + Hungary + Food Network EMEA + Fox Crime Srbija + Fox Life Srbija + Fox Movies Srbija + Fox News Channel + Fox Srbija + France 24 English + Gametoon + Gradska M TV + Ha Ha + Happy + Happy Reality 1 + Happy Reality 2 + Hayat + Hayat Folk + Hayat Music + Hayatovci + Hayat Plus + HGTV Pan Regional + History 2 Polska + Humana TV Plus + Hype TV + Investigation Discovery Europe + Jeka + JimJam Europe + K1 + K23 TV + K3 + KA TV + Kazbuka + K CN 1 + K CN 2 + K CN 3 + K CN Istok + K CN K + K CN Raška + K CN Zapad + Kitchen TV + Klasik TV + Kurir TV + Kuvo TV + LFC TV + Lol + M1 + M2 + M4 Sport + M5 + Minimax Romania + Mostnet + Motorvision TV + MTV 00s + MTV 80s + MTV 90s + MTV Global + MTV Hits Europe + Muzsika TV + Muzzik + National Geographic + Nat Geo Wild + NBA TV + Nickelodeon + Nick Jr + Nicktoons Adria + TV Nova + Novosadska TV + NTV + OBN + OKK + Pannon TV + Pink Action + Pink Classic + Pink Comedy + Pink Crime & Mystery + Pink Extra + Pink Family + Pink Fashion + Pink Film + Pink Folk 1 + Pink Folk 2 + Pink Hits + Pink Hits 2 + Pink Horror + Pink Kids + Pink Koncert + Pink Kuvar + Pink M + Pink Movies + Pink Music + Pink Music 2 + Pink n Roll + Pink Pedia + Pink Plus + Pink Premium + Pink Reality + Pink Romance + Pink Sci-Fi & Fantasy + Pink Srbija + Pink Serije + Pink Show + Pink Soap + Pink Style + Pink Super Kids + Pink Thriller + Pink Western + Pink World + Pink Zabava + Prva Files + Prva Kick + Prva Life + Prva Max + Prva Srpska TV + Prva TV Crna Gora + Prva World + Red TV + Rock & Roll + RT News + RT Documentary + RTL Hrvatska + RTL Croatia World + RTL Deutschland + RTL Gold + RTL HÁROM + RTL + RTL KETTŐ + RTL Kockica + RTP + RTR Planeta + RTRS TV + RTS 1 + RTS 2 + RTS 3 + RTS Drama + RTS Klasika + RTS Kolo + RTS Muzika + RTS Nauka + RTS Poletarac + RTS Trezor + RTS Zivot + RTV 1 + RTV 2 + RTV Bap + RTV Bosphorus + RTV Melos + RTV SP + RTV Sreće + RTV Subotica + RTV Šumadija + Rossiya 24 + Sandžačka TV Mreža + Sandžak TV + SAT TV + Scifi Srbija + Sorozat + + SOS Kanal Plus + Sremska TV + Story 4 + Studio B + Super D+ + Super Sat + Superstar 2 + Superstar + Super TV 2 + T1 + Tanjug TV + Telebet + Televizija Fokus + Televizija Plus + TLC Balkan + TMS Televizija Telemark + Toxic Folk + Toxic Rap + Toxic TV + Travel Channel Europe + Turizam TV + TV 1000 Balkan + TV 2 + TV 4S + TV5Monde Europe + TV 5 Uzice + TV Apatin + TV AS + TV Bačka + TV Banat + TV Bečej + TV Belle Amie + TV Bor + TV Bujanovac + TV Caribrod + TVCG Sat + TV Cink + TV City + TV Delta + TV Diskos + TV DR + TV Duga + + TV Fruška Gora + TV Galaksija 32 + TV Gem + TV GM Plus + TV Hit Plus Batočina + TV Hram + TV Info 24 Plus + TV Istok + TV Jasenica + TV K-1 + TV K9 + TV Kanal 25 + TV Kanal M + TV Kikinda + TV Kladovo + TV Koreni + TV Kragujevac + TV Kraljevo + TV Kruševac + TV Lav + TV Lav Plus + TV Leskovac + TV Lotel Plus + TV Mag + TV Marš + TV Mix + TV Most + TV Novi Bečej + TV Novi Pazar + TV Palma Plus + TV Pančevo + TV Partizan + TV P Canal + TV Petrovec + TV Pirot + TV Podrinje + TV Požega + TV Priboj + TV Q + TV Rača + TV Ras + TV Ritam + TV Šabac + TV Santos + TV Skay + TV Sunce + TV Trans + TV Trstenik + VA Plus + TV Vranje + TV Vrnjačka Banja + TV Vujic + TV YU Eco + TV Zlatar + TV Zona Plus + Vesti + Viasat Explore East + Viasat History + Viasat Nature East + Vranjska Plus + World Wild Muzzik + Zadruga 1 + Zadruga 2 + Zadruga 3 + Zadruga 4 + Zdravlje TV + Zvezda TV + \ No newline at end of file diff --git a/sites/mts.rs/mts.rs.config.js b/sites/mts.rs/mts.rs.config.js index 89e488f4..00d3b552 100644 --- a/sites/mts.rs/mts.rs.config.js +++ b/sites/mts.rs/mts.rs.config.js @@ -18,7 +18,7 @@ module.exports = { 'X-Requested-With': 'XMLHttpRequest' } }, - parser: function ({ content, channel, date }) { + parser: function ({ content, channel }) { let programs = [] const data = parseContent(content, channel) const items = parseItems(data) @@ -38,21 +38,23 @@ module.exports = { } function parseContent(content, channel) { - const [_, site_id] = channel.site_id.split('#') + const [, site_id] = channel.site_id.split('#') let data try { data = JSON.parse(content) - } catch (e) {} + } catch (error) { + console.log(error) + } if (!data || !data.channels || !data.channels.length) return null return data.channels.find(c => c.id === site_id) || null } -function parseStart(item, date) { +function parseStart(item) { return dayjs.tz(item.full_start, 'Europe/Belgrade') } -function parseStop(item, date) { +function parseStop(item) { return dayjs.tz(item.full_end, 'Europe/Belgrade') } diff --git a/sites/mts.rs/mts.rs.test.js b/sites/mts.rs/mts.rs.test.js index e3f62c5b..87ff70cc 100644 --- a/sites/mts.rs/mts.rs.test.js +++ b/sites/mts.rs/mts.rs.test.js @@ -1,4 +1,4 @@ -// npx epg-grabber --config=sites/mts.rs/mts.rs.config.js --channels=sites/mts.rs/mts.rs.channels.xml --output=guide.xml --days=2 +// npm run grab -- --site=mts.rs const { parser, url, request } = require('./mts.rs.config.js') const dayjs = require('dayjs') @@ -12,7 +12,8 @@ const channel = { site_id: '101#597', xmltv_id: 'RTS1.rs' } -const content = `{"page":0,"total_pages":1,"date":"2021-11-07","channels":[{"id":"597","name":"RTS 1","description":null,"link":null,"image":"https:\/\/mts.rs\/oec\/images\/tv_channels\/904ddd8cd6720a4a1c23eae513b5b957.jpg","position":"101","positions":"101","items":[{"id_channel":"597","title":"Zaboravljeni zlo\u010din","description":"Novinarka-fotoreporter, D\u017ein, istra\u017euje okrutno i senzacionalno, nere\u0161eno ubistvo sekirom iz davne 1873. godine. Ubistvo koje koincidira sa nedavnim identi\u010dnim brutalnim dvostrukim ubistvom. Zaplet se odvija izme\u0111u pri\u010de o\u010devica iz toga doba - pri\u010de iz novinske arhive i D\u017einine privatne borbe sa ljubomorom i sumnjom koje prate njen brak.","start":"00:00:00","duration":"103.00","full_start":"2021-11-06 23:44:00","full_end":"2021-11-07 01:43:00","image":"https:\/\/mts.rs\/oec\/images\/epg\/2_abb81cc24d8ce957eece50f991a31e59780e4e53_E7D8ECDE568E84E3C86CCDBDB647355E.jpg","category":"Bioskopski film","subcategory":""}]}]}` +const content = + '{"page":0,"total_pages":1,"date":"2021-11-07","channels":[{"id":"597","name":"RTS 1","description":null,"link":null,"image":"https://mts.rs/oec/images/tv_channels/904ddd8cd6720a4a1c23eae513b5b957.jpg","position":"101","positions":"101","items":[{"id_channel":"597","title":"Zaboravljeni zlo\u010din","description":"Novinarka-fotoreporter, D\u017ein, istra\u017euje okrutno i senzacionalno, nere\u0161eno ubistvo sekirom iz davne 1873. godine. Ubistvo koje koincidira sa nedavnim identi\u010dnim brutalnim dvostrukim ubistvom. Zaplet se odvija izme\u0111u pri\u010de o\u010devica iz toga doba - pri\u010de iz novinske arhive i D\u017einine privatne borbe sa ljubomorom i sumnjom koje prate njen brak.","start":"00:00:00","duration":"103.00","full_start":"2021-11-06 23:44:00","full_end":"2021-11-07 01:43:00","image":"https://mts.rs/oec/images/epg/2_abb81cc24d8ce957eece50f991a31e59780e4e53_E7D8ECDE568E84E3C86CCDBDB647355E.jpg","category":"Bioskopski film","subcategory":""}]}]}' it('can generate valid url', () => { const result = url({ date, channel }) @@ -38,7 +39,8 @@ it('can parse response', () => { title: 'Zaboravljeni zlo\u010din', category: 'Bioskopski film', icon: 'https://mts.rs/oec/images/epg/2_abb81cc24d8ce957eece50f991a31e59780e4e53_E7D8ECDE568E84E3C86CCDBDB647355E.jpg', - description: `Novinarka-fotoreporter, D\u017ein, istra\u017euje okrutno i senzacionalno, nere\u0161eno ubistvo sekirom iz davne 1873. godine. Ubistvo koje koincidira sa nedavnim identi\u010dnim brutalnim dvostrukim ubistvom. Zaplet se odvija izme\u0111u pri\u010de o\u010devica iz toga doba - pri\u010de iz novinske arhive i D\u017einine privatne borbe sa ljubomorom i sumnjom koje prate njen brak.` + description: + 'Novinarka-fotoreporter, D\u017ein, istra\u017euje okrutno i senzacionalno, nere\u0161eno ubistvo sekirom iz davne 1873. godine. Ubistvo koje koincidira sa nedavnim identi\u010dnim brutalnim dvostrukim ubistvom. Zaplet se odvija izme\u0111u pri\u010de o\u010devica iz toga doba - pri\u010de iz novinske arhive i D\u017einine privatne borbe sa ljubomorom i sumnjom koje prate njen brak.' } ]) }) @@ -47,7 +49,7 @@ it('can handle empty guide', () => { const result = parser({ date, channel, - content: `{"message":"Nema rezultata."}` + content: '{"message":"Nema rezultata."}' }) expect(result).toMatchObject([]) }) diff --git a/sites/mujtvprogram.cz/mujtvprogram.cz.channels.xml b/sites/mujtvprogram.cz/mujtvprogram.cz.channels.xml index 21bf6f62..ab8bef3f 100644 --- a/sites/mujtvprogram.cz/mujtvprogram.cz.channels.xml +++ b/sites/mujtvprogram.cz/mujtvprogram.cz.channels.xml @@ -1,274 +1,272 @@ - - - 360TuneBox - 3SAT - Adult Channel - Al Jazeera - AMC - - Animal Planet - - ARD - Das Erste - Arena Sport 1 HD - Arena Sport 2 - ARTE - Auto Motor Sport HD - AXN - - AXN Black - - AXN White - BabyTV - Barrandov Krimi - BBC World News HD - Bloomberg Europe - Blue Hustler - Boomerang - BoomerangEMEA.us - - Brazzers TV Europe - Canal 24 Horas - CANAL+ Domo - Cartoon Network - CBS Reality - - Cinemax - - Cinemax2 - Club MTV Europe - CNBC Europe - CNN International Europe - CNN Prima NEWS HD - Cool TV - Crime & Investigation - CS Film - - CS History - CS Horror - CS Mystery - ČT :D HD - ČT art HD - ČT Sport HD - - ČT1 HD - - ČT2 HD - ČT24 HD - ČT3 HD - Deutsche Welle English - Deluxe Music - Discovery Channel - - Discovery Science - Disney Channel - Disney Channel - Disney Junior - DMAX - DocuBox - Dorcel TV - Dorcel XXX - Duck TV - Duck TV - Duna - Duna SK - Dvojka HD - E! Europe - English Club TV - Epic Drama HD - Erox - Eroxxx - EuroNews - Eurosport 1 - - Eurosport 2 - - Extreme Sports Channel - Fashion TV Europe - FashionBox.nl - Fast&FunBox - FightBox - Film Europe HD - - Film Europe+ HD - Film+ - - FilmBox - - FilmBox Extra HD - - FilmBox Family - - - FilmBox Premium HD - FilmBox Premium - FilmBox Stars - - Fishing and Hunting - - Food Network - France 24 HD - France 24 - Ginx eSports TV - Golf Channel - HBO - - HBO2 - - HBO3 - HBO3 - History HD - - HTV1 - HTV2 - Hustler - Hustler HD - Investigation Discovery - Jednotka HD - JimJam - JOJ Cinema HD - JOJ Family HD - JOJCinema.sk - Jojko.sk - JOJ Plus - JOJSport.sk - JOJWAU.sk - Kabel1 - KiKA - Kino Barrandov - LALA TV - LEO TV - Love Nature HD - M1 - M2 - Markiza Dajto - Markíza International - Markíza - Markíza Doma - MDR - Mezzo HD - Mezzo Live HD - Minimax - Mňam TV - MnauTV.cz - - MTV 00s - MTV 80s - MTV 90s - MTV - MTVHitsEurope.uk - MTV Live - Music Box - Náš region TV - National Geographic - - - National Geographic Wild - - - Nick Jr Czech - Nickelodeon - Nicktoons - Nova Action HD - Nova Cinema HD - Nova Fun HD - Nova Gold - Nova HD - Nova International - Nova Lady - Nova Sport 1 HD - Nova Sport 2 HD - Nova Sport 3 - Nova Sport 4 - ÓČKO - ÓČKO BLACK HD - ÓČKO EXPRES HD - ÓČKO STAR - ORF1 - - ORF2 - - Paramount Network - Playboy TV Europe - Polsat - - Power TV - Praha TV - Premier Sport 1 - Premier Sport 2 - Prima COOL HD - Prima HD - Prima KRIMI HD - Prima LOVE HD - Prima MAX HD - Prima Show - Prima STAR - Prima ZOOM HD - PrimaPlus.cz - Private TV - PRO7 - - Rebel - RELAX - Retro - Russia Today - RT Doc - RTL - RTL Hungary - RTL Hungary - RTL2 - SAT.1 - - SAT.1 Gold - Senzi - Sky News International - Skylink 7 - Šláger Originál - Šlágr Premium HD - Spektrum HD - Spektrum Home - Spektrum - - Sport1 - - Sport 1 - - Sport 2 - - Sport.sk - SPORT5 - Stingray Classica HD - Stingray CMusic - Stingray iConcerts HD - TA3 HD - Televize Seznam - TLC - Travel Channel - Travelxp HD - TV5 Monde - TV Barrandov HD - JOJ - TV Central - - TV Lux HD - TV Noe HD - - TVP 1 - TVP 2 - TV Paprika - - TV8 HD - UP NETWORK - - Viasat Explore - - Viasat History - - Viasat Nature - - VIXEN HD - VOX - ZDF - ZDF NEO - - \ No newline at end of file + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3SAT + AMC + Animal Planet + ARTE + Auto Motor Sport HD + AXN Black + AXN + AXN White + Barrandov Krimi + Canal 24 Horas + CANAL+ Domo + Cartoon Network + CBS Reality + Cinemax2 + Cinemax + CNBC Europe + CNN Prima NEWS HD + Crime & Investigation + CS Film + CS History + CS Horror + CS Mystery + ČT1 HD + ČT2 HD + ČT24 HD + ČT3 HD + ČT art HD + ČT :D HD + ČT Sport HD + ARD - Das Erste + Discovery Channel + Discovery Science + Disney Channel + Duck TV + Duna SK + E! Europe + Epic Drama HD + Eurosport 1 + Eurosport 2 + FashionBox.nl + FilmBox + FilmBox Extra HD + FilmBox Family + FilmBox Premium HD + FilmBox Stars + Film Europe HD + Film Europe+ HD + Film+ + Food Network + Golf Channel + HBO2 + HBO3 + HBO + History HD + HTV1 + HTV2 + Investigation Discovery + JimJam + JOJ Cinema HD + Kabel1 + KiKA + Kino Barrandov + LALA TV + LEO TV + M1 + M2 + Markíza International + MDR + Minimax + Mňam TV + MnauTV.cz + MTV + MTV Live + Náš region TV + National Geographic + National Geographic Wild + Nickelodeon + Nick Jr Czech + Nicktoons + Nova Action HD + Nova Cinema HD + Nova Fun HD + Nova Gold + Nova International + Nova Lady + Nova Sport 1 HD + Nova Sport 2 HD + Nova Sport 3 + Nova Sport 4 + ÓČKO + ÓČKO BLACK HD + ÓČKO EXPRES HD + ÓČKO STAR + ORF1 + ORF2 + Paramount Network + Polsat + Power TV + Praha TV + Premier Sport 1 + Premier Sport 2 + Prima HD + Prima COOL HD + Prima KRIMI HD + Prima LOVE HD + Prima MAX HD + PrimaPlus.cz + Prima Show + Prima STAR + Prima ZOOM HD + PRO7 + Rebel + RELAX + Retro + RTL + RTL Hungary + RTL2 + SAT.1 + SAT.1 Gold + Skylink 7 + Šláger Originál + Šlágr Premium HD + Spektrum HD + Spektrum Home + Sport 1 + Sport1 + Sport 2 + SPORT5 + Televize Seznam + Fishing and Hunting + TLC + Travel Channel + Travelxp HD + TV Barrandov HD + TV Central + TV Noe HD + Nova HD + TVP 1 + TVP 2 + TV Paprika + UP NETWORK + Viasat Explore + Viasat History + Viasat Nature + VOX + ZDF + BoomerangEMEA.us + DMAX + ZDF NEO + 360TuneBox + Adult Channel + Al Jazeera + BabyTV + BBC World News HD + Bloomberg Europe + Blue Hustler + Boomerang + Brazzers TV Europe + Club MTV Europe + CNN International Europe + Deluxe Music + Disney Channel + Disney Junior + DocuBox + Dorcel TV + Dorcel XXX + Deutsche Welle English + English Club TV + Erox + Eroxxx + EuroNews + Extreme Sports Channel + Fashion TV Europe + Fast&FunBox + FightBox + France 24 HD + Ginx eSports TV + Hustler HD + Hustler + Love Nature HD + MTV 00s + MTV 80s + MTV 90s + MTVHitsEurope.uk + Music Box + Playboy TV Europe + Private TV + Russia Today + RT Doc + Sky News International + Stingray Classica HD + Stingray CMusic + Stingray iConcerts HD + VIXEN HD + France 24 + Mezzo HD + Mezzo Live HD + TV5 Monde + Cool TV + Duna + RTL Hungary + Arena Sport 1 HD + Arena Sport 2 + Duck TV + Dvojka HD + FilmBox Premium + HBO3 + Jednotka HD + JOJCinema.sk + JOJ Family HD + Jojko.sk + JOJ Plus + JOJSport.sk + JOJWAU.sk + Markíza + Markiza Dajto + Markíza Doma + Senzi + Spektrum + Sport.sk + TA3 HD + TV8 HD + JOJ + TV Lux HD + \ No newline at end of file diff --git a/sites/mujtvprogram.cz/mujtvprogram.cz.test.js b/sites/mujtvprogram.cz/mujtvprogram.cz.test.js index d0a45073..c15d2329 100644 --- a/sites/mujtvprogram.cz/mujtvprogram.cz.test.js +++ b/sites/mujtvprogram.cz/mujtvprogram.cz.test.js @@ -1,4 +1,4 @@ -// npx epg-grabber --config=sites/mujtvprogram.cz/mujtvprogram.cz.config.js --channels=sites/mujtvprogram.cz/mujtvprogram.cz.channels.xml --output=guide.xml --days=2 +// npm run grab -- --site=mujtvprogram.cz const { parser, url } = require('./mujtvprogram.cz.config.js') const fs = require('fs') @@ -37,8 +37,9 @@ it('can parse response', () => { return p }) expect(results[3]).toMatchObject({ - title: `Čepice`, - description: `Jarka (J. Bohdalová) vyčítá manželovi Jiřímu (F. Řehák), že jí nepomáhá při předvánočním úklidu. Vzápětí ale náhodou najde ve skříni ukrytou dámskou čepici a napadne ji, že jde o Jiřího dárek pro ni pod stromeček. Její chování se ihned změní. Jen muži naznačí, že by chtěla čepici jiné barvy. Manžel jí ovšem řekne, že čepici si u něj schoval kamarád Venca (M. Šulc). Zklamaná žena to prozradí Vencově manželce Božce (A. Tománková). Na Štědrý den však Božka najde pod stromečkem jen rtěnku...`, + title: 'Čepice', + description: + 'Jarka (J. Bohdalová) vyčítá manželovi Jiřímu (F. Řehák), že jí nepomáhá při předvánočním úklidu. Vzápětí ale náhodou najde ve skříni ukrytou dámskou čepici a napadne ji, že jde o Jiřího dárek pro ni pod stromeček. Její chování se ihned změní. Jen muži naznačí, že by chtěla čepici jiné barvy. Manžel jí ovšem řekne, že čepici si u něj schoval kamarád Venca (M. Šulc). Zklamaná žena to prozradí Vencově manželce Božce (A. Tománková). Na Štědrý den však Božka najde pod stromečkem jen rtěnku...', category: 'film', date: '1983', director: ['Mudra F.'], diff --git a/sites/musor.tv/musor.tv.channels.xml b/sites/musor.tv/musor.tv.channels.xml index c723bd4e..49d7201f 100644 --- a/sites/musor.tv/musor.tv.channels.xml +++ b/sites/musor.tv/musor.tv.channels.xml @@ -1,174 +1,172 @@ - - - club MTV - E! Entertainment - English Club TV - Extreme Sports Channel - Fightbox - Filmbox Arthouse - MTV 00s - MTV 90s - MTV European - MTV Hits - MTV Live - Sky News - Stingray Classica - Stingray C Music - Total Dance TV - Trace Sports - Trace Urban - Travel XP - 7.TV - AMC - Animal Planet - Apostol TV - Arena4 - ATV - ATV Spirit - Auto Motor Sport - AXN - Baby TV - Balaton TV - BBC Earth - BBC World News - Boomerang - Cartoon Network - CBS Reality - Cinemax 2 - Cinemax - CNBC - CNN - Comedy Central Family - Comedy Central - Cool - d1 TV - Da Vinci - DIGI Animal World - DIGI Life - DIGI Sport 1 - DIGI Sport 2 - DIGI Sport 3 - DIGI World - Dikh TV - Direct One TV - Discovery Channel - Discovery Science - Disney Channel - Docubox - Duck TV - Duna TV - Duna World - Epic Drama - Erdély TV - Euronews - Eurosport 1 - Eurosport 2 - Eurosport 4K - EWTN / Bonum TV - Fashion TV - Fehérvár TV - FEM3 - Film4 - Filmbox Extra - Filmbox Family - Filmbox Premium - Filmbox Stars - Film Café - Film Mánia - Film Now - film+ - Fit HD - FIX TV - Food Network - Funbox UltraHD 4K - Galaxy4 - Gametoon - Hatoscsatorna - HBO 2 - HBO 3 - HBO - Hegyvidék TV - Heti TV - HGTV - Hír TV - History - H!T Music - ID - Izaura TV - JimJam - Jocky TV - Kapos TV - Kölcsey TV - Life TV - Love Nature - M1 - M2 / Petőfi - M4 Sport - M4 Sport+ - M5 - Match4 - Magyar Mozi TV - MAX4 - Mezzo - Mezzo Live - Minimax - Mozi+ - Moziverzum - MTV 80s - 1 Music Channel - Muzsika TV - National Geographic - National Geographic Wild - Nautical Channel - Nickelodeon - Nick Jr - Nicktoons - Ozone TV - Pannon TV (Vajdaság) - Paramount Network - PAX TV - Pesti TV - Prime - RTL Gold - RTL KETTŐ - RTL HÁROM - RTL - Sláger TV - Sorozat+ - Spektrum Home - Spektrum - Spíler1 TV - Spíler2 TV - Sport1 - Sport2 - Stingray iConcerts - Story4 - Super TV2 - Szeged TV - TeenNick - Fishing & Hunting Channel - TLC - Travel Channel - TV2 - TV21 Ungvár (Kárpátalja) - TV2 Comedy - TV2 Kids - TV2 Séf - TV4 - TV Eger - TV Paprika - Újbuda TV - Viasat2 - Viasat3 - Viasat6 - Viasat Explore - Viasat Film - Viasat History - Viasat Nature - Zalaegerszegi TV - Zenebutik TV - - - - + + + + club MTV + E! Entertainment + English Club TV + Extreme Sports Channel + Fightbox + Filmbox Arthouse + MTV 00s + MTV 90s + MTV European + MTV Hits + MTV Live + Sky News + Stingray Classica + Stingray C Music + Total Dance TV + Trace Sports + Trace Urban + Travel XP + 7.TV + AMC + Animal Planet + Apostol TV + Arena4 + ATV + ATV Spirit + Auto Motor Sport + AXN + Baby TV + Balaton TV + BBC Earth + BBC World News + Boomerang + Cartoon Network + CBS Reality + Cinemax 2 + Cinemax + CNBC + CNN + Comedy Central Family + Comedy Central + Cool + d1 TV + Da Vinci + DIGI Animal World + DIGI Life + DIGI Sport 1 + DIGI Sport 2 + DIGI Sport 3 + DIGI World + Dikh TV + Direct One TV + Discovery Channel + Discovery Science + Disney Channel + Docubox + Duck TV + Duna TV + Duna World + Epic Drama + Erdély TV + Euronews + Eurosport 1 + Eurosport 2 + Eurosport 4K + EWTN / Bonum TV + Fashion TV + Fehérvár TV + FEM3 + Film4 + Filmbox Extra + Filmbox Family + Filmbox Premium + Filmbox Stars + Film Café + Film Mánia + Film Now + film+ + Fit HD + FIX TV + Food Network + Funbox UltraHD 4K + Galaxy4 + Gametoon + Hatoscsatorna + HBO 2 + HBO 3 + HBO + Hegyvidék TV + Heti TV + HGTV + Hír TV + History + H!T Music + ID + Izaura TV + JimJam + Jocky TV + Kapos TV + Kölcsey TV + Life TV + Love Nature + M1 + M2 / Petőfi + M4 Sport + M4 Sport+ + M5 + Magyar Mozi TV + Match4 + MAX4 + Mezzo + Mezzo Live + Minimax + Mozi+ + Moziverzum + MTV 80s + 1 Music Channel + Muzsika TV + National Geographic + National Geographic Wild + Nautical Channel + Nickelodeon + Nick Jr + Nicktoons + Ozone TV + Pannon TV (Vajdaság) + Paramount Network + PAX TV + Pesti TV + Prime + RTL Gold + RTL HÁROM + RTL + RTL KETTŐ + Sláger TV + Sorozat+ + Spektrum Home + Spektrum + Spíler1 TV + Spíler2 TV + Sport1 + Sport2 + Stingray iConcerts + Story4 + Super TV2 + Szeged TV + TeenNick + Fishing & Hunting Channel + TLC + Travel Channel + TV2 + TV21 Ungvár (Kárpátalja) + TV2 Comedy + TV2 Kids + TV2 Séf + TV4 + TV Eger + TV Paprika + Újbuda TV + Viasat2 + Viasat3 + Viasat6 + Viasat Explore + Viasat Film + Viasat History + Viasat Nature + Zalaegerszegi TV + Zenebutik TV + diff --git a/sites/musor.tv/musor.tv.config.js b/sites/musor.tv/musor.tv.config.js index a436b8af..85568d9f 100644 --- a/sites/musor.tv/musor.tv.config.js +++ b/sites/musor.tv/musor.tv.config.js @@ -37,7 +37,7 @@ module.exports = { }, async channels() { const html = await axios - .get(`https://musor.tv/`) + .get('https://musor.tv/') .then(r => r.data) .catch(console.log) diff --git a/sites/musor.tv/musor.tv.test.js b/sites/musor.tv/musor.tv.test.js index 351c5cd6..6caa143a 100644 --- a/sites/musor.tv/musor.tv.test.js +++ b/sites/musor.tv/musor.tv.test.js @@ -1,5 +1,5 @@ // npm run channels:parse -- --config=./sites/musor.tv/musor.tv.config.js --output=./sites/musor.tv/musor.tv.channels.xml -// npx epg-grabber --config=sites/musor.tv/musor.tv.config.js --channels=sites/musor.tv/musor.tv.channels.xml --output=guide.xml --days=2 +// npm run grab -- --site=musor.tv const { parser, url } = require('./musor.tv.config.js') const fs = require('fs') @@ -38,7 +38,7 @@ it('can parse response', () => { expect(results[0]).toMatchObject({ start: '2022-11-19T23:00:00.000Z', stop: '2022-11-19T23:30:00.000Z', - title: `Egészségtér`, + title: 'Egészségtér', description: 'Egészségtér címmel új természetgyógyászattal foglalkozó magazinműsor indult hetente fél órás időtartamban a hatoscsatornán. A műsor derűs, objektív hangvételével és szakmailag magas színvonalú ismeretterjesztő jellegével az e' }) @@ -46,7 +46,7 @@ it('can parse response', () => { expect(results[1]).toMatchObject({ start: '2022-11-19T23:30:00.000Z', stop: '2022-11-20T00:00:00.000Z', - title: `Tradíció Klipek`, + title: 'Tradíció Klipek', description: 'Tradíció Klipek Birinyi József néprajzi, vallási, népzenei, népszokás filmjeiből.' }) }) @@ -54,7 +54,7 @@ it('can parse response', () => { it('can handle empty guide', () => { const result = parser({ date, - content: `` + content: '' }) expect(result).toMatchObject([]) }) diff --git a/sites/myafn.dodmedia.osd.mil/myafn.dodmedia.osd.mil.channels.xml b/sites/myafn.dodmedia.osd.mil/myafn.dodmedia.osd.mil.channels.xml index ac6e5e1b..080afd42 100644 --- a/sites/myafn.dodmedia.osd.mil/myafn.dodmedia.osd.mil.channels.xml +++ b/sites/myafn.dodmedia.osd.mil/myafn.dodmedia.osd.mil.channels.xml @@ -1,13 +1,11 @@ - - - AFN|prime Atlantic - AFN|news - AFN|sports - AFN|prime Pacific - AFN|spectrum - AFN|sports2 - AFN|family,AFN|pulse - AFN|movie - - + + AFN|family,AFN|pulse + AFN|movie + AFN|news + AFN|prime Atlantic + AFN|prime Pacific + AFN|spectrum + AFN|sports + AFN|sports2 + 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 024fc0c7..0969598d 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 @@ -40,7 +40,7 @@ module.exports = { }, async channels() { const data = await axios - .get(`https://v3.myafn.dodmedia.osd.mil/api/json/32/channels.json`) + .get('https://v3.myafn.dodmedia.osd.mil/api/json/32/channels.json') .then(r => r.data) .catch(console.log) @@ -51,7 +51,7 @@ module.exports = { } } -function parseStart(item, date) { +function parseStart(item) { return dayjs.utc(item.e, 'YYYY,M,D,H,m,s,0').add(1, 'month') } diff --git a/sites/myafn.dodmedia.osd.mil/myafn.dodmedia.osd.mil.test.js b/sites/myafn.dodmedia.osd.mil/myafn.dodmedia.osd.mil.test.js index 91f27eb6..1fefb07c 100644 --- a/sites/myafn.dodmedia.osd.mil/myafn.dodmedia.osd.mil.test.js +++ b/sites/myafn.dodmedia.osd.mil/myafn.dodmedia.osd.mil.test.js @@ -1,4 +1,4 @@ -// npx epg-grabber --config=sites/myafn.dodmedia.osd.mil/myafn.dodmedia.osd.mil.config.js --channels=sites/myafn.dodmedia.osd.mil/myafn.dodmedia.osd.mil.channels.xml --output=guide.xml --days=2 +// npm run grab -- --site=myafn.dodmedia.osd.mil // npm run channels:parse -- --config=./sites/myafn.dodmedia.osd.mil/myafn.dodmedia.osd.mil.config.js --output=./sites/myafn.dodmedia.osd.mil/myafn.dodmedia.osd.mil.channels.xml const { parser, url } = require('./myafn.dodmedia.osd.mil.config.js') @@ -21,7 +21,8 @@ it('can generate valid url', () => { }) it('can parse response', () => { - const content = `[{"a":566,"b":2,"c":"2022,9,3,3,0,0,0","d":"2022,9,3,4,0,0,0","e":"2022,9,3,3,0,0,0","f":"2022,9,3,4,0,0,0","g":60,"h":"This Week with George Stephanopoulos (ABC)","i":"Episode Title","j":"TV-14","k":false,"l":"Former Clinton White House staffer and current co-anchor of ABC's weekday morning news show \\"\\"Good Morning America,\\"\\" George Stephanopoulos and co-anchors Martha Raddatz and Jonathan Karl offer a look at current events with a focus on the politics of the day. Each week's show includes interviews with top newsmakers (including some of the nation's top political leaders) as well as a roundtable discussion, usually featuring journalists from ABC and other news organizations, of the week's happenings. Since 2008, the program has broadcast from a studio at the Newseum in Washington, D.C.","m":"News,Politics,Public affairs,Talk","n":694284445,"o":60,"p":20,"q":true,"r":694285705,"s":null}]` + const content = + '[{"a":566,"b":2,"c":"2022,9,3,3,0,0,0","d":"2022,9,3,4,0,0,0","e":"2022,9,3,3,0,0,0","f":"2022,9,3,4,0,0,0","g":60,"h":"This Week with George Stephanopoulos (ABC)","i":"Episode Title","j":"TV-14","k":false,"l":"Former Clinton White House staffer and current co-anchor of ABC\'s weekday morning news show \\"\\"Good Morning America,\\"\\" George Stephanopoulos and co-anchors Martha Raddatz and Jonathan Karl offer a look at current events with a focus on the politics of the day. Each week\'s show includes interviews with top newsmakers (including some of the nation\'s top political leaders) as well as a roundtable discussion, usually featuring journalists from ABC and other news organizations, of the week\'s happenings. Since 2008, the program has broadcast from a studio at the Newseum in Washington, D.C.","m":"News,Politics,Public affairs,Talk","n":694284445,"o":60,"p":20,"q":true,"r":694285705,"s":null}]' const result = parser({ content, date, channel }).map(p => { p.start = p.start.toJSON() p.stop = p.stop.toJSON() diff --git a/sites/mysky.com.ph/mysky.com.ph.channels.xml b/sites/mysky.com.ph/mysky.com.ph.channels.xml index b45ab088..ee75ab84 100644 --- a/sites/mysky.com.ph/mysky.com.ph.channels.xml +++ b/sites/mysky.com.ph/mysky.com.ph.channels.xml @@ -1,125 +1,123 @@ - - - A2Z - ANC - ASIAN FOOD NETWORK - BABY TV - CARTOON NETWORK - CELESTIAL CLASSIC MOVIES - CINEMA ONE - CINEMO! - DA VINCI KIDS - GLOBAL TREKKER HD - JEEPNEY TV - KAPAMILYA CHANNEL - KBS WORLD - KIX - KNOWLEDGE CHANNEL - K-PLUS - LOVE NATURE HD - METRO CHANNEL SD - MEZZO LIVE HD - MTV 90s - MYX - NHK WORLD JAPAN - ONE SPORTS - PBO - PREMIER FOOTBALL HD - PREMIER SPORTS - PREMIER SPORTS 2 HD - ROCK ENTERTAINMENT - ROCK EXTREME - SOLAR SPORTS - SPOTV - SPOTV 2 - STAR BHARAT - TMC (TAGALIZED MOVIE CHANNEL) - TapAction Flix - TAP EDGE - TAP MOVIES - TAP SPORTS HD - TAP TV - TECH STORM - THRILL - TLC - TV5 - TVBS ASIA - TVBS NEWS - ZOO MOO - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A2Z + ANC + ASIAN FOOD NETWORK + BABY TV + CARTOON NETWORK + CELESTIAL CLASSIC MOVIES + CINEMA ONE + CINEMO! + DA VINCI KIDS + GLOBAL TREKKER HD + JEEPNEY TV + KAPAMILYA CHANNEL + KBS WORLD + KIX + KNOWLEDGE CHANNEL + K-PLUS + LOVE NATURE HD + METRO CHANNEL SD + MEZZO LIVE HD + MTV 90s + MYX + NHK WORLD JAPAN + ONE SPORTS + PBO + PREMIER FOOTBALL HD + PREMIER SPORTS + PREMIER SPORTS 2 HD + ROCK ENTERTAINMENT + ROCK EXTREME + SOLAR SPORTS + SPOTV + SPOTV 2 + STAR BHARAT + TMC (TAGALIZED MOVIE CHANNEL) + TapAction Flix + TAP EDGE + TAP MOVIES + TAP SPORTS HD + TAP TV + TECH STORM + THRILL + TLC + TV5 + TVBS ASIA + TVBS NEWS + ZOO MOO + diff --git a/sites/mysky.com.ph/mysky.com.ph.config.js b/sites/mysky.com.ph/mysky.com.ph.config.js index 3735b0e0..af604cb2 100644 --- a/sites/mysky.com.ph/mysky.com.ph.config.js +++ b/sites/mysky.com.ph/mysky.com.ph.config.js @@ -33,7 +33,7 @@ module.exports = { }, async channels() { const items = await axios - .get(`https://skyepg.mysky.com.ph/Main/getEventsbyType`) + .get('https://skyepg.mysky.com.ph/Main/getEventsbyType') .then(r => r.data.location) .catch(console.log) diff --git a/sites/mysky.com.ph/mysky.com.ph.test.js b/sites/mysky.com.ph/mysky.com.ph.test.js index 40f46c19..b53c25ae 100644 --- a/sites/mysky.com.ph/mysky.com.ph.test.js +++ b/sites/mysky.com.ph/mysky.com.ph.test.js @@ -1,4 +1,4 @@ -// npx epg-grabber --config=sites/mysky.com.ph/mysky.com.ph.config.js --channels=sites/mysky.com.ph/mysky.com.ph.channels.xml --output=guide.xml --days=2 +// npm run grab -- --site=mysky.com.ph // npm run channels:parse -- --config=./sites/mysky.com.ph/mysky.com.ph.config.js --output=./sites/mysky.com.ph/mysky.com.ph.channels.xml const { parser, url } = require('./mysky.com.ph.config.js') @@ -19,7 +19,8 @@ it('can generate valid url', () => { }) it('can parse response', () => { - const content = `{"events":[{"name":"TV PATROL","location":"8","start":"2022/10/04 19:00","end":"2022/10/04 20:00","userData":{"description":"Description example"}},{"name":"DARNA","location":"8","start":"2022/10/05 20:00","end":"2022/10/05 20:45","userData":{"description":""}},{"name":"Zoe Bakes S1","location":"22","start":"2022/10/04 20:30","end":"2022/10/04 21:00","userData":{"description":"Zo Franois Dad is a beekeeper. So for his birthday, she bakes him a special beehiveshaped cake."}}]}` + const content = + '{"events":[{"name":"TV PATROL","location":"8","start":"2022/10/04 19:00","end":"2022/10/04 20:00","userData":{"description":"Description example"}},{"name":"DARNA","location":"8","start":"2022/10/05 20:00","end":"2022/10/05 20:45","userData":{"description":""}},{"name":"Zoe Bakes S1","location":"22","start":"2022/10/04 20:30","end":"2022/10/04 21:00","userData":{"description":"Zo Franois Dad is a beekeeper. So for his birthday, she bakes him a special beehiveshaped cake."}}]}' const result = parser({ content, channel, date }).map(p => { p.start = p.start.toJSON() p.stop = p.stop.toJSON() @@ -38,7 +39,7 @@ it('can parse response', () => { it('can handle empty guide', () => { const result = parser({ - content: ``, + content: '', channel, date }) diff --git a/sites/mytvsuper.com/mytvsuper.com.channels.xml b/sites/mytvsuper.com/mytvsuper.com.channels.xml index 3befb083..14b11e0c 100644 --- a/sites/mytvsuper.com/mytvsuper.com.channels.xml +++ b/sites/mytvsuper.com/mytvsuper.com.channels.xml @@ -1,109 +1,107 @@ - - - Al Jazeera English - Animal Planet - Animax - Arirang TV - Asian Drama - Asian Variety - AXN - BBC Earth - BBC Lifestyle - BBC World News - CBeebies - CCM - China Movie Channel - Chinese Drama - Chinese Opera Channel - Classic Movies - Channel NewsAsia - Creation TV - Discovery Channel - Discovery Science - DW - Entertainment News - Eurosport - Fashion One - France 24 - GEM - Global Trekker - Golden Jade - Hands Up Channel - J2 - Jade - KIX - Love Nature HD - Love Nature 4K - Mainland News - Mei Ah Movie Channel - Mezzo Live HD - myTV SUPER 18 - myTV SUPER Live Soccer 1 - myTV SUPER Live Soccer 2 - myTV SUPER Live Soccer 3 - myTV SUPER Live Soccer 4 - myTV SUPER Live Soccer 5 - NHK World-Japan - Nickelodeon - Nick Jr - Paramount Network - Pearl - ROCK Entertainment - ROCK Extreme - Thrill - TVB Classic - TVB Finance, Sports & Information Channel - TVB News Channel - TVBS Asia - TVBS News - tvN - 半島電視台英語頻道 - 動物星球頻道 - Animax - 亞洲劇台 - 亞洲綜藝台 - AXN - BBC Earth - BBC Lifestyle - 天映經典頻道 - 中國電影頻道 - 華語劇台 - 戲曲台 - 粵語片台 - 創世電視 - Discovery頻道 - Discovery科學頻道 - 娛樂新聞台 - France 24 - GEM - Global Trekker - 黃金翡翠台 - Hands Up Channel - J2 - 翡翠台 - KIX - Love Nature HD - Love Nature 4K - 神州新聞台 - 美亞電影台 - myTV SUPER 18台 - myTV SUPER直播足球1台 - myTV SUPER直播足球2台 - myTV SUPER直播足球3台 - myTV SUPER直播足球4台 - myTV SUPER直播足球5台 - Nickelodeon - Paramount Network - 明珠台 - ROCK綜藝娛樂 - ROCK超極娛樂 - Thrill - 千禧經典台 - 無綫財經 體育 資訊台 - 無綫新聞台 - 無線衛星亞洲台 - 無線衛星新聞台 - tvN - - + + Al Jazeera English + Animal Planet + Animax + Arirang TV + Asian Drama + Asian Variety + AXN + BBC Earth + BBC Lifestyle + BBC World News + CBeebies + CCM + China Movie Channel + Chinese Drama + Chinese Opera Channel + Classic Movies + Channel NewsAsia + Creation TV + Discovery Channel + Discovery Science + DW + Entertainment News + Eurosport + Fashion One + France 24 + GEM + Global Trekker + Golden Jade + Hands Up Channel + J2 + Jade + KIX + Love Nature HD + Love Nature 4K + Mainland News + Mei Ah Movie Channel + Mezzo Live HD + myTV SUPER 18 + myTV SUPER Live Soccer 1 + myTV SUPER Live Soccer 2 + myTV SUPER Live Soccer 3 + myTV SUPER Live Soccer 4 + myTV SUPER Live Soccer 5 + NHK World-Japan + Nickelodeon + Nick Jr + Paramount Network + Pearl + ROCK Entertainment + ROCK Extreme + Thrill + TVB Classic + TVB Finance, Sports & Information Channel + TVB News Channel + TVBS Asia + TVBS News + tvN + 半島電視台英語頻道 + 動物星球頻道 + Animax + 亞洲劇台 + 亞洲綜藝台 + AXN + BBC Earth + BBC Lifestyle + 天映經典頻道 + 中國電影頻道 + 華語劇台 + 戲曲台 + 粵語片台 + 創世電視 + Discovery頻道 + Discovery科學頻道 + 娛樂新聞台 + France 24 + GEM + Global Trekker + 黃金翡翠台 + Hands Up Channel + J2 + 翡翠台 + KIX + Love Nature HD + Love Nature 4K + 神州新聞台 + 美亞電影台 + myTV SUPER 18台 + myTV SUPER直播足球1台 + myTV SUPER直播足球2台 + myTV SUPER直播足球3台 + myTV SUPER直播足球4台 + myTV SUPER直播足球5台 + Nickelodeon + Paramount Network + 明珠台 + ROCK綜藝娛樂 + ROCK超極娛樂 + Thrill + 千禧經典台 + 無綫財經 體育 資訊台 + 無綫新聞台 + 無線衛星亞洲台 + 無線衛星新聞台 + tvN + diff --git a/sites/mytvsuper.com/mytvsuper.com.test.js b/sites/mytvsuper.com/mytvsuper.com.test.js index fba9505d..6025d492 100644 --- a/sites/mytvsuper.com/mytvsuper.com.test.js +++ b/sites/mytvsuper.com/mytvsuper.com.test.js @@ -1,10 +1,9 @@ // npm run channels:parse -- --config=./sites/mytvsuper.com/mytvsuper.com.config.js --output=./sites/mytvsuper.com/mytvsuper.com.channels.xml --set=lang:zh -// npx epg-grabber --config=sites/mytvsuper.com/mytvsuper.com.config.js --channels=sites/mytvsuper.com/mytvsuper.com.channels.xml --output=guide.xml --days=2 +// npm run grab -- --site=mytvsuper.com const { parser, url } = require('./mytvsuper.com.config.js') const fs = require('fs') const path = require('path') -const axios = require('axios') const dayjs = require('dayjs') const utc = require('dayjs/plugin/utc') const customParseFormat = require('dayjs/plugin/customParseFormat') diff --git a/sites/nhk.or.jp/nhk.or.jp.channels.xml b/sites/nhk.or.jp/nhk.or.jp.channels.xml index 5242039b..1fcd6def 100644 --- a/sites/nhk.or.jp/nhk.or.jp.channels.xml +++ b/sites/nhk.or.jp/nhk.or.jp.channels.xml @@ -1,8 +1,4 @@ - - - NHK - World-Japan - - \ No newline at end of file + + NHK World-Japan + \ No newline at end of file diff --git a/sites/nhk.or.jp/nhk.or.jp.config.js b/sites/nhk.or.jp/nhk.or.jp.config.js index f51fe044..b43bf6a4 100644 --- a/sites/nhk.or.jp/nhk.or.jp.config.js +++ b/sites/nhk.or.jp/nhk.or.jp.config.js @@ -1,65 +1,70 @@ const dayjs = require('dayjs') module.exports = { - site: 'nhk.or.jp', - days: 5, - output: 'nhk.or.jp.guide.xml', - channels: 'nhk.or.jp.channels.xml', - lang: 'en', - delay: 5000, + site: 'nhk.or.jp', + days: 5, + output: 'nhk.or.jp.guide.xml', + channels: 'nhk.or.jp.channels.xml', + lang: 'en', + delay: 5000, - url: function ({ date }) { - return `https://nwapi.nhk.jp/nhkworld/epg/v7b/world/s${date.unix() * 1000}-e${date.add(1, 'd').unix() * 1000}.json` - }, + url: function ({ date }) { + return `https://nwapi.nhk.jp/nhkworld/epg/v7b/world/s${date.unix() * 1000}-e${ + date.add(1, 'd').unix() * 1000 + }.json` + }, - request: { - method: 'GET', - timeout: 5000, - cache: { ttl: 60 * 1000 }, - headers: { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36' } - }, - - logo: function (context) { - return context.channel.logo - }, - - parser: function (context) { - const programs = [] - - const items = parseItems(context.content) - - items.forEach(item => { - programs.push({ - title: item.title, - start: parseStart(item), - stop: parseStop(item), - description: item.description, - icon: parseIcon(item), - sub_title: item.subtitle - }) - }) - - return programs + request: { + method: 'GET', + timeout: 5000, + cache: { ttl: 60 * 1000 }, + headers: { + 'User-Agent': + 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36' } + }, + + logo: function (context) { + return context.channel.logo + }, + + parser: function (context) { + const programs = [] + + const items = parseItems(context.content) + + items.forEach(item => { + programs.push({ + title: item.title, + start: parseStart(item), + stop: parseStop(item), + description: item.description, + icon: parseIcon(item), + sub_title: item.subtitle + }) + }) + + return programs + } } function parseItems(content) { - if (content != '') { - const data = JSON.parse(content) - return (!data || !data.channel || !Array.isArray(data.channel.item)) ? [] : data.channel.item - } else { - return [] - } + if (content != '') { + const data = JSON.parse(content) + return !data || !data.channel || !Array.isArray(data.channel.item) ? [] : data.channel.item + } else { + return [] + } } function parseStart(item) { - return dayjs.unix(parseInt(item.pubDate) / 1000) + return dayjs.unix(parseInt(item.pubDate) / 1000) } function parseStop(item) { - return dayjs.unix(parseInt(item.endDate) / 1000) + return dayjs.unix(parseInt(item.endDate) / 1000) } function parseIcon(item) { - return 'https://www.nhk.or.jp' + item.thumbnail -} \ No newline at end of file + return 'https://www.nhk.or.jp' + item.thumbnail +} diff --git a/sites/nhk.or.jp/nhk.or.jp.test.js b/sites/nhk.or.jp/nhk.or.jp.test.js index 6defd9f8..66d35b0c 100644 --- a/sites/nhk.or.jp/nhk.or.jp.test.js +++ b/sites/nhk.or.jp/nhk.or.jp.test.js @@ -1,4 +1,4 @@ -// npx epg-grabber --config=sites/nhk.or.jp/nhk.or.jp.config.js --channels=sites/nhk.or.jp/nhk.or.jp.channels.xml --output=guide.xml --days=2 +// npm run grab -- --site=nhk.or.jp // npx jest nhk.or.jp.test.js const { url, parser } = require('./nhk.or.jp.config.js') @@ -7,30 +7,39 @@ const utc = require('dayjs/plugin/utc') dayjs.extend(utc) const date = dayjs.utc('2023-04-29', 'YYYY-MM-DD').startOf('d') -const channel = { site_id: '0', xmltv_id: 'NHKWorldJapan.jp', lang: 'en', logo: 'https://www3.nhk.or.jp/nhkworld/common/site_images/nw_webapp_1024x1024.png' } +const channel = { + site_id: '0', + xmltv_id: 'NHKWorldJapan.jp', + lang: 'en', + logo: 'https://www3.nhk.or.jp/nhkworld/common/site_images/nw_webapp_1024x1024.png' +} it('can generate valid url', () => { - expect(url({ channel, date })).toBe('https://nwapi.nhk.jp/nhkworld/epg/v7b/world/s1682726400000-e1682812800000.json') + expect(url({ channel, date })).toBe( + 'https://nwapi.nhk.jp/nhkworld/epg/v7b/world/s1682726400000-e1682812800000.json' + ) }) it('can parse response', () => { - const content = `{"channel":{"item":[{"seriesId":"1007","airingId":"000","title":"NHK NEWSLINE","description":"NHK WORLD-JAPAN's flagship hourly news program delivers the latest world news, business and weather, with a focus on Japan and the rest of Asia.","link":"/nhkworld/en/news/","pubDate":"1682726400000","endDate":"1682727000000","vodReserved":false,"jstrm":"1","wstrm":"1","subtitle":"","content":"","content_clean":"","pgm_gr_id":"","thumbnail":"/nhkworld/upld/thumbnails/en/tv/regular_program/340aed63308aafd1178172abf6325231_large.jpg","thumbnail_s":"/nhkworld/upld/thumbnails/en/tv/regular_program/340aed63308aafd1178172abf6325231_small.jpg","showlist":"0","internal":"0","genre":{"TV":"11","Top":"","LC":""},"vod_id":"","vod_url":"","analytics":"[nhkworld]simul;NHK NEWSLINE;w02,001;1007-000-2023;2023-04-29T09:00:00+09:00"}]}}` - const results = parser({ content }) + const content = + '{"channel":{"item":[{"seriesId":"1007","airingId":"000","title":"NHK NEWSLINE","description":"NHK WORLD-JAPAN\'s flagship hourly news program delivers the latest world news, business and weather, with a focus on Japan and the rest of Asia.","link":"/nhkworld/en/news/","pubDate":"1682726400000","endDate":"1682727000000","vodReserved":false,"jstrm":"1","wstrm":"1","subtitle":"","content":"","content_clean":"","pgm_gr_id":"","thumbnail":"/nhkworld/upld/thumbnails/en/tv/regular_program/340aed63308aafd1178172abf6325231_large.jpg","thumbnail_s":"/nhkworld/upld/thumbnails/en/tv/regular_program/340aed63308aafd1178172abf6325231_small.jpg","showlist":"0","internal":"0","genre":{"TV":"11","Top":"","LC":""},"vod_id":"","vod_url":"","analytics":"[nhkworld]simul;NHK NEWSLINE;w02,001;1007-000-2023;2023-04-29T09:00:00+09:00"}]}}' + const results = parser({ content }) - expect(results).toMatchObject([ - { - title: 'NHK NEWSLINE', - start: dayjs(1682726400000), - stop: dayjs(1682727000000), - description: `NHK WORLD-JAPAN's flagship hourly news program delivers the latest world news, business and weather, with a focus on Japan and the rest of Asia.`, - icon: 'https://www.nhk.or.jp/nhkworld/upld/thumbnails/en/tv/regular_program/340aed63308aafd1178172abf6325231_large.jpg', - sub_title: '' - } - ]) + expect(results).toMatchObject([ + { + title: 'NHK NEWSLINE', + start: dayjs(1682726400000), + stop: dayjs(1682727000000), + description: + "NHK WORLD-JAPAN's flagship hourly news program delivers the latest world news, business and weather, with a focus on Japan and the rest of Asia.", + icon: 'https://www.nhk.or.jp/nhkworld/upld/thumbnails/en/tv/regular_program/340aed63308aafd1178172abf6325231_large.jpg', + sub_title: '' + } + ]) }) it('can handle empty guide', () => { - const results = parser({ content: '' }) + const results = parser({ content: '' }) - expect(results).toMatchObject([]) + expect(results).toMatchObject([]) }) diff --git a/sites/nhkworldpremium.com/nhkworldpremium.com.test.js b/sites/nhkworldpremium.com/nhkworldpremium.com.test.js index db012b05..9b097800 100644 --- a/sites/nhkworldpremium.com/nhkworldpremium.com.test.js +++ b/sites/nhkworldpremium.com/nhkworldpremium.com.test.js @@ -1,10 +1,9 @@ -// npx epg-grabber --config=sites/nhkworldpremium.com/nhkworldpremium.com.config.js --channels=sites/nhkworldpremium.com/nhkworldpremium.com_en.channels.xml --output=guide.xml -// npx epg-grabber --config=sites/nhkworldpremium.com/nhkworldpremium.com.config.js --channels=sites/nhkworldpremium.com/nhkworldpremium.com_ja.channels.xml --output=guide.xml +// npm run grab -- --site=nhkworldpremium.com +// npm run grab -- --site=nhkworldpremium.com -const { parser, url, request } = require('./nhkworldpremium.com.config.js') +const { parser, url } = require('./nhkworldpremium.com.config.js') const fs = require('fs') const path = require('path') -const axios = require('axios') const dayjs = require('dayjs') const utc = require('dayjs/plugin/utc') const customParseFormat = require('dayjs/plugin/customParseFormat') diff --git a/sites/nhkworldpremium.com/nhkworldpremium.com_en.channels.xml b/sites/nhkworldpremium.com/nhkworldpremium.com_en.channels.xml index 49ea7c11..aee9444a 100644 --- a/sites/nhkworldpremium.com/nhkworldpremium.com_en.channels.xml +++ b/sites/nhkworldpremium.com/nhkworldpremium.com_en.channels.xml @@ -1,6 +1,4 @@ - - - NHK World Premium - - \ No newline at end of file + + NHK World Premium + \ No newline at end of file diff --git a/sites/nhkworldpremium.com/nhkworldpremium.com_ja.channels.xml b/sites/nhkworldpremium.com/nhkworldpremium.com_ja.channels.xml index d37c6402..3e7b1cc4 100644 --- a/sites/nhkworldpremium.com/nhkworldpremium.com_ja.channels.xml +++ b/sites/nhkworldpremium.com/nhkworldpremium.com_ja.channels.xml @@ -1,6 +1,4 @@ - - - NHK World Premium - - \ No newline at end of file + + NHK World Premium + \ No newline at end of file diff --git a/sites/nos.pt/nos.pt.channels.xml b/sites/nos.pt/nos.pt.channels.xml index 201fbffa..9317ffe4 100644 --- a/sites/nos.pt/nos.pt.channels.xml +++ b/sites/nos.pt/nos.pt.channels.xml @@ -1,209 +1,207 @@ - - - 1+1 - 24Kitchen HD - 3SAT - Afro Music Channel - AMC Crime - AMC - ARTV - AXN Movies - AXN - Baby TV - Biggs - Bloomberg - BVN - Canal 11 HD - Canal Hollywood - Canal NOS HD - Canal Panda - Canal Q - Cartoon Network HD - Casa e Cozinha HD - CCTV 4 - CGTN - CMTV - CNBC - CNN Portugal - Cubavisión Internacional - Discovery Channel - Disney Channel HD - Disney Junior - DOGTV - DW (Alemão) - DW - Eleven 1 - Eleven 2 - Eleven 3 - Eleven 4 - Eleven 5 - Eleven 6 - Euronews - Fight Network HD - Food Network HD - FOX Comedy - FOX Crime - FOX Life - FOX Movies - FOX - France 24 (I) - France 24 (F) - Fuel TV - TV Galicia - Globo Now HD - Globo - Canal História - Horse TV - HOT Man - HOT Taboo - HOT - ID Investigation Discovery - KBS World HD - KiKa - Kuriakos TV - Localvisão TV HD - M6 - MCM Pop - MCM Top - Mezzo - Mezzo Live HD - Motorvision HD - MTV 00s - MTV Live - MTV Portugal - MyZen TV - National Geographic - National Geographic WILD - Nautical Channel - NHK World TV - Nickelodeon - Nick Jr. - Nickelodeon Ukraine Pluto TV - NOS Studios - Odisseia - Panda KIDS - Phoenix CNE - Phoenix Infonews - Porto Canal - ProSieben - Record News - Russia Today - RTP 1 - RTP 2 - RTP 3 - RTP Madeira - RTP Memória - RTR Planeta - SAT 1 - Sextreme - SIC - SIC Caras - SIC K - SIC Mulher - SIC Notícias - SIC Radical - S+ HD - Sporting TV - SPORT TV1 - SPORT TV2 - SPORT TV3 - SPORT TV4 - SPORT TV5 - Sport TV 6 HD - SPORT TV+ - Stingray iConcerts HD - Super RTL - SYFY - TCV Internacional - TPA Internacional - Trace Toca - Trace Urban HD - Travel Channel - TV5 Monde - TVCine ACTION - TVCine EDITION - TVCine EMOTION - TVCine TOP - TVEi - TVI - TVI Ficção HD - TVI Reality - TVR Internacional - Venus - ZAP Viva HD - ZDF - ZDF Neo - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1+1 + 24Kitchen HD + 3SAT + Afro Music Channel + AMC Crime + AMC + ARTV + AXN Movies + AXN + Baby TV + Biggs + Bloomberg + BVN + Canal 11 HD + Canal Hollywood + Canal NOS HD + Canal Panda + Canal Q + Cartoon Network HD + Casa e Cozinha HD + CCTV 4 + CGTN + CMTV + CNBC + CNN Portugal + Cubavisión Internacional + Discovery Channel + Disney Channel HD + Disney Junior + DOGTV + DW (Alemão) + DW + Eleven 1 + Eleven 2 + Eleven 3 + Eleven 4 + Eleven 5 + Eleven 6 + Euronews + Fight Network HD + Food Network HD + FOX Comedy + FOX Crime + FOX Life + FOX Movies + FOX + France 24 (I) + France 24 (F) + Fuel TV + TV Galicia + Globo Now HD + Globo + Canal História + Horse TV + HOT Man + HOT Taboo + HOT + ID Investigation Discovery + KBS World HD + KiKa + Kuriakos TV + Localvisão TV HD + M6 + MCM Pop + MCM Top + Mezzo + Mezzo Live HD + Motorvision HD + MTV 00s + MTV Live + MTV Portugal + MyZen TV + National Geographic + National Geographic WILD + Nautical Channel + NHK World TV + Nickelodeon + Nickelodeon Ukraine Pluto TV + Nick Jr. + NOS Studios + Odisseia + Panda KIDS + Phoenix CNE + Phoenix Infonews + Porto Canal + ProSieben + Record News + Russia Today + RTP 1 + RTP 2 + RTP 3 + RTP Madeira + RTP Memória + RTR Planeta + SAT 1 + Sextreme + SIC + SIC Caras + SIC K + SIC Mulher + SIC Notícias + SIC Radical + S+ HD + Sporting TV + SPORT TV1 + SPORT TV2 + SPORT TV3 + SPORT TV4 + SPORT TV5 + Sport TV 6 HD + SPORT TV+ + Stingray iConcerts HD + Super RTL + SYFY + TCV Internacional + TPA Internacional + Trace Toca + Trace Urban HD + Travel Channel + TV5 Monde + TVCine ACTION + TVCine EDITION + TVCine EMOTION + TVCine TOP + TVEi + TVI + TVI Ficção HD + TVI Reality + TVR Internacional + Venus + ZAP Viva HD + ZDF + ZDF Neo + diff --git a/sites/nos.pt/nos.pt.config.js b/sites/nos.pt/nos.pt.config.js index a32dc382..86c2fc38 100644 --- a/sites/nos.pt/nos.pt.config.js +++ b/sites/nos.pt/nos.pt.config.js @@ -20,7 +20,6 @@ module.exports = { const items = parseItems(content, date) date = date.subtract(1, 'd') for (let item of items) { - const prev = programs[programs.length - 1] const $item = cheerio.load(item) const channelAcronym = parseChannelAcronym(content) @@ -38,9 +37,9 @@ module.exports = { return programs }, - async channels({ country }) { + async channels() { const html = await axios - .get(`https://www.nos.pt/particulares/televisao/guia-tv/Pages/default.aspx`) + .get('https://www.nos.pt/particulares/televisao/guia-tv/Pages/default.aspx') .then(r => r.data) .catch(console.log) @@ -63,7 +62,7 @@ async function loadProgramDetails(channelAcronym, programId) { if (!channelAcronym || !programId) return {} const data = await axios .post( - `https://www.nos.pt/_layouts/15/Armstrong/ApplicationPages/EPGGetProgramsAndDetails.aspx/GetProgramDetails`, + 'https://www.nos.pt/_layouts/15/Armstrong/ApplicationPages/EPGGetProgramsAndDetails.aspx/GetProgramDetails', { programId, channelAcronym, diff --git a/sites/nos.pt/nos.pt.test.js b/sites/nos.pt/nos.pt.test.js index 5e7083ee..7ff15af1 100644 --- a/sites/nos.pt/nos.pt.test.js +++ b/sites/nos.pt/nos.pt.test.js @@ -1,5 +1,5 @@ // npm run channels:parse -- --config=./sites/nos.pt/nos.pt.config.js --output=./sites/nos.pt/nos.pt.channels.xml -// npx epg-grabber --config=sites/nos.pt/nos.pt.config.js --channels=sites/nos.pt/nos.pt.channels.xml --output=guide.xml --days=2 +// npm run grab -- --site=nos.pt const { parser, url } = require('./nos.pt.config.js') const fs = require('fs') @@ -74,7 +74,7 @@ it('can parse response', async () => { expect(results[0]).toMatchObject({ start: '2023-01-27T23:50:00.000Z', stop: '2023-01-28T00:36:00.000Z', - title: `Anatomia de Grey T.17 Ep.3`, + title: 'Anatomia de Grey T.17 Ep.3', description: 'Os médicos do Grey Sloan continuam a enfrentar a nova realidade do COVID-19 e lidam com um paciente conhecido e teimoso. Koracick fica encarregue dos internos e Link opera um terapeuta sexual.', icon: 'https://images.nos.pt/b6fd27f4bd0b404abd4c3fc4faa79024_resized_352x198.jpg' @@ -83,7 +83,7 @@ it('can parse response', async () => { expect(results[21]).toMatchObject({ start: '2023-01-28T21:38:00.000Z', stop: '2023-01-29T00:05:00.000Z', - title: `MasterChef Portugal T.1 Ep.10`, + title: 'MasterChef Portugal T.1 Ep.10', description: 'A maior competição de cozinha do mundo arranca ao comando de três dos mais conceituados chefs portugueses: Pedro Pena Bastos, Noélia Jerónimo e Ricardo Costa, que nos vão transmitir os seus conhecimentos e a sua paixão pela cozinha.', icon: 'https://images.nos.pt/8aa511d697f0401a88a0cb1ec2718cc3_resized_352x198.jpg' diff --git a/sites/novacyprus.com/novacyprus.com.channels.xml b/sites/novacyprus.com/novacyprus.com.channels.xml index 87d9322d..b06f7f31 100644 --- a/sites/novacyprus.com/novacyprus.com.channels.xml +++ b/sites/novacyprus.com/novacyprus.com.channels.xml @@ -1,34 +1,32 @@ - - - Animal Planet Africa - Boomerang Central & Eastern Europe - Disney Channel Middle East - EuroNews Ellinika - Eurosport 1 - Eurosport 2 - Fox Greece - Fox Life Greece - Vouli TV - Insight HD - Mad Greekz - Mad TV - MTV Live - MyZen TV - National Geographic Ellada - Nickelodeon Greece - Nova Cinema 1 - Nova Cinema 2 - Nova Cinema 3 - Nova Cinema 4 - Nova Life - Nova Sports 2 - Nova Sports 3 - Nova Sports 4 - Nova Sports 5 - Number 1 TV - One Channel - Smile TV - Viasat History HD - - \ No newline at end of file + + Animal Planet Africa + Boomerang Central & Eastern Europe + Disney Channel Middle East + EuroNews Ellinika + Eurosport 1 + Eurosport 2 + Fox Greece + Fox Life Greece + Vouli TV + Insight HD + Mad Greekz + Mad TV + MTV Live + MyZen TV + National Geographic Ellada + Nickelodeon Greece + Nova Cinema 1 + Nova Cinema 2 + Nova Cinema 3 + Nova Cinema 4 + Nova Life + Nova Sports 2 + Nova Sports 3 + Nova Sports 4 + Nova Sports 5 + Number 1 TV + One Channel + Smile TV + Viasat History HD + \ No newline at end of file diff --git a/sites/novacyprus.com/novacyprus.com.config.js b/sites/novacyprus.com/novacyprus.com.config.js index 60bf8ac4..5096014d 100644 --- a/sites/novacyprus.com/novacyprus.com.config.js +++ b/sites/novacyprus.com/novacyprus.com.config.js @@ -13,7 +13,7 @@ dayjs.extend(customParseFormat) module.exports = { site: 'novacyprus.com', days: 2, - url({ channel, date }) { + url({ date }) { return `https://www.novacyprus.com/api/v1/tvprogram/from/${date.format('YYYYMMDD')}/to/${date .add(1, 'd') .format('YYYYMMDD')}` @@ -35,9 +35,9 @@ module.exports = { return programs }, - async channels({ country, lang }) { + async channels() { const channels = await axios - .get(`https://www.novacyprus.com/api/v1/guide/dailychannels`) + .get('https://www.novacyprus.com/api/v1/guide/dailychannels') .then(r => r.data) .catch(console.log) diff --git a/sites/novacyprus.com/novacyprus.com.test.js b/sites/novacyprus.com/novacyprus.com.test.js index 51e79d05..282ce1e3 100644 --- a/sites/novacyprus.com/novacyprus.com.test.js +++ b/sites/novacyprus.com/novacyprus.com.test.js @@ -1,5 +1,5 @@ -// node ./scripts/channels.js --config=./sites/novacyprus.com/novacyprus.com.config.js --output=./sites/novacyprus.com/novacyprus.com.channels.xml -// npx epg-grabber --config=sites/novacyprus.com/novacyprus.com.config.js --channels=sites/novacyprus.com/novacyprus.com.channels.xml --output=guide.xml --days=2 +// npm run channels:parse -- --config=./sites/novacyprus.com/novacyprus.com.config.js --output=./sites/novacyprus.com/novacyprus.com.channels.xml +// npm run grab -- --site=novacyprus.com const { parser, url } = require('./novacyprus.com.config.js') const dayjs = require('dayjs') @@ -21,7 +21,8 @@ it('can generate valid url', () => { }) it('can parse response', () => { - const content = `{"nodes":[{"datetime":"2021-11-17 06:20:00","day":"Wednesday","numDay":17,"numMonth":11,"month":"November","channelName":"Cyprus Novacinema1HD","channelLog":"https:\/\/ssl2.novago.gr\/EPG\/jsp\/images\/universal\/film\/logo\/20200210\/000100\/XTV100000762\/d6a2f5e0-dbc0-49c7-9843-e3161ca5ae5d.png","cid":"42","ChannelId":"614","startingTime":"06:20","endTime":"08:10","title":"Δεσμοί Αίματος","description":"Θρίλερ Μυστηρίου","duration":"109","slotDuration":"110","bref":"COMMOBLOOX","mediaItems":[{"MediaListTypeId":"6","CdnUrl":"http:\/\/cache-forthnet.secure.footprint.net\/linear\/3\/0\/305608_COMMOBLOOX_GUIDE_STILL.jpg"},{"MediaListTypeId":"7","CdnUrl":"http:\/\/cache-forthnet.secure.footprint.net\/linear\/3\/0\/305608_COMMOBLOOX_POSTER_CROSS.jpg"},{"MediaListTypeId":"8","CdnUrl":"http:\/\/cache-forthnet.secure.footprint.net\/linear\/3\/0\/305608_COMMOBLOOX_ICON_CYP.jpg"},{"MediaListTypeId":"9","CdnUrl":"http:\/\/cache-forthnet.secure.footprint.net\/linear\/3\/0\/305608_COMMOBLOOX_POSTER_CYP.jpg"},{"MediaListTypeId":"10","CdnUrl":"http:\/\/cache-forthnet.secure.footprint.net\/linear\/3\/0\/305608_COMMOBLOOX_BACKGROUND_CYP.jpg"}]},{"datetime":"2021-11-17 06:00:00","day":"Wednesday","numDay":17,"numMonth":11,"month":"November","channelName":"Cyprus Novacinema2HD","channelLog":"https:\/\/ssl2.novago.gr\/EPG\/jsp\/images\/universal\/film\/logo\/20200210\/000100\/XTV100000763\/24e05354-d6ad-4949-bcb3-a81d1c1d2cba.png","cid":"62","ChannelId":"653","startingTime":"06:00","endTime":"07:40","title":"Ανυπόφοροι Γείτονες","description":"Κωμωδία","duration":"93","slotDuration":"100","bref":"NEIGHBORSX","mediaItems":[{"MediaListTypeId":"7","CdnUrl":"http:\/\/cache-forthnet.secure.footprint.net\/linear\/3\/1\/312582_NEIGHBORSX_POSTER_CROSS.jpg"},{"MediaListTypeId":"8","CdnUrl":"http:\/\/cache-forthnet.secure.footprint.net\/linear\/3\/1\/312582_NEIGHBORSX_ICON_CYP.jpg"},{"MediaListTypeId":"9","CdnUrl":"http:\/\/cache-forthnet.secure.footprint.net\/linear\/3\/1\/312582_NEIGHBORSX_POSTER_CYP.jpg"},{"MediaListTypeId":"10","CdnUrl":"http:\/\/cache-forthnet.secure.footprint.net\/linear\/3\/1\/312582_NEIGHBORSX_BACKGROUND_CYP.jpg"}]}]}` + const content = + '{"nodes":[{"datetime":"2021-11-17 06:20:00","day":"Wednesday","numDay":17,"numMonth":11,"month":"November","channelName":"Cyprus Novacinema1HD","channelLog":"https://ssl2.novago.gr/EPG/jsp/images/universal/film/logo/20200210/000100/XTV100000762/d6a2f5e0-dbc0-49c7-9843-e3161ca5ae5d.png","cid":"42","ChannelId":"614","startingTime":"06:20","endTime":"08:10","title":"Δεσμοί Αίματος","description":"Θρίλερ Μυστηρίου","duration":"109","slotDuration":"110","bref":"COMMOBLOOX","mediaItems":[{"MediaListTypeId":"6","CdnUrl":"http://cache-forthnet.secure.footprint.net/linear/3/0/305608_COMMOBLOOX_GUIDE_STILL.jpg"},{"MediaListTypeId":"7","CdnUrl":"http://cache-forthnet.secure.footprint.net/linear/3/0/305608_COMMOBLOOX_POSTER_CROSS.jpg"},{"MediaListTypeId":"8","CdnUrl":"http://cache-forthnet.secure.footprint.net/linear/3/0/305608_COMMOBLOOX_ICON_CYP.jpg"},{"MediaListTypeId":"9","CdnUrl":"http://cache-forthnet.secure.footprint.net/linear/3/0/305608_COMMOBLOOX_POSTER_CYP.jpg"},{"MediaListTypeId":"10","CdnUrl":"http://cache-forthnet.secure.footprint.net/linear/3/0/305608_COMMOBLOOX_BACKGROUND_CYP.jpg"}]},{"datetime":"2021-11-17 06:00:00","day":"Wednesday","numDay":17,"numMonth":11,"month":"November","channelName":"Cyprus Novacinema2HD","channelLog":"https://ssl2.novago.gr/EPG/jsp/images/universal/film/logo/20200210/000100/XTV100000763/24e05354-d6ad-4949-bcb3-a81d1c1d2cba.png","cid":"62","ChannelId":"653","startingTime":"06:00","endTime":"07:40","title":"Ανυπόφοροι Γείτονες","description":"Κωμωδία","duration":"93","slotDuration":"100","bref":"NEIGHBORSX","mediaItems":[{"MediaListTypeId":"7","CdnUrl":"http://cache-forthnet.secure.footprint.net/linear/3/1/312582_NEIGHBORSX_POSTER_CROSS.jpg"},{"MediaListTypeId":"8","CdnUrl":"http://cache-forthnet.secure.footprint.net/linear/3/1/312582_NEIGHBORSX_ICON_CYP.jpg"},{"MediaListTypeId":"9","CdnUrl":"http://cache-forthnet.secure.footprint.net/linear/3/1/312582_NEIGHBORSX_POSTER_CYP.jpg"},{"MediaListTypeId":"10","CdnUrl":"http://cache-forthnet.secure.footprint.net/linear/3/1/312582_NEIGHBORSX_BACKGROUND_CYP.jpg"}]}]}' const result = parser({ content, channel }).map(p => { p.start = p.start.toJSON() p.stop = p.stop.toJSON() @@ -43,7 +44,7 @@ it('can handle empty guide', () => { const result = parser({ date, channel, - content: `{"nodes":[],"total":0,"pages":0}` + content: '{"nodes":[],"total":0,"pages":0}' }) expect(result).toMatchObject([]) }) diff --git a/sites/novasports.gr/novasports.gr.channels.xml b/sites/novasports.gr/novasports.gr.channels.xml index 10ff7321..f28227f8 100644 --- a/sites/novasports.gr/novasports.gr.channels.xml +++ b/sites/novasports.gr/novasports.gr.channels.xml @@ -1,21 +1,19 @@ - - - Eurosport 1 HD - Eurosport 2 HD - Novasports1HD - Novasports2HD - Novasports3HD - Novasports4HD - Novasports5HD - Novasports6HD - Novasports Εxtra1 - Novasports Extra2 - Novasports Extra3 - Novasports Extra4 - ΝovasportsNews - Novasports Premier League - Novasports Prime - ΝovasportsStart - - + + Eurosport 1 HD + Eurosport 2 HD + Novasports1HD + Novasports2HD + Novasports3HD + Novasports4HD + Novasports5HD + Novasports6HD + Novasports Εxtra1 + Novasports Extra2 + Novasports Extra3 + Novasports Extra4 + ΝovasportsNews + Novasports Premier League + Novasports Prime + ΝovasportsStart + diff --git a/sites/novasports.gr/novasports.gr.config.js b/sites/novasports.gr/novasports.gr.config.js index 9fba886a..0721f670 100644 --- a/sites/novasports.gr/novasports.gr.config.js +++ b/sites/novasports.gr/novasports.gr.config.js @@ -10,7 +10,7 @@ dayjs.extend(timezone) module.exports = { site: 'novasports.gr', days: 2, - url: function ({ date, channel }) { + url: function ({ date }) { return `https://www.novasports.gr/wp-admin/admin-ajax.php?action=nova_get_template&template=tv-program/broadcast&dt=${date.format( 'YYYY-MM-DD' )}` @@ -43,13 +43,13 @@ module.exports = { async channels() { const html = await axios .get( - `https://www.novasports.gr/wp-admin/admin-ajax.php?action=nova_get_template&template=tv-program/broadcast&dt=2022-10-29` + 'https://www.novasports.gr/wp-admin/admin-ajax.php?action=nova_get_template&template=tv-program/broadcast&dt=2022-10-29' ) .then(r => r.data) .catch(console.log) const $ = cheerio.load(html) const items = $( - `#mc-broadcast-content:nth-child(2) > div > #channelist-slider > div.channelist-wrapper.slider-wrapper.content > div > div` + '#mc-broadcast-content:nth-child(2) > div > #channelist-slider > div.channelist-wrapper.slider-wrapper.content > div > div' ).toArray() return items.map(item => { const name = $(item).find('.channel').text().trim() diff --git a/sites/novasports.gr/novasports.gr.test.js b/sites/novasports.gr/novasports.gr.test.js index 97d4078b..45f71cc8 100644 --- a/sites/novasports.gr/novasports.gr.test.js +++ b/sites/novasports.gr/novasports.gr.test.js @@ -1,5 +1,5 @@ // npm run channels:parse -- --config=./sites/novasports.gr/novasports.gr.config.js --output=./sites/novasports.gr/novasports.gr.channels.xml -// npx epg-grabber --config=sites/novasports.gr/novasports.gr.config.js --channels=sites/novasports.gr/novasports.gr.channels.xml --output=guide.xml --days=2 +// npm run grab -- --site=novasports.gr const { parser, url } = require('./novasports.gr.config.js') const fs = require('fs') diff --git a/sites/nowplayer.now.com/nowplayer.now.com.channels.xml b/sites/nowplayer.now.com/nowplayer.now.com.channels.xml index 78e48579..ec3d6ee8 100644 --- a/sites/nowplayer.now.com/nowplayer.now.com.channels.xml +++ b/sites/nowplayer.now.com/nowplayer.now.com.channels.xml @@ -1,248 +1,246 @@ - - - ABC Australia Asia - Aljazeera English - Animal Planet - Animax Asia - Asian Food Network - Astro Cricket - AXN East Asia - BBC Earth Asia - BBC Lifestyle Asia - BBC World News - BeIn Sports 1 Hong Kong - BeIn Sports 2 Hong Kong - BeIn Sports Max 1 - BeIn Sports Max 2 - BeIn Sports Max 3 - Bloomberg TV - Boomerang - Cartoon Network - CBeebies Asia - CCTV 1 - CCTV 4 Asia - Channel Adult - Cinemax - CNA - CNBC - CNN - Colors - CTI TV Asia - Da Vinci - Discovery Asia - Discovery Channel - Discovery Science - DMAX Southeast Asia - DreamWorks TV - DW Deutsch - DW English - EBC News Asia - ETTV Asia News - EuroNews English - Fight Sports - Food Network - France 24 English - France 24 Français - GMA Life TV - GMA News TV International - GMA Pinoy TV Asia-Pacific - HBO - HBO Family - HBO Hits - HBO Signature - HGTV - History - HKS TV - Ice Fire - KBS World - Lifetime - Movie Movie - MTV India - MUTV - National Geographic - National Geographic Wild - NHK World Japan - NHK World Premium - Nickelodeon - Nick Jr - Now 668 - Now Baogu Movies - Now Baogu Superstars - Now Business News Channel - Now Chinese Drama Channel - Now Data Channel - Now Direct - Now Golf 2 - Now Golf 3 - Now Jelli - Now News - Now Sports 1 - Now Sports 2 - Now Sports 3 - Now Sports 4 - Now Sports 4K - Now Sports 5 - Now Sports 6 - Now Sports 7 - Now Sports Plus - Now Sports Premier League 1 - Now Sports Premier League 2 - Now Sports Premier League 3 - Now Sports Premier League 4 - Now Sports Premier League 5 - Now Sports Premier League 6 - Now Sports Premier League TV - Now Sports Prime - Now Video Express - Outdoor Channel International - Phoenix Chinese Channel - Phoenix Hong Kong - Phoenix InfoNews Channel - Rock Entertainment - RT News - RugbyPass TV - Sansha TV - Shenzhen Satellite TV - Sky News UK - SET India - Sony SAB TV Asia - Star Bharat India - Star Chinese Movies South East Asia - Star Gold - Star Plus Southeast Asia - Macau Asia Satellite TV - TFC Asia-Pacific - Thrill - TLC Southeast Asia - Travel Channel Asia - TV5Monde Asie - TV5Monde Style HD - TVBS Asia - TVN Asia - TVS 2 Southern TV - ViuTV - ViuTVsix - Warner TV Southeast Asia - Yicai TV - Zee Cinema Asia - Zee News - Zee TV Asia Pacific - Zhejiang Satellite TV - ABC Australia Asia - Aljazeera English - Animal Planet - Animax Asia - Asian Food Network - Astro Cricket - AXN - BBC Earth - BBC Lifestyle - BeIn Sports 1 - BeIn Sports 2 - BeIn Sports Max 1 - BeIn Sports Max 2 - BeIn Sports Max 3 - Bloomberg TV Asia - Boomerang South East Asia - Cartoon Network Asia - CBeebies Asia - CCTV 1 - CCTV 4 Asia - Channel Adult - Cinemax Asia - CNA - CNBC Asia-Pacific - Colors Asia Pacific - CTI TV Asia - Da Vinci Asia - Discovery Asia - Discovery Channel - Discovery Science - DMAX Southeast Asia - DreamWorks TV Asia - EBC News Asia - ETTV Asia News - Fight Sports - Food Network Asia - France 24 Français - GMA Pinoy TV Asia-Pacific - HBO Asia - HBO Family Asia - HBO Hits - HBO Signature Asia - HGTV Asia - History Asia - HKS TV - Ice Fire - KBS World - Lifetime Asia - Movie Movie - MTV India - MUTV - National Geographic Asia - National Geographic Wild Asia - Nickelodeon South East Asia - Nick Jr Asia - Now 668 - Now Baogu Movies - Now Baogu Superstars - Now Business News Channel - Now Chinese Drama Channel - Now Data Channel - Now Direct - Now Golf 2 - Now Golf 3 - Now Jelli - Now News - Now Sports 1 - Now Sports 2 - Now Sports 3 - Now Sports 4 - Now Sports 4K - Now Sports 5 - Now Sports 6 - Now Sports 7 - Now Sports Plus - Now Sports Premier League 1 - Now Sports Premier League 2 - Now Sports Premier League 3 - Now Sports Premier League 4 - Now Sports Premier League 5 - Now Sports Premier League 6 - Now Sports Premier League TV - Now Sports Prime - Now Video Express - Outdoor Channel International - Phoenix Chinese Channel - Phoenix Hong Kong - Phoenix InfoNews Channel - Rock Entertainment - RugbyPass TV - Sansha TV - Shenzhen Satellite TV - SET India - Sony SAB TV Asia - Star Bharat India - Star Chinese Movies South East Asia - Star Gold - Star Plus Southeast Asia - Macau Asia Satellite TV - TFC Asia-Pacific - Thrill - TLC Southeast Asia - Travel Channel Asia - TV5Monde Asie - TV5Monde Style HD - TVBS Asia - TVN Asia - TVS 2 Southern TV - ViuTV - ViuTVsix - Warner TV Southeast Asia - Yicai TV - Zee Cinema Asia - Zee TV Asia Pacific - Zhejiang Satellite TV - - \ No newline at end of file + + DW Deutsch + ABC Australia Asia + Aljazeera English + Animal Planet + Animax Asia + Asian Food Network + Astro Cricket + AXN East Asia + BBC Earth Asia + BBC Lifestyle Asia + BBC World News + BeIn Sports 1 Hong Kong + BeIn Sports 2 Hong Kong + BeIn Sports Max 1 + BeIn Sports Max 2 + BeIn Sports Max 3 + Bloomberg TV + Boomerang + Cartoon Network + CBeebies Asia + CCTV 1 + CCTV 4 Asia + Channel Adult + Cinemax + CNA + CNBC + CNN + Colors + CTI TV Asia + Da Vinci + Discovery Asia + Discovery Channel + Discovery Science + DMAX Southeast Asia + DreamWorks TV + DW English + EBC News Asia + ETTV Asia News + EuroNews English + Fight Sports + Food Network + France 24 English + France 24 Français + GMA Life TV + GMA News TV International + GMA Pinoy TV Asia-Pacific + HBO + HBO Family + HBO Hits + HBO Signature + HGTV + History + HKS TV + Ice Fire + KBS World + Lifetime + Movie Movie + MTV India + MUTV + National Geographic + National Geographic Wild + NHK World Japan + NHK World Premium + Nickelodeon + Nick Jr + Now 668 + Now Baogu Movies + Now Baogu Superstars + Now Business News Channel + Now Chinese Drama Channel + Now Data Channel + Now Direct + Now Golf 2 + Now Golf 3 + Now Jelli + Now News + Now Sports 1 + Now Sports 2 + Now Sports 3 + Now Sports 4 + Now Sports 4K + Now Sports 5 + Now Sports 6 + Now Sports 7 + Now Sports Plus + Now Sports Premier League 1 + Now Sports Premier League 2 + Now Sports Premier League 3 + Now Sports Premier League 4 + Now Sports Premier League 5 + Now Sports Premier League 6 + Now Sports Premier League TV + Now Sports Prime + Now Video Express + Outdoor Channel International + Phoenix Chinese Channel + Phoenix Hong Kong + Phoenix InfoNews Channel + Rock Entertainment + RT News + RugbyPass TV + Sansha TV + Shenzhen Satellite TV + Sky News UK + SET India + Sony SAB TV Asia + Star Bharat India + Star Chinese Movies South East Asia + Star Gold + Star Plus Southeast Asia + Macau Asia Satellite TV + TFC Asia-Pacific + Thrill + TLC Southeast Asia + Travel Channel Asia + TV5Monde Asie + TV5Monde Style HD + TVBS Asia + TVN Asia + TVS 2 Southern TV + ViuTV + ViuTVsix + Warner TV Southeast Asia + Yicai TV + Zee Cinema Asia + Zee News + Zee TV Asia Pacific + Zhejiang Satellite TV + ABC Australia Asia + Aljazeera English + Animal Planet + Animax Asia + Asian Food Network + Astro Cricket + AXN + BBC Earth + BBC Lifestyle + BeIn Sports 1 + BeIn Sports 2 + BeIn Sports Max 1 + BeIn Sports Max 2 + BeIn Sports Max 3 + Bloomberg TV Asia + Boomerang South East Asia + Cartoon Network Asia + CBeebies Asia + CCTV 1 + CCTV 4 Asia + Channel Adult + Cinemax Asia + CNA + CNBC Asia-Pacific + Colors Asia Pacific + CTI TV Asia + Da Vinci Asia + Discovery Asia + Discovery Channel + Discovery Science + DMAX Southeast Asia + DreamWorks TV Asia + EBC News Asia + ETTV Asia News + Fight Sports + Food Network Asia + France 24 Français + GMA Pinoy TV Asia-Pacific + HBO Asia + HBO Family Asia + HBO Hits + HBO Signature Asia + HGTV Asia + History Asia + HKS TV + Ice Fire + KBS World + Lifetime Asia + Movie Movie + MTV India + MUTV + National Geographic Asia + National Geographic Wild Asia + Nickelodeon South East Asia + Nick Jr Asia + Now 668 + Now Baogu Movies + Now Baogu Superstars + Now Business News Channel + Now Chinese Drama Channel + Now Data Channel + Now Direct + Now Golf 2 + Now Golf 3 + Now Jelli + Now News + Now Sports 1 + Now Sports 2 + Now Sports 3 + Now Sports 4 + Now Sports 4K + Now Sports 5 + Now Sports 6 + Now Sports 7 + Now Sports Plus + Now Sports Premier League 1 + Now Sports Premier League 2 + Now Sports Premier League 3 + Now Sports Premier League 4 + Now Sports Premier League 5 + Now Sports Premier League 6 + Now Sports Premier League TV + Now Sports Prime + Now Video Express + Outdoor Channel International + Phoenix Chinese Channel + Phoenix Hong Kong + Phoenix InfoNews Channel + Rock Entertainment + RugbyPass TV + Sansha TV + Shenzhen Satellite TV + SET India + Sony SAB TV Asia + Star Bharat India + Star Chinese Movies South East Asia + Star Gold + Star Plus Southeast Asia + Macau Asia Satellite TV + TFC Asia-Pacific + Thrill + TLC Southeast Asia + Travel Channel Asia + TV5Monde Asie + TV5Monde Style HD + TVBS Asia + TVN Asia + TVS 2 Southern TV + ViuTV + ViuTVsix + Warner TV Southeast Asia + Yicai TV + Zee Cinema Asia + Zee TV Asia Pacific + Zhejiang Satellite TV + \ No newline at end of file diff --git a/sites/nowplayer.now.com/nowplayer.now.com.config.js b/sites/nowplayer.now.com/nowplayer.now.com.config.js index 0b63e9b2..9cf554ed 100644 --- a/sites/nowplayer.now.com/nowplayer.now.com.config.js +++ b/sites/nowplayer.now.com/nowplayer.now.com.config.js @@ -35,7 +35,7 @@ module.exports = { }, async channels({ lang }) { const html = await axios - .get(`https://nowplayer.now.com/channels`, { headers: { Accept: 'text/html' } }) + .get('https://nowplayer.now.com/channels', { headers: { Accept: 'text/html' } }) .then(r => r.data) .catch(console.log) diff --git a/sites/nowplayer.now.com/nowplayer.now.com.test.js b/sites/nowplayer.now.com/nowplayer.now.com.test.js index f9bea918..da866de9 100644 --- a/sites/nowplayer.now.com/nowplayer.now.com.test.js +++ b/sites/nowplayer.now.com/nowplayer.now.com.test.js @@ -1,5 +1,5 @@ // npm run channels:parse -- --config=./sites/nowplayer.now.com/nowplayer.now.com.config.js --output=./sites/nowplayer.now.com/nowplayer.now.com.channels.xml --set=lang:zh -// npx epg-grabber --config=sites/nowplayer.now.com/nowplayer.now.com.config.js --channels=sites/nowplayer.now.com/nowplayer.now.com.channels.xml --output=guide.xml --timeout=30000 --days=2 +// npm run grab -- --site=nowplayer.now.com const { parser, url, request } = require('./nowplayer.now.com.config.js') const dayjs = require('dayjs') @@ -30,12 +30,13 @@ it('can generate valid url for tomorrow', () => { it('can generate valid request headers', () => { expect(request.headers({ channel })).toMatchObject({ - Cookie: `LANG=zh; Expires=null; Path=/; Domain=nowplayer.now.com` + Cookie: 'LANG=zh; Expires=null; Path=/; Domain=nowplayer.now.com' }) }) it('can parse response', () => { - const content = `[[{"key":"key_202111174524739","vimProgramId":"202111174524739","name":"ViuTVsix Station Closing","start":1637690400000,"end":1637715600000,"date":"20211124","startTime":"02:00AM","endTime":"09:00AM","duration":420,"recordable":false,"restartTv":false,"npvrProg":false,"npvrStartTime":0,"npvrEndTime":0,"cid":"viutvsix station closing","cc":"","isInWatchlist":false}]]` + const content = + '[[{"key":"key_202111174524739","vimProgramId":"202111174524739","name":"ViuTVsix Station Closing","start":1637690400000,"end":1637715600000,"date":"20211124","startTime":"02:00AM","endTime":"09:00AM","duration":420,"recordable":false,"restartTv":false,"npvrProg":false,"npvrStartTime":0,"npvrEndTime":0,"cid":"viutvsix station closing","cc":"","isInWatchlist":false}]]' const result = parser({ content }).map(p => { p.start = p.start.toJSON() p.stop = p.stop.toJSON() @@ -53,7 +54,7 @@ it('can parse response', () => { it('can handle empty guide', () => { const result = parser({ - content: `[[]]` + content: '[[]]' }) expect(result).toMatchObject([]) }) diff --git a/sites/nuevosiglo.com.uy/nuevosiglo.com.uy.channels.xml b/sites/nuevosiglo.com.uy/nuevosiglo.com.uy.channels.xml index 64854368..8e7d492d 100644 --- a/sites/nuevosiglo.com.uy/nuevosiglo.com.uy.channels.xml +++ b/sites/nuevosiglo.com.uy/nuevosiglo.com.uy.channels.xml @@ -1,179 +1,177 @@ - - - A24 - BBC WORLD - BLOOMBERG - C5N - SAETA - 26 TV HD - CANAL 4 MONTECARLO - CANAL 5 - CARTOONITO - CIUDAD MAGAZINE - CNN EN ESPAÑOL - CRONICA TV - CANAL VASCO - EUROCHANNEL - EUROPA EUROPA - EWTN - FOX NEWS - GALICIA TV - GOLDEN PLUS - GOLDEN PREMIER HD - GOL TV - HBO FAMILY HD - HBO - HBO MUNDI HD - HBO SIGNATURE HD - HBO XTREME HD - HOLA TV - KANAL D DRAMA - LN+ - LAS ESTRELLAS HD - NS EVENTOS 1 - NS EVENTOS 2 - NS EVENTOS 3 - NUEVO SIGLO TV - PASIONES - PLAYBOY - SEXTREME - TELEDOCE - TELEFE INTER - TN - TOONCAST - TRU TV - TVN CHILE - TEVECIUDAD - VENUS - VTV - VTV PLUS - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A24 + BBC WORLD + BLOOMBERG + C5N + SAETA + 26 TV HD + CANAL 4 MONTECARLO + CANAL 5 + CARTOONITO + CIUDAD MAGAZINE + CNN EN ESPAÑOL + CRONICA TV + CANAL VASCO + EUROCHANNEL + EUROPA EUROPA + EWTN + FOX NEWS + GALICIA TV + GOLDEN PLUS + GOLDEN PREMIER HD + GOL TV + HBO FAMILY HD + HBO + HBO MUNDI HD + HBO SIGNATURE HD + HBO XTREME HD + HOLA TV + KANAL D DRAMA + LN+ + LAS ESTRELLAS HD + NS EVENTOS 1 + NS EVENTOS 2 + NS EVENTOS 3 + NUEVO SIGLO TV + PASIONES + PLAYBOY + SEXTREME + TELEDOCE + TELEFE INTER + TN + TOONCAST + TRU TV + TVN CHILE + TEVECIUDAD + VENUS + VTV + VTV PLUS + diff --git a/sites/nuevosiglo.com.uy/nuevosiglo.com.uy.config.js b/sites/nuevosiglo.com.uy/nuevosiglo.com.uy.config.js index 7863522f..c337095d 100644 --- a/sites/nuevosiglo.com.uy/nuevosiglo.com.uy.config.js +++ b/sites/nuevosiglo.com.uy/nuevosiglo.com.uy.config.js @@ -30,8 +30,6 @@ module.exports = { const programId = parseProgramId($item) const details = await loadProgramDetails(programId) if (!details) continue - const start = parseStart(details) - const stop = parseStop(details) programs.push({ title: details.main_title, description: details.short_argument, diff --git a/sites/nuevosiglo.com.uy/nuevosiglo.com.uy.test.js b/sites/nuevosiglo.com.uy/nuevosiglo.com.uy.test.js index 443ffd68..580326bb 100644 --- a/sites/nuevosiglo.com.uy/nuevosiglo.com.uy.test.js +++ b/sites/nuevosiglo.com.uy/nuevosiglo.com.uy.test.js @@ -1,5 +1,5 @@ // npm run channels:parse -- --config=./sites/nuevosiglo.com.uy/nuevosiglo.com.uy.config.js --output=./sites/nuevosiglo.com.uy/nuevosiglo.com.uy.channels.xml -// npx epg-grabber --config=sites/nuevosiglo.com.uy/nuevosiglo.com.uy.config.js --channels=sites/nuevosiglo.com.uy/nuevosiglo.com.uy.channels.xml --output=guide.xml --days=2 +// npm run grab -- --site=nuevosiglo.com.uy const { parser, url } = require('./nuevosiglo.com.uy.config.js') const fs = require('fs') @@ -51,7 +51,7 @@ it('can parse response', async () => { expect(results[0]).toMatchObject({ start: '2023-02-10T01:11:00.000Z', stop: '2023-02-10T03:46:00.000Z', - title: `Jurassic World: Dominion`, + title: 'Jurassic World: Dominion', description: 'Años después de la destrucción de Isla Nublar, los dinosaurios viven y cazan junto a los humanos. Este equilibrio determinará, si los humanos seguirán siendo los depredadores máximos en un planeta que comparten con las criaturas temibles.', icon: 'https://img-ns.s3.amazonaws.com/grid_data/23354476.jpg', @@ -66,7 +66,7 @@ it('can parse response', async () => { expect(results[1]).toMatchObject({ start: '2023-02-11T02:06:00.000Z', stop: '2023-02-11T04:16:00.000Z', - title: `Black Adam`, + title: 'Black Adam', description: 'Black Adam es liberado de su tumba casi cinco mil años después de haber sido encarcelado y recibir sus poderes de los antiguos dioses. Ahora está listo para desatar su forma única de justicia en el mundo.', icon: 'https://img-ns.s3.amazonaws.com/grid_data/24638423.jpg', @@ -93,7 +93,7 @@ it('can parse response', async () => { it('can handle empty guide', async () => { const results = await parser({ channel, - content: `` + content: '' }) expect(results).toMatchObject([]) diff --git a/sites/ontvtonight.com/ontvtonight.com.config.js b/sites/ontvtonight.com/ontvtonight.com.config.js index 3c8c06fb..673be064 100644 --- a/sites/ontvtonight.com/ontvtonight.com.config.js +++ b/sites/ontvtonight.com/ontvtonight.com.config.js @@ -20,7 +20,7 @@ module.exports = { days: 2, url: function ({ date, channel }) { const [region, id] = channel.site_id.split('#') - let url = `https://www.ontvtonight.com` + let url = 'https://www.ontvtonight.com' if (region) url += `/${region}` url += `/guide/listings/channel/${id}.html?dt=${date.format('YYYY-MM-DD')}` @@ -32,7 +32,7 @@ module.exports = { items.forEach(item => { const prev = programs[programs.length - 1] const $item = cheerio.load(item) - const start = parseStart($item, date, channel) + let start = parseStart($item, date, channel) if (prev) { if (start.isBefore(prev.start)) { start = start.add(1, 'd') @@ -54,7 +54,7 @@ module.exports = { } function parseStart($item, date, channel) { - const [region, id] = channel.site_id.split('#') + const [region] = channel.site_id.split('#') const timezone = region ? tz[region] : tz['uk'] const timeString = $item('td:nth-child(1) > h5').text().trim() const dateString = `${date.format('YYYY-MM-DD')} ${timeString}` diff --git a/sites/ontvtonight.com/ontvtonight.com.test.js b/sites/ontvtonight.com/ontvtonight.com.test.js index 54dbf8a9..70b85b91 100644 --- a/sites/ontvtonight.com/ontvtonight.com.test.js +++ b/sites/ontvtonight.com/ontvtonight.com.test.js @@ -1,5 +1,5 @@ -// npx epg-grabber --config=sites/ontvtonight.com/ontvtonight.com.config.js --channels=sites/ontvtonight.com/ontvtonight.com_au.channels.xml --output=guide.xml --days=2 -// npx epg-grabber --config=sites/ontvtonight.com/ontvtonight.com.config.js --channels=sites/ontvtonight.com/ontvtonight.com_us.channels.xml --output=guide.xml --days=2 +// npm run grab -- --site=ontvtonight.com +// npm run grab -- --site=ontvtonight.com const { parser, url } = require('./ontvtonight.com.config.js') const dayjs = require('dayjs') @@ -13,7 +13,8 @@ const channel = { site_id: 'au#1692/7two', xmltv_id: '7two.au' } -const content = ` 12:10 am What A Carry On 12:50 am Bones The Devil In The Details 10:50 pm Inspector Morse: The Remorseful Day ` +const content = + ' 12:10 am What A Carry On 12:50 am Bones The Devil In The Details 10:50 pm Inspector Morse: The Remorseful Day ' it('can generate valid url', () => { expect(url({ channel, date })).toBe( @@ -32,18 +33,18 @@ it('can parse response', () => { { start: '2021-11-24T13:10:00.000Z', stop: '2021-11-24T13:50:00.000Z', - title: `What A Carry On` + title: 'What A Carry On' }, { start: '2021-11-24T13:50:00.000Z', stop: '2021-11-25T11:50:00.000Z', - title: `Bones`, + title: 'Bones', description: 'The Devil In The Details' }, { start: '2021-11-25T11:50:00.000Z', stop: '2021-11-25T12:50:00.000Z', - title: `Inspector Morse: The Remorseful Day` + title: 'Inspector Morse: The Remorseful Day' } ]) }) @@ -52,7 +53,7 @@ it('can handle empty guide', () => { const result = parser({ date, channel, - content: `` + content: '' }) expect(result).toMatchObject([]) }) diff --git a/sites/ontvtonight.com/ontvtonight.com_au.channels.xml b/sites/ontvtonight.com/ontvtonight.com_au.channels.xml index 2f69c243..60c6b551 100644 --- a/sites/ontvtonight.com/ontvtonight.com_au.channels.xml +++ b/sites/ontvtonight.com/ontvtonight.com_au.channels.xml @@ -1,55 +1,53 @@ - - - 10 Bold - 10 Peach - 10 Shake - 7 flix - 7 mate - 7 Two - 9 Gem - 9 Go! - 9 Life - 9 Rush - ABC Kids / ABC TV Plus - ABC ME - ABC News - ABC TV - A&E Australia - Ten - Seven - Nine - ESPN Australia - Fox 8 - Fox Arena - Fox Classics - Fox Comedy - Fox Crime - Fox Docos - Fox Funny - Fox News - Fox One - Fox SciFi - Fox Showcase - Fox Sleuth - Foxtel Movies Ultra HD - Foxtel Movies Action - Foxtel Movies Comedy - Foxtel Movies Drama - Foxtel Movies Family - Foxtel Movies Greats - Foxtel Movies Kids - Foxtel Movies Premiere - Foxtel Movies Romance - Foxtel Movies Thriller - NITV - PBS Kids - Racing.com - SBS Food - SBS One - SBS World Movies - SBS WorldWatch - Sky News Regional - SpreeTV - - + + 10 Bold + 10 Peach + 10 Shake + 7 flix + 7 mate + 7 Two + 9 Gem + 9 Go! + 9 Life + 9 Rush + ABC Kids / ABC TV Plus + ABC ME + ABC News + ABC TV + A&E Australia + Ten + Seven + Nine + ESPN Australia + Fox 8 + Fox Arena + Fox Classics + Fox Comedy + Fox Crime + Fox Docos + Fox Funny + Fox News + Fox One + Fox SciFi + Fox Showcase + Fox Sleuth + Foxtel Movies Action + Foxtel Movies Comedy + Foxtel Movies Drama + Foxtel Movies Family + Foxtel Movies Greats + Foxtel Movies Kids + Foxtel Movies Premiere + Foxtel Movies Romance + Foxtel Movies Thriller + Foxtel Movies Ultra HD + NITV + PBS Kids + Racing.com + SBS One + SBS Food + SBS World Movies + SBS WorldWatch + Sky News Regional + SpreeTV + diff --git a/sites/ontvtonight.com/ontvtonight.com_ie.channels.xml b/sites/ontvtonight.com/ontvtonight.com_ie.channels.xml index 050b17b1..10b695ea 100644 --- a/sites/ontvtonight.com/ontvtonight.com_ie.channels.xml +++ b/sites/ontvtonight.com/ontvtonight.com_ie.channels.xml @@ -1,8 +1,6 @@ - - - Oireachtas TV - RTÉ News - TG 4 - - \ No newline at end of file + + Oireachtas TV + RTÉ News + TG 4 + \ No newline at end of file diff --git a/sites/ontvtonight.com/ontvtonight.com_uk.channels.xml b/sites/ontvtonight.com/ontvtonight.com_uk.channels.xml index c325c20c..0126862f 100644 --- a/sites/ontvtonight.com/ontvtonight.com_uk.channels.xml +++ b/sites/ontvtonight.com/ontvtonight.com_uk.channels.xml @@ -1,103 +1,101 @@ - - - E4 Extra - 4Seven - 5 Action - 5 Select - 5 Star - 5 USA - 92 News - Ahlulbayt TV - Akaal Channel UK - Aljazeera English - BBC Four - BBC News - BBC One - BBC One London - BBC One Scotland - BBC Parliament - BBC Red Button 1 - BBC Two - Blaze UK - Box Hits - Brit Asia TV - CBBC - CBeebies UK - CBS Drama UK - CBS Justice UK - CBS Reality UK - Challenge UK - Challenge +1 UK - Channel 5 - Channel 5 +1 - CITV - Create and Craft - Cruise 1st TV - Dave ja vu - Dave UK - DMAX UK - Drama UK - Drama UK +1 - E4 UK - E4 UK +1 - Eman Channel - Film 4 UK - Film 4 UK +1 - Food Network UK - ViaplayXtra - Gems TV - Great! Movies - Great! Movies Action - Great! Movies Classic - Great! Movies Classic +1 - Great! TV - Great! TV +1 - HGTV UK - Horror Channel UK - - Ideal World - ITV 2 - ITV 2 +1 - ITV 3 - ITV 3 +1 - ITV 4 - ITV 4 +1 - ITV Be - ITV London - Jewellery Maker - Kanshi TV - KTO - London Live - More 4 UK - Now 80's - PBS America - Pick UK - Pop - Quest Red UK - Quest Red UK +1 - Quest UK - Quest UK +1 - QVC Beauty - QVC Style UK - QVC UK - Racing TV - Really UK - RT News - RT UK - Sangat TV - SBN International - Sky Arts UK - Sky Max UK - Smithsonian Channel UK - Spotlight TV - Talking Pictures TV - TBN UK - The Box UK - Tiny Pop - TJC - Together TV - Yesterday - Yesterday +1 - - + + + 4Seven + 5 Action + 5 Select + 5 Star + 5 USA + 92 News + Ahlulbayt TV + Akaal Channel UK + Aljazeera English + BBC Four + BBC News + BBC One + BBC One London + BBC One Scotland + BBC Parliament + BBC Red Button 1 + BBC Two + Blaze UK + Box Hits + Brit Asia TV + CBBC + CBeebies UK + CBS Drama UK + CBS Justice UK + CBS Reality UK + Challenge UK + Challenge +1 UK + Channel 5 + Channel 5 +1 + CITV + Create and Craft + Cruise 1st TV + Dave UK + Dave ja vu + DMAX UK + Drama UK + Drama UK +1 + E4 UK + E4 Extra + E4 UK +1 + Eman Channel + Film 4 UK + Film 4 UK +1 + Food Network UK + Gems TV + Great! Movies + Great! Movies Action + Great! Movies Classic + Great! Movies Classic +1 + Great! TV + Great! TV +1 + HGTV UK + Ideal World + ITV London + ITV 2 + ITV 2 +1 + ITV 3 + ITV 3 +1 + ITV 4 + ITV 4 +1 + ITV Be + Jewellery Maker + Kanshi TV + KTO + Horror Channel UK + London Live + More 4 UK + Now 80's + PBS America + Pick UK + Pop + Quest Red UK + Quest Red UK +1 + Quest UK + Quest UK +1 + QVC Beauty + QVC Style UK + QVC UK + Racing TV + Really UK + RT News + RT UK + Sangat TV + SBN International + Sky Arts UK + Sky Max UK + Smithsonian Channel UK + Spotlight TV + Talking Pictures TV + TBN UK + The Box UK + Tiny Pop + TJC + Together TV + ViaplayXtra + Yesterday + Yesterday +1 + diff --git a/sites/ontvtonight.com/ontvtonight.com_us.channels.xml b/sites/ontvtonight.com/ontvtonight.com_us.channels.xml index aee570e4..f8e656e9 100644 --- a/sites/ontvtonight.com/ontvtonight.com_us.channels.xml +++ b/sites/ontvtonight.com/ontvtonight.com_us.channels.xml @@ -1,41 +1,39 @@ - - - ABC East - ACC Network - ActionMAX (East) - AMC (East) - Animal Planet (East) - BBC America (East) - beIN Sports (English) - BET Her West - BET Jams - BET Soul - Big Ten Network (National) - Cheddar News - De Película Clásico - De Película - De Película EUA (USA) - Investigation Discovery West - K16IW CMC-USA - K16IW CMC-TV - Sports News Highlights (KDNU-LD5) Las Vegas, NV - MeTV (KITV-DT2) Honolulu, HI - Hawaii TV (KITV-DT3) Honolulu, HI - MeTV (KREG-TV) Glenwood Springs, CO - KYAZ MeTV+ - MSG WNY - News12 Bronx - News12 Brooklyn - News12 New Jersey - News 12 Hudson Valley - News12 Westchester - Lifetime Movies West - Lifetime West - TBS Superstation (East) - truTV HDTV (West) - CBS (WCBS) - XEWT 12 BC - XHBC Tu Canal HDTV - - + + ABC East + ACC Network + ActionMAX (East) + AMC (East) + Animal Planet (East) + BBC America (East) + beIN Sports (English) + BET Her West + BET Jams + BET Soul + Big Ten Network (National) + Cheddar News + Investigation Discovery West + K16IW CMC-USA + K16IW CMC-TV + Sports News Highlights (KDNU-LD5) Las Vegas, NV + MeTV (KITV-DT2) Honolulu, HI + Hawaii TV (KITV-DT3) Honolulu, HI + MeTV (KREG-TV) Glenwood Springs, CO + KYAZ MeTV+ + Lifetime Movies West + Lifetime West + MSG WNY + News12 Bronx + News12 Brooklyn + News 12 Hudson Valley + News12 New Jersey + News12 Westchester + TBS Superstation (East) + truTV HDTV (West) + CBS (WCBS) + De Película Clásico + De Película + De Película EUA (USA) + XEWT 12 BC + XHBC Tu Canal HDTV + diff --git a/sites/osn.com/osn.com.channels.xml b/sites/osn.com/osn.com.channels.xml deleted file mode 100644 index c46b56a8..00000000 --- a/sites/osn.com/osn.com.channels.xml +++ /dev/null @@ -1,213 +0,0 @@ - - - - - - - - - - Kapatid TV5 - Al Aan TV - Al Dafrah TV - Alfa Series +2 - Alfa Series Channel - AL Hurra HD - AlMamlaka TV - Al Safwa - Al Wosta from Al Dhaid - Al Yawm - ANC - Arirang TV - ART Aflam 1 - ART Aflam 2 - ART Cinema - Hekayat - Hekayat 2 - B4U Aflam - B4U Plus - BabyTV Europe - Bahrain TV - BBC Arabic - BBC World - Bloomberg - CGTN - CGTN Arabic - Cinema 1 - Cinema 2 - Cinema One Global - Cine Mo - CNBC Arabia - CNBC - Crime + Investigation Network - Discovery HD - Discovery Science HD - Disney HD - Disney Junior - Dubai Racing 1 HD - Dubai Racing 3 - E! Entertainment HD - Fann - France 24 - France 24 English - GMA Life TV - GMA News TV - GMA Pinoy TV - H2 HD - History HD - Discovery ID - KTV1 HD - KTV2 HD - KTV Majlis HD - Al Qurain HD - KTV Arabe HD - KTV Ethraa HD - KTV Sport HD - KTV Sport Plus HD - Madani TV - Marina TV - Moonbug Kids - MTV 00s - MTV Live HD - Music Now - Myx - Nat Geo HD - Nat Geo Wild HD - NHK World TV - Nickelodeon HD - Nick Jr - NickToons HD - OSN Comedy - OSN Family - OSN Kids - OSN Kidzone - OSN Living - OSN Mezze - OSN Movies Action - OSN Movies Hollywood - OSN Movies Premiere - OSN Movies Premiere +2 - OSN News - OSN Popup - OSN Series Prime - OSN Showcase - OSN W - OSN Yahala - OSN Yahala Aflam - OSN Yahala Bil Arabi - PBA Rush - Al Roya TV - Rusiya Al Yawm - Sharjah Sport HD - Sharjah TV - Sharqiya from Kalba - Sky News Arabia - Sky News HD - Star Movies HD - Star World HD - DZMM Teleradyo - TFC - TLC HD - Kapatid TV5 - Al Aan TV - Al Dafrah TV - Alfa Series +2 - Alfa Series Channel - AL Hurra HD - AlMamlaka TV - Al Safwa - Al Wosta from Al Dhaid - Al Yawm - ANC - Arirang TV - ART Aflam 1 - ART Aflam 2 - ART Cinema - Hekayat - Hekayat 2 - B4U Aflam - B4U Plus - BabyTV Europe - Bahrain TV - BBC Arabic - BBC World - Bloomberg - CGTN - CGTN Arabic - Cinema 1 - Cinema 2 - Cinema One Global - Cine Mo - CNBC Arabia - CNBC - Crime + Investigation Network - Discovery HD - Discovery Science HD - Disney HD - Disney Junior - Dubai Racing 1 HD - Dubai Racing 3 - E! Entertainment HD - Fann - France 24 - France 24 English - GMA Life TV - GMA News TV - GMA Pinoy TV - H2 HD - History HD - Discovery ID - KTV1 HD - KTV2 HD - KTV Majlis HD - Al Qurain HD - KTV Arabe HD - KTV Ethraa HD - KTV Sport HD - KTV Sport Plus HD - Madani TV - Marina TV - Moonbug Kids - MTV 00s - MTV Live HD - Music Now - Myx - Nat Geo HD - Nat Geo Wild HD - NHK World TV - Nickelodeon HD - Nick Jr - NickToons HD - OSN Comedy - OSN Family - OSN Kids - OSN Kidzone - OSN Living - OSN Mezze - OSN Movies Action - OSN Movies Hollywood - OSN Movies Premiere - OSN Movies Premiere +2 - OSN News - OSN Popup - OSN Series Prime - OSN Showcase - OSN W - OSN Yahala - OSN Yahala Aflam - OSN Yahala Bil Arabi - PBA Rush - Al Roya TV - Rusiya Al Yawm - Sharjah Sport HD - Sharjah TV - Sharqiya from Kalba - Sky News Arabia - Sky News HD - Star Movies HD - Star World HD - DZMM Teleradyo - TFC - TLC HD - - \ No newline at end of file diff --git a/sites/osn.com/osn.com.config.js b/sites/osn.com/osn.com.config.js index cceabbfc..955b0756 100644 --- a/sites/osn.com/osn.com.config.js +++ b/sites/osn.com/osn.com.config.js @@ -6,10 +6,9 @@ dayjs.extend(utc) dayjs.extend(timezone) module.exports = { - skip: true, // NOTE: return an HTTP error 302 on requests from GitHub server (https://github.com/iptv-org/epg/issues/1654#issuecomment-1382915005) site: 'osn.com', days: 2, - url: `https://www.osn.com/CMSPages/TVScheduleWebService.asmx/GetTVChannelsProgramTimeTable`, + url: 'https://www.osn.com/CMSPages/TVScheduleWebService.asmx/GetTVChannelsProgramTimeTable', request: { method: 'POST', headers: { @@ -58,7 +57,7 @@ function parseDuration(item) { return parseInt(item.TotalDivWidth / 4.8) } -function parseStart(item, channel) { +function parseStart(item) { const time = item.StartDateTime return dayjs.tz(time, 'DD MMM YYYY, HH:mm', 'Asia/Dubai') diff --git a/sites/osn.com/osn.com_ar.channels.xml b/sites/osn.com/osn.com_ar.channels.xml new file mode 100644 index 00000000..4c123011 --- /dev/null +++ b/sites/osn.com/osn.com_ar.channels.xml @@ -0,0 +1,104 @@ + + + Kapatid TV5 + Al Aan TV + Al Dafrah TV + Alfa Series +2 + Alfa Series Channel + AL Hurra HD + AlMamlaka TV + Al Safwa + Al Wosta from Al Dhaid + Al Yawm + ANC + Arirang TV + ART Aflam 1 + ART Aflam 2 + ART Cinema + Hekayat + Hekayat 2 + B4U Aflam + B4U Plus + BabyTV Europe + Bahrain TV + BBC Arabic + BBC World + Bloomberg + CGTN + CGTN Arabic + Cinema 1 + Cinema 2 + Cinema One Global + Cine Mo + CNBC Arabia + CNBC + Crime + Investigation Network + Discovery HD + Discovery Science HD + Disney HD + Disney Junior + Dubai Racing 1 HD + Dubai Racing 3 + E! Entertainment HD + Fann + France 24 + France 24 English + GMA Life TV + GMA News TV + GMA Pinoy TV + H2 HD + History HD + Discovery ID + KTV1 HD + KTV2 HD + KTV Majlis HD + Al Qurain HD + KTV Arabe HD + KTV Ethraa HD + KTV Sport HD + KTV Sport Plus HD + Madani TV + Marina TV + Moonbug Kids + MTV 00s + MTV Live HD + Music Now + Myx + Nat Geo HD + Nat Geo Wild HD + NHK World TV + Nickelodeon HD + Nick Jr + NickToons HD + OSN Comedy + OSN Family + OSN Kids + OSN Kidzone + OSN Living + OSN Mezze + OSN Movies Action + OSN Movies Hollywood + OSN Movies Premiere + OSN Movies Premiere +2 + OSN News + OSN Popup + OSN Series Prime + OSN Showcase + OSN W + OSN Yahala + OSN Yahala Aflam + OSN Yahala Bil Arabi + PBA Rush + Al Roya TV + Rusiya Al Yawm + Sharjah Sport HD + Sharjah TV + Sharqiya from Kalba + Sky News Arabia + Sky News HD + Star Movies HD + Star World HD + DZMM Teleradyo + TFC + TLC HD + \ No newline at end of file diff --git a/sites/osn.com/osn.com_en.channels.xml b/sites/osn.com/osn.com_en.channels.xml new file mode 100644 index 00000000..d69387d3 --- /dev/null +++ b/sites/osn.com/osn.com_en.channels.xml @@ -0,0 +1,104 @@ + + + Kapatid TV5 + Al Aan TV + Al Dafrah TV + Alfa Series +2 + Alfa Series Channel + AL Hurra HD + AlMamlaka TV + Al Safwa + Al Wosta from Al Dhaid + Al Yawm + ANC + Arirang TV + ART Aflam 1 + ART Aflam 2 + ART Cinema + Hekayat + Hekayat 2 + B4U Aflam + B4U Plus + BabyTV Europe + Bahrain TV + BBC Arabic + BBC World + Bloomberg + CGTN + CGTN Arabic + Cinema 1 + Cinema 2 + Cinema One Global + Cine Mo + CNBC Arabia + CNBC + Crime + Investigation Network + Discovery HD + Discovery Science HD + Disney HD + Disney Junior + Dubai Racing 1 HD + Dubai Racing 3 + E! Entertainment HD + Fann + France 24 + France 24 English + GMA Life TV + GMA News TV + GMA Pinoy TV + H2 HD + History HD + Discovery ID + KTV1 HD + KTV2 HD + KTV Majlis HD + Al Qurain HD + KTV Arabe HD + KTV Ethraa HD + KTV Sport HD + KTV Sport Plus HD + Madani TV + Marina TV + Moonbug Kids + MTV 00s + MTV Live HD + Music Now + Myx + Nat Geo HD + Nat Geo Wild HD + NHK World TV + Nickelodeon HD + Nick Jr + NickToons HD + OSN Comedy + OSN Family + OSN Kids + OSN Kidzone + OSN Living + OSN Mezze + OSN Movies Action + OSN Movies Hollywood + OSN Movies Premiere + OSN Movies Premiere +2 + OSN News + OSN Popup + OSN Series Prime + OSN Showcase + OSN W + OSN Yahala + OSN Yahala Aflam + OSN Yahala Bil Arabi + PBA Rush + Al Roya TV + Rusiya Al Yawm + Sharjah Sport HD + Sharjah TV + Sharqiya from Kalba + Sky News Arabia + Sky News HD + Star Movies HD + Star World HD + DZMM Teleradyo + TFC + TLC HD + \ No newline at end of file diff --git a/sites/pbsguam.org/pbsguam.org.channels.xml b/sites/pbsguam.org/pbsguam.org.channels.xml index 39d07196..52a795ba 100644 --- a/sites/pbsguam.org/pbsguam.org.channels.xml +++ b/sites/pbsguam.org/pbsguam.org.channels.xml @@ -1,6 +1,4 @@ - - - PBS Guam (KGTF) Hagåtña, Guam - - \ No newline at end of file + + PBS Guam (KGTF) Hagåtña, Guam + \ No newline at end of file diff --git a/sites/pbsguam.org/pbsguam.org.config.js b/sites/pbsguam.org/pbsguam.org.config.js index e4392f0d..5f0ce258 100644 --- a/sites/pbsguam.org/pbsguam.org.config.js +++ b/sites/pbsguam.org/pbsguam.org.config.js @@ -23,9 +23,14 @@ module.exports = { } function parseItems(content, date) { - const [_, json] = content.match(/EventsSchedule_1 = (.*);/i) || [null, null] - if (!json) return [] - const data = JSON.parse(json) + const [, json] = content.match(/EventsSchedule_1 = (.*);/i) || [null, ''] + let data + try { + data = JSON.parse(json) + } catch (error) { + return [] + } + if (!data || !Array.isArray(data.feed)) return [] return data.feed.filter( diff --git a/sites/pbsguam.org/pbsguam.org.test.js b/sites/pbsguam.org/pbsguam.org.test.js index b491246e..732b4f06 100644 --- a/sites/pbsguam.org/pbsguam.org.test.js +++ b/sites/pbsguam.org/pbsguam.org.test.js @@ -1,4 +1,4 @@ -// npx epg-grabber --config=sites/pbsguam.org/pbsguam.org.config.js --channels=sites/pbsguam.org/pbsguam.org.channels.xml --output=guide.xml --days=2 +// npm run grab -- --site=pbsguam.org const { parser, url } = require('./pbsguam.org.config.js') const dayjs = require('dayjs') @@ -20,7 +20,7 @@ it('can generate valid url', () => { it('can parse response', () => { const content = ` ` const result = parser({ date, content }).map(p => { @@ -42,7 +42,7 @@ it('can handle empty guide', () => { const result = parser({ date, channel, - content: ` ` + content: ' ' }) expect(result).toMatchObject([]) }) diff --git a/sites/plex.tv/plex.tv.channels.xml b/sites/plex.tv/plex.tv.channels.xml index 98add2a0..6d19c7ca 100644 --- a/sites/plex.tv/plex.tv.channels.xml +++ b/sites/plex.tv/plex.tv.channels.xml @@ -1,345 +1,343 @@ - - - - 24 Hour Free Movies - ACCDN - AccuWeather NOW - ACL Cornhole TV - ACTION!!! - Action News Jax - AfroLandTV - AFV Family - ALF - ALLBLK Gems - All Reality WE tv - All Weddings WE tv - ALTRD.TV - AMC Thrillers - Anger Management - Antiques Roadshow UK - Antiques Road Trip - Are We There Yet? - ARTFLIX - Movie Classics - ARTS TWG+ - AsianCrush - At Home with Family Handyman - AXS TV NOW - BABY SHARK TV - BACKSTAGE - BBC Food - BBC Home & Garden - Beautiful Planet - beIN SPORTS XTRA - Best TV Ever - Billiard TV - BITE - Bjgtjme - Free Movies - BlackPix - Bloomberg Quicktake - Bloomberg TV - Boonie Cubs TV - Boston 25 News - CampusLore Sports - Caught in Providence - Cheddar News - Chicken Soup for the Soul - ChiveTV - Choppertown - CineLife - Cinema Libre Channel - CINEPRIDE - Cine Sureño - Cineverse Selects - Classic Doctor Who - Classic Rock Network - ClixTV - Comedy Dynamics - COMMUNE - CONtv - CONtv Anime - Cooking Panda - Cowboy Way - Crackle - Crime 360 - Dark Matter TV - Discover Film - Doctors - Documentary+ - Docurama - Don't Tell The Bride - Dove - Dungeon TV - Edge Sport - Electric Now - EL REY - Entrepreneur TV - ESTV - Euronews - Euronews Français - Euronews Deutsch - Euronews Italiano - FailArmy - FamilyTime - Farscape - Fight Network - Filmstream - Fite 24/7 - Flash - FLOU Cine - FOX13 Memphis - FOX23 Tulsa - Freebie TV - Freebie TV - Los Pitufos - FrightFlix - FTF Sports - Fubo Sports Network - FUEL TV - GAGO TV - Galxy TV - Game Show Central - GFN TV - Glewed TV - GoTraveler - GoUSA TV - Go Wild - Gravitas Adrenaline - Gravitas Documentaries - Gravitas Movies - Grjngo - Western Movies - GUSTOTV - Hallmark Movies & More - Hannibal - HappiTV - Hard Knocks - HBCU-GO Sports - History Hit - Hi-YAH! - Home.Made.Nation - Humor Mill - i24NEWS Updates - IFC Films Picks - IGN1 - IMPACT Wrestling - Impossible - Quiz Show - INFAST - Johnny Carson TV - Journy - JOURNY Presents: America the Beautiful - Judge Faith - Julia Child - LOL! Network - Kidoodle TV - KidsFlix - Kids Pang TV - Kin - Kino Cult - KIRO 7 Seattle - KMTV - La Bocina Latina - La Corriente - Law & Crime - Local Now Bergen County - Local Now Long Island - Local Now Manhattan - Local Now Newburgh - Local Now New York City - Local Now White Plains - LOL! Stand Up - Lone Star Network - Love Destination - Love Nature - Made In Hollywood - MagellanTV NOW - Maverick Black Cinema - MAVTV Select - MBC - MegaNoticias - MHz Now - Midnight Pulp - MMA TV - MOB TV - Moconomy - Economy & Finance Infotainment - More U - Motorvision TV - MOVIESPHERE - MST3K - Mystery Alley - NBC News NOW - NEW K.MOVIES - NEW K-POP - News 12 New York - Newsmax TV - Newsy - NHRA TV - Ninja Kidz TV - Nosey - OnDemandChina - Outdoor America - Outside - Overtime - Party Poker TV - Pattrn - PBS Antiques Roadshow - PBS Nature - People are Awesome - PeopleTV - PlayWorks - pocket.watch - Poker Night TV - Popcornflix - Popstar! TV - POPSUGAR Fitness - Portlandia - Pro Wrestling TV - PW Kids - Qello Concerts by Stingray - QwestTV Classical - QwestTV Jazz & Beyond - QwestTV Mix - Racing America - Rakuten Viki - RCN Más - Real Life - Real Nosey - Real Stories - Real Wild - RetroCrush - Reuters TV - Revry - RevryNews - Runtime - Ryan and Friends - Samuel Goldwyn Channel - Samuel Goldwyn Classics - Samuel Goldwyn International - Scream Factory TV - Shemaroo Bollywood - Shorts - Shout! Cult - Shout! Factory TV Stream - Skills + Thrills - SKWAD - Slightly Off IFC - SLOPES - Sonic TV - Sony KAL - So...Real - So Yummy - Space Channel - Space Science Now - Spark TV Light & Love - SPEEDVISION - SportsGrid - Stadium - Stingray Classica Stream - Classic Rock - Stingray CMusic - Stingray DJAZZ - Easy Listening - Euro Hits - Everything ‘80s - Éxitos del Momento - Flashback 70s - Greatest Holiday Hits - Hip-Hop/R&B - Hit List - Hot Country - Stingray Karaoke - Stingray Naturescape - Nothin' But 90s - Pop Adult - Alternative - Smooth Jazz - Soul Storm - The Spa - Today's K-Pop - Y2K - Stories by AMC - Surf Now TV - Swerve Sports - Tastemade - TED - TG Junior - The Archive - The Boat Show - The Bob Ross Channel - The Carol Burnett Show - The Design Network - The Elvis Presley Channel - The Film Detective - The Grid - The Hill TV - The Pet Collective - The Preview Channel - The Walking Dead Universe - Weather Channel Español - This Old House - Times Now Navbharat - TODAY All Day - TokuSHOUTsu - Toon Goggles - Top Gear - Trailer Park Boys: The SwearNet Show - Trailers From Hell - Tribeca Channel - True Crime Now - True History - TV Asia Comedy Powered by Shemaroo - Unbeaten - Unexplained - Unidentified - USA TODAY - USA TODAY SPORTS - Us Weekly TV - Vice News - VICE - Vivaldi - Wanted: Dead or Alive - War & Military Now - Watch it Kid - Watch it SCREAM - Waypoint TV - WeatherSpy - WFTV 9 Orlando - WHIO Dayton - Whistle TV - WildEarth - Wired2Fish - Women's Sports Network - Wonder - WPXI Now Pittsburgh - WSB Now Atlanta - WSOC Channel 9 - Wu Tang Collection - XFC TV - Yahoo Finance - YG TV - AFV Español - AMC en Español - Canela TV - Chiquilines - Cine Real - El Conflicto TV - Estrella News - Estrella TV - Euronews Español - Horrorfy - Juntos TV - LevelUp - Love Nature en Español - MMC - Nosey Casos - Nosey Escándalos - Party Tyme Karaoke - Runtime Español - Saber Mas - Sony Canal Competencias - Sony Canal Novelas - The Bob Ross Channel en Español - Top Cine - Tu Cine - Cortos - Euronews Portuguese - - + + + 24 Hour Free Movies + ACCDN + AccuWeather NOW + ACL Cornhole TV + ACTION!!! + Action News Jax + AfroLandTV + AFV Family + ALF + ALLBLK Gems + All Reality WE tv + All Weddings WE tv + ALTRD.TV + AMC Thrillers + Anger Management + Antiques Roadshow UK + Antiques Road Trip + Are We There Yet? + ARTFLIX - Movie Classics + ARTS TWG+ + AsianCrush + At Home with Family Handyman + AXS TV NOW + BABY SHARK TV + BACKSTAGE + BBC Food + BBC Home & Garden + Beautiful Planet + beIN SPORTS XTRA + Best TV Ever + Billiard TV + BITE + Bjgtjme - Free Movies + BlackPix + Bloomberg Quicktake + Bloomberg TV + Boonie Cubs TV + Boston 25 News + CampusLore Sports + Caught in Providence + Cheddar News + Chicken Soup for the Soul + ChiveTV + Choppertown + CineLife + Cinema Libre Channel + CINEPRIDE + Cine Sureño + Cineverse Selects + Classic Doctor Who + Classic Rock Network + ClixTV + Comedy Dynamics + COMMUNE + CONtv + CONtv Anime + Cooking Panda + Cowboy Way + Crackle + Crime 360 + Dark Matter TV + Discover Film + Doctors + Documentary+ + Docurama + Don't Tell The Bride + Dove + Dungeon TV + Edge Sport + Electric Now + EL REY + Entrepreneur TV + ESTV + Euronews + Euronews Français + Euronews Deutsch + Euronews Italiano + FailArmy + FamilyTime + Farscape + Fight Network + Filmstream + Fite 24/7 + Flash + FLOU Cine + FOX13 Memphis + FOX23 Tulsa + Freebie TV + Freebie TV - Los Pitufos + FrightFlix + FTF Sports + Fubo Sports Network + FUEL TV + GAGO TV + Galxy TV + Game Show Central + GFN TV + Glewed TV + GoTraveler + GoUSA TV + Go Wild + Gravitas Adrenaline + Gravitas Documentaries + Gravitas Movies + Grjngo - Western Movies + GUSTOTV + Hallmark Movies & More + Hannibal + HappiTV + Hard Knocks + HBCU-GO Sports + History Hit + Hi-YAH! + Home.Made.Nation + Humor Mill + i24NEWS Updates + IFC Films Picks + IGN1 + IMPACT Wrestling + Impossible - Quiz Show + INFAST + Johnny Carson TV + Journy + JOURNY Presents: America the Beautiful + Judge Faith + Julia Child + LOL! Network + Kidoodle TV + KidsFlix + Kids Pang TV + Kin + Kino Cult + KIRO 7 Seattle + KMTV + La Bocina Latina + La Corriente + Law & Crime + Local Now Bergen County + Local Now Long Island + Local Now Manhattan + Local Now Newburgh + Local Now New York City + Local Now White Plains + LOL! Stand Up + Lone Star Network + Love Destination + Love Nature + Made In Hollywood + MagellanTV NOW + Maverick Black Cinema + MAVTV Select + MBC + MegaNoticias + MHz Now + Midnight Pulp + MMA TV + MOB TV + Moconomy - Economy & Finance Infotainment + More U + Motorvision TV + MOVIESPHERE + MST3K + Mystery Alley + NBC News NOW + NEW K.MOVIES + NEW K-POP + News 12 New York + Newsmax TV + Newsy + NHRA TV + Ninja Kidz TV + Nosey + OnDemandChina + Outdoor America + Outside + Overtime + Party Poker TV + Pattrn + PBS Antiques Roadshow + PBS Nature + People are Awesome + PeopleTV + PlayWorks + pocket.watch + Poker Night TV + Popcornflix + Popstar! TV + POPSUGAR Fitness + Portlandia + Pro Wrestling TV + PW Kids + Qello Concerts by Stingray + QwestTV Classical + QwestTV Jazz & Beyond + QwestTV Mix + Racing America + Rakuten Viki + RCN Más + Real Life + Real Nosey + Real Stories + Real Wild + RetroCrush + Reuters TV + Revry + RevryNews + Runtime + Ryan and Friends + Samuel Goldwyn Channel + Samuel Goldwyn Classics + Samuel Goldwyn International + Scream Factory TV + Shemaroo Bollywood + Shorts + Shout! Cult + Shout! Factory TV Stream + Skills + Thrills + SKWAD + Slightly Off IFC + SLOPES + Sonic TV + Sony KAL + So...Real + So Yummy + Space Channel + Space Science Now + Spark TV Light & Love + SPEEDVISION + SportsGrid + Stadium + Stingray Classica Stream + Classic Rock + Stingray CMusic + Stingray DJAZZ + Easy Listening + Euro Hits + Everything ‘80s + Éxitos del Momento + Flashback 70s + Greatest Holiday Hits + Hip-Hop/R&B + Hit List + Hot Country + Stingray Karaoke + Stingray Naturescape + Nothin' But 90s + Pop Adult + Alternative + Smooth Jazz + Soul Storm + The Spa + Today's K-Pop + Y2K + Stories by AMC + Surf Now TV + Swerve Sports + Tastemade + TED + TG Junior + The Archive + The Boat Show + The Bob Ross Channel + The Carol Burnett Show + The Design Network + The Elvis Presley Channel + The Film Detective + The Grid + The Hill TV + The Pet Collective + The Preview Channel + The Walking Dead Universe + Weather Channel Español + This Old House + Times Now Navbharat + TODAY All Day + TokuSHOUTsu + Toon Goggles + Top Gear + Trailer Park Boys: The SwearNet Show + Trailers From Hell + Tribeca Channel + True Crime Now + True History + TV Asia Comedy Powered by Shemaroo + Unbeaten + Unexplained + Unidentified + USA TODAY + USA TODAY SPORTS + Us Weekly TV + Vice News + VICE + Vivaldi + Wanted: Dead or Alive + War & Military Now + Watch it Kid + Watch it SCREAM + Waypoint TV + WeatherSpy + WFTV 9 Orlando + WHIO Dayton + Whistle TV + WildEarth + Wired2Fish + Women's Sports Network + Wonder + WPXI Now Pittsburgh + WSB Now Atlanta + WSOC Channel 9 + Wu Tang Collection + XFC TV + Yahoo Finance + YG TV + AFV Español + AMC en Español + Canela TV + Chiquilines + Cine Real + El Conflicto TV + Estrella News + Estrella TV + Euronews Español + Horrorfy + Juntos TV + LevelUp + Love Nature en Español + MMC + Nosey Casos + Nosey Escándalos + Party Tyme Karaoke + Runtime Español + Saber Mas + Sony Canal Competencias + Sony Canal Novelas + The Bob Ross Channel en Español + Top Cine + Tu Cine + Cortos + Euronews Portuguese + diff --git a/sites/plex.tv/plex.tv.config.js b/sites/plex.tv/plex.tv.config.js index f9b654d2..ac4bd781 100644 --- a/sites/plex.tv/plex.tv.config.js +++ b/sites/plex.tv/plex.tv.config.js @@ -12,7 +12,7 @@ module.exports = { } }, url: function ({ channel, date }) { - const [_, channelGridKey] = channel.site_id.split('-') + const [, channelGridKey] = channel.site_id.split('-') return `${API_ENDPOINT}/grid?channelGridKey=${channelGridKey}&date=${date.format('YYYY-MM-DD')}` }, @@ -32,7 +32,7 @@ module.exports = { return programs }, - async channels({ lang }) { + async channels() { const data = await axios .get(`${API_ENDPOINT}/lineups/plex/channels?X-Plex-Token=zb85PfdNQLmsry9kQLBR`) .then(r => r.data) @@ -66,7 +66,7 @@ function parseItems(content) { const items = [] metadata.forEach(item => { let segments = [] - item.Media.sort(byTime).forEach((media, i) => { + item.Media.sort(byTime).forEach(media => { let prevSegment = segments[segments.length - 1] if (prevSegment && prevSegment.endsAt === media.beginsAt) { prevSegment.endsAt = media.endsAt diff --git a/sites/plex.tv/plex.tv.test.js b/sites/plex.tv/plex.tv.test.js index a6b4280f..6f137e09 100644 --- a/sites/plex.tv/plex.tv.test.js +++ b/sites/plex.tv/plex.tv.test.js @@ -1,10 +1,9 @@ // npm run channels:parse -- --config=./sites/plex.tv/plex.tv.config.js --output=./sites/plex.tv/plex.tv.channels.xml -// npx epg-grabber --config=sites/plex.tv/plex.tv.config.js --channels=sites/plex.tv/plex.tv.channels.xml --output=guide.xml --days=2 +// npm run grab -- --site=plex.tv const { parser, url, request } = require('./plex.tv.config.js') const fs = require('fs') const path = require('path') -const axios = require('axios') const dayjs = require('dayjs') const utc = require('dayjs/plugin/utc') const customParseFormat = require('dayjs/plugin/customParseFormat') diff --git a/sites/programacion-tv.elpais.com/programacion-tv.elpais.com.channels.xml b/sites/programacion-tv.elpais.com/programacion-tv.elpais.com.channels.xml index 94a204e0..cd405e79 100644 --- a/sites/programacion-tv.elpais.com/programacion-tv.elpais.com.channels.xml +++ b/sites/programacion-tv.elpais.com/programacion-tv.elpais.com.channels.xml @@ -1,203 +1,201 @@ - - - 3/24 - 7 Región de Murcia - Al Jazeera English - AMC - Antena 3 - Aragón TV - Atreseries - AXN - AXN White - Baby TV - Barça TV - BBC World - BeIN Sports - Be Mad - Boing - Calle 13 - Canal 24 h - Canal Cocina - Canal Extremadura TV - Hollywood - Canal Panda - Canal Parlamento - Canal Sur - Canal Sur Andalucía - Caracol TV - Caza y Pesca - Clan TVE - CNBC - CNN International - CMM TV - Comedy Central - Cosmopolitan - Cuatro - Cubavisión Internacional - Dark - Decasa - Discovery Channel - Disney Channel - Disney Junior - Divinity - DMAX - Deutsche Welle - Energy - El Toro TV - ETB 1 - ETB 3 - EuroNews - Eurosport - Eurosport 2 - EWTN - Extreme Sports - FDF Telecinco - Fox Life - FOX - France 24 - Galicia TV - Gol TV - Historia - i24 News - Iberalia - La 1 - La 2 - laSexta - Mega - Mezzo - Movistar Acción - Movistar Cine Español - Movistar Comedia - Movistar Deportes - Movistar Estrenos - Movistar Series - MTV 90s - MTV Hits - MTV Live - MTV España - National Geographic - Neox - Nickelodeon - Nick Junior - Nova - La 8 Burgos - Odisea - Pro TV International - Real Madrid TV - Record TV - RT Español - Sol Música - Somos - Sundance Channel - Syfy - Taroteame - TCM - Telecinco - Teledeporte - teleSUR - TNT - TV3 - TV3CAT - TV5 Monde - TV Canaria - TV Chile - TVE Internacional Asia - TVE Internacional - VE PLUS TV - Viajar - XTRM - - - - - - - - - - - - - - - - - - - - - - - - - - - - Super 3 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Navarra Televisión - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3/24 + 7 Región de Murcia + Al Jazeera English + AMC + Antena 3 + Aragón TV + Atreseries + AXN + AXN White + Baby TV + Barça TV + BBC World + BeIN Sports + Be Mad + Boing + Calle 13 + Canal 24 h + Canal Cocina + Canal Extremadura TV + Hollywood + Canal Panda + Canal Parlamento + Canal Sur + Canal Sur Andalucía + Caracol TV + Caza y Pesca + Clan TVE + CMM TV + CNBC + CNN International + Comedy Central + Cosmopolitan + Cuatro + Cubavisión Internacional + Dark + Decasa + Discovery Channel + Disney Channel + Disney Junior + Divinity + DMAX + Deutsche Welle + El Toro TV + Energy + ETB 1 + ETB 3 + EuroNews + Eurosport + Eurosport 2 + EWTN + Extreme Sports + FDF Telecinco + Fox Life + FOX + France 24 + Galicia TV + Gol TV + Historia + i24 News + Iberalia + La 1 + La 2 + La 8 Burgos + laSexta + Mega + Mezzo + Movistar Acción + Movistar Cine Español + Movistar Comedia + Movistar Deportes + Movistar Estrenos + Movistar Series + MTV 90s + MTV Hits + MTV Live + MTV España + National Geographic + Navarra Televisión + Neox + Nickelodeon + Nick Junior + Nova + Odisea + Pro TV International + Real Madrid TV + Record TV + RT Español + Sol Música + Somos + Sundance Channel + Super 3 + Syfy + Taroteame + TCM + Telecinco + Teledeporte + teleSUR + TNT + TV3 + TV3CAT + TV5 Monde + TV Canaria + TV Chile + TVE Internacional Asia + TVE Internacional + VE PLUS TV + Viajar + XTRM + 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 8aadfb62..be1be74a 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 @@ -50,7 +50,7 @@ module.exports = { }, async channels() { const data = await axios - .get(`https://programacion-tv.elpais.com/data/canales.json`) + .get('https://programacion-tv.elpais.com/data/canales.json') .then(r => r.data) .catch(console.log) diff --git a/sites/programacion-tv.elpais.com/programacion-tv.elpais.com.test.js b/sites/programacion-tv.elpais.com/programacion-tv.elpais.com.test.js index 6a58da87..c600e327 100644 --- a/sites/programacion-tv.elpais.com/programacion-tv.elpais.com.test.js +++ b/sites/programacion-tv.elpais.com/programacion-tv.elpais.com.test.js @@ -1,4 +1,4 @@ -// npx epg-grabber --config=sites/programacion-tv.elpais.com/programacion-tv.elpais.com.config.js --channels=sites/programacion-tv.elpais.com/programacion-tv.elpais.com.channels.xml --output=guide.xml --days=2 +// npm run grab -- --site=programacion-tv.elpais.com // npm run channels:parse -- --config=./sites/programacion-tv.elpais.com/programacion-tv.elpais.com.config.js --output=./sites/programacion-tv.elpais.com/programacion-tv.elpais.com.channels.xml const { parser, url } = require('./programacion-tv.elpais.com.config.js') @@ -67,7 +67,7 @@ it('can parse response', async () => { it('can handle empty guide', async () => { const result = await parser({ - content: ``, + content: '', channel }) expect(result).toMatchObject([]) diff --git a/sites/programacion.tcc.com.uy/programacion.tcc.com.uy.channels.xml b/sites/programacion.tcc.com.uy/programacion.tcc.com.uy.channels.xml index aa853cf7..23fb833d 100644 --- a/sites/programacion.tcc.com.uy/programacion.tcc.com.uy.channels.xml +++ b/sites/programacion.tcc.com.uy/programacion.tcc.com.uy.channels.xml @@ -1,154 +1,152 @@ - - - 1000xHora - America 24 - Adrenalina Sports HD - Antena 3 - A+V - Asuntos Publicos HD - Band Internacional - Band news - BBC World - bitMe HD - C5N - Canal 10 HD - Canal 26 - Canal 4 HD - Canal 5 HD - Canal a - Cartoonito HD - CGTN Español HD - Claro Sports HD - CNN Español - CNN Internacional - Cronica TV - Deutsche Welle Español HD - Canal 9 - Encuentro - Europa Europa HD - Fox News - France 24 HD - Golden Premier HD - Golden Premier 2 HD - GOL TV VO HD - HBO Family - HBO Mundi HD - HBO Signature HD - HBO Xtreme HD - La Nacion - Las Estrellas HD - Multipremier SD - Pasiones - Playboy - RAI Italia HD - RT HD - PPV 14 Sextreme - Sony Movies - Sun Channel HD - TCC 1 - TCC 2 - TCC 3 - La Tele HD - Telefe HD - Tooncast - TV5 - TV Chile - TV Ciudad HD - TVE - Venus - VTV VO HD - VTV Plus VO HD - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1000xHora + America 24 + Adrenalina Sports HD + Antena 3 + A+V + Asuntos Publicos HD + Band Internacional + Band news + BBC World + bitMe HD + C5N + Canal 10 HD + Canal 26 + Canal 4 HD + Canal 5 HD + Canal a + Cartoonito HD + CGTN Español HD + Claro Sports HD + CNN Español + CNN Internacional + Cronica TV + Deutsche Welle Español HD + Canal 9 + Encuentro + Europa Europa HD + Fox News + France 24 HD + Golden Premier HD + Golden Premier 2 HD + GOL TV VO HD + HBO Family + HBO Mundi HD + HBO Signature HD + HBO Xtreme HD + La Nacion + Las Estrellas HD + Multipremier SD + Pasiones + Playboy + RAI Italia HD + RT HD + PPV 14 Sextreme + Sony Movies + Sun Channel HD + TCC 1 + TCC 2 + TCC 3 + La Tele HD + Telefe HD + Tooncast + TV5 + TV Chile + TV Ciudad HD + TVE + Venus + VTV VO HD + VTV Plus VO HD + diff --git a/sites/programacion.tcc.com.uy/programacion.tcc.com.uy.test.js b/sites/programacion.tcc.com.uy/programacion.tcc.com.uy.test.js index 949b8d80..cd79c822 100644 --- a/sites/programacion.tcc.com.uy/programacion.tcc.com.uy.test.js +++ b/sites/programacion.tcc.com.uy/programacion.tcc.com.uy.test.js @@ -1,5 +1,5 @@ // npm run channels:parse -- --config=./sites/programacion.tcc.com.uy/programacion.tcc.com.uy.config.js --output=./sites/programacion.tcc.com.uy/programacion.tcc.com.uy.channels.xml -// npx epg-grabber --config=sites/programacion.tcc.com.uy/programacion.tcc.com.uy.config.js --channels=sites/programacion.tcc.com.uy/programacion.tcc.com.uy.channels.xml --output=guide.xml --timeout=30000 --days=2 +// npm run grab -- --site=programacion.tcc.com.uy const { parser, url } = require('./programacion.tcc.com.uy.config.js') const fs = require('fs') @@ -18,7 +18,7 @@ const channel = { it('can generate valid url', () => { expect(url({ date })).toBe( - `https://www.tccvivo.com.uy/api/v1/navigation_filter/1575/filter/?cable_operator=1&emission_start=2023-02-11T00:00:00Z&emission_end=2023-02-12T00:00:00Z&format=json` + 'https://www.tccvivo.com.uy/api/v1/navigation_filter/1575/filter/?cable_operator=1&emission_start=2023-02-11T00:00:00Z&emission_end=2023-02-12T00:00:00Z&format=json' ) }) diff --git a/sites/programetv.ro/programetv.ro.channels.xml b/sites/programetv.ro/programetv.ro.channels.xml index 59aef3ab..d01a06d6 100644 --- a/sites/programetv.ro/programetv.ro.channels.xml +++ b/sites/programetv.ro/programetv.ro.channels.xml @@ -1,233 +1,231 @@ - - - 3sat - A7TV - Acasa - Acasa Gold - Agro TV - Aleph News - Alfa Omega TV - Aljazeera - AMC - Animal Planet - Antena 1 - Antena 3 - Antena International - Antena Stars - Auto Motor und Sport - Arcadia TV - AXN Black - AXN - AXN Spin - AXN White - B1 - Baby TV - Balkanika Music TV - BBC Earth - BBC World News - Bloomberg TV - Blue Hustler - Bollywood HD - Bollywood Classic - Bollywood Film - Bollywood TV - Boomerang - Brazzers TV Europe - Cartoon Network - CBS Reality - CGTN - Cinemax 2 - Cinemax - Club MTV - CNN - Comedy Central - Cool TV - Credo TV - Crime + Investigation - Das Erste - Da Vinci - Digi 24 - Digi Animal World - Digi Life - Digi Sport 1 - Digi Sport 2 - Digi Sport 3 - Digi Sport 4 - Digi World - Discovery Channel - Discovery Science - Disney Channel - Diva Romania - Dizi - DocuBox HD - Dorcel TV - - Duck TV - Duna TV - Duna World - DW - E! - Epic Drama - Erdély TV - Erox HD - Eroxxx HD - Etno TV - EuroNews - Eurosport 1 - Eurosport 2 - Eurosport 4K - Extreme Sports Channel - FashionBox HD - FashionTV - Favorit TV - FightBox HD - Film 4 UK - FilmBox Arthouse Worldwide - FilmBox Family - FilmBox Premium - Film Café - Film Now - Food Network - France 2 - France 24 English - France 24 - France 3 - France 5 - Fuel TV - FunBox UHD - Galaxy 4 - Ginx eSports TV - Happy Channel - HBO 2 - HBO 3 - HBO Romania - History România - H!t Music Channel - Hustler HD - Hustler TV - Inedit TV - Investigation Discovery - JimJam - Kabel Eins - Kanal D - KIKA - Kiss TV - Love Nature - Luxe TV - M1 - M2 - M4 Sport - M5 - Magic TV - Mediaset Italia - Mezzo - Mezzo Live HD - Minimax - Mooz Dance - Mooz Hits - Mooz Ro! - Motorvision HD - MTV 80s - MTV 90s - MTV Hits - MTV Live HD - Museum HD - Music Channel - Muzsika TV - MyZen HD - Nasul TV - National 24 Plus - National Geographic - National Geographic Wild - National TV - Nautical Channel - Nickelodeon - Nick Jr - Nicktoons - Nitro - N-TV - Orange Sport 1 - Orange Sport 2 - Orange Sport 3 - Orange Sport 4 - Phoenix - Playboy TV - Prima 4K - Prima Sport 1 - Prima Sport 2 - Prima Sport 3 - Prima Sport 4 - Prima TV - Private TV - Pro Arena - Pro Cinema - Profit TV - ProSieben - Pro TV - Pro TV International - Publika TV - Rai 1 - Rai 2 - Rai 3 - Realitatea Plus - Redlight HD - Rock TV - România TV - RTL - RTL Gold - RTL KETTŐ - RTL HÁROM - RTL Klub - RTL Zwei - RT HD - Sat. 1 - Sixx - Sorozat + - Speranta TV - Sport Extra - Stingray Classica - Stingray Djazz - Stingray IConcerts HD - Story 4 - Super RTL - Taraf TV - TeenNick - The Fishing & Hunting Channel - TLC - Trace Caribbean - Trace Sport Stars - Trace Urban HD - Travel Channel - Travel Mix - Trinitas TV - TV 1000 - TV 1000 Russkoe Kino - TV 4 - TV5Monde Europe - TVE - TV Paprika - TVR 1 - TVR 2 - TVR 3 - TVR Cluj - TVR Craiova - TVR Iasi - TVR International - TVR Moldova - TVR Targu-Mures - TVR Timisoara - U TV - Viasat Explore - Viasat History - Viasat Nature - Vox - VTV - Warner TV - Welt - ZDF - ZDF Info - ZDF Neo - Zu TV - - + + + 3sat + A7TV + Acasa + Acasa Gold + Agro TV + Aleph News + Alfa Omega TV + Aljazeera + AMC + Animal Planet + Antena 1 + Antena 3 + Antena International + Antena Stars + Arcadia TV + Auto Motor und Sport + AXN Black + AXN + AXN Spin + AXN White + B1 + Baby TV + Balkanika Music TV + BBC Earth + BBC World News + Bloomberg TV + Blue Hustler + Bollywood Classic + Bollywood Film + Bollywood HD + Bollywood TV + Boomerang + Brazzers TV Europe + Cartoon Network + CBS Reality + CGTN + Cinemax 2 + Cinemax + Club MTV + CNN + Comedy Central + Cool TV + Credo TV + Crime + Investigation + Das Erste + Da Vinci + Digi 24 + Digi Animal World + Digi Life + Digi Sport 1 + Digi Sport 2 + Digi Sport 3 + Digi Sport 4 + Digi World + Discovery Channel + Discovery Science + Disney Channel + Diva Romania + Dizi + DocuBox HD + Dorcel TV + Duck TV + Duna TV + Duna World + DW + E! + Epic Drama + Erdély TV + Erox HD + Eroxxx HD + Etno TV + EuroNews + Eurosport 1 + Eurosport 2 + Eurosport 4K + Extreme Sports Channel + FashionBox HD + FashionTV + Favorit TV + FightBox HD + Film 4 UK + FilmBox Arthouse Worldwide + FilmBox Family + FilmBox Premium + Film Café + Film Now + Food Network + France 2 + France 24 English + France 24 + France 3 + France 5 + Fuel TV + FunBox UHD + Galaxy 4 + Ginx eSports TV + Happy Channel + HBO 2 + HBO 3 + HBO Romania + History România + H!t Music Channel + Hustler HD + Hustler TV + Inedit TV + Investigation Discovery + JimJam + Kabel Eins + Kanal D + KIKA + Kiss TV + Love Nature + Luxe TV + M1 + M2 + M4 Sport + M5 + Magic TV + Mediaset Italia + Mezzo + Mezzo Live HD + Minimax + Mooz Dance + Mooz Hits + Mooz Ro! + Motorvision HD + MTV 80s + MTV 90s + MTV Hits + MTV Live HD + Museum HD + Music Channel + Muzsika TV + MyZen HD + Nasul TV + National 24 Plus + National Geographic + National Geographic Wild + National TV + Nautical Channel + Nickelodeon + Nick Jr + Nicktoons + Nitro + N-TV + Orange Sport 1 + Orange Sport 2 + Orange Sport 3 + Orange Sport 4 + Phoenix + Playboy TV + Prima 4K + Prima Sport 1 + Prima Sport 2 + Prima Sport 3 + Prima Sport 4 + Prima TV + Private TV + Pro Arena + Pro Cinema + Profit TV + ProSieben + Pro TV + Pro TV International + Publika TV + Rai 1 + Rai 2 + Rai 3 + Realitatea Plus + Redlight HD + Rock TV + România TV + RT HD + RTL + RTL Gold + RTL HÁROM + RTL Klub + RTL KETTŐ + RTL Zwei + Sat. 1 + Sixx + Sorozat + + Speranta TV + Sport Extra + Stingray Classica + Stingray Djazz + Stingray IConcerts HD + Story 4 + Super RTL + Taraf TV + TeenNick + The Fishing & Hunting Channel + TLC + Trace Caribbean + Trace Sport Stars + Trace Urban HD + Travel Channel + Travel Mix + Trinitas TV + TV 1000 + TV 1000 Russkoe Kino + TV 4 + TV5Monde Europe + TVE + TV Paprika + TVR 1 + TVR 2 + TVR 3 + TVR Cluj + TVR Craiova + TVR Iasi + TVR International + TVR Moldova + TVR Targu-Mures + TVR Timisoara + U TV + Viasat Explore + Viasat History + Viasat Nature + Vox + VTV + Warner TV + Welt + ZDF + ZDF Info + ZDF Neo + Zu TV + diff --git a/sites/programetv.ro/programetv.ro.config.js b/sites/programetv.ro/programetv.ro.config.js index b93cbc80..64f73227 100644 --- a/sites/programetv.ro/programetv.ro.config.js +++ b/sites/programetv.ro/programetv.ro.config.js @@ -20,7 +20,7 @@ module.exports = { return `https://www.programetv.ro/post/${channel.site_id}/${daysOfWeek[day]}/` }, - parser: function ({ content, channel }) { + parser: function ({ content }) { let programs = [] const data = parseContent(content) if (!data || !data.shows) return programs @@ -57,7 +57,7 @@ function parseStop(item) { } function parseContent(content) { - const [_, data] = content.match(/var pageData = ((.|[\r\n])+);\n/) || [null, null] + const [, data] = content.match(/var pageData = ((.|[\r\n])+);\n/) || [null, null] return data ? JSON.parse(data) : {} } diff --git a/sites/programetv.ro/programetv.ro.test.js b/sites/programetv.ro/programetv.ro.test.js index 60a68d92..c4e9690e 100644 --- a/sites/programetv.ro/programetv.ro.test.js +++ b/sites/programetv.ro/programetv.ro.test.js @@ -1,4 +1,4 @@ -// npx epg-grabber --config=sites/programetv.ro/programetv.ro.config.js --channels=sites/programetv.ro/programetv.ro.channels.xml --output=guide.xml --days=2 +// npm run grab -- --site=programetv.ro const { parser, url } = require('./programetv.ro.config.js') const dayjs = require('dayjs') @@ -19,7 +19,7 @@ const content = ` j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src= 'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f); })(window,document,'script','dataLayer','GTM-WPX9FM9'); -var cfg = {"homeUrl":"https:\/\/www.programetv.ro\/","loginUrl":"https:\/\/www.programetv.ro\/auth\/login","logoutUrl":"https:\/\/www.programetv.ro\/auth\/logout","nowOnTvUrl":"https:\/\/www.programetv.ro\/acum-la-tv\/","favoriteStationsUrl":"https:\/\/www.programetv.ro\/posturi-tv\/favorite\/","saveFavoritesUrl":"https:\/\/www.programetv.ro\/save-favorites\/","popularStationsUrl":"https:\/\/www.programetv.ro\/posturi-tv\/populare\/","stationListUrl":"https:\/\/www.programetv.ro\/posturi-tv\/","privacyPolicyUrl":"https:\/\/www.programetv.ro\/privacy-policy\/","user":false,"showMovieDetails":true,"banners":{"inlist":{"enabled":true,"code":"9647692440"},"footer":{"enabled":true,"code":"9608163999"},"modal":{"enabled":true,"code":"3427954368"}}}; +var cfg = {"homeUrl":"https://www.programetv.ro/","loginUrl":"https://www.programetv.ro/auth/login","logoutUrl":"https://www.programetv.ro/auth/logout","nowOnTvUrl":"https://www.programetv.ro/acum-la-tv/","favoriteStationsUrl":"https://www.programetv.ro/posturi-tv/favorite/","saveFavoritesUrl":"https://www.programetv.ro/save-favorites/","popularStationsUrl":"https://www.programetv.ro/posturi-tv/populare/","stationListUrl":"https://www.programetv.ro/posturi-tv/","privacyPolicyUrl":"https://www.programetv.ro/privacy-policy/","user":false,"showMovieDetails":true,"banners":{"inlist":{"enabled":true,"code":"9647692440"},"footer":{"enabled":true,"code":"9608163999"},"modal":{"enabled":true,"code":"3427954368"}}}; var __stations = []; var pageData = {"station":{"id":"1","displayName":"PRO TV","domain":"Românești","icon":"https://static.cinemagia.ro/img/tv_station/pro-tv.jpg","tvProvider":[{"tvPId":"2","tvPPos":["113"]},{"tvPId":"3","tvPPos":["113"]},{"tvPId":"4","tvPPos":["113"]},{"tvPId":"5","tvPPos":["3"]},{"tvPId":"6","tvPPos":["3"]},{"tvPId":"8","tvPPos":["4"]},{"tvPId":"11","tvPPos":["111"]}]},"shows":[{"id":"690127679","start":"2021-11-07T07:00:00+02:00","stop":"2021-11-07T09:59:59+02:00","stationId":"1","replay":false,"live":true,"online":true,"OTTRights":true,"categories":["Ştiri"],"title":"Ştirile Pro Tv","tvShowId":"5","desc":"În fiecare zi, cele mai importante evenimente, transmisiuni LIVE, analize, anchete şi reportaje sunt la Ştirile ProTV.","obs":"În fiecare zi, cele mai importante evenimente, transmisiuni LIVE, analize, anchete şi reportaje sunt la Ştirile ProTV.","icon":"https://www.programetv.ro/img/shows/84/54/stirile-pro-tv.png?key=Z2lfZnVial90cmFyZXZwLzAwLzAwLzA1LzE4MzgxMnktMTIwazE3MC1hLW40NTk4MW9zLmNhdA==","templating":[]}],"date":"2021-11-07","controls ":[{"date":"2021-11-03","slug":"ieri","label":"Ieri","name":"Ieri","url":"https://www.programetv.ro/post/pro-tv/ieri/"},{"date":"2021-11-04","slug":"azi","label":"Azi","name":"Azi","url":"https://www.programetv.ro/post/pro-tv/"},{"date":"2021-11-05","slug":"vineri","label":"Vi","name":"Vineri","url":"https://www.programetv.ro/post/pro-tv/vineri/"},{"date":"2021-11-06","slug":"sambata","label":"Sb","name":"Sâmbătă","url":"https://www.programetv.ro/post/pro-tv/sambata/"},{"date":"2021-11-07","slug":"duminica","label":"Du","name":"Duminică","url":"https://www.programetv.ro/post/pro-tv/duminica/"},{"date":"2021-11-08","slug":"luni","label":"Lu","name":"Luni","url":"https://www.programetv.ro/post/pro-tv/luni/"},{"date":"2021-11-09","slug":"marti","label":"Ma","name":"Marți","url":"https://www.programetv.ro/post/pro-tv/marti/"}],"todayDate":"2021-11-04","adsenabled":true}; var __controls = [{"date":"2021-11-03","slug":"ieri","label":"Ieri","name":"Ieri","url":"https://www.programetv.ro/post/pro-tv/ieri/"},{"date":"2021-11-04","slug":"azi","label":"Azi","name":"Azi","url":"https://www.programetv.ro/post/pro-tv/"},{"date":"2021-11-05","slug":"vineri","label":"Vi","name":"Vineri","url":"https://www.programetv.ro/post/pro-tv/vineri/"},{"date":"2021-11-06","slug":"sambata","label":"Sb","name":"Sâmbătă","url":"https://www.programetv.ro/post/pro-tv/sambata/"},{"date":"2021-11-07","slug":"duminica","label":"Du","name":"Duminică","url":"https://www.programetv.ro/post/pro-tv/duminica/"},{"date":"2021-11-08","slug":"luni","label":"Lu","name":"Luni","url":"https://www.programetv.ro/post/pro-tv/luni/"},{"date":"2021-11-09","slug":"marti","label":"Ma","name":"Marți","url":"https://www.programetv.ro/post/pro-tv/marti/"}]; @@ -38,7 +38,8 @@ it('can parse response', () => { start: '2021-11-07T05:00:00.000Z', stop: '2021-11-07T07:59:59.000Z', title: 'Ştirile Pro Tv', - description: `În fiecare zi, cele mai importante evenimente, transmisiuni LIVE, analize, anchete şi reportaje sunt la Ştirile ProTV.`, + description: + 'În fiecare zi, cele mai importante evenimente, transmisiuni LIVE, analize, anchete şi reportaje sunt la Ştirile ProTV.', category: ['Ştiri'], icon: 'https://www.programetv.ro/img/shows/84/54/stirile-pro-tv.png?key=Z2lfZnVial90cmFyZXZwLzAwLzAwLzA1LzE4MzgxMnktMTIwazE3MC1hLW40NTk4MW9zLmNhdA==' } @@ -59,7 +60,7 @@ it('can handle empty guide', () => { j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src= 'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f); })(window,document,'script','dataLayer','GTM-WPX9FM9'); -var cfg = {"homeUrl":"https:\/\/www.programetv.ro\/","loginUrl":"https:\/\/www.programetv.ro\/auth\/login","logoutUrl":"https:\/\/www.programetv.ro\/auth\/logout","nowOnTvUrl":"https:\/\/www.programetv.ro\/acum-la-tv\/","favoriteStationsUrl":"https:\/\/www.programetv.ro\/posturi-tv\/favorite\/","saveFavoritesUrl":"https:\/\/www.programetv.ro\/save-favorites\/","popularStationsUrl":"https:\/\/www.programetv.ro\/posturi-tv\/populare\/","stationListUrl":"https:\/\/www.programetv.ro\/posturi-tv\/","privacyPolicyUrl":"https:\/\/www.programetv.ro\/privacy-policy\/","user":false,"showMovieDetails":true,"banners":{"inlist":{"enabled":true,"code":"9647692440"},"footer":{"enabled":true,"code":"9608163999"},"modal":{"enabled":true,"code":"3427954368"}}}; +var cfg = {"homeUrl":"https://www.programetv.ro/","loginUrl":"https://www.programetv.ro/auth/login","logoutUrl":"https://www.programetv.ro/auth/logout","nowOnTvUrl":"https://www.programetv.ro/acum-la-tv/","favoriteStationsUrl":"https://www.programetv.ro/posturi-tv/favorite/","saveFavoritesUrl":"https://www.programetv.ro/save-favorites/","popularStationsUrl":"https://www.programetv.ro/posturi-tv/populare/","stationListUrl":"https://www.programetv.ro/posturi-tv/","privacyPolicyUrl":"https://www.programetv.ro/privacy-policy/","user":false,"showMovieDetails":true,"banners":{"inlist":{"enabled":true,"code":"9647692440"},"footer":{"enabled":true,"code":"9608163999"},"modal":{"enabled":true,"code":"3427954368"}}}; var __stations = [];
', 'Filter channels by language (ISO 639-2 code)') + .option('-t, --timeout ', 'Override the default timeout for each request') + .option( + '--days ', + 'Override the number of days for which the program will be loaded (defaults to the value from the site config)', + value => parseInt(value) + ) + .option( + '--maxConnections ', + 'Limit on the number of concurrent requests', + value => parseInt(value), + 1 + ) + .option('--cron ', 'Schedule a script run (example: "0 0 * * *")') + .option('--gzip', 'Create a compressed version of the guide as well', false) + .parse(process.argv) + +export type GrabOptions = { + site?: string + channels?: string + output: string + gzip: boolean + maxConnections: number + timeout?: string + lang?: string + days?: number + cron?: string +} + +const options: GrabOptions = program.opts() + +async function main() { + if (!options.site && !options.channels) + throw new Error('One of the arguments must be presented: `--site` or `--channels`') + + const logger = new Logger() + + logger.start('staring...') + + logger.info('config:') + logger.tree(options) + + logger.info(`loading channels...`) + const storage = new Storage() + const parser = new ChannelsParser({ storage }) + + let files: string[] = [] + if (options.site) { + files = await storage.list(path.join(SITES_DIR, `${options.site}/*.channels.xml`)) + } else if (options.channels) { + files = await storage.list(options.channels) + } + + let parsedChannels = new Collection() + for (let filepath of files) { + parsedChannels = parsedChannels.concat(await parser.parse(filepath)) + } + if (options.lang) { + parsedChannels = parsedChannels.filter((channel: Channel) => channel.lang === options.lang) + } + logger.info(` found ${parsedChannels.count()} channels`) + + logger.info('creating queue...') + const queue = new Queue({ + parsedChannels, + logger, + options + }) + await queue.create() + logger.info(` added ${queue.size()} items`) + + const job = new Job({ + queue, + logger, + options + }) + + let runIndex = 1 + if (options.cron) { + const cronJob = new CronJob(options.cron, async () => { + logger.info(`run #${runIndex}:`) + const timer = new Timer() + timer.start() + await job.run() + runIndex++ + logger.success(` done in ${timer.format('HH[h] mm[m] ss[s]')}`) + }) + cronJob.start() + } else { + logger.info(`run #${runIndex}:`) + const timer = new Timer() + timer.start() + await job.run() + logger.success(` done in ${timer.format('HH[h] mm[m] ss[s]')}`) + } + + logger.info('finished') +} + +main() diff --git a/scripts/constants.ts b/scripts/constants.ts new file mode 100644 index 00000000..7b6c00d0 --- /dev/null +++ b/scripts/constants.ts @@ -0,0 +1,4 @@ +export const SITES_DIR = process.env.SITES_DIR || './sites' +export const GUIDES_DIR = process.env.GUIDES_DIR || './guides' +export const DATA_DIR = process.env.DATA_DIR || './temp/data' +export const CURR_DATE = process.env.CURR_DATE || new Date().toISOString() diff --git a/scripts/core/api.js b/scripts/core/api.js deleted file mode 100644 index 18c4f144..00000000 --- a/scripts/core/api.js +++ /dev/null @@ -1,32 +0,0 @@ -const _ = require('lodash') -const file = require('./file') - -const DATA_DIR = process.env.DATA_DIR || './scripts/tmp/data' - -class API { - constructor(filepath) { - this.filepath = file.resolve(filepath) - } - - async load() { - const data = await file.read(this.filepath) - this.collection = JSON.parse(data) - } - - find(query) { - return _.find(this.collection, query) - } - - all() { - return this.collection - } -} - -const api = {} - -api.channels = new API(`${DATA_DIR}/channels.json`) -api.regions = new API(`${DATA_DIR}/regions.json`) -api.countries = new API(`${DATA_DIR}/countries.json`) -api.subdivisions = new API(`${DATA_DIR}/subdivisions.json`) - -module.exports = api diff --git a/scripts/core/apiChannel.ts b/scripts/core/apiChannel.ts new file mode 100644 index 00000000..3ddd1a91 --- /dev/null +++ b/scripts/core/apiChannel.ts @@ -0,0 +1,79 @@ +import { Collection } from '@freearhey/core' + +type ApiChannelProps = { + id: string + name: string + alt_names: string[] + network: string + owners: string[] + country: string + subdivision: string + city: string + broadcast_area: string[] + languages: string[] + categories: string[] + is_nsfw: boolean + launched: string + closed: string + replaced_by: string + website: string + logo: string +} + +export class ApiChannel { + id: string + name: string + altNames: Collection + network: string + owners: Collection + country: string + subdivision: string + city: string + broadcastArea: Collection + languages: Collection + categories: Collection + isNSFW: boolean + launched: string + closed: string + replacedBy: string + website: string + logo: string + + constructor({ + id, + name, + alt_names, + network, + owners, + country, + subdivision, + city, + broadcast_area, + languages, + categories, + is_nsfw, + launched, + closed, + replaced_by, + website, + logo + }: ApiChannelProps) { + this.id = id + this.name = name + this.altNames = new Collection(alt_names) + this.network = network + this.owners = new Collection(owners) + this.country = country + this.subdivision = subdivision + this.city = city + this.broadcastArea = new Collection(broadcast_area) + this.languages = new Collection(languages) + this.categories = new Collection(categories) + this.isNSFW = is_nsfw + this.launched = launched + this.closed = closed + this.replacedBy = replaced_by + this.website = website + this.logo = logo + } +} diff --git a/scripts/core/apiClient.ts b/scripts/core/apiClient.ts new file mode 100644 index 00000000..66fa28a8 --- /dev/null +++ b/scripts/core/apiClient.ts @@ -0,0 +1,59 @@ +import { Logger, Storage } from '@freearhey/core' +import axios, { AxiosInstance, AxiosResponse, AxiosProgressEvent } from 'axios' +import cliProgress, { MultiBar } from 'cli-progress' +import numeral from 'numeral' + +export class ApiClient { + progressBar: MultiBar + client: AxiosInstance + storage: Storage + logger: Logger + + constructor({ logger }: { logger: Logger }) { + this.logger = logger + this.client = axios.create({ + responseType: 'stream' + }) + this.storage = new Storage() + this.progressBar = new cliProgress.MultiBar({ + stopOnComplete: true, + hideCursor: true, + forceRedraw: true, + barsize: 36, + format(options, params, payload) { + const filename = payload.filename.padEnd(18, ' ') + const barsize = options.barsize || 40 + const percent = (params.progress * 100).toFixed(2) + const speed = payload.speed ? numeral(payload.speed).format('0.0 b') + '/s' : 'N/A' + const total = numeral(params.total).format('0.0 b') + const completeSize = Math.round(params.progress * barsize) + const incompleteSize = barsize - completeSize + const bar = + options.barCompleteString && options.barIncompleteString + ? options.barCompleteString.substr(0, completeSize) + + options.barGlue + + options.barIncompleteString.substr(0, incompleteSize) + : '-'.repeat(barsize) + + return `${filename} [${bar}] ${percent}% | ETA: ${params.eta}s | ${total} | ${speed}` + } + }) + } + + async download(filename: string) { + const stream = await this.storage.createStream(`/temp/data/${filename}`) + + const bar = this.progressBar.create(0, 0, { filename }) + + this.client + .get(`https://iptv-org.github.io/api/${filename}`, { + onDownloadProgress({ total, loaded, rate }: AxiosProgressEvent) { + if (total) bar.setTotal(total) + bar.update(loaded, { speed: rate }) + } + }) + .then((response: AxiosResponse) => { + response.data.pipe(stream) + }) + } +} diff --git a/scripts/core/channelsParser.ts b/scripts/core/channelsParser.ts new file mode 100644 index 00000000..990422b4 --- /dev/null +++ b/scripts/core/channelsParser.ts @@ -0,0 +1,24 @@ +import { parseChannels } from 'epg-grabber' +import { Storage, Collection } from '@freearhey/core' + +type ChannelsParserProps = { + storage: Storage +} + +export class ChannelsParser { + storage: Storage + + constructor({ storage }: ChannelsParserProps) { + this.storage = storage + } + + async parse(filepath: string) { + let parsedChannels = new Collection() + + const content = await this.storage.load(filepath) + const channels = parseChannels(content) + parsedChannels = parsedChannels.concat(new Collection(channels)) + + return parsedChannels + } +} diff --git a/scripts/core/configLoader.ts b/scripts/core/configLoader.ts new file mode 100644 index 00000000..0fd429ad --- /dev/null +++ b/scripts/core/configLoader.ts @@ -0,0 +1,19 @@ +import { SiteConfig } from 'epg-grabber' +import _ from 'lodash' + +export class ConfigLoader { + async load(filepath: string): Promise { + const config = (await import(filepath)).default + + return _.merge( + { + delay: 0, + maxConnections: 1, + request: { + timeout: 30000 + } + }, + config + ) + } +} diff --git a/scripts/core/db.js b/scripts/core/db.js deleted file mode 100644 index 1870346f..00000000 --- a/scripts/core/db.js +++ /dev/null @@ -1,76 +0,0 @@ -const nedb = require('nedb-promises') -const file = require('./file') - -const DB_DIR = process.env.DB_DIR || './scripts/tmp/database' - -class Database { - constructor(filepath) { - this.filepath = filepath - } - - load() { - this.db = nedb.create({ - filename: file.resolve(this.filepath), - autoload: true, - onload: err => { - if (err) console.error(err) - }, - compareStrings: (a, b) => { - a = a.replace(/\s/g, '_') - b = b.replace(/\s/g, '_') - - return a.localeCompare(b, undefined, { - sensitivity: 'accent', - numeric: true - }) - } - }) - } - - removeIndex(field) { - return this.db.removeIndex(field) - } - - addIndex(options) { - return this.db.ensureIndex(options) - } - - compact() { - return this.db.persistence.compactDatafile() - } - - stopAutocompact() { - return this.db.persistence.stopAutocompaction() - } - - reset() { - return file.clear(this.filepath) - } - - count(query) { - return this.db.count(query) - } - - insert(doc) { - return this.db.insert(doc) - } - - update(query, update) { - return this.db.update(query, update) - } - - find(query) { - return this.db.find(query) - } - - remove(query, options) { - return this.db.remove(query, options) - } -} - -const db = {} - -db.queue = new Database(`${DB_DIR}/queue.db`) -db.programs = new Database(`${DB_DIR}/programs.db`) - -module.exports = db diff --git a/scripts/core/file.js b/scripts/core/file.js deleted file mode 100644 index 8a2f7eab..00000000 --- a/scripts/core/file.js +++ /dev/null @@ -1,93 +0,0 @@ -const path = require('path') -const glob = require('glob') -const fs = require('fs-extra') - -const file = {} - -file.templateVariables = function (template) { - const match = template.match(/{[^}]+}/g) - - return Array.isArray(match) ? match.map(s => s.substring(1, s.length - 1)) : [] -} - -file.templateFormat = function (template, obj) { - let output = template - for (let key in obj) { - const regex = new RegExp(`{${key}}`, 'g') - const value = obj[key] || undefined - output = output.replace(regex, value) - } - - return output -} - -file.list = function (pattern) { - return new Promise(resolve => { - glob(pattern, function (err, files) { - resolve(files) - }) - }) -} - -file.getFilename = function (filepath) { - return path.parse(filepath).name -} - -file.createDir = async function (dir) { - if (await file.exists(dir)) return - - return fs.mkdir(dir, { recursive: true }).catch(console.error) -} - -file.exists = function (filepath) { - return fs.exists(path.resolve(filepath)) -} - -file.existsSync = function (filepath) { - return fs.existsSync(path.resolve(filepath)) -} - -file.read = function (filepath) { - return fs.readFile(path.resolve(filepath), { encoding: 'utf8' }).catch(console.error) -} - -file.append = function (filepath, data) { - return fs.appendFile(path.resolve(filepath), data).catch(console.error) -} - -file.create = function (filepath, data = '') { - filepath = path.resolve(filepath) - const dir = path.dirname(filepath) - - return file - .createDir(dir) - .then(() => file.write(filepath, data)) - .catch(console.error) -} - -file.write = function (filepath, data = '') { - return fs.writeFile(path.resolve(filepath), data, { encoding: 'utf8' }).catch(console.error) -} - -file.writeSync = function (filepath, data = '') { - return fs.writeFileSync(path.resolve(filepath), data, { encoding: 'utf8' }) -} - -file.clear = async function (filepath) { - if (await file.exists(filepath)) return file.write(filepath, '') - return true -} - -file.resolve = function (filepath) { - return path.resolve(filepath) -} - -file.dirname = function (filepath) { - return path.dirname(filepath) -} - -file.basename = function (filepath) { - return path.basename(filepath) -} - -module.exports = file diff --git a/scripts/core/grabber.ts b/scripts/core/grabber.ts new file mode 100644 index 00000000..783e3f14 --- /dev/null +++ b/scripts/core/grabber.ts @@ -0,0 +1,75 @@ +import { EPGGrabber, GrabCallbackData, EPGGrabberMock, SiteConfig, Channel } from 'epg-grabber' +import { Logger, Collection } from '@freearhey/core' +import { Queue } from './' +import { GrabOptions } from '../commands/epg/grab' +import { TaskQueue, PromisyClass } from 'cwait' + +type GrabberProps = { + logger: Logger + queue: Queue + options: GrabOptions +} + +export class Grabber { + logger: Logger + queue: Queue + options: GrabOptions + + constructor({ logger, queue, options }: GrabberProps) { + this.logger = logger + this.queue = queue + this.options = options + } + + async grab(): Promise<{ channels: Collection; programs: Collection }> { + const taskQueue = new TaskQueue(Promise as PromisyClass, this.options.maxConnections) + + const total = this.queue.size() + + const channels = new Collection() + let programs = new Collection() + let i = 1 + + await Promise.all( + this.queue.items().map( + taskQueue.wrap( + async (queueItem: { channel: Channel; config: SiteConfig; date: string }) => { + const { channel, config, date } = queueItem + + channels.add(channel) + + if (this.options.timeout !== undefined) { + const timeout = parseInt(this.options.timeout) + config.request = { ...config.request, ...{ timeout } } + } + + const grabber = + process.env.NODE_ENV === 'test' ? new EPGGrabberMock(config) : new EPGGrabber(config) + const _programs = await grabber.grab( + channel, + date, + (data: GrabCallbackData, error: Error | null) => { + const { programs, date } = data + + this.logger.info( + ` [${i}/${total}] ${channel.site} (${channel.lang}) - ${ + channel.xmltv_id + } - ${date.format('MMM D, YYYY')} (${programs.length} programs)` + ) + if (i < total) i++ + + if (error) { + this.logger.info(` ERR: ${error.message}`) + } + } + ) + + programs = programs.concat(new Collection(_programs)) + } + ) + ) + ) + + return { channels, programs } + } +} diff --git a/scripts/core/guide.ts b/scripts/core/guide.ts new file mode 100644 index 00000000..2b73f05e --- /dev/null +++ b/scripts/core/guide.ts @@ -0,0 +1,55 @@ +import { Collection, Logger, DateTime, Storage, Zip } from '@freearhey/core' +import { Channel } from 'epg-grabber' +import { XMLTV } from '../core' +import { CURR_DATE } from '../constants' + +type GuideProps = { + channels: Collection + programs: Collection + logger: Logger + filepath: string + gzip: boolean +} + +export class Guide { + channels: Collection + programs: Collection + logger: Logger + storage: Storage + filepath: string + gzip: boolean + + constructor({ channels, programs, logger, filepath, gzip }: GuideProps) { + this.channels = channels + this.programs = programs + this.logger = logger + this.storage = new Storage() + this.filepath = filepath + this.gzip = gzip || false + } + + async save() { + const channels = this.channels.uniqBy( + (channel: Channel) => `${channel.xmltv_id}:${channel.site}` + ) + const programs = this.programs + + const xmltv = new XMLTV({ + channels, + programs, + date: new DateTime(CURR_DATE, { zone: 'UTC' }) + }) + + const xmlFilepath = this.filepath + this.logger.info(` saving to "${xmlFilepath}"...`) + await this.storage.save(xmlFilepath, xmltv.toString()) + + if (this.gzip) { + const zip = new Zip() + const compressed = await zip.compress(xmltv.toString()) + const gzFilepath = `${this.filepath}.gz` + this.logger.info(` saving to "${gzFilepath}"...`) + await this.storage.save(gzFilepath, compressed) + } + } +} diff --git a/scripts/core/guideManager.ts b/scripts/core/guideManager.ts new file mode 100644 index 00000000..22b80552 --- /dev/null +++ b/scripts/core/guideManager.ts @@ -0,0 +1,61 @@ +import { Collection, Logger, Storage, StringTemplate } from '@freearhey/core' +import { OptionValues } from 'commander' +import { Channel, Program } from 'epg-grabber' +import { Guide } from '.' + +type GuideManagerProps = { + options: OptionValues + logger: Logger + channels: Collection + programs: Collection +} + +export class GuideManager { + options: OptionValues + storage: Storage + logger: Logger + channels: Collection + programs: Collection + + constructor({ channels, programs, logger, options }: GuideManagerProps) { + this.options = options + this.logger = logger + this.channels = channels + this.programs = programs + this.storage = new Storage() + } + + async createGuides() { + const pathTemplate = new StringTemplate(this.options.output) + + const groupedChannels = this.channels + .orderBy([(channel: Channel) => channel.xmltv_id]) + .uniqBy((channel: Channel) => `${channel.xmltv_id}:${channel.site}:${channel.lang}`) + .groupBy((channel: Channel) => { + return pathTemplate.format({ lang: channel.lang || 'en', site: channel.site || '' }) + }) + + const groupedPrograms = this.programs + .orderBy([(program: Program) => program.channel, (program: Program) => program.start]) + .groupBy((program: Program) => { + const lang = + program.titles && program.titles.length && program.titles[0].lang + ? program.titles[0].lang + : 'en' + + return pathTemplate.format({ lang, site: program.site || '' }) + }) + + for (const groupKey of groupedPrograms.keys()) { + const guide = new Guide({ + filepath: groupKey, + gzip: this.options.gzip, + channels: new Collection(groupedChannels.get(groupKey)), + programs: new Collection(groupedPrograms.get(groupKey)), + logger: this.logger + }) + + await guide.save() + } + } +} diff --git a/scripts/core/index.js b/scripts/core/index.js deleted file mode 100644 index c6c607a5..00000000 --- a/scripts/core/index.js +++ /dev/null @@ -1,11 +0,0 @@ -exports.db = require('./db') -exports.logger = require('./logger') -exports.file = require('./file') -exports.parser = require('./parser') -exports.timer = require('./timer') -exports.markdown = require('./markdown') -exports.api = require('./api') -exports.date = require('./date') -exports.table = require('./table') -exports.xml = require('./xml') -exports.zip = require('./zip') diff --git a/scripts/core/index.ts b/scripts/core/index.ts new file mode 100644 index 00000000..6ab0d340 --- /dev/null +++ b/scripts/core/index.ts @@ -0,0 +1,11 @@ +export * from './xml' +export * from './channelsParser' +export * from './xmltv' +export * from './configLoader' +export * from './grabber' +export * from './job' +export * from './queue' +export * from './guideManager' +export * from './guide' +export * from './apiChannel' +export * from './apiClient' diff --git a/scripts/core/job.ts b/scripts/core/job.ts new file mode 100644 index 00000000..d23b59f6 --- /dev/null +++ b/scripts/core/job.ts @@ -0,0 +1,34 @@ +import { Logger } from '@freearhey/core' +import { Queue, Grabber, GuideManager } from '.' +import { GrabOptions } from '../commands/epg/grab' + +type JobProps = { + options: GrabOptions + logger: Logger + queue: Queue +} + +export class Job { + options: GrabOptions + logger: Logger + grabber: Grabber + + constructor({ queue, logger, options }: JobProps) { + this.options = options + this.logger = logger + this.grabber = new Grabber({ logger, queue, options }) + } + + async run() { + const { channels, programs } = await this.grabber.grab() + + const manager = new GuideManager({ + channels, + programs, + options: this.options, + logger: this.logger + }) + + await manager.createGuides() + } +} diff --git a/scripts/core/logger.js b/scripts/core/logger.js deleted file mode 100644 index effb0cb1..00000000 --- a/scripts/core/logger.js +++ /dev/null @@ -1,3 +0,0 @@ -const { consola } = require('consola') - -module.exports = consola diff --git a/scripts/core/markdown.js b/scripts/core/markdown.js deleted file mode 100644 index 2729f0b7..00000000 --- a/scripts/core/markdown.js +++ /dev/null @@ -1,10 +0,0 @@ -const markdownInclude = require('markdown-include') -const file = require('./file') - -const markdown = {} - -markdown.compile = function (filepath) { - markdownInclude.compileFiles(file.resolve(filepath)) -} - -module.exports = markdown diff --git a/scripts/core/parser.js b/scripts/core/parser.js deleted file mode 100644 index 73be3763..00000000 --- a/scripts/core/parser.js +++ /dev/null @@ -1,29 +0,0 @@ -const file = require('./file') -const grabber = require('epg-grabber') - -const parser = {} - -parser.parseChannels = async function (filepath) { - const content = await file.read(filepath) - - return grabber.parseChannels(content) -} - -parser.parseLogs = async function (filepath) { - const content = await file.read(filepath) - if (!content) return [] - const lines = content.split('\n') - - return lines.map(line => (line ? JSON.parse(line) : null)).filter(l => l) -} - -parser.parseNumber = function (string) { - const parsed = parseInt(string) - if (isNaN(parsed)) { - throw new Error('scripts/core/parser.js:parseNumber() Input value is not a number') - } - - return parsed -} - -module.exports = parser diff --git a/scripts/core/queue.ts b/scripts/core/queue.ts new file mode 100644 index 00000000..c197da65 --- /dev/null +++ b/scripts/core/queue.ts @@ -0,0 +1,94 @@ +import { Storage, Collection, DateTime, Logger, Dictionary } from '@freearhey/core' +import { ChannelsParser, ConfigLoader, ApiChannel } from './' +import { SITES_DIR, DATA_DIR, CURR_DATE } from '../constants' +import { Channel, SiteConfig } from 'epg-grabber' +import path from 'path' +import { GrabOptions } from '../commands/epg/grab' + +export type QueueItem = { + channel: Channel + date: string + config: SiteConfig + error: string | null +} + +type QueueProps = { + logger: Logger + options: GrabOptions + parsedChannels: Collection +} + +export class Queue { + configLoader: ConfigLoader + logger: Logger + sitesStorage: Storage + dataStorage: Storage + parser: ChannelsParser + parsedChannels: Collection + options: GrabOptions + date: DateTime + _items: QueueItem[] = [] + + constructor({ parsedChannels, logger, options }: QueueProps) { + this.parsedChannels = parsedChannels + this.logger = logger + this.sitesStorage = new Storage() + this.dataStorage = new Storage(DATA_DIR) + this.parser = new ChannelsParser({ storage: new Storage() }) + this.date = new DateTime(CURR_DATE) + this.options = options + this.configLoader = new ConfigLoader() + } + + async create() { + const channelsContent = await this.dataStorage.json('channels.json') + const channels = new Collection(channelsContent).map(data => new ApiChannel(data)) + + const queue = new Dictionary() + + for (const channel of this.parsedChannels.all()) { + if (!channel.site || !channel.xmltv_id) continue + if (this.options.lang && channel.lang !== this.options.lang) continue + + const configPath = path.resolve(SITES_DIR, `${channel.site}/${channel.site}.config.js`) + const config: SiteConfig = await this.configLoader.load(configPath) + + const found: ApiChannel = channels.first( + (_channel: ApiChannel) => _channel.id === channel.xmltv_id + ) + if (found) { + channel.logo = found.logo + } + + const days = this.options.days || config.days || 1 + const dates = Array.from({ length: days }, (_, day) => this.date.add(day, 'd')) + dates.forEach((date: DateTime) => { + const dateString = date.toJSON() + const key = `${channel.site}:${channel.lang}:${channel.xmltv_id}:${dateString}` + + if (queue.missing(key)) { + queue.set(key, { + channel, + date: dateString, + config, + error: null + }) + } + }) + } + + this._items = Object.values(queue.data()) + } + + size(): number { + return this._items.length + } + + items(): QueueItem[] { + return this._items + } + + isEmpty(): boolean { + return this._items.length === 0 + } +} diff --git a/scripts/core/table.js b/scripts/core/table.js deleted file mode 100644 index 0c5d363f..00000000 --- a/scripts/core/table.js +++ /dev/null @@ -1,47 +0,0 @@ -const table = {} - -table.create = function (data, cols) { - let output = '\r\n' - - output += ' \r\n ' - for (let column of cols) { - output += `${column}` - } - output += '\r\n \r\n' - - output += ' \r\n' - output += getHTMLRows(data) - output += ' \r\n' - - output += '' - - return output -} - -function getHTMLRows(data) { - let output = '' - for (let group of data) { - let rowspan = group.length - for (let [j, row] of group.entries()) { - output += ' ' - for (let [i, value] of row.entries()) { - if (i === 0 && j === 0) { - output += `${value}` - } else if (i > 0) { - if (typeof value === 'number') { - output += `${value}` - } else { - output += `${value}` - } - } - } - output += '\r\n' - } - } - - return output -} - -function getSpan() {} - -module.exports = table diff --git a/scripts/core/timer.js b/scripts/core/timer.js deleted file mode 100644 index 6e5f381d..00000000 --- a/scripts/core/timer.js +++ /dev/null @@ -1,29 +0,0 @@ -const { performance } = require('perf_hooks') -const dayjs = require('dayjs') -const duration = require('dayjs/plugin/duration') -const relativeTime = require('dayjs/plugin/relativeTime') - -dayjs.extend(relativeTime) -dayjs.extend(duration) - -const timer = {} - -let t0 = 0 - -timer.start = function () { - t0 = performance.now() -} - -timer.format = function (f) { - let t1 = performance.now() - - return dayjs.duration(t1 - t0).format(f) -} - -timer.humanize = function (suffix = true) { - let t1 = performance.now() - - return dayjs.duration(t1 - t0).humanize(suffix) -} - -module.exports = timer diff --git a/scripts/core/xml.js b/scripts/core/xml.ts similarity index 53% rename from scripts/core/xml.js rename to scripts/core/xml.ts index 5cd6c3f6..1d7710b1 100644 --- a/scripts/core/xml.js +++ b/scripts/core/xml.ts @@ -1,25 +1,36 @@ -const xml = {} +import { Collection } from '@freearhey/core' +import { Channel } from 'epg-grabber' -xml.create = function (items, site) { - let output = `\r\n\r\n \r\n` +export class XML { + items: Collection + site: string - items.forEach(channel => { - const logo = channel.logo ? ` logo="${channel.logo}"` : '' - const xmltv_id = channel.xmltv_id || '' - const lang = channel.lang || '' - const site_id = channel.site_id || '' - output += ` ${escapeString(channel.name)}\r\n` - }) + constructor(items: Collection, site: string) { + this.items = items + this.site = site + } - output += ` \r\n\r\n` + toString() { + let output = '\r\n\r\n' - return output + this.items.forEach((channel: Channel) => { + const logo = channel.logo ? ` logo="${channel.logo}"` : '' + const xmltv_id = channel.xmltv_id || '' + const lang = channel.lang || '' + const site_id = channel.site_id || '' + output += ` ${escapeString(channel.name)}\r\n` + }) + + output += '\r\n' + + return output + } } -function escapeString(string, defaultValue = '') { - if (!string) return defaultValue +function escapeString(value: string, defaultValue: string = '') { + if (!value) return defaultValue const regex = new RegExp( '((?:[\0-\x08\x0B\f\x0E-\x1F\uFFFD\uFFFE\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]))|([\\x7F-\\x84]|[\\x86-\\x9F]|[\\uFDD0-\\uFDEF]|(?:\\uD83F[\\uDFFE\\uDFFF])|(?:\\uD87F[\\uDF' + @@ -33,9 +44,9 @@ function escapeString(string, defaultValue = '') { 'g' ) - string = String(string || '').replace(regex, '') + value = String(value || '').replace(regex, '') - return string + return value .replace(/&/g, '&') .replace(//g, '>') @@ -45,5 +56,3 @@ function escapeString(string, defaultValue = '') { .replace(/ +/g, ' ') .trim() } - -module.exports = xml diff --git a/scripts/core/xmltv.ts b/scripts/core/xmltv.ts new file mode 100644 index 00000000..eebd5424 --- /dev/null +++ b/scripts/core/xmltv.ts @@ -0,0 +1,28 @@ +import { DateTime, Collection } from '@freearhey/core' +import { generateXMLTV } from 'epg-grabber' + +type XMLTVProps = { + channels: Collection + programs: Collection + date: DateTime +} + +export class XMLTV { + channels: Collection + programs: Collection + date: DateTime + + constructor({ channels, programs, date }: XMLTVProps) { + this.channels = channels + this.programs = programs + this.date = date + } + + toString() { + return generateXMLTV({ + channels: this.channels.all(), + programs: this.programs.all(), + date: this.date.toJSON() + }) + } +} diff --git a/scripts/core/zip.js b/scripts/core/zip.js deleted file mode 100644 index f6c8140c..00000000 --- a/scripts/core/zip.js +++ /dev/null @@ -1,13 +0,0 @@ -const { gzip, ungzip } = require('node-gzip') - -const zip = {} - -zip.compress = async function (string) { - return gzip(string) -} - -zip.decompress = async function (string) { - return ungzip(string) -} - -module.exports = zip diff --git a/scripts/tmp/.gitignore b/scripts/tmp/.gitignore deleted file mode 100644 index c96a04f0..00000000 --- a/scripts/tmp/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -* -!.gitignore \ No newline at end of file diff --git a/scripts/types/langs.d.ts b/scripts/types/langs.d.ts new file mode 100644 index 00000000..60fb498a --- /dev/null +++ b/scripts/types/langs.d.ts @@ -0,0 +1 @@ +declare module 'langs' From c0cfcf7a478613324e1242deb28e3badd3b1dc83 Mon Sep 17 00:00:00 2001 From: freearhey <7253922+freearhey@users.noreply.github.com> Date: Mon, 2 Oct 2023 06:35:33 +0300 Subject: [PATCH 13/19] Update /sites --- sites/9tv.co.il/9tv.co.il.channels.xml | 8 +- sites/9tv.co.il/9tv.co.il.config.js | 2 +- sites/9tv.co.il/9tv.co.il.test.js | 11 +- sites/abc.net.au/abc.net.au.channels.xml | 70 +- sites/abc.net.au/abc.net.au.test.js | 11 +- sites/allente.se/allente.se.config.js | 2 +- sites/allente.se/allente.se.test.js | 20 +- sites/allente.se/allente.se_dk.channels.xml | 128 +- sites/allente.se/allente.se_fi.channels.xml | 76 +- sites/allente.se/allente.se_no.channels.xml | 146 +- sites/allente.se/allente.se_se.channels.xml | 224 +- .../andorradifusio.ad.channels.xml | 8 +- .../andorradifusio.ad.config.js | 4 +- .../andorradifusio.ad.test.js | 8 +- .../arianaafgtv.com.channels.xml | 8 +- .../arianaafgtv.com/arianaafgtv.com.config.js | 4 +- .../arianatelevision.com.channels.xml | 8 +- .../arianatelevision.com.config.js | 4 +- .../arianatelevision.com.test.js | 16 +- sites/arirang.com/arirang.com.channels.xml | 12 +- sites/arirang.com/arirang.com.config.js | 214 +- sites/arirang.com/arirang.com.test.js | 83 +- sites/artonline.tv/artonline.tv.channels.xml | 16 +- sites/artonline.tv/artonline.tv.config.js | 4 +- sites/artonline.tv/artonline.tv.test.js | 5 +- sites/astro.com.my/astro.com.my.channels.xml | 282 +- sites/astro.com.my/astro.com.my.config.js | 8 +- sites/astro.com.my/astro.com.my.test.js | 2 +- sites/bein.com/bein.com.channels.xml | 162 - sites/bein.com/bein.com.config.js | 5 +- sites/bein.com/bein.com.test.js | 2 +- sites/bein.com/bein.com_ar.channels.xml | 79 + sites/bein.com/bein.com_en.channels.xml | 80 + sites/beinsports.com/beinsports.com.config.js | 14 +- sites/beinsports.com/beinsports.com.test.js | 4 +- .../beinsports.com_au.channels.xml | 12 +- .../beinsports.com_fr.channels.xml | 26 +- .../beinsports.com_hk.channels.xml | 10 +- .../beinsports.com_id.channels.xml | 10 +- .../beinsports.com_my.channels.xml | 8 +- .../beinsports.com_ph.channels.xml | 10 +- .../beinsports.com_qa-ar.channels.xml | 56 +- .../beinsports.com_qa-en.channels.xml | 44 +- .../beinsports.com_th.channels.xml | 10 +- .../beinsports.com_us-en.channels.xml | 26 +- .../beinsports.com_us-es.channels.xml | 26 +- .../berrymedia.co.kr.channels.xml | 18 +- .../berrymedia.co.kr.config.js | 2 +- .../berrymedia.co.kr/berrymedia.co.kr.test.js | 6 +- sites/bt.com/bt.com.channels.xml | 336 +- sites/bt.com/bt.com.config.js | 3 - sites/bt.com/bt.com.test.js | 12 +- .../cablego.com.pe.channels.xml | 198 +- sites/cablego.com.pe/cablego.com.pe.test.js | 2 +- .../cableplus.com.uy.channels.xml | 322 +- .../cableplus.com.uy.config.js | 6 +- .../cableplus.com.uy/cableplus.com.uy.test.js | 6 +- .../canalplus-caraibes.com.channels.xml | 260 +- .../canalplus-caraibes.com.config.js | 5 +- .../canalplus-caraibes.com.test.js | 8 +- .../canalplus-haiti.com.channels.xml | 230 +- .../canalplus-haiti.com.config.js | 4 +- .../canalplus-haiti.com.test.js | 7 +- .../canalplus-reunion.com.channels.xml | 242 +- .../canalplus-reunion.com.test.js | 5 +- .../canalplus.com/canalplus.com.channels.xml | 648 ++- sites/canalplus.com/canalplus.com.config.js | 1 - sites/canalplus.com/canalplus.com.test.js | 8 +- sites/cgates.lt/cgates.lt.channels.xml | 244 +- sites/cgates.lt/cgates.lt.config.js | 4 +- sites/cgates.lt/cgates.lt.test.js | 2 +- .../chaines-tv.orange.fr.channels.xml | 394 +- .../chaines-tv.orange.fr.test.js | 13 +- .../clickthecity.com.channels.xml | 72 +- .../clickthecity.com.config.js | 10 +- .../clickthecity.com/clickthecity.com.test.js | 9 +- sites/compulms.com/compulms.com.channels.xml | 14 +- sites/compulms.com/compulms.com.test.js | 2 +- .../comteco.com.bo.channels.xml | 156 +- sites/comteco.com.bo/comteco.com.bo.test.js | 13 +- sites/cosmote.gr/cosmote.gr.channels.xml | 176 +- sites/cosmote.gr/cosmote.gr.config.js | 5 +- sites/cosmote.gr/cosmote.gr.test.js | 12 +- sites/delta.nl/delta.nl.channels.xml | 452 +- sites/delta.nl/delta.nl.test.js | 13 +- .../digiturk.com.tr.channels.xml | 266 +- .../digiturk.com.tr/digiturk.com.tr.config.js | 11 +- sites/digiturk.com.tr/digiturk.com.tr.test.js | 8 +- .../directv.com.ar.channels.xml | 832 ++- sites/directv.com.ar/directv.com.ar.config.js | 16 +- sites/directv.com.ar/directv.com.ar.test.js | 7 +- .../directv.com.uy.channels.xml | 292 +- sites/directv.com.uy/directv.com.uy.config.js | 3 +- sites/directv.com.uy/directv.com.uy.test.js | 4 +- sites/directv.com/directv.com.channels.xml | 2092 ++++---- sites/directv.com/directv.com.config.js | 16 +- sites/directv.com/directv.com.test.js | 2 +- sites/dishtv.in/dishtv.in.channels.xml | 916 ++-- sites/dishtv.in/dishtv.in.config.js | 14 +- sites/dishtv.in/dishtv.in.test.js | 7 +- .../dsmart.com.tr/dsmart.com.tr.channels.xml | 410 +- sites/dsmart.com.tr/dsmart.com.tr.config.js | 5 +- sites/dsmart.com.tr/dsmart.com.tr.test.js | 11 +- sites/dstv.com/dstv.com.channels.xml | 422 +- sites/dstv.com/dstv.com.config.js | 4 +- sites/dstv.com/dstv.com.test.js | 4 +- sites/elcinema.com/elcinema.com.channels.xml | 472 +- sites/elcinema.com/elcinema.com.config.js | 1 - sites/elcinema.com/elcinema.com.test.js | 6 +- .../ena.skylifetv.co.kr.channels.xml | 18 +- .../ena.skylifetv.co.kr.config.js | 2 +- .../ena.skylifetv.co.kr.test.js | 6 +- .../entertainment.ie.channels.xml | 222 +- .../entertainment.ie.config.js | 6 +- .../entertainment.ie/entertainment.ie.test.js | 2 +- .../epg.i-cable.com.channels.xml | 332 +- .../epg.i-cable.com/epg.i-cable.com.config.js | 6 +- sites/epg.i-cable.com/epg.i-cable.com.test.js | 4 +- .../firstmedia.com.channels.xml | 374 +- sites/firstmedia.com/firstmedia.com.config.js | 50 +- sites/firstmedia.com/firstmedia.com.test.js | 32 +- sites/flixed.io/flixed.io.channels.xml | 992 ++-- sites/flixed.io/flixed.io.config.js | 2 +- sites/flixed.io/flixed.io.test.js | 6 +- .../foxsports.com.au.channels.xml | 38 +- .../foxsports.com.au/foxsports.com.au.test.js | 10 +- .../foxtel.com.au/foxtel.com.au.channels.xml | 390 +- sites/foxtel.com.au/foxtel.com.au.config.js | 21 +- sites/foxtel.com.au/foxtel.com.au.test.js | 2 +- .../frikanalen.no/frikanalen.no.channels.xml | 8 +- sites/frikanalen.no/frikanalen.no.test.js | 11 +- sites/gatotv.com/gatotv.com.channels.xml | 980 ++-- sites/gatotv.com/gatotv.com.config.js | 3 +- sites/gatotv.com/gatotv.com.test.js | 4 +- .../getafteritmedia.com.channels.xml | 16 +- .../getafteritmedia.com.test.js | 6 +- .../guidatv.sky.it.channels.xml | 332 +- sites/guidatv.sky.it/guidatv.sky.it.test.js | 7 +- .../guide.dstv.com.channels.xml | 648 ++- sites/guide.dstv.com/guide.dstv.com.config.js | 12 +- sites/guide.dstv.com/guide.dstv.com.test.js | 9 +- sites/hd-plus.de/hd-plus.de.channels.xml | 246 +- sites/hd-plus.de/hd-plus.de.test.js | 13 +- sites/horizon.tv/horizon.tv.channels.xml | 374 +- sites/horizon.tv/horizon.tv.config.js | 6 +- sites/horizon.tv/horizon.tv.test.js | 229 +- sites/i.mjh.nz/i.mjh.nz.config.js | 5 +- sites/i.mjh.nz/i.mjh.nz.test.js | 4 +- sites/i.mjh.nz/i.mjh.nz_foxtel.channels.xml | 172 +- sites/i.mjh.nz/i.mjh.nz_plex.channels.xml | 660 ++- sites/i.mjh.nz/i.mjh.nz_pluto.channels.xml | 666 ++- sites/i.mjh.nz/i.mjh.nz_samsung.channels.xml | 454 +- sites/i.mjh.nz/i.mjh.nz_skygo.channels.xml | 204 +- sites/i.mjh.nz/i.mjh.nz_stirr.channels.xml | 218 +- sites/i24news.tv/i24news.tv.channels.xml | 12 +- sites/i24news.tv/i24news.tv.test.js | 7 +- .../indihometv.com.channels.xml | 305 +- sites/indihometv.com/indihometv.com.config.js | 4 +- sites/indihometv.com/indihometv.com.test.js | 9 +- .../ionplustv.com/ionplustv.com.channels.xml | 8 +- sites/ionplustv.com/ionplustv.com.config.js | 7 +- sites/ionplustv.com/ionplustv.com.test.js | 9 +- sites/ipko.com/ipko.com.channels.xml | 76 +- sites/ipko.com/ipko.com.test.js | 10 +- sites/kan.org.il/kan.org.il.channels.xml | 12 +- sites/kan.org.il/kan.org.il.config.js | 1 - sites/kan.org.il/kan.org.il.test.js | 7 +- sites/knr.gl/knr.gl.channels.xml | 8 +- sites/knr.gl/knr.gl.config.js | 2 +- sites/knr.gl/knr.gl.test.js | 11 +- sites/kplus.vn/kplus.vn.channels.xml | 58 +- sites/kplus.vn/kplus.vn.config.js | 3 +- sites/kplus.vn/kplus.vn.test.js | 7 +- sites/kvf.fo/kvf.fo.channels.xml | 8 +- sites/kvf.fo/kvf.fo.test.js | 6 +- sites/m.tv.sms.cz/m.tv.sms.cz.channels.xml | 1058 ++-- sites/m.tv.sms.cz/m.tv.sms.cz.config.js | 2 +- sites/m.tv.sms.cz/m.tv.sms.cz.test.js | 8 +- sites/magentatv.at/magentatv.at.channels.xml | 434 +- sites/magentatv.at/magentatv.at.config.js | 12 +- sites/magentatv.at/magentatv.at.test.js | 4 +- sites/magentatv.de/magentatv.de.channels.xml | 522 +- sites/magentatv.de/magentatv.de.config.js | 5 +- sites/magentatv.de/magentatv.de.test.js | 7 +- sites/magticom.ge/magticom.ge.channels.xml | 234 +- sites/magticom.ge/magticom.ge.config.js | 8 +- sites/magticom.ge/magticom.ge.test.js | 14 +- sites/mako.co.il/mako.co.il.channels.xml | 8 +- sites/mako.co.il/mako.co.il.config.js | 6 - sites/mako.co.il/mako.co.il.test.js | 11 +- .../maxtv.hrvatskitelekom.hr.channels.xml | 326 +- .../maxtv.hrvatskitelekom.hr.test.js | 8 +- sites/maxtvgo.mk/maxtvgo.mk.channels.xml | 108 +- sites/maxtvgo.mk/maxtvgo.mk.config.js | 6 +- sites/maxtvgo.mk/maxtvgo.mk.test.js | 12 +- sites/mbc.net/mbc.net.channels.xml | 40 +- sites/mbc.net/mbc.net.config.js | 3 +- sites/mbc.net/mbc.net.test.js | 7 +- .../mediagenie.co.kr.channels.xml | 16 +- .../mediagenie.co.kr.config.js | 7 +- .../mediagenie.co.kr/mediagenie.co.kr.test.js | 6 +- .../mediaklikk.hu/mediaklikk.hu.channels.xml | 22 +- sites/mediaklikk.hu/mediaklikk.hu.config.js | 2 +- sites/mediaklikk.hu/mediaklikk.hu.test.js | 8 +- sites/mediaset.it/mediaset.it.channels.xml | 36 +- sites/melita.com/melita.com.channels.xml | 242 +- sites/melita.com/melita.com.test.js | 7 +- sites/meo.pt/meo.pt.channels.xml | 408 +- sites/meo.pt/meo.pt.config.js | 2 +- sites/meo.pt/meo.pt.test.js | 2 +- sites/mewatch.sg/mewatch.sg.channels.xml | 40 +- sites/mewatch.sg/mewatch.sg.config.js | 2 +- sites/mewatch.sg/mewatch.sg.test.js | 10 +- sites/mi.tv/mi.tv.config.js | 2 +- sites/mi.tv/mi.tv.test.js | 19 +- sites/mi.tv/mi.tv_ar.channels.xml | 324 +- sites/mi.tv/mi.tv_br.channels.xml | 516 +- sites/mi.tv/mi.tv_cl.channels.xml | 164 +- sites/mi.tv/mi.tv_co.channels.xml | 88 +- sites/mi.tv/mi.tv_gt.channels.xml | 42 +- sites/mi.tv/mi.tv_hn.channels.xml | 50 +- sites/mi.tv/mi.tv_mx.channels.xml | 58 +- sites/mi.tv/mi.tv_pe.channels.xml | 44 +- sites/mi.tv/mi.tv_sv.channels.xml | 30 +- sites/mncvision.id/mncvision.id.channels.xml | 394 +- sites/mncvision.id/mncvision.id.config.js | 8 +- sites/mncvision.id/mncvision.id.test.js | 4 +- sites/moji.id/moji.id.channels.xml | 9 +- sites/moji.id/moji.id.config.js | 158 +- sites/moji.id/moji.id.test.js | 41 +- .../mon-programme-tv.be.channels.xml | 228 +- .../mon-programme-tv.be.config.js | 2 +- .../mon-programme-tv.be.test.js | 2 +- .../movistarplus.es.channels.xml | 370 +- .../movistarplus.es/movistarplus.es.config.js | 8 +- sites/movistarplus.es/movistarplus.es.test.js | 15 +- sites/mtel.ba/mtel.ba.channels.xml | 342 +- sites/mtel.ba/mtel.ba.config.js | 2 +- sites/mtel.ba/mtel.ba.test.js | 11 +- sites/mts.rs/mts.rs.channels.xml | 702 ++- sites/mts.rs/mts.rs.config.js | 12 +- sites/mts.rs/mts.rs.test.js | 10 +- .../mujtvprogram.cz.channels.xml | 544 +- sites/mujtvprogram.cz/mujtvprogram.cz.test.js | 7 +- sites/musor.tv/musor.tv.channels.xml | 344 +- sites/musor.tv/musor.tv.config.js | 2 +- sites/musor.tv/musor.tv.test.js | 8 +- .../myafn.dodmedia.osd.mil.channels.xml | 22 +- .../myafn.dodmedia.osd.mil.config.js | 4 +- .../myafn.dodmedia.osd.mil.test.js | 5 +- sites/mysky.com.ph/mysky.com.ph.channels.xml | 246 +- sites/mysky.com.ph/mysky.com.ph.config.js | 2 +- sites/mysky.com.ph/mysky.com.ph.test.js | 7 +- .../mytvsuper.com/mytvsuper.com.channels.xml | 214 +- sites/mytvsuper.com/mytvsuper.com.test.js | 3 +- sites/nhk.or.jp/nhk.or.jp.channels.xml | 10 +- sites/nhk.or.jp/nhk.or.jp.config.js | 99 +- sites/nhk.or.jp/nhk.or.jp.test.js | 43 +- .../nhkworldpremium.com.test.js | 7 +- .../nhkworldpremium.com_en.channels.xml | 8 +- .../nhkworldpremium.com_ja.channels.xml | 8 +- sites/nos.pt/nos.pt.channels.xml | 414 +- sites/nos.pt/nos.pt.config.js | 7 +- sites/nos.pt/nos.pt.test.js | 6 +- .../novacyprus.com.channels.xml | 64 +- sites/novacyprus.com/novacyprus.com.config.js | 6 +- sites/novacyprus.com/novacyprus.com.test.js | 9 +- .../novasports.gr/novasports.gr.channels.xml | 38 +- sites/novasports.gr/novasports.gr.config.js | 6 +- sites/novasports.gr/novasports.gr.test.js | 2 +- .../nowplayer.now.com.channels.xml | 492 +- .../nowplayer.now.com.config.js | 2 +- .../nowplayer.now.com.test.js | 9 +- .../nuevosiglo.com.uy.channels.xml | 354 +- .../nuevosiglo.com.uy.config.js | 2 - .../nuevosiglo.com.uy.test.js | 8 +- .../ontvtonight.com/ontvtonight.com.config.js | 6 +- sites/ontvtonight.com/ontvtonight.com.test.js | 15 +- .../ontvtonight.com_au.channels.xml | 106 +- .../ontvtonight.com_ie.channels.xml | 12 +- .../ontvtonight.com_uk.channels.xml | 202 +- .../ontvtonight.com_us.channels.xml | 78 +- sites/osn.com/osn.com.channels.xml | 213 - sites/osn.com/osn.com.config.js | 5 +- sites/osn.com/osn.com_ar.channels.xml | 104 + sites/osn.com/osn.com_en.channels.xml | 104 + sites/pbsguam.org/pbsguam.org.channels.xml | 8 +- sites/pbsguam.org/pbsguam.org.config.js | 11 +- sites/pbsguam.org/pbsguam.org.test.js | 6 +- sites/plex.tv/plex.tv.channels.xml | 686 ++- sites/plex.tv/plex.tv.config.js | 6 +- sites/plex.tv/plex.tv.test.js | 3 +- .../programacion-tv.elpais.com.channels.xml | 402 +- .../programacion-tv.elpais.com.config.js | 2 +- .../programacion-tv.elpais.com.test.js | 4 +- .../programacion.tcc.com.uy.channels.xml | 304 +- .../programacion.tcc.com.uy.test.js | 4 +- .../programetv.ro/programetv.ro.channels.xml | 462 +- sites/programetv.ro/programetv.ro.config.js | 4 +- sites/programetv.ro/programetv.ro.test.js | 9 +- .../programme-tv.net.channels.xml | 428 +- .../programme-tv.vini.pf.channels.xml | 10 +- .../programme-tv.vini.pf.config.js | 7 +- .../programme-tv.vini.pf.test.js | 29 +- .../programme.tvb.com.channels.xml | 24 +- .../programme.tvb.com.test.js | 2 +- .../programtv.onet.pl.channels.xml | 682 ++- .../programtv.onet.pl.test.js | 16 +- .../proximusmwc.be.channels.xml | 420 +- sites/proximusmwc.be/proximusmwc.be.config.js | 5 +- sites/proximusmwc.be/proximusmwc.be.test.js | 9 +- sites/raiplay.it/raiplay.it.channels.xml | 34 +- sites/raiplay.it/raiplay.it.test.js | 7 +- .../reportv.com.ar.channels.xml | 328 +- sites/reportv.com.ar/reportv.com.ar.config.js | 12 +- sites/reportv.com.ar/reportv.com.ar.test.js | 2 +- sites/rev.bs/rev.bs.channels.xml | 366 +- sites/rev.bs/rev.bs.config.js | 5 +- sites/rev.bs/rev.bs.test.js | 17 +- sites/rotana.net/rotana.net.channels.xml | 28 +- sites/rotana.net/rotana.net.config.js | 7 +- sites/rotana.net/rotana.net.test.js | 8 +- sites/rtb.gov.bn/rtb.gov.bn.channels.xml | 12 +- sites/rtb.gov.bn/rtb.gov.bn.config.js | 13 +- sites/rtb.gov.bn/rtb.gov.bn.test.js | 2 +- sites/rthk.hk/rthk.hk.channels.xml | 22 +- sites/rthk.hk/rthk.hk.config.js | 7 +- sites/rthk.hk/rthk.hk.test.js | 3 +- .../rtmklik.rtm.gov.my.channels.xml | 22 +- .../rtmklik.rtm.gov.my.test.js | 7 +- sites/rtp.pt/rtp.pt.channels.xml | 26 +- sites/rtp.pt/rtp.pt.test.js | 2 +- sites/ruv.is/ruv.is.channels.xml | 10 +- sites/ruv.is/ruv.is.config.js | 3 +- sites/ruv.is/ruv.is.test.js | 4 +- sites/sat.tv/sat.tv.channels.xml | 1122 ++-- sites/sat.tv/sat.tv.config.js | 5 +- sites/sat.tv/sat.tv.test.js | 2 +- sites/siba.com.co/siba.com.co.channels.xml | 202 +- sites/siba.com.co/siba.com.co.test.js | 7 +- sites/singtel.com/singtel.com.channels.xml | 310 +- sites/singtel.com/singtel.com.config.js | 8 +- sites/singtel.com/singtel.com.test.js | 14 +- sites/sjonvarp.is/sjonvarp.is.channels.xml | 40 +- sites/sjonvarp.is/sjonvarp.is.config.js | 1 - sites/sjonvarp.is/sjonvarp.is.test.js | 2 +- sites/sky.co.nz/sky.co.nz.channels.xml | 229 +- sites/sky.co.nz/sky.co.nz.config.js | 4 +- sites/sky.co.nz/sky.co.nz.test.js | 10 +- sites/sky.com/sky.com.channels.xml | 808 ++- sites/sky.com/sky.com.config.js | 2 +- sites/sky.com/sky.com.test.js | 7 +- sites/sky.de/sky.de.channels.xml | 195 +- sites/sky.de/sky.de.config.js | 12 +- sites/sky.de/sky.de.test.js | 9 +- sites/sportsnet.ca/sportsnet.ca.channels.xml | 22 +- sites/sportsnet.ca/sportsnet.ca.test.js | 8 +- .../starhubtvplus.com.channels.xml | 264 +- .../starhubtvplus.com.config.js | 7 +- .../starhubtvplus.com.test.js | 8 +- .../startimestv.com.channels.xml | 684 ++- .../startimestv.com/startimestv.com.config.js | 12 +- sites/startimestv.com/startimestv.com.test.js | 8 +- sites/startv.com/startv.com.channels.xml | 88 +- sites/startv.com/startv.com.config.js | 1 - sites/startv.com/startv.com.test.js | 7 +- .../streamingtvguides.com.channels.xml | 8 +- .../streamingtvguides.com.config.js | 4 +- .../streamingtvguides.com.test.js | 6 +- .../superguidatv.it.channels.xml | 362 +- .../superguidatv.it/superguidatv.it.config.js | 6 +- sites/superguidatv.it/superguidatv.it.test.js | 6 +- .../taiwanplus.com.channels.xml | 9 +- sites/taiwanplus.com/taiwanplus.com.config.js | 109 +- sites/taiwanplus.com/taiwanplus.com.test.js | 43 +- sites/tapdmv.com/tapdmv.com.channels.xml | 64 +- sites/tapdmv.com/tapdmv.com.config.js | 4 +- sites/tapdmv.com/tapdmv.com.test.js | 7 +- .../telecablesat.fr.channels.xml | 566 +- .../telecablesat.fr/telecablesat.fr.config.js | 13 +- sites/telecablesat.fr/telecablesat.fr.test.js | 8 +- sites/telenet.tv/telenet.tv.channels.xml | 226 +- sites/telenet.tv/telenet.tv.test.js | 4 +- sites/teliatv.ee/teliatv.ee.channels.xml | 341 -- sites/teliatv.ee/teliatv.ee.config.js | 4 +- sites/teliatv.ee/teliatv.ee.test.js | 11 +- sites/teliatv.ee/teliatv.ee_en.channels.xml | 96 + sites/teliatv.ee/teliatv.ee_et.channels.xml | 73 + sites/teliatv.ee/teliatv.ee_ru.channels.xml | 86 + sites/telkku.com/telkku.com.channels.xml | 198 +- sites/telkku.com/telkku.com.config.js | 4 +- sites/telkku.com/telkku.com.test.js | 2 +- sites/telkussa.fi/telkussa.fi.channels.xml | 92 +- sites/telkussa.fi/telkussa.fi.config.js | 2 +- sites/telsu.fi/telsu.fi.channels.xml | 56 +- sites/telsu.fi/telsu.fi.config.js | 6 +- sites/telsu.fi/telsu.fi.test.js | 2 +- sites/tivu.tv/tivu.tv.channels.xml | 148 +- sites/tivu.tv/tivu.tv.config.js | 7 +- sites/tivu.tv/tivu.tv.test.js | 7 +- .../toonamiaftermath.com.channels.xml | 8 +- .../toonamiaftermath.com.config.js | 19 +- .../toonamiaftermath.com.test.js | 6 +- .../transvision.co.id.channels.xml | 162 +- .../transvision.co.id.config.js | 12 +- .../transvision.co.id.test.js | 7 +- .../turksatkablo.com.tr.channels.xml | 302 +- .../turksatkablo.com.tr.config.js | 4 +- .../turksatkablo.com.tr.test.js | 7 +- sites/tv.blue.ch/tv.blue.ch.channels.xml | 1626 +++--- sites/tv.blue.ch/tv.blue.ch.config.js | 3 +- sites/tv.blue.ch/tv.blue.ch.test.js | 14 +- sites/tv.cctv.com/tv.cctv.com.channels.xml | 194 +- sites/tv.dir.bg/tv.dir.bg.channels.xml | 206 +- sites/tv.dir.bg/tv.dir.bg.config.js | 4 +- sites/tv.dir.bg/tv.dir.bg.test.js | 14 +- sites/tv.lv/tv.lv.channels.xml | 46 +- sites/tv.mail.ru/tv.mail.ru.channels.xml | 88 +- sites/tv.mail.ru/tv.mail.ru.config.js | 1 + sites/tv.mail.ru/tv.mail.ru.test.js | 16 +- .../tv.movistar.com.pe.channels.xml | 482 +- .../tv.movistar.com.pe.config.js | 4 +- .../tv.movistar.com.pe.test.js | 4 +- sites/tv.nu/tv.nu.channels.xml | 362 +- sites/tv.nu/tv.nu.test.js | 7 +- sites/tv.post.lu/tv.post.lu.channels.xml | 678 ++- sites/tv.post.lu/tv.post.lu.config.js | 2 +- sites/tv.post.lu/tv.post.lu.test.js | 7 +- .../tv.trueid.net/tv.trueid.net.channels.xml | 186 +- sites/tv.trueid.net/tv.trueid.net.test.js | 5 +- .../tv.vera.com.uy.channels.xml | 112 +- sites/tv.vera.com.uy/tv.vera.com.uy.config.js | 2 +- sites/tv.vera.com.uy/tv.vera.com.uy.test.js | 4 +- sites/tv.yandex.ru/tv.yandex.ru.channels.xml | 582 ++- sites/tv.yandex.ru/tv.yandex.ru.config.js | 2 +- sites/tv.yandex.ru/tv.yandex.ru.test.js | 9 +- sites/tv.yettel.hu/tv.yettel.hu.channels.xml | 154 +- sites/tv.yettel.hu/tv.yettel.hu.config.js | 2 +- sites/tv.yettel.hu/tv.yettel.hu.test.js | 4 +- sites/tv24.co.uk/tv24.co.uk.channels.xml | 216 +- sites/tv24.co.uk/tv24.co.uk.config.js | 6 +- sites/tv24.co.uk/tv24.co.uk.test.js | 2 +- sites/tv24.se/tv24.se.channels.xml | 610 ++- sites/tv24.se/tv24.se.config.js | 14 +- sites/tv24.se/tv24.se.test.js | 4 +- .../tv2go.t-2.net/tv2go.t-2.net.channels.xml | 558 +- sites/tv2go.t-2.net/tv2go.t-2.net.test.js | 14 +- sites/tva.tv/tva.tv.channels.xml | 62 +- sites/tva.tv/tva.tv.config.js | 7 +- sites/tva.tv/tva.tv.test.js | 12 +- .../tvarenasport.com.channels.xml | 30 +- .../tvarenasport.com.config.js | 4 +- .../tvarenasport.com/tvarenasport.com.test.js | 9 +- .../tvarenasport.hr.channels.xml | 26 +- .../tvarenasport.hr/tvarenasport.hr.config.js | 7 +- sites/tvarenasport.hr/tvarenasport.hr.test.js | 9 +- .../tvcubana.icrt.cu.channels.xml | 26 +- .../tvcubana.icrt.cu.config.js | 6 +- .../tvcubana.icrt.cu/tvcubana.icrt.cu.test.js | 12 +- sites/tvgids.nl/tvgids.nl.channels.xml | 240 +- sites/tvgids.nl/tvgids.nl.config.js | 2 +- sites/tvgids.nl/tvgids.nl.test.js | 4 +- sites/tvguide.com/tvguide.com.channels.xml | 176 +- sites/tvguide.com/tvguide.com.config.js | 2 +- sites/tvguide.com/tvguide.com.test.js | 2 +- .../tvguide.myjcom.jp.channels.xml | 274 +- .../tvguide.myjcom.jp.config.js | 13 +- .../tvguide.myjcom.jp.test.js | 12 +- sites/tvhebdo.com/tvhebdo.com.channels.xml | 470 +- sites/tvhebdo.com/tvhebdo.com.config.js | 3 +- sites/tvhebdo.com/tvhebdo.com.test.js | 2 +- sites/tvheute.at/tvheute.at.channels.xml | 110 +- sites/tvheute.at/tvheute.at.config.js | 2 +- sites/tvheute.at/tvheute.at.test.js | 4 +- sites/tvim.tv/tvim.tv.channels.xml | 66 +- sites/tvim.tv/tvim.tv.config.js | 4 +- sites/tvim.tv/tvim.tv.test.js | 9 +- sites/tving.com/tving.com.channels.xml | 66 +- sites/tving.com/tving.com.config.js | 8 +- sites/tving.com/tving.com.test.js | 6 +- sites/tvmi.mt/tvmi.mt.channels.xml | 12 +- sites/tvmi.mt/tvmi.mt.config.js | 2 +- sites/tvmi.mt/tvmi.mt.test.js | 4 +- sites/tvmusor.hu/tvmusor.hu.channels.xml | 186 +- sites/tvmusor.hu/tvmusor.hu.config.js | 4 +- sites/tvmusor.hu/tvmusor.hu.test.js | 8 +- .../tvpassport.com.channels.xml | 1832 ++++--- sites/tvpassport.com/tvpassport.com.config.js | 4 +- sites/tvpassport.com/tvpassport.com.test.js | 2 +- .../tvplus.com.tr/tvplus.com.tr.channels.xml | 296 +- sites/tvplus.com.tr/tvplus.com.tr.test.js | 11 +- sites/tvprofil.com/tvprofil.com.channels.xml | 1138 ++-- sites/tvprofil.com/tvprofil.com.config.js | 2 +- sites/tvprofil.com/tvprofil.com.test.js | 4 +- sites/tvtv.us/tvtv.us.channels.xml | 4598 ++++++++--------- sites/tvtv.us/tvtv.us.test.js | 11 +- sites/unifi.com.my/unifi.com.my.channels.xml | 140 +- sites/unifi.com.my/unifi.com.my.config.js | 2 +- sites/unifi.com.my/unifi.com.my.test.js | 4 +- sites/vidio.com/vidio.com.channels.xml | 140 +- sites/vidio.com/vidio.com.config.js | 4 +- sites/vidio.com/vidio.com.test.js | 13 +- .../virginmedia.com.channels.xml | 394 +- .../virginmedia.com/virginmedia.com.config.js | 2 +- sites/virginmedia.com/virginmedia.com.test.js | 21 +- .../virginmediatelevision.ie.channels.xml | 16 +- .../virginmediatelevision.ie.test.js | 9 +- .../visionplus.id/visionplus.id.channels.xml | 264 +- sites/visionplus.id/visionplus.id.config.js | 2 +- sites/visionplus.id/visionplus.id.test.js | 5 +- sites/vivacom.bg/vivacom.bg.channels.xml | 316 +- sites/vivacom.bg/vivacom.bg.config.js | 11 +- sites/vivacom.bg/vivacom.bg.test.js | 10 +- sites/vtm.be/vtm.be.channels.xml | 20 +- sites/vtm.be/vtm.be.config.js | 2 +- sites/vtm.be/vtm.be.test.js | 7 +- .../walesi.com.fj/walesi.com.fj.channels.xml | 22 +- sites/walesi.com.fj/walesi.com.fj.config.js | 5 +- sites/walesi.com.fj/walesi.com.fj.test.js | 13 +- sites/watchyour.tv/watchyour.tv.channels.xml | 84 +- sites/watchyour.tv/watchyour.tv.config.js | 4 +- sites/watchyour.tv/watchyour.tv.test.js | 7 +- sites/wavve.com/wavve.com.channels.xml | 160 +- sites/wavve.com/wavve.com.config.js | 5 +- sites/wavve.com/wavve.com.test.js | 7 +- .../worldfishingnetwork.com.channels.xml | 8 +- .../worldfishingnetwork.com.config.js | 4 +- .../worldfishingnetwork.com.test.js | 10 +- sites/xumo.tv/xumo.tv.channels.xml | 620 ++- sites/xumo.tv/xumo.tv.config.js | 6 +- sites/xumo.tv/xumo.tv.test.js | 4 +- sites/zap.co.ao/zap.co.ao.channels.xml | 232 +- sites/zap.co.ao/zap.co.ao.config.js | 3 +- sites/zap.co.ao/zap.co.ao.test.js | 6 +- sites/ziggogo.tv/ziggogo.tv.channels.xml | 290 +- sites/ziggogo.tv/ziggogo.tv.config.js | 4 +- sites/ziggogo.tv/ziggogo.tv.test.js | 4 +- sites/znbc.co.zm/znbc.co.zm.channels.xml | 14 +- sites/znbc.co.zm/znbc.co.zm.config.js | 2 +- sites/znbc.co.zm/znbc.co.zm.test.js | 13 +- sites/zuragt.mn/zuragt.mn.channels.xml | 78 +- sites/zuragt.mn/zuragt.mn.config.js | 4 +- sites/zuragt.mn/zuragt.mn.test.js | 3 +- 543 files changed, 30781 insertions(+), 31187 deletions(-) delete mode 100644 sites/bein.com/bein.com.channels.xml create mode 100644 sites/bein.com/bein.com_ar.channels.xml create mode 100644 sites/bein.com/bein.com_en.channels.xml delete mode 100644 sites/osn.com/osn.com.channels.xml create mode 100644 sites/osn.com/osn.com_ar.channels.xml create mode 100644 sites/osn.com/osn.com_en.channels.xml delete mode 100644 sites/teliatv.ee/teliatv.ee.channels.xml create mode 100644 sites/teliatv.ee/teliatv.ee_en.channels.xml create mode 100644 sites/teliatv.ee/teliatv.ee_et.channels.xml create mode 100644 sites/teliatv.ee/teliatv.ee_ru.channels.xml diff --git a/sites/9tv.co.il/9tv.co.il.channels.xml b/sites/9tv.co.il/9tv.co.il.channels.xml index 509a2f5e..b1ac4ae5 100644 --- a/sites/9tv.co.il/9tv.co.il.channels.xml +++ b/sites/9tv.co.il/9tv.co.il.channels.xml @@ -1,6 +1,4 @@ - - - 9 канал - - + + 9 канал + diff --git a/sites/9tv.co.il/9tv.co.il.config.js b/sites/9tv.co.il/9tv.co.il.config.js index 418d3c55..fcc1c312 100644 --- a/sites/9tv.co.il/9tv.co.il.config.js +++ b/sites/9tv.co.il/9tv.co.il.config.js @@ -49,7 +49,7 @@ function parseIcon($item) { 'background-image' ) if (!backgroundImage) return null - const [_, relativePath] = backgroundImage.match(/url\((.*)\)/) || [null, null] + const [, relativePath] = backgroundImage.match(/url\((.*)\)/) || [null, null] return relativePath ? `https://www.9tv.co.il${relativePath}` : null } diff --git a/sites/9tv.co.il/9tv.co.il.test.js b/sites/9tv.co.il/9tv.co.il.test.js index 3a2a65bb..fce629ca 100644 --- a/sites/9tv.co.il/9tv.co.il.test.js +++ b/sites/9tv.co.il/9tv.co.il.test.js @@ -1,4 +1,4 @@ -// npx epg-grabber --config=sites/9tv.co.il/9tv.co.il.config.js --channels=sites/9tv.co.il/9tv.co.il.channels.xml --output=guide.xml --days=2 +// npm run grab -- --site=9tv.co.il const { parser, url } = require('./9tv.co.il.config.js') const dayjs = require('dayjs') @@ -20,7 +20,8 @@ it('can generate valid url', () => { }) it('can parse response', () => { - const content = ` 06:30 Слепая Она не очень любит говорить о себе или о том, кто и зачем к ней обращается. Живет уединенно, в глуши. Но тех, кто приходит -принимает. Она видит судьбы. 09:10 Орел и решка. Морской сезон Орел и решка. Морской сезон. Ведущие -Алина Астровская и Коля Серга.` + const content = + ' 06:30 Слепая Она не очень любит говорить о себе или о том, кто и зачем к ней обращается. Живет уединенно, в глуши. Но тех, кто приходит -принимает. Она видит судьбы. 09:10 Орел и решка. Морской сезон Орел и решка. Морской сезон. Ведущие -Алина Астровская и Коля Серга.' const result = parser({ content, date }).map(p => { p.start = p.start.toJSON() p.stop = p.stop.toJSON() @@ -31,7 +32,7 @@ it('can parse response', () => { { start: '2022-03-06T04:30:00.000Z', stop: '2022-03-06T07:10:00.000Z', - title: `Слепая`, + title: 'Слепая', icon: 'https://www.9tv.co.il/download/pictures/img_id=8484.jpg', description: 'Она не очень любит говорить о себе или о том, кто и зачем к ней обращается. Живет уединенно, в глуши. Но тех, кто приходит -принимает. Она видит судьбы.' @@ -40,7 +41,7 @@ it('can parse response', () => { start: '2022-03-06T07:10:00.000Z', stop: '2022-03-06T08:10:00.000Z', icon: 'https://www.9tv.co.il/download/pictures/img_id=23694.jpg', - title: `Орел и решка. Морской сезон`, + title: 'Орел и решка. Морской сезон', description: 'Орел и решка. Морской сезон. Ведущие -Алина Астровская и Коля Серга.' } ]) @@ -50,7 +51,7 @@ it('can handle empty guide', () => { const result = parser({ date, channel, - content: `` + content: '' }) expect(result).toMatchObject([]) }) diff --git a/sites/abc.net.au/abc.net.au.channels.xml b/sites/abc.net.au/abc.net.au.channels.xml index ab4dfc52..11b270df 100644 --- a/sites/abc.net.au/abc.net.au.channels.xml +++ b/sites/abc.net.au/abc.net.au.channels.xml @@ -1,37 +1,35 @@ - - - 10 Bold - 10 Peach - 10 Shake - 7flix - 7mate - 7two - 9 Gem - 9 Go! - 9 Life - 9 Rush - ABC Kids - ABC ME - ABC News - ABC TV - ABC TV Plus - Channel 10 - Channel 7 - Channel 9 - NITV - Racing.com - SBS One - SBS Food - SBS Viceland - SBS World Movies - SBS World Watch - Spree TV - TSVN - - - - - - - + + + + + + + 10 Bold + 10 Peach + 10 Shake + 7flix + 7mate + 7two + 9 Gem + 9 Go! + 9 Life + 9 Rush + ABC Kids + ABC ME + ABC News + ABC TV + ABC TV Plus + Channel 10 + Channel 7 + Channel 9 + NITV + Racing.com + SBS One + SBS Food + SBS Viceland + SBS World Movies + SBS World Watch + Spree TV + TSVN + diff --git a/sites/abc.net.au/abc.net.au.test.js b/sites/abc.net.au/abc.net.au.test.js index 44434f0d..29e720c8 100644 --- a/sites/abc.net.au/abc.net.au.test.js +++ b/sites/abc.net.au/abc.net.au.test.js @@ -1,4 +1,4 @@ -// npx epg-grabber --config=sites/abc.net.au/abc.net.au.config.js --channels=sites/abc.net.au/abc.net.au.channels.xml --output=guide.xml --days=2 +// npm run grab -- --site=abc.net.au const { parser, url } = require('./abc.net.au.config.js') const dayjs = require('dayjs') @@ -15,7 +15,8 @@ it('can generate valid url', () => { }) it('can parse response', () => { - const content = `{"date":"2022-12-22","region":"Sydney","schedule":[{"channel":"ABC1","listing":[{"consumer_advice":"Adult Themes, Drug Use, Violence","rating":"M","show_id":912747,"repeat":true,"description":"When tragedy strikes close to home, it puts head teacher Noah Taylor on a collision course with the criminals responsible. Can the Lyell team help him stop the cycle of violence?","title":"Silent Witness","crid":"ZW2178A004S00","start_time":"2022-12-22T00:46:00","series-crid":"ZW2178A","live":false,"captioning":true,"show_type":"Episode","series_num":22,"episode_title":"Lift Up Your Hearts (part Two)","length":58,"onair_title":"Silent Witness","end_time":"2022-12-22T01:44:00","genres":["Entertainment"],"image_file":"ZW2178A004S00_460.jpg","prog_slug":"silent-witness","episode_num":4}]}]}` + const content = + '{"date":"2022-12-22","region":"Sydney","schedule":[{"channel":"ABC1","listing":[{"consumer_advice":"Adult Themes, Drug Use, Violence","rating":"M","show_id":912747,"repeat":true,"description":"When tragedy strikes close to home, it puts head teacher Noah Taylor on a collision course with the criminals responsible. Can the Lyell team help him stop the cycle of violence?","title":"Silent Witness","crid":"ZW2178A004S00","start_time":"2022-12-22T00:46:00","series-crid":"ZW2178A","live":false,"captioning":true,"show_type":"Episode","series_num":22,"episode_title":"Lift Up Your Hearts (part Two)","length":58,"onair_title":"Silent Witness","end_time":"2022-12-22T01:44:00","genres":["Entertainment"],"image_file":"ZW2178A004S00_460.jpg","prog_slug":"silent-witness","episode_num":4}]}]}' const result = parser({ content, channel }).map(p => { p.start = p.start.toJSON() @@ -27,7 +28,8 @@ it('can parse response', () => { { title: 'Silent Witness', sub_title: 'Lift Up Your Hearts (part Two)', - description: `When tragedy strikes close to home, it puts head teacher Noah Taylor on a collision course with the criminals responsible. Can the Lyell team help him stop the cycle of violence?`, + description: + 'When tragedy strikes close to home, it puts head teacher Noah Taylor on a collision course with the criminals responsible. Can the Lyell team help him stop the cycle of violence?', category: ['Entertainment'], rating: { system: 'ACB', @@ -45,7 +47,8 @@ it('can parse response', () => { it('can handle empty guide', () => { const result = parser( { - content: `NoSuchKeyThe specified key does not exist.processed/Sydney_2023-01-17.json6MRHX5TJ12X39B3Y59rH6XRMrmkFywg8Kv58iqpI6O1fuOCuEbKa1HRRYa4buByXMBTvAhz8zuAK7X5D+ZN9ZuWxyGs=` + content: + 'NoSuchKeyThe specified key does not exist.processed/Sydney_2023-01-17.json6MRHX5TJ12X39B3Y59rH6XRMrmkFywg8Kv58iqpI6O1fuOCuEbKa1HRRYa4buByXMBTvAhz8zuAK7X5D+ZN9ZuWxyGs=' }, channel ) diff --git a/sites/allente.se/allente.se.config.js b/sites/allente.se/allente.se.config.js index f2373b0f..f941be0b 100644 --- a/sites/allente.se/allente.se.config.js +++ b/sites/allente.se/allente.se.config.js @@ -47,7 +47,7 @@ module.exports = { } function parseItems(content, channel) { - const [_, channelId] = channel.site_id.split('#') + const [, channelId] = channel.site_id.split('#') const data = JSON.parse(content) if (!data || !Array.isArray(data.channels)) return [] const channelData = data.channels.find(i => i.id === channelId) diff --git a/sites/allente.se/allente.se.test.js b/sites/allente.se/allente.se.test.js index 6d6eab1c..6492b5e7 100644 --- a/sites/allente.se/allente.se.test.js +++ b/sites/allente.se/allente.se.test.js @@ -1,8 +1,8 @@ -// node ./scripts/channels.js --config=./sites/allente.se/allente.se.config.js --output=./sites/allente.se/allente.se_se.channels.xml --set=country:se --set=lang:sv -// node ./scripts/channels.js --config=./sites/allente.se/allente.se.config.js --output=./sites/allente.se/allente.se_fi.channels.xml --set=country:fi --set=lang:fi -// node ./scripts/channels.js --config=./sites/allente.se/allente.se.config.js --output=./sites/allente.se/allente.se_no.channels.xml --set=country:no --set=lang:no -// node ./scripts/channels.js --config=./sites/allente.se/allente.se.config.js --output=./sites/allente.se/allente.se_dk.channels.xml --set=country:dk --set=lang:da -// npx epg-grabber --config=sites/allente.se/allente.se.config.js --channels=sites/allente.se/allente.se_se.channels.xml --output=guide.xml --days=2 +// npm run channels:parse -- --config=./sites/allente.se/allente.se.config.js --output=./sites/allente.se/allente.se_se.channels.xml --set=country:se --set=lang:sv +// npm run channels:parse -- --config=./sites/allente.se/allente.se.config.js --output=./sites/allente.se/allente.se_fi.channels.xml --set=country:fi --set=lang:fi +// npm run channels:parse -- --config=./sites/allente.se/allente.se.config.js --output=./sites/allente.se/allente.se_no.channels.xml --set=country:no --set=lang:no +// npm run channels:parse -- --config=./sites/allente.se/allente.se.config.js --output=./sites/allente.se/allente.se_dk.channels.xml --set=country:dk --set=lang:da +// npm run grab -- --site=allente.se const { parser, url } = require('./allente.se.config.js') const dayjs = require('dayjs') @@ -29,7 +29,8 @@ it('can generate valid url for different country', () => { }) it('can parse response', () => { - const content = `{"channels":[{"id":"0148","icon":"//images.ctfassets.net/989y85n5kcxs/5uT9g9pdQWRZeDPQXVI9g6/9cc44da567f591822ed645c99ecdcb64/SVT_1_black_new__2_.png","name":"SVT1 HD (T)","events":[{"id":"0086202208220710","live":false,"time":"2022-08-22T07:10:00Z","title":"Hemmagympa med Sofia","details":{"title":"Hemmagympa med Sofia","image":"https://viasatps.api.comspace.se/PS/channeldate/image/viasat.ps/21/2022-08-22/se.cs.svt1.event.A_41214031600.jpg?size=2560x1440","description":"Svenskt träningsprogram från 2021. Styrka. Sofia Åhman leder SVT:s hemmagympapass. Denna gång fokuserar vi på styrka.","season":4,"episode":1,"categories":["other"],"duration":"20"}}]}]}` + const content = + '{"channels":[{"id":"0148","icon":"//images.ctfassets.net/989y85n5kcxs/5uT9g9pdQWRZeDPQXVI9g6/9cc44da567f591822ed645c99ecdcb64/SVT_1_black_new__2_.png","name":"SVT1 HD (T)","events":[{"id":"0086202208220710","live":false,"time":"2022-08-22T07:10:00Z","title":"Hemmagympa med Sofia","details":{"title":"Hemmagympa med Sofia","image":"https://viasatps.api.comspace.se/PS/channeldate/image/viasat.ps/21/2022-08-22/se.cs.svt1.event.A_41214031600.jpg?size=2560x1440","description":"Svenskt träningsprogram från 2021. Styrka. Sofia Åhman leder SVT:s hemmagympapass. Denna gång fokuserar vi på styrka.","season":4,"episode":1,"categories":["other"],"duration":"20"}}]}]}' const result = parser({ content, channel }).map(p => { p.start = p.start.toJSON() p.stop = p.stop.toJSON() @@ -40,9 +41,10 @@ it('can parse response', () => { { start: '2022-08-22T07:10:00.000Z', stop: '2022-08-22T07:30:00.000Z', - title: `Hemmagympa med Sofia`, + title: 'Hemmagympa med Sofia', category: ['other'], - description: `Svenskt träningsprogram från 2021. Styrka. Sofia Åhman leder SVT:s hemmagympapass. Denna gång fokuserar vi på styrka.`, + description: + 'Svenskt träningsprogram från 2021. Styrka. Sofia Åhman leder SVT:s hemmagympapass. Denna gång fokuserar vi på styrka.', icon: 'https://viasatps.api.comspace.se/PS/channeldate/image/viasat.ps/21/2022-08-22/se.cs.svt1.event.A_41214031600.jpg?size=2560x1440', season: 4, episode: 1 @@ -54,7 +56,7 @@ it('can handle empty guide', () => { const result = parser({ date, channel, - content: `{"date":"2001-11-17","categories":[],"channels":[]}` + content: '{"date":"2001-11-17","categories":[],"channels":[]}' }) expect(result).toMatchObject([]) }) diff --git a/sites/allente.se/allente.se_dk.channels.xml b/sites/allente.se/allente.se_dk.channels.xml index d0022b5b..91b7aab3 100644 --- a/sites/allente.se/allente.se_dk.channels.xml +++ b/sites/allente.se/allente.se_dk.channels.xml @@ -1,66 +1,64 @@ - - - 6'eren - Boomerang Nordic - Canal 9 - Cartoon Network Nordic - C More First - C More Hits - C More Series - C More Stars - Disney Channel Scandinavia - Disney Junior Scandinavia - DK 4 - DR 1 - DR 2 - DR Ramasjang - E! Europe - EuroNews English - Eurosport 2 Danmark - God TV Scandinavia - Kanal 4 - Kanal 5 - MTV 00s - MTV 80s - MTV Nordic - MTV Hits Europe - National Geographic Danmark - National Geographic Wild Europe - Nickelodeon Danmark - Nick Jr Scandinavia - Nicktoons Scandinavia - NRK1 - Paramount Network Danmark - SF-kanalen - Sky News International - SVT 1 - TV 2 - TV 2 Charlie - TV 2 Fri - TV 2 News - TV 2 Sport - TV 2 Zulu - TV 3 Danmark - TV 3 Max - TV3+ - TV 3 Puls - TV 3 Sport - TV 4 - V Film Action - V Film Family - V Film Hits - V Film Premiere - Viasat Explore - Viasat History HD - Viasat Nature - V Series - V Sport Golf - V Sport Ultra HD - Xee - Aljazeera English - BBC World News Europe - CNBC Europe - CNN International Europe - - + + 6'eren + Boomerang Nordic + Canal 9 + Cartoon Network Nordic + C More First + C More Hits + C More Series + C More Stars + Disney Channel Scandinavia + Disney Junior Scandinavia + DK 4 + DR 1 + DR 2 + DR Ramasjang + E! Europe + EuroNews English + Eurosport 2 Danmark + God TV Scandinavia + Kanal 4 + Kanal 5 + MTV 00s + MTV 80s + MTV Nordic + MTV Hits Europe + National Geographic Danmark + National Geographic Wild Europe + Nickelodeon Danmark + Nick Jr Scandinavia + Nicktoons Scandinavia + NRK1 + Paramount Network Danmark + SF-kanalen + Sky News International + SVT 1 + TV 2 + TV 2 Charlie + TV 2 Fri + TV 2 News + TV 2 Sport + TV 2 Zulu + TV 3 Danmark + TV 3 Max + TV3+ + TV 3 Puls + TV 3 Sport + TV 4 + V Film Action + V Film Family + V Film Hits + V Film Premiere + Viasat Explore + Viasat History HD + Viasat Nature + V Series + V Sport Golf + V Sport Ultra HD + Xee + Aljazeera English + BBC World News Europe + CNBC Europe + CNN International Europe + diff --git a/sites/allente.se/allente.se_fi.channels.xml b/sites/allente.se/allente.se_fi.channels.xml index adbb6657..8320b89f 100644 --- a/sites/allente.se/allente.se_fi.channels.xml +++ b/sites/allente.se/allente.se_fi.channels.xml @@ -1,40 +1,38 @@ - - - Boomerang - Cartoon Network - CNBC - CNN - Disney Channel - Disney Junior - E! - MTV 00s - MTV - National Geographic - National Geographic Wild - Nick Jr - TV 3 Sverige - TV 6 Sverige - V Film Action - V Film Family - V Film Hits - V Film Premiere - Viasat Explore - Viasat History HD - Viasat Nature - V Sport 1 Suomi - V Sport 1 Sverige - V Sport 2 Suomi - V Sport Football - V Sport Golf - V Sport Live 1 - V Sport Live 2 - V Sport Live 3 - V Sport Live 4 - V Sport Live 5 - V Sport + Suomi - V Sport Premium - V Sport Ultra HD - V Sport Vinter - - \ No newline at end of file + + Boomerang + Cartoon Network + CNBC + CNN + Disney Channel + Disney Junior + E! + MTV 00s + MTV + National Geographic + National Geographic Wild + Nick Jr + TV 3 Sverige + TV 6 Sverige + V Film Action + V Film Family + V Film Hits + V Film Premiere + Viasat Explore + Viasat History HD + Viasat Nature + V Sport 1 Suomi + V Sport 1 Sverige + V Sport 2 Suomi + V Sport Football + V Sport Golf + V Sport Live 1 + V Sport Live 2 + V Sport Live 3 + V Sport Live 4 + V Sport Live 5 + V Sport + Suomi + V Sport Premium + V Sport Ultra HD + V Sport Vinter + \ No newline at end of file diff --git a/sites/allente.se/allente.se_no.channels.xml b/sites/allente.se/allente.se_no.channels.xml index 3bfeb483..bc0e0003 100644 --- a/sites/allente.se/allente.se_no.channels.xml +++ b/sites/allente.se/allente.se_no.channels.xml @@ -1,75 +1,73 @@ - - - Aljazeera - BBC World News - Cartoon Network - CNBC - CNN - Discovery Channel - Disney Channel - Disney Junior - DR 2 - E! - EuroNews - Eurosport 1 - Eurosport - FEM - Kunskapskanalen - Matkanalen - Max - MTV 00s - MTV 80s - MTV Hits - MTV Nordic - National Geographic - National Geographic Wild - NFL Network - Nickelodeon - Nick Jr - Nicktoons - NRK1 - NRK2 - NRK3 - Sky News International - SVT 1 - SVT 2 - SVT 24 - SVT Barn - TV 2 - TV 2 - TV 2 Livsstil - TV 2 Nyhetskanalen - TV 2 Sport 1 - TV 2 Sport 2 - TV 2 Sport Premium - TV 2 Zebra - TV 3 Danmark - TV 3 Norge - TV 3 Sverige - TV 6 Norge - TV 6 Sverige - TV Norge - V 4 - V Film Action - V Film Family - V Film Hits - V Film Premiere - Viasat Explore - Viasat History HD - Viasat Nature - Vox - V Series - V Sport 1 - V Sport 2 - V Sport 3 - V Sport Golf - V Sport Live 1 - V Sport Live 2 - V Sport Live 3 - V Sport Live 4 - V Sport Live 5 - V Sport + - V Sport Ultra HD - - \ No newline at end of file + + Aljazeera + BBC World News + Cartoon Network + CNBC + CNN + Discovery Channel + Disney Channel + Disney Junior + DR 2 + E! + EuroNews + Eurosport 1 + Eurosport + FEM + Kunskapskanalen + Matkanalen + Max + MTV 00s + MTV 80s + MTV Hits + MTV Nordic + National Geographic + National Geographic Wild + NFL Network + Nickelodeon + Nick Jr + Nicktoons + NRK1 + NRK2 + NRK3 + Sky News International + SVT 1 + SVT 2 + SVT 24 + SVT Barn + TV 2 + TV 2 + TV 2 Livsstil + TV 2 Nyhetskanalen + TV 2 Sport 1 + TV 2 Sport 2 + TV 2 Sport Premium + TV 2 Zebra + TV 3 Danmark + TV 3 Norge + TV 3 Sverige + TV 6 Norge + TV 6 Sverige + TV Norge + V 4 + V Film Action + V Film Family + V Film Hits + V Film Premiere + Viasat Explore + Viasat History HD + Viasat Nature + Vox + V Series + V Sport 1 + V Sport 2 + V Sport 3 + V Sport Golf + V Sport Live 1 + V Sport Live 2 + V Sport Live 3 + V Sport Live 4 + V Sport Live 5 + V Sport + + V Sport Ultra HD + \ No newline at end of file diff --git a/sites/allente.se/allente.se_se.channels.xml b/sites/allente.se/allente.se_se.channels.xml index cc4d7f66..3461dac9 100644 --- a/sites/allente.se/allente.se_se.channels.xml +++ b/sites/allente.se/allente.se_se.channels.xml @@ -1,114 +1,112 @@ - - - Aljazeera - Animal Planet Sverige - ATG Live - BBC Earth HD - BBC Brit HD - BBC World News - Bloomberg TV - Boomerang - Cartoon Network - C More First - C More Fotboll - C More Hits - C More Hockey - C More Live - C More Live 2 - C More Live 3 - C More Live 4 - C More Live 5 - C More Mix - C More Series - C More Stars - CNBC - CNN - Discovery Channel Sverige - Discovery Science Sverige - Disney Channel - Disney Junior - Discovery+ Extra 1 - Discovery+ Extra 2 - Discovery+ Extra 3 - Discovery+ Extra 4 - Discovery+ Extra 5 - Discovery+ Extra 6 - Discovery+ Extra 7 - Discovery+ Extra 8 - DR 1 - DR 2 - DR Ramasjang - E! - EuroNews - Eurosport 1 - Eurosport 2 - Godare - God TV - History - H2 - Horse & Country TV - Investigation Discovery Sverige - Kanal 5 - Kanal 9 - Kanal 11 - Kunskapskanalen - MTV 00s - MTV 80s - MTV Hits - MTV Nordic - Motorvision - National Geographic - National Geographic Wild - NFL Network - Nickelodeon - Nick Jr - Nicktoons - NRK1 - NRK2 - NRK3 - Paramount Network - Paramount+ Movies - Paramount+ Series - SF-kanalen - Sjuan - Sky News International - Sportkanalen - SVT 1 - SVT 2 - SVT 24 - SVT Barn - TLC Sverige - TV 2 - TV 3 - TV 4 - TV 4 Fakta - TV 4 Film - TV 4 Guld - TV 6 - TV 8 - TV 10 - TV 12 - V Film Action - V Film Family - V Film Hits - V Film Premiere - Viasat Explore - Viasat History HD - Viasat Nature - V Series - V Sport 1 - V Sport Extra - V Sport Football - V Sport Golf - V Sport Live 1 - V Sport Live 2 - V Sport Live 3 - V Sport Live 4 - V Sport Live 5 - V Sport Motor - V Sport Premium - V Sport Ultra HD - V Sport Vinter - - + + Aljazeera + Animal Planet Sverige + ATG Live + BBC Earth HD + BBC Brit HD + BBC World News + Bloomberg TV + Boomerang + Cartoon Network + C More First + C More Fotboll + C More Hits + C More Hockey + C More Live + C More Live 2 + C More Live 3 + C More Live 4 + C More Live 5 + C More Mix + C More Series + C More Stars + CNBC + CNN + Discovery Channel Sverige + Discovery Science Sverige + Disney Channel + Disney Junior + Discovery+ Extra 1 + Discovery+ Extra 2 + Discovery+ Extra 3 + Discovery+ Extra 4 + Discovery+ Extra 5 + Discovery+ Extra 6 + Discovery+ Extra 7 + Discovery+ Extra 8 + DR 1 + DR 2 + DR Ramasjang + E! + EuroNews + Eurosport 1 + Eurosport 2 + Godare + God TV + History + H2 + Horse & Country TV + Investigation Discovery Sverige + Kanal 5 + Kanal 9 + Kanal 11 + Kunskapskanalen + MTV 00s + MTV 80s + MTV Hits + MTV Nordic + Motorvision + National Geographic + National Geographic Wild + NFL Network + Nickelodeon + Nick Jr + Nicktoons + NRK1 + NRK2 + NRK3 + Paramount Network + Paramount+ Movies + Paramount+ Series + SF-kanalen + Sjuan + Sky News International + Sportkanalen + SVT 1 + SVT 2 + SVT 24 + SVT Barn + TLC Sverige + TV 2 + TV 3 + TV 4 + TV 4 Fakta + TV 4 Film + TV 4 Guld + TV 6 + TV 8 + TV 10 + TV 12 + V Film Action + V Film Family + V Film Hits + V Film Premiere + Viasat Explore + Viasat History HD + Viasat Nature + V Series + V Sport 1 + V Sport Extra + V Sport Football + V Sport Golf + V Sport Live 1 + V Sport Live 2 + V Sport Live 3 + V Sport Live 4 + V Sport Live 5 + V Sport Motor + V Sport Premium + V Sport Ultra HD + V Sport Vinter + diff --git a/sites/andorradifusio.ad/andorradifusio.ad.channels.xml b/sites/andorradifusio.ad/andorradifusio.ad.channels.xml index 63556d68..5b24834c 100644 --- a/sites/andorradifusio.ad/andorradifusio.ad.channels.xml +++ b/sites/andorradifusio.ad/andorradifusio.ad.channels.xml @@ -1,6 +1,4 @@ - - - Andorra TV - - \ No newline at end of file + + Andorra TV + \ No newline at end of file diff --git a/sites/andorradifusio.ad/andorradifusio.ad.config.js b/sites/andorradifusio.ad/andorradifusio.ad.config.js index b0f7a33d..c20b2900 100644 --- a/sites/andorradifusio.ad/andorradifusio.ad.config.js +++ b/sites/andorradifusio.ad/andorradifusio.ad.config.js @@ -47,8 +47,8 @@ function parseItems(content, date) { .parent() .parent() const items = [] - const titles = column.find(`p`).toArray() - column.find(`h4`).each((i, time) => { + const titles = column.find('p').toArray() + column.find('h4').each((i, time) => { items.push({ time: $(time).text(), title: $(titles[i]).text() diff --git a/sites/andorradifusio.ad/andorradifusio.ad.test.js b/sites/andorradifusio.ad/andorradifusio.ad.test.js index 4abbf7a7..1e54024b 100644 --- a/sites/andorradifusio.ad/andorradifusio.ad.test.js +++ b/sites/andorradifusio.ad/andorradifusio.ad.test.js @@ -1,4 +1,4 @@ -// npx epg-grabber --config=sites/andorradifusio.ad/andorradifusio.ad.config.js --channels=sites/andorradifusio.ad/andorradifusio.ad.channels.xml --output=guide.xml +// npm run grab -- --site=andorradifusio.ad const { parser, url } = require('./andorradifusio.ad.config.js') const fs = require('fs') @@ -30,20 +30,20 @@ it('can parse response', () => { expect(results[0]).toMatchObject({ start: '2023-06-07T05:00:00.000Z', stop: '2023-06-07T06:00:00.000Z', - title: `Club Piolet` + title: 'Club Piolet' }) expect(results[20]).toMatchObject({ start: '2023-06-07T23:00:00.000Z', stop: '2023-06-08T00:00:00.000Z', - title: `Àrea Andorra Difusió` + title: 'Àrea Andorra Difusió' }) }) it('can handle empty guide', () => { const result = parser({ date, - content: `` + content: '' }) expect(result).toMatchObject([]) }) diff --git a/sites/arianaafgtv.com/arianaafgtv.com.channels.xml b/sites/arianaafgtv.com/arianaafgtv.com.channels.xml index 61f57c4d..41ee1df1 100644 --- a/sites/arianaafgtv.com/arianaafgtv.com.channels.xml +++ b/sites/arianaafgtv.com/arianaafgtv.com.channels.xml @@ -1,6 +1,4 @@ - - - Ariana Afghanistan International TV - - \ No newline at end of file + + Ariana Afghanistan International TV + \ No newline at end of file diff --git a/sites/arianaafgtv.com/arianaafgtv.com.config.js b/sites/arianaafgtv.com/arianaafgtv.com.config.js index 67e00e73..69a20807 100644 --- a/sites/arianaafgtv.com/arianaafgtv.com.config.js +++ b/sites/arianaafgtv.com/arianaafgtv.com.config.js @@ -11,9 +11,7 @@ dayjs.extend(customParseFormat) module.exports = { site: 'arianaafgtv.com', days: 2, - url() { - return `https://www.arianaafgtv.com/index.html` - }, + url: 'https://www.arianaafgtv.com/index.html', parser({ content, date }) { const programs = [] const items = parseItems(content, date) diff --git a/sites/arianatelevision.com/arianatelevision.com.channels.xml b/sites/arianatelevision.com/arianatelevision.com.channels.xml index 0caeebd5..99d2ffee 100644 --- a/sites/arianatelevision.com/arianatelevision.com.channels.xml +++ b/sites/arianatelevision.com/arianatelevision.com.channels.xml @@ -1,6 +1,4 @@ - - - Ariana TV National - - \ No newline at end of file + + Ariana TV National + \ No newline at end of file diff --git a/sites/arianatelevision.com/arianatelevision.com.config.js b/sites/arianatelevision.com/arianatelevision.com.config.js index 63091dc9..40bc9b79 100644 --- a/sites/arianatelevision.com/arianatelevision.com.config.js +++ b/sites/arianatelevision.com/arianatelevision.com.config.js @@ -4,7 +4,7 @@ const { DateTime } = require('luxon') module.exports = { site: 'arianatelevision.com', days: 2, - url: `https://www.arianatelevision.com/program-schedule/`, + url: 'https://www.arianatelevision.com/program-schedule/', parser({ content, date }) { const programs = [] const items = parseItems(content, date) @@ -37,8 +37,6 @@ function parseStart(item, date) { } function parseItems(content, date) { - const items = [] - const col = date.day() const $ = cheerio.load(content) const settings = $('#jtrt_table_settings_508').text() if (!settings) return [] diff --git a/sites/arianatelevision.com/arianatelevision.com.test.js b/sites/arianatelevision.com/arianatelevision.com.test.js index 829f0632..d6ff3722 100644 --- a/sites/arianatelevision.com/arianatelevision.com.test.js +++ b/sites/arianatelevision.com/arianatelevision.com.test.js @@ -1,4 +1,4 @@ -// npx epg-grabber --config=sites/arianatelevision.com/arianatelevision.com.config.js --channels=sites/arianatelevision.com/arianatelevision.com.channels.xml --output=guide.xml +// npm run grab -- --site=arianatelevision.com const { parser, url } = require('./arianatelevision.com.config.js') const dayjs = require('dayjs') @@ -18,7 +18,8 @@ it('can generate valid url', () => { }) it('can parse response', () => { - const content = `[[["Start","Saturday","Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","",""],["7:00","City Report","ICC T20 Highlights","ICC T20 Highlights","ICC T20 Highlights","ICC T20 Highlights","ICC T20 Highlights","ICC T20 Highlights","",""],["7:30","ICC T20 Highlights","Sport ","Sport ","Sport ","Sport ","Sport ","Sport ","",""],["15:00","ICC T20 World Cup","ICC T20 World Cup","ICC T20 World Cup","ICC T20 World Cup","ICC T20 World Cup","ICC T20 World Cup","ICC T20 World Cup","",""],["6:30","Quran and Hadis ","Falah","Falah","Falah","Falah","Falah","Falah","",""],["","\\n","","","","","","","",""]]]` + const content = + '[[["Start","Saturday","Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","",""],["7:00","City Report","ICC T20 Highlights","ICC T20 Highlights","ICC T20 Highlights","ICC T20 Highlights","ICC T20 Highlights","ICC T20 Highlights","",""],["7:30","ICC T20 Highlights","Sport ","Sport ","Sport ","Sport ","Sport ","Sport ","",""],["15:00","ICC T20 World Cup","ICC T20 World Cup","ICC T20 World Cup","ICC T20 World Cup","ICC T20 World Cup","ICC T20 World Cup","ICC T20 World Cup","",""],["6:30","Quran and Hadis ","Falah","Falah","Falah","Falah","Falah","Falah","",""],["","\\n","","","","","","","",""]]]' const result = parser({ content, date }).map(p => { p.start = p.start.toJSON() p.stop = p.stop.toJSON() @@ -29,22 +30,22 @@ it('can parse response', () => { { start: '2021-11-27T02:30:00.000Z', stop: '2021-11-27T03:00:00.000Z', - title: `City Report` + title: 'City Report' }, { start: '2021-11-27T03:00:00.000Z', stop: '2021-11-27T10:30:00.000Z', - title: `ICC T20 Highlights` + title: 'ICC T20 Highlights' }, { start: '2021-11-27T10:30:00.000Z', stop: '2021-11-28T02:00:00.000Z', - title: `ICC T20 World Cup` + title: 'ICC T20 World Cup' }, { start: '2021-11-28T02:00:00.000Z', stop: '2021-11-28T02:30:00.000Z', - title: `Quran and Hadis` + title: 'Quran and Hadis' } ]) }) @@ -53,7 +54,8 @@ it('can handle empty guide', () => { const result = parser({ date, channel, - content: `` + content: + '' }) expect(result).toMatchObject([]) }) diff --git a/sites/arirang.com/arirang.com.channels.xml b/sites/arirang.com/arirang.com.channels.xml index 140ab525..6d60a18b 100644 --- a/sites/arirang.com/arirang.com.channels.xml +++ b/sites/arirang.com/arirang.com.channels.xml @@ -1,8 +1,6 @@ - - - Arirang TV - Arirang UN - Arirang World - - \ No newline at end of file + + Arirang TV + Arirang UN + Arirang World + \ No newline at end of file diff --git a/sites/arirang.com/arirang.com.config.js b/sites/arirang.com/arirang.com.config.js index d0c133d5..2ee402c7 100644 --- a/sites/arirang.com/arirang.com.config.js +++ b/sites/arirang.com/arirang.com.config.js @@ -8,132 +8,146 @@ dayjs.extend(timezone) dayjs.extend(customParseFormat) module.exports = { - site: 'arirang.com', - output: 'arirang.com.guide.xml', - channels: 'arirang.com.channels.xml', - lang: 'en', - days: 7, - delay: 5000, - url: 'https://www.arirang.com/v1.0/open/external/proxy', + site: 'arirang.com', + output: 'arirang.com.guide.xml', + channels: 'arirang.com.channels.xml', + lang: 'en', + days: 7, + delay: 5000, + url: 'https://www.arirang.com/v1.0/open/external/proxy', - request: { + request: { + method: 'POST', + timeout: 5000, + cache: { ttl: 60 * 60 * 1000 }, + headers: { + Accept: 'application/json, text/plain, */*', + 'Content-Type': 'application/json', + Origin: 'https://www.arirang.com', + Referer: 'https://www.arirang.com/schedule', + 'User-Agent': + 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36' + }, + data: function (context) { + const { channel, date } = context + return { + address: 'https://script.arirang.com/api/v1/bis/listScheduleV3.do', method: 'POST', - timeout: 5000, - cache: { ttl: 60 * 60 * 1000 }, - headers: { - 'Accept': 'application/json, text/plain, */*', - 'Content-Type': 'application/json', - 'Origin': 'https://www.arirang.com', - 'Referer': 'https://www.arirang.com/schedule', - 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36' - }, - data: function (context) { - const { channel, date } = context - return { - 'address': 'https://script.arirang.com/api/v1/bis/listScheduleV3.do', - 'method': 'POST', - 'headers': {}, - 'body': { - 'data': { - 'dmParam': { - 'chanId': channel.site_id, - 'broadYmd': dayjs.tz(date, 'Asia/Seoul').format('YYYYMMDD'), - 'planNo': '1' - } - } - } + headers: {}, + body: { + data: { + dmParam: { + chanId: channel.site_id, + broadYmd: dayjs.tz(date, 'Asia/Seoul').format('YYYYMMDD'), + planNo: '1' } + } } - }, - - logo: function (context) { - return context.channel.logo - }, - - async parser(context) { - const programs = [] - const items = parseItems(context.content) - - for (let item of items) { - const programDetail = await parseProgramDetail(item) - - programs.push({ - title: item.displayNm, - start: parseStart(item), - stop: parseStop(item), - icon: parseIcon(programDetail), - category: parseCategory(programDetail), - description: parseDescription(programDetail) - }) - } - - return programs + } } + }, + + logo: function (context) { + return context.channel.logo + }, + + async parser(context) { + const programs = [] + const items = parseItems(context.content) + + for (let item of items) { + const programDetail = await parseProgramDetail(item) + + programs.push({ + title: item.displayNm, + start: parseStart(item), + stop: parseStop(item), + icon: parseIcon(programDetail), + category: parseCategory(programDetail), + description: parseDescription(programDetail) + }) + } + + return programs + } } function parseItems(content) { - if (content != '') { - const data = JSON.parse(content) - return (!data || !data.responseBody || !Array.isArray(data.responseBody.dsSchWeek)) ? [] : data.responseBody.dsSchWeek - } else { - return [] - } + if (content != '') { + const data = JSON.parse(content) + return !data || !data.responseBody || !Array.isArray(data.responseBody.dsSchWeek) + ? [] + : data.responseBody.dsSchWeek + } else { + return [] + } } function parseStart(item) { - return dayjs.tz(item.broadYmd + ' ' + item.broadHm, 'YYYYMMDD HHmm', 'Asia/Seoul') + return dayjs.tz(item.broadYmd + ' ' + item.broadHm, 'YYYYMMDD HHmm', 'Asia/Seoul') } function parseStop(item) { - return dayjs.tz(item.broadYmd + ' ' + item.broadHm, 'YYYYMMDD HHmm', 'Asia/Seoul').add(item.broadRun, 'minute') + return dayjs + .tz(item.broadYmd + ' ' + item.broadHm, 'YYYYMMDD HHmm', 'Asia/Seoul') + .add(item.broadRun, 'minute') } async function parseProgramDetail(item) { - return axios.post( - 'https://www.arirang.com/v1.0/open/program/detail', - { - 'bis_program_code': item.pgmCd + return axios + .post( + 'https://www.arirang.com/v1.0/open/program/detail', + { + bis_program_code: item.pgmCd + }, + { + headers: { + Accept: 'application/json, text/plain, */*', + 'Content-Type': 'application/json', + Origin: 'https://www.arirang.com', + Referer: 'https://www.arirang.com/schedule', + 'User-Agent': + 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36' }, - { - headers: { - 'Accept': 'application/json, text/plain, */*', - 'Content-Type': 'application/json', - 'Origin': 'https://www.arirang.com', - 'Referer': 'https://www.arirang.com/schedule', - 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36' - }, - timeout: 5000, - cache: { ttl: 60 * 1000 }, - } - ).then(function (response) { - return response.data - }).catch(function (error) { - // console.log(error) + timeout: 5000, + cache: { ttl: 60 * 1000 } + } + ) + .then(response => { + return response.data + }) + .catch(error => { + console.log(error) }) } function parseIcon(programDetail) { - if (programDetail && programDetail.image && programDetail.image[0].url) { - return programDetail.image[0].url - } else { - return '' - } + if (programDetail && programDetail.image && programDetail.image[0].url) { + return programDetail.image[0].url + } else { + return '' + } } function parseCategory(programDetail) { - if (programDetail && programDetail.category_Info && programDetail.category_Info[0].title) { - return programDetail.category_Info[0].title - } else { - return '' - } + if (programDetail && programDetail.category_Info && programDetail.category_Info[0].title) { + return programDetail.category_Info[0].title + } else { + return '' + } } function parseDescription(programDetail) { - if (programDetail && programDetail.content && programDetail.content[0] && programDetail.content[0].text) { - let description = programDetail.content[0].text - let regex = /(<([^>]+)>)/ig - return description.replace(regex, '') - } else { - return '' - } + if ( + programDetail && + programDetail.content && + programDetail.content[0] && + programDetail.content[0].text + ) { + let description = programDetail.content[0].text + let regex = /(<([^>]+)>)/gi + return description.replace(regex, '') + } else { + return '' + } } diff --git a/sites/arirang.com/arirang.com.test.js b/sites/arirang.com/arirang.com.test.js index f0d4d165..31d1b61b 100644 --- a/sites/arirang.com/arirang.com.test.js +++ b/sites/arirang.com/arirang.com.test.js @@ -1,4 +1,4 @@ -// npx epg-grabber --config=sites/arirang.com/arirang.com.config.js --channels=sites/arirang.com/arirang.com.channels.xml --output=guide.xml --days=2 +// npm run grab -- --site=arirang.com // npx jest arirang.com.test.js const { url, parser } = require('./arirang.com.config.js') @@ -7,53 +7,68 @@ const path = require('path') const axios = require('axios') const dayjs = require('dayjs') const utc = require('dayjs/plugin/utc') -const { program } = require('commander') dayjs.extend(utc) jest.mock('axios') const date = dayjs.tz('2023-08-25', 'Asia/Seoul').startOf('d') -const channel = { xmltv_id: 'ArirangWorld.kr', site_id: 'CH_W', name: 'Arirang World', lang: 'en', logo: 'https://i.imgur.com/5Aoithj.png' } +const channel = { + xmltv_id: 'ArirangWorld.kr', + site_id: 'CH_W', + name: 'Arirang World', + lang: 'en', + logo: 'https://i.imgur.com/5Aoithj.png' +} const content = fs.readFileSync(path.resolve(__dirname, '__data__/schedule.json'), 'utf8') const programDetail = fs.readFileSync(path.resolve(__dirname, '__data__/detail.json'), 'utf8') -const context = { 'channel': channel, 'content': content, 'date': date } +const context = { channel: channel, content: content, date: date } it('can generate valid url', () => { - expect(url).toBe('https://www.arirang.com/v1.0/open/external/proxy') + expect(url).toBe('https://www.arirang.com/v1.0/open/external/proxy') }) it('can handle empty guide', async () => { - const results = await parser({ 'channel': channel, 'content': '', 'date': date }) - expect(results).toMatchObject([]) + const results = await parser({ channel: channel, content: '', date: date }) + expect(results).toMatchObject([]) }) it('can parse response', async () => { - axios.post.mockImplementation((url, data) => { - if (url === 'https://www.arirang.com/v1.0/open/external/proxy' && JSON.stringify(data) === JSON.stringify({ "address": "https://script.arirang.com/api/v1/bis/listScheduleV3.do", "method": "POST", "headers": {}, "body": { "data": { "dmParam": { "chanId": "CH_W", "broadYmd": "20230825", "planNo": "1" } } } })) { - return Promise.resolve({ - data: JSON.parse(content) - }) - } else if (url === 'https://www.arirang.com/v1.0/open/program/detail' && JSON.stringify(data) === JSON.stringify({ "bis_program_code": "2023004T" })) { - return Promise.resolve({ - data: JSON.parse(programDetail) - }) - } else { - return Promise.resolve({ - data: '' - }) - } - }) + axios.post.mockImplementation((url, data) => { + if ( + url === 'https://www.arirang.com/v1.0/open/external/proxy' && + JSON.stringify(data) === + JSON.stringify({ + address: 'https://script.arirang.com/api/v1/bis/listScheduleV3.do', + method: 'POST', + headers: {}, + body: { data: { dmParam: { chanId: 'CH_W', broadYmd: '20230825', planNo: '1' } } } + }) + ) { + return Promise.resolve({ + data: JSON.parse(content) + }) + } else if ( + url === 'https://www.arirang.com/v1.0/open/program/detail' && + JSON.stringify(data) === JSON.stringify({ bis_program_code: '2023004T' }) + ) { + return Promise.resolve({ + data: JSON.parse(programDetail) + }) + } else { + return Promise.resolve({ + data: '' + }) + } + }) - const results = await parser(context) + const results = await parser(context) - expect(results[0]).toMatchObject( - { - title: "WITHIN THE FRAME [R]", - start: dayjs.tz(date, 'Asia/Seoul'), - stop: dayjs.tz(date, 'Asia/Seoul').add(30, 'minute'), - icon: "https://img.arirang.com/v1/AUTH_d52449c16d3b4bbca17d4fffd9fc44af/public/images/202308/2080840096998752900.png", - description: "NEWS", - category: "Current Affairs" - } - ) -}) \ No newline at end of file + expect(results[0]).toMatchObject({ + title: 'WITHIN THE FRAME [R]', + start: dayjs.tz(date, 'Asia/Seoul'), + stop: dayjs.tz(date, 'Asia/Seoul').add(30, 'minute'), + icon: 'https://img.arirang.com/v1/AUTH_d52449c16d3b4bbca17d4fffd9fc44af/public/images/202308/2080840096998752900.png', + description: 'NEWS', + category: 'Current Affairs' + }) +}) diff --git a/sites/artonline.tv/artonline.tv.channels.xml b/sites/artonline.tv/artonline.tv.channels.xml index abd0989f..ea81dc68 100644 --- a/sites/artonline.tv/artonline.tv.channels.xml +++ b/sites/artonline.tv/artonline.tv.channels.xml @@ -1,10 +1,8 @@ - - - ART Aflam 1 - ART Aflam 2 - ART Cinema - ART Hekayat - ART Hekayat 2 - - \ No newline at end of file + + ART Aflam 1 + ART Aflam 2 + ART Cinema + ART Hekayat + ART Hekayat 2 + \ No newline at end of file diff --git a/sites/artonline.tv/artonline.tv.config.js b/sites/artonline.tv/artonline.tv.config.js index 4edfdabc..54d5652a 100644 --- a/sites/artonline.tv/artonline.tv.config.js +++ b/sites/artonline.tv/artonline.tv.config.js @@ -51,14 +51,14 @@ module.exports = { } function parseStart(item) { - const [_, M, D, YYYY] = item.adddate.match(/(\d+)\/(\d+)\/(\d+) /) + const [, M, D, YYYY] = item.adddate.match(/(\d+)\/(\d+)\/(\d+) /) const [HH, mm] = item.start_Time.split(':') return dayjs.tz(`${YYYY}-${M}-${D}T${HH}:${mm}:00`, 'YYYY-M-DTHH:mm:ss', 'Asia/Riyadh') } function parseDuration(item) { - const [__, HH, mm, ss] = item.duration.match(/(\d+):(\d+):(\d+)/) + const [, HH, mm, ss] = item.duration.match(/(\d+):(\d+):(\d+)/) return parseInt(HH) * 3600 + parseInt(mm) * 60 + parseInt(ss) } diff --git a/sites/artonline.tv/artonline.tv.test.js b/sites/artonline.tv/artonline.tv.test.js index 60065a0b..17ab430c 100644 --- a/sites/artonline.tv/artonline.tv.test.js +++ b/sites/artonline.tv/artonline.tv.test.js @@ -1,4 +1,4 @@ -// npx epg-grabber --config=sites/artonline.tv/artonline.tv.config.js --channels=sites/artonline.tv/artonline.tv.channels.xml --output=guide.xml --days=2 +// npm run grab -- --site=artonline.tv const { parser, url, request } = require('./artonline.tv.config.js') const dayjs = require('dayjs') @@ -39,7 +39,8 @@ it('can generate valid request data for tomorrow', () => { }) it('can parse response', () => { - const content = `[{"id":158963,"eventid":null,"duration":"01:34:00","lang":"Arabic","title":"الراقصه و السياسي","description":"تقرر الراقصه سونيا انشاء دار حضانه للأطفال اليتامى و عندما تتقدم بمشورعها للمسئول يرفض فتتحداه ، تلجأ للوزير عبد الحميد رأفت تربطه بها علاقة قديمة ، يخشى على مركزه و يرفض مساعدتها فتقرر كتابة مذكراتها بمساعدة أحد الصحفيين ، يتخوف عبد الحميد و المسئولين ثم يفاجأ عبد الحميد بحصول سونيا على الموافقه للمشورع و البدء في تنفيذه و ذلك لعلاقتها بأحد كبار المسئولين .","thumbnail":"/UploadImages/Channel/ARTAFLAM1/03/AlRaqesaWaAlSeyasi.jpg","image":"0","start_Time":"00:30","adddate":"3/4/2022 12:00:00 AM","repeat1":null,"iD_genre":0,"iD_Show_Type":0,"iD_Channel":77,"iD_country":0,"iD_rating":0,"end_time":"02:04","season_Number":0,"epoisode_Number":0,"hasCatchup":0,"cmsid":0,"containerID":0,"imagePath":"../../UploadImages/Channel/ARTAFLAM1/3/","youtube":"0","published_at":"0","directed_by":"0","composition":"0","cast":"0","timeShow":null,"short_description":"تقرر الراقصه سونيا انشاء دار حضانه للأطفال اليتامى و عندما تتقدم بمشورعها للمسئول يرفض فتتحداه ، تلجأ للوزير عبد الحميد رأفت تربطه بها علاقة قديمة ، يخشى على مركزه و يرفض مساعدتها فتقرر كتابة مذكراتها بمساعدة أحد الصحفيين ، يتخوف عبد الحميد و المسئولين ثم يفاجأ عبد الحميد بحصول سونيا على الموافقه للمشورع و البدء في تنفيذه و ذلك لعلاقتها بأحد كبار المسئولين .","seOdescription":null,"tagseo":null,"channel_name":null,"pathimage":null,"pathThumbnail":null}]` + const content = + '[{"id":158963,"eventid":null,"duration":"01:34:00","lang":"Arabic","title":"الراقصه و السياسي","description":"تقرر الراقصه سونيا انشاء دار حضانه للأطفال اليتامى و عندما تتقدم بمشورعها للمسئول يرفض فتتحداه ، تلجأ للوزير عبد الحميد رأفت تربطه بها علاقة قديمة ، يخشى على مركزه و يرفض مساعدتها فتقرر كتابة مذكراتها بمساعدة أحد الصحفيين ، يتخوف عبد الحميد و المسئولين ثم يفاجأ عبد الحميد بحصول سونيا على الموافقه للمشورع و البدء في تنفيذه و ذلك لعلاقتها بأحد كبار المسئولين .","thumbnail":"/UploadImages/Channel/ARTAFLAM1/03/AlRaqesaWaAlSeyasi.jpg","image":"0","start_Time":"00:30","adddate":"3/4/2022 12:00:00 AM","repeat1":null,"iD_genre":0,"iD_Show_Type":0,"iD_Channel":77,"iD_country":0,"iD_rating":0,"end_time":"02:04","season_Number":0,"epoisode_Number":0,"hasCatchup":0,"cmsid":0,"containerID":0,"imagePath":"../../UploadImages/Channel/ARTAFLAM1/3/","youtube":"0","published_at":"0","directed_by":"0","composition":"0","cast":"0","timeShow":null,"short_description":"تقرر الراقصه سونيا انشاء دار حضانه للأطفال اليتامى و عندما تتقدم بمشورعها للمسئول يرفض فتتحداه ، تلجأ للوزير عبد الحميد رأفت تربطه بها علاقة قديمة ، يخشى على مركزه و يرفض مساعدتها فتقرر كتابة مذكراتها بمساعدة أحد الصحفيين ، يتخوف عبد الحميد و المسئولين ثم يفاجأ عبد الحميد بحصول سونيا على الموافقه للمشورع و البدء في تنفيذه و ذلك لعلاقتها بأحد كبار المسئولين .","seOdescription":null,"tagseo":null,"channel_name":null,"pathimage":null,"pathThumbnail":null}]' const result = parser({ content }).map(p => { p.start = p.start.toJSON() p.stop = p.stop.toJSON() diff --git a/sites/astro.com.my/astro.com.my.channels.xml b/sites/astro.com.my/astro.com.my.channels.xml index 72bca740..0b2b431c 100644 --- a/sites/astro.com.my/astro.com.my.channels.xml +++ b/sites/astro.com.my/astro.com.my.channels.xml @@ -1,143 +1,141 @@ - - - 8TV - - Adithya TV - Aljazeera - Animal Planet - Asian Food Network - Astro AEC - Astro AOD 311 - Astro AOD 352 - Astro AOD 353 - Astro AOD 354 - Astro AOD 355 - Astro Arena - Astro Arena 2 - Astro Aura - Astro Awani - Astro BollyOne HD - Astro Box Office Tayangan Hebat - Astro Box Office Thangathirai - Astro Ceria - Gemilang - Astro Citra - Astro Cricket - Astro Hua Hee Dai - Astro Oasis - Astro Prima - Astro Quan Jia HD - Astro Rania - Astro Ria - Astro Shuang Xing - Astro SuperSport - Astro SuperSport 2 - Astro SuperSport 3 - Astro SuperSport 4 - Astro SuperSport 5 - Astro Tutor TV PT3 - Astro Tutor TV SPM - Astro Tutor TV UPSR - Astro UHD - Astro Vaanavil - Astro Vellithirai - Astro Vinmeen HD - Astro Wah Lai Toi - Astro Warna - Astro Xiao Tai Yang - Awesome TV - AXN - BBC Earth - BBC First - BBC Lifestyle - BBC World News - beIN Sports HD - beIN Sports 2 - beIN Sports 3 - Bernama TV - Bloomberg TV - Boo - Boomerang - Cartoon Network HD - CCTV 4 - Celestial Classic Movies - Celestial Movies - CGTN - Chutti TV - Cinemax - CNA - CNBC Asia-Pacific - CNN - Colors - Colors Tamil - Crime + Investigation - CTI TV - Discovery Asia - Discovery Channel - DMAX - DW English - Egg Network - Eurosport - Food Network - France 24 English - Golf Channel - Go Shop Chinese - Go Shop Malay 111 - Go Shop Malay 118 - Go Shop Malay 120 - HBO - HBO Family - HBO Hits - HGTV - History - Hits - Hits Movies - Iqiyi - KBS World - Kix - K+ - Lifetime - Moonbug Kids - MTV - Nat Geo People - National Geographic - National Geographic Wild - NHK World Premium - Nickelodeon - Nick Jr - Njoi TV - NTV 7 - One - Paramount Network - Phoenix Chinese Channel - Phoenix InfoNews Channel - Premier Sports - PRIMEtime - RTM TV 1 - RTM TV2 - RTM TV Okey - Showcase Movies - Sky News UK - SPOTV - Star Vijay - Sun Music - Sun TV - Ta-Daa! - TLC - TV 3 - TV 9 - TV Alhijrah - TVB Classic - TVB Entertainment News - TVB Jade - TVBS Asia - TVB Xing He - TVN HD - TVN Movies - TVS - Warner TV - WWE Network - Zee Tamil - - + + + 8TV + Adithya TV + Aljazeera + Animal Planet + Asian Food Network + Astro AEC + Astro AOD 311 + Astro AOD 352 + Astro AOD 353 + Astro AOD 354 + Astro AOD 355 + Astro Arena + Astro Arena 2 + Astro Aura + Astro Awani + Astro BollyOne HD + Astro Box Office Tayangan Hebat + Astro Box Office Thangathirai + Astro Ceria + Gemilang + Astro Citra + Astro Cricket + Astro Hua Hee Dai + Astro Oasis + Astro Prima + Astro Quan Jia HD + Astro Rania + Astro Ria + Astro Shuang Xing + Astro SuperSport + Astro SuperSport 2 + Astro SuperSport 3 + Astro SuperSport 4 + Astro SuperSport 5 + Astro Tutor TV PT3 + Astro Tutor TV SPM + Astro Tutor TV UPSR + Astro UHD + Astro Vaanavil + Astro Vellithirai + Astro Vinmeen HD + Astro Wah Lai Toi + Astro Warna + Astro Xiao Tai Yang + Awesome TV + AXN + BBC Earth + BBC First + BBC Lifestyle + BBC World News + beIN Sports HD + beIN Sports 2 + beIN Sports 3 + Bernama TV + Bloomberg TV + Boo + Boomerang + Cartoon Network HD + Celestial Classic Movies + CCTV 4 + Celestial Movies + CGTN + Chutti TV + Cinemax + CNA + CNBC Asia-Pacific + CNN + Colors + Colors Tamil + Crime + Investigation + CTI TV + Discovery Asia + Discovery Channel + DMAX + DW English + Egg Network + TVB Entertainment News + Eurosport + Food Network + France 24 English + Golf Channel + Go Shop Chinese + Go Shop Malay 111 + Go Shop Malay 118 + Go Shop Malay 120 + HBO + HBO Family + HBO Hits + HGTV + History + Hits + Hits Movies + Iqiyi + TVB Jade + KBS World + Kix + K+ + Lifetime + Moonbug Kids + MTV + Nat Geo People + National Geographic + National Geographic Wild + NHK World Premium + Nickelodeon + Nick Jr + Njoi TV + NTV 7 + RTM TV Okey + One + Paramount Network + Phoenix Chinese Channel + Phoenix InfoNews Channel + Premier Sports + PRIMEtime + Showcase Movies + Sky News UK + SPOTV + Star Vijay + Sun Music + Sun TV + Ta-Daa! + TLC + RTM TV 1 + RTM TV2 + TV 3 + TV 9 + TV Alhijrah + TVB Classic + TVBS Asia + TVB Xing He + TVN HD + TVN Movies + TVS + Warner TV + WWE Network + Zee Tamil + diff --git a/sites/astro.com.my/astro.com.my.config.js b/sites/astro.com.my/astro.com.my.config.js index 628a4b47..2711880a 100644 --- a/sites/astro.com.my/astro.com.my.config.js +++ b/sites/astro.com.my/astro.com.my.config.js @@ -4,7 +4,7 @@ const utc = require('dayjs/plugin/utc') dayjs.extend(utc) -const API_ENDPOINT = `https://contenthub-api.eco.astro.com.my` +const API_ENDPOINT = 'https://contenthub-api.eco.astro.com.my' module.exports = { site: 'astro.com.my', @@ -41,13 +41,13 @@ module.exports = { } function parseEpisode(item) { - const [_, number] = item.title.match(/Ep(\d+)$/) || [null, null] + const [, number] = item.title.match(/Ep(\d+)$/) || [null, null] return number ? parseInt(number) : null } function parseSeason(details) { - const [_, season] = details.title ? details.title.match(/ S(\d+)/) || [null, null] : [null, null] + const [, season] = details.title ? details.title.match(/ S(\d+)/) || [null, null] : [null, null] return season ? parseInt(season) : null } @@ -116,7 +116,7 @@ async function loadProgramDetails(item) { const data = await axios .get(url) .then(r => r.data) - .catch(err => {}) + .catch(error => console.log(error.message)) if (!data) return {} return data.response || {} diff --git a/sites/astro.com.my/astro.com.my.test.js b/sites/astro.com.my/astro.com.my.test.js index 88a58265..5c615f51 100644 --- a/sites/astro.com.my/astro.com.my.test.js +++ b/sites/astro.com.my/astro.com.my.test.js @@ -1,4 +1,4 @@ -// npx epg-grabber --config=sites/astro.com.my/astro.com.my.config.js --channels=sites/astro.com.my/astro.com.my.channels.xml --output=guide.xml --timeout=30000 --days=2 +// npm run grab -- --site=astro.com.my const { parser, url } = require('./astro.com.my.config.js') const fs = require('fs') diff --git a/sites/bein.com/bein.com.channels.xml b/sites/bein.com/bein.com.channels.xml deleted file mode 100644 index 677ac1e0..00000000 --- a/sites/bein.com/bein.com.channels.xml +++ /dev/null @@ -1,162 +0,0 @@ - - - - - BeIn Sports News - BeIn Sports - BeIn Sports 1 - BeIn Sports 2 - BeIn Sports 3 - BeIn Sports 4 - BeIn Sports 5 - BeIn Sports 6 - BeIn Sports 7 - BeIn Sports Premium 1 - BeIn Sports Premium 2 - BeIn Sports Premium 3 - BeIn Sports Xtra 1 - BeIn Sports Xtra 2 - BeIn 4K - BeIN Sports AFC - BeIN Sports AFC 1 - BeIN Sports AFC 2 - BeIN Sports AFC 3 - BeIn Sports English 1 - BeIn Sports English 2 - BeIn Sports English 3 - BeIn NBA - BeIn Sports French 1 - BeIn Sports French 2 - BeIn Sports French 3 - beIN Sports Max 1 - beIN Sports Max 2 - beIN Sports Max 3 - beIN Sports Max 4 - beIN Sports Max 5 - beIN Sports Max 6 - Alkass One - Alkass Two - Alkass Three - Alkass Four - Alkass Five - Alkass Six - Alkass Seven - Alkass Eight - - BeIn Sports News - BeIn Sports - BeIn Sports 1 - BeIn Sports 2 - BeIn Sports 3 - BeIn Sports 4 - BeIn Sports 5 - BeIn Sports 6 - BeIn Sports 7 - BeIn Sports Premium 1 - BeIn Sports Premium 2 - BeIn Sports Premium 3 - BeIn Sports Xtra 1 - BeIn Sports Xtra 2 - BeIn 4K - BeIN Sports AFC - BeIN Sports AFC 1 - BeIN Sports AFC 2 - BeIN Sports AFC 3 - BeIn Sports English 1 - BeIn Sports English 2 - BeIn Sports English 3 - BeIn NBA - BeIn Sports French 1 - BeIn Sports French 2 - BeIn Sports French 3 - beIN Sports Max 1 - beIN Sports Max 2 - beIN Sports Max 3 - beIN Sports Max 4 - beIN Sports Max 5 - beIN Sports Max 6 - Alkass Three - Alkass One - Alkass Two - Alkass Four - Alkass Five - Alkass Six - Alkass Seven - Alkass Eight - - beIN Movies Premiere - beIN Movies Action - bein Movies Drama - beIN Movies Family - FOX Movies - FOX Action Movies - Star Movies - beIN Series 1 - beIN Series 2 - beIN Drama 1 - beIN Gourmet - Travel Channel - FOX - Food Network - HGTV - Star World - Fatafeat - FOX Life - MTV 80s - MTV 90s - Club MTV - Bloomberg TV - National Geographic - National Geographic Wild - BBC Earth - CNN - EuroNews - Discovery - be Junior - Jeem - Baraem - Cartoon Network - Cartoon Network Arabic - Cartoon Network Hindi - Baby TV - CBeebies - DreamWorks - - beIN Movies Premiere - beIN Movies Action - bein Movies Drama - beIN Movies Family - FOX Movies - FOX Action Movies - Star Movies - beIN Series 1 - beIN Series 2 - beIN Drama 1 - beIN Gourmet - Travel Channel - FOX - Food Network - HGTV - Star World - Fatafeat - MTV 80s - MTV 90s - Club MTV - be Junior - Bloomberg TV - National Geographic - National Geographic Wild - BBC Earth - Al Jazeera Documentary - CNN - EuroNews - Jeem - Baraem - CBeebies - Baby TV - Cartoon Network - Cartoon Network Arabic - Cartoon Network Hindi - DreamWorks - - diff --git a/sites/bein.com/bein.com.config.js b/sites/bein.com/bein.com.config.js index 6b895eaa..8c1552ec 100644 --- a/sites/bein.com/bein.com.config.js +++ b/sites/bein.com/bein.com.config.js @@ -4,7 +4,6 @@ const { DateTime } = require('luxon') module.exports = { site: 'bein.com', days: 2, - timeout: 30000, // 30 seconds request: { cache: { ttl: 60 * 60 * 1000 // 1 hour @@ -63,7 +62,7 @@ function parseCategory($item) { } function parseTime($item, date) { - let [_, time] = $item('.time') + let [, time] = $item('.time') .text() .match(/^(\d{2}:\d{2})/) || [null, null] if (!time) return null @@ -73,7 +72,7 @@ function parseTime($item, date) { } function parseItems(content, channel) { - const [_, channelId] = channel.site_id.split('#') + const [, channelId] = channel.site_id.split('#') const $ = cheerio.load(content) return $(`#channels_${channelId} .slider > ul:first-child > li`).toArray() diff --git a/sites/bein.com/bein.com.test.js b/sites/bein.com/bein.com.test.js index acb0bff1..73174712 100644 --- a/sites/bein.com/bein.com.test.js +++ b/sites/bein.com/bein.com.test.js @@ -1,4 +1,4 @@ -// npx epg-grabber --config=sites/bein.com/bein.com.config.js --channels=sites/bein.com/bein.com.channels.xml --output=guide.xml +// npm run grab -- --site=bein.com const fs = require('fs') const path = require('path') diff --git a/sites/bein.com/bein.com_ar.channels.xml b/sites/bein.com/bein.com_ar.channels.xml new file mode 100644 index 00000000..95a0d070 --- /dev/null +++ b/sites/bein.com/bein.com_ar.channels.xml @@ -0,0 +1,79 @@ + + + Al Jazeera Documentary + Alkass Eight + Alkass Five + Alkass Four + Alkass One + Alkass Seven + Alkass Six + Alkass Three + Alkass Two + Baby TV + Baraem + BBC Earth + BeIn 4K + beIN Drama 1 + beIN Gourmet + beIN Movies Premiere + beIN Movies Action + bein Movies Drama + beIN Movies Family + beIN Series 1 + beIN Series 2 + BeIn Sports + BeIn Sports 1 + BeIn Sports 2 + BeIn Sports 3 + BeIn Sports 4 + BeIn Sports 5 + BeIn Sports 6 + BeIn Sports 7 + BeIN Sports AFC + BeIN Sports AFC 1 + BeIN Sports AFC 2 + BeIN Sports AFC 3 + BeIn Sports English 1 + BeIn Sports English 2 + BeIn Sports English 3 + BeIn Sports French 1 + BeIn Sports French 2 + BeIn Sports French 3 + beIN Sports Max 1 + beIN Sports Max 2 + beIN Sports Max 3 + beIN Sports Max 4 + beIN Sports Max 5 + beIN Sports Max 6 + BeIn NBA + BeIn Sports News + BeIn Sports Premium 1 + BeIn Sports Premium 2 + BeIn Sports Premium 3 + BeIn Sports Xtra 1 + BeIn Sports Xtra 2 + be Junior + Bloomberg TV + Cartoon Network Arabic + Cartoon Network Hindi + Cartoon Network + CBeebies + Club MTV + CNN + DreamWorks + EuroNews + Fatafeat + Food Network + FOX Action Movies + FOX + FOX Movies + HGTV + Jeem + MTV 80s + MTV 90s + National Geographic + National Geographic Wild + Star Movies + Star World + Travel Channel + \ No newline at end of file diff --git a/sites/bein.com/bein.com_en.channels.xml b/sites/bein.com/bein.com_en.channels.xml new file mode 100644 index 00000000..29561d50 --- /dev/null +++ b/sites/bein.com/bein.com_en.channels.xml @@ -0,0 +1,80 @@ + + + Alkass Eight + Alkass Five + Alkass Four + Alkass One + Alkass Seven + Alkass Six + Alkass Three + Alkass Two + Baby TV + Baraem + BBC Earth + BeIn 4K + beIN Drama 1 + beIN Gourmet + beIN Movies Premiere + beIN Movies Action + bein Movies Drama + beIN Movies Family + beIN Series 1 + beIN Series 2 + BeIn Sports + BeIn Sports 1 + BeIn Sports 2 + BeIn Sports 3 + BeIn Sports 4 + BeIn Sports 5 + BeIn Sports 6 + BeIn Sports 7 + BeIN Sports AFC + BeIN Sports AFC 1 + BeIN Sports AFC 2 + BeIN Sports AFC 3 + BeIn Sports English 1 + BeIn Sports English 2 + BeIn Sports English 3 + BeIn Sports French 1 + BeIn Sports French 2 + BeIn Sports French 3 + beIN Sports Max 1 + beIN Sports Max 2 + beIN Sports Max 3 + beIN Sports Max 4 + beIN Sports Max 5 + beIN Sports Max 6 + BeIn NBA + BeIn Sports News + BeIn Sports Premium 1 + BeIn Sports Premium 2 + BeIn Sports Premium 3 + BeIn Sports Xtra 1 + BeIn Sports Xtra 2 + be Junior + Bloomberg TV + Cartoon Network Arabic + Cartoon Network Hindi + Cartoon Network + CBeebies + Club MTV + CNN + Discovery + DreamWorks + EuroNews + Fatafeat + Food Network + FOX Action Movies + FOX + FOX Life + FOX Movies + HGTV + Jeem + MTV 80s + MTV 90s + National Geographic + National Geographic Wild + Star Movies + Star World + Travel Channel + diff --git a/sites/beinsports.com/beinsports.com.config.js b/sites/beinsports.com/beinsports.com.config.js index deabaa1a..35e4783d 100644 --- a/sites/beinsports.com/beinsports.com.config.js +++ b/sites/beinsports.com/beinsports.com.config.js @@ -26,7 +26,7 @@ module.exports = { 'YYYY-MM-DD' )}` }, - parser: function ({ content, channel, date, cached }) { + parser: function ({ content, channel, date }) { let programs = [] const items = parseItems(content, channel) let i = 0 @@ -68,15 +68,15 @@ module.exports = { .then(r => r.data) .catch(console.log) const $ = cheerio.load(content) - const items = $(`.container > div, #epg_div > div`).toArray() + const items = $('.container > div, #epg_div > div').toArray() return items .map(item => { const $item = cheerio.load(item) const id = $item('*').attr('id') - if (!/^channels\_[0-9]+$/.test(id)) return null + if (!/^channels_[0-9]+$/.test(id)) return null const channelId = id.replace('channels_', '') const imgSrc = $item('img').attr('src') - const [_, __, name] = imgSrc.match(/(\/|)([a-z0-9-_.]+)(.png|.svg)$/i) || [null, null, ''] + const [, , name] = imgSrc.match(/(\/|)([a-z0-9-_.]+)(.png|.svg)$/i) || [null, null, ''] return { lang, @@ -103,7 +103,7 @@ function parseCategory($item) { function parseStart($item, date) { let time = $item('.time').text() if (!time) return null - let [_, start, period] = time.match(/^(\d{2}:\d{2})( AM| PM|)/) || [null, null, null] + let [, start, period] = time.match(/^(\d{2}:\d{2})( AM| PM|)/) || [null, null, null] if (!start) return null start = `${date.format('YYYY-MM-DD')} ${start}${period}` const format = period ? 'YYYY-MM-DD hh:mm A' : 'YYYY-MM-DD HH:mm' @@ -114,7 +114,7 @@ function parseStart($item, date) { function parseStop($item, date) { let time = $item('.time').text() if (!time) return null - let [_, stop, period] = time.match(/(\d{2}:\d{2})( AM| PM|)$/) || [null, null, null] + let [, stop, period] = time.match(/(\d{2}:\d{2})( AM| PM|)$/) || [null, null, null] if (!stop) return null stop = `${date.format('YYYY-MM-DD')} ${stop}${period}` const format = period ? 'YYYY-MM-DD hh:mm A' : 'YYYY-MM-DD HH:mm' @@ -123,7 +123,7 @@ function parseStop($item, date) { } function parseItems(content, channel) { - const [_, channelId] = channel.site_id.split('#') + const [, channelId] = channel.site_id.split('#') const $ = cheerio.load(content) return $(`#channels_${channelId} .slider > ul:first-child > li`).toArray() diff --git a/sites/beinsports.com/beinsports.com.test.js b/sites/beinsports.com/beinsports.com.test.js index db0d033c..a26de067 100644 --- a/sites/beinsports.com/beinsports.com.test.js +++ b/sites/beinsports.com/beinsports.com.test.js @@ -1,6 +1,6 @@ // npm run channels:parse -- --config=./sites/beinsports.com/beinsports.com.config.js --output=./sites/beinsports.com/beinsports.com_qa-ar.channels.xml --set=lang:ar --set=region:ar -// npx epg-grabber --config=sites/beinsports.com/beinsports.com.config.js --channels=sites/beinsports.com/beinsports.com_qa-en.channels.xml --output=guide.xml --timeout=30000 --days=2 -// npx epg-grabber --config=sites/beinsports.com/beinsports.com.config.js --channels=sites/beinsports.com/beinsports.com_us-en.channels.xml --output=guide.xml --timeout=30000 --days=2 +// npm run grab -- --site=beinsports.com +// npm run grab -- --site=beinsports.com const { parser, url } = require('./beinsports.com.config.js') const fs = require('fs') diff --git a/sites/beinsports.com/beinsports.com_au.channels.xml b/sites/beinsports.com/beinsports.com_au.channels.xml index 408f553f..6467c6a7 100644 --- a/sites/beinsports.com/beinsports.com_au.channels.xml +++ b/sites/beinsports.com/beinsports.com_au.channels.xml @@ -1,8 +1,6 @@ - - - BeIn Sports 1 Australia - BeIn Sports 2 Australia - BeIn Sports 3 Australia - - \ No newline at end of file + + BeIn Sports 1 Australia + BeIn Sports 2 Australia + BeIn Sports 3 Australia + \ No newline at end of file diff --git a/sites/beinsports.com/beinsports.com_fr.channels.xml b/sites/beinsports.com/beinsports.com_fr.channels.xml index 6bd42713..50516c43 100644 --- a/sites/beinsports.com/beinsports.com_fr.channels.xml +++ b/sites/beinsports.com/beinsports.com_fr.channels.xml @@ -1,15 +1,13 @@ - - - BeIN Sports 1 HD France - BeIN Sports 2 HD France - BeIN Sports 3 France - BeIN Sports Max 4 France - BeIN Sports Max 5 France - BeIN Sports Max 6 France - BeIN Sports Max 7 France - BeIN Sports Max 8 France - BeIN Sports Max 9 France - BeIN Sports Max 10 France - - + + BeIN Sports 1 HD France + BeIN Sports 2 HD France + BeIN Sports 3 France + BeIN Sports Max 4 France + BeIN Sports Max 5 France + BeIN Sports Max 6 France + BeIN Sports Max 7 France + BeIN Sports Max 8 France + BeIN Sports Max 9 France + BeIN Sports Max 10 France + diff --git a/sites/beinsports.com/beinsports.com_hk.channels.xml b/sites/beinsports.com/beinsports.com_hk.channels.xml index c98a4b95..ae0372bf 100644 --- a/sites/beinsports.com/beinsports.com_hk.channels.xml +++ b/sites/beinsports.com/beinsports.com_hk.channels.xml @@ -1,7 +1,5 @@ - - - BeIN Sports 1 Hong Kong - BeIN Sports 2 Hong Kong - - + + BeIN Sports 1 Hong Kong + BeIN Sports 2 Hong Kong + diff --git a/sites/beinsports.com/beinsports.com_id.channels.xml b/sites/beinsports.com/beinsports.com_id.channels.xml index cfbae1f5..31383e71 100644 --- a/sites/beinsports.com/beinsports.com_id.channels.xml +++ b/sites/beinsports.com/beinsports.com_id.channels.xml @@ -1,7 +1,5 @@ - - - BeIN Sports 1 Indonesia - BeIN Sports 3 Indonesia - - + + BeIN Sports 1 Indonesia + BeIN Sports 3 Indonesia + diff --git a/sites/beinsports.com/beinsports.com_my.channels.xml b/sites/beinsports.com/beinsports.com_my.channels.xml index 2646f46a..a5ee6c88 100644 --- a/sites/beinsports.com/beinsports.com_my.channels.xml +++ b/sites/beinsports.com/beinsports.com_my.channels.xml @@ -1,6 +1,4 @@ - - - BeIN Sports 1 Malaysia & Singapore - - + + BeIN Sports 1 Malaysia & Singapore + diff --git a/sites/beinsports.com/beinsports.com_ph.channels.xml b/sites/beinsports.com/beinsports.com_ph.channels.xml index fff70637..f73ff0e6 100644 --- a/sites/beinsports.com/beinsports.com_ph.channels.xml +++ b/sites/beinsports.com/beinsports.com_ph.channels.xml @@ -1,7 +1,5 @@ - - - BeIN Sports 1 Philippines - BeIN Sports 3 Philippines - - + + BeIN Sports 1 Philippines + BeIN Sports 3 Philippines + diff --git a/sites/beinsports.com/beinsports.com_qa-ar.channels.xml b/sites/beinsports.com/beinsports.com_qa-ar.channels.xml index 6f9a70f5..66437c45 100644 --- a/sites/beinsports.com/beinsports.com_qa-ar.channels.xml +++ b/sites/beinsports.com/beinsports.com_qa-ar.channels.xml @@ -1,30 +1,28 @@ - - - beIN SPORTS FTA - beIN SPORTS News - beIN SPORTS2 - beIN SPORTS3 - beIN SPORTS4 - beIN SPORTS5 - beIN SPORTS6 - beIN SPORTS7 - beIN SPORTS3 PREMIUM - beIN SPORTS XTRA1 - beIN SPORTS XTRA2 - beIN 4k - beIN SPORTS AFC - beIN SPORTS AFC1 - beIN SPORTS AFC2 - beIN SPORTS AFC3 - beIN SPORTS NBA - beIN SPORTS1 ENGLISH - beIN SPORTS2 ENGLISH - beIN SPORTS3 ENGLISH - beIN SPORTS1 FRENCH - beIN SPORTS2 FRENCH - beIN SPORTS3 FRENCH - beIN SPORTS MAX 1 - beIN SPORTS MAX 2 - - + + beIN SPORTS FTA + beIN SPORTS News + beIN SPORTS2 + beIN SPORTS3 + beIN SPORTS4 + beIN SPORTS5 + beIN SPORTS6 + beIN SPORTS7 + beIN SPORTS3 PREMIUM + beIN SPORTS XTRA1 + beIN SPORTS XTRA2 + beIN 4k + beIN SPORTS AFC + beIN SPORTS AFC1 + beIN SPORTS AFC2 + beIN SPORTS AFC3 + beIN SPORTS NBA + beIN SPORTS1 ENGLISH + beIN SPORTS2 ENGLISH + beIN SPORTS3 ENGLISH + beIN SPORTS1 FRENCH + beIN SPORTS2 FRENCH + beIN SPORTS3 FRENCH + beIN SPORTS MAX 1 + beIN SPORTS MAX 2 + diff --git a/sites/beinsports.com/beinsports.com_qa-en.channels.xml b/sites/beinsports.com/beinsports.com_qa-en.channels.xml index 36aac1b2..c90af9d9 100644 --- a/sites/beinsports.com/beinsports.com_qa-en.channels.xml +++ b/sites/beinsports.com/beinsports.com_qa-en.channels.xml @@ -1,24 +1,22 @@ - - - BeIn Sports - BeIn Sports News - BeIn Sports 2 - BeIn Sports 3 - BeIn Sports 4 - BeIn Sports 5 - BeIn Sports 6 - BeIn Sports 7 - BeIn Sports Premium 3 - BeIn Sports Xtra 1 - BeIn Sports Xtra 2 - BeIn 4K - BeIn NBA - BeIn Sports English 1 - BeIn Sports English 2 - BeIn Sports English 3 - BeIn Sports French 1 - BeIn Sports French 2 - BeIn Sports French 3 - - + + BeIn Sports + BeIn Sports News + BeIn Sports 2 + BeIn Sports 3 + BeIn Sports 4 + BeIn Sports 5 + BeIn Sports 6 + BeIn Sports 7 + BeIn Sports Premium 3 + BeIn Sports Xtra 1 + BeIn Sports Xtra 2 + BeIn 4K + BeIn NBA + BeIn Sports English 1 + BeIn Sports English 2 + BeIn Sports English 3 + BeIn Sports French 1 + BeIn Sports French 2 + BeIn Sports French 3 + diff --git a/sites/beinsports.com/beinsports.com_th.channels.xml b/sites/beinsports.com/beinsports.com_th.channels.xml index 9f251358..55b802cb 100644 --- a/sites/beinsports.com/beinsports.com_th.channels.xml +++ b/sites/beinsports.com/beinsports.com_th.channels.xml @@ -1,7 +1,5 @@ - - - BeIN Sports 1 Thailand - BeIN Sports 3 Thailand - - + + BeIN Sports 1 Thailand + BeIN Sports 3 Thailand + diff --git a/sites/beinsports.com/beinsports.com_us-en.channels.xml b/sites/beinsports.com/beinsports.com_us-en.channels.xml index 03c30bbc..b3009565 100644 --- a/sites/beinsports.com/beinsports.com_us-en.channels.xml +++ b/sites/beinsports.com/beinsports.com_us-en.channels.xml @@ -1,15 +1,13 @@ - - - BeIN Sports USA - BeIN Sports en Español - BeIN Sports Xtra USA - BeIN Sports Xtra en Español - BeIN Sports 3 USA - BeIN Sports 4 USA - BeIN Sports 5 USA - BeIN Sports 6 USA - BeIN Sports 7 USA - BeIN Sports 8 USA - - + + BeIN Sports USA + BeIN Sports en Español + BeIN Sports Xtra USA + BeIN Sports Xtra en Español + BeIN Sports 3 USA + BeIN Sports 4 USA + BeIN Sports 5 USA + BeIN Sports 6 USA + BeIN Sports 7 USA + BeIN Sports 8 USA + diff --git a/sites/beinsports.com/beinsports.com_us-es.channels.xml b/sites/beinsports.com/beinsports.com_us-es.channels.xml index f556373d..3feee0b6 100644 --- a/sites/beinsports.com/beinsports.com_us-es.channels.xml +++ b/sites/beinsports.com/beinsports.com_us-es.channels.xml @@ -1,15 +1,13 @@ - - - BeIN Sports USA - BeIN Sports en Español - BeIN Sports Xtra USA - BeIN Sports Xtra en Español - BeIN Sports 3 USA - BeIN Sports 4 USA - BeIN Sports 5 USA - BeIN Sports 6 USA - BeIN Sports 7 USA - BeIN Sports 8 USA - - + + BeIN Sports USA + BeIN Sports en Español + BeIN Sports Xtra USA + BeIN Sports Xtra en Español + BeIN Sports 3 USA + BeIN Sports 4 USA + BeIN Sports 5 USA + BeIN Sports 6 USA + BeIN Sports 7 USA + BeIN Sports 8 USA + diff --git a/sites/berrymedia.co.kr/berrymedia.co.kr.channels.xml b/sites/berrymedia.co.kr/berrymedia.co.kr.channels.xml index 8d09501d..fa4a0c7a 100644 --- a/sites/berrymedia.co.kr/berrymedia.co.kr.channels.xml +++ b/sites/berrymedia.co.kr/berrymedia.co.kr.channels.xml @@ -1,11 +1,9 @@ - - - BallTV - CookTV - GMTV - GTV - 생활체육TV - UHDDreamTV - - + + BallTV + CookTV + GMTV + GTV + 생활체육TV + UHDDreamTV + diff --git a/sites/berrymedia.co.kr/berrymedia.co.kr.config.js b/sites/berrymedia.co.kr/berrymedia.co.kr.config.js index f8b8f2a4..773de12d 100644 --- a/sites/berrymedia.co.kr/berrymedia.co.kr.config.js +++ b/sites/berrymedia.co.kr/berrymedia.co.kr.config.js @@ -86,7 +86,7 @@ function parseRating($item) { : null } -function parseItems(content, channel, date) { +function parseItems(content) { const $ = cheerio.load(content) return $('.sc_time dd').toArray() diff --git a/sites/berrymedia.co.kr/berrymedia.co.kr.test.js b/sites/berrymedia.co.kr/berrymedia.co.kr.test.js index 7396aafc..88f98a75 100644 --- a/sites/berrymedia.co.kr/berrymedia.co.kr.test.js +++ b/sites/berrymedia.co.kr/berrymedia.co.kr.test.js @@ -1,4 +1,4 @@ -// npx epg-grabber --config=sites/berrymedia.co.kr/berrymedia.co.kr.config.js --channels=sites/berrymedia.co.kr/berrymedia.co.kr.channels.xml --output=guide.xml --days=2 +// npm run grab -- --site=berrymedia.co.kr const { parser, url, request } = require('./berrymedia.co.kr.config.js') const fs = require('fs') @@ -49,7 +49,7 @@ it('can parse response', () => { expect(results[0]).toMatchObject({ start: '2023-01-25T15:00:00.000Z', stop: '2023-01-25T16:00:00.000Z', - title: `더트롯쇼`, + title: '더트롯쇼', category: '연예/오락', rating: { system: 'KMRB', @@ -60,7 +60,7 @@ it('can parse response', () => { expect(results[17]).toMatchObject({ start: '2023-01-26T13:50:00.000Z', stop: '2023-01-26T14:20:00.000Z', - title: `나는 자연인이다`, + title: '나는 자연인이다', category: '교양', rating: { system: 'KMRB', diff --git a/sites/bt.com/bt.com.channels.xml b/sites/bt.com/bt.com.channels.xml index 7181c220..91ead431 100644 --- a/sites/bt.com/bt.com.channels.xml +++ b/sites/bt.com/bt.com.channels.xml @@ -1,170 +1,168 @@ - - - - - 4seven - 5 Action - 5 Select - 5 Star - 5 USA - Al Jazeera English - BBC Alba - BBC Four - BBC News - BBC One Cambridgeshire - BBC One Channel Islands - BBC One East Midlands - BBC One HD - BBC One London - BBC One North East & Cumbria - BBC One North West - BBC One Oxford - BBC One Scotland - BBC One South - BBC One South East - BBC One South West - BBC One Wales - BBC One West - BBC One West Midlands - BBC One Yorks - BBC Parliament - BBC Scotland - BBC Two England - BBC Two Wales - Blaze UK - Boomerang UK - Cartoonito UK - Cartoon Network UK - CBBC - CBeebies UK - CBS Drama UK - CBS Justice UK - CBS Reality UK - Challenge UK - Channel 4 - Channel 5 - Channel 5 +1 - CITV - Clubland TV - Comedy Central UK - Create and Craft - Dave UK - Dave ja vu - DMAX UK - Drama UK - E4 UK - E4 Extra - E4+1 - Eurosport 1 UK - Eurosport 2 UK - Film 4 UK - Film 4 UK +1 - Food Network UK - GB News - Gems TV - Gold HD - Great! Movies - Great! Movies Action - Great! Movies Action + 1 - Great! Movies Classic - Great! Movies Classic +1 - Great! TV - Great! TV +1 - HGTV UK - Ideal World - ITV - ITV 2 - ITV 2 +1 - ITV 3 - ITV 3 +1 - ITV 4 - ITV 4 +1 - ITV Be - Jewellery Maker - Horror Channel UK - LFC TV - More 4 UK - More4+1 - MTV UK - National Geographic UK - Nickelodeon - Nick Jr UK - NickToons UK - Now 70's - Now 80's - Now 90's - PBS America - Pick UK - Pop - Pop Max - Quest Red UK - Quest Red UK +1 - Quest - Quest UK +1 - QVC UK Beauty - QVC Style UK - QVC UK - Really UK - S4C - Sky Arts HD - Sky Cinema Action HD - Sky Cinema Animation HD - Sky Cinema Comedy HD - Sky Cinema Drama HD - Sky Cinema Family HD - Sky Cinema Greats HD - Sky Cinema Hits HD - Sky Cinema Premiere HD - Sky Cinema Sci-Fi Horror HD - Sky Cinema Select - Sky Cinema Thriller HD - Sky Comedy - Sky Crime - Sky Documentaries - Sky History HD - Sky Max HD - Sky Nature - Sky News HD - Sky Sci-Fi - Sky Showcase HD - Sky Sports Action - Sky Sports Arena - Sky Sports Box Office - Sky Sports Cricket - Sky Sports F1 - Sky Sports Football - Sky Sports Golf - Sky Sports Main Event - Sky Sports Mix - Sky Sports News UK - Sky Sports Premier League - Sky Sports Racing - Sky Witness - Smithsonian Channel UK - STV - STV+1 - Talking Pictures TV - TBN UK - Tiny Pop - TJC - TNT Sports 1 - TNT Sports 10 - TNT Sports 2 - TNT Sports 3 - TNT Sports 4 - TNT Sports 5 - TNT Sports 6 - TNT Sports 7 - TNT Sports 8 - TNT Sports 9 - TNT Sports Box Office UK - TNT Sports Box Office 2 UK - TNT Sports Ultimate - Together TV - Viaplay Xtra - Xpanded TV - Yesterday - Yesterday+1 - - + + + + 4seven + 5 Action + 5 Select + 5 Star + 5 USA + Al Jazeera English + BBC Alba + BBC Four + BBC News + BBC One Cambridgeshire + BBC One Channel Islands + BBC One East Midlands + BBC One HD + BBC One London + BBC One North East & Cumbria + BBC One North West + BBC One Oxford + BBC One Scotland + BBC One South + BBC One South East + BBC One South West + BBC One Wales + BBC One West + BBC One West Midlands + BBC One Yorks + BBC Parliament + BBC Scotland + BBC Two England + BBC Two Wales + Blaze UK + Boomerang UK + Cartoonito UK + Cartoon Network UK + CBBC + CBeebies UK + CBS Drama UK + CBS Justice UK + CBS Reality UK + Challenge UK + Channel 4 + Channel 5 + Channel 5 +1 + CITV + Clubland TV + Comedy Central UK + Create and Craft + Dave UK + Dave ja vu + DMAX UK + Drama UK + E4 UK + E4 Extra + E4+1 + Eurosport 1 UK + Eurosport 2 UK + Film 4 UK + Film 4 UK +1 + Food Network UK + GB News + Gems TV + Gold HD + Great! Movies + Great! Movies Action + Great! Movies Action + 1 + Great! Movies Classic + Great! Movies Classic +1 + Great! TV + Great! TV +1 + HGTV UK + Ideal World + ITV + ITV 2 + ITV 2 +1 + ITV 3 + ITV 3 +1 + ITV 4 + ITV 4 +1 + ITV Be + Jewellery Maker + Horror Channel UK + LFC TV + More 4 UK + More4+1 + MTV UK + National Geographic UK + Nickelodeon + Nick Jr UK + NickToons UK + Now 70's + Now 80's + Now 90's + PBS America + Pick UK + Pop + Pop Max + Quest Red UK + Quest Red UK +1 + Quest + Quest UK +1 + QVC UK Beauty + QVC Style UK + QVC UK + Really UK + S4C + Sky Arts HD + Sky Cinema Action HD + Sky Cinema Animation HD + Sky Cinema Comedy HD + Sky Cinema Drama HD + Sky Cinema Family HD + Sky Cinema Greats HD + Sky Cinema Hits HD + Sky Cinema Premiere HD + Sky Cinema Sci-Fi Horror HD + Sky Cinema Select + Sky Cinema Thriller HD + Sky Comedy + Sky Crime + Sky Documentaries + Sky History HD + Sky Max HD + Sky Nature + Sky News HD + Sky Sci-Fi + Sky Showcase HD + Sky Sports Action + Sky Sports Arena + Sky Sports Box Office + Sky Sports Cricket + Sky Sports F1 + Sky Sports Football + Sky Sports Golf + Sky Sports Main Event + Sky Sports Mix + Sky Sports News UK + Sky Sports Premier League + Sky Sports Racing + Sky Witness + Smithsonian Channel UK + STV + STV+1 + Talking Pictures TV + TBN UK + Tiny Pop + TJC + TNT Sports 1 + TNT Sports 10 + TNT Sports 2 + TNT Sports 3 + TNT Sports 4 + TNT Sports 5 + TNT Sports 6 + TNT Sports 7 + TNT Sports 8 + TNT Sports 9 + TNT Sports Box Office UK + TNT Sports Box Office 2 UK + TNT Sports Ultimate + Together TV + Viaplay Xtra + Xpanded TV + Yesterday + Yesterday+1 + diff --git a/sites/bt.com/bt.com.config.js b/sites/bt.com/bt.com.config.js index e6120719..297bd80c 100644 --- a/sites/bt.com/bt.com.config.js +++ b/sites/bt.com/bt.com.config.js @@ -3,9 +3,6 @@ const dayjs = require('dayjs') module.exports = { site: 'bt.com', days: 2, - request: { - timeout: 30000 - }, url: function ({ date, channel }) { return `https://voila.metabroadcast.com/4/schedules/${ channel.site_id diff --git a/sites/bt.com/bt.com.test.js b/sites/bt.com/bt.com.test.js index 2b2e108f..c7f93d65 100644 --- a/sites/bt.com/bt.com.test.js +++ b/sites/bt.com/bt.com.test.js @@ -1,7 +1,6 @@ -// npx epg-grabber --config=sites/bt.com/bt.com.config.js --channels=sites/bt.com/bt.com.channels.xml --output=guide.xml --days=2 +// npm run grab -- --site=bt.com const { parser, url } = require('./bt.com.config.js') -const axios = require('axios') const dayjs = require('dayjs') const utc = require('dayjs/plugin/utc') const customParseFormat = require('dayjs/plugin/customParseFormat') @@ -21,7 +20,8 @@ it('can generate valid url', () => { }) it('can parse response', () => { - const content = `{"schedule":{"channel":{"title":"BBC One HD","id":"hsxv","uri":"http://api.youview.tv/channels/dvb://233a..4484","images":[{"uri":"https://images.metabroadcast.com?source=http%3A%2F%2Fimages-live.youview.tv%2Fimages%2Fentity%2F8c4c0357-d7ee-5d8a-8bc4-b177b6875128%2Fident%2F1_1024x532.png%3Fdefaultimg%3D0&ETag=r5vyecG6of%2BhCbHeEClx0Q%3D%3D","mime_type":"image/png","type":null,"color":"monochrome","theme":"light_monochrome","aspect_ratio":null,"availability_start":null,"availability_end":null,"width":1024,"height":532,"hasTitleArt":null,"source":null}],"available_from":[{"key":"api.youview.tv","name":"YouView JSON","country":"GB"}],"source":{"key":"api.youview.tv","name":"YouView JSON","country":"GB"},"same_as":[],"media_type":"video","broadcaster":null,"aliases":[{"namespace":"youview:serviceLocator","value":"dvb://233a..4484"},{"namespace":"youview:channel:id","value":"8c4c0357-d7ee-5d8a-8bc4-b177b6875128"}],"genres":[],"high_definition":true,"timeshifted":null,"regional":null,"related_links":[],"start_date":null,"advertised_from":null,"advertised_to":null,"short_description":null,"medium_description":null,"long_description":null,"region":null,"target_regions":[],"channel_type":"CHANNEL","interactive":false,"transmission_types":["DTT"],"quality":"HD","hdr":false},"source":"api.youview.tv","entries":[{"broadcast":{"aliases":[{"namespace":"api.youview.tv:slot","value":"dvb://233a..4484;76bc"},{"namespace":"dvb:event-locator","value":"dvb://233a..4484;76bc"},{"namespace":"dvb:pcrid","value":"crid://fp.bbc.co.uk/b/3Q30S2"},{"namespace":"youview:schedule_event:id","value":"79d318f3-b41a-582d-b089-7b0172538b42"}],"transmission_time":"2022-03-19T23:30:00.000Z","transmission_end_time":"2022-03-20T01:20:00.000Z","broadcast_duration":6600,"broadcast_on":"hsxv","schedule_date":null,"repeat":null,"subtitled":true,"signed":null,"audio_described":false,"high_definition":null,"widescreen":null,"surround":null,"live":null,"premiere":null,"continuation":null,"new_series":null,"new_episode":null,"new_one_off":null,"revised_repeat":null,"blackout_restriction":{"all":false}},"item":{"id":"n72nsw","type":"item","display_title":{"title":"The Finest Hours (2016)","subtitle":null},"year":null,"media_type":"video","specialization":"tv","source":{"key":"api.youview.tv","name":"YouView JSON","country":"GB"},"title":"The Finest Hours (2016)","description":"Drama based on a true story, recounting one of history's most daring coastguard rescue attempts. Stranded on a sinking oil tanker along with 30 other sailors, engineer Ray Sybert battles to buy his crew more time as Captain Bernie Webber and three of his colleagues tackle gigantic waves and gale-force winds in their astonishing bid to save the seamen.","image":"https://images.metabroadcast.com?source=http%3A%2F%2Fimages-live.youview.tv%2Fimages%2Fentity%2F52172983%2Fprimary%2F1_1024x576.jpg%3Fdefaultimg%3D0&ETag=z7ucT5kdAq7HuNQf%2FGTEJg%3D%3D","thumbnail":null,"duration":null,"container":null}}]},"terms_and_conditions":{"text":"Specific terms and conditions in your agreement with MetaBroadcast, and with any data provider, apply to your use of this data, and associated systems."},"results":1,"request":{"path":"/4/schedules/hsxv.json","parameters":{"annotations":"content.description","from":"2022-03-20T00:00:00Z","to":"2022-03-21T00:00:00Z","source":"api.youview.tv","key":"b4d2edb68da14dfb9e47b5465e99b1b1"}}}` + const content = + '{"schedule":{"channel":{"title":"BBC One HD","id":"hsxv","uri":"http://api.youview.tv/channels/dvb://233a..4484","images":[{"uri":"https://images.metabroadcast.com?source=http%3A%2F%2Fimages-live.youview.tv%2Fimages%2Fentity%2F8c4c0357-d7ee-5d8a-8bc4-b177b6875128%2Fident%2F1_1024x532.png%3Fdefaultimg%3D0&ETag=r5vyecG6of%2BhCbHeEClx0Q%3D%3D","mime_type":"image/png","type":null,"color":"monochrome","theme":"light_monochrome","aspect_ratio":null,"availability_start":null,"availability_end":null,"width":1024,"height":532,"hasTitleArt":null,"source":null}],"available_from":[{"key":"api.youview.tv","name":"YouView JSON","country":"GB"}],"source":{"key":"api.youview.tv","name":"YouView JSON","country":"GB"},"same_as":[],"media_type":"video","broadcaster":null,"aliases":[{"namespace":"youview:serviceLocator","value":"dvb://233a..4484"},{"namespace":"youview:channel:id","value":"8c4c0357-d7ee-5d8a-8bc4-b177b6875128"}],"genres":[],"high_definition":true,"timeshifted":null,"regional":null,"related_links":[],"start_date":null,"advertised_from":null,"advertised_to":null,"short_description":null,"medium_description":null,"long_description":null,"region":null,"target_regions":[],"channel_type":"CHANNEL","interactive":false,"transmission_types":["DTT"],"quality":"HD","hdr":false},"source":"api.youview.tv","entries":[{"broadcast":{"aliases":[{"namespace":"api.youview.tv:slot","value":"dvb://233a..4484;76bc"},{"namespace":"dvb:event-locator","value":"dvb://233a..4484;76bc"},{"namespace":"dvb:pcrid","value":"crid://fp.bbc.co.uk/b/3Q30S2"},{"namespace":"youview:schedule_event:id","value":"79d318f3-b41a-582d-b089-7b0172538b42"}],"transmission_time":"2022-03-19T23:30:00.000Z","transmission_end_time":"2022-03-20T01:20:00.000Z","broadcast_duration":6600,"broadcast_on":"hsxv","schedule_date":null,"repeat":null,"subtitled":true,"signed":null,"audio_described":false,"high_definition":null,"widescreen":null,"surround":null,"live":null,"premiere":null,"continuation":null,"new_series":null,"new_episode":null,"new_one_off":null,"revised_repeat":null,"blackout_restriction":{"all":false}},"item":{"id":"n72nsw","type":"item","display_title":{"title":"The Finest Hours (2016)","subtitle":null},"year":null,"media_type":"video","specialization":"tv","source":{"key":"api.youview.tv","name":"YouView JSON","country":"GB"},"title":"The Finest Hours (2016)","description":"Drama based on a true story, recounting one of history\'s most daring coastguard rescue attempts. Stranded on a sinking oil tanker along with 30 other sailors, engineer Ray Sybert battles to buy his crew more time as Captain Bernie Webber and three of his colleagues tackle gigantic waves and gale-force winds in their astonishing bid to save the seamen.","image":"https://images.metabroadcast.com?source=http%3A%2F%2Fimages-live.youview.tv%2Fimages%2Fentity%2F52172983%2Fprimary%2F1_1024x576.jpg%3Fdefaultimg%3D0&ETag=z7ucT5kdAq7HuNQf%2FGTEJg%3D%3D","thumbnail":null,"duration":null,"container":null}}]},"terms_and_conditions":{"text":"Specific terms and conditions in your agreement with MetaBroadcast, and with any data provider, apply to your use of this data, and associated systems."},"results":1,"request":{"path":"/4/schedules/hsxv.json","parameters":{"annotations":"content.description","from":"2022-03-20T00:00:00Z","to":"2022-03-21T00:00:00Z","source":"api.youview.tv","key":"b4d2edb68da14dfb9e47b5465e99b1b1"}}}' const result = parser({ content }).map(p => { p.start = p.start.toJSON() @@ -32,7 +32,8 @@ it('can parse response', () => { expect(result).toMatchObject([ { title: 'The Finest Hours (2016)', - description: `Drama based on a true story, recounting one of history's most daring coastguard rescue attempts. Stranded on a sinking oil tanker along with 30 other sailors, engineer Ray Sybert battles to buy his crew more time as Captain Bernie Webber and three of his colleagues tackle gigantic waves and gale-force winds in their astonishing bid to save the seamen.`, + description: + "Drama based on a true story, recounting one of history's most daring coastguard rescue attempts. Stranded on a sinking oil tanker along with 30 other sailors, engineer Ray Sybert battles to buy his crew more time as Captain Bernie Webber and three of his colleagues tackle gigantic waves and gale-force winds in their astonishing bid to save the seamen.", icon: 'https://images.metabroadcast.com?source=http%3A%2F%2Fimages-live.youview.tv%2Fimages%2Fentity%2F52172983%2Fprimary%2F1_1024x576.jpg%3Fdefaultimg%3D0&ETag=z7ucT5kdAq7HuNQf%2FGTEJg%3D%3D', season: null, episode: null, @@ -44,7 +45,8 @@ it('can parse response', () => { it('can handle empty guide', () => { const result = parser({ - content: `{"schedule":{"channel":{"title":"BBC One HD","id":"hsxv","uri":"http://api.youview.tv/channels/dvb://233a..4484","images":[{"uri":"https://images.metabroadcast.com?source=http%3A%2F%2Fimages-live.youview.tv%2Fimages%2Fentity%2F8c4c0357-d7ee-5d8a-8bc4-b177b6875128%2Fident%2F1_1024x532.png%3Fdefaultimg%3D0&ETag=r5vyecG6of%2BhCbHeEClx0Q%3D%3D","mime_type":"image/png","type":null,"color":"monochrome","theme":"light_monochrome","aspect_ratio":null,"availability_start":null,"availability_end":null,"width":1024,"height":532,"hasTitleArt":null,"source":null}],"available_from":[{"key":"api.youview.tv","name":"YouView JSON","country":"GB"}],"source":{"key":"api.youview.tv","name":"YouView JSON","country":"GB"},"same_as":[],"media_type":"video","broadcaster":null,"aliases":[{"namespace":"youview:serviceLocator","value":"dvb://233a..4484"},{"namespace":"youview:channel:id","value":"8c4c0357-d7ee-5d8a-8bc4-b177b6875128"}],"genres":[],"high_definition":true,"timeshifted":null,"regional":null,"related_links":[],"start_date":null,"advertised_from":null,"advertised_to":null,"short_description":null,"medium_description":null,"long_description":null,"region":null,"target_regions":[],"channel_type":"CHANNEL","interactive":false,"transmission_types":["DTT"],"quality":"HD","hdr":false},"source":"api.youview.tv","entries":[]},"terms_and_conditions":{"text":"Specific terms and conditions in your agreement with MetaBroadcast, and with any data provider, apply to your use of this data, and associated systems."},"results":1,"request":{"path":"/4/schedules/hsxv.json","parameters":{"annotations":"content.description","from":"2022-03-20T00:00:00Z","to":"2022-03-21T00:00:00Z","source":"api.youview.tv","key":"b4d2edb68da14dfb9e47b5465e99b1b1"}}}` + content: + '{"schedule":{"channel":{"title":"BBC One HD","id":"hsxv","uri":"http://api.youview.tv/channels/dvb://233a..4484","images":[{"uri":"https://images.metabroadcast.com?source=http%3A%2F%2Fimages-live.youview.tv%2Fimages%2Fentity%2F8c4c0357-d7ee-5d8a-8bc4-b177b6875128%2Fident%2F1_1024x532.png%3Fdefaultimg%3D0&ETag=r5vyecG6of%2BhCbHeEClx0Q%3D%3D","mime_type":"image/png","type":null,"color":"monochrome","theme":"light_monochrome","aspect_ratio":null,"availability_start":null,"availability_end":null,"width":1024,"height":532,"hasTitleArt":null,"source":null}],"available_from":[{"key":"api.youview.tv","name":"YouView JSON","country":"GB"}],"source":{"key":"api.youview.tv","name":"YouView JSON","country":"GB"},"same_as":[],"media_type":"video","broadcaster":null,"aliases":[{"namespace":"youview:serviceLocator","value":"dvb://233a..4484"},{"namespace":"youview:channel:id","value":"8c4c0357-d7ee-5d8a-8bc4-b177b6875128"}],"genres":[],"high_definition":true,"timeshifted":null,"regional":null,"related_links":[],"start_date":null,"advertised_from":null,"advertised_to":null,"short_description":null,"medium_description":null,"long_description":null,"region":null,"target_regions":[],"channel_type":"CHANNEL","interactive":false,"transmission_types":["DTT"],"quality":"HD","hdr":false},"source":"api.youview.tv","entries":[]},"terms_and_conditions":{"text":"Specific terms and conditions in your agreement with MetaBroadcast, and with any data provider, apply to your use of this data, and associated systems."},"results":1,"request":{"path":"/4/schedules/hsxv.json","parameters":{"annotations":"content.description","from":"2022-03-20T00:00:00Z","to":"2022-03-21T00:00:00Z","source":"api.youview.tv","key":"b4d2edb68da14dfb9e47b5465e99b1b1"}}}' }) expect(result).toMatchObject([]) }) diff --git a/sites/cablego.com.pe/cablego.com.pe.channels.xml b/sites/cablego.com.pe/cablego.com.pe.channels.xml index 0ceeaa32..71f22746 100644 --- a/sites/cablego.com.pe/cablego.com.pe.channels.xml +++ b/sites/cablego.com.pe/cablego.com.pe.channels.xml @@ -1,101 +1,99 @@ - - - AMERICA TV - ATV - ATV+ - BHTV - CONECTA2 TV - CONGRESO TV - DE PELICULA - DISTRITO COMEDIA - ECUADOR TV - EUROPA EUROPA - EXITOSA TV - GLOBAL - GOLDEN EDGE - KARIBEÑA - LATINA - NATIVA - OVACION - PANAMERICANA TV - PASIONES - PBO - TV PERU - USMP TV - VENUS - WILLAX - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AMERICA TV + ATV + ATV+ + BHTV + CONECTA2 TV + CONGRESO TV + DE PELICULA + DISTRITO COMEDIA + ECUADOR TV + EUROPA EUROPA + EXITOSA TV + GLOBAL + GOLDEN EDGE + KARIBEÑA + LATINA + NATIVA + OVACION + PANAMERICANA TV + PASIONES + PBO + TV PERU + USMP TV + VENUS + WILLAX + diff --git a/sites/cablego.com.pe/cablego.com.pe.test.js b/sites/cablego.com.pe/cablego.com.pe.test.js index e8846702..c1da93e9 100644 --- a/sites/cablego.com.pe/cablego.com.pe.test.js +++ b/sites/cablego.com.pe/cablego.com.pe.test.js @@ -1,5 +1,5 @@ // npm run channels:parse -- --config=./sites/cablego.com.pe/cablego.com.pe.config.js --output=./sites/cablego.com.pe/cablego.com.pe.channels.xml -// npx epg-grabber --config=sites/cablego.com.pe/cablego.com.pe.config.js --channels=sites/cablego.com.pe/cablego.com.pe.channels.xml --output=guide.xml --days=2 +// npm run grab -- --site=cablego.com.pe const { parser, url, request } = require('./cablego.com.pe.config.js') const fs = require('fs') diff --git a/sites/cableplus.com.uy/cableplus.com.uy.channels.xml b/sites/cableplus.com.uy/cableplus.com.uy.channels.xml index dd233e7a..a2c7e3b5 100644 --- a/sites/cableplus.com.uy/cableplus.com.uy.channels.xml +++ b/sites/cableplus.com.uy/cableplus.com.uy.channels.xml @@ -1,163 +1,161 @@ - - - 360 TV - A24 - AMERICA SPORTS - A+V - ARGENTINISIMA - BBC WORLD - BYUTV - SAETA - CANAL 26 - TV NACIONAL - CANAL 7 PUNTA DEL ESTE - CANAL RURAL - CARDINAL TV - CHARRUA TV - CLAN HD - CNN EN ESPAÑOL - CRONICA - DEUTSCHE WELLE (DEUTSCH+) - DW ESPAÑOL - CANAL DE LA REGIÓN - EL GARAGE - CANAL VASCO - FRANCE 24 ESPAÑOL - FRANCE 24 FRANCES - GALICIA TV - GOL TV - HBO MUNDI - HBO POP - HBO SIGNATURE - LA NACION + - MAROÑAS - PX SPORTS HD - RAI - RT TV - SIEMPRE CINE - SUN CHANNEL HD - TELEDOCE - TOONCAST - TRU TV - TEVECIUDAD - TVN CHILE - TV PUBLICA ARG - UCL - VTV - VTV + - WOBI TV - ZOOMOO - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 360 TV + A24 + AMERICA SPORTS + A+V + ARGENTINISIMA + BBC WORLD + BYUTV + SAETA + CANAL 26 + TV NACIONAL + CANAL 7 PUNTA DEL ESTE + CANAL RURAL + CARDINAL TV + CHARRUA TV + CLAN HD + CNN EN ESPAÑOL + CRONICA + DEUTSCHE WELLE (DEUTSCH+) + DW ESPAÑOL + CANAL DE LA REGIÓN + EL GARAGE + CANAL VASCO + FRANCE 24 ESPAÑOL + FRANCE 24 FRANCES + GALICIA TV + GOL TV + HBO MUNDI + HBO POP + HBO SIGNATURE + LA NACION + + MAROÑAS + PX SPORTS HD + RAI + RT TV + SIEMPRE CINE + SUN CHANNEL HD + TELEDOCE + TOONCAST + TRU TV + TEVECIUDAD + TVN CHILE + TV PUBLICA ARG + UCL + VTV + VTV + + WOBI TV + ZOOMOO + diff --git a/sites/cableplus.com.uy/cableplus.com.uy.config.js b/sites/cableplus.com.uy/cableplus.com.uy.config.js index 1b7df7fd..a47a7bbc 100644 --- a/sites/cableplus.com.uy/cableplus.com.uy.config.js +++ b/sites/cableplus.com.uy/cableplus.com.uy.config.js @@ -115,14 +115,14 @@ function parseItems(content, date) { let featuredItems = $('.vista-pc > .programacion-fila > .channel-programa') .filter(function () { - return $(this).find(`.grid_fecha_hora`).text().indexOf(date.format('DD-MM')) > -1 + return $(this).find('.grid_fecha_hora').text().indexOf(date.format('DD-MM')) > -1 }) .toArray() - let otherItems = $(`#owl-pc > .item-program`) + let otherItems = $('#owl-pc > .item-program') .filter(function () { return ( $(this) - .find(`.evento_titulo > .horario > p.fechaHora`) + .find('.evento_titulo > .horario > p.fechaHora') .text() .indexOf(date.format('DD/MM')) > -1 ) diff --git a/sites/cableplus.com.uy/cableplus.com.uy.test.js b/sites/cableplus.com.uy/cableplus.com.uy.test.js index 06459f4c..1608509d 100644 --- a/sites/cableplus.com.uy/cableplus.com.uy.test.js +++ b/sites/cableplus.com.uy/cableplus.com.uy.test.js @@ -1,5 +1,5 @@ // npm run channels:parse -- --config=./sites/cableplus.com.uy/cableplus.com.uy.config.js --output=./sites/cableplus.com.uy/cableplus.com.uy.channels.xml -// npx epg-grabber --config=sites/cableplus.com.uy/cableplus.com.uy.config.js --channels=sites/cableplus.com.uy/cableplus.com.uy.channels.xml --output=guide.xml --days=2 +// npm run grab -- --site=cableplus.com.uy const { parser, url, request } = require('./cableplus.com.uy.config.js') const fs = require('fs') @@ -53,7 +53,7 @@ it('can parse response', () => { expect(results[0]).toMatchObject({ start: '2023-02-12T09:30:00.000Z', stop: '2023-02-12T10:30:00.000Z', - title: `Revista agropecuaria`, + title: 'Revista agropecuaria', icon: 'https://www.reportv.com.ar/buscador/img/Programas/2797844.jpg', categories: [] }) @@ -61,7 +61,7 @@ it('can parse response', () => { expect(results[4]).toMatchObject({ start: '2023-02-12T12:30:00.000Z', stop: '2023-02-12T13:30:00.000Z', - title: `De pago en pago`, + title: 'De pago en pago', icon: 'https://www.reportv.com.ar/buscador/img/Programas/3772835.jpg', categories: ['Cultural'] }) diff --git a/sites/canalplus-caraibes.com/canalplus-caraibes.com.channels.xml b/sites/canalplus-caraibes.com/canalplus-caraibes.com.channels.xml index 070d6b35..0b820b01 100644 --- a/sites/canalplus-caraibes.com/canalplus-caraibes.com.channels.xml +++ b/sites/canalplus-caraibes.com/canalplus-caraibes.com.channels.xml @@ -1,132 +1,130 @@ - - - 6ter - 13ème Rue - Action - Alizés - A+ - ARTE Français - Automoto la chaîne - BBC World News Americas - Bblack! Caribbean - BeIn Sports 1 France - BeIn Sports 2 France - BeIn Sports 3 France - BeIn Sports Max 4 France - BeIn Sports Max 5 France - C8 - Canal 10 - Canal J - Canal + Caraïbes - Canal + Cinéma France - Canal + Kids - Canal + Séries France - Canal + Sport France - Cine + Classic - Cine + Club - Cine + Émotion - Cine + Famiz - Cine + Frisson - Cine + Premier - C News - CNN International Latin America - Comédie + - C Star - Discovery Channel France - Discovery Science France - Disney Channel France - Disney Junior France - Dorcel TV - E! France - English Club TV - Equidia - ES1 - ESPN 2 Caribbean - ESPN Caribbean - ETV - Eurosport 1 - Eurosport 2 - France 2 - France 3 - France 4 - France 5 - France 24 Français - Franceinfo: - Game One - Globo News - Golf + - Graphé TV - Guadeloupe 1ère - Gulli - Guyane 1ère - HBO Xtreme Latinoamérica - InfoSport + - IOTV - KMT - KTO - KTV Guyane - LCI - LCP Public Sénat - L'Équipe - Ludikids - M6 - Martinique 1ère - MCM France - Metropole - MTV France - MTV Hits France - National Geographic France - National Geographic Wild France - Nickelodeon France - Nick Jr Africa - Nollywood TV - Novelas TV - NRJ 12 - OCS choc - OCS City - OCS geants - OCS max - Paramount Channel France - Paris Première - Penthouse Black - Pink TV - Piwi + - Planète + - Planète + A&E - Planète + CI - RTL 9 - Seasons - - STVS 8.1 - Syfy France - Télé 20 - Telemicro Internacional - Telemundo - Tele Pacific - Tele Soleil - TéléToon + - Téva - TF 1 - TF 1 Séries Films - TFX - TMC - TNH - Toute l'Histoire - Trace Ayiti - Trace Caribbean - Trace Gospel - Trace Latina - Trace Urban - TV5Monde Amérique Latine - TV Breizh - Ushuaïa TV - ViàATV - Vixen - W9 - Wataaa TV - XXL - Zitata TV - Zouk TV - - \ No newline at end of file + + + 13ème Rue + 6ter + Action + Alizés + A+ + ARTE Français + Automoto la chaîne + BBC World News Americas + Bblack! Caribbean + BeIn Sports 1 France + BeIn Sports 2 France + BeIn Sports 3 France + BeIn Sports Max 4 France + BeIn Sports Max 5 France + C8 + Canal 10 + Canal J + Canal + Caraïbes + Canal + Cinéma France + Canal + Kids + Canal + Séries France + Canal + Sport France + Cine + Classic + Cine + Club + Cine + Émotion + Cine + Famiz + Cine + Frisson + Cine + Premier + C News + CNN International Latin America + Comédie + + C Star + Discovery Channel France + Discovery Science France + Disney Channel France + Disney Junior France + Dorcel TV + E! France + English Club TV + Equidia + ESPN 2 Caribbean + ESPN Caribbean + ETV + Eurosport 1 + Eurosport 2 + France 2 + France 24 Français + France 3 + France 4 + France 5 + Franceinfo: + Game One + Globo News + Golf + + Graphé TV + Guadeloupe 1ère + Gulli + Guyane 1ère + HBO Xtreme Latinoamérica + InfoSport + + IOTV + KMT + KTO + KTV Guyane + LCI + L'Équipe + Ludikids + M6 + Martinique 1ère + MCM France + Metropole + ES1 + MTV France + MTV Hits France + National Geographic France + National Geographic Wild France + Nickelodeon France + Nick Jr Africa + Nollywood TV + Novelas TV + NRJ 12 + OCS choc + OCS City + OCS geants + OCS max + Paramount Channel France + Paris Première + Penthouse Black + Pink TV + Piwi + + Planète + + Planète + A&E + Planète + CI + LCP Public Sénat + RTL 9 + Seasons + STVS 8.1 + Syfy France + Télé 20 + Telemicro Internacional + Telemundo + Tele Pacific + Tele Soleil + TéléToon + + Téva + TF 1 + TF 1 Séries Films + TFX + TMC + TNH + Toute l'Histoire + Trace Ayiti + Trace Caribbean + Trace Gospel + Trace Latina + Trace Urban + TV5Monde Amérique Latine + TV Breizh + Ushuaïa TV + ViàATV + Vixen + W9 + Wataaa TV + XXL + Zitata TV + Zouk TV + \ No newline at end of file diff --git a/sites/canalplus-caraibes.com/canalplus-caraibes.com.config.js b/sites/canalplus-caraibes.com/canalplus-caraibes.com.config.js index e229fa0b..33595d2f 100644 --- a/sites/canalplus-caraibes.com/canalplus-caraibes.com.config.js +++ b/sites/canalplus-caraibes.com/canalplus-caraibes.com.config.js @@ -2,7 +2,6 @@ const axios = require('axios') const cheerio = require('cheerio') const dayjs = require('dayjs') const utc = require('dayjs/plugin/utc') -const timezone = require('dayjs/plugin/timezone') dayjs.extend(utc) @@ -34,13 +33,13 @@ module.exports = { }, async channels() { const html = await axios - .get(`https://www.canalplus-caraibes.com/bl/guide-tv-ce-soir`) + .get('https://www.canalplus-caraibes.com/bl/guide-tv-ce-soir') .then(r => r.data) .catch(console.log) const $ = cheerio.load(html) const script = $('body > script:nth-child(2)').html() - const [_, json] = script.match(/window.APP_STATE=(.*);/) || [null, null] + const [, json] = script.match(/window.APP_STATE=(.*);/) || [null, null] const data = JSON.parse(json) const items = data.tvGuide.channels.byZapNumber diff --git a/sites/canalplus-caraibes.com/canalplus-caraibes.com.test.js b/sites/canalplus-caraibes.com/canalplus-caraibes.com.test.js index 1286336b..d2041367 100644 --- a/sites/canalplus-caraibes.com/canalplus-caraibes.com.test.js +++ b/sites/canalplus-caraibes.com/canalplus-caraibes.com.test.js @@ -1,5 +1,5 @@ // [Geo-blocked] node ./scripts/channels.js --config=./sites/canalplus-caraibes.com/canalplus-caraibes.com.config.js --output=./sites/canalplus-caraibes.com/canalplus-caraibes.com.channels.xml -// npx epg-grabber --config=sites/canalplus-caraibes.com/canalplus-caraibes.com.config.js --channels=sites/canalplus-caraibes.com/canalplus-caraibes.com.channels.xml --output=guide.xml --days=2 +// npm run grab -- --site=canalplus-caraibes.com const { parser, url } = require('./canalplus-caraibes.com.config.js') const axios = require('axios') @@ -31,7 +31,8 @@ it('can generate valid url for tomorrow', () => { }) it('can parse response', done => { - const content = `{"timeSlices":[{"contents":[{"title":"Rugby - Leinster / La Rochelle","subtitle":"Rugby","thirdTitle":"BEIN SPORTS 1 HD","startTime":1660815000,"endTime":1660816800,"onClick":{"displayTemplate":"miniDetail","displayName":"Rugby - Leinster / La Rochelle","URLPage":"https://service.canal-overseas.com/ott-frontend/vector/53001/event/140377765","URLVitrine":"https://service.canal-overseas.com/ott-frontend/vector/53001/program/224515801/recommendations"},"programID":224515801,"diffusionID":"140377765","URLImageDefault":"https://service.canal-overseas.com/image-api/v1/image/75fca4586fdc3458930dd1ab6fc2e643","URLImage":"https://service.canal-overseas.com/image-api/v1/image/7854e20fb6efecd398598653c57cc771"}],"timeSlice":"4"}]}` + const content = + '{"timeSlices":[{"contents":[{"title":"Rugby - Leinster / La Rochelle","subtitle":"Rugby","thirdTitle":"BEIN SPORTS 1 HD","startTime":1660815000,"endTime":1660816800,"onClick":{"displayTemplate":"miniDetail","displayName":"Rugby - Leinster / La Rochelle","URLPage":"https://service.canal-overseas.com/ott-frontend/vector/53001/event/140377765","URLVitrine":"https://service.canal-overseas.com/ott-frontend/vector/53001/program/224515801/recommendations"},"programID":224515801,"diffusionID":"140377765","URLImageDefault":"https://service.canal-overseas.com/image-api/v1/image/75fca4586fdc3458930dd1ab6fc2e643","URLImage":"https://service.canal-overseas.com/image-api/v1/image/7854e20fb6efecd398598653c57cc771"}],"timeSlice":"4"}]}' axios.get.mockImplementation(url => { if (url === 'https://service.canal-overseas.com/ott-frontend/vector/53001/event/140377765') { return Promise.resolve({ @@ -125,7 +126,8 @@ it('can parse response', done => { it('can handle empty guide', done => { parser({ - content: `{"currentPage":{"displayTemplate":"error","BOName":"Page introuvable"},"title":"Page introuvable","text":"La page que vous demandez est introuvable. Si le problème persiste, vous pouvez contacter l'assistance de CANAL+/CANALSAT.","code":404}` + content: + '{"currentPage":{"displayTemplate":"error","BOName":"Page introuvable"},"title":"Page introuvable","text":"La page que vous demandez est introuvable. Si le problème persiste, vous pouvez contacter l\'assistance de CANAL+/CANALSAT.","code":404}' }) .then(result => { expect(result).toMatchObject([]) diff --git a/sites/canalplus-haiti.com/canalplus-haiti.com.channels.xml b/sites/canalplus-haiti.com/canalplus-haiti.com.channels.xml index c17e7664..0216e59c 100644 --- a/sites/canalplus-haiti.com/canalplus-haiti.com.channels.xml +++ b/sites/canalplus-haiti.com/canalplus-haiti.com.channels.xml @@ -1,117 +1,115 @@ - - - 6ter - 13ème Rue - Action - Alizés - A+ - Automoto la chaîne - BBC World News Americas - Bblack! Caribbean - C8 - Canal 10 - Canal + Cinéma France - Canal + Haïti - Canal + Kids - Canal + Sport France - Cine + Classic - Cine + Club - Cine + Émotion - Cine + Famiz - Cine + Frisson - Cine + Premier - C News - CNN International Latin America - Comédie + - C Star - Cuisines - Discovery Channel France - Discovery Science France - Disney Channel France - Disney Junior France - Dorcel TV Africa - E! France - English Club TV - ES1 - ESPN 2 Caribbean - ESPN Caribbean - ETV - Eurosport 1 - Eurosport 2 - France 2 - France 3 - France 5 - France 24 Français - Franceinfo: - Game One - Globo News - Graphé TV - Guadeloupe 1ère - Guyane 1ère - Haiti Sports TV 1 - Haiti Sports TV 2 - HBO Xtreme Latinoamérica - InfoSport + - IOTV - KMT - KTO - KTV Guyane - LCI - LCP Public Sénat - L'Équipe - Ludikids - M6 - Martinique 1ère - MCM France - Metropole - MTV France - MTV Hits France - Nathan TV - National Geographic France - National Geographic Wild France - Nickelodeon France - Nick Jr Africa - Nollywood TV - Novelas TV - NRJ 12 - Paramount Channel France - Paris Première - Penthouse Black - Piwi + - Planète + - Planète + A&E - Planète + CI - RTL 9 - Seasons - - Studiocanal - STVS 8.1 - Syfy France - Télé 20 - Telemicro Internacional - Telemundo - Tele Pacific - Tele Soleil - TéléToon + - TF 1 - TF 1 Séries Films - TFX - TNH - Toute l'Histoire - Trace Ayiti - Trace Caribbean - Trace Gospel - Trace Latina - Trace Urban - TV5Monde Amérique Latine - TV Caraïbes - Ushuaïa TV - ViàATV - Vixen - Wataaa TV - XXL - Zitata TV - Zouk TV - - \ No newline at end of file + + + 13ème Rue + 6ter + Action + Alizés + A+ + Automoto la chaîne + BBC World News Americas + Bblack! Caribbean + C8 + Canal 10 + Canal + Cinéma France + Canal + Haïti + Canal + Kids + Canal + Sport France + Cine + Classic + Cine + Club + Cine + Émotion + Cine + Famiz + Cine + Frisson + Cine + Premier + C News + CNN International Latin America + Comédie + + C Star + Cuisines + Discovery Channel France + Discovery Science France + Disney Channel France + Disney Junior France + Dorcel TV Africa + E! France + English Club TV + ESPN 2 Caribbean + ESPN Caribbean + ETV + Eurosport 1 + Eurosport 2 + France 2 + France 24 Français + France 3 + France 5 + Franceinfo: + Game One + Globo News + Graphé TV + Guadeloupe 1ère + Guyane 1ère + Haiti Sports TV 1 + Haiti Sports TV 2 + HBO Xtreme Latinoamérica + InfoSport + + IOTV + KMT + KTO + KTV Guyane + LCI + L'Équipe + Ludikids + M6 + Martinique 1ère + MCM France + Metropole + ES1 + MTV France + MTV Hits France + Nathan TV + National Geographic France + National Geographic Wild France + Nickelodeon France + Nick Jr Africa + Nollywood TV + Novelas TV + NRJ 12 + Paramount Channel France + Paris Première + Penthouse Black + Piwi + + Planète + + Planète + A&E + Planète + CI + LCP Public Sénat + RTL 9 + Seasons + Studiocanal + STVS 8.1 + Syfy France + Télé 20 + Telemicro Internacional + Telemundo + Tele Pacific + Tele Soleil + TéléToon + + TF 1 + TF 1 Séries Films + TFX + TNH + Toute l'Histoire + Trace Ayiti + Trace Caribbean + Trace Gospel + Trace Latina + Trace Urban + TV5Monde Amérique Latine + TV Caraïbes + Ushuaïa TV + ViàATV + Vixen + Wataaa TV + XXL + Zitata TV + Zouk TV + \ No newline at end of file diff --git a/sites/canalplus-haiti.com/canalplus-haiti.com.config.js b/sites/canalplus-haiti.com/canalplus-haiti.com.config.js index 89279868..86b1aff5 100644 --- a/sites/canalplus-haiti.com/canalplus-haiti.com.config.js +++ b/sites/canalplus-haiti.com/canalplus-haiti.com.config.js @@ -33,13 +33,13 @@ module.exports = { }, async channels() { const html = await axios - .get(`https://www.canalplus-haiti.com/guide-tv-ce-soir`) + .get('https://www.canalplus-haiti.com/guide-tv-ce-soir') .then(r => r.data) .catch(console.log) const $ = cheerio.load(html) const script = $('body > script:nth-child(2)').html() - const [_, json] = script.match(/window.APP_STATE=(.*);/) || [null, null] + const [, json] = script.match(/window.APP_STATE=(.*);/) || [null, null] const data = JSON.parse(json) const items = data.tvGuide.channels.byZapNumber diff --git a/sites/canalplus-haiti.com/canalplus-haiti.com.test.js b/sites/canalplus-haiti.com/canalplus-haiti.com.test.js index f24e77b5..16d1d1d6 100644 --- a/sites/canalplus-haiti.com/canalplus-haiti.com.test.js +++ b/sites/canalplus-haiti.com/canalplus-haiti.com.test.js @@ -1,5 +1,5 @@ -// [Geo-blocked] npm run channels:parse --config=./sites/canalplus-haiti.com/canalplus-haiti.com.config.js --output=./sites/canalplus-haiti.com/canalplus-haiti.com.channels.xml -// npx epg-grabber --config=sites/canalplus-haiti.com/canalplus-haiti.com.config.js --channels=sites/canalplus-haiti.com/canalplus-haiti.com.channels.xml --output=guide.xml --days=2 +// [Geo-blocked] npm run channels:parse -- --config=./sites/canalplus-haiti.com/canalplus-haiti.com.config.js --output=./sites/canalplus-haiti.com/canalplus-haiti.com.channels.xml +// npm run grab -- --site=canalplus-haiti.com const { parser, url } = require('./canalplus-haiti.com.config.js') const axios = require('axios') @@ -165,7 +165,8 @@ it('can parse response', done => { it('can handle empty guide', done => { parser({ - content: `{"currentPage":{"displayTemplate":"error","BOName":"Page introuvable"},"title":"Page introuvable","text":"La page que vous demandez est introuvable. Si le problème persiste, vous pouvez contacter l'assistance de CANAL+/CANALSAT.","code":404}` + content: + '{"currentPage":{"displayTemplate":"error","BOName":"Page introuvable"},"title":"Page introuvable","text":"La page que vous demandez est introuvable. Si le problème persiste, vous pouvez contacter l\'assistance de CANAL+/CANALSAT.","code":404}' }) .then(result => { expect(result).toMatchObject([]) diff --git a/sites/canalplus-reunion.com/canalplus-reunion.com.channels.xml b/sites/canalplus-reunion.com/canalplus-reunion.com.channels.xml index 7e1653c7..f434f958 100644 --- a/sites/canalplus-reunion.com/canalplus-reunion.com.channels.xml +++ b/sites/canalplus-reunion.com/canalplus-reunion.com.channels.xml @@ -1,123 +1,121 @@ - - - 6ter - 13ème Rue - Action - Antenne Réunion TV - A+ - ARTE Français - Automoto la chaîne - BBC World News Africa - BeIn Sports 1 France - BeIn Sports 2 France - BeIn Sports 3 France - C8 - Canal + Cinéma Réunion - Canal + Décalé - Canal + Kids - Canal + Réunion - Canal + Séries Réunion - Canal + Sport Réunion - CGTN Français - Cine + Classic - Cine + Club - Cine + Émotion - Cine + Famiz - Cine + Frisson - Cine + Premier - C News - Colmax TV - Colors - Comédie + - C Star - Discovery Channel France - Discovery Science France - Disney Channel France - Disney Junior France - Dorcel TV Africa - E! France - English Club TV - Equidia - Eurosport 1 France - Eurosport 2 France - France 2 - France 3 - France 4 - France 5 - France 24 Français - Franceinfo: - Game One - Golf + - Gulli - Histoire TV - InfoSport + - Iqraa Africa & Europe - Kanal Austral TV - Kolo TV - KTO - Kwezi TV - LCI - LCP Assemblée Nationale - L'Équipe - Ludikids - M6 - Mayotte 1ère - MBS - Mezzo - MTV France - MTV Hits France - MTV India - National Geographic France - National Geographic Wild France - Nickelodeon France - Nickelodeon Junior France - Nollywood TV - Novegasy - Novelas TV - NRJ 12 - OCS choc - OCS City - OCS geants - OCS max - ORTC TV - Paramount Channel France - Paris Première - Penthouse Black - Piwi + - Planète + - Planète + A&E - Planète + CI - Réunion 1ère - RFM TV - RTA - RTL 9 - Seasons - Série Club - Syfy France - Télé Kréol - TéléToon + - Téva - TF 1 - TF 1 Séries Films - TFX - TMC - Trace Caribbean - Trace Urban Afrique - Trace Vanilla Islands - Trek - TV5Monde Afrique - TV Breizh - TV Malagasy - TV Plus Madagascar - TV Record Madagascar - Ushuaïa TV - Vixen - W9 - Wataaa TV - XXL - Zee Cinema Africa - Zee TV Africa - Zing UK - - \ No newline at end of file + + 13ème Rue + 6ter + Action + Antenne Réunion TV + A+ + ARTE Français + Automoto la chaîne + BBC World News Africa + BeIn Sports 1 France + BeIn Sports 2 France + BeIn Sports 3 France + C8 + Canal + Cinéma Réunion + Canal + Décalé + Canal + Kids + Canal + Réunion + Canal + Séries Réunion + Canal + Sport Réunion + CGTN Français + Cine + Classic + Cine + Club + Cine + Émotion + Cine + Famiz + Cine + Frisson + Cine + Premier + C News + Colmax TV + Colors + Comédie + + C Star + Discovery Channel France + Discovery Science France + Disney Channel France + Disney Junior France + Dorcel TV Africa + E! France + English Club TV + Equidia + Eurosport 1 France + Eurosport 2 France + France 2 + France 24 Français + France 3 + France 4 + France 5 + Franceinfo: + Game One + Golf + + Gulli + Histoire TV + InfoSport + + Iqraa Africa & Europe + Kanal Austral TV + Kolo TV + KTO + Kwezi TV + LCI + LCP Assemblée Nationale + L'Équipe + Ludikids + M6 + Mayotte 1ère + MBS + Mezzo + MTV France + MTV Hits France + MTV India + National Geographic France + National Geographic Wild France + Nickelodeon France + Nickelodeon Junior France + Nollywood TV + Novegasy + Novelas TV + NRJ 12 + OCS choc + OCS City + OCS geants + OCS max + ORTC TV + Paramount Channel France + Paris Première + Penthouse Black + Piwi + + Planète + + Planète + A&E + Planète + CI + Réunion 1ère + RFM TV + RTA + RTL 9 + Seasons + Série Club + Syfy France + Télé Kréol + TéléToon + + Téva + TF 1 + TF 1 Séries Films + TFX + TMC + Trace Caribbean + Trace Urban Afrique + Trace Vanilla Islands + Trek + TV5Monde Afrique + TV Breizh + TV Malagasy + TV Plus Madagascar + TV Record Madagascar + Ushuaïa TV + Vixen + W9 + Wataaa TV + XXL + Zee Cinema Africa + Zee TV Africa + Zing UK + \ No newline at end of file diff --git a/sites/canalplus-reunion.com/canalplus-reunion.com.test.js b/sites/canalplus-reunion.com/canalplus-reunion.com.test.js index 52772577..c6b2cb39 100644 --- a/sites/canalplus-reunion.com/canalplus-reunion.com.test.js +++ b/sites/canalplus-reunion.com/canalplus-reunion.com.test.js @@ -1,4 +1,4 @@ -// npx epg-grabber --config=sites/canalplus-reunion.com/canalplus-reunion.com.config.js --channels=sites/canalplus-reunion.com/canalplus-reunion.com.channels.xml --output=guide.xml --days=2 +// npm run grab -- --site=canalplus-reunion.com const { parser, url } = require('./canalplus-reunion.com.config.js') const axios = require('axios') @@ -149,7 +149,8 @@ it('can parse response', done => { it('can handle empty guide', done => { parser({ - content: `{"currentPage":{"displayTemplate":"error","BOName":"Page introuvable"},"title":"Page introuvable","text":"La page que vous demandez est introuvable. Si le problème persiste, vous pouvez contacter l'assistance de CANAL+/CANALSAT.","code":404}` + content: + '{"currentPage":{"displayTemplate":"error","BOName":"Page introuvable"},"title":"Page introuvable","text":"La page que vous demandez est introuvable. Si le problème persiste, vous pouvez contacter l\'assistance de CANAL+/CANALSAT.","code":404}' }) .then(result => { expect(result).toMatchObject([]) diff --git a/sites/canalplus.com/canalplus.com.channels.xml b/sites/canalplus.com/canalplus.com.channels.xml index f704a374..45e12803 100644 --- a/sites/canalplus.com/canalplus.com.channels.xml +++ b/sites/canalplus.com/canalplus.com.channels.xml @@ -1,326 +1,324 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - AL JAZEERA ENG - BBC WORLD NEWS - CNN INT. - FRANCE 24 ENG - NHK WORLD-JAPAN - 2STV - 6TER - AB1 - ACTION - AL JAZEERA ENG - ALTICE STUDIO - ANIMAUX - ARIRANG TV - ARTE - ASTROCENTER TV - AUTOMOTO LA CHAINE - BEIN SPORTS 1 - BEIN SPORTS 2 - BEIN SPORTS 3 - BEIN SPORTS MAX 10 - BEIN SPORTS MAX 4 - BEIN SPORTS MAX 5 - BEIN SPORTS MAX 6 - BEIN SPORTS MAX 7 - BEIN SPORTS MAX 8 - BEIN SPORTS MAX 9 - BET - BFM BUSINESS - BFM TV - BLOOMBERG TV - BLUE ZOOM - BOING - BOOMERANG - BSMART TV - C8 - CANAL ALPHA NE - CANAL J - CANAL+CINEMA - CANAL+DOCS - CANAL+FOOT - CANAL+FORMULA1 - CANAL+ - CANAL+GRAND ECRAN - CANAL+KIDS - CANAL+MOTOGP - CANAL+PREMIER LEAGUE - CANAL+SERIES - CANAL+ SPORT 2 (CH) - CANAL+SPORT360 - CANAL+SPORT - CANAL+TOP14 - CARTOON NETWORK - CHASSE ET PECHE - CHERIE 25 - CINE+ CLASSIC - CINE+ CLUB - CINE+ EMOTION - CINE+ FAMIZ - CINE+ FRISSON - CINE+ PREMIER - CLIQUE TV - CNBC - CNEWS - COLMAX TV - COMEDIE+ - COMEDY CENTRAL - CSTAR - CSTAR HITS FRANCE - ARD DAS ERSTE - DISNEY CHANNEL - DISNEY CHANNEL+1 - DISNEY JUNIOR - DORA TV - DORCEL TV - DORCEL XXX - EQUIDIA - EURONEWS - EUROSPORT 1 - EUROSPORT 2 - EUROSPORT 3 - EUROSPORT 360 1 - EUROSPORT 360 2 - EUROSPORT 360 3 - EUROSPORT 360 4 - EUROSPORT 360 5 - EUROSPORT 360 6 - EUROSPORT 360 7 - EUROSPORT 360 8 - EUROSPORT 4 - EUROSPORT 5 - EUROSPORT 6 - EUROSPORT 7 - EUROSPORT 8 - EUROSPORT 9 - FOOT+ 24/24 - FRANCE 2 - FRANCE 24 ENG - FRANCE 24 - FRANCE 3 - F3 ALPES - F3 ALSACE - F3 AQUITAINE - F3 AUVERGNE - F3 BNORMANDIE - F3 BOURGOGNE - F3 BRETAGNE - F3 CENTRE - F3 CHAMP ARDENNE - F3 CORSEVIASTELLA - F3 COTE D'AZUR - F3 FRANCHE COMTE - F3 HNORMANDIE - F3 LANGUEDOCROU - F3 LIMOUSIN - F3 LORRAINE - F3 MIDI PYRENEES - F3 NORD PDC - F3 NOUVELLE AQUITAINE - F3 PARIS IDF - F3 PAYS DE LA LOIRE - F3 PICARDIE - F3 POITOUCHAR - F3 PROV ALPES - F3 RHONE ALPES - FRANCE 4 - FRANCE 5 - FRANCEINFO: - GAME ONE - GOLF+ - GULLI - HISTOIRE TV - I24 NEWS - INFOSPORT+ - JACQUIE & MICHEL TV - J-ONE - LA CHAINE METEO - LA TELE - LCI - LCP - LEMAN BLEU - L'EQUIPE - LFM TV - M6 - M6 MUSIC - MANGAS - MAN X - MCM - MELODY - MEZZO - MEZZO LIVE - MGG TV - MTV - MTV HITS - MULTISPORTS 1 - MULTISPORTS 2 - MULTISPORTS 3 - MULTISPORTS 4 - MULTISPORTS 5 - MULTISPORTS 6 - MUSEUM - MY ZEN TV - NATIONAL GEO - NATIONAL GEOGRAPHIC WILD - NHK WORLD-JAPAN - NICKELODEON - NICKELODEON JUNIOR - NICKELODEON TEEN - NOLLYWOOD TV - NON STOP PEOPLE - NOVELAS TV - NRJ 12 - NRJ HITS - OCS CHOC - OCS CITY - OCS GEANTS - OCS MAX - OLYMPIA TV - ONE TV - ORF 1 - PARAMOUNT CHANNEL - PARIS PREMIERE - PENTHOUSE BLACK - PENTHOUSE - PINK X - PIWI+ - PLANETE+ - PLANETE+AVENTURE - PLANETE+CRIME - POLAR+ - RAI UNO - RFM TV - RMC DECOUVERTE - RMC SPORT 1 - RMC SPORT 2 - RMC SPORT 3 - RMC SPORT 4 - RMC SPORT LIVE 10 - RMC SPORT LIVE 11 - RMC SPORT LIVE 12 - RMC SPORT LIVE 13 - RMC SPORT LIVE 14 - RMC SPORT LIVE 5 - RMC SPORT LIVE 6 - RMC SPORT LIVE 7 - RMC SPORT LIVE 8 - RMC SPORT LIVE 9 - RMC STORY - ROUGE TV - RT FRANCE - RTL9 - SCIENCE ET VIE TV - SEASONS - SERIE CLUB - SRF 1 - CLASSICA - DJAZZ - TCM CINEMA - TELEBIELINGUE - TELETOON+ - TELETOON+1 - TEVA - TF1 - TF1 SERIES FILMS - TFX - TIJI - TMC - TOONAMI - TOUTE L'HISTOIRE - TRACE AFRICA - TRACE LATINA - TRACE URBAN - TV5 MONDE - TV BREIZH - USHUAIA TV - VICE TV - VIXEN - W9 - WARNER TV - XXL - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AL JAZEERA ENG + BBC WORLD NEWS + CNN INT. + FRANCE 24 ENG + NHK WORLD-JAPAN + 2STV + 6TER + AB1 + ACTION + AL JAZEERA ENG + ALTICE STUDIO + ANIMAUX + ARIRANG TV + ARTE + ASTROCENTER TV + AUTOMOTO LA CHAINE + BEIN SPORTS 1 + BEIN SPORTS 2 + BEIN SPORTS 3 + BEIN SPORTS MAX 10 + BEIN SPORTS MAX 4 + BEIN SPORTS MAX 5 + BEIN SPORTS MAX 6 + BEIN SPORTS MAX 7 + BEIN SPORTS MAX 8 + BEIN SPORTS MAX 9 + BET + BFM BUSINESS + BFM TV + BLOOMBERG TV + BLUE ZOOM + BOING + BOOMERANG + BSMART TV + C8 + CANAL ALPHA NE + CANAL J + CANAL+CINEMA + CANAL+DOCS + CANAL+FOOT + CANAL+FORMULA1 + CANAL+ + CANAL+GRAND ECRAN + CANAL+KIDS + CANAL+MOTOGP + CANAL+PREMIER LEAGUE + CANAL+SERIES + CANAL+ SPORT 2 (CH) + CANAL+SPORT360 + CANAL+SPORT + CANAL+TOP14 + CARTOON NETWORK + CHASSE ET PECHE + CHERIE 25 + CINE+ CLASSIC + CINE+ CLUB + CINE+ EMOTION + CINE+ FAMIZ + CINE+ FRISSON + CINE+ PREMIER + CLIQUE TV + CNBC + CNEWS + COLMAX TV + COMEDIE+ + COMEDY CENTRAL + CSTAR + CSTAR HITS FRANCE + ARD DAS ERSTE + DISNEY CHANNEL + DISNEY CHANNEL+1 + DISNEY JUNIOR + DORA TV + DORCEL TV + DORCEL XXX + EQUIDIA + EURONEWS + EUROSPORT 1 + EUROSPORT 2 + EUROSPORT 3 + EUROSPORT 360 1 + EUROSPORT 360 2 + EUROSPORT 360 3 + EUROSPORT 360 4 + EUROSPORT 360 5 + EUROSPORT 360 6 + EUROSPORT 360 7 + EUROSPORT 360 8 + EUROSPORT 4 + EUROSPORT 5 + EUROSPORT 6 + EUROSPORT 7 + EUROSPORT 8 + EUROSPORT 9 + FOOT+ 24/24 + FRANCE 2 + FRANCE 24 ENG + FRANCE 24 + FRANCE 3 + F3 ALPES + F3 ALSACE + F3 AQUITAINE + F3 AUVERGNE + F3 BNORMANDIE + F3 BOURGOGNE + F3 BRETAGNE + F3 CENTRE + F3 CHAMP ARDENNE + F3 CORSEVIASTELLA + F3 COTE D'AZUR + F3 FRANCHE COMTE + F3 HNORMANDIE + F3 LANGUEDOCROU + F3 LIMOUSIN + F3 LORRAINE + F3 MIDI PYRENEES + F3 NORD PDC + F3 NOUVELLE AQUITAINE + F3 PARIS IDF + F3 PAYS DE LA LOIRE + F3 PICARDIE + F3 POITOUCHAR + F3 PROV ALPES + F3 RHONE ALPES + FRANCE 4 + FRANCE 5 + FRANCEINFO: + GAME ONE + GOLF+ + GULLI + HISTOIRE TV + I24 NEWS + INFOSPORT+ + JACQUIE & MICHEL TV + J-ONE + LA CHAINE METEO + LA TELE + LCI + LCP + LEMAN BLEU + L'EQUIPE + LFM TV + M6 + M6 MUSIC + MANGAS + MAN X + MCM + MELODY + MEZZO + MEZZO LIVE + MGG TV + MTV + MTV HITS + MULTISPORTS 1 + MULTISPORTS 2 + MULTISPORTS 3 + MULTISPORTS 4 + MULTISPORTS 5 + MULTISPORTS 6 + MUSEUM + MY ZEN TV + NATIONAL GEO + NATIONAL GEOGRAPHIC WILD + NHK WORLD-JAPAN + NICKELODEON + NICKELODEON JUNIOR + NICKELODEON TEEN + NOLLYWOOD TV + NON STOP PEOPLE + NOVELAS TV + NRJ 12 + NRJ HITS + OCS CHOC + OCS CITY + OCS GEANTS + OCS MAX + OLYMPIA TV + ONE TV + ORF 1 + PARAMOUNT CHANNEL + PARIS PREMIERE + PENTHOUSE BLACK + PENTHOUSE + PINK X + PIWI+ + PLANETE+ + PLANETE+AVENTURE + PLANETE+CRIME + POLAR+ + RAI UNO + RFM TV + RMC DECOUVERTE + RMC SPORT 1 + RMC SPORT 2 + RMC SPORT 3 + RMC SPORT 4 + RMC SPORT LIVE 10 + RMC SPORT LIVE 11 + RMC SPORT LIVE 12 + RMC SPORT LIVE 13 + RMC SPORT LIVE 14 + RMC SPORT LIVE 5 + RMC SPORT LIVE 6 + RMC SPORT LIVE 7 + RMC SPORT LIVE 8 + RMC SPORT LIVE 9 + RMC STORY + ROUGE TV + RT FRANCE + RTL9 + SCIENCE ET VIE TV + SEASONS + SERIE CLUB + SRF 1 + CLASSICA + DJAZZ + TCM CINEMA + TELEBIELINGUE + TELETOON+ + TELETOON+1 + TEVA + TF1 + TF1 SERIES FILMS + TFX + TIJI + TMC + TOONAMI + TOUTE L'HISTOIRE + TRACE AFRICA + TRACE LATINA + TRACE URBAN + TV5 MONDE + TV BREIZH + USHUAIA TV + VICE TV + VIXEN + W9 + WARNER TV + XXL + diff --git a/sites/canalplus.com/canalplus.com.config.js b/sites/canalplus.com/canalplus.com.config.js index 0b38a6ef..1d719e26 100644 --- a/sites/canalplus.com/canalplus.com.config.js +++ b/sites/canalplus.com/canalplus.com.config.js @@ -66,7 +66,6 @@ module.exports = { gm: 'https://secure-webtv-static.canal-plus.com/metadata/cpafr/gm/all/v2.2/globalchannels.json', gn: 'https://secure-webtv-static.canal-plus.com/metadata/cpafr/gn/all/v2.2/globalchannels.json', gp: 'https://secure-webtv-static.canal-plus.com/metadata/cpafr/gp/all/v2.2/globalchannels.json', - gp: 'https://secure-webtv-static.canal-plus.com/metadata/cpant/gp/all/v2.2/globalchannels.json', gw: 'https://secure-webtv-static.canal-plus.com/metadata/cpafr/gw/all/v2.2/globalchannels.json', mf: 'https://secure-webtv-static.canal-plus.com/metadata/cpant/mf/all/v2.2/globalchannels.json', mg: 'https://secure-webtv-static.canal-plus.com/metadata/cpafr/mg/all/v2.2/globalchannels.json', diff --git a/sites/canalplus.com/canalplus.com.test.js b/sites/canalplus.com/canalplus.com.test.js index b6c35b71..7b905e5b 100644 --- a/sites/canalplus.com/canalplus.com.test.js +++ b/sites/canalplus.com/canalplus.com.test.js @@ -1,5 +1,5 @@ // npm run channels:parse -- --config=./sites/canalplus.com/canalplus.com.config.js --output=./sites/canalplus.com/canalplus.com.channels.xml -// npx epg-grabber --config=sites/canalplus.com/canalplus.com.config.js --channels=sites/canalplus.com/canalplus.com.channels.xml --output=guide.xml +// npm run grab -- --site=canalplus.com const { parser, url } = require('./canalplus.com.config.js') const fs = require('fs') @@ -97,7 +97,8 @@ it('can parse response', done => { start: '2023-01-12T06:28:00.000Z', stop: '2023-01-12T12:06:00.000Z', title: 'Le cercle', - description: `Tant qu'il y aura du cinéma, LE CERCLE sera là. C'est la seule émission télévisée de débats critiques 100% consacrée au cinéma et elle rentre dans sa 18e saison. Chaque semaine, elle offre des joutes enflammées, joyeuses et sans condescendance, sur les films à l'affiche ; et invite avec \"Le questionnaire du CERCLE\" les réalisatrices et réalisateurs à venir partager leur passion cinéphile.`, + description: + "Tant qu'il y aura du cinéma, LE CERCLE sera là. C'est la seule émission télévisée de débats critiques 100% consacrée au cinéma et elle rentre dans sa 18e saison. Chaque semaine, elle offre des joutes enflammées, joyeuses et sans condescendance, sur les films à l'affiche ; et invite avec \"Le questionnaire du CERCLE\" les réalisatrices et réalisateurs à venir partager leur passion cinéphile.", icon: 'https://thumb.canalplus.pro/http/unsafe/{resolutionXY}/filters:quality({imageQualityPercentage})/img-hapi.canalplus.pro:80/ServiceImage/ImageID/107297573', presenter: ['Lily Bloom'], rating: { @@ -109,7 +110,8 @@ it('can parse response', done => { start: '2023-01-12T12:06:00.000Z', stop: '2023-01-12T13:06:00.000Z', title: 'Illusions perdues', - description: `Pendant la Restauration, Lucien de Rubempré, jeune provincial d'Angoulême, se rêve poète. Il débarque à Paris en quête de gloire. Il a le soutien de Louise de Bargeton, une aristocrate qui croit en son talent. Pour gagner sa vie, Lucien trouve un emploi dans le journal dirigé par le peu scrupuleux Etienne Lousteau...`, + description: + "Pendant la Restauration, Lucien de Rubempré, jeune provincial d'Angoulême, se rêve poète. Il débarque à Paris en quête de gloire. Il a le soutien de Louise de Bargeton, une aristocrate qui croit en son talent. Pour gagner sa vie, Lucien trouve un emploi dans le journal dirigé par le peu scrupuleux Etienne Lousteau...", icon: 'https://thumb.canalplus.pro/http/unsafe/{resolutionXY}/filters:quality({imageQualityPercentage})/img-hapi.canalplus.pro:80/ServiceImage/ImageID/107356485', director: ['Xavier Giannoli'], actors: [ diff --git a/sites/cgates.lt/cgates.lt.channels.xml b/sites/cgates.lt/cgates.lt.channels.xml index 1200dd34..663bf1a2 100644 --- a/sites/cgates.lt/cgates.lt.channels.xml +++ b/sites/cgates.lt/cgates.lt.channels.xml @@ -1,124 +1,122 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Baby TV - BBC World News - Bloomberg Television - CBS Reality - CNBC Europe - CNN International - Discovery Channel HD - DocuBox HD - Duo 3 HD - Duo 6 HD - Epic Drama HD - Eurochannel - Euronews RU - Extreme Sports - Fashion TV - Fast&Fun Box HD - Fight Sports HD - FilmBox ArtHouse - FilmZone - France 24 - Game Toon HD - Jim Jam - KidZone Mini HD - KidZone TV - Luxe.TV HD - Mezzo - MTV 00s - MTV Hits - Playboy TV - Setanta Sports 1 HD - Smartzone HD - TV 1000 Action - TV 1000 - TV 1000 World Kino - TV3 Sport HD - TV3 Sport 2 HD - TV3 Sport Open HD - Vivid Touch - 1+1 - 1+2 - 2TV - 36.6 TV - Arirang TV - Balticum Auksinis - Balticum Platinum HD - Balticum TV - Blue Hustler - BTV HD - Nastojashcheje Vremya - Dacha - Delfi TV HD - Kanal 7 - Dzūkijos TV - Film UA Drama - FilmZone+ HD - TV3 Film HD - Gulli Girl - Info TV HD - Inter+ - Kus-Kus - Lietuvos ryto TV HD - LNK HD - LRT Lituanica - LRT Plius HD - LRT Televizija HD - Marijampolės TV - Šiaulių televizija - Sport 1 HD - Star Cinema - Star Family - Tiji - TV1 HD - TV3 HD - TV3 Plus HD - TV6 HD - TV8 HD - Bolt - TVP Info - TVP Polonia - ViP Comedy - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Baby TV + BBC World News + Bloomberg Television + CBS Reality + CNBC Europe + CNN International + Discovery Channel HD + DocuBox HD + Duo 3 HD + Duo 6 HD + Epic Drama HD + Eurochannel + Euronews RU + Extreme Sports + Fashion TV + Fast&Fun Box HD + Fight Sports HD + FilmBox ArtHouse + FilmZone + France 24 + Game Toon HD + Jim Jam + KidZone Mini HD + KidZone TV + Luxe.TV HD + Mezzo + MTV 00s + MTV Hits + Playboy TV + Setanta Sports 1 HD + Smartzone HD + TV 1000 Action + TV 1000 + TV 1000 World Kino + TV3 Sport HD + TV3 Sport 2 HD + TV3 Sport Open HD + Vivid Touch + 1+1 + 1+2 + 2TV + 36.6 TV + Arirang TV + Balticum Auksinis + Balticum Platinum HD + Balticum TV + Blue Hustler + BTV HD + Nastojashcheje Vremya + Dacha + Delfi TV HD + Kanal 7 + Dzūkijos TV + Film UA Drama + FilmZone+ HD + TV3 Film HD + Gulli Girl + Info TV HD + Inter+ + Kus-Kus + Lietuvos ryto TV HD + LNK HD + LRT Lituanica + LRT Plius HD + LRT Televizija HD + Marijampolės TV + Šiaulių televizija + Sport 1 HD + Star Cinema + Star Family + Tiji + TV1 HD + TV3 HD + TV3 Plus HD + TV6 HD + TV8 HD + Bolt + TVP Info + TVP Polonia + ViP Comedy + diff --git a/sites/cgates.lt/cgates.lt.config.js b/sites/cgates.lt/cgates.lt.config.js index 6251a3cc..efdc3ca2 100644 --- a/sites/cgates.lt/cgates.lt.config.js +++ b/sites/cgates.lt/cgates.lt.config.js @@ -42,7 +42,7 @@ module.exports = { }, async channels() { let html = await axios - .get(`https://www.cgates.lt/televizija/tv-programa-savaitei/`) + .get('https://www.cgates.lt/televizija/tv-programa-savaitei/') .then(r => r.data) .catch(console.log) let $ = cheerio.load(html) @@ -51,7 +51,7 @@ module.exports = { return items.map(item => { const name = $(item).find('h6').text().trim() const link = $(item).find('a').attr('href') - const [_, site_id] = link.match(/\/tv-kanalai\/(.*)\//) || [null, null] + const [, site_id] = link.match(/\/tv-kanalai\/(.*)\//) || [null, null] return { lang: 'lt', diff --git a/sites/cgates.lt/cgates.lt.test.js b/sites/cgates.lt/cgates.lt.test.js index 4a0390b1..ac1abbec 100644 --- a/sites/cgates.lt/cgates.lt.test.js +++ b/sites/cgates.lt/cgates.lt.test.js @@ -1,5 +1,5 @@ // npm run channels:parse -- --config=./sites/cgates.lt/cgates.lt.config.js --output=./sites/cgates.lt/cgates.lt.channels.xml -// npx epg-grabber --config=sites/cgates.lt/cgates.lt.config.js --channels=sites/cgates.lt/cgates.lt.channels.xml --output=guide.xml --days=2 +// npm run grab -- --site=cgates.lt const { parser, url } = require('./cgates.lt.config.js') const fs = require('fs') diff --git a/sites/chaines-tv.orange.fr/chaines-tv.orange.fr.channels.xml b/sites/chaines-tv.orange.fr/chaines-tv.orange.fr.channels.xml index 81c009e2..74b4e4ee 100644 --- a/sites/chaines-tv.orange.fr/chaines-tv.orange.fr.channels.xml +++ b/sites/chaines-tv.orange.fr/chaines-tv.orange.fr.channels.xml @@ -1,199 +1,197 @@ - - - 01 TV - 2M Monde - 3sat - 6ter - AB 1 - Action - Aljazeera English - Animaux - A+ Kids TV - ARTE Français - Automoto la chaîne - BBC Entertainment Europe - BBC World News Europe - BeIn Sports 1 France - BeIn Sports 2 France - BeIn Sports 3 France - BeIn Sports Max 4 France - BeIn Sports Max 5 France - BeIn Sports Max 6 France - BeIn Sports Max 7 France - BeIn Sports Max 8 France - BeIn Sports Max 9 France - BeIn Sports Max 10 France - BET France - BFM Business - BFM TV - Bloomberg TV Europe - Boing France - Boomerang France - Boomerang France +1 - C8 - Canal J - Canal + Cinéma France - Canal + Décalé - Canal + Docs - Canal + France - Canal + Grand Ecran - Canal + Kids - Canal + Séries - Canal + Sport - Canal Q - Cartoon Network France - Chasse & Pêche - Chérie 25 - Cine + Classic - Cine + Club - Cine + Émotion - Cine + Famiz - Cine + Frisson - Cine + Premier - Clique TV - Clubbing TV - CNBC Europe - C News - CNN International Europe - Comédie + - Comedy Central France - Crime District - C Star - Das Erste - Demain TV - Disney Channel France - Disney Channel France +1 - Disney Junior France - DW English - Equidia - ES1 - Eurochannel - EuroNews Français - FashionTV Europe - France 2 - France 3 - France 3 Alpes - France 3 Alsace - France 3 Aquitaine - France 3 Auvergne - France 3 Bourgogne - France 3 Bretagne - France 3 Centre-Val de Loire - France 3 Champagne-Ardenne - France 3 Corse Via Stella - France 3 Côte d'Azur - France 3 Franche-Comté - France 3 Languedoc-Roussillon - France 3 Limousin - France 3 Lorraine - France 3 Midi-Pyrénées - France 3 Nord Pas-de-Calais - France 3 Paris Ile-de-France - France 3 Pays de la Loire - France 3 Picardie - France 3 Poitou-Charentes - France 3 Provence-Alpes - France 3 Rhône-Alpes - France 4 - France 5 - France 24 English - France 24 Français - Franceinfo: - Game One - Game One +1 - Golf Channel France - Gulli - Histoire TV - I24 News Français - J-One - KTO - LCI - LCP Assemblée Nationale - LCP Public Sénat - L'Équipe - Lucky Jack.tv - Luxe TV - M6 - M6 Music - Maison & Travaux TV - Mangas - MCM France - Melody - Melody d'Afrique - Mezzo - Mezzo Live HD - MTV France - MTV Hits France - Museum - MyZen TV - National Geographic France - National Geographic Wild France - NHK World Japan - Nickelodeon France - Nickelodeon France +1 - Nickelodeon Junior France - Nickelodeon Teen - Nitro Deutschland - Nollywood TV - Novelas TV - NRJ 12 - NRJ Hits - OCS choc - OCS City - OCS geants - OCS max - Olympia TV - One - Paramount Channel Décalé - Paramount Channel France - Paris Première - Piwi + - Planète + - Planète + A&E - Planète + CI - Polar + - ProSieben Deutschland - Rai 1 - Rai 2 - Rai 3 - Rai News 24 - RMC Découverte - RMC Story - RTL 9 - RTL Zwei Deutschland - RTP Internacional Europa - Science & Vie TV - Série Club - Sport en France - Stingray Classica - Sunu Yeuf - Super RTL Deutschland - TCM Cinéma - TéléToon + - TéléToon + 1 - Téva - TF 1 - TF 1 +1 - TF 1 Séries Films - TFX - The Israeli Network - Tiji - TMC - TMC +1 - Toonami France - Toute l'Histoire - TV5Monde France Belgique Suisse - TV Breizh - TVE Internacional Europa - TV Pitchoun - Ultra Nature - Ushuaïa TV - Voxafrica Afrique - Vox Deutschland - W9 - Warner TV France - ZDF - ZDF Neo - - + + 01 TV + 2M Monde + 3sat + 6ter + AB 1 + Action + Aljazeera English + Animaux + A+ Kids TV + ARTE Français + Automoto la chaîne + BBC Entertainment Europe + BBC World News Europe + BeIn Sports 1 France + BeIn Sports 2 France + BeIn Sports 3 France + BeIn Sports Max 10 France + BeIn Sports Max 4 France + BeIn Sports Max 5 France + BeIn Sports Max 6 France + BeIn Sports Max 7 France + BeIn Sports Max 8 France + BeIn Sports Max 9 France + BET France + BFM Business + BFM TV + Bloomberg TV Europe + Boing France + Boomerang France + Boomerang France +1 + C8 + Canal J + Canal + Cinéma France + Canal + Décalé + Canal + Docs + Canal + France + Canal + Grand Ecran + Canal + Kids + Canal + Séries + Canal + Sport + Canal Q + Cartoon Network France + Chasse & Pêche + Chérie 25 + Cine + Classic + Cine + Club + Cine + Émotion + Cine + Famiz + Cine + Frisson + Cine + Premier + Clique TV + Clubbing TV + CNBC Europe + C News + CNN International Europe + Comédie + + Comedy Central France + Crime District + C Star + Das Erste + Demain TV + Disney Channel France + Disney Channel France +1 + Disney Junior France + DW English + Equidia + Eurochannel + EuroNews Français + FashionTV Europe + France 2 + France 24 English + France 24 Français + France 3 + France 3 Alpes + France 3 Alsace + France 3 Aquitaine + France 3 Auvergne + France 3 Bourgogne + France 3 Bretagne + France 3 Centre-Val de Loire + France 3 Champagne-Ardenne + France 3 Corse Via Stella + France 3 Côte d'Azur + France 3 Franche-Comté + France 3 Languedoc-Roussillon + France 3 Limousin + France 3 Lorraine + France 3 Midi-Pyrénées + France 3 Nord Pas-de-Calais + France 3 Paris Ile-de-France + France 3 Pays de la Loire + France 3 Picardie + France 3 Poitou-Charentes + France 3 Provence-Alpes + France 3 Rhône-Alpes + France 4 + France 5 + Franceinfo: + Game One + Game One +1 + Golf Channel France + Gulli + Histoire TV + I24 News Français + J-One + KTO + LCI + LCP Assemblée Nationale + L'Équipe + Lucky Jack.tv + Luxe TV + M6 + M6 Music + Maison & Travaux TV + Mangas + MCM France + Melody + Melody d'Afrique + Mezzo + Mezzo Live HD + ES1 + MTV France + MTV Hits France + Museum + MyZen TV + National Geographic France + National Geographic Wild France + NHK World Japan + Nickelodeon France + Nickelodeon France +1 + Nickelodeon Junior France + Nickelodeon Teen + Nitro Deutschland + Nollywood TV + Novelas TV + NRJ 12 + NRJ Hits + OCS choc + OCS City + OCS geants + OCS max + Olympia TV + One + Paramount Channel France + Paramount Channel Décalé + Paris Première + Piwi + + Planète + + Planète + A&E + Planète + CI + Polar + + ProSieben Deutschland + LCP Public Sénat + Rai 1 + Rai 2 + Rai 3 + Rai News 24 + RMC Découverte + RMC Story + RTL 9 + RTL Zwei Deutschland + RTP Internacional Europa + Science & Vie TV + Série Club + Sport en France + Stingray Classica + Sunu Yeuf + Super RTL Deutschland + TCM Cinéma + TéléToon + + TéléToon + 1 + Téva + TF 1 + TF 1 +1 + TF 1 Séries Films + TFX + The Israeli Network + Tiji + TMC + TMC +1 + Toonami France + Toute l'Histoire + TV5Monde France Belgique Suisse + TV Breizh + TVE Internacional Europa + TV Pitchoun + Ultra Nature + Ushuaïa TV + Voxafrica Afrique + Vox Deutschland + W9 + Warner TV France + ZDF + ZDF Neo + diff --git a/sites/chaines-tv.orange.fr/chaines-tv.orange.fr.test.js b/sites/chaines-tv.orange.fr/chaines-tv.orange.fr.test.js index dff67824..ff1ec431 100644 --- a/sites/chaines-tv.orange.fr/chaines-tv.orange.fr.test.js +++ b/sites/chaines-tv.orange.fr/chaines-tv.orange.fr.test.js @@ -1,6 +1,6 @@ -// npx epg-grabber --config=sites/chaines-tv.orange.fr/chaines-tv.orange.fr.config.js --channels=sites/chaines-tv.orange.fr/chaines-tv.orange.fr.channels.xml --output=guide.xml --days=2 +// npm run grab -- --site=chaines-tv.orange.fr -const { parser, url, request } = require('./chaines-tv.orange.fr.config.js') +const { parser, url } = require('./chaines-tv.orange.fr.config.js') const dayjs = require('dayjs') const utc = require('dayjs/plugin/utc') const customParseFormat = require('dayjs/plugin/customParseFormat') @@ -12,7 +12,8 @@ const channel = { site_id: '192', xmltv_id: 'TF1.fr' } -const content = `{"192":[{"id":1635062528017,"programType":"EPISODE","title":"Tête de liste","channelId":"192","channelZappingNumber":11,"covers":[{"format":"RATIO_16_9","url":"https://proxymedia.woopic.com/340/p/169_EMI_9697669.jpg"},{"format":"RATIO_4_3","url":"https://proxymedia.woopic.com/340/p/43_EMI_9697669.jpg"}],"diffusionDate":1636328100,"duration":2700,"csa":2,"synopsis":"Un tueur en série prend un plaisir pervers à prévenir les autorités de Tallahassee avant chaque nouveau meurtre. Rossi apprend le décès d'un de ses vieux amis.","languageVersion":"VM","hearingImpaired":true,"audioDescription":false,"season":{"number":10,"episodesCount":23,"serie":{"title":"Esprits criminels"}},"episodeNumber":12,"definition":"SD","links":[{"rel":"SELF","href":"https://rp-live.orange.fr/live-webapp/v3/applications/STB4PC/programs/1635062528017"}],"dayPart":"OTHER","catchupId":null,"genre":"Série","genreDetailed":"Série Suspense"}]}` +const content = + '{"192":[{"id":1635062528017,"programType":"EPISODE","title":"Tête de liste","channelId":"192","channelZappingNumber":11,"covers":[{"format":"RATIO_16_9","url":"https://proxymedia.woopic.com/340/p/169_EMI_9697669.jpg"},{"format":"RATIO_4_3","url":"https://proxymedia.woopic.com/340/p/43_EMI_9697669.jpg"}],"diffusionDate":1636328100,"duration":2700,"csa":2,"synopsis":"Un tueur en série prend un plaisir pervers à prévenir les autorités de Tallahassee avant chaque nouveau meurtre. Rossi apprend le décès d\'un de ses vieux amis.","languageVersion":"VM","hearingImpaired":true,"audioDescription":false,"season":{"number":10,"episodesCount":23,"serie":{"title":"Esprits criminels"}},"episodeNumber":12,"definition":"SD","links":[{"rel":"SELF","href":"https://rp-live.orange.fr/live-webapp/v3/applications/STB4PC/programs/1635062528017"}],"dayPart":"OTHER","catchupId":null,"genre":"Série","genreDetailed":"Série Suspense"}]}' it('can generate valid url', () => { const result = url({ channel, date }) @@ -28,7 +29,8 @@ it('can parse response', () => { start: '2021-11-07T23:35:00.000Z', stop: '2021-11-08T00:20:00.000Z', title: 'Tête de liste', - description: `Un tueur en série prend un plaisir pervers à prévenir les autorités de Tallahassee avant chaque nouveau meurtre. Rossi apprend le décès d'un de ses vieux amis.`, + description: + "Un tueur en série prend un plaisir pervers à prévenir les autorités de Tallahassee avant chaque nouveau meurtre. Rossi apprend le décès d'un de ses vieux amis.", category: 'Série Suspense', icon: 'https://proxymedia.woopic.com/340/p/169_EMI_9697669.jpg' } @@ -39,7 +41,8 @@ it('can handle empty guide', () => { const result = parser({ date, channel, - content: `{"code":60,"message":"Resource not found","param":{},"description":"L'URI demandé ou la ressource demandée n'existe pas.","stackTrace":null}` + content: + '{"code":60,"message":"Resource not found","param":{},"description":"L\'URI demandé ou la ressource demandée n\'existe pas.","stackTrace":null}' }) expect(result).toMatchObject([]) }) diff --git a/sites/clickthecity.com/clickthecity.com.channels.xml b/sites/clickthecity.com/clickthecity.com.channels.xml index f87b3679..2c355954 100644 --- a/sites/clickthecity.com/clickthecity.com.channels.xml +++ b/sites/clickthecity.com/clickthecity.com.channels.xml @@ -1,38 +1,36 @@ - - - - - a2z Channel 11 - ANC - Animax - AXN - Celestial Movies Pinoy - Cinema One - Cinemax - CNN Philippines - GEM - GMA - GTV - HBO - History - IBC TV 13 - Jeepney TV - Kapamilya Channel - K-Movies Pinoy - Liga - Metro Channel - MYX - National Geographic - Net 25 - Nickelodeon - PBO - PTV - Rock Entertainment - Rock Extreme - Tagalized Movie Channel - Telenovela Channel - TV5 - VIVA Cinema - - + + + + a2z Channel 11 + ANC + Animax + AXN + Celestial Movies Pinoy + Cinema One + Cinemax + CNN Philippines + GEM + GMA + GTV + HBO + History + IBC TV 13 + Jeepney TV + Kapamilya Channel + K-Movies Pinoy + Liga + Metro Channel + MYX + National Geographic + Net 25 + Nickelodeon + PBO + PTV + Rock Entertainment + Rock Extreme + Tagalized Movie Channel + Telenovela Channel + TV5 + VIVA Cinema + diff --git a/sites/clickthecity.com/clickthecity.com.config.js b/sites/clickthecity.com/clickthecity.com.config.js index 6846fe80..917495ea 100644 --- a/sites/clickthecity.com/clickthecity.com.config.js +++ b/sites/clickthecity.com/clickthecity.com.config.js @@ -47,7 +47,7 @@ module.exports = { }, async channels() { const html = await axios - .get(`https://www.clickthecity.com/tv/channels/`) + .get('https://www.clickthecity.com/tv/channels/') .then(r => r.data) .catch(console.log) const $ = cheerio.load(html) @@ -56,7 +56,7 @@ module.exports = { return items.map(item => { const name = $(item).find('.card-body').text().trim() const url = $(item).find('a').attr('href') - const [_, site_id] = url.match(/netid=(\d+)/) || [null, null] + const [, site_id] = url.match(/netid=(\d+)/) || [null, null] return { site_id, @@ -72,7 +72,7 @@ function parseTitle($item) { function parseStart($item, date) { const url = $item('td.cPrg > a').attr('href') || '' - let [_, time] = url.match(/starttime=(\d{1,2}%3A\d{2}\+(AM|PM))/) || [null, null] + let [, time] = url.match(/starttime=(\d{1,2}%3A\d{2}\+(AM|PM))/) || [null, null] if (!time) return null time = `${date.format('YYYY-MM-DD')} ${time.replace('%3A', ':').replace('+', ' ')}` @@ -81,7 +81,7 @@ function parseStart($item, date) { function parseStop($item, date) { const url = $item('td.cPrg > a').attr('href') || '' - let [_, time] = url.match(/endtime=(\d{1,2}%3A\d{2}\+(AM|PM))/) || [null, null] + let [, time] = url.match(/endtime=(\d{1,2}%3A\d{2}\+(AM|PM))/) || [null, null] if (!time) return null time = `${date.format('YYYY-MM-DD')} ${time.replace('%3A', ':').replace('+', ' ')}` @@ -91,7 +91,7 @@ function parseStop($item, date) { function parseItems(content) { const $ = cheerio.load(content) - return $(`#tvlistings > tbody > tr`) + return $('#tvlistings > tbody > tr') .filter(function () { return $(this).find('td.cPrg').length }) diff --git a/sites/clickthecity.com/clickthecity.com.test.js b/sites/clickthecity.com/clickthecity.com.test.js index b48453ba..33ae1deb 100644 --- a/sites/clickthecity.com/clickthecity.com.test.js +++ b/sites/clickthecity.com/clickthecity.com.test.js @@ -1,5 +1,5 @@ // npm run channels:parse -- --config=./sites/clickthecity.com/clickthecity.com.config.js --output=./sites/clickthecity.com/clickthecity.com.channels.xml -// npx epg-grabber --config=sites/clickthecity.com/clickthecity.com.config.js --channels=sites/clickthecity.com/clickthecity.com.channels.xml --output=guide.xml +// npm run grab -- --site=clickthecity.com const { parser, url, request } = require('./clickthecity.com.config.js') const fs = require('fs') @@ -49,13 +49,13 @@ it('can parse response', () => { expect(results[0]).toMatchObject({ start: '2023-06-11T21:00:00.000Z', stop: '2023-06-11T22:00:00.000Z', - title: `Word Of God` + title: 'Word Of God' }) expect(results[19]).toMatchObject({ start: '2023-06-12T15:30:00.000Z', stop: '2023-06-12T16:00:00.000Z', - title: `La Suerte De Loli` + title: 'La Suerte De Loli' }) }) @@ -63,7 +63,8 @@ it('can handle empty guide', () => { const result = parser({ date, channel, - content: `` + content: + '' }) expect(result).toMatchObject([]) }) diff --git a/sites/compulms.com/compulms.com.channels.xml b/sites/compulms.com/compulms.com.channels.xml index bc308e3c..9d9e6cd3 100644 --- a/sites/compulms.com/compulms.com.channels.xml +++ b/sites/compulms.com/compulms.com.channels.xml @@ -1,9 +1,7 @@ - - - EnerGeek Animate - EnerGeek Retro - EnerGeek Radio TV - EnerGeek Fanpop - - + + EnerGeek Animate + EnerGeek Retro + EnerGeek Radio TV + EnerGeek Fanpop + diff --git a/sites/compulms.com/compulms.com.test.js b/sites/compulms.com/compulms.com.test.js index 9e79ab92..92c1fae5 100644 --- a/sites/compulms.com/compulms.com.test.js +++ b/sites/compulms.com/compulms.com.test.js @@ -1,4 +1,4 @@ -// npx epg-grabber --config=sites/compulms.com/compulms.com.config.js --channels=sites/compulms.com/compulms.com.channels.xml --output=guide.xml --days=2 +// npm run grab -- --site=compulms.com const { parser, url } = require('./compulms.com.config.js') const fs = require('fs') diff --git a/sites/comteco.com.bo/comteco.com.bo.channels.xml b/sites/comteco.com.bo/comteco.com.bo.channels.xml index d2399342..e627a5f8 100644 --- a/sites/comteco.com.bo/comteco.com.bo.channels.xml +++ b/sites/comteco.com.bo/comteco.com.bo.channels.xml @@ -1,80 +1,78 @@ - - - - - - Abya Yala TV - A&E - AMC - Animal Planet - AXN - Az Mundo - Bolivia TV - Bolivia TV 7.2 Deportes - Bolivisión - Cadena A - Canal 24 Horas - Caracol TV - Cartoon Network - Cinecanal Este - Cinemax - CNN - Cubavisión - De Película - Discovery Channel - Discovery Home & Health Latinoamérica - Discovery Kids América Latina - Disney Channel - Disney Junior España - El Gourmet - El Trece - E! - EuroNews Español - Europa Europa - EWTN - Fox Sports 2 - Fox Sports 3 - Fox Sports Latin America - FXM - FX - HBO - History - HTV - Investigation Discovery - María+Visión - Más Chic - MTV Latino Norte - Nat Geo Kids - National Geographic - Nickelodeon - Record TV - Red Uno - RTP - SBT - Space México - Star Channel - Star Life - Studio Universal - TBS - TCM - Telefe Internacional - Telemundo - Telesur - TLC - Tlnovelas - TNT - TNT Series - Tooncast - TV Chile - TV Culturas - TVE - TV Globo Internacional - TV Perú - TyC Sports - Unitel Santa Cruz - Universal TV - VH1 East - Warner Channel - - \ No newline at end of file + + + + + Abya Yala TV + A&E + AMC + Animal Planet + AXN + Az Mundo + Bolivia TV + Bolivia TV 7.2 Deportes + Bolivisión + Cadena A + Canal 24 Horas + Caracol TV + Cartoon Network + Cinecanal Este + Cinemax + CNN + Cubavisión + De Película + Discovery Channel + Discovery Home & Health Latinoamérica + Discovery Kids América Latina + Disney Channel + Disney Junior España + El Gourmet + El Trece + E! + EuroNews Español + Europa Europa + EWTN + Fox Sports 2 + Fox Sports 3 + Fox Sports Latin America + FXM + FX + HBO + History + HTV + Investigation Discovery + María+Visión + Más Chic + MTV Latino Norte + Nat Geo Kids + National Geographic + Nickelodeon + Record TV + Red Uno + RTP + SBT + Space México + Star Channel + Star Life + Studio Universal + TBS + TCM + Telefe Internacional + Telemundo + Telesur + TLC + Tlnovelas + TNT + TNT Series + Tooncast + TV Chile + TV Culturas + TVE + TV Globo Internacional + TV Perú + TyC Sports + Unitel Santa Cruz + Universal TV + VH1 East + Warner Channel + \ No newline at end of file diff --git a/sites/comteco.com.bo/comteco.com.bo.test.js b/sites/comteco.com.bo/comteco.com.bo.test.js index d8701454..c0514bf4 100644 --- a/sites/comteco.com.bo/comteco.com.bo.test.js +++ b/sites/comteco.com.bo/comteco.com.bo.test.js @@ -1,4 +1,4 @@ -// npx epg-grabber --config=sites/comteco.com.bo/comteco.com.bo.config.js --channels=sites/comteco.com.bo/comteco.com.bo.channels.xml --output=guide.xml --days=2 +// npm run grab -- --site=comteco.com.bo const { parser, url, request } = require('./comteco.com.bo.config.js') const dayjs = require('dayjs') @@ -12,7 +12,8 @@ const channel = { site_id: 'ABYA YALA', xmltv_id: 'AbyaYalaTV.bo' } -const content = ` Canal Analógico: 48 ABYA YALA 00:00:00 Abya Yala noticias - 3ra edición 01:00:00 Cierre de emisión 23:00:00 Referentes Regresar a canales ` +const content = + ' Canal Analógico: 48 ABYA YALA 00:00:00 Abya Yala noticias - 3ra edición 01:00:00 Cierre de emisión 23:00:00 Referentes Regresar a canales ' it('can generate valid url', () => { expect(url({ channel })).toBe( @@ -48,17 +49,17 @@ it('can parse response', () => { { start: '2021-11-25T04:00:00.000Z', stop: '2021-11-25T05:00:00.000Z', - title: `Abya Yala noticias - 3ra edición` + title: 'Abya Yala noticias - 3ra edición' }, { start: '2021-11-25T05:00:00.000Z', stop: '2021-11-26T03:00:00.000Z', - title: `Cierre de emisión` + title: 'Cierre de emisión' }, { start: '2021-11-26T03:00:00.000Z', stop: '2021-11-26T03:30:00.000Z', - title: `Referentes` + title: 'Referentes' } ]) }) @@ -67,7 +68,7 @@ it('can handle empty guide', () => { const result = parser({ date, channel, - content: `` + content: '' }) expect(result).toMatchObject([]) }) diff --git a/sites/cosmote.gr/cosmote.gr.channels.xml b/sites/cosmote.gr/cosmote.gr.channels.xml index 2f8c7776..eaf51292 100644 --- a/sites/cosmote.gr/cosmote.gr.channels.xml +++ b/sites/cosmote.gr/cosmote.gr.channels.xml @@ -1,90 +1,88 @@ - - - 4E - Action 24 - Aigaio TV - Alarabiya - Aljazeera - Alpha TV - Ant1 - Baby TV - BBC Earth HD - BBC World News - Bloomberg TV - Blue Hustler - Body in Balance - CBS Reality - CNBC - CNN - Cosmote Cinema 1 - Cosmote Cinema 2 - Cosmote Cinema 3 - Cosmote History - Cosmote Series - Cosmote Series Marathon - Cosmote Sport 1 - Cosmote Sport 2 - Cosmote Sport 3 - Cosmote Sport 4 - Cosmote Sport 5 - Cosmote Sport 6 - Cosmote Sport 7 - Cosmote Sport 8 - Cosmote Sport 9 - Cosmote Sport Highlights - Crime + Investigation - Disney Channel Middle East - DW - Edge Sport HD - E! HD - Ena Channel - Epsilon TV - ERT 1 - ERT 2 - ERT 3 - ERT World - EuroNews English - EuroNews - FashionTV - Fox HD - Fox Life HD - France 24 English - France 24 Français - Ginx eSports TV - Vouli TV - Hustler HD - Kriti TV - Luxe TV HD - Mad TV - Mad Viral - Makedonia TV - Mega TV HD - Mezzo Live HD - Motorvision TV HD - MTV Global - MTV Live HD - National Geographic - National Geographic Wild HD - Nautical Channel - Nea TV - One Channel - Open Beyond TV - Penthouse Gold - Private TV - RT News - Sirina TV - SKAI - Smile TV - Star Channel - Star Kentrikis Elladas - Stingray CMusic - Stingray IConcerts - Vergina TV - VH1 Europe - Viasat Explore - Viasat History - Viasat Nature - Village Cinemas HD - - + + 4E + Action 24 + Aigaio TV + Alarabiya + Aljazeera + Alpha TV + Ant1 + Baby TV + BBC Earth HD + BBC World News + Bloomberg TV + Blue Hustler + Body in Balance + CBS Reality + CNBC + CNN + Cosmote Cinema 1 + Cosmote Cinema 2 + Cosmote Cinema 3 + Cosmote History + Cosmote Series + Cosmote Series Marathon + Cosmote Sport 1 + Cosmote Sport 2 + Cosmote Sport 3 + Cosmote Sport 4 + Cosmote Sport 5 + Cosmote Sport 6 + Cosmote Sport 7 + Cosmote Sport 8 + Cosmote Sport 9 + Cosmote Sport Highlights + Crime + Investigation + Disney Channel Middle East + DW + Edge Sport HD + E! HD + Ena Channel + Epsilon TV + ERT 1 + ERT 2 + ERT 3 + ERT World + EuroNews English + EuroNews + FashionTV + Fox HD + Fox Life HD + France 24 English + France 24 Français + Ginx eSports TV + Vouli TV + Hustler HD + Kriti TV + Luxe TV HD + Mad TV + Mad Viral + Makedonia TV + Mega TV HD + Mezzo Live HD + Motorvision TV HD + MTV Global + MTV Live HD + National Geographic + National Geographic Wild HD + Nautical Channel + Nea TV + One Channel + Open Beyond TV + Penthouse Gold + Private TV + RT News + Sirina TV + SKAI + Smile TV + Star Channel + Star Kentrikis Elladas + Stingray CMusic + Stingray IConcerts + Vergina TV + VH1 Europe + Viasat Explore + Viasat History + Viasat Nature + Village Cinemas HD + diff --git a/sites/cosmote.gr/cosmote.gr.config.js b/sites/cosmote.gr/cosmote.gr.config.js index 829f2eab..29ce29c4 100644 --- a/sites/cosmote.gr/cosmote.gr.config.js +++ b/sites/cosmote.gr/cosmote.gr.config.js @@ -4,9 +4,6 @@ const { DateTime } = require('luxon') module.exports = { site: 'cosmote.gr', days: 2, - request: { - timeout: 30000 // 30 seconds - }, url: function ({ date, channel }) { return `https://www.cosmotetv.gr/portal/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' @@ -55,7 +52,7 @@ function parseCategory($item) { .end() .text() .trim() - const [_, category] = typeString.match(/\| (.*)/) || [null, null] + const [, category] = typeString.match(/\| (.*)/) || [null, null] return category } diff --git a/sites/cosmote.gr/cosmote.gr.test.js b/sites/cosmote.gr/cosmote.gr.test.js index 882d6b7a..5b818650 100644 --- a/sites/cosmote.gr/cosmote.gr.test.js +++ b/sites/cosmote.gr/cosmote.gr.test.js @@ -1,4 +1,4 @@ -// npx epg-grabber --config=sites/cosmote.gr/cosmote.gr.config.js --channels=sites/cosmote.gr/cosmote.gr.channels.xml --output=guide.xml +// npm run grab -- --site=cosmote.gr const { parser, url } = require('./cosmote.gr.config.js') const fs = require('fs') @@ -35,14 +35,14 @@ it('can parse response', () => { expect(results[0]).toMatchObject({ start: '2023-06-07T20:30:00.000Z', stop: '2023-06-07T21:45:00.000Z', - title: `Τηλεφημερίδα`, + title: 'Τηλεφημερίδα', category: 'Εκπομπή - Μαγκαζίνο' }) expect(results[30]).toMatchObject({ start: '2023-06-08T19:45:00.000Z', stop: '2023-06-08T20:30:00.000Z', - title: `Μικρό Απόδειπνο`, + title: 'Μικρό Απόδειπνο', category: 'Special' }) }) @@ -58,14 +58,14 @@ it('can parse response when the guide starting before midnight', () => { expect(results[0]).toMatchObject({ start: '2023-06-07T21:30:00.000Z', stop: '2023-06-07T22:30:00.000Z', - title: `Καλύτερα Αργά`, + title: 'Καλύτερα Αργά', category: 'Ψυχαγωγική Εκπομπή' }) expect(results[22]).toMatchObject({ start: '2023-06-08T19:00:00.000Z', stop: '2023-06-08T21:30:00.000Z', - title: `Πίσω Από Τις Γραμμές`, + title: 'Πίσω Από Τις Γραμμές', category: 'Εκπομπή - Μαγκαζίνο' }) }) @@ -73,7 +73,7 @@ it('can parse response when the guide starting before midnight', () => { it('can handle empty guide', () => { const result = parser({ date, - content: `` + content: '' }) expect(result).toMatchObject([]) }) diff --git a/sites/delta.nl/delta.nl.channels.xml b/sites/delta.nl/delta.nl.channels.xml index add393a8..5af0b1e3 100644 --- a/sites/delta.nl/delta.nl.channels.xml +++ b/sites/delta.nl/delta.nl.channels.xml @@ -1,228 +1,226 @@ - - - 100% NL TV - 192 TV - 24 Kitchen - 3sat - AAVISIE - Albrandswaard TV - Aljazeera English - Altena TV - Animal Planet Europe - ARTE Deutsch - Assen TV - AT5 - ATOS TV - Babes TV - Baby TV Europe - BBC Entertainment Europe - BBC First Nederland - BBC One - BBC Two - BBC World News Europe - Beek TV - Bloomberg TV Europe - Boomerang Central & Eastern Europe - BR6 TV - Brazzers TV Europe - BredaNu TV - Canvas - Cartoon Network Nederland - Castricum TV - - Centraal TV - CGTN - CNN International Europe - Comedy Central Extra UK - Comedy Central Nederland - Crime + Investigation UK - Das Erste - Delta TV - Den Haag TV - Discovery Channel Nederland - Discovery Science - Disney Channel Nederland - DRTV - DTV Oss & Bernheze - Dusk - Één - E! Europe - ESPN 2 Nederland - ESPN 3 Nederland - ESPN Nederland - EuroNews English - Eurosport 1 - Eurosport 2 - Extreme Sports Channel - Family 7 - FashionTV Europe - Feel Good TV - Film 1 Action - Film 1 Drama - Film 1 Family - Film 1 Premiere - FilmBox Nederland - Fox NL - France 2 - France 24 Français - France 3 - Gemeente Westland TV - GL8 - GO-TV - Gouwestad TV - History Benelux - Hofstreek TV - HOi TV - Horse & Country TV - Hustler TV Europe - Ideaal TV - Ijsselmond TV - Insight TV - Investigation Discovery Europe - JenZ - Kabel Eins Deutschland - Ketnet - KIKA - Kontakt TV - L1 TV - Lansingerland TV - Loco TV - LOE TV - LOK TV - LON TV - LOS TV - Meiden van Holland Hard - Meppel TV - Mezzo - ML5 TV - MLA TV - MTV 00s - MTV 80s - MTV Hits Europe - MTV Live HD - MTV NL - National Geographic Nederland - National Geographic Wild Europe - Nautical Channel - NDR Fernsehen Hamburg - Net 5 - NHK World Japan - NH TV - Nickelodeon - Nick Jr - NickMusic - Nicktoons - NOOS TV - NPO 1 - NPO 1 Extra - NPO 2 - NPO 2 Extra - NPO 3 - NPO Nieuws - NPO Politiek - NPO Zappelin Extra - N-TV - Omroep Brabant TV - Omroep Flevoland TV - Omroep Hulst TV - Omroep Meierijstad TV - Omroep Tilburg TV - Omroep Venlo TV - Omroep Zeeland TV - Omrop Fryslân TV - ONS - Ons West Brabant TV - OPEN Rotterdam TV - Out TV - Passie XXX - Pebble TV - Phoenix CNE - Playboy TV Europe - P&M TV - ProSieben Deutschland - Pure Babes - Radio Aalsmeer TV - Rai 1 - Regio8 TV - Regio90 TV - RN7 - Ronde Venen TV - RTBF La Une - RTL 4 - RTL 5 - RTL 7 - RTL 8 - RTL Crime Nederland - RTL Deutschland - RTL Lounge - RTL Telekids - RTL Z - RTV 1 - RTV Arnhem TV - RTV Focus TV - RTV Horizon - RTV Oost - RTV Purmerend - RTV Rijnstreek TV - RTV Scheldemond - RTV Slingeland - RTV SLOS - RTV Utrecht - RTV Veluwezoom TV - Samen1 TV - Sat. 1 Deutschland - SBS 6 - SBS 9 - Schie TV - Schlager TV - Shorts TV - Siris TV - Slam! - SLOGO TV - SLOS TV - Slotstad TV - Spike Nederland - Stingray Classica - Stingray Djazz - Stingray IConcerts - Stingray Lite TV - StreekTV - Studio Alphen TV - SWR Fernsehen Baden-Württemberg - Tholen TV - Tipik - TLC Nederland - Trace Sport Stars - Trace Urban - TRT Türk - TV 538 - TV5Monde Europe - TV Berghem - TV Drenthe - TVE Internacional Europa - TV Gelderland - TV Krimpenerwaard - TV Noord - TV Nunspeet - TV Oranje - TV Rijnmond - TV Stichtse Vecht - TV West - Twente TV - Vechtdal TV - - Vox Deutschland - WDR Fernsehen Köln - WOS - ZDF - Ziggo Sport Docu - Ziggo Sport Golf - Ziggo Sport Racing - Ziggo Sport Select - Ziggo Sport Tennis - Ziggo Sport Voetbal - ZuidWest TV - ZVT-AVS - - + + + + Das Erste + Aljazeera English + Babes TV + BBC World News Europe + Bloomberg TV Europe + Brazzers TV Europe + CGTN + CNN International Europe + EuroNews English + Extreme Sports Channel + FashionTV Europe + MTV 00s + MTV 80s + MTV Live HD + Nautical Channel + NHK World Japan + Playboy TV Europe + Shorts TV + Trace Sport Stars + Trace Urban + France 24 Français + France 3 + RTBF La Une + 100% NL TV + 192 TV + 24 Kitchen + 3sat + AAVISIE + Albrandswaard TV + Altena TV + Animal Planet Europe + ARTE Deutsch + Assen TV + AT5 + ATOS TV + Baby TV Europe + BBC Entertainment Europe + BBC First Nederland + BBC One + BBC Two + Beek TV + Boomerang Central & Eastern Europe + BR6 TV + BredaNu TV + Canvas + Cartoon Network Nederland + Castricum TV + Centraal TV + Comedy Central Extra UK + Comedy Central Nederland + Crime + Investigation UK + Delta TV + Den Haag TV + Discovery Channel Nederland + Discovery Science + Disney Channel Nederland + DRTV + DTV Oss & Bernheze + Dusk + Één + E! Europe + ESPN 2 Nederland + ESPN 3 Nederland + ESPN Nederland + Eurosport 1 + Eurosport 2 + Family 7 + Feel Good TV + Film 1 Action + Film 1 Drama + Film 1 Family + Film 1 Premiere + FilmBox Nederland + Fox NL + France 2 + Gemeente Westland TV + GL8 + GO-TV + Gouwestad TV + History Benelux + Hofstreek TV + HOi TV + Horse & Country TV + Hustler TV Europe + Ideaal TV + Ijsselmond TV + Insight TV + Investigation Discovery Europe + JenZ + Kabel Eins Deutschland + Ketnet + KIKA + Kontakt TV + L1 TV + Lansingerland TV + Loco TV + LOE TV + LOK TV + LON TV + LOS TV + Meiden van Holland Hard + Meppel TV + Mezzo + ML5 TV + MLA TV + MTV Hits Europe + MTV NL + National Geographic Nederland + National Geographic Wild Europe + NDR Fernsehen Hamburg + Net 5 + NH TV + Nickelodeon + Nick Jr + NickMusic + Nicktoons + NOOS TV + NPO 1 + NPO 1 Extra + NPO 2 + NPO 2 Extra + NPO 3 + NPO Nieuws + NPO Politiek + NPO Zappelin Extra + N-TV + Omroep Brabant TV + Omroep Flevoland TV + Omroep Hulst TV + Omroep Meierijstad TV + Ons West Brabant TV + Omroep Tilburg TV + Omroep Venlo TV + Omroep Zeeland TV + Omrop Fryslân TV + ONS + OPEN Rotterdam TV + Out TV + Passie XXX + Pebble TV + Phoenix CNE + P&M TV + ProSieben Deutschland + Pure Babes + Radio Aalsmeer TV + Rai 1 + Regio8 TV + Regio90 TV + RN7 + Ronde Venen TV + RTL 4 + RTL 5 + RTL 7 + RTL 8 + RTL Crime Nederland + RTL Deutschland + RTL Lounge + RTL Telekids + RTL Z + RTV 1 + RTV Arnhem TV + TV Drenthe + RTV Focus TV + RTV Horizon + RTV Oost + RTV Purmerend + RTV Rijnstreek TV + RTV Scheldemond + RTV Slingeland + RTV SLOS + RTV Utrecht + RTV Veluwezoom TV + Samen1 TV + Sat. 1 Deutschland + SBS 6 + SBS 9 + Schie TV + Schlager TV + Siris TV + Slam! + SLOGO TV + SLOS TV + Slotstad TV + Spike Nederland + Stingray Classica + Stingray Djazz + Stingray IConcerts + Stingray Lite TV + StreekTV + Studio Alphen TV + SWR Fernsehen Baden-Württemberg + Tholen TV + Tipik + TLC Nederland + TRT Türk + TV 538 + TV5Monde Europe + TV Berghem + TVE Internacional Europa + TV Gelderland + TV Krimpenerwaard + TV Noord + TV Nunspeet + TV Oranje + TV Rijnmond + TV Stichtse Vecht + TV West + Twente TV + Vechtdal TV + Vox Deutschland + WDR Fernsehen Köln + WOS + ZDF + Ziggo Sport Docu + Ziggo Sport Golf + Ziggo Sport Racing + Ziggo Sport Select + Ziggo Sport Tennis + Ziggo Sport Voetbal + ZuidWest TV + ZVT-AVS + diff --git a/sites/delta.nl/delta.nl.test.js b/sites/delta.nl/delta.nl.test.js index 95fe631e..c4a49af9 100644 --- a/sites/delta.nl/delta.nl.test.js +++ b/sites/delta.nl/delta.nl.test.js @@ -1,7 +1,7 @@ -// npm run channels:parse --config=./sites/delta.nl/delta.nl.config.js --output=./sites/delta.nl/delta.nl.channels.xml -// npx epg-grabber --config=sites/delta.nl/delta.nl.config.js --channels=sites/delta.nl/delta.nl.channels.xml --output=guide.xml --days=2 +// npm run channels:parse -- --config=./sites/delta.nl/delta.nl.config.js --output=./sites/delta.nl/delta.nl.channels.xml +// npm run grab -- --site=delta.nl -const { parser, url, request } = require('./delta.nl.config.js') +const { parser, url } = require('./delta.nl.config.js') const axios = require('axios') const dayjs = require('dayjs') const utc = require('dayjs/plugin/utc') @@ -27,12 +27,13 @@ it('can parse response', done => { axios.get.mockImplementation(() => Promise.resolve({ data: JSON.parse( - `{"ID":"P~945cb98e-3d19-11ec-8456-953363d7a344","seriesID":"S~d37c4626-b691-11ea-ba69-255835135f02","channelID":"1","start":1636674960,"end":1636676520,"catchupAvailableUntil":1637279760,"title":"Eigen Huis & Tuin: Lekker Leven","description":"Nederlands lifestyleprogramma uit 2022 (ook in HD) met dagelijkse inspiratie voor een lekker leven in en om het huis.\\nPresentatrice Froukje de Both, kok Hugo Kennis en een team van experts, onder wie tuinman Tom Groot, geven praktische tips op het gebied van wonen, lifestyle, tuinieren en koken. Daarmee kun je zelf direct aan de slag om je leven leuker én gezonder te maken. Afl. 15 van seizoen 4.","images":{"thumbnail":{"url":"https://cdn.gvidi.tv/img/booxmedia/b291/561946.jpg"}},"additionalInformation":{"metadataID":"M~c512c206-95e5-11ec-87d8-494f70130311","externalMetadataID":"E~RTL4-89d99356_6599_4b65_a7a0_a93f39019645"},"parentalGuidance":{"kijkwijzer":["AL"]},"restrictions":{"startoverDisabled":false,"catchupDisabled":false,"recordingDisabled":false},"isFiller":false}` + '{"ID":"P~945cb98e-3d19-11ec-8456-953363d7a344","seriesID":"S~d37c4626-b691-11ea-ba69-255835135f02","channelID":"1","start":1636674960,"end":1636676520,"catchupAvailableUntil":1637279760,"title":"Eigen Huis & Tuin: Lekker Leven","description":"Nederlands lifestyleprogramma uit 2022 (ook in HD) met dagelijkse inspiratie voor een lekker leven in en om het huis.\\nPresentatrice Froukje de Both, kok Hugo Kennis en een team van experts, onder wie tuinman Tom Groot, geven praktische tips op het gebied van wonen, lifestyle, tuinieren en koken. Daarmee kun je zelf direct aan de slag om je leven leuker én gezonder te maken. Afl. 15 van seizoen 4.","images":{"thumbnail":{"url":"https://cdn.gvidi.tv/img/booxmedia/b291/561946.jpg"}},"additionalInformation":{"metadataID":"M~c512c206-95e5-11ec-87d8-494f70130311","externalMetadataID":"E~RTL4-89d99356_6599_4b65_a7a0_a93f39019645"},"parentalGuidance":{"kijkwijzer":["AL"]},"restrictions":{"startoverDisabled":false,"catchupDisabled":false,"recordingDisabled":false},"isFiller":false}' ) }) ) - const content = `{"1":[{"ID":"P~945cb98e-3d19-11ec-8456-953363d7a344","seriesID":"S~d37c4626-b691-11ea-ba69-255835135f02","channelID":"1","start":1636674960,"end":1636676520,"catchupAvailableUntil":1637279760,"title":"NOS Journaal","images":{"thumbnail":{"url":"https://cdn.gvidi.tv/img/booxmedia/e19c/static/NOS%20Journaal5.jpg"}},"additionalInformation":{"metadataID":"M~944f3c6e-3d19-11ec-9faf-2735f2e98d2a","externalMetadataID":"E~TV01-2026117420668"},"parentalGuidance":{"kijkwijzer":["AL"]},"restrictions":{"startoverDisabled":false,"catchupDisabled":false,"recordingDisabled":false},"isFiller":false}]}` + const content = + '{"1":[{"ID":"P~945cb98e-3d19-11ec-8456-953363d7a344","seriesID":"S~d37c4626-b691-11ea-ba69-255835135f02","channelID":"1","start":1636674960,"end":1636676520,"catchupAvailableUntil":1637279760,"title":"NOS Journaal","images":{"thumbnail":{"url":"https://cdn.gvidi.tv/img/booxmedia/e19c/static/NOS%20Journaal5.jpg"}},"additionalInformation":{"metadataID":"M~944f3c6e-3d19-11ec-9faf-2735f2e98d2a","externalMetadataID":"E~TV01-2026117420668"},"parentalGuidance":{"kijkwijzer":["AL"]},"restrictions":{"startoverDisabled":false,"catchupDisabled":false,"recordingDisabled":false},"isFiller":false}]}' parser({ date, channel, content }) .then(result => { @@ -57,7 +58,7 @@ it('can handle empty guide', done => { parser({ date, channel, - content: `{"code":500,"message":"Error retrieving guide"}` + content: '{"code":500,"message":"Error retrieving guide"}' }) .then(result => { expect(result).toMatchObject([]) diff --git a/sites/digiturk.com.tr/digiturk.com.tr.channels.xml b/sites/digiturk.com.tr/digiturk.com.tr.channels.xml index 568a9799..0954f4a5 100644 --- a/sites/digiturk.com.tr/digiturk.com.tr.channels.xml +++ b/sites/digiturk.com.tr/digiturk.com.tr.channels.xml @@ -1,135 +1,133 @@ - - - 360 HD - - A Haber HD - A News HD - A Para HD - A Spor HD - A2 HD - AL JAZEERA ENGLISH HD - Al Quran Al Kareem TV HD - Al Sunnah Al Nabawiyah TV HD - - ATV - - Baby TV - BBC EARTH HD - BBC Entertainment - BBC First - BBC World News HD - - beIN BOX OFFICE 1 - beIN GURME - beIN HOME & ENTERTAINMENT - beIN İZ HD - beIN MOVIES ACTION - beIN MOVIES ACTION 2 - beIN MOVIES FAMILY - beIN MOVIES PREMIERE - beIN MOVIES PREMIERE 2 - beIN MOVIES STARS - beIN MOVIES TURK - beIN SERIES COMEDY - beIN SERIES DRAMA - beIN SERIES SCI-FI - beIN SERIES VICE - beIN SPORTS 1 - beIN SPORTS 2 - beIN SPORTS 3 - beIN SPORTS 4 - beIN SPORTS 5 - beIN SPORTS HABER - beIN SPORTS MAX HD 1 - beIN SPORTS MAX HD 2 - BEYAZ TV HD - BLOOMBERG HD - Bloomberg HT HD - BOOMERANG HD - Cartoon Network - CBEEBIES HD - CGTN DOCUMENTARY HD - CGTN HD - CNN INTERNATIONAL - CNN TÜRK HD - Da Vinci - Digiturk 4K - Discovery Channel HD - Discovery Science HD - Disney Junior - Diyanet TV HD - DMAX HD - EKOTÜRK TV HD - EURONEWS - Eurosport 1 HD - Eurosport 2 HD - Fashion TV HD - FB TV HD - Flash Haber TV - FOX HD - France 24 HD - GS TV HD - HABER GLOBAL HD - HABERTURK HD - Halk TV - - - - KANAL 7 HD - Kanal D HD - - - KRT TV HD - - MCM Top HD - Mezzo HD - MinikaGO - MTV 00s - MTV Hits - MTV Live HD - Nat Geo Wild HD - National Geographic HD - Nick Jr. - Nickelodeon HD - NTV HD - - RAI UNO - - Show TV HD - - Star TV HD - - - TELE 1 HD - Teve2 HD - TGRT Haber HD - TJK TV - TLC HD - TRT 1 HD - TRT 2 HD - TRT 3 - TRT Spor - TRT Arabi - TRT AVAZ - TRT Belgesel HD - TRT Çocuk - TRT EBATV İLKOKUL HD - TRT EBATV LİSE HD - TRT EBATV ORTAOKUL HD - TRT Haber HD - TRT Kurdi - TRT Müzik - TRT SPOR HD - TRT SPOR YILDIZ - TRT TURK - TRT World HD - TV 100 HD - TV5 Monde Europe - TV8 HD - TVNET HD - Ülke TV HD - ULUSAL TV - VAV TV - Yaban TV - - \ No newline at end of file + + + + + + + + + + + + + + + + + AL JAZEERA ENGLISH HD + Baby TV + BBC Entertainment + BBC World News HD + BLOOMBERG HD + CGTN HD + CGTN DOCUMENTARY HD + CNN INTERNATIONAL + EURONEWS + Fashion TV HD + France 24 HD + TV5 Monde Europe + 360 HD + A2 HD + A Haber HD + Al Quran Al Kareem TV HD + Al Sunnah Al Nabawiyah TV HD + A News HD + A Para HD + A Spor HD + ATV + BBC EARTH HD + BBC First + beIN BOX OFFICE 1 + beIN GURME + beIN HOME & ENTERTAINMENT + beIN İZ HD + beIN MOVIES PREMIERE + beIN MOVIES ACTION + beIN MOVIES FAMILY + beIN MOVIES ACTION 2 + beIN MOVIES PREMIERE 2 + beIN MOVIES STARS + beIN MOVIES TURK + beIN SERIES COMEDY + beIN SERIES DRAMA + beIN SERIES SCI-FI + beIN SERIES VICE + beIN SPORTS 1 + beIN SPORTS 2 + beIN SPORTS 3 + beIN SPORTS 4 + beIN SPORTS 5 + beIN SPORTS HABER + beIN SPORTS MAX HD 1 + beIN SPORTS MAX HD 2 + BEYAZ TV HD + Bloomberg HT HD + BOOMERANG HD + Cartoon Network + CBEEBIES HD + CNN TÜRK HD + Da Vinci + Digiturk 4K + Discovery Channel HD + Discovery Science HD + Disney Junior + Diyanet TV HD + DMAX HD + EKOTÜRK TV HD + Eurosport 1 HD + Eurosport 2 HD + FB TV HD + Flash Haber TV + FOX HD + GS TV HD + HABER GLOBAL HD + HABERTURK HD + Halk TV + KANAL 7 HD + Kanal D HD + KRT TV HD + MCM Top HD + Mezzo HD + MinikaGO + MTV 00s + MTV Hits + MTV Live HD + Nat Geo Wild HD + National Geographic HD + Nickelodeon HD + Nick Jr. + NTV HD + RAI UNO + Show TV HD + Star TV HD + TELE 1 HD + Teve2 HD + TGRT Haber HD + TJK TV + TLC HD + TRT 1 HD + TRT 2 HD + TRT 3 - TRT Spor + TRT Arabi + TRT AVAZ + TRT Belgesel HD + TRT Çocuk + TRT EBATV İLKOKUL HD + TRT EBATV LİSE HD + TRT EBATV ORTAOKUL HD + TRT Haber HD + TRT Kurdi + TRT Müzik + TRT SPOR HD + TRT SPOR YILDIZ + TRT TURK + TRT World HD + TV 100 HD + TV8 HD + TVNET HD + Ülke TV HD + ULUSAL TV + VAV TV + Yaban TV + \ No newline at end of file diff --git a/sites/digiturk.com.tr/digiturk.com.tr.config.js b/sites/digiturk.com.tr/digiturk.com.tr.config.js index 253ad5dc..670fb569 100644 --- a/sites/digiturk.com.tr/digiturk.com.tr.config.js +++ b/sites/digiturk.com.tr/digiturk.com.tr.config.js @@ -32,7 +32,9 @@ module.exports = { site: 'digiturk.com.tr', days: 2, url: function ({ date, channel }) { - return `https://www.digiturk.com.tr/_Ajax/getBroadcast.aspx?channelNo=${channel.site_id}&date=${date.format('DD.MM.YYYY')}&tomorrow=false&primetime=false` + return `https://www.digiturk.com.tr/_Ajax/getBroadcast.aspx?channelNo=${ + channel.site_id + }&date=${date.format('DD.MM.YYYY')}&tomorrow=false&primetime=false` }, request: { method: 'GET', @@ -48,7 +50,7 @@ module.exports = { title: item.PName, // description: item.LongDescription, // category: parseCategory(item), - start :parseTime(item.PStartTime), + start: parseTime(item.PStartTime), stop: parseTime(item.PEndTime) }) }) @@ -59,8 +61,7 @@ module.exports = { } } - -function parseTime(time){ +function parseTime(time) { let timestamp = parseInt(time.replace('/Date(', '').replace('+0300)/', '')) return dayjs(timestamp) } @@ -72,5 +73,5 @@ function parseTime(time){ function parseItems(content) { if (!content) return [] const data = JSON.parse(content) - return (data && data.BChannels && data.BChannels[0].CPrograms) ? data.BChannels[0].CPrograms : [] + return data && data.BChannels && data.BChannels[0].CPrograms ? data.BChannels[0].CPrograms : [] } diff --git a/sites/digiturk.com.tr/digiturk.com.tr.test.js b/sites/digiturk.com.tr/digiturk.com.tr.test.js index 70329ac6..61f6c06f 100644 --- a/sites/digiturk.com.tr/digiturk.com.tr.test.js +++ b/sites/digiturk.com.tr/digiturk.com.tr.test.js @@ -1,4 +1,4 @@ -// npx epg-grabber --config=sites/digiturk.com.tr/digiturk.com.tr.config.js --channels=sites/digiturk.com.tr/digiturk.com.tr.channels.xml --output=guide.xml --days=2 +// npm run grab -- --site=digiturk.com.tr const { parser, url } = require('./digiturk.com.tr.config.js') const fs = require('fs') @@ -17,7 +17,9 @@ const channel = { it('can generate valid url', () => { const result = url({ date, channel }) - expect(result).toBe('https://www.digiturk.com.tr/_Ajax/getBroadcast.aspx?channelNo=14&date=19.01.2023&tomorrow=false&primetime=false') + expect(result).toBe( + 'https://www.digiturk.com.tr/_Ajax/getBroadcast.aspx?channelNo=14&date=19.01.2023&tomorrow=false&primetime=false' + ) }) it('can parse response', () => { @@ -42,6 +44,6 @@ it('can parse response', () => { }) it('can handle empty guide', () => { - const result = parser({ content: `` }) + const result = parser({ content: '' }) expect(result).toMatchObject([]) }) diff --git a/sites/directv.com.ar/directv.com.ar.channels.xml b/sites/directv.com.ar/directv.com.ar.channels.xml index 57b3a5da..20366efc 100644 --- a/sites/directv.com.ar/directv.com.ar.channels.xml +++ b/sites/directv.com.ar/directv.com.ar.channels.xml @@ -1,418 +1,416 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 24 Horas - A24 - A&E - AMC - América TV (ARG) - Animal Planet - Antena 3 Internacional - A3Cine HD - Atres Series - AXN - Baby TV HD - BBC World News - Bloomberg Television - Bravo TV - C5N Canal 5 Noticias (ARG) - Cable Noticias de Colombia - Canal 26 (ARG). - Televisión Pública Pampeana - EL TRES Rosario - Canal 7 de Jujuy - CANAL 9 - Canal A HD - Canal de la ciudad - Canal LUZ (ARG) - Canal 21 (ARG) - Canal Rural - Caracol Internacional - Cartoonito - Cartoon Network (Sur) - CGTN-Español - CINE.AR (ARG) - Cinecanal (ARG) - Cinelatino - Cinemax Sur - Magazine - CNN Chile - CNN en español - CNN International - Comedy Central - Crónica TV (ARG) - De Película - DeporTV - DHE - DSPORTS 2 - DSPORTS (ARG) - DSPORTS Fight - DSPORTS + - Discovery Channel (Sur) - Discovery Home & Health - Discovery Kids (Sur) - Discovery Theater HD - Discovery Turbo - Discovery World HD - Disney Channel (Sur) - Disney Junior Sur - DNews - Deutsche Welle - El Doce CANAL 12 DE CORDOBA - El Gourmet - Canal 9 (ARG) - EL SIETE - El Tiempo - El Trece (ARG) - Encuentro (ARG) - Encuentro Internacional - Enlace - E! Entertainment - ESPN 2 Latin Sur - ESPN 3 Sur - ESPN Argentina SD - ESPN Extra HD - ESPN Premium (SD) - Europa Europa HD - Eternal Word TV Network - Film & Arts - Food Network - FOX Sports 2 Argentina - FOX Sports 2 - FOX Sports 3 Argentina - FX - Glitz - Golden Edge - Golden TV - Golden HD - Golf Channel - HBO2 - HBO Family (Este) - HBO (Este) - HBO Mundi - HBO Plus (Este) - HBO Pop - HBO Signature - HBO Xtreme - Home & Garden TV HD - History 2 - History (Sur) - Hola TV - HTV - HustlerTV - Investigation Discovery - I-SAT - IVC Internacional - La Nacion + - Canal de las Estrellas - Lifetime - MÁS CHIC - MLB Extra Innings - MLB Extra Innings 2 - MTV Latino - Music Top HD - National Geographic (Sur) - NBA TV HD - NET TV (ARG) - NHK World TV - Nickelodeon - NICK JR - NTN 24 - Nuestra Tele noticias 24HS - OnDIRECTV (Sur) - PAKA PAKA (ARG) - Paramount Network - Pasiones - Playboy TV - PX Sports HD - Quiero Música en mi Idioma - RAI International - RCN Nuestra Tele - RTP Internacional - Sony Movies - Space (Sur) - STAR Channel - Studio Universal - SyFy - TBS Very Funny - Turner Classic Movies - Telediario Television - Telefe (ARG) - Canal 5 de Rosario - Telemax - Telemundo Internacional - Tierra Mia HD - TLC - Travel & Living Channel - TLNovelas - TN Todo Noticias - TNT Series - TNT (SUR) - TNT Sports - TRUTV - TV Chile - Tv Ciudad - TV Cortos HD - Globo Internacional - TV Perú - TV Perú Noticias HD - La TV Pública (ARG) - TyC Sports - Universal Cinema - Universal Comedy - Universal Crime Este - UNIVERSAL Cinema West - Universal Premiere Este - Universal Premiere Oeste - Universal Reality - Universal - Univision - Venus - VePLUS HD - Volver - VTV PLUS - Warner Channel - Warner Channel HD - ZEE TV - ZooMoo - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 24 Horas + A24 + A&E + AMC + América TV (ARG) + Animal Planet + Antena 3 Internacional + A3Cine HD + Atres Series + AXN + Baby TV HD + BBC World News + Bloomberg Television + Bravo TV + C5N Canal 5 Noticias (ARG) + Cable Noticias de Colombia + Canal 26 (ARG). + Televisión Pública Pampeana + EL TRES Rosario + Canal 7 de Jujuy + CANAL 9 + Canal A HD + Canal de la ciudad + Canal LUZ (ARG) + Canal 21 (ARG) + Canal Rural + Caracol Internacional + Cartoonito + Cartoon Network (Sur) + CGTN-Español + CINE.AR (ARG) + Cinecanal (ARG) + Cinelatino + Cinemax Sur + Magazine + CNN Chile + CNN en español + CNN International + Comedy Central + Crónica TV (ARG) + De Película + DeporTV + DHE + DSPORTS 2 + DSPORTS (ARG) + DSPORTS Fight + DSPORTS + + Discovery Channel (Sur) + Discovery Home & Health + Discovery Kids (Sur) + Discovery Theater HD + Discovery Turbo + Discovery World HD + Disney Channel (Sur) + Disney Junior Sur + DNews + Deutsche Welle + El Doce CANAL 12 DE CORDOBA + El Gourmet + Canal 9 (ARG) + EL SIETE + El Tiempo + El Trece (ARG) + Encuentro (ARG) + Encuentro Internacional + Enlace + E! Entertainment + ESPN 2 Latin Sur + ESPN 3 Sur + ESPN Argentina SD + ESPN Extra HD + ESPN Premium (SD) + Europa Europa HD + Eternal Word TV Network + Film & Arts + Food Network + FOX Sports 2 Argentina + FOX Sports 2 + FOX Sports 3 Argentina + FX + Glitz + Golden Edge + Golden TV + Golden HD + Golf Channel + HBO2 + HBO Family (Este) + HBO (Este) + HBO Mundi + HBO Plus (Este) + HBO Pop + HBO Signature + HBO Xtreme + Home & Garden TV HD + History 2 + History (Sur) + Hola TV + HTV + HustlerTV + Investigation Discovery + I-SAT + IVC Internacional + La Nacion + + Canal de las Estrellas + Lifetime + MÁS CHIC + MLB Extra Innings + MLB Extra Innings 2 + MTV Latino + Music Top HD + National Geographic (Sur) + NBA TV HD + NET TV (ARG) + NHK World TV + Nickelodeon + NICK JR + NTN 24 - Nuestra Tele noticias 24HS + OnDIRECTV (Sur) + PAKA PAKA (ARG) + Paramount Network + Pasiones + Playboy TV + PX Sports HD + Quiero Música en mi Idioma + RAI International + RCN Nuestra Tele + RTP Internacional + Sony Movies + Space (Sur) + STAR Channel + Studio Universal + SyFy + TBS Very Funny + Turner Classic Movies + Telediario Television + Telefe (ARG) + Canal 5 de Rosario + Telemax + Telemundo Internacional + Tierra Mia HD + TLC - Travel & Living Channel + TLNovelas + TN Todo Noticias + TNT Series + TNT (SUR) + TNT Sports + TRUTV + TV Chile + Tv Ciudad + TV Cortos HD + Globo Internacional + TV Perú + TV Perú Noticias HD + La TV Pública (ARG) + TyC Sports + Universal Cinema + Universal Comedy + Universal Crime Este + UNIVERSAL Cinema West + Universal Premiere Este + Universal Premiere Oeste + Universal Reality + Universal + Univision + Venus + VePLUS HD + Volver + VTV PLUS + Warner Channel + Warner Channel HD + ZEE TV + ZooMoo + diff --git a/sites/directv.com.ar/directv.com.ar.config.js b/sites/directv.com.ar/directv.com.ar.config.js index 380d4f60..9918e291 100644 --- a/sites/directv.com.ar/directv.com.ar.config.js +++ b/sites/directv.com.ar/directv.com.ar.config.js @@ -1,5 +1,4 @@ process.env['NODE_TLS_REJECT_UNAUTHORIZED'] = 0 -const axios = require('axios') const dayjs = require('dayjs') const utc = require('dayjs/plugin/utc') const timezone = require('dayjs/plugin/timezone') @@ -12,21 +11,22 @@ dayjs.extend(customParseFormat) module.exports = { site: 'directv.com.ar', days: 2, - url: `https://www.directv.com.ar/guia/ChannelDetail.aspx/GetProgramming`, + url: 'https://www.directv.com.ar/guia/ChannelDetail.aspx/GetProgramming', request: { method: 'POST', headers: { - 'Cookie': 'PGCSS=16; PGLang=S; PGCulture=es-AR;', - 'Accept': '*/*', + Cookie: 'PGCSS=16; PGLang=S; PGCulture=es-AR;', + Accept: '*/*', 'Accept-Language': 'es-419,es;q=0.9', - 'Connection': 'keep-alive', + Connection: 'keep-alive', 'Content-Type': 'application/json; charset=UTF-8', - 'Origin': 'https://www.directv.com.ar', - 'Referer': 'https://www.directv.com.ar/guia/ChannelDetail.aspx?id=1740&name=TLCHD', + Origin: 'https://www.directv.com.ar', + Referer: 'https://www.directv.com.ar/guia/ChannelDetail.aspx?id=1740&name=TLCHD', 'Sec-Fetch-Dest': 'empty', 'Sec-Fetch-Mode': 'cors', 'Sec-Fetch-Site': 'same-origin', - 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36', + 'User-Agent': + 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36', 'sec-ch-ua': '"Not.A/Brand";v="8", "Chromium";v="114", "Google Chrome";v="114"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"Windows"' diff --git a/sites/directv.com.ar/directv.com.ar.test.js b/sites/directv.com.ar/directv.com.ar.test.js index aea46225..95aa923b 100644 --- a/sites/directv.com.ar/directv.com.ar.test.js +++ b/sites/directv.com.ar/directv.com.ar.test.js @@ -1,4 +1,4 @@ -// npx epg-grabber --config=sites/directv.com.ar/directv.com.ar.config.js --channels=sites/directv.com.ar/directv.com.ar.channels.xml --output=guide.xml --days=2 +// npm run grab -- --site=directv.com.ar const { parser, url, request } = require('./directv.com.ar.config.js') const dayjs = require('dayjs') @@ -47,7 +47,8 @@ it('can generate valid request data', () => { }) it('can parse response', () => { - const content = `{"d":[{"ChannelSection":"","ChannelFullName":"A&E HD","IsFavorite":false,"ChannelName":"A&EHD","ChannelNumber":207,"ProgramList":[{"_channelSection":"","eventId":"120289890767","titleId":"SH0110397700000001","title":"Chicas guapas","programId":null,"description":"Un espacio destinado a la belleza y los distintos estilos de vida, que muestra el trabajo inspiracional de la moda latinoamericana.","episodeTitle":null,"channelNumber":120,"channelName":"AME2","channelFullName":"América TV (ARG)","channelSection":"","contentChannelID":120,"startTime":"/Date(-62135578800000)/","endTime":"/Date(-62135578800000)/","GMTstartTime":"/Date(-62135578800000)/","GMTendTime":"/Date(-62135578800000)/","css":16,"language":null,"tmsId":"SH0110397700000001","rating":"NR","categoryId":"Tipos de Programas","categoryName":0,"subCategoryId":0,"subCategoryName":"Series","serviceExpiration":"/Date(-62135578800000)/","crId":null,"promoUrl1":null,"promoUrl2":null,"price":0,"isPurchasable":"N","videoUrl":"","imageUrl":"https://dnqt2wx2urq99.cloudfront.net/ondirectv/LOGOS/Canales/AR/120.png","titleSecond":"Chicas guapas","isHD":"N","DetailsURL":null,"BuyURL":null,"ProgramServiceId":null,"SearchDateTime":null,"startTimeString":"6/19/2022 12:00:00 AM","endTimeString":"6/19/2022 12:15:00 AM","DurationInMinutes":null,"castDetails":null,"scheduleDetails":null,"seriesDetails":null,"processedSeasonDetails":null}]}]}` + const content = + '{"d":[{"ChannelSection":"","ChannelFullName":"A&E HD","IsFavorite":false,"ChannelName":"A&EHD","ChannelNumber":207,"ProgramList":[{"_channelSection":"","eventId":"120289890767","titleId":"SH0110397700000001","title":"Chicas guapas","programId":null,"description":"Un espacio destinado a la belleza y los distintos estilos de vida, que muestra el trabajo inspiracional de la moda latinoamericana.","episodeTitle":null,"channelNumber":120,"channelName":"AME2","channelFullName":"América TV (ARG)","channelSection":"","contentChannelID":120,"startTime":"/Date(-62135578800000)/","endTime":"/Date(-62135578800000)/","GMTstartTime":"/Date(-62135578800000)/","GMTendTime":"/Date(-62135578800000)/","css":16,"language":null,"tmsId":"SH0110397700000001","rating":"NR","categoryId":"Tipos de Programas","categoryName":0,"subCategoryId":0,"subCategoryName":"Series","serviceExpiration":"/Date(-62135578800000)/","crId":null,"promoUrl1":null,"promoUrl2":null,"price":0,"isPurchasable":"N","videoUrl":"","imageUrl":"https://dnqt2wx2urq99.cloudfront.net/ondirectv/LOGOS/Canales/AR/120.png","titleSecond":"Chicas guapas","isHD":"N","DetailsURL":null,"BuyURL":null,"ProgramServiceId":null,"SearchDateTime":null,"startTimeString":"6/19/2022 12:00:00 AM","endTimeString":"6/19/2022 12:15:00 AM","DurationInMinutes":null,"castDetails":null,"scheduleDetails":null,"seriesDetails":null,"processedSeasonDetails":null}]}]}' const result = parser({ content, channel }).map(p => { p.start = p.start.toJSON() p.stop = p.stop.toJSON() @@ -71,7 +72,7 @@ it('can parse response', () => { it('can handle empty guide', () => { const result = parser({ - content: ``, + content: '', channel }) expect(result).toMatchObject([]) diff --git a/sites/directv.com.uy/directv.com.uy.channels.xml b/sites/directv.com.uy/directv.com.uy.channels.xml index 01869235..94169e9e 100644 --- a/sites/directv.com.uy/directv.com.uy.channels.xml +++ b/sites/directv.com.uy/directv.com.uy.channels.xml @@ -1,148 +1,146 @@ - - - 24 Horas - AMC - Animal Planet - Antena 3 Internacional - A3Cine HD - Atres Series - AXN - Baby TV HD - BBC World News - Bloomberg Television - Canal 4 (URU) - Canal 5 (URU) - Canal 12 (URU) - Canal 10 (URU) - Cable Noticias de Colombia - Canal 26 (ARG). - Canal LUZ (ARG) - Canal 21 (ARG) - Caracol Internacional - Cartoonito - Cartoon Network (Sur) - CGTN-Español - Cinecanal (COL) - Cinelatino - Cinemax Sur - Magazine - CNN Chile - CNN en español - CNN International - Comedy Central - Crónica TV (ARG) - De Película - DHE - DIRECTV Sports 2 - DIRECTV Sports (URU) - DIRECTV Sports Fight - DIRECTV Sports + - Discovery Channel (Sur) - Discovery Kids (Sur) - Discovery Theater HD - Discovery Turbo - Discovery World HD - Disney Channel (Sur) - Disney Junior Sur - Deutsche Welle - El Gourmet - El Tiempo - Encuentro Internacional - Enlace - E! Entertainment - ESPN 2 Sur - ESPN - ESPN Extra HD - Europa Europa HD - Eternal Word TV Network - Food Network - FOX Sports 2 - FOX Sports 3 - FX - Glitz - Golden Edge - Golden TV - Golden HD - Golf Channel - HBO2 - HBO Family (Este) - HBO (Este) - HBO Mundi - HBO Plus (Este) - HBO Pop - HBO Signature - HBO Xtreme - Home & Garden TV HD - History 2 - History (Sur) - Hola TV - HTV - HustlerTV - Investigation Discovery - I-SAT - IVC Internacional - La Nacion + - Canal de las Estrellas - Lifetime - MÁS CHIC - MLB Extra Innings - MLB Extra Innings - MTV Latino - Music Top HD - National Geographic (Sur) - NBA TV HD - NHK World TV - Nickelodeon - NICK JR - NTN 24 - Nuestra Tele noticias 24HS - OnDIRECTV (Sur) - Paramount Network - Pasiones - Playboy TV - PX Sports HD - Quiero Música en mi Idioma - RAI International - RCN Nuestra Tele - RTP Internacional - Smithsonian Channel HD - - Space (Sur) - STAR Channel - Studio Universal - Sun Channel - SyFy - TBS Very Funny - Turner Classic Movies - Telemundo Internacional - Tierra Mia HD - TLC - Travel & Living Channel - TLNovelas - TN Todo Noticias - TNT Series - TNT Latin America - TRUTV - Tv Ciudad (URU) - TV Chile - TV Cortos HD - Globo Internacional - TV Perú - TV Perú Noticias HD - TYC International - Universal Cinema - Universal Comedy - Universal Crime Este - UNIVERSAL Cinema West - Universal Premiere Este - Universal Premiere Oeste - Universal Reality - Universal - Univision - Venus - VTV (URU) - VTV Plus (URU) - Warner Channel - ZEE TV - ZooMoo - - + + + 24 Horas + AMC + Animal Planet + Antena 3 Internacional + A3Cine HD + Atres Series + AXN + Baby TV HD + BBC World News + Bloomberg Television + Cable Noticias de Colombia + Canal 10 (URU) + Canal 26 (ARG). + Canal 4 (URU) + Canal 5 (URU) + Canal LUZ (ARG) + Canal 21 (ARG) + Caracol Internacional + Cartoonito + Cartoon Network (Sur) + CGTN-Español + Cinecanal (COL) + Cinelatino + Cinemax Sur + Magazine + CNN Chile + CNN en español + CNN International + Comedy Central + Crónica TV (ARG) + De Película + DHE + DIRECTV Sports 2 + DIRECTV Sports Fight + DIRECTV Sports + + DIRECTV Sports (URU) + Discovery Channel (Sur) + Discovery Kids (Sur) + Discovery Theater HD + Discovery Turbo + Discovery World HD + Disney Channel (Sur) + Disney Junior Sur + Deutsche Welle + El Gourmet + El Tiempo + Encuentro Internacional + Enlace + E! Entertainment + ESPN 2 Sur + ESPN + ESPN Extra HD + Europa Europa HD + Eternal Word TV Network + Food Network + FOX Sports 2 + FOX Sports 3 + FX + Glitz + Golden Edge + Golden TV + Golden HD + Golf Channel + HBO2 + HBO Family (Este) + HBO (Este) + HBO Mundi + HBO Plus (Este) + HBO Pop + HBO Signature + HBO Xtreme + Home & Garden TV HD + History 2 + History (Sur) + Hola TV + HTV + HustlerTV + Investigation Discovery + I-SAT + IVC Internacional + La Nacion + + Canal de las Estrellas + Lifetime + MÁS CHIC + MLB Extra Innings + MLB Extra Innings + MTV Latino + Music Top HD + National Geographic (Sur) + NBA TV HD + NHK World TV + Nickelodeon + NICK JR + NTN 24 - Nuestra Tele noticias 24HS + OnDIRECTV (Sur) + Paramount Network + Pasiones + Playboy TV + PX Sports HD + Quiero Música en mi Idioma + RAI International + RCN Nuestra Tele + RTP Internacional + Smithsonian Channel HD + Space (Sur) + STAR Channel + Studio Universal + Sun Channel + SyFy + TBS Very Funny + Turner Classic Movies + Canal 12 (URU) + Telemundo Internacional + Tierra Mia HD + TLC - Travel & Living Channel + TLNovelas + TN Todo Noticias + TNT Series + TNT Latin America + TRUTV + TV Chile + Tv Ciudad (URU) + TV Cortos HD + Globo Internacional + TV Perú + TV Perú Noticias HD + TYC International + Universal Cinema + Universal Comedy + Universal Crime Este + UNIVERSAL Cinema West + Universal Premiere Este + Universal Premiere Oeste + Universal Reality + Universal + Univision + Venus + VTV (URU) + VTV Plus (URU) + Warner Channel + ZEE TV + ZooMoo + diff --git a/sites/directv.com.uy/directv.com.uy.config.js b/sites/directv.com.uy/directv.com.uy.config.js index c03263a3..f1a828ac 100644 --- a/sites/directv.com.uy/directv.com.uy.config.js +++ b/sites/directv.com.uy/directv.com.uy.config.js @@ -1,4 +1,3 @@ -const axios = require('axios') const dayjs = require('dayjs') const utc = require('dayjs/plugin/utc') const timezone = require('dayjs/plugin/timezone') @@ -11,7 +10,7 @@ dayjs.extend(customParseFormat) module.exports = { site: 'directv.com.uy', days: 2, - url: `https://www.directv.com.uy/guia/ChannelDetail.aspx/GetProgramming`, + url: 'https://www.directv.com.uy/guia/ChannelDetail.aspx/GetProgramming', request: { method: 'POST', headers: { diff --git a/sites/directv.com.uy/directv.com.uy.test.js b/sites/directv.com.uy/directv.com.uy.test.js index f1a88ea7..146748e2 100644 --- a/sites/directv.com.uy/directv.com.uy.test.js +++ b/sites/directv.com.uy/directv.com.uy.test.js @@ -1,4 +1,4 @@ -// npx epg-grabber --config=sites/directv.com.uy/directv.com.uy.config.js --channels=sites/directv.com.uy/directv.com.uy.channels.xml --output=guide.xml --days=2 +// npm run grab -- --site=directv.com.uy const { parser, url, request } = require('./directv.com.uy.config.js') const fs = require('fs') @@ -71,7 +71,7 @@ it('can parse response', () => { it('can handle empty guide', () => { const result = parser({ - content: ``, + content: '', channel }) expect(result).toMatchObject([]) diff --git a/sites/directv.com/directv.com.channels.xml b/sites/directv.com/directv.com.channels.xml index bf11dbc3..a5b4d974 100644 --- a/sites/directv.com/directv.com.channels.xml +++ b/sites/directv.com/directv.com.channels.xml @@ -1,1048 +1,1046 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 5StarMAX HD - 88 Films - 88 TV - ACC Network - AccuWeather HD - ActionMax HD - A&E - Altitude Sports - AMC - AMC+ HD - American Heroes Channel - AVC (Infomercial) - Animal Planet - Antena 3 - Arirang TV - ASPIRE (HD) - Atreseries - AT&T SportsNet Pittsburgh - AT&T SportsNet Pittsburgh (Alternate) - AT&T SportsNet Rocky Mountain - AT&T SportsNet Rocky Mountain West - AT&T SportsNet Southwest - AT&T SportsNet Southwest (Alternate) - AXS TV HD - BabyFirst - BabyTV - Bally Sports Arizona - Bally Sports Arizona Extra - Bally Sports Arizona Extra 2 - Bally Sports Detroit - Bally Sports Florida - Bally Sports Great Lakes - Bally Sports Kansas City - Bally Sports Midwest - Bally Sports Midwest Extra - Bally Sports North - Bally Sports Ohio - Bally Sports Cincinnati - Bally Sports Ohio Extra - Bally Sports Oklahoma HD - Bally Sports San Diego - Bally Sports San Diego Extra - Bally Sports SoCal - Bally Sports SoCal Extra - Bally Sports South - Bally Sports Southeast - Bally Sports Southeast Extra - Bally Sports Southwest - Bally Sports Sun - Bally Sports Sun Extra - Bally Sports West - Bally Sports West Extra - Bally Sports Wisconsin HD - Bally Sports Wisconsin Extra - Bang U - BBC America - BBC World News HD - BET - BET Her - BET West HD - Bloomberg TV - Boomerang - BounceTV - Bravo - BYUtv - Multimedios - Caracol TV - Cartoon Network - Cartoon Network West - CBS Sports Network - CCTV4 - CGTN 2053 (99R) - Channel NECO International - Charming China 2055 - Cheddar News - Cinelatino - Cinemax - Cinemax West - Cleo TV - CMT - CNBC - CNBC World - CNN - Comedy Central - Comedy Central West HD - Comedy TV HD - Cooking Channel - Crime & Investigation HD - CSPAN - CSPAN 2 - Christian Television Net - CW Plus - Daystar - Destination America - Discovery - Discovery Family Channel - Discovery Life - Disney Channel (East) - Disney Channel (West) - Disney Junior - Disney XD - Dog TV - Ecuador TV - Ecuavisa Internacional - E! - Enlace - ESPN - ESPN2 - ESPN College Extra 793 HD - ESPN College Extra 794 HD - ESPN College Extra 795 HD - ESPN College Extra 796 HD - ESPN College Extra 797 HD - ESPN College Extra 798 HD - ESPNews - ESPNU - Estrella News - Estrella TV - EWTN - Family Entertainment Television - Flix - FM HD - Food Network - FOROtv - Fox Business Network - FOX News Channel - FOX Soccer Plus - FOX Sports 1 - FOX Sports 2 - Freeform - Free Speech TV - Fuse HD - FX - FX Movie - FXX - FYI - Game Show Network - GEM Shopping Network - Golf Channel - GolTV - Great American Family - GRIT - Hallmark - Hallmark Drama HD - Hallmark Movies & Mysteries HD - HBO 2 East - HBO 2 West - HBO Comedy HD - HBO East - HBO Family East - HBO Family West - HBO Signature - HBO West - HBO Zone HD - HDNET MOVIES - HGTV - History - History en Espanol - HLN - Hope Channel - Home Shopping Network - Hustler TV - IFC - IMPACT TV - INSP - Investigation Discovery - ION Television East HD - JBS - Jewelry Television (72) - Nippon TV HD - Justice Central HD - KABC (Los Angeles) ABC West - KBS Korea - KCBS (Los Angeles) CBS West - KTLA CW West - KTTV (Los Angeles) FOX West - Lifetime - LMN - LinkTV - Logo - Longhorn Network HD - Magnolia Network - Marquee Sports Network - MASN - MAVTV HD - MGM+ HD - MGM+ Hits East - MGM+ Marquee HD - MLB Network - MLB Network Alt. 213-1 - MoreMAX - MotorTrend HD - MovieMAX - MSNBC - MTV2 - MTV Classic - MTV - MTV Live HD - MTV West HD - Music Choice '70s - Music Choice '80s - Music Choice '90s - Music Choice Adult Alternative - Music Choice Alternative - Music Choice Blues - Music Choice Classic Country - Music Choice Classic Rock - Music Choice Contemporary Christian - Music Choice Country Hits - Music Choice Dance/EDM - Music Choice Easy Listening - Music Choice Gospel - Music Choice Hip-Hop And R&B - Music Choice Hit List - Music Choice Indie - Music Choice Jazz - Music Choice Kids Only! - Music Choice Light Classical - Music Choice Love Songs - Music Choice Max - Music Choice Metal - Music Choice Mexicana - Music Choice Musica Urbana - Music Choice Party Favorites - Music Choice Pop & Country - Music Choice Pop Hits - Music Choice Pop Latino - Music Choice Rap - Music Choice R&B Classics - Music Choice R&B Soul - Music Choice Reggae - Music Choice Rock - Music Choice Rock Hits - Music Choice Romances - Music Choice Singers & Swing - Music Choice Smooth Jazz - Music Choice Soft Rock - Music Choice Soundscapes - Music Choice Sounds of the Seasons - Music Choice Teen Beats - Music Choice Throwback Jamz - Music Choice Today's Country - Music Choice Toddler Tunes - Music Choice Tropicales - Music Choice Y2K - NASA TV - National Geographic - Nat Geo WILD - NBA League Pass 747 - NBA League Pass 748 - NBA League Pass 749 - NBA League Pass 750 - NBA League Pass 765 - NBA League Pass 766 - NBA League Pass 767 - NBA League Pass 768 - NBA TV - NBC Sports Bay Area - NBC Sports Bay Area Plus (Alternate 2) - NBC Sports Boston - NBC Sports California - NBC Sports Chicago - NBC Sports Chicago Plus 2 - NBC Sports Washington - NBC Sports Washington (Alternate) - NESN - Newsmax TV - NewsNation - NFL Network - NFL Red Zone 703 HD - NFL Sunday Ticket 705 - NFL Sunday Ticket 714 - NFL Sunday Ticket 715 - NFL Sunday Ticket 716 - NFL Sunday Ticket 717 - NFL Sunday Ticket 718 - NFL Sunday Ticket 706 - NFL Sunday Ticket 707 - NFL Sunday Ticket 708 - NFL Sunday Ticket 709 - NFL Sunday Ticket 710 - NFL Sunday Ticket 711 - NFL Sunday Ticket 712 - NFL Sunday Ticket 713 - NHL Center Ice 769 - NHL Center Ice 780 - NHL Center Ice 781 - NHL Center Ice 782 - NHL Center Ice 783 - NHL Center Ice 784 - NHL Center Ice 785 - NHL Center Ice 786 - NHL Center Ice 787 - NHL Center Ice 788 - NHL Center Ice 789 - NHL Center Ice 771 - NHL Center Ice 790 - NHL Center Ice 791 - NHL Center Ice 792 - NHL Center Ice 793 - NHL Center Ice 773 - NHL Center Ice 774 - NHL Center Ice 775 - NHL Center Ice 776 - NHL Center Ice 777 - NHL Center Ice 778 - NHL Center Ice 779 - NHL Network - NHL Network Alternate - Nickelodeon East - Nickelodeon West - Nick Jr. - Nicktoons - NRB - OPM TV - Outdoor Channel - Ovation - OWN - OWN West - Oxygen True Crime - Paramount Network - PBSNET - PBS Kids - Penthouse TV - Penthouse TV Monthly Offer - Peru Magico - Playboy TV HD - Playboy TV Monthly Offer - POP - Pursuit Channel - QVC - QVC2 - QVC3 - Reality Kings - ReelzChannel - Revolt HD - ROOT SPORTS Northwest - ROOT Sports Northwest Plus 2 - ROOT SPORTS Northwest Plus - Son Life Broadcasting HD - Science - Scientology Network - SEC Network - SEC Network Alternate - Shop HQ - Shop LC - SHOWTIME 2 - Showtime (E) - Showtime Extreme - Showtime FamilyZone - Showtime Next HD - Showtime Showcase HD - Showtime (W) - SHOxBET - Smithsonian Channel HD - Sony Movies - So Yummy - Spectrum SportsNet - Spectrum SportsNet LA - Sportsman Channel - SportsNet New York - Stadium College Sports Atlantic - Stadium College Sports Central - Stadium College Sports Pacific - STARZ Cinema HD - STARZ Comedy HD - STARZ East - STARZ Edge - STARZ Encore Action - STARZ Encore Black - STARZ Encore Classic - STARZ Encore - STARZ Encore Family - STARZ Encore Suspense - STARZ Encore West - STARZ Encore Westerns - STARZ in Black - STARZ Kids & Family HD - STARZ West - SundanceTV HD - SUR Peru - SYFY - Tastemade - TBS - TBS West HD - TCM - TCT Network - TeenNick - TeleCentro - Telefe - Tennis Channel - Cowboy Channel - TFC - The Filipino Channel (99R) - The Movie Channel East - The Movie Channel West - The Movie Channel Xtra HD - The Weather Channel - The WORD Network - ThrillerMAX HD - TLC - TNT - TNT West HD - Travel Channel - truTV - TV Chile - TVE - TV Land - TV One HD - Universal Kids - Living Faith Network - UPTV - USA Network - VePlus - VH1 - VICE - Videorola - Vivid TV - Vivid TV Monthly Offer - A3 Parkersburg 65 PBS (Virt) - WABC (New York) ABC East - WCBS (New York) CBS East - Parkersburg, WV WCHS ABC 8 SD - WE tv - Parkersburg, WV WIYE CBS 47 A3 HD - WNBC (New York) NBC East - WNYW (New York) FOX East - World Harvest Television - Parkersburg, WV WOVA FOX 22 A3 HD - Parkersburg, WV WTAP NBC 15 A3 HD - Parkersburg, WV WTAPDT2 MNT 17 A3 SD - Once Mexico - Yankee Ent. & Sports (YES) - Azteca America - Bandamax - Canal 22 Internacional - Centroamerica TV - Cine Estelar - Cine Mexicano - Cine Nostalgia - Sony Cine - CNN en Espanol - De Pelicula Clasico - De Pelicula - Discovery en Espanol - Discovery Familia - ESPN Deportes - FOX Deportes - Galavision - God TV - HBO Latino - HITN - Hola TV - Cinemax Latino HD - megaTV - Tr3S - Nat Geo Mundo - Universo - NTN 24 - Pasiones - Nuestra Tele - Starz Encore en Espanol - Telemundo East - Telemundo West - TUDN - TyC Sports - UniMas SD West - Univision East - Univision telenovelas - Univision West - Viendo Movies - WAPA America - ZooMoo - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5StarMAX HD + 88 Films + 88 TV + ACC Network + AccuWeather HD + ActionMax HD + A&E + Altitude Sports + AMC + AMC+ HD + American Heroes Channel + AVC (Infomercial) + Animal Planet + Antena 3 + Arirang TV + ASPIRE (HD) + Atreseries + AT&T SportsNet Pittsburgh + AT&T SportsNet Pittsburgh (Alternate) + AT&T SportsNet Rocky Mountain + AT&T SportsNet Rocky Mountain West + AT&T SportsNet Southwest + AT&T SportsNet Southwest (Alternate) + AXS TV HD + BabyFirst + BabyTV + Bally Sports Arizona + Bally Sports Arizona Extra + Bally Sports Arizona Extra 2 + Bally Sports Detroit + Bally Sports Florida + Bally Sports Great Lakes + Bally Sports Kansas City + Bally Sports Midwest + Bally Sports Midwest Extra + Bally Sports North + Bally Sports Ohio + Bally Sports Cincinnati + Bally Sports Ohio Extra + Bally Sports Oklahoma HD + Bally Sports San Diego + Bally Sports San Diego Extra + Bally Sports SoCal + Bally Sports SoCal Extra + Bally Sports South + Bally Sports Southeast + Bally Sports Southeast Extra + Bally Sports Southwest + Bally Sports Sun + Bally Sports Sun Extra + Bally Sports West + Bally Sports West Extra + Bally Sports Wisconsin HD + Bally Sports Wisconsin Extra + Bang U + BBC America + BBC World News HD + BET + BET Her + BET West HD + Bloomberg TV + Boomerang + BounceTV + Bravo + BYUtv + Multimedios + Caracol TV + Cartoon Network + Cartoon Network West + CBS Sports Network + CCTV4 + CGTN 2053 (99R) + Channel NECO International + Charming China 2055 + Cheddar News + Cinelatino + Cinemax + Cinemax West + Cleo TV + CMT + CNBC + CNBC World + CNN + Comedy Central + Comedy Central West HD + Comedy TV HD + Cooking Channel + Crime & Investigation HD + CSPAN + CSPAN 2 + Christian Television Net + CW Plus + Daystar + Destination America + Discovery + Discovery Family Channel + Discovery Life + Disney Channel (East) + Disney Channel (West) + Disney Junior + Disney XD + Dog TV + Ecuador TV + Ecuavisa Internacional + E! + Enlace + ESPN + ESPN2 + ESPN College Extra 793 HD + ESPN College Extra 794 HD + ESPN College Extra 795 HD + ESPN College Extra 796 HD + ESPN College Extra 797 HD + ESPN College Extra 798 HD + ESPNews + ESPNU + Estrella News + Estrella TV + EWTN + Family Entertainment Television + Flix + FM HD + Food Network + FOROtv + Fox Business Network + FOX News Channel + FOX Soccer Plus + FOX Sports 1 + FOX Sports 2 + Freeform + Free Speech TV + Fuse HD + FX + FX Movie + FXX + FYI + Game Show Network + GEM Shopping Network + Golf Channel + GolTV + Great American Family + GRIT + Hallmark + Hallmark Drama HD + Hallmark Movies & Mysteries HD + HBO 2 East + HBO 2 West + HBO Comedy HD + HBO East + HBO Family East + HBO Family West + HBO Signature + HBO West + HBO Zone HD + HDNET MOVIES + HGTV + History + History en Espanol + HLN + Hope Channel + Home Shopping Network + Hustler TV + IFC + IMPACT TV + INSP + Investigation Discovery + ION Television East HD + JBS + Jewelry Television (72) + Nippon TV HD + Justice Central HD + KABC (Los Angeles) ABC West + KBS Korea + KCBS (Los Angeles) CBS West + KTLA CW West + KTTV (Los Angeles) FOX West + Lifetime + LMN + LinkTV + Logo + Longhorn Network HD + Magnolia Network + Marquee Sports Network + MASN + MAVTV HD + MGM+ HD + MGM+ Hits East + MGM+ Marquee HD + MLB Network + MLB Network Alt. 213-1 + MoreMAX + MotorTrend HD + MovieMAX + MSNBC + MTV2 + MTV Classic + MTV + MTV Live HD + MTV West HD + Music Choice '70s + Music Choice '80s + Music Choice '90s + Music Choice Adult Alternative + Music Choice Alternative + Music Choice Blues + Music Choice Classic Country + Music Choice Classic Rock + Music Choice Contemporary Christian + Music Choice Country Hits + Music Choice Dance/EDM + Music Choice Easy Listening + Music Choice Gospel + Music Choice Hip-Hop And R&B + Music Choice Hit List + Music Choice Indie + Music Choice Jazz + Music Choice Kids Only! + Music Choice Light Classical + Music Choice Love Songs + Music Choice Max + Music Choice Metal + Music Choice Mexicana + Music Choice Musica Urbana + Music Choice Party Favorites + Music Choice Pop & Country + Music Choice Pop Hits + Music Choice Pop Latino + Music Choice Rap + Music Choice R&B Classics + Music Choice R&B Soul + Music Choice Reggae + Music Choice Rock + Music Choice Rock Hits + Music Choice Romances + Music Choice Singers & Swing + Music Choice Smooth Jazz + Music Choice Soft Rock + Music Choice Soundscapes + Music Choice Sounds of the Seasons + Music Choice Teen Beats + Music Choice Throwback Jamz + Music Choice Today's Country + Music Choice Toddler Tunes + Music Choice Tropicales + Music Choice Y2K + NASA TV + National Geographic + Nat Geo WILD + NBA League Pass 747 + NBA League Pass 748 + NBA League Pass 749 + NBA League Pass 750 + NBA League Pass 765 + NBA League Pass 766 + NBA League Pass 767 + NBA League Pass 768 + NBA TV + NBC Sports Bay Area + NBC Sports Bay Area Plus (Alternate 2) + NBC Sports Boston + NBC Sports California + NBC Sports Chicago + NBC Sports Chicago Plus 2 + NBC Sports Washington + NBC Sports Washington (Alternate) + NESN + Newsmax TV + NewsNation + NFL Network + NFL Red Zone 703 HD + NFL Sunday Ticket 705 + NFL Sunday Ticket 714 + NFL Sunday Ticket 715 + NFL Sunday Ticket 716 + NFL Sunday Ticket 717 + NFL Sunday Ticket 718 + NFL Sunday Ticket 706 + NFL Sunday Ticket 707 + NFL Sunday Ticket 708 + NFL Sunday Ticket 709 + NFL Sunday Ticket 710 + NFL Sunday Ticket 711 + NFL Sunday Ticket 712 + NFL Sunday Ticket 713 + NHL Center Ice 769 + NHL Center Ice 780 + NHL Center Ice 781 + NHL Center Ice 782 + NHL Center Ice 783 + NHL Center Ice 784 + NHL Center Ice 785 + NHL Center Ice 786 + NHL Center Ice 787 + NHL Center Ice 788 + NHL Center Ice 789 + NHL Center Ice 771 + NHL Center Ice 790 + NHL Center Ice 791 + NHL Center Ice 792 + NHL Center Ice 793 + NHL Center Ice 773 + NHL Center Ice 774 + NHL Center Ice 775 + NHL Center Ice 776 + NHL Center Ice 777 + NHL Center Ice 778 + NHL Center Ice 779 + NHL Network + NHL Network Alternate + Nickelodeon East + Nickelodeon West + Nick Jr. + Nicktoons + NRB + OPM TV + Outdoor Channel + Ovation + OWN + OWN West + Oxygen True Crime + Paramount Network + PBSNET + PBS Kids + Penthouse TV + Penthouse TV Monthly Offer + Peru Magico + Playboy TV HD + Playboy TV Monthly Offer + POP + Pursuit Channel + QVC + QVC2 + QVC3 + Reality Kings + ReelzChannel + Revolt HD + ROOT SPORTS Northwest + ROOT Sports Northwest Plus 2 + ROOT SPORTS Northwest Plus + Son Life Broadcasting HD + Science + Scientology Network + SEC Network + SEC Network Alternate + Shop HQ + Shop LC + SHOWTIME 2 + Showtime (E) + Showtime Extreme + Showtime FamilyZone + Showtime Next HD + Showtime Showcase HD + Showtime (W) + SHOxBET + Smithsonian Channel HD + Sony Movies + So Yummy + Spectrum SportsNet + Spectrum SportsNet LA + Sportsman Channel + SportsNet New York + Stadium College Sports Atlantic + Stadium College Sports Central + Stadium College Sports Pacific + STARZ Cinema HD + STARZ Comedy HD + STARZ East + STARZ Edge + STARZ Encore Action + STARZ Encore Black + STARZ Encore Classic + STARZ Encore + STARZ Encore Family + STARZ Encore Suspense + STARZ Encore West + STARZ Encore Westerns + STARZ in Black + STARZ Kids & Family HD + STARZ West + SundanceTV HD + SUR Peru + SYFY + Tastemade + TBS + TBS West HD + TCM + TCT Network + TeenNick + TeleCentro + Telefe + Tennis Channel + Cowboy Channel + TFC - The Filipino Channel (99R) + The Movie Channel East + The Movie Channel West + The Movie Channel Xtra HD + The Weather Channel + The WORD Network + ThrillerMAX HD + TLC + TNT + TNT West HD + Travel Channel + truTV + TV Chile + TVE + TV Land + TV One HD + Universal Kids + Living Faith Network + UPTV + USA Network + VePlus + VH1 + VICE + Videorola + Vivid TV + Vivid TV Monthly Offer + A3 Parkersburg 65 PBS (Virt) + WABC (New York) ABC East + WCBS (New York) CBS East + Parkersburg, WV WCHS ABC 8 SD + WE tv + Parkersburg, WV WIYE CBS 47 A3 HD + WNBC (New York) NBC East + WNYW (New York) FOX East + World Harvest Television + Parkersburg, WV WOVA FOX 22 A3 HD + Parkersburg, WV WTAP NBC 15 A3 HD + Parkersburg, WV WTAPDT2 MNT 17 A3 SD + Once Mexico + Yankee Ent. & Sports (YES) + Azteca America + Bandamax + Canal 22 Internacional + Centroamerica TV + Cine Estelar + Cine Mexicano + Cine Nostalgia + Sony Cine + CNN en Espanol + De Pelicula Clasico + De Pelicula + Discovery en Espanol + Discovery Familia + ESPN Deportes + FOX Deportes + Galavision + God TV + HBO Latino + HITN + Hola TV + Cinemax Latino HD + megaTV + Tr3S + Nat Geo Mundo + Universo + NTN 24 + Pasiones + Nuestra Tele + Starz Encore en Espanol + Telemundo East + Telemundo West + TUDN + TyC Sports + UniMas SD West + Univision East + Univision telenovelas + Univision West + Viendo Movies + WAPA America + ZooMoo + diff --git a/sites/directv.com/directv.com.config.js b/sites/directv.com/directv.com.config.js index f8b805db..3346a06c 100644 --- a/sites/directv.com/directv.com.config.js +++ b/sites/directv.com/directv.com.config.js @@ -13,17 +13,13 @@ module.exports = { ttl: 60 * 60 * 1000 // 1 hour }, headers: { - 'Accept-Language':'en-US,en;q=0.5', - 'Connection':'keep-alive', - }, + 'Accept-Language': 'en-US,en;q=0.5', + Connection: 'keep-alive' + } }, url({ date, channel }) { const [channelId, childId] = channel.site_id.split('#') - return `https://www.directv.com/json/channelschedule?channels=${ - channelId - }&startTime=${date.format()}&hours=24&chId=${ - childId - }` + return `https://www.directv.com/json/channelschedule?channels=${channelId}&startTime=${date.format()}&hours=24&chId=${childId}` }, async parser({ content, channel }) { const programs = [] @@ -52,7 +48,7 @@ module.exports = { }, async channels({ zip }) { const html = await axios - .get(`https://www.directv.com/guide`, { + .get('https://www.directv.com/guide', { headers: { cookie: `dtve-prospect-zip=${zip}` } @@ -62,7 +58,7 @@ module.exports = { const $ = cheerio.load(html) const script = $('#dtvClientData').html() - const [_, json] = script.match(/var dtvClientData = (.*);/) || [null, null] + const [, json] = script.match(/var dtvClientData = (.*);/) || [null, null] const data = JSON.parse(json) let items = data.guideData.channels diff --git a/sites/directv.com/directv.com.test.js b/sites/directv.com/directv.com.test.js index 1ea8c375..d84d8029 100644 --- a/sites/directv.com/directv.com.test.js +++ b/sites/directv.com/directv.com.test.js @@ -1,5 +1,5 @@ // node ./scripts/commands/parse-channels.js --config=./sites/directv.com/directv.com.config.js --output=./sites/directv.com/directv.com.channels.xml --set=zip:10001 -// npx epg-grabber --config=sites/directv.com/directv.com.config.js --channels=sites/directv.com/directv.com.channels.xml --output=guide.xml --days=2 +// npm run grab -- --site=directv.com const { parser, url } = require('./directv.com.config.js') const fs = require('fs') diff --git a/sites/dishtv.in/dishtv.in.channels.xml b/sites/dishtv.in/dishtv.in.channels.xml index 92af0391..ccc25b10 100644 --- a/sites/dishtv.in/dishtv.in.channels.xml +++ b/sites/dishtv.in/dishtv.in.channels.xml @@ -1,460 +1,458 @@ - - - 1 Sports - 9X Jhakaas - 9XM - 9X Tashan - Aaj Tak - Aakaash Aath - Aastha India - Aastha Bhajan - ABP Ananda - ABP Asmita - ABP Ganga - ABP Majha - ABP News India - ABZY COOL - Alankar TV - Aljazeera English - &FLIX - &Pictures - & privé HD - &Tv - Animal Planet India - Argus News - Arihant TV - Asianet - Asianet News - Assam Talks - B4U Bhojpuri - B4U Kadak - B4U Movies India - B4U Music India - Baby TV Asia - Balle Balle - BBC World News South Asia - Bflix Movies - Bhojpuri Cinema - Big Ganga - Big Magic - Bindass - Box Cinema - Cartoon Network India - Channel Divya - Channel WIN - Chardikla Time TV - Cinema TV - CNBC Awaaz - CNBC Bajar - CNBC TV18 - CNN International South Asia - CNN News 18 - Colors - Colors Bangla - Colors Bangla Cinema - COLORS CINEPLEX - Colors Cineplex Bollywood - Colors Gujarati - Colors Gujarati Cinema - Colors Infinity - Colors Marathi - Colors Odia - Colors Rishtey Asia - Comedy Central - CTVN AKD Plus - Dangal TV - DD Arun Prabha - DD Assam - DD Bangla - DD Bharati - DD Bihar - DD Chandana - DD Chhattisgarh - DD Girnar - DD Himachal Pradesh - DD Hissar - DD India - DD Jharkhand - DD Kashir - DD Kisan - DD Madhya Pradesh - DD Malayalam - DD Manipur - DD Meghalaya - DD Mizoram - DD Nagaland - DD National - DD News - DD Odia - DD Podhigai - DD Punjabi - DD Rajasthan - DD Retro - DD Sahyadri - DD Saptagiri - DD Sports - DD Tripura - DD Urdu - DD Uttarakhand - DD Uttar Pradesh - DD Yadagiri - Dhinchaak - Dhinchaak 2 - Dhoom Music - Digi Shala - Discovery Channel India - Discovery Kids India - Discovery Science - Discovery Turbo India - Dish Buzz - Dish Buzz 2 - Disney Channel India - Disney International HD - Disney Junior India - Dr Shuddhi - DY 36 - ENTER 10 BANGLA - Enterr10 Movies - Epic TV - ET Now - ET NOW SWADESH - ETV Telugu - Eurosport India - E-Vidya 6 - EZMall - Fakt Marathi - Filamchi - Flowers TV - Fox life - Gemini TV - GOOD NEWS TODAY - Gubbare - GULISTAN NEWS - Gyandarshan - Hare Krsna TV - History tv 18 - Hungama TV - IBC 24 - ILove - India News - India News Haryana - India News Uttar Pradesh - India Today - India TV - Indradhanu - Investigation Discovery India - Ishara TV - ISHWAR BHAKTI' - Jalsha Movies - Jinvani Channel - Jonack - Jyotish Duniya - Kalinga TV - Kanak News - KBS World - Khushboo TV Bangla - Kolkata TV - Lok Sabha TV - Lokshahi News - Maiboli - Manjari TV - Manoranjan Grand - Manoranjan Movies - Manoranjan TV - Marvel HQ - Mastiii - Mazhavil Manorama - MBC TV - Mh 1 Music - Mirror Now - MNX - Movie Plus - Movies Now - Movies Now + - MTV Beats - MTV India - Music India - Naaptol Tamil - Nandighosha TV - National Geographic Channel - National Geographic Wild - Naxatra News - NDTV 24x7 - NDTV India - Nepal 1 - News 18 Assam & North-East - News 18 Bengali - News 18 Bihar & Jharkhand - News 18 Gujarati - News 18 India - News 18 Lokmat - News 18 Madhya Pradesh & Chhattisgarh - News 18 Odia - News 18 Punjab & Haryana & Himachal Pradesh - News 18 Rajasthan - News 18 Urdu - News 18 Uttar Pradesh & Uttarakhand - News 24 - News Daily 24 - News India 24x7 - News Live - News Nation - News State UP & UK - NewsTime Bangla - News X - Nickelodeon India - Sonic Nickelodeon - Nick HD+ - Nick Jr India - NK TV24X7 - NORTH EAST LIVE - Odisha TV - Paras Gold - Peace of Mind TV - Pitaara - Pogo - Prag News - Prameya News 7 - Prarthana TV - Pratidin Time - Ptc Chakde - PTC Music - PTC News - PTC Punjabi - PTC Punjabi Gold - PTC Simran - Punjabi Hits - Rajya Sabha TV - RAMDHENU - Rang - Rengoni - Republic Bangla - Republic Bharat - Republic TV - Rishtey Cineplex - Romedy Now - Rongeen TV - R Plus - RT News - Rupasi Bangla - Saam TV - Sadhna TV - Sandesh News - Sangeet Bangla - Sangeet Bhojpuri - SANSAD TV HD - Sanskar TV - Santvani Channel - Satsang TV - Shemaroo Marathi Bana - Shemaroo TV - SHOWBOX - Shubh TV - SIDHARTH BHAKTI - Songdew TV - Sony Aath - Sony BBC Earth - SET India - Sony Marathi - Sony Max 2 - Sony Pal - SONY PIX - SONY SAB - SONY SPORTS TEN 1 - SONY SPORTS TEN 2 - SONY SPORTS TEN 3 - SONY SPORTS TEN 5 - Sony Wah - Sony Yay! - SPORTS18 1 - STAR BHARAT - Star Gold - Star Gold 2 - STAR GOLD SELECT - Star Jalsha - Star Maa - Star Maa Movies - Star Movies - STAR MOVIES SELECT - Star Plus - Star Pravah - Star Sports 1 - STAR SPORTS 1 HINDI - Star sports 2 - Star Sports 3 - Star Sports First - STAR SPORTS SELECT 1 - STAR SPORTS SELECT 2 - Star Utsav - Star Utsav Movies - Star World HD India - Star World Premiere HD - Sudarshan News - Sun Bangla - SUN MARATHI - Sun TV - Surya TV - SWADESH NEWS - Swayam Prabha 1 - Swayam Prabha 10 - Swayam Prabha 11 - Swayam Prabha 12 - Swayam Prabha 13 - Swayam Prabha 14 - Swayam Prabha 15 - Swayam Prabha 16 - Swayam Prabha 17 - Swayam Prabha 18 - Swayam Prabha 19 - Swayam Prabha 2 - Swayam Prabha 20 - Swayam Prabha 21 - Swayam Prabha 22 - Swayam Prabha 3 - Swayam Prabha 4 - Swayam Prabha 5 - Swayam Prabha 6 - Swayam Prabha 7 - Swayam Prabha 8 - Swayam Prabha 9 - Tarang Music - Tarang TV - The Q India - Times Now - Times Now World - TLC - Topper TV - Travel XP HD - TV 9 Bangla - TV9 Bharatvash - TV 9 Gujarati - TV 9 Kannada - TV 9 Marathi - Udaya TV - VANDE Gujarat 1 - VANDE Gujarat 10 - VANDE Gujarat 11 - VANDE Gujarat 12 - VANDE Gujarat 13 - VANDE Gujarat 14 - VANDE Gujarat 15 - VANDE Gujarat 16 - VANDE Gujarat 2 - VANDE Gujarat 3 - VANDE Gujarat 4 - VANDE Gujarat 5 - VANDE Gujarat 6 - VANDE Gujarat 7 - VANDE Gujarat 8 - VANDE Gujarat 9 - VEDIC - VH1 India - Vijay TV - VIP NEWS - VTV News - WION - Wow Cinema One - Zee 24 Ghanta - Zee 24 Kalak - Zee 24 Taas - Zee Action - Zee Anmol - Zee Anmol Cinema - ZEE Bangla - Zee Bangla Cinema - Zee Bihar Jharkhand - Zee Biskope - Zee Bollywood - Zee Business - Zee Cafe - Zee Chitramandir - Zee Cinema - Zee Cinema Asia - ZEE CINEMALU - Zee Classic - ZEE DELHI NCR HARYANA - Zee Hindustan - Zee Kannada - Zee Keralam - Zee Madhya Pradesh Chhattisgarh - ZEE Marathi - Zee News - Zee Odisha - Zee Punjab Haryana Himachal - Zee Punjabi - Zee Rajasthan - Zee Salaam - Zee Sarthak - ZEE TALKIES - Zee Tamil - Zee Telugu - Zee TV - Zee Uttar Pradesh Uttarakhand - Zee Vajwa - Zee Yuva - Zee Zest - Zing Asia - Zing Home - Zoom - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1 Sports + 9X Jhakaas + 9XM + 9X Tashan + Aaj Tak + Aakaash Aath + Aastha India + Aastha Bhajan + ABP Ananda + ABP Asmita + ABP Ganga + ABP Majha + ABP News India + ABZY COOL + Alankar TV + Aljazeera English + &FLIX + &Pictures + & privé HD + &Tv + Animal Planet India + Argus News + Arihant TV + Asianet + Asianet News + Assam Talks + B4U Bhojpuri + B4U Kadak + B4U Movies India + B4U Music India + Baby TV Asia + Balle Balle + BBC World News South Asia + Bflix Movies + Bhojpuri Cinema + Big Ganga + Big Magic + Bindass + Box Cinema + Cartoon Network India + Channel Divya + Channel WIN + Chardikla Time TV + Cinema TV + CNBC Awaaz + CNBC Bajar + CNBC TV18 + CNN International South Asia + CNN News 18 + Colors + Colors Bangla + Colors Bangla Cinema + COLORS CINEPLEX + Colors Cineplex Bollywood + Colors Gujarati + Colors Gujarati Cinema + Colors Infinity + Colors Marathi + Colors Odia + Colors Rishtey Asia + Comedy Central + CTVN AKD Plus + Dangal TV + DD Arun Prabha + DD Assam + DD Bangla + DD Bharati + DD Bihar + DD Chandana + DD Chhattisgarh + DD Girnar + DD Himachal Pradesh + DD Hissar + DD India + DD Jharkhand + DD Kashir + DD Kisan + DD Madhya Pradesh + DD Malayalam + DD Manipur + DD Meghalaya + DD Mizoram + DD Nagaland + DD National + DD News + DD Odia + DD Podhigai + DD Punjabi + DD Rajasthan + DD Retro + DD Sahyadri + DD Saptagiri + DD Sports + DD Tripura + DD Urdu + DD Uttarakhand + DD Uttar Pradesh + DD Yadagiri + Dhinchaak + Dhinchaak 2 + Dhoom Music + Digi Shala + Discovery Channel India + Discovery Kids India + Discovery Science + Discovery Turbo India + Dish Buzz + Dish Buzz 2 + Disney Channel India + Disney International HD + Disney Junior India + Dr Shuddhi + DY 36 + ENTER 10 BANGLA + Enterr10 Movies + Epic TV + ET Now + ET NOW SWADESH + ETV Telugu + Eurosport India + E-Vidya 6 + EZMall + Fakt Marathi + Filamchi + Flowers TV + Fox life + Gemini TV + GOOD NEWS TODAY + Gubbare + GULISTAN NEWS + Gyandarshan + Hare Krsna TV + History tv 18 + Hungama TV + IBC 24 + ILove + India News + India News Haryana + India News Uttar Pradesh + India Today + India TV + Indradhanu + Investigation Discovery India + Ishara TV + ISHWAR BHAKTI' + Jalsha Movies + Jinvani Channel + Jonack + Jyotish Duniya + Kalinga TV + Kanak News + KBS World + Khushboo TV Bangla + Kolkata TV + Lok Sabha TV + Lokshahi News + Maiboli + Manjari TV + Manoranjan Grand + Manoranjan Movies + Manoranjan TV + Marvel HQ + Mastiii + Mazhavil Manorama + MBC TV + Mh 1 Music + Mirror Now + MNX + Movie Plus + Movies Now + Movies Now + + MTV Beats + MTV India + Music India + Naaptol Tamil + Nandighosha TV + National Geographic Channel + National Geographic Wild + Naxatra News + NDTV 24x7 + NDTV India + Nepal 1 + News 18 Assam & North-East + News 18 Bengali + News 18 Bihar & Jharkhand + News 18 Gujarati + News 18 India + News 18 Lokmat + News 18 Madhya Pradesh & Chhattisgarh + News 18 Odia + News 18 Punjab & Haryana & Himachal Pradesh + News 18 Rajasthan + News 18 Urdu + News 18 Uttar Pradesh & Uttarakhand + News 24 + News Daily 24 + News India 24x7 + News Live + News Nation + News State UP & UK + NewsTime Bangla + News X + Nickelodeon India + Sonic Nickelodeon + Nick HD+ + Nick Jr India + NK TV24X7 + NORTH EAST LIVE + Odisha TV + Paras Gold + Peace of Mind TV + Pitaara + Pogo + Prag News + Prameya News 7 + Prarthana TV + Pratidin Time + Ptc Chakde + PTC Music + PTC News + PTC Punjabi + PTC Punjabi Gold + PTC Simran + Punjabi Hits + Rajya Sabha TV + RAMDHENU + Rang + Rengoni + Republic Bangla + Republic Bharat + Republic TV + Rishtey Cineplex + Romedy Now + Rongeen TV + R Plus + RT News + Rupasi Bangla + Saam TV + Sadhna TV + Sandesh News + Sangeet Bangla + Sangeet Bhojpuri + SANSAD TV HD + Sanskar TV + Santvani Channel + Satsang TV + Shemaroo Marathi Bana + Shemaroo TV + SHOWBOX + Shubh TV + SIDHARTH BHAKTI + Songdew TV + Sony Aath + Sony BBC Earth + SET India + Sony Marathi + Sony Max 2 + Sony Pal + SONY PIX + SONY SAB + SONY SPORTS TEN 1 + SONY SPORTS TEN 2 + SONY SPORTS TEN 3 + SONY SPORTS TEN 5 + Sony Wah + Sony Yay! + SPORTS18 1 + STAR BHARAT + Star Gold + Star Gold 2 + STAR GOLD SELECT + Star Jalsha + Star Maa + Star Maa Movies + Star Movies + STAR MOVIES SELECT + Star Plus + Star Pravah + Star Sports 1 + STAR SPORTS 1 HINDI + Star sports 2 + Star Sports 3 + Star Sports First + STAR SPORTS SELECT 1 + STAR SPORTS SELECT 2 + Star Utsav + Star Utsav Movies + Star World HD India + Star World Premiere HD + Sudarshan News + Sun Bangla + SUN MARATHI + Sun TV + Surya TV + SWADESH NEWS + Swayam Prabha 1 + Swayam Prabha 10 + Swayam Prabha 11 + Swayam Prabha 12 + Swayam Prabha 13 + Swayam Prabha 14 + Swayam Prabha 15 + Swayam Prabha 16 + Swayam Prabha 17 + Swayam Prabha 18 + Swayam Prabha 19 + Swayam Prabha 2 + Swayam Prabha 20 + Swayam Prabha 21 + Swayam Prabha 22 + Swayam Prabha 3 + Swayam Prabha 4 + Swayam Prabha 5 + Swayam Prabha 6 + Swayam Prabha 7 + Swayam Prabha 8 + Swayam Prabha 9 + Tarang Music + Tarang TV + The Q India + Times Now + Times Now World + TLC + Topper TV + Travel XP HD + TV 9 Bangla + TV9 Bharatvash + TV 9 Gujarati + TV 9 Kannada + TV 9 Marathi + Udaya TV + VANDE Gujarat 1 + VANDE Gujarat 10 + VANDE Gujarat 11 + VANDE Gujarat 12 + VANDE Gujarat 13 + VANDE Gujarat 14 + VANDE Gujarat 15 + VANDE Gujarat 16 + VANDE Gujarat 2 + VANDE Gujarat 3 + VANDE Gujarat 4 + VANDE Gujarat 5 + VANDE Gujarat 6 + VANDE Gujarat 7 + VANDE Gujarat 8 + VANDE Gujarat 9 + VEDIC + VH1 India + Vijay TV + VIP NEWS + VTV News + WION + Wow Cinema One + Zee 24 Ghanta + Zee 24 Kalak + Zee 24 Taas + Zee Action + Zee Anmol + Zee Anmol Cinema + ZEE Bangla + Zee Bangla Cinema + Zee Bihar Jharkhand + Zee Biskope + Zee Bollywood + Zee Business + Zee Cafe + Zee Chitramandir + Zee Cinema + Zee Cinema Asia + ZEE CINEMALU + Zee Classic + ZEE DELHI NCR HARYANA + Zee Hindustan + Zee Kannada + Zee Keralam + Zee Madhya Pradesh Chhattisgarh + ZEE Marathi + Zee News + Zee Odisha + Zee Punjab Haryana Himachal + Zee Punjabi + Zee Rajasthan + Zee Salaam + Zee Sarthak + ZEE TALKIES + Zee Tamil + Zee Telugu + Zee TV + Zee Uttar Pradesh Uttarakhand + Zee Vajwa + Zee Yuva + Zee Zest + Zing Asia + Zing Home + Zoom + diff --git a/sites/dishtv.in/dishtv.in.config.js b/sites/dishtv.in/dishtv.in.config.js index 82ce05bc..1df15998 100644 --- a/sites/dishtv.in/dishtv.in.config.js +++ b/sites/dishtv.in/dishtv.in.config.js @@ -12,7 +12,7 @@ dayjs.extend(customParseFormat) module.exports = { site: 'dishtv.in', days: 2, - url: `https://www.dishtv.in/WhatsonIndiaWebService.asmx/LoadPagginResultDataForProgram`, + url: 'https://www.dishtv.in/WhatsonIndiaWebService.asmx/LoadPagginResultDataForProgram', request: { method: 'POST', data({ channel, date }) { @@ -23,7 +23,7 @@ module.exports = { } } }, - parser: function ({ content, channel, date }) { + parser: function ({ content, date }) { let programs = [] const data = parseContent(content) const items = parseItems(data) @@ -44,7 +44,7 @@ module.exports = { }, async channels() { const channelguide = await axios - .get(`https://www.dishtv.in/channelguide/`) + .get('https://www.dishtv.in/channelguide/') .then(r => r.data) .catch(console.log) const $channelguide = cheerio.load(channelguide) @@ -60,7 +60,7 @@ module.exports = { const channels = {} const channelList = await axios - .post(`https://www.dishtv.in/WebServiceMethod.aspx/GetChannelListFromMobileAPI`, { + .post('https://www.dishtv.in/WebServiceMethod.aspx/GetChannelListFromMobileAPI', { strChannel: '' }) .then(r => r.data) @@ -82,7 +82,7 @@ module.exports = { for (let id of ids) { const promise = axios .post( - `https://www.dishtv.in/WhatsonIndiaWebService.asmx/LoadPagginResultDataForProgram`, + 'https://www.dishtv.in/WhatsonIndiaWebService.asmx/LoadPagginResultDataForProgram', { Channelarr: id, fromdate: date.format('YYYYMMDD[0000]'), @@ -117,10 +117,10 @@ function parseTitle(item) { return $('a').text() } -function parseStart(item, date) { +function parseStart(item) { const $ = cheerio.load(item) const onclick = $('i.fa-circle').attr('onclick') - const [_, time] = onclick.match(/RecordingEnteryOpen\('.*','.*','(.*)','.*',.*\)/) + const [, time] = onclick.match(/RecordingEnteryOpen\('.*','.*','(.*)','.*',.*\)/) return dayjs.tz(time, 'YYYYMMDDHHmm', 'Asia/Kolkata') } diff --git a/sites/dishtv.in/dishtv.in.test.js b/sites/dishtv.in/dishtv.in.test.js index a54bc646..124ffd56 100644 --- a/sites/dishtv.in/dishtv.in.test.js +++ b/sites/dishtv.in/dishtv.in.test.js @@ -1,5 +1,5 @@ // npm run channels:parse -- --config=./sites/dishtv.in/dishtv.in.config.js --output=./sites/dishtv.in/dishtv.in.channels.xml -// npx epg-grabber --config=sites/dishtv.in/dishtv.in.config.js --channels=sites/dishtv.in/dishtv.in.channels.xml --output=guide.xml +// npm run grab -- --site=dishtv.in const { parser, url, request } = require('./dishtv.in.config.js') const dayjs = require('dayjs') @@ -10,7 +10,8 @@ dayjs.extend(utc) const date = dayjs.utc('2021-11-05', 'YYYY-MM-DD').startOf('d') const channel = { site_id: '10000000075992337', xmltv_id: 'WomensActive.in' } -const content = `{"d":"\\u003cdiv class=\\"pgrid\\"\\u003e\\u003cdiv class=\\"img sm-30 grid\\"\\u003e\\u003cimg class=\\"chnl-logo\\" src=\\"http://imagesdishtvd2h.whatsonindia.com/dasimages/channel/landscape/360x270/hiyj8ndf.png\\" onclick=\\"ShowChannelGuid(\\u0027womens-active\\u0027,\\u002710000000075992337\\u0027);\\" /\\u003e\\u003cdiv class=\\"cnl-fav\\"\\u003e\\u003ca href=\\"javascript:;\\"\\u003e\\u003cem\\u003ech. no\\u003c/em\\u003e\\u003cspan\\u003e117\\u003c/span\\u003e\\u003c/a\\u003e\\u003c/div\\u003e\\u003ci class=\\"fa fa-heart Set_Favourite_Channel\\" aria-hidden=\\"true\\" title=\\"Set womens active channel as your favourite channel\\" onclick=\\"SetFavouriteChannel();\\"\\u003e\\u003c/i\\u003e\\u003c/div\\u003e\\u003cdiv class=\\"grid-wrap\\"\\u003e\\u003cdiv class=\\"sm-30 grid datatime\\" data-time=\\"24\\" data-starttime=\\"12:00 AM\\" data-endttime=\\"12:24 AM\\" data-reamintime=\\"0\\"\\u003e\\u003ca title=\\"Event Name: Cynthia Williams - Diwali Look Part 01\\r\\nStart Time: 12:00 AM\\r\\nDuration: 24min\\r\\nSynopsis: Learn diwali look by cynthia williams p1\\r\\n\\" href=\\"javascript:;\\" onclick=\\"ShowCurrentTime(\\u002730000000550913679\\u0027,\\u002710000000075992337\\u0027,\\u0027202111051200\\u0027)\\"\\u003eCynthia Williams - Diwali Look Part 01\\u003c/a\\u003e\\u003cdiv class=\\"cnlSerialIcon\\"\\u003e\\u003ci class=\\"fa fa-heart\\" aria-hidden=\\"true\\" title=\\"Set Favourite Serial\\" onclick=\\"SetFavouriteShow();\\"\\u003e\\u003c/i\\u003e\\u003ci class=\\"fa fa-clock-o\\" aria-hidden=\\"true\\" title=\\"Reminder Serial\\" onclick=\\"ReminderEnteryOpen(\\u002730000000550913679\\u0027,\\u002710000000075992337\\u0027,\\u0027202111050000\\u0027,\\u0027117\\u0027)\\"\\u003e\\u003c/i\\u003e\\u003ci class=\\"fa fa-circle\\" aria-hidden=\\"true\\" title=\\"Record Serial\\" onclick=\\"RecordingEnteryOpen(\\u002730000000550913679\\u0027,\\u002710000000075992337\\u0027,\\u0027202111050000\\u0027,\\u0027117\\u0027,30000000550913679)\\"\\u003e\\u003c/i\\u003e\\u003c/div\\u003e\\u003c/div\\u003e\\u003c/div\\u003e\\u003c/div\\u003e"}` +const content = + '{"d":"\\u003cdiv class=\\"pgrid\\"\\u003e\\u003cdiv class=\\"img sm-30 grid\\"\\u003e\\u003cimg class=\\"chnl-logo\\" src=\\"http://imagesdishtvd2h.whatsonindia.com/dasimages/channel/landscape/360x270/hiyj8ndf.png\\" onclick=\\"ShowChannelGuid(\\u0027womens-active\\u0027,\\u002710000000075992337\\u0027);\\" /\\u003e\\u003cdiv class=\\"cnl-fav\\"\\u003e\\u003ca href=\\"javascript:;\\"\\u003e\\u003cem\\u003ech. no\\u003c/em\\u003e\\u003cspan\\u003e117\\u003c/span\\u003e\\u003c/a\\u003e\\u003c/div\\u003e\\u003ci class=\\"fa fa-heart Set_Favourite_Channel\\" aria-hidden=\\"true\\" title=\\"Set womens active channel as your favourite channel\\" onclick=\\"SetFavouriteChannel();\\"\\u003e\\u003c/i\\u003e\\u003c/div\\u003e\\u003cdiv class=\\"grid-wrap\\"\\u003e\\u003cdiv class=\\"sm-30 grid datatime\\" data-time=\\"24\\" data-starttime=\\"12:00 AM\\" data-endttime=\\"12:24 AM\\" data-reamintime=\\"0\\"\\u003e\\u003ca title=\\"Event Name: Cynthia Williams - Diwali Look Part 01\\r\\nStart Time: 12:00 AM\\r\\nDuration: 24min\\r\\nSynopsis: Learn diwali look by cynthia williams p1\\r\\n\\" href=\\"javascript:;\\" onclick=\\"ShowCurrentTime(\\u002730000000550913679\\u0027,\\u002710000000075992337\\u0027,\\u0027202111051200\\u0027)\\"\\u003eCynthia Williams - Diwali Look Part 01\\u003c/a\\u003e\\u003cdiv class=\\"cnlSerialIcon\\"\\u003e\\u003ci class=\\"fa fa-heart\\" aria-hidden=\\"true\\" title=\\"Set Favourite Serial\\" onclick=\\"SetFavouriteShow();\\"\\u003e\\u003c/i\\u003e\\u003ci class=\\"fa fa-clock-o\\" aria-hidden=\\"true\\" title=\\"Reminder Serial\\" onclick=\\"ReminderEnteryOpen(\\u002730000000550913679\\u0027,\\u002710000000075992337\\u0027,\\u0027202111050000\\u0027,\\u0027117\\u0027)\\"\\u003e\\u003c/i\\u003e\\u003ci class=\\"fa fa-circle\\" aria-hidden=\\"true\\" title=\\"Record Serial\\" onclick=\\"RecordingEnteryOpen(\\u002730000000550913679\\u0027,\\u002710000000075992337\\u0027,\\u0027202111050000\\u0027,\\u0027117\\u0027,30000000550913679)\\"\\u003e\\u003c/i\\u003e\\u003c/div\\u003e\\u003c/div\\u003e\\u003c/div\\u003e\\u003c/div\\u003e"}' it('can generate valid url', () => { expect(url).toBe( @@ -39,6 +40,6 @@ it('can parse response', () => { }) it('can handle empty guide', () => { - const result = parser({ date, channel, content: `{"d":""}` }) + const result = parser({ date, channel, content: '{"d":""}' }) expect(result).toMatchObject([]) }) diff --git a/sites/dsmart.com.tr/dsmart.com.tr.channels.xml b/sites/dsmart.com.tr/dsmart.com.tr.channels.xml index e0cc7b8d..a43880e6 100644 --- a/sites/dsmart.com.tr/dsmart.com.tr.channels.xml +++ b/sites/dsmart.com.tr/dsmart.com.tr.channels.xml @@ -1,207 +1,205 @@ - - - a News - Baby TV - BBC World News - CNN International - Fashion TV - NBA TV - Trace Urban - 24Kitchen - 24 - 360 - a Haber - a Spor - ATV - BBC Earth - BBN Türk - Beyaz TV - Bloomberg HT - Boomerang - Cartoon Network - CNN Türk SD - Çocuk Smart - Da Vinci Learning - Discovery - Discovery Science - Disney Channel - Diyanet Tv - Dizi Smart Max - Dizi Smart Premium - DMAX - DocuBox - Euro D - Eurosport - Eurosport 2 - Fast & Fun - FB TV - FightBox - FilmBox - Flash Haber - FOXCRIME - FOX - FX - Haber Global - Haber Türk - Halk TV - Insight TV - Kanal 7 - Kanal D - Lider Tv - Love Nature - MovieSmart Classic - MovieSmart Premium - MovieSmart Premium 2 - MovieSmart Türk - National Geographic - National Geographic WILD - NTV - NR1 Türk - NR1 - Power TV - Show TV - Sinema TV 1001 - Sinema TV 1002 - Sinema TV 2 - Sinema TV Aile - Sinema TV Aile 2 - Sinema TV Aksiyon - Sinema TV Aksiyon 2 - Sinema TV Comedy - Sinema TV Comedy 2 - Sinema TV - Spor Smart - SPOR SMART 2 - S Sport - S Sport 2 - Star - Nature Escape - TAY TV - Tele 1 - teve2 - TGRT Haber - TLC - TMB - TRT 1 - trt 2 - TRT 3 Spor - TRT 4K - TRT Avaz - TRT Belgesel - TRT Çocuk - TRT Haber - TRT Kurdi - TRT Müzik - TRT Spor - Trt Spor Yıldız - TRT Türk - Tv 100 - TV4 - TV8 - TV 8,5 - TV Net - Uçankuş TV - Ülke TV - Vav Tv - Viasat History - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + a News + Baby TV + BBC World News + CNN International + Fashion TV + NBA TV + Trace Urban + 24Kitchen + 24 + 360 + a Haber + a Spor + ATV + BBC Earth + BBN Türk + Beyaz TV + Bloomberg HT + Boomerang + Cartoon Network + CNN Türk SD + Çocuk Smart + Da Vinci Learning + Discovery + Discovery Science + Disney Channel + Diyanet Tv + Dizi Smart Max + Dizi Smart Premium + DMAX + DocuBox + Euro D + Eurosport + Eurosport 2 + Fast & Fun + FB TV + FightBox + FilmBox + Flash Haber + FOXCRIME + FOX + FX + Haber Global + Haber Türk + Halk TV + Insight TV + Kanal 7 + Kanal D + Lider Tv + Love Nature + MovieSmart Classic + MovieSmart Premium + MovieSmart Premium 2 + MovieSmart Türk + National Geographic + National Geographic WILD + NTV + NR1 Türk + NR1 + Power TV + Show TV + Sinema TV 1001 + Sinema TV 1002 + Sinema TV 2 + Sinema TV Aile + Sinema TV Aile 2 + Sinema TV Aksiyon + Sinema TV Aksiyon 2 + Sinema TV Comedy + Sinema TV Comedy 2 + Sinema TV + Spor Smart + SPOR SMART 2 + S Sport + S Sport 2 + Star + Nature Escape + TAY TV + Tele 1 + teve2 + TGRT Haber + TLC + TMB + TRT 1 + trt 2 + TRT 3 Spor + TRT 4K + TRT Avaz + TRT Belgesel + TRT Çocuk + TRT Haber + TRT Kurdi + TRT Müzik + TRT Spor + Trt Spor Yıldız + TRT Türk + Tv 100 + TV4 + TV8 + TV 8,5 + TV Net + Uçankuş TV + Ülke TV + Vav Tv + Viasat History + diff --git a/sites/dsmart.com.tr/dsmart.com.tr.config.js b/sites/dsmart.com.tr/dsmart.com.tr.config.js index 353aa561..d545e226 100644 --- a/sites/dsmart.com.tr/dsmart.com.tr.config.js +++ b/sites/dsmart.com.tr/dsmart.com.tr.config.js @@ -17,10 +17,9 @@ module.exports = { return `${API_ENDPOINT}?page=${page}&limit=1&day=${date.format('YYYY-MM-DD')}` }, parser: function ({ content, channel }) { - let offset = -1 let programs = [] const items = parseItems(content, channel) - items.forEach((item, i) => { + items.forEach(item => { const prev = programs[programs.length - 1] let start if (prev) { @@ -90,7 +89,7 @@ function parseStart(item, date) { } function parseDuration(item) { - const [_, H, mm, ss] = item.duration.match(/(\d+):(\d+):(\d+)$/) + const [, H, mm, ss] = item.duration.match(/(\d+):(\d+):(\d+)$/) return parseInt(H) * 3600 + parseInt(mm) * 60 + parseInt(ss) } diff --git a/sites/dsmart.com.tr/dsmart.com.tr.test.js b/sites/dsmart.com.tr/dsmart.com.tr.test.js index 34e1b067..0b2cf669 100644 --- a/sites/dsmart.com.tr/dsmart.com.tr.test.js +++ b/sites/dsmart.com.tr/dsmart.com.tr.test.js @@ -1,5 +1,5 @@ // npm run channels:parse -- --config=./sites/dsmart.com.tr/dsmart.com.tr.config.js --output=./sites/dsmart.com.tr/dsmart.com.tr.channels.xml -// npx epg-grabber --config=sites/dsmart.com.tr/dsmart.com.tr.config.js --channels=sites/dsmart.com.tr/dsmart.com.tr.channels.xml --output=guide.xml --timeout=30000 --days=2 +// npm run grab -- --site=dsmart.com.tr const { parser, url } = require('./dsmart.com.tr.config.js') const dayjs = require('dayjs') @@ -35,7 +35,8 @@ it('can parse response', () => { stop: '2023-01-15T23:45:00.000Z', title: 'Bizi Ayıran Her Şey', category: 'sinema/genel', - description: `Issızlığın ortasında yer alan orta sınıf bir evde bir anne kız yaşamaktadır. Çevrelerindeki taşları insanlarla yaşadıkları çatışmalar, anne-kızın hayatını olumsuz yönde etkilemektedir. Kızının ansızın ortadan kaybolması, bu çatışmaların seviyesini artıracak ve anne, kızını bulmak için her türlü yola başvuracaktır.` + description: + 'Issızlığın ortasında yer alan orta sınıf bir evde bir anne kız yaşamaktadır. Çevrelerindeki taşları insanlarla yaşadıkları çatışmalar, anne-kızın hayatını olumsuz yönde etkilemektedir. Kızının ansızın ortadan kaybolması, bu çatışmaların seviyesini artıracak ve anne, kızını bulmak için her türlü yola başvuracaktır.' }) expect(results[1]).toMatchObject({ @@ -43,7 +44,8 @@ it('can parse response', () => { stop: '2023-01-16T01:30:00.000Z', title: 'Pixie', category: 'sinema/genel', - description: `Annesinin intikamını almak isteyen Pixie, dahiyane bir soygun planlar. Fakat işler planladığı gibi gitmeyince kendini İrlanda’nın vahşi gangsterleri tarafından kovalanan iki adamla birlikte kaçarken bulur.` + description: + 'Annesinin intikamını almak isteyen Pixie, dahiyane bir soygun planlar. Fakat işler planladığı gibi gitmeyince kendini İrlanda’nın vahşi gangsterleri tarafından kovalanan iki adamla birlikte kaçarken bulur.' }) expect(results[12]).toMatchObject({ @@ -51,7 +53,8 @@ it('can parse response', () => { stop: '2023-01-16T22:30:00.000Z', title: 'Seberg', category: 'sinema/genel', - description: `Başrolünde ünlü yıldız Kristen Stewart’ın yer aldığı politik gerilim, 1960’ların sonunda insan hakları aktivisti Hakim Jamal ile yaşadığı politik ve romantik ilişki sebebiyle FBI tarafından hedef alınan, Fransız Yeni Dalgası’nın sevilen yüzü ve Serseri Aşıklar’ın yıldızı Jean Seberg’ün çarpıcı hikayesini anlatıyor.` + description: + 'Başrolünde ünlü yıldız Kristen Stewart’ın yer aldığı politik gerilim, 1960’ların sonunda insan hakları aktivisti Hakim Jamal ile yaşadığı politik ve romantik ilişki sebebiyle FBI tarafından hedef alınan, Fransız Yeni Dalgası’nın sevilen yüzü ve Serseri Aşıklar’ın yıldızı Jean Seberg’ün çarpıcı hikayesini anlatıyor.' }) }) diff --git a/sites/dstv.com/dstv.com.channels.xml b/sites/dstv.com/dstv.com.channels.xml index 0340c9ad..ee6ab2f2 100644 --- a/sites/dstv.com/dstv.com.channels.xml +++ b/sites/dstv.com/dstv.com.channels.xml @@ -1,213 +1,211 @@ - - - 1 KZN - 1 Magic - Africa Magic Epic - Africa Magic Family - Africa Magic Hausa - Africa Magic Igbo - Africa Magic Showcase HD - Africa Magic Urban - Africa Magic Yoruba - Africanews - AFRO Music English - AIT - Al Jazeera - Arewa 24 - Arise News - B4U Movies - Bay TV - BBC Brit - BBC Earth HD - BBC Lifestyle - BBC World News - BET - Big Brother Mzansi HD - Bloomberg Television - Boomerang - Business Day - Cape Town TV - Cartoon Network - Cbeebies - CBS Justice - CBS Reality - CCTV 4 - CCTV Entertainment – Mandarin Entertainment Channel - CGTN News - CGTN Documentary - Channel O HD - China Movie Channel - Citi TV - CNBC Africa - CNN International - Comedy Central - Curiosity Channel - Da Vinci Kids - Day Star - Discovery Channel HD - Discovery Family HD - Disney Channel - Disney Junior - Dominion TV - Dove TV - Dumisa - Deutsche Welle - E! Entertainment - eTV Extra HD - Emmanuel TV - eMovies HD - eMovies Extra HD - eNews Channel Africa - ESPN 2 HD - ESPN - eToonz - e.TV HD - eTV Africa - EuroNews - EuroNews French - EuroNews German - Eternal Word Television Network - FAITH - Fashion One - FliekNet HD - Food Network - FOX Life - FOX HD - Galaxy TV - GauTV - Ginx eSports HD - Home and Garden TV HD - HIP TV - The History Channel - Honey - IGNITION - TV Mundial (P) - Discovery ID - ISLAM CHANNEL - Jim Jam - Joy News - K24 - KIX - Kyk NET HD - Kyk NET & Kie HD - KyKNet Nou - LAGOS TV - Lifetime Entertainment - Lumen Christi - Maisha Magic Bongo - Maisha Magic Plus HD - ME Channel - Mindset - MiTV - M-Net Movies 1 West HD - M Movies 1 - M-Net Movies 2 - M-Net Movies 3 - M-Net Movies 4 - M-Net Movies Men of Action HD - M-Net West HD - Moja Love HD - MovieRoom - MTV - MTV base - Mzansi Bioskop - Mzansi Magic HD - Mzansi Music - Mzansi Wethu HD - National Geographic Channel - NatGeo Wild - NDTV 24x7 - Newzroom Afrika - NHK - Nickelodeon - NickJr - NickTOONS - NTA 2 - NTA I - NTA News 24 - NTA Parliament - OGTV - One Gospel - ONMAX - Parliamentary Service - PBS Kids - Peoples Weather - Phoenix News and Entertainment - Cloud Plus - Plus TV Africa - POP Central - RAI International - Real Time - ROK - ROK 2 - ROK GH - Russia Today - SABC 1 HD - SABC 2 HD - SABC 3 HD - SABC News - SBN - SILVERBIRD - Sky News - Sound City - Soweto TV - Spice TV - Star Life - Studio Universal HD - Sunna TV - ACTION - SS Blitz Nigeria - CRICKET - SS Football Nigeria - SS Football Plus Nigeria - GOLF - SS Grandstand Nigeria - SS LaLiga Nigeria - SS Maximo 1 (P) - SS Maximo 2 (P) - MOTORSPORT - SS Premier League Nigeria - PSL - RUGBY - SS Tennis Nigeria - SS Variety 1 Nigeria - SS Variety 2 Nigeria - SS Variety 3 Nigeria - SS Variety 4 Nigeria - TBN - TeleMundo - Televista - TellyTrack - The Home Channel - Discovery TLC HD - TLNovelas - TNT Africa - TRACE Africa - Trace Gospel - Trace Jama - TRACE Muzika - TRACE Mziki - TRACE Naija - TRACE URBAN HD - Travel Channel - Trybe - Tshwane TV - TV5 Monde Afrique - TVC News Nigeria - Lesotho TV - Universal TV - URBAN TV - VIA HD - VUZU HD - WAP TV - Wasafi TV - Wazobia Max - WildEarth - WWE Channel - Zee World - Zhejiang TV - CGTN French - RTPi (P) - - + + 1 KZN + 1 Magic + Africa Magic Epic + Africa Magic Family + Africa Magic Hausa + Africa Magic Igbo + Africa Magic Showcase HD + Africa Magic Urban + Africa Magic Yoruba + Africanews + AFRO Music English + AIT + Al Jazeera + Arewa 24 + Arise News + B4U Movies + Bay TV + BBC Brit + BBC Earth HD + BBC Lifestyle + BBC World News + BET + Big Brother Mzansi HD + Bloomberg Television + Boomerang + Business Day + Cape Town TV + Cartoon Network + Cbeebies + CBS Justice + CBS Reality + CCTV 4 + CCTV Entertainment – Mandarin Entertainment Channel + CGTN News + CGTN Documentary + Channel O HD + China Movie Channel + Citi TV + CNBC Africa + CNN International + Comedy Central + Curiosity Channel + Da Vinci Kids + Day Star + Discovery Channel HD + Discovery Family HD + Disney Channel + Disney Junior + Dominion TV + Dove TV + Dumisa + Deutsche Welle + E! Entertainment + eTV Extra HD + Emmanuel TV + eMovies HD + eMovies Extra HD + eNews Channel Africa + ESPN 2 HD + ESPN + eToonz + e.TV HD + eTV Africa + EuroNews + EuroNews French + EuroNews German + Eternal Word Television Network + FAITH + Fashion One + FliekNet HD + Food Network + FOX Life + FOX HD + Galaxy TV + GauTV + Ginx eSports HD + Home and Garden TV HD + HIP TV + The History Channel + Honey + IGNITION + TV Mundial (P) + Discovery ID + ISLAM CHANNEL + Jim Jam + Joy News + K24 + KIX + Kyk NET HD + Kyk NET & Kie HD + KyKNet Nou + LAGOS TV + Lifetime Entertainment + Lumen Christi + Maisha Magic Bongo + Maisha Magic Plus HD + ME Channel + Mindset + MiTV + M-Net Movies 1 West HD + M Movies 1 + M-Net Movies 2 + M-Net Movies 3 + M-Net Movies 4 + M-Net Movies Men of Action HD + M-Net West HD + Moja Love HD + MovieRoom + MTV + MTV base + Mzansi Bioskop + Mzansi Magic HD + Mzansi Music + Mzansi Wethu HD + National Geographic Channel + NatGeo Wild + NDTV 24x7 + Newzroom Afrika + NHK + Nickelodeon + NickJr + NickTOONS + NTA 2 + NTA I + NTA News 24 + NTA Parliament + OGTV + One Gospel + ONMAX + Parliamentary Service + PBS Kids + Peoples Weather + Phoenix News and Entertainment + Cloud Plus + Plus TV Africa + POP Central + RAI International + Real Time + ROK + ROK 2 + ROK GH + Russia Today + SABC 1 HD + SABC 2 HD + SABC 3 HD + SABC News + SBN + SILVERBIRD + Sky News + Sound City + Soweto TV + Spice TV + Star Life + Studio Universal HD + Sunna TV + ACTION + SS Blitz Nigeria + CRICKET + SS Football Nigeria + SS Football Plus Nigeria + GOLF + SS Grandstand Nigeria + SS LaLiga Nigeria + SS Maximo 1 (P) + SS Maximo 2 (P) + MOTORSPORT + SS Premier League Nigeria + PSL + RUGBY + SS Tennis Nigeria + SS Variety 1 Nigeria + SS Variety 2 Nigeria + SS Variety 3 Nigeria + SS Variety 4 Nigeria + TBN + TeleMundo + Televista + TellyTrack + The Home Channel + Discovery TLC HD + TLNovelas + TNT Africa + TRACE Africa + Trace Gospel + Trace Jama + TRACE Muzika + TRACE Mziki + TRACE Naija + TRACE URBAN HD + Travel Channel + Trybe + Tshwane TV + TV5 Monde Afrique + TVC News Nigeria + Lesotho TV + Universal TV + URBAN TV + VIA HD + VUZU HD + WAP TV + Wasafi TV + Wazobia Max + WildEarth + WWE Channel + Zee World + Zhejiang TV + CGTN French + RTPi (P) + diff --git a/sites/dstv.com/dstv.com.config.js b/sites/dstv.com/dstv.com.config.js index a53b6103..8f7e62ae 100644 --- a/sites/dstv.com/dstv.com.config.js +++ b/sites/dstv.com/dstv.com.config.js @@ -27,7 +27,7 @@ module.exports = { 'YYYY-MM-DD' )}${packageName}&country=${region}` }, - async parser({ content, channel, cached }) { + async parser({ content, channel }) { let programs = [] const items = parseItems(content, channel) for (const item of items) { @@ -91,7 +91,7 @@ async function loadProgramDetails(item) { } function parseItems(content, channel) { - const [_, channelId] = channel.site_id.split('#') + const [, channelId] = channel.site_id.split('#') const data = JSON.parse(content) if (!data || !Array.isArray(data.Channels)) return [] const channelData = data.Channels.find(c => c.Number === channelId) diff --git a/sites/dstv.com/dstv.com.test.js b/sites/dstv.com/dstv.com.test.js index c796b2b0..b18bb6ab 100644 --- a/sites/dstv.com/dstv.com.test.js +++ b/sites/dstv.com/dstv.com.test.js @@ -1,5 +1,5 @@ // npm run channels:parse -- --config=./sites/dstv.com/dstv.com.config.js --output=./sites/dstv.com/dstv.com.channels.xml --set=country:zaf -// npx epg-grabber --config=sites/dstv.com/dstv.com.config.js --channels=sites/dstv.com/dstv.com.channels.xml --output=guide.xml --days=2 +// npm run grab -- --site=dstv.com const { parser, url } = require('./dstv.com.config.js') const axios = require('axios') @@ -101,7 +101,7 @@ it('can parse response for NG', async () => { it('can handle empty guide', done => { parser({ - content: `{"Total":0,"Channels":[]}`, + content: '{"Total":0,"Channels":[]}', channel: channelZA }) .then(result => { diff --git a/sites/elcinema.com/elcinema.com.channels.xml b/sites/elcinema.com/elcinema.com.channels.xml index ec2f3d13..83e36b51 100644 --- a/sites/elcinema.com/elcinema.com.channels.xml +++ b/sites/elcinema.com/elcinema.com.channels.xml @@ -1,238 +1,236 @@ - - - 2M Monde - Abu Dhabi Drama - Abu Dhabi TV - Al Aoula Middle East - Al Araby 2 TV - Al Dafrah TV - Al Hayat - Al Jadeed - Al Kahera Wal Nas - Al Kahera Wal Nas TV 2 - Al-Manar TV - Al-Nahar TV - Al-Nahar Drama - Alrai TV - Al Rasheed TV - Al-Saeedah - Al Safwa - Saudi TV - Alsharqiya TV - Alsumaria - Al Yawm - Amman TV - ART Aflam 1 - ART Aflam 2 - ART Cinema - ART Hekayat - ART Hekayat 2 - BeIn Drama 1 - BeIn Movies Premiere - BeIn Movies Action - BeIn Movies Drama - BeIn Movies Family - BeIn Series 1 - BeIn Series 2 - Cartoon Network Arabic - CBC - CBC Drama - CBC Sofra - Cima - Cinema 1 - Cinema 2 - Discovery Channel Middle East & Africa - Disney Channel Middle East - DMC - DMC Drama - Dubai One - Dubai TV - Dubai Zaman - Echorouk TV - El Mehwar Channel - Watania 1 - Emarat TV - E! Middle East - ETC TV - Fann - FX - IFilm Arabic - Kuwait TV - KTV Al Qurain - KTV Khallik Bilbait - Lana TV - LBC - LBC International - Maspero Zaman - MBC - MBC 2 - MBC 3 - MBC 4 - MBC 5 - MBC Action - MBC Bollywood - MBC Drama - MBC Maser - MBC Maser 2 - MBC Max - MBC Drama + - Mix Bel Araby - Mix Hollywood - MTV Alloubnaniya - Musawa - National Geographic Abu Dhabi - National Geographic Middle East - Nessma - Nile Comedy - Nile Drama - On Drama - On E - OSN Comedy - OSN Kids - OSN Action - OSN Movies - OSN Ya Hala - Rotana Cinema Egypt - Rotana Cinema KSA - Rotana Classic - Rotana Comedy - Rotana Drama - Rotana Khalijia - Rotana Kids - Rotana+ HD - Sada Elbalad - Sada Elbalad 2 - Sada Elbalad Drama - Sama Dubai - Sama TV - SBC - Sharjah TV - Star Movies Middle East - Star World Middle East - Syria Drama - Syria TV - Ten - Thikrayat TV - UTV - Watania 2 - Zee Aflam - Zee Alwan - 2M Monde - Abu Dhabi Drama - Abu Dhabi TV - Al Aoula Middle East - Al Araby 2 TV - Al Dafrah TV - Al Hayat - Al Jadeed - Al Kahera Wal Nas - Al Kahera Wal Nas TV 2 - Al-Manar TV - Al-Nahar TV - Al-Nahar Drama - Alrai TV - Al Rasheed TV - Al-Saeedah - Al Safwa - Saudi TV - Alsharqiya TV - Alsumaria - Al Yawm - Amman TV - ART Aflam 1 - ART Aflam 2 - ART Cinema - ART Hekayat - ART Hekayat 2 - BeIn Drama 1 - BeIn Movies Premiere - BeIn Movies Action - BeIn Movies Drama - BeIn Movies Family - BeIn Series 1 - BeIn Series 2 - Cartoon Network Arabic - CBC - CBC Drama - CBC Sofra - Cima - Cinema 1 - Cinema 2 - Discovery Channel Middle East & Africa - Disney Channel Middle East - DMC - DMC Drama - Dubai One - Dubai TV - Dubai Zaman - Echorouk TV - El Mehwar Channel - Watania 1 - Emarat TV - E! Middle East - ETC TV - Fann - FX - IFilm Arabic - Kuwait TV - KTV Al Qurain - KTV Khallik Bilbait - Lana TV - LBC - Maspero Zaman - MBC - MBC 2 - MBC 3 - MBC 4 - MBC 5 - MBC Action - MBC Bollywood - MBC Drama - MBC Maser - MBC Maser 2 - MBC Max - MBC Drama + - Mix Bel Araby - Mix Hollywood - MTV Alloubnaniya - Musawa - National Geographic Abu Dhabi - National Geographic Middle East - Nessma - Nile Comedy - Nile Drama - On Drama - On E - OSN Comedy - OSN Kids - OSN Action - OSN Movies - OSN Ya Hala - Rotana Cinema Egypt - Rotana Cinema KSA - Rotana Classic - Rotana Comedy - Rotana Drama - Rotana Khalijia - Rotana Kids - Rotana+ HD - Sada Elbalad - Sada Elbalad 2 - Sada Elbalad Drama - Sama Dubai - Sama TV - SBC - Sharjah TV - Star Movies Middle East - Star World Middle East - Syria Drama - Syria TV - Ten - Thikrayat TV - UTV - Watania 2 - Zee Aflam - Zee Alwan - - \ No newline at end of file + + 2M Monde + Abu Dhabi Drama + Abu Dhabi TV + Al Aoula Middle East + Al Araby 2 TV + Al Dafrah TV + Al Hayat + Al Jadeed + Al Kahera Wal Nas + Al Kahera Wal Nas TV 2 + Al-Manar TV + Al-Nahar TV + Al-Nahar Drama + Alrai TV + Al Rasheed TV + Al-Saeedah + Al Safwa + Saudi TV + Alsharqiya TV + Alsumaria + Al Yawm + Amman TV + ART Aflam 1 + ART Aflam 2 + ART Cinema + ART Hekayat + ART Hekayat 2 + BeIn Drama 1 + BeIn Movies Premiere + BeIn Movies Action + BeIn Movies Drama + BeIn Movies Family + BeIn Series 1 + BeIn Series 2 + Cartoon Network Arabic + CBC + CBC Drama + CBC Sofra + Cima + Cinema 1 + Cinema 2 + Discovery Channel Middle East & Africa + Disney Channel Middle East + DMC + DMC Drama + Dubai One + Dubai TV + Dubai Zaman + Echorouk TV + El Mehwar Channel + Watania 1 + Emarat TV + E! Middle East + ETC TV + Fann + FX + IFilm Arabic + Kuwait TV + KTV Al Qurain + KTV Khallik Bilbait + Lana TV + LBC + LBC International + Maspero Zaman + MBC + MBC 2 + MBC 3 + MBC 4 + MBC 5 + MBC Action + MBC Bollywood + MBC Drama + MBC Maser + MBC Maser 2 + MBC Max + MBC Drama + + Mix Bel Araby + Mix Hollywood + MTV Alloubnaniya + Musawa + National Geographic Abu Dhabi + National Geographic Middle East + Nessma + Nile Comedy + Nile Drama + On Drama + On E + OSN Comedy + OSN Kids + OSN Action + OSN Movies + OSN Ya Hala + Rotana Cinema Egypt + Rotana Cinema KSA + Rotana Classic + Rotana Comedy + Rotana Drama + Rotana Khalijia + Rotana Kids + Rotana+ HD + Sada Elbalad + Sada Elbalad 2 + Sada Elbalad Drama + Sama Dubai + Sama TV + SBC + Sharjah TV + Star Movies Middle East + Star World Middle East + Syria Drama + Syria TV + Ten + Thikrayat TV + UTV + Watania 2 + Zee Aflam + Zee Alwan + 2M Monde + Abu Dhabi Drama + Abu Dhabi TV + Al Aoula Middle East + Al Araby 2 TV + Al Dafrah TV + Al Hayat + Al Jadeed + Al Kahera Wal Nas + Al Kahera Wal Nas TV 2 + Al-Manar TV + Al-Nahar TV + Al-Nahar Drama + Alrai TV + Al Rasheed TV + Al-Saeedah + Al Safwa + Saudi TV + Alsharqiya TV + Alsumaria + Al Yawm + Amman TV + ART Aflam 1 + ART Aflam 2 + ART Cinema + ART Hekayat + ART Hekayat 2 + BeIn Drama 1 + BeIn Movies Premiere + BeIn Movies Action + BeIn Movies Drama + BeIn Movies Family + BeIn Series 1 + BeIn Series 2 + Cartoon Network Arabic + CBC + CBC Drama + CBC Sofra + Cima + Cinema 1 + Cinema 2 + Discovery Channel Middle East & Africa + Disney Channel Middle East + DMC + DMC Drama + Dubai One + Dubai TV + Dubai Zaman + Echorouk TV + El Mehwar Channel + Watania 1 + Emarat TV + E! Middle East + ETC TV + Fann + FX + IFilm Arabic + Kuwait TV + KTV Al Qurain + KTV Khallik Bilbait + Lana TV + LBC + Maspero Zaman + MBC + MBC 2 + MBC 3 + MBC 4 + MBC 5 + MBC Action + MBC Bollywood + MBC Drama + MBC Maser + MBC Maser 2 + MBC Max + MBC Drama + + Mix Bel Araby + Mix Hollywood + MTV Alloubnaniya + Musawa + National Geographic Abu Dhabi + National Geographic Middle East + Nessma + Nile Comedy + Nile Drama + On Drama + On E + OSN Comedy + OSN Kids + OSN Action + OSN Movies + OSN Ya Hala + Rotana Cinema Egypt + Rotana Cinema KSA + Rotana Classic + Rotana Comedy + Rotana Drama + Rotana Khalijia + Rotana Kids + Rotana+ HD + Sada Elbalad + Sada Elbalad 2 + Sada Elbalad Drama + Sama Dubai + Sama TV + SBC + Sharjah TV + Star Movies Middle East + Star World Middle East + Syria Drama + Syria TV + Ten + Thikrayat TV + UTV + Watania 2 + Zee Aflam + Zee Alwan + \ No newline at end of file diff --git a/sites/elcinema.com/elcinema.com.config.js b/sites/elcinema.com/elcinema.com.config.js index 5271e598..878362f9 100644 --- a/sites/elcinema.com/elcinema.com.config.js +++ b/sites/elcinema.com/elcinema.com.config.js @@ -11,7 +11,6 @@ dayjs.extend(utc) module.exports = { site: 'elcinema.com', - skip: true, // NOTE: the guide shows the wrong time (https://github.com/iptv-org/epg/issues/994) days: 2, url({ channel }) { const lang = channel.lang === 'en' ? 'en/' : '/' diff --git a/sites/elcinema.com/elcinema.com.test.js b/sites/elcinema.com/elcinema.com.test.js index a64a4eb8..d7ea6e93 100644 --- a/sites/elcinema.com/elcinema.com.test.js +++ b/sites/elcinema.com/elcinema.com.test.js @@ -1,6 +1,6 @@ -// npx epg-grabber --config=sites/elcinema.com/elcinema.com.config.js --channels=sites/elcinema.com/elcinema.com.channels.xml --output=guide.xml --days=2 +// npm run grab -- --site=elcinema.com -const { parser, url, request } = require('./elcinema.com.config.js') +const { parser, url } = require('./elcinema.com.config.js') const fs = require('fs') const path = require('path') const dayjs = require('dayjs') @@ -63,7 +63,7 @@ it('can handle empty guide', () => { const result = parser({ date, channel: channelEN, - content: `` + content: '' }) expect(result).toMatchObject([]) }) diff --git a/sites/ena.skylifetv.co.kr/ena.skylifetv.co.kr.channels.xml b/sites/ena.skylifetv.co.kr/ena.skylifetv.co.kr.channels.xml index a01dc207..1af380ed 100644 --- a/sites/ena.skylifetv.co.kr/ena.skylifetv.co.kr.channels.xml +++ b/sites/ena.skylifetv.co.kr/ena.skylifetv.co.kr.channels.xml @@ -1,11 +1,9 @@ - - - ENA - ENA PLAY - kids talk talk plus - OLIFE - ONCE - skyUHD - - + + ENA + ENA PLAY + kids talk talk plus + OLIFE + ONCE + skyUHD + diff --git a/sites/ena.skylifetv.co.kr/ena.skylifetv.co.kr.config.js b/sites/ena.skylifetv.co.kr/ena.skylifetv.co.kr.config.js index 86e3791f..d8401689 100644 --- a/sites/ena.skylifetv.co.kr/ena.skylifetv.co.kr.config.js +++ b/sites/ena.skylifetv.co.kr/ena.skylifetv.co.kr.config.js @@ -61,7 +61,7 @@ function parseStart($item, date) { return dayjs.tz(`${date.format('YYYY-MM-DD')} ${time}`, 'YYYY-MM-DD HH:mm', 'Asia/Seoul') } -function parseItems(content, channel, date) { +function parseItems(content) { const $ = cheerio.load(content) return $('.tbl_schedule > tbody > tr').toArray() diff --git a/sites/ena.skylifetv.co.kr/ena.skylifetv.co.kr.test.js b/sites/ena.skylifetv.co.kr/ena.skylifetv.co.kr.test.js index ecf7e5ae..12c9255c 100644 --- a/sites/ena.skylifetv.co.kr/ena.skylifetv.co.kr.test.js +++ b/sites/ena.skylifetv.co.kr/ena.skylifetv.co.kr.test.js @@ -1,4 +1,4 @@ -// npx epg-grabber --config=sites/ena.skylifetv.co.kr/ena.skylifetv.co.kr.config.js --channels=sites/ena.skylifetv.co.kr/ena.skylifetv.co.kr.channels.xml --output=guide.xml --days=2 +// npm run grab -- --site=ena.skylifetv.co.kr const { parser, url } = require('./ena.skylifetv.co.kr.config.js') const fs = require('fs') @@ -31,7 +31,7 @@ it('can parse response', () => { expect(results[0]).toMatchObject({ start: '2023-01-26T16:05:00.000Z', stop: '2023-01-26T17:20:00.000Z', - title: `법쩐 6화`, + title: '법쩐 6화', rating: { system: 'KMRB', value: '15' @@ -41,7 +41,7 @@ it('can parse response', () => { expect(results[17]).toMatchObject({ start: '2023-01-27T14:10:00.000Z', stop: '2023-01-27T15:25:00.000Z', - title: `남이 될 수 있을까 4화`, + title: '남이 될 수 있을까 4화', rating: { system: 'KMRB', value: '15' diff --git a/sites/entertainment.ie/entertainment.ie.channels.xml b/sites/entertainment.ie/entertainment.ie.channels.xml index f5f18067..f4201bbb 100644 --- a/sites/entertainment.ie/entertainment.ie.channels.xml +++ b/sites/entertainment.ie/entertainment.ie.channels.xml @@ -1,113 +1,111 @@ - - - - - - - - - - - - - - - - 4Music - Alibi - Animal Planet - BBC Four - BBC Three - Boomerang - Box Nation - Cartoon Network - CBBC - CBeebies - CBS Drama - CBS Reality - Challenge - Channel 4 - Channel 5 - Comedy Central Extra - Comedy Central - Dave - Discovery Channel - Discovery History - Discovery Science - Discovery Turbo - DMAX - Drama - E4 - E4 Extra - Eden - Eurosport 1 - Eurosport 2 - Free Sports - GOLD - Great! Movies - Great! TV - HorrorXtra - Investigation Discovery - ITV2 - ITV3 - ITV4 - La Liga TV - Legend - More4 - MTV - National Geographic - National Geographic Wild - Nickelodeon - Nicktoons - Pick - Premier Sports 1 - Premier Sports 2 - Really - RTÉ2 - RTÉ Jr - RTÉ One - Sky Arts - Sky Atlantic - Sky Cinema Comedy - Sky Cinema Drama - Sky Cinema Family - Sky Cinema Greats - Sky Cinema Hits - Sky Cinema Premiere - Sky Cinema Sci-Fi - Horror - Sky Cinema Thriller - Sky Comedy - Sky Crime - Sky Documentaries - Sky History - Sky History 2 - Sky Max - Sky Nature - Sky Replay - Sky Sci-Fi - Sky Showcase - Sky Sports Arena HD - Sky Sports Cricket - Sky Sports Football - Sky Sports Golf - Sky Sports Main Event - Sky Sports Mix - Sky Sports NFL - Sky Sports Premier League ROI - Sky Witness - TG4 - TLC - TNT Sports 1 - TNT Sports 2 - TNT Sports 3 - UTV - Virgin Media Four - Virgin Media More - Virgin Media One - Virgin Media Three - Virgin Media Two - W - Yesterday - - + + + + + + + + + + + + + + + 4Music + Alibi + Animal Planet + BBC Four + BBC Three + Boomerang + Box Nation + Cartoon Network + CBBC + CBeebies + CBS Drama + CBS Reality + Challenge + Channel 4 + Channel 5 + Comedy Central Extra + Comedy Central + Dave + Discovery Channel + Discovery History + Discovery Science + Discovery Turbo + DMAX + Drama + E4 + E4 Extra + Eden + Eurosport 1 + Eurosport 2 + Free Sports + GOLD + Great! Movies + Great! TV + HorrorXtra + Investigation Discovery + ITV2 + ITV3 + ITV4 + La Liga TV + Legend + More4 + MTV + National Geographic + National Geographic Wild + Nickelodeon + Nicktoons + Pick + Premier Sports 1 + Premier Sports 2 + Really + RTÉ2 + RTÉ Jr + RTÉ One + Sky Arts + Sky Atlantic + Sky Cinema Comedy + Sky Cinema Drama + Sky Cinema Family + Sky Cinema Greats + Sky Cinema Hits + Sky Cinema Premiere + Sky Cinema Sci-Fi - Horror + Sky Cinema Thriller + Sky Comedy + Sky Crime + Sky Documentaries + Sky History + Sky History 2 + Sky Max + Sky Nature + Sky Replay + Sky Sci-Fi + Sky Showcase + Sky Sports Arena HD + Sky Sports Cricket + Sky Sports Football + Sky Sports Golf + Sky Sports Main Event + Sky Sports Mix + Sky Sports NFL + Sky Sports Premier League ROI + Sky Witness + TG4 + TLC + TNT Sports 1 + TNT Sports 2 + TNT Sports 3 + UTV + Virgin Media Four + Virgin Media More + Virgin Media One + Virgin Media Three + Virgin Media Two + W + Yesterday + diff --git a/sites/entertainment.ie/entertainment.ie.config.js b/sites/entertainment.ie/entertainment.ie.config.js index 337c7872..0ac331d1 100644 --- a/sites/entertainment.ie/entertainment.ie.config.js +++ b/sites/entertainment.ie/entertainment.ie.config.js @@ -37,7 +37,7 @@ module.exports = { }, async channels() { const data = await axios - .get(`https://entertainment.ie/tv/all-channels/`) + .get('https://entertainment.ie/tv/all-channels/') .then(r => r.data) .catch(console.log) const $ = cheerio.load(data) @@ -73,7 +73,7 @@ function parseCategories($item) { function parseStart($item, date) { let d = $item('.text-holder > .btn-hold > .btn-wrap > a.btn-share').data('time') - let [_, time] = d ? d.split(', ') : [null, null] + let [, time] = d ? d.split(', ') : [null, null] return time ? DateTime.fromFormat(`${date.format('YYYY-MM-DD')} ${time}`, 'yyyy-MM-dd HH:mm', { @@ -91,5 +91,5 @@ function parseDuration($item) { function parseItems(content) { const $ = cheerio.load(content) - return $(`.info-list > li`).toArray() + return $('.info-list > li').toArray() } diff --git a/sites/entertainment.ie/entertainment.ie.test.js b/sites/entertainment.ie/entertainment.ie.test.js index c88911a1..4f027098 100644 --- a/sites/entertainment.ie/entertainment.ie.test.js +++ b/sites/entertainment.ie/entertainment.ie.test.js @@ -1,5 +1,5 @@ // npm run channels:parse -- --config=./sites/entertainment.ie/entertainment.ie.config.js --output=./sites/entertainment.ie/entertainment.ie.channels.xml -// npx epg-grabber --config=sites/entertainment.ie/entertainment.ie.config.js --channels=sites/entertainment.ie/entertainment.ie.channels.xml --output=guide.xml +// npm run grab -- --site=entertainment.ie const fs = require('fs') const path = require('path') diff --git a/sites/epg.i-cable.com/epg.i-cable.com.channels.xml b/sites/epg.i-cable.com/epg.i-cable.com.channels.xml index 6d34440a..a5567e69 100644 --- a/sites/epg.i-cable.com/epg.i-cable.com.channels.xml +++ b/sites/epg.i-cable.com/epg.i-cable.com.channels.xml @@ -1,168 +1,166 @@ - - - ABC Australia - Al Jazeera English - Animal Planet - Arirang TV - Asian Food Network [HD] - BBC Earth - BBC Lifestyle - BBC WorldNews - Bloomberg TV - Boomerang - Cartoon Network - CBeebies - CCTV-1 [HD] - CCTV-11-Opera - CCTV-News - CCTV-4 - CGTN - CGTN-Documentary [HD] - Channel Blue - Channel Fire - Ch News Asia - CNBC HK - CNNI - Da Vinci - Discovery Asia [HD] - Discovery - Discovery Sci - DMAX - Dragon TV - DreamWorks - DW (Deutsch) - DW (English) - Asia YOYO TV - ETTV AsiaNews - ETTV Asia - euronews(Eng) - euronews(Por) - Eurosport - EVE - Fashion TV - FIGHT SPORTS - France 24 English - France 24 French - Global Trekker [HD] - GRT GBA Satellite TV - HITS [HD] - HITS MOVIES [HD] - HK Int’l Business Ch - CNN HLN News - HOY TV - Hubei TV - Hunan TV International - CABLE Movies - Channel 18 - Cine p. - Family Entertainment Channel - i-CABLE Finance Info Channel - HD Channel 603 [HD] - Horse Racing 1 - Horse Racing 2 - i-CABLE Live News Channel - i-CABLE News Channel - Sports Channel - Sports Plus 1 - Sports Plus 2 - Sports Plus 3 - LFCTV - MTV Live - MyCineEu - National Geographic - Nat Geo Wild - NHK World-Japan - NHK World Pr - Nickelodeon - Nick Jr. - Outdoor Channel - Paramount Network Asia [HD] - Pet Club TV - Phoenix Chi - Phoenix Hong Kong Channel - PhoenixInfonews - ROCK Entertainment - ROCK Extreme [HD] - Russia Today - SZTV - Sky News - STAR Chinese Channel - Star Chinese Movies [HD] - TechStorm [HD] - Thrill - TLC - Travel Channel [HD] - tvN - WION - Zee Cinema - Zee TV - Zing - 動物星球頻道 - 亞洲美食頻道 [HD] - BBC Earth - BBC Lifestyle - Bloomberg TV - Boomerang 頻道 - 卡通頻道 - 中央電視台綜合頻道 [HD] - 中央電視台戲曲頻道 - 中央電視台新聞頻道 - 中央電視台中文國際頻道 - 歡樂台 - 惹火台 - 亞洲新聞台 - Discovery Asia [HD] - Discovery - Discovery科學頻道 - DMAX - 東方衛視國際頻道 - 夢工廠 - 東森亞洲衛視 - 東森亞洲幼幼台 - 東森亞洲新聞台 - euronews(Eng) - euronews(Por) - EVE - Global Trekker [HD] - 大灣區衛視 - HITS [HD] - HITS MOVIES [HD] - 香港國際財經台 - HOY TV - 湖北衛視 - 湖南廣播電視台國際頻道 - 有線電影台 - 有線18台 - Cine p. - 綜合娛樂台 - 財經資訊台 - 高清603台 [HD] - 賽馬1台 - 賽馬2台 - 直播新聞台 - 新聞台 - 體育台 - Sports Plus 1 - Sports Plus 2 - Sports Plus 3 - 光影歐洲 - 國家地理頻道 - 國家地理野生頻道 - Nickelodeon - Paramount Network Asia [HD] - 鳯凰衛視中文台 - 鳳凰衛視香港台 - 鳳凰衛視資訊台 - ROCK綜藝娛樂 - ROCK超極娛樂 [HD] - 深圳電視台 - 衛視中文台 - 衛視電影台 [HD] - 驚慄電影台 - 旅遊生活頻道 - 旅遊頻道 [HD] - tvN - Zee Cinema - - + + DW (Deutsch) + ABC Australia + Al Jazeera English + Animal Planet + Arirang TV + Asian Food Network [HD] + BBC Earth + BBC Lifestyle + BBC WorldNews + Bloomberg TV + Boomerang + Cartoon Network + CBeebies + CCTV-1 [HD] + CCTV-11-Opera + CCTV-News + CCTV-4 + CGTN + CGTN-Documentary [HD] + Channel Blue + Channel Fire + Ch News Asia + CNBC HK + CNNI + Da Vinci + Discovery Asia [HD] + Discovery + Discovery Sci + DMAX + Dragon TV + DreamWorks + DW (English) + ETTV Asia + Asia YOYO TV + ETTV AsiaNews + euronews(Eng) + euronews(Por) + Eurosport + EVE + Fashion TV + FIGHT SPORTS + France 24 English + Global Trekker [HD] + GRT GBA Satellite TV + HITS [HD] + HITS MOVIES [HD] + HK Int’l Business Ch + CNN HLN News + HOY TV + Hubei TV + Hunan TV International + CABLE Movies + Channel 18 + Cine p. + Family Entertainment Channel + i-CABLE Finance Info Channel + HD Channel 603 [HD] + Horse Racing 1 + Horse Racing 2 + i-CABLE Live News Channel + i-CABLE News Channel + Sports Channel + Sports Plus 1 + Sports Plus 2 + Sports Plus 3 + LFCTV + MTV Live + MyCineEu + National Geographic + Nat Geo Wild + NHK World-Japan + NHK World Pr + Nickelodeon + Nick Jr. + Outdoor Channel + Paramount Network Asia [HD] + Pet Club TV + Phoenix Chi + Phoenix Hong Kong Channel + PhoenixInfonews + ROCK Entertainment + ROCK Extreme [HD] + Russia Today + SZTV + Sky News + STAR Chinese Channel + Star Chinese Movies [HD] + TechStorm [HD] + Thrill + TLC + Travel Channel [HD] + tvN + WION + Zee Cinema + Zing + France 24 French + Zee TV + 動物星球頻道 + 亞洲美食頻道 [HD] + BBC Earth + BBC Lifestyle + Bloomberg TV + Boomerang 頻道 + 卡通頻道 + 中央電視台綜合頻道 [HD] + 中央電視台戲曲頻道 + 中央電視台新聞頻道 + 中央電視台中文國際頻道 + 歡樂台 + 惹火台 + 亞洲新聞台 + Discovery Asia [HD] + Discovery + Discovery科學頻道 + DMAX + 東方衛視國際頻道 + 夢工廠 + 東森亞洲衛視 + 東森亞洲幼幼台 + 東森亞洲新聞台 + euronews(Eng) + euronews(Por) + EVE + Global Trekker [HD] + 大灣區衛視 + HITS [HD] + HITS MOVIES [HD] + 香港國際財經台 + HOY TV + 湖北衛視 + 湖南廣播電視台國際頻道 + 有線電影台 + 有線18台 + Cine p. + 綜合娛樂台 + 財經資訊台 + 高清603台 [HD] + 賽馬1台 + 賽馬2台 + 直播新聞台 + 新聞台 + 體育台 + Sports Plus 1 + Sports Plus 2 + Sports Plus 3 + 光影歐洲 + 國家地理頻道 + 國家地理野生頻道 + Nickelodeon + Paramount Network Asia [HD] + 鳯凰衛視中文台 + 鳳凰衛視香港台 + 鳳凰衛視資訊台 + ROCK綜藝娛樂 + ROCK超極娛樂 [HD] + 深圳電視台 + 衛視中文台 + 衛視電影台 [HD] + 驚慄電影台 + 旅遊生活頻道 + 旅遊頻道 [HD] + tvN + Zee Cinema + 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 be016007..20074174 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 @@ -75,11 +75,13 @@ function parseStart(item, date) { return DateTime.fromFormat( `${date.format('YYYY-MM-DD')} ${item.time} ${meridiem}`, 'yyyy-MM-dd hh:mm a', - { zone: 'Asia/Hong_Kong' } + { + zone: 'Asia/Hong_Kong' + } ).toUTC() } -function parseItems(content, date) { +function parseItems(content) { const data = JSON.parse(content) if (!data || !Array.isArray(data.epgs)) return [] diff --git a/sites/epg.i-cable.com/epg.i-cable.com.test.js b/sites/epg.i-cable.com/epg.i-cable.com.test.js index bc573f02..8fc59b98 100644 --- a/sites/epg.i-cable.com/epg.i-cable.com.test.js +++ b/sites/epg.i-cable.com/epg.i-cable.com.test.js @@ -1,13 +1,13 @@ // npm run channels:parse -- --config=./sites/epg.i-cable.com/epg.i-cable.com.config.js --output=./sites/epg.i-cable.com/epg.i-cable.com.channels.xml --set=lang:zh -// npx epg-grabber --config=sites/epg.i-cable.com/epg.i-cable.com.config.js --channels=sites/epg.i-cable.com/epg.i-cable.com.channels.xml --output=guide.xml +// npm run grab -- --site=epg.i-cable.com const { parser, url } = require('./epg.i-cable.com.config.js') const fs = require('fs') const path = require('path') -const axios = require('axios') const dayjs = require('dayjs') const utc = require('dayjs/plugin/utc') const customParseFormat = require('dayjs/plugin/customParseFormat') + dayjs.extend(customParseFormat) dayjs.extend(utc) diff --git a/sites/firstmedia.com/firstmedia.com.channels.xml b/sites/firstmedia.com/firstmedia.com.channels.xml index 1d8634cb..6bdba625 100644 --- a/sites/firstmedia.com/firstmedia.com.channels.xml +++ b/sites/firstmedia.com/firstmedia.com.channels.xml @@ -1,193 +1,183 @@ - - - ABC Australia - Al Jazeera Arabic - Al Jazeera International - Al Quran Al Kareem - ANHUI TV - Animal Planet - Animax - ANTV - Arirang - Asian Food Network - AXN - BabyFirst - - - Berita Satu - Berita Satu World - - BLOOMBERG TELEVISION - Boomerang HD - Cartoon Network - CCTV 4 - Celestial Movie - CGTN - CGTN Documentary HD - Champions TV 1 - Champions TV 2 - Champions TV 3 - Champions TV 4 SD - Channel News Asia - Cinema World HD - Cinemax - Citra Biskop HD - Citra Dangdut HD - CItra Drama HD - Citra Entertainment HD - Citra Muslim HD - - Crime - Investigation HD - Da Vinci HD - DAAI TV - Discovery Asia HD - Discovery Channel - - DMAX HD - Dragon TV - Dream Works HD - DW Deutsch - DW English - eGG Channel - Eternal Word Television - Network (EWTN)) - Euronews - - Fashion TV - - Food Network HD - Fox News - France 24 - Galaxy HD - Galaxy Premium HD - Garuda TV - GEM - GMS Channel - GTV - HBO - HBO Family - HBO Hits - HBO Signature - HGTV HD - History HD - HITS HD - HITS MOVIES HD - - - Horee! HD - Hunan TV - IDX Channel HD - IMC - Indosiar - iNews - - Jakarta TV - Jak TV - Jawa Pos Media Televisi - JTV - Jiangsu TV - - KBS World - KIX HD - Kompas TV - Lifetime HD - - - Love Nature 4K - Love Nature HD - - Metro Globe Network - MGN - Metro TV - MNC News - MTV Asia - MTV Live HD - MyZen TV HD - National - Geographic Channel - National - Geographic Wild - NET. - NHK World Japan HD - NHK World Premium - Nick jr. - Nickelodeon - O Channel - ONE - Paramount Network - HD - Phoenix Chinese Channel - Phoenix Info News - - Premier Sports - Rai Italia - Rajawali TV - Reformed 21 - Rock Entertainment HD - Rock Extreme - Russia Today - SCTV - SEA Today HD - - - Shine - Smithsonian HD - SPOTV - SPOTV 2 - Star Chinese Channel - Star Gold - Star Plus - Stingray Djazz HD - Stingray Festival 4K - - Stingray Naturescape HD - Stingray Now 4K - - Sunnah TV - TBN Asia - Tech Storm HD - The Learning Channel - TLC - TRANS 7 - TRANS TV - TRT World - - TV 5 Monde Style HD - TV One - TV PARLEMEN - TV5 Monde - TV9 - TVB Xing He - TVBS Asia - TVBS News - TVN HD - TVN Movies HD - TVRI Nasional - USA Today HD - - Wion - Xing Kong China - Zee Action - Zee Bioskop - Zee Bollywood - Zee Cinema - ZEE TV - Zhejiang TV - - \ No newline at end of file + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ABC Australia + Al Jazeera Arabic + Al Jazeera International + Al Quran Al Kareem + Sunnah TV + ANHUI TV + Animal Planet + Animax + ANTV + Arirang + Asian Food Network + AXN + BabyFirst + Berita Satu + Berita Satu World + BLOOMBERG TELEVISION + Boomerang HD + Cartoon Network + CCTV 4 + Celestial Movie + CGTN + CGTN Documentary HD + Champions TV 1 + Champions TV 2 + Champions TV 3 + Champions TV 4 SD + Cinema World HD + Cinemax + Citra Biskop HD + Citra Dangdut HD + CItra Drama HD + Citra Entertainment HD + Citra Muslim HD + Channel News Asia + Crime Investigation HD + DAAI TV + Da Vinci HD + Discovery Asia HD + Discovery Channel + DMAX HD + Dragon TV + Dream Works HD + DW Deutsch + DW English + eGG Channel + Euronews + Eternal Word Television Network (EWTN)) + Fashion TV + Food Network HD + Fox News + France 24 + Galaxy HD + Galaxy Premium HD + Garuda TV + GEM + GMS Channel + GTV + HBO + HBO Family + HBO Hits + HBO Signature + HGTV HD + History HD + HITS HD + HITS MOVIES HD + Horee! HD + Hunan TV + IDX Channel HD + IMC + Indosiar + iNews + Jakarta TV - Jak TV + Jiangsu TV + Jawa Pos Media Televisi - JTV + KBS World + KIX HD + Kompas TV + Lifetime HD + Love Nature 4K + Love Nature HD + Metro Globe Network - MGN + Metro TV + MNC News + MTV Asia + MTV Live HD + MyZen TV HD + National Geographic Channel + National Geographic Wild + NET. + NHK World Japan HD + NHK World Premium + Nickelodeon + Nick jr. + O Channel + ONE + Paramount Network HD + Phoenix Chinese Channel + Phoenix Info News + Premier Sports + Rai Italia + Rajawali TV + Reformed 21 + Rock Entertainment HD + Rock Extreme + Russia Today + SCTV + SEA Today HD + Shine + Smithsonian HD + SPOTV + SPOTV 2 + Star Chinese Channel + Star Gold + Star Plus + Stingray Djazz HD + Stingray Festival 4K + Stingray Naturescape HD + Stingray Now 4K + TBN Asia + Tech Storm HD + The Learning Channel - TLC + TRANS 7 + TRANS TV + TRT World + TV5 Monde + TV 5 Monde Style HD + TV9 + TVBS Asia + TVBS News + TVB Xing He + TVN HD + TVN Movies HD + TV One + TVRI Nasional + TV PARLEMEN + USA Today HD + Wion + Xing Kong China + Zee Action + Zee Bioskop + Zee Bollywood + Zee Cinema + ZEE TV + Zhejiang TV + \ No newline at end of file diff --git a/sites/firstmedia.com/firstmedia.com.config.js b/sites/firstmedia.com/firstmedia.com.config.js index 604ee012..75237b1e 100644 --- a/sites/firstmedia.com/firstmedia.com.config.js +++ b/sites/firstmedia.com/firstmedia.com.config.js @@ -1,54 +1,52 @@ -const dayjs = require("dayjs"); -const timezone = require("dayjs/plugin/timezone"); -const utc = require('dayjs/plugin/utc'); +const dayjs = require('dayjs') +const timezone = require('dayjs/plugin/timezone') +const utc = require('dayjs/plugin/utc') -dayjs.extend(timezone); -dayjs.extend(utc); +dayjs.extend(timezone) +dayjs.extend(utc) module.exports = { - site: "firstmedia.com", + site: 'firstmedia.com', days: 1, - request: { - timeout: 30000 // 30 seconds - }, url: function ({ channel, date }) { - return `https://www.firstmedia.com/ajax/schedule?date=${date.format("DD/MM/YYYY") - }&channel=${channel.site_id}&start_time=1&end_time=24&need_channels=0`; + return `https://www.firstmedia.com/ajax/schedule?date=${date.format('DD/MM/YYYY')}&channel=${ + channel.site_id + }&start_time=1&end_time=24&need_channels=0` }, parser: function ({ content, channel }) { - if (!content || !channel) return []; + if (!content || !channel) return [] - let programs = []; - const items = parseItems(content, channel.site_id); - items.forEach((item) => { + let programs = [] + const items = parseItems(content, channel.site_id) + items.forEach(item => { programs.push({ title: parseTitle(item), description: parseDescription(item), start: parseStart(item).toISOString(), - stop: parseStop(item).toISOString(), - }); - }); + stop: parseStop(item).toISOString() + }) + }) - return programs; - }, -}; + return programs + } +} function parseItems(content, channel) { - return JSON.parse(content.trim()).entries[channel]; + return JSON.parse(content.trim()).entries[channel] } function parseTitle(item) { - return item.title; + return item.title } function parseDescription(item) { - return item.long_description; + return item.long_description } function parseStart(item) { - return dayjs.tz(item.start_time, "YYYY-MM-DD HH:mm:ss", "Asia/Jakarta"); + return dayjs.tz(item.start_time, 'YYYY-MM-DD HH:mm:ss', 'Asia/Jakarta') } function parseStop(item) { - return dayjs.tz(item.end_time, "YYYY-MM-DD HH:mm:ss", "Asia/Jakarta"); + return dayjs.tz(item.end_time, 'YYYY-MM-DD HH:mm:ss', 'Asia/Jakarta') } diff --git a/sites/firstmedia.com/firstmedia.com.test.js b/sites/firstmedia.com/firstmedia.com.test.js index 8792b5fa..821fdaac 100644 --- a/sites/firstmedia.com/firstmedia.com.test.js +++ b/sites/firstmedia.com/firstmedia.com.test.js @@ -7,25 +7,29 @@ const date = dayjs.utc('2023-06-18', 'DD/MM/YYYY').startOf('d') const channel = { site_id: '251', xmltv_id: 'ABCAustralia.au', lang: 'id' } it('can generate valid url', () => { - expect(url({ channel, date })).toBe('https://www.firstmedia.com/ajax/schedule?date=18/06/2023&channel=251&start_time=1&end_time=24&need_channels=0') + expect(url({ channel, date })).toBe( + 'https://www.firstmedia.com/ajax/schedule?date=18/06/2023&channel=251&start_time=1&end_time=24&need_channels=0' + ) }) it('can parse response', () => { - const content = `{"entries":{"251":[{"logo":"files/images/d/new-logo/channels/11-NEWS/ABC Australia SD-FirstMedia-Chl-251.jpg","name":"ABC Australia","id":"2a800e8a-fdcc-47b3-a4a6-58d1d122b326","channel_id":"a1840c59-6c92-8233-3a02-230246aae0c4","channel_no":251,"programme_id":null,"episode":null,"title":"China Tonight","slug":null,"date":"2023-06-13 00:00:00","start_time":"2023-06-13 10:55:00","end_time":"2023-06-13 11:30:00","length":2100,"description":"China Tonight","long_description":"China is a superpower that dominates global news but it's also home to 1.4 billion stories. Sam Yang is back for a new season, hearing from the people who make this extraordinary nation what it is today.","status":"0","created_by":null,"updated_by":null,"created_at":"2023-06-13 00:20:24","updated_at":"2023-06-13 00:20:24"}]}}` - const results = parser({ content, channel }) + const content = + '{"entries":{"251":[{"logo":"files/images/d/new-logo/channels/11-NEWS/ABC Australia SD-FirstMedia-Chl-251.jpg","name":"ABC Australia","id":"2a800e8a-fdcc-47b3-a4a6-58d1d122b326","channel_id":"a1840c59-6c92-8233-3a02-230246aae0c4","channel_no":251,"programme_id":null,"episode":null,"title":"China Tonight","slug":null,"date":"2023-06-13 00:00:00","start_time":"2023-06-13 10:55:00","end_time":"2023-06-13 11:30:00","length":2100,"description":"China Tonight","long_description":"China is a superpower that dominates global news but it\'s also home to 1.4 billion stories. Sam Yang is back for a new season, hearing from the people who make this extraordinary nation what it is today.","status":"0","created_by":null,"updated_by":null,"created_at":"2023-06-13 00:20:24","updated_at":"2023-06-13 00:20:24"}]}}' + const results = parser({ content, channel }) - expect(results).toMatchObject([ - { - start: '2023-06-13T03:55:00.000Z', - stop: '2023-06-13T04:30:00.000Z', - title: 'China Tonight', - description: 'China is a superpower that dominates global news but it\'s also home to 1.4 billion stories. Sam Yang is back for a new season, hearing from the people who make this extraordinary nation what it is today.' - } - ]) + expect(results).toMatchObject([ + { + start: '2023-06-13T03:55:00.000Z', + stop: '2023-06-13T04:30:00.000Z', + title: 'China Tonight', + description: + "China is a superpower that dominates global news but it's also home to 1.4 billion stories. Sam Yang is back for a new season, hearing from the people who make this extraordinary nation what it is today." + } + ]) }) it('can handle empty guide', () => { - const results = parser({ content: '' }) + const results = parser({ content: '' }) - expect(results).toMatchObject([]) -}) \ No newline at end of file + expect(results).toMatchObject([]) +}) diff --git a/sites/flixed.io/flixed.io.channels.xml b/sites/flixed.io/flixed.io.channels.xml index c64c7f1a..6f68e202 100644 --- a/sites/flixed.io/flixed.io.channels.xml +++ b/sites/flixed.io/flixed.io.channels.xml @@ -1,498 +1,496 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ABC News Live - ACC Network (East) - AccuWeather - A&E (East) - A&E (West) - Al Jazeera America - Altitude Sports and Entertainment Network - AMC (East) - AMC (West) - American Heroes Channel - Animal Planet - Antenna TV - ASPiRE HD - AT&T SportsNet Pittsburgh - AT&T SportsNet Rocky Mountain - AT&T SportsNet Southwest - AXS TV - Bally Sports Arizona - Bally Sports Detroit - Bally Sports Florida - Bally Sports Great Lakes - Bally Sports Indiana - Bally Sports Kansas City - Bally Sports Midwest - Illinois - Bally Sports New Orleans (North) - Bally Sports North - Bally Sports Ohio 1 (Cleveland feed) - Bally Sports Ohio 2 (Cincinnati feed) - Bally Sports Oklahoma - Bally Sports San Diego - Bally Sports SoCal - Bally Sports South - Main Feed - Bally Sports Southeast - Bally Sports Southwest (Main Feed) - Bally Sports Sun - Bally Sports West - Bally Sports Wisconsin - BBC America - BBC World News - beIN SPORTS 3 - beIN SPORTS 4 - beIN SPORTS 5 - beIN SPORTS 6 - beIN SPORTS 7 - beIN SPORTS 8 - beIN Sports HD - BET (East) - BET Her - BET Jams - BET Soul - BET (West) - Big Ten Network - Big Ten Network Overflow - Bloomberg Business Television - Boomerang - Bravo (East) - Bravo (West) - BYU-TV - Cartoon Network (East) - Cartoon Network (West) - CBS (East) - CBS News Streaming - CBS Sports Network - CBS (West) - Cheddar News - Cheddar U - Cinemax (East) - Cinemax (West) - Sony Cine - Cleo TV - CMT (East) - CMT (West) - CNBC - CNBC World - CNN - CNN International HD - Comedy Central (East) - Comedy Central (West) - Comet - Cooking Channel - COZI TV HD - Crime & Investigation Network HD - CSPAN - CSPAN2 - CW (Central) - CW (East) - Destination America - Discovery Channel (East) - Discovery Channel (West) - Discovery Family Channel - Discovery Life Channel - Disney Channel (East) - Disney Channel (West) - Disney Junior - Disney XD (East) - Disney XD (West) - Do-It-Yourself Network HD - E! Entertainment (East) - ESPN - ESPN2 - ESPN3 South - ESPNEWS - ESPNU - E! Entertainment (West) - The Fight Network HD - Food Network (East) - Food Network (West) - Fox Business - FOX (East) - Fox News Channel - Fox Soccer Plus HD - Fox Sports 1 - Fox Sports 2 - FOX (West) - Freeform (East) - Freeform (West) - Fubo Sports Network - Fuse - Fusion HD - FX - FXM - FXX - FYI - Game Show Network - getTV - GINX eSports TV US - Golf Channel - GOLTV (English) HD - Hallmark Channel (East) - Hallmark Channel (West) - Hallmark Drama - Hallmark Movies & Mysteries HD - HBO2 (East) - HBO2 (West) - HBO Comedy HD - HBO (East) - HBO Family (East) - HBO Family (West) - HBO Signature (East) - HBO Signature (West) - HBO (West) - HBO Zone HD - Home & Garden Television (East) - Home & Garden Television (West) - History (East) - History (West) - HLN - IFC - INSP - Investigation Discovery - ION Television (Central) - ION Television (East) - ION Television (West) - Law & Crime Stream - Lifetime (East) - LMN - Lifetime (West) - Logo HD - Longhorn Network HD - Marquee Sports Network HD - MASN - Mid Atlantic Sports Network - MavTV HD - MGM+ Drive-in HD - MGM+ HD (East) - MGM+ Hits HD - MGM+ Marquee - MGM+ HD (West) - MLB Network - MLB Network Strike Zone - MoreMAX (East) - MoreMAX (West) - MOTORTREND HD - MSG National - MSG Plus Zone 1 - MSG Plus HD Zone 2 - MTV2: Music Television (East) - MTV2: Music Television (West) - MTV Classic - MTV - Music Television (East) - MTVLIVE - MTV - Music Television (West) - National Geographic USA - National Geographic Wild - NBA TV - NBC (Central) - NBC (East) - LX - NBC Sports Bay Area - NBC Sports Bay Area Plus - NBC Sports Boston - NBC Sports California - NBC Sports Chicago HD - NBC Sports Northwest - NBC Sports Philadelphia - NBC Sports Washington - NBC Sports Washington Plus HD - NBC (West) - Newsmax TV HD - NewsNation SD - Newsy - NFL Network HD - NFL RedZone - NHL Network - Nickelodeon (East) - Nickelodeon (West) - Nick Jr - Nick Music - Nicktoons - Olympic Channel - One America News Network - Outdoor Channel - Outside Television HD - Ovation - Oprah Winfrey Network (East) - Oprah Winfrey Network (West) - Oxygen (East) - Oxygen (West) - Pac-12 Arizona HD - Pac-12 Bay Area HD - Pac-12 Los Angeles HD - Pac-12 Mountain HD - Pac-12 Network - Pac-12 Oregon HD - Pac-12 Washington HD - Paramount Network (East) - Paramount Network (West) - PBS (East) - PBS (West) - PeopleTV - POP - QVC - QVC2 - Revolt HD - ROOT Sports Northwest - Science - SEC Network HD - Showtime 2 (East) - Showtime 2 (West) - Showtime (East) - Showtime Extreme (East) - Showtime Extreme (West) - Showtime Familyzone HD - Showtime Next HD - Showtime Showcase (East) - Showtime Showcase (West) - Showtime (West) - Showtime Women HD - SHO x BET - Smithsonian HD Network - Sony Movie Channel HD - Spectrum SportsNet - Spectrum SportsNet LA - The Sportsman Channel HD - Sportsnet East - Sportsnet NY - Sportsnet Ontario - Sportsnet (Pacific) - Sportsnet MST - Stadium HD - Stadium College Sports Atlantic - Stadium College Sports Central - Stadium College Sports Pacific - Starz Cinema HD - Starz Comedy HD - Starz (East) - Starz Edge - Starz Encore Classic - Starz Encore (East) - Starz Encore (West) - Starz in Black - Starz Kids - Starz (West) - SundanceTV (East) - SundanceTV (West) - SYFY (East) - SYFY (West) - Tastemade [Str] - TBS (East) - TBS (West) - Turner Classic Movies - Teen Nick HD - Tennis Channel - The Movie Channel (East) - The Movie Channel (West) - The Movie Channel Extra (East) - The Movie Channel Extra (West) - The Weather Channel - TLC (East) - TLC (West) - TNT (East) - TNT (West) - The Travel Channel (East) - The Travel Channel (West) - Trinity Broadcasting Network - truTV (East) - truTV (West) - TSN1 - TSN2 - TSN3 - TSN4 - TSN5 - TV Land (East) - TV Land (West) - TyC Sports International English - Universal Kids HD - UPtv HD - USA Network (East) - USA Network (West) - VH1 (East) - VH1 (West) - Vice - Vegas Sports & Information Network (VSIN) - WE tv (East) - WE tv (West) - Yes Network - Baby TV - beIN Sports En Español - CNN en Español - Discovery en Español - Discovery Familia HD - El Gourmet - ESPN Deportes - Estrella TV - Fox Deportes HD - Galavision Cable Network (East) - Galavision Cable Network (West) - GOLTV International HD - HBO Latino - History Channel En Español - MTV España - Nat Geo Mundo - UNIVERSO HD - Telefe Internacional - Telemundo (East) - Telemundo (West) - TUDN - TyC Sports International - UniMas (East) - UniMas (West) - Univision Network (East) - Univision Network (West) - Video Rola HD - WAPA America - BeIN SPORTS 2 HD - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ABC News Live + ACC Network (East) + AccuWeather + A&E (East) + A&E (West) + Al Jazeera America + Altitude Sports and Entertainment Network + AMC (East) + AMC (West) + American Heroes Channel + Animal Planet + Antenna TV + ASPiRE HD + AT&T SportsNet Pittsburgh + AT&T SportsNet Rocky Mountain + AT&T SportsNet Southwest + AXS TV + Bally Sports Arizona + Bally Sports Detroit + Bally Sports Florida + Bally Sports Great Lakes + Bally Sports Indiana + Bally Sports Kansas City + Bally Sports Midwest - Illinois + Bally Sports New Orleans (North) + Bally Sports North + Bally Sports Ohio 1 (Cleveland feed) + Bally Sports Ohio 2 (Cincinnati feed) + Bally Sports Oklahoma + Bally Sports San Diego + Bally Sports SoCal + Bally Sports South - Main Feed + Bally Sports Southeast + Bally Sports Southwest (Main Feed) + Bally Sports Sun + Bally Sports West + Bally Sports Wisconsin + BBC America + BBC World News + beIN SPORTS 3 + beIN SPORTS 4 + beIN SPORTS 5 + beIN SPORTS 6 + beIN SPORTS 7 + beIN SPORTS 8 + beIN Sports HD + BET (East) + BET Her + BET Jams + BET Soul + BET (West) + Big Ten Network + Big Ten Network Overflow + Bloomberg Business Television + Boomerang + Bravo (East) + Bravo (West) + BYU-TV + Cartoon Network (East) + Cartoon Network (West) + CBS (East) + CBS News Streaming + CBS Sports Network + CBS (West) + Cheddar News + Cheddar U + Cinemax (East) + Cinemax (West) + Sony Cine + Cleo TV + CMT (East) + CMT (West) + CNBC + CNBC World + CNN + CNN International HD + Comedy Central (East) + Comedy Central (West) + Comet + Cooking Channel + COZI TV HD + Crime & Investigation Network HD + CSPAN + CSPAN2 + CW (Central) + CW (East) + Destination America + Discovery Channel (East) + Discovery Channel (West) + Discovery Family Channel + Discovery Life Channel + Disney Channel (East) + Disney Channel (West) + Disney Junior + Disney XD (East) + Disney XD (West) + Do-It-Yourself Network HD + E! Entertainment (East) + ESPN + ESPN2 + ESPN3 South + ESPNEWS + ESPNU + E! Entertainment (West) + The Fight Network HD + Food Network (East) + Food Network (West) + Fox Business + FOX (East) + Fox News Channel + Fox Soccer Plus HD + Fox Sports 1 + Fox Sports 2 + FOX (West) + Freeform (East) + Freeform (West) + Fubo Sports Network + Fuse + Fusion HD + FX + FXM + FXX + FYI + Game Show Network + getTV + GINX eSports TV US + Golf Channel + GOLTV (English) HD + Hallmark Channel (East) + Hallmark Channel (West) + Hallmark Drama + Hallmark Movies & Mysteries HD + HBO2 (East) + HBO2 (West) + HBO Comedy HD + HBO (East) + HBO Family (East) + HBO Family (West) + HBO Signature (East) + HBO Signature (West) + HBO (West) + HBO Zone HD + Home & Garden Television (East) + Home & Garden Television (West) + History (East) + History (West) + HLN + IFC + INSP + Investigation Discovery + ION Television (Central) + ION Television (East) + ION Television (West) + Law & Crime Stream + Lifetime (East) + LMN + Lifetime (West) + Logo HD + Longhorn Network HD + Marquee Sports Network HD + MASN - Mid Atlantic Sports Network + MavTV HD + MGM+ Drive-in HD + MGM+ HD (East) + MGM+ Hits HD + MGM+ Marquee + MGM+ HD (West) + MLB Network + MLB Network Strike Zone + MoreMAX (East) + MoreMAX (West) + MOTORTREND HD + MSG National + MSG Plus Zone 1 + MSG Plus HD Zone 2 + MTV2: Music Television (East) + MTV2: Music Television (West) + MTV Classic + MTV - Music Television (East) + MTVLIVE + MTV - Music Television (West) + National Geographic USA + National Geographic Wild + NBA TV + NBC (Central) + NBC (East) + LX + NBC Sports Bay Area + NBC Sports Bay Area Plus + NBC Sports Boston + NBC Sports California + NBC Sports Chicago HD + NBC Sports Northwest + NBC Sports Philadelphia + NBC Sports Washington + NBC Sports Washington Plus HD + NBC (West) + Newsmax TV HD + NewsNation SD + Newsy + NFL Network HD + NFL RedZone + NHL Network + Nickelodeon (East) + Nickelodeon (West) + Nick Jr + Nick Music + Nicktoons + Olympic Channel + One America News Network + Outdoor Channel + Outside Television HD + Ovation + Oprah Winfrey Network (East) + Oprah Winfrey Network (West) + Oxygen (East) + Oxygen (West) + Pac-12 Arizona HD + Pac-12 Bay Area HD + Pac-12 Los Angeles HD + Pac-12 Mountain HD + Pac-12 Network + Pac-12 Oregon HD + Pac-12 Washington HD + Paramount Network (East) + Paramount Network (West) + PBS (East) + PBS (West) + PeopleTV + POP + QVC + QVC2 + Revolt HD + ROOT Sports Northwest + Science + SEC Network HD + Showtime 2 (East) + Showtime 2 (West) + Showtime (East) + Showtime Extreme (East) + Showtime Extreme (West) + Showtime Familyzone HD + Showtime Next HD + Showtime Showcase (East) + Showtime Showcase (West) + Showtime (West) + Showtime Women HD + SHO x BET + Smithsonian HD Network + Sony Movie Channel HD + Spectrum SportsNet + Spectrum SportsNet LA + The Sportsman Channel HD + Sportsnet East + Sportsnet NY + Sportsnet Ontario + Sportsnet (Pacific) + Sportsnet MST + Stadium HD + Stadium College Sports Atlantic + Stadium College Sports Central + Stadium College Sports Pacific + Starz Cinema HD + Starz Comedy HD + Starz (East) + Starz Edge + Starz Encore Classic + Starz Encore (East) + Starz Encore (West) + Starz in Black + Starz Kids + Starz (West) + SundanceTV (East) + SundanceTV (West) + SYFY (East) + SYFY (West) + Tastemade [Str] + TBS (East) + TBS (West) + Turner Classic Movies + Teen Nick HD + Tennis Channel + The Movie Channel (East) + The Movie Channel (West) + The Movie Channel Extra (East) + The Movie Channel Extra (West) + The Weather Channel + TLC (East) + TLC (West) + TNT (East) + TNT (West) + The Travel Channel (East) + The Travel Channel (West) + Trinity Broadcasting Network + truTV (East) + truTV (West) + TSN1 + TSN2 + TSN3 + TSN4 + TSN5 + TV Land (East) + TV Land (West) + TyC Sports International English + Universal Kids HD + UPtv HD + USA Network (East) + USA Network (West) + VH1 (East) + VH1 (West) + Vice + Vegas Sports & Information Network (VSIN) + WE tv (East) + WE tv (West) + Yes Network + Baby TV + beIN Sports En Español + CNN en Español + Discovery en Español + Discovery Familia HD + El Gourmet + ESPN Deportes + Estrella TV + Fox Deportes HD + Galavision Cable Network (East) + Galavision Cable Network (West) + GOLTV International HD + HBO Latino + History Channel En Español + MTV España + Nat Geo Mundo + UNIVERSO HD + Telefe Internacional + Telemundo (East) + Telemundo (West) + TUDN + TyC Sports International + UniMas (East) + UniMas (West) + Univision Network (East) + Univision Network (West) + Video Rola HD + WAPA America + BeIN SPORTS 2 HD + diff --git a/sites/flixed.io/flixed.io.config.js b/sites/flixed.io/flixed.io.config.js index 6ae463f2..5dfb5e0a 100644 --- a/sites/flixed.io/flixed.io.config.js +++ b/sites/flixed.io/flixed.io.config.js @@ -40,6 +40,6 @@ function parseStop(item) { return dayjs(item.endTime) } -function parseItems(content, channel) { +function parseItems(content) { return JSON.parse(content) } diff --git a/sites/flixed.io/flixed.io.test.js b/sites/flixed.io/flixed.io.test.js index 9f501c0a..e22d4b15 100644 --- a/sites/flixed.io/flixed.io.test.js +++ b/sites/flixed.io/flixed.io.test.js @@ -1,4 +1,4 @@ -// npx epg-grabber --config=sites/flixed.io/flixed.io.config.js --channels=sites/flixed.io/flixed.io.channels.xml --output=guide.xml --days=1 +// npm run grab -- --site=flixed.io const { parser, url } = require('./flixed.io.config.js') const fs = require('fs') @@ -17,7 +17,7 @@ const channel = { it('can generate valid url', () => { expect(url({ date, channel })).toBe( - `https://tv-guide.vercel.app/api/stationAirings?stationId=108970&startDateTime=2023-01-19T00:00:00.000Z` + 'https://tv-guide.vercel.app/api/stationAirings?stationId=108970&startDateTime=2023-01-19T00:00:00.000Z' ) }) @@ -42,7 +42,7 @@ it('can parse response', () => { it('can handle empty guide', () => { const results = parser({ - content: `[]` + content: '[]' }) expect(results).toMatchObject([]) diff --git a/sites/foxsports.com.au/foxsports.com.au.channels.xml b/sites/foxsports.com.au/foxsports.com.au.channels.xml index d7bc38b2..6de80a18 100644 --- a/sites/foxsports.com.au/foxsports.com.au.channels.xml +++ b/sites/foxsports.com.au/foxsports.com.au.channels.xml @@ -1,21 +1,19 @@ - - - FOX Cricket - FOX Footy - FOX League - FOX Sports 503 - FOX Sports 505 - FOX Sports 506 - FOX Sports More - FOX Sports News - - - - - - - - - - \ No newline at end of file + + + + + + + + + + FOX Cricket + FOX Footy + FOX League + FOX Sports 503 + FOX Sports 505 + FOX Sports 506 + FOX Sports More + FOX Sports News + \ No newline at end of file diff --git a/sites/foxsports.com.au/foxsports.com.au.test.js b/sites/foxsports.com.au/foxsports.com.au.test.js index 77dfff52..52090f73 100644 --- a/sites/foxsports.com.au/foxsports.com.au.test.js +++ b/sites/foxsports.com.au/foxsports.com.au.test.js @@ -1,4 +1,4 @@ -// npx epg-grabber --config=sites/foxsports.com.au/foxsports.com.au.config.js --channels=sites/foxsports.com.au/foxsports.com.au.channels.xml --output=guide.xml --days=2 +// npm run grab -- --site=foxsports.com.au const { parser, url } = require('./foxsports.com.au.config.js') const dayjs = require('dayjs') @@ -17,7 +17,8 @@ it('can generate valid url', () => { }) it('can parse response', () => { - const content = `{"channel-programme":[{"id":"31cc8b4c-3711-49f0-bf22-2ec3993b0a07","programmeTitle":"NRL","title":"Eels v Titans","startTime":"2022-12-14T00:00:00+11:00","endTime":"2022-12-14T01:00:00+11:00","duration":60,"live":false,"genreId":"5c389cf4-8db7-4b52-9773-52355bd28559","channelId":2,"channelName":"FOX League","channelAbbreviation":"LEAGUE","programmeUID":235220,"round":"R1","statsMatchId":null,"closedCaptioned":true,"statsFixtureId":10207,"genreTitle":"Rugby League","parentGenreId":"a953f929-2d12-41a4-b0e9-97f401afff11","parentGenreTitle":"Sport","pmgId":"PMG01306944","statsSport":"league","type":"GAME","hiDef":true,"widescreen":true,"classification":"","synopsis":"The Eels and Titans have plenty of motivation this season after heartbreaking Finals losses in 2021. Parramatta has won their past five against Gold Coast.","preGameStartTime":null,"closeCaptioned":true}]}` + const content = + '{"channel-programme":[{"id":"31cc8b4c-3711-49f0-bf22-2ec3993b0a07","programmeTitle":"NRL","title":"Eels v Titans","startTime":"2022-12-14T00:00:00+11:00","endTime":"2022-12-14T01:00:00+11:00","duration":60,"live":false,"genreId":"5c389cf4-8db7-4b52-9773-52355bd28559","channelId":2,"channelName":"FOX League","channelAbbreviation":"LEAGUE","programmeUID":235220,"round":"R1","statsMatchId":null,"closedCaptioned":true,"statsFixtureId":10207,"genreTitle":"Rugby League","parentGenreId":"a953f929-2d12-41a4-b0e9-97f401afff11","parentGenreTitle":"Sport","pmgId":"PMG01306944","statsSport":"league","type":"GAME","hiDef":true,"widescreen":true,"classification":"","synopsis":"The Eels and Titans have plenty of motivation this season after heartbreaking Finals losses in 2021. Parramatta has won their past five against Gold Coast.","preGameStartTime":null,"closeCaptioned":true}]}' const result = parser({ content, channel }).map(p => { p.start = p.start.toJSON() @@ -29,7 +30,8 @@ it('can parse response', () => { { title: 'NRL', sub_title: 'Eels v Titans', - description: `The Eels and Titans have plenty of motivation this season after heartbreaking Finals losses in 2021. Parramatta has won their past five against Gold Coast.`, + description: + 'The Eels and Titans have plenty of motivation this season after heartbreaking Finals losses in 2021. Parramatta has won their past five against Gold Coast.', category: 'Rugby League', start: '2022-12-13T13:00:00.000Z', stop: '2022-12-13T14:00:00.000Z' @@ -40,7 +42,7 @@ it('can parse response', () => { it('can handle empty guide', () => { const result = parser( { - content: `{"channel-programme":[]}` + content: '{"channel-programme":[]}' }, channel ) diff --git a/sites/foxtel.com.au/foxtel.com.au.channels.xml b/sites/foxtel.com.au/foxtel.com.au.channels.xml index 8ee54930..a4f919e2 100644 --- a/sites/foxtel.com.au/foxtel.com.au.channels.xml +++ b/sites/foxtel.com.au/foxtel.com.au.channels.xml @@ -1,197 +1,195 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/sites/foxtel.com.au/foxtel.com.au.config.js b/sites/foxtel.com.au/foxtel.com.au.config.js index a93699b1..e8674256 100644 --- a/sites/foxtel.com.au/foxtel.com.au.config.js +++ b/sites/foxtel.com.au/foxtel.com.au.config.js @@ -3,7 +3,6 @@ const dayjs = require('dayjs') const cheerio = require('cheerio') module.exports = { - skip: true, // returns "Access Denied" or nothing site: 'foxtel.com.au', days: 2, url({ channel, date }) { @@ -17,13 +16,13 @@ module.exports = { Cookie: 'AAMC_foxtel_0=REGION|6' } }, - parser: function ({ content }) { + parser: function ({ content, date }) { let programs = [] const items = parseItems(content) for (let item of items) { const $item = cheerio.load(item) const prev = programs[programs.length - 1] - const start = parseStart($item) + let start = parseStart($item) if (prev) { if (start.isBefore(prev.start)) { start = start.add(1, 'd') @@ -48,7 +47,7 @@ module.exports = { }, async channels() { const data = await axios - .get(`https://www.foxtel.com.au/webepg/ws/foxtel/channels?regionId=8336`, { + .get('https://www.foxtel.com.au/webepg/ws/foxtel/channels?regionId=8336', { headers: { 'Accept-Language': 'en-US,en;', Cookie: 'AAMC_foxtel_0=REGION|6' @@ -58,11 +57,11 @@ module.exports = { .catch(console.log) return data.channels.forEach(item => { - let name = item.name.replace(/\+/g, '-').replace(/\&/g, '') + let name = item.name.replace(/\+/g, '-').replace(/&/g, '') const slug = name.replace(/[^a-z0-9\s]/gi, '').replace(/[^a-z0-9]/i, '-') return { - name: item.name.replace(/\&/g, '&'), + name: item.name.replace(/&/g, '&'), site_id: `${slug}/${item.channelTag}` } }) @@ -72,7 +71,7 @@ module.exports = { function parseSeason($item) { let seasonString = $item('.epg-event-description > div > abbr:nth-child(1)').attr('title') if (!seasonString) return null - let [_, season] = seasonString.match(/^Season: (\d+)/) || [null, null] + let [, season] = seasonString.match(/^Season: (\d+)/) || [null, null] return season ? parseInt(season) : null } @@ -80,7 +79,7 @@ function parseSeason($item) { function parseEpisode($item) { let episodeString = $item('.epg-event-description > div > abbr:nth-child(2)').attr('title') if (!episodeString) return null - let [_, episode] = episodeString.match(/^Episode: (\d+)/) || [null, null] + let [, episode] = episodeString.match(/^Episode: (\d+)/) || [null, null] return episode ? parseInt(episode) : null } @@ -104,14 +103,14 @@ function parseSubTitle($item) { .split(',') subtitle = subtitle.pop() - const [_, rating] = subtitle.match(/\(([^)]+)\)$/) || [null, null] + const [, rating] = subtitle.match(/\(([^)]+)\)$/) || [null, null] return subtitle.replace(`(${rating})`, '').trim() } function parseRating($item) { const subtitle = $item('.epg-event-description > div').text().trim() - const [_, rating] = subtitle.match(/\(([^)]+)\)$/) || [null, null] + const [, rating] = subtitle.match(/\(([^)]+)\)$/) || [null, null] return rating ? { @@ -131,5 +130,5 @@ function parseItems(content) { if (!content) return [] const $ = cheerio.load(content) - return $(`#epg-channel-events > a`).toArray() + return $('#epg-channel-events > a').toArray() } diff --git a/sites/foxtel.com.au/foxtel.com.au.test.js b/sites/foxtel.com.au/foxtel.com.au.test.js index a30f301a..a3779b7f 100644 --- a/sites/foxtel.com.au/foxtel.com.au.test.js +++ b/sites/foxtel.com.au/foxtel.com.au.test.js @@ -1,5 +1,5 @@ // npm run channels:parse -- --config=./sites/foxtel.com.au/foxtel.com.au.config.js --output=./sites/foxtel.com.au/foxtel.com.au.channels.xml -// npx epg-grabber --config=sites/foxtel.com.au/foxtel.com.au.config.js --channels=sites/foxtel.com.au/foxtel.com.au.channels.xml --output=guide.xml --days=2 +// npm run grab -- --site=foxtel.com.au const { parser, url, request } = require('./foxtel.com.au.config.js') const fs = require('fs') diff --git a/sites/frikanalen.no/frikanalen.no.channels.xml b/sites/frikanalen.no/frikanalen.no.channels.xml index 4cd7379b..ae3ce2fa 100644 --- a/sites/frikanalen.no/frikanalen.no.channels.xml +++ b/sites/frikanalen.no/frikanalen.no.channels.xml @@ -1,6 +1,4 @@ - - - Frikanalen - - \ No newline at end of file + + Frikanalen + \ No newline at end of file diff --git a/sites/frikanalen.no/frikanalen.no.test.js b/sites/frikanalen.no/frikanalen.no.test.js index 33606a0a..8c9fb2da 100644 --- a/sites/frikanalen.no/frikanalen.no.test.js +++ b/sites/frikanalen.no/frikanalen.no.test.js @@ -1,4 +1,4 @@ -// npx epg-grabber --config=sites/frikanalen.no/frikanalen.no.config.js --channels=sites/frikanalen.no/frikanalen.no.channels.xml --output=guide.xml --days=2 +// npm run grab -- --site=frikanalen.no const { parser, url } = require('./frikanalen.no.config.js') const dayjs = require('dayjs') @@ -20,7 +20,8 @@ it('can generate valid url', () => { }) it('can parse response', () => { - const content = `{"count":83,"next":null,"previous":null,"results":[{"id":135605,"video":{"id":626094,"name":"FSCONS 2017 - Keynote: TBA - Linda Sandvik","header":"Linda Sandvik's keynote at FSCONS 2017\\r\\n\\r\\nRecorded by NUUG for FSCONS.","description":null,"creator":"davidwnoble@gmail.com","organization":{"id":82,"name":"NUUG","homepage":"https://www.nuug.no/","description":"Forening NUUG er for alle som er interessert i fri programvare, åpne standarder og Unix-lignende operativsystemer.","postalAddress":"","streetAddress":"","editorId":2148,"editorName":"David Noble","editorEmail":"davidwnoble@gmail.com","editorMsisdn":"","fkmember":true},"duration":"00:57:55.640000","categories":["Samfunn"]},"schedulereason":5,"starttime":"2022-01-19T00:47:00+01:00","endtime":"2022-01-19T01:44:55.640000+01:00","duration":"00:57:55.640000"}]}` + const content = + '{"count":83,"next":null,"previous":null,"results":[{"id":135605,"video":{"id":626094,"name":"FSCONS 2017 - Keynote: TBA - Linda Sandvik","header":"Linda Sandvik\'s keynote at FSCONS 2017\\r\\n\\r\\nRecorded by NUUG for FSCONS.","description":null,"creator":"davidwnoble@gmail.com","organization":{"id":82,"name":"NUUG","homepage":"https://www.nuug.no/","description":"Forening NUUG er for alle som er interessert i fri programvare, åpne standarder og Unix-lignende operativsystemer.","postalAddress":"","streetAddress":"","editorId":2148,"editorName":"David Noble","editorEmail":"davidwnoble@gmail.com","editorMsisdn":"","fkmember":true},"duration":"00:57:55.640000","categories":["Samfunn"]},"schedulereason":5,"starttime":"2022-01-19T00:47:00+01:00","endtime":"2022-01-19T01:44:55.640000+01:00","duration":"00:57:55.640000"}]}' const result = parser({ content }).map(p => { p.start = p.start.toJSON() p.stop = p.stop.toJSON() @@ -31,9 +32,9 @@ it('can parse response', () => { { start: '2022-01-18T23:47:00.000Z', stop: '2022-01-19T00:44:55.640Z', - title: `FSCONS 2017 - Keynote: TBA - Linda Sandvik`, + title: 'FSCONS 2017 - Keynote: TBA - Linda Sandvik', category: ['Samfunn'], - description: `Linda Sandvik's keynote at FSCONS 2017\r\n\r\nRecorded by NUUG for FSCONS.` + description: "Linda Sandvik's keynote at FSCONS 2017\r\n\r\nRecorded by NUUG for FSCONS." } ]) }) @@ -42,7 +43,7 @@ it('can handle empty guide', () => { const result = parser({ date, channel, - content: `{"count":0,"next":null,"previous":null,"results":[]}` + content: '{"count":0,"next":null,"previous":null,"results":[]}' }) expect(result).toMatchObject([]) }) diff --git a/sites/gatotv.com/gatotv.com.channels.xml b/sites/gatotv.com/gatotv.com.channels.xml index 80a9fdae..6e9e1106 100644 --- a/sites/gatotv.com/gatotv.com.channels.xml +++ b/sites/gatotv.com/gatotv.com.channels.xml @@ -1,492 +1,490 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - M+ #0 - 24 Horas Chile - M+ Acción - ADN 40 - Adrenalina Sports Network - A&E Chile - A&E México - A&E PAN - Afizzionados - Agrotendencia TV - AMC Crime - AMC España - América Televisión Perú - America TV Argentina - Antena 3 de España - Antena 3 Internacional - 7 de República Dominicana - a+ - Aprende - Atreseries España - Atreseries Internacional - ATV - AXN Andes - AXN México - AXN Sur - AYM Sports - Azteca 7 - Azteca Guate - Azteca Uno - BabyFirst TV - Bandamax - Barça TV - beIN Sports en Español - Be Mad - BET Jams - BitMe - Boing España - 9 Noticias Paraguay - Cablenoticias - Calle 13 - 1 Colombia - 11 de Costa Rica - 12 de El Salvador - 13 de Chile - 2 de Nicaragua - 2 de El Salvador - 24 Horas - 27 de Guatemala - 3 de Guatemala - 4 de Costa Rica - 4 de El Salvador - 5 de Honduras - 6 de Costa Rica - 6 de El Salvador - Multimedios Costa Rica - Canal Antigua - Cocina - Canal Congreso Colombia - Institucional Colombia - Sur - Sur Andalucía - Tro - Caracol Internacional - Caracol Colombia - Cartoonito México - Cartoon Network México - Cartoon Network Atlántico Norte - Cartoon Network Pacífico - Cartoon Network Atlántico Sur - 37 de República Dominicana - CDN Deportes - Chilevisión (CHV) - Cinecanal México - Cinecanal Pacífico - Cinecanal Sur - CineClick - Cine Estelar - Cinelatino - Cinema Platino - Cinema + - Cinemax Chile - Cinemax México - Cinemax Panregional - Cine Mexicano - Cine Nostalgia - Cine Sony - Clan TVE - Claro Música - Classica - Castilla-La Mancha Media - CNN Chile - CNN en Español - CNN Internacional - 9 de República Dominicana - M+ Comedia - Comedy Central España - Concert Channel - Cosmopolitan España - Cuatro de España - Decasa - De Película Clásico - DHE - 15 de República Dominicana - Discovery Channel Chile - Discovery Channel México - Discovery Channel España - Discovery en Español - Discovery Familia - Discovery H&H MX - Discovery Kids Chile - Discovery Kids MX - Discovery Science LATAM - Discovery Theater LATAM. - Disney Channel Centro - Disney Channel Sur - Disney Channel España - Disney Junior Norte - Disney Junior Sur - Disney Junior España - Distrito Comedia - Divinity - Ecuador TV - Ecuavisa Ecuador - Ecuavisa Internacional - Efekto TV - El Financiero - Bloomberg - 13 de Argentina - Energy - ESNE TV - ESPN 2 Colombia - ESPN 2 México - ESPN 2 Norte - ESPN 3 Norte - ESPN 3 Sur - ESPN 4 Chile - ESPN 4 Norte - ESPN Chile - ESPN Colombia - ESPN Deportes - ESPN México - ESPN Norte - Estrella TV - ETB 1 - ETB 2 - Eurochannel - Europa Europa - Eurosport 1 España - Eurosport 2 España - Exa TV - Excelsior TV - 42 de Costa Rica - Foro TV - Fox Deportes - Fox News - Fox España - FUTV - FX Chile - FX México - Gamavisión - Golden Panregional - Golden Plus - Golden Premier - Golden Premier 2 - Golf Channel Latinoamérica - GolTV Lat. - Guatevisión - HBO 2 LATAM - HBO Family LATAM - HBO Latinoamérica - HBO Latino Este - HBO Mundi - HBO Plus - HBO Pop - HBO Signature LATAM - HBO Xtreme - Historia España - History 2 México - History 2 Panregional - History Chile - History en Español - History MX - History Panregional - HITN - HLN - ¡Hola! TV - HTV - Iberalia TV - Ingenio TV México - Inti Network - ID México - ID Panregional - Justicia TV - La 1 - La 2 - M+ LaLiga - laOtra - La Red TV Guatemala - 2 de México - Las Estrellas LATAM - La Sexta - La Tele Paraguay - Frecuencia Latina - Lifetime México - Lifetime PAN - María Visión - MC - Mega Chile - Mega España - Meganoticias MX - 12 de El Salvador - Mexiquense TV - Milenio - MTV 00s - MTV 80S - MTV Sur - MTV España - Multimedios Plus - National Geographic México - National Geographic España - Universo - Neox - NFL Network - NHK World - Nickelodeon México - Nickelodeon España - Nick Jr. España - NickMusic - Nova - Noticias PY - NTN24 - Odisea - Pakapaka - Panamericana Televisión - Pánico - Paraguay TV - Paramount Channel ES - Paravisión - Pasiones Estados Unidos - Pasiones Latinoamérica - Perú Mágico - PX Sports - RCN Novelas - Real Madrid TV - 4 de Panamá - RTS - Semillitas - Señal Colombia - Sky One México - Sky Sports 1 México - Sky Sports 16 - Sky Sports 24 - SNT - Sony México - Sorpresa - Space México - Space Panregional - Space Sur - Star Channel México - Studio Universal México - Studio Universal Panregional - Sundance TV España - Sur TV Itapúa Paraguay - Syfy España - TCM Panregional - TCM España - TC Televisión - TeenNick - Teleamazonas - 2 de República Dominicana - Teleantioquia - 7 y 4 de Honduras - Telecafé - Telecaribe - 13 de República Dominicana - Telecentro TV - Telecinco - Teledeporte - Telefé (Argentina) - Telefe Internacional - Telefórmula - Telefuturo - Telehit - Telehit Música - Teleislas - TeleMadrid - Telemetro - Telemicro - Telemundo México - Telenostalgia - 11 de Guatemala - Telepacífico - 11 de República Dominicana - 7 de Costa Rica - Teleunion - 29 de República Dominicana - 4 de Guadalajara - 7 de Guatemala - Tigo Sports Costa Rica - Tigo Sports El Salvador - Tigo Sports Guatemala - TLC MX - TLC Panregional - TLNovelas LATAM - TLNovelas México - TNT México - TNT Pacífico - TNT Sur - TNT España - TNT Sports 2 Chile - TNT Sports 3 Chile - Tooncast - 13 de Colombia - 13 de Paraguay - 13 de Costa Rica - truTV Lat. - Telesistema Informativo (TSI) - TUDN USA - TUDN México - TV5Monde - TV Canaria - TVC Deportes - TV Chile - TVE Internacional - TV Globo Internacional - 9 de Panamá - TVN Chile - 2 de Panamá - Televisión Pública Argentina - TVUNAM - TyC Sports - Unicable MX - Unicanal - Universal Cinema - Universal Comedy - Universal Crime - Universal Premiere - Universal Reality - Universal TV México - Universal TV Panregional - Univision TLNovelas - M+ #Vamos - Ve Plus Estados Unidos - Vía X - Vibra TV - Video Rola - ViendoMovies - 13 de Nicaragua - VTV Honduras - WAPA-TV - WAPA 2 Deportes - Willax TV - Punto 2 - WOBI - 13 de Puerto Rico - 4 de Monterrey - 22 de México - 11 de México - Zona Latina - ZOOM Colombia - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + M+ #0 + 24 Horas Chile + M+ Acción + ADN 40 + Adrenalina Sports Network + A&E Chile + A&E México + A&E PAN + Afizzionados + Agrotendencia TV + AMC Crime + AMC España + América Televisión Perú + America TV Argentina + Antena 3 de España + Antena 3 Internacional + 7 de República Dominicana + a+ + Aprende + Atreseries España + Atreseries Internacional + ATV + AXN Andes + AXN México + AXN Sur + AYM Sports + Azteca 7 + Azteca Guate + Azteca Uno + BabyFirst TV + Bandamax + Barça TV + beIN Sports en Español + Be Mad + BET Jams + BitMe + Boing España + 9 Noticias Paraguay + Cablenoticias + Calle 13 + 1 Colombia + 11 de Costa Rica + 12 de El Salvador + 13 de Chile + 2 de Nicaragua + 2 de El Salvador + 24 Horas + 27 de Guatemala + 3 de Guatemala + 4 de Costa Rica + 4 de El Salvador + 5 de Honduras + 6 de Costa Rica + 6 de El Salvador + Multimedios Costa Rica + Canal Antigua + Cocina + Canal Congreso Colombia + Institucional Colombia + Sur + Sur Andalucía + Tro + Caracol Internacional + Caracol Colombia + Cartoonito México + Cartoon Network México + Cartoon Network Atlántico Norte + Cartoon Network Pacífico + Cartoon Network Atlántico Sur + 37 de República Dominicana + CDN Deportes + Chilevisión (CHV) + Cinecanal México + Cinecanal Pacífico + Cinecanal Sur + CineClick + Cine Estelar + Cinelatino + Cinema Platino + Cinema + + Cinemax Chile + Cinemax México + Cinemax Panregional + Cine Mexicano + Cine Nostalgia + Cine Sony + Clan TVE + Claro Música + Classica + Castilla-La Mancha Media + CNN Chile + CNN en Español + CNN Internacional + 9 de República Dominicana + M+ Comedia + Comedy Central España + Concert Channel + Cosmopolitan España + Cuatro de España + Decasa + De Película Clásico + DHE + 15 de República Dominicana + Discovery Channel Chile + Discovery Channel México + Discovery Channel España + Discovery en Español + Discovery Familia + Discovery H&H MX + Discovery Kids Chile + Discovery Kids MX + Discovery Science LATAM + Discovery Theater LATAM. + Disney Channel Centro + Disney Channel Sur + Disney Channel España + Disney Junior Norte + Disney Junior Sur + Disney Junior España + Distrito Comedia + Divinity + Ecuador TV + Ecuavisa Ecuador + Ecuavisa Internacional + Efekto TV + El Financiero - Bloomberg + 13 de Argentina + Energy + ESNE TV + ESPN 2 Colombia + ESPN 2 México + ESPN 2 Norte + ESPN 3 Norte + ESPN 3 Sur + ESPN 4 Chile + ESPN 4 Norte + ESPN Chile + ESPN Colombia + ESPN Deportes + ESPN México + ESPN Norte + Estrella TV + ETB 1 + ETB 2 + Eurochannel + Europa Europa + Eurosport 1 España + Eurosport 2 España + Exa TV + Excelsior TV + 42 de Costa Rica + Foro TV + Fox Deportes + Fox News + Fox España + FUTV + FX Chile + FX México + Gamavisión + Golden Panregional + Golden Plus + Golden Premier + Golden Premier 2 + Golf Channel Latinoamérica + GolTV Lat. + Guatevisión + HBO 2 LATAM + HBO Family LATAM + HBO Latinoamérica + HBO Latino Este + HBO Mundi + HBO Plus + HBO Pop + HBO Signature LATAM + HBO Xtreme + Historia España + History 2 México + History 2 Panregional + History Chile + History en Español + History MX + History Panregional + HITN + HLN + ¡Hola! TV + HTV + Iberalia TV + Ingenio TV México + Inti Network + ID México + ID Panregional + Justicia TV + La 1 + La 2 + M+ LaLiga + laOtra + La Red TV Guatemala + 2 de México + Las Estrellas LATAM + La Sexta + La Tele Paraguay + Frecuencia Latina + Lifetime México + Lifetime PAN + María Visión + MC + Mega Chile + Mega España + Meganoticias MX + 12 de El Salvador + Mexiquense TV + Milenio + MTV 00s + MTV 80S + MTV Sur + MTV España + Multimedios Plus + National Geographic México + National Geographic España + Universo + Neox + NFL Network + NHK World + Nickelodeon México + Nickelodeon España + Nick Jr. España + NickMusic + Nova + Noticias PY + NTN24 + Odisea + Pakapaka + Panamericana Televisión + Pánico + Paraguay TV + Paramount Channel ES + Paravisión + Pasiones Estados Unidos + Pasiones Latinoamérica + Perú Mágico + PX Sports + RCN Novelas + Real Madrid TV + 4 de Panamá + RTS + Semillitas + Señal Colombia + Sky One México + Sky Sports 1 México + Sky Sports 16 + Sky Sports 24 + SNT + Sony México + Sorpresa + Space México + Space Panregional + Space Sur + Star Channel México + Studio Universal México + Studio Universal Panregional + Sundance TV España + Sur TV Itapúa Paraguay + Syfy España + TCM Panregional + TCM España + TC Televisión + TeenNick + Teleamazonas + 2 de República Dominicana + Teleantioquia + 7 y 4 de Honduras + Telecafé + Telecaribe + 13 de República Dominicana + Telecentro TV + Telecinco + Teledeporte + Telefé (Argentina) + Telefe Internacional + Telefórmula + Telefuturo + Telehit + Telehit Música + Teleislas + TeleMadrid + Telemetro + Telemicro + Telemundo México + Telenostalgia + 11 de Guatemala + Telepacífico + 11 de República Dominicana + 7 de Costa Rica + Teleunion + 29 de República Dominicana + 4 de Guadalajara + 7 de Guatemala + Tigo Sports Costa Rica + Tigo Sports El Salvador + Tigo Sports Guatemala + TLC MX + TLC Panregional + TLNovelas LATAM + TLNovelas México + TNT México + TNT Pacífico + TNT Sur + TNT España + TNT Sports 2 Chile + TNT Sports 3 Chile + Tooncast + 13 de Colombia + 13 de Paraguay + 13 de Costa Rica + truTV Lat. + Telesistema Informativo (TSI) + TUDN USA + TUDN México + TV5Monde + TV Canaria + TVC Deportes + TV Chile + TVE Internacional + TV Globo Internacional + 9 de Panamá + TVN Chile + 2 de Panamá + Televisión Pública Argentina + TVUNAM + TyC Sports + Unicable MX + Unicanal + Universal Cinema + Universal Comedy + Universal Crime + Universal Premiere + Universal Reality + Universal TV México + Universal TV Panregional + Univision TLNovelas + M+ #Vamos + Ve Plus Estados Unidos + Vía X + Vibra TV + Video Rola + ViendoMovies + 13 de Nicaragua + VTV Honduras + WAPA-TV + WAPA 2 Deportes + Willax TV + Punto 2 + WOBI + 13 de Puerto Rico + 4 de Monterrey + 22 de México + 11 de México + Zona Latina + ZOOM Colombia + diff --git a/sites/gatotv.com/gatotv.com.config.js b/sites/gatotv.com/gatotv.com.config.js index bff22d0f..fe4c327d 100644 --- a/sites/gatotv.com/gatotv.com.config.js +++ b/sites/gatotv.com/gatotv.com.config.js @@ -15,7 +15,6 @@ module.exports = { const items = parseItems(content) date = date.subtract(1, 'd') items.forEach((item, i) => { - const prev = programs[programs.length - 1] const $item = cheerio.load(item) let start = parseStart($item, date) if (i === 0 && start.hour >= 5) { @@ -41,7 +40,7 @@ module.exports = { }, async channels() { const data = await axios - .get(`https://www.gatotv.com/guia_tv/completa`) + .get('https://www.gatotv.com/guia_tv/completa') .then(response => response.data) .catch(console.log) diff --git a/sites/gatotv.com/gatotv.com.test.js b/sites/gatotv.com/gatotv.com.test.js index 814a7953..5f96e16e 100644 --- a/sites/gatotv.com/gatotv.com.test.js +++ b/sites/gatotv.com/gatotv.com.test.js @@ -1,7 +1,7 @@ // npm run channels:parse -- --config=./sites/gatotv.com/gatotv.com.config.js --output=./sites/gatotv.com/gatotv.com.channels.xml -// npx epg-grabber --config=sites/gatotv.com/gatotv.com.config.js --channels=sites/gatotv.com/gatotv.com.channels.xml --output=guide.xml +// npm run grab -- --site=gatotv.com -const { parser, url, request } = require('./gatotv.com.config.js') +const { parser, url } = require('./gatotv.com.config.js') const fs = require('fs') const path = require('path') const dayjs = require('dayjs') diff --git a/sites/getafteritmedia.com/getafteritmedia.com.channels.xml b/sites/getafteritmedia.com/getafteritmedia.com.channels.xml index 14c51aac..ef6aa3ad 100644 --- a/sites/getafteritmedia.com/getafteritmedia.com.channels.xml +++ b/sites/getafteritmedia.com/getafteritmedia.com.channels.xml @@ -1,10 +1,8 @@ - - - REV'N Eastern - REV'N Central - REV'N Mountain - REV'N Pacific - REV'N Web Feed - - + + REV'N Central + REV'N Eastern + REV'N Mountain + REV'N Pacific + REV'N Web Feed + diff --git a/sites/getafteritmedia.com/getafteritmedia.com.test.js b/sites/getafteritmedia.com/getafteritmedia.com.test.js index 7edb467e..5d95345f 100644 --- a/sites/getafteritmedia.com/getafteritmedia.com.test.js +++ b/sites/getafteritmedia.com/getafteritmedia.com.test.js @@ -1,4 +1,4 @@ -// npx epg-grabber --config=sites/getafteritmedia.com/getafteritmedia.com.config.js --channels=sites/getafteritmedia.com/getafteritmedia.com.channels.xml --output=guide.xml --days=2 +// npm run grab -- --site=getafteritmedia.com const { parser, url } = require('./getafteritmedia.com.config.js') const fs = require('fs') @@ -33,7 +33,7 @@ it('can parse response', () => { expect(results[0]).toMatchObject({ start: '2022-11-26T05:00:00.000Z', stop: '2022-11-26T05:30:00.000Z', - title: `The Appraisers` + title: 'The Appraisers' }) }) @@ -41,7 +41,7 @@ it('can handle empty guide', () => { const result = parser({ date, channel, - content: `` + content: '' }) expect(result).toMatchObject([]) }) diff --git a/sites/guidatv.sky.it/guidatv.sky.it.channels.xml b/sites/guidatv.sky.it/guidatv.sky.it.channels.xml index 1a8bdbe0..974ffd4c 100644 --- a/sites/guidatv.sky.it/guidatv.sky.it.channels.xml +++ b/sites/guidatv.sky.it/guidatv.sky.it.channels.xml @@ -1,168 +1,166 @@ - - - 20 Mediaset - 27 Twentyseven - ACI Sport Tv - Aljazeera English - Baby TV Europe - BBC World News - BFC Forbes - BIKE - Blaze HD - Bloomberg TV Europe - Boing Italia - Boomerang Italia - Boomerang Italia +1 - Caccia - Canale 5 - Cartoonito Italia - Cartoon Network India - Cartoon Network Italia +1 - Cielo - Cine 34 - Class CNBC - Classica HD - CNBC Europe - CNN International Europe - Comedy Central Italia - Comedy Central Italia +1 - Crime + Investigation Network Italia - DeA Junior - DeA Kids - DeA Kids +1 - Deejay TV - Discovery Channel Italia - Discovery Channel Italia +1 - DMAX Italia - Emilia-Romagna 24 - EQUtv - Euronews English - Eurosport 1 Italia - Eurosport 2 Italia - Explorer HD Channel - Fashion TV - Food Network Italia - Fox Business - Fox News Channel - France 24 English - France 24 Français - Frisbee - Gambero Rosso Channel - Giallo - HGTV Italia - History Italia - Horse TV - I24 News English - Inter TV - Iris - Italia 1 - Italia 2 - K2 - La 5 - La 7 - La 7 d - Lazio Style TV - Mediaset Extra - Milan TV - Motor Trend - MTV HD - MTV Music - National Geographic Italia - National Geographic Italia +1 - National Geographic Wild Italia - National Geographic Wild Italia +1 - Nickelodeon Italia - Nickelodeon Italia +1 - Nick Jr Italia - Nick Jr Italia +1 - Nove - Pesca - POP Economy - QVC Italia - Radio Freccia TV - Radio Italia Trend Tv HD - Radio Italia TV - Radio Monte Carlo TV - Radionorba TV - Rai 1 - Rai 2 - Rai 3 - Rai 4 - Rai 5 - Rai Gulp - Rai Movie - Rai News 24 - Rai Premium - Rai Sport - Rai Storia - Rai Yoyo - Real Time Italia - Rete 4 - RTL 102.5 RadioVisione - San Marino RTV - Sky Arte - Sky Atlantic - Sky Atlantic +1 - Sky Cinema 4K - Sky Cinema Action - Adventure Collection HD - Sky Cinema Comedy - Sky Cinema Drama - Sky Cinema Due - Sky Cinema Due +24 - Sky Cinema Family - Sky Cinema Romance - Sky Cinema Suspense - Sky Cinema Uno - Sky Cinema Uno +24 - Sky Documentaries HD - Sky Documentaries +1 HD - Sky Investigation HD - Sky Investigation +1 HD - Sky Meteo 24 - Sky Nature HD - Sky News International - Sky Serie HD - Sky Serie Anime HD - Sky Sport 10 - Sky Sport 11 - Sky Sport 24 - Sky Sport 2 - Sky Sport 3 - Sky Sport 4 - Sky Sport 4K - Sky Sport 5 - Sky Sport 6 - Sky Sport 7 - Sky Sport 8 - Sky Sport 9 - Sky Sport Action HD - Sky Sport Arena - Sky Sport F1 - Sky Sport Football - Sky Sport Moto GP - Sky Sport NBA - Sky Sport Serie A - Sky Sport Tennis HD - Sky Sport Uno - Sky TG24 HD - Sky Uno - Sky Uno +1 - Super! - Super Tennis - TgCom24 HD - TG Norba 24 - Top Crime - TRM h24 - TV 2000 - TV 8 - VH1 Italia - Virgin Radio TV - ZONA DAZN - ZONA DAZN 2 - ZONA DAZN 3 - ZONA DAZN 4 - ZONA DAZN 5 - - + + 20 Mediaset + 27 Twentyseven + ACI Sport Tv + Aljazeera English + Baby TV Europe + BBC World News + BFC Forbes + BIKE + Blaze HD + Bloomberg TV Europe + Boing Italia + Boomerang Italia + Boomerang Italia +1 + Caccia + Canale 5 + Cartoonito Italia + Cartoon Network India + Cartoon Network Italia +1 + Cielo + Cine 34 + Class CNBC + Classica HD + CNBC Europe + CNN International Europe + Comedy Central Italia + Comedy Central Italia +1 + Crime + Investigation Network Italia + DeA Junior + DeA Kids + DeA Kids +1 + Deejay TV + Discovery Channel Italia + Discovery Channel Italia +1 + DMAX Italia + Emilia-Romagna 24 + EQUtv + Euronews English + Eurosport 1 Italia + Eurosport 2 Italia + Explorer HD Channel + Fashion TV + Food Network Italia + Fox Business + Fox News Channel + France 24 English + France 24 Français + Frisbee + Gambero Rosso Channel + Giallo + HGTV Italia + History Italia + Horse TV + I24 News English + Inter TV + Iris + Italia 1 + Italia 2 + K2 + La 5 + La 7 + La 7 d + Lazio Style TV + Mediaset Extra + Milan TV + Motor Trend + MTV HD + MTV Music + National Geographic Italia + National Geographic Italia +1 + National Geographic Wild Italia + National Geographic Wild Italia +1 + Nickelodeon Italia + Nickelodeon Italia +1 + Nick Jr Italia + Nick Jr Italia +1 + Nove + Pesca + POP Economy + QVC Italia + Radio Freccia TV + Radio Italia Trend Tv HD + Radio Italia TV + Radio Monte Carlo TV + Radionorba TV + Rai 1 + Rai 2 + Rai 3 + Rai 4 + Rai 5 + Rai Gulp + Rai Movie + Rai News 24 + Rai Premium + Rai Sport + Rai Storia + Rai Yoyo + Real Time Italia + Rete 4 + RTL 102.5 RadioVisione + San Marino RTV + Sky Arte + Sky Atlantic + Sky Atlantic +1 + Sky Cinema 4K + Sky Cinema Action + Adventure Collection HD + Sky Cinema Comedy + Sky Cinema Drama + Sky Cinema Due + Sky Cinema Due +24 + Sky Cinema Family + Sky Cinema Romance + Sky Cinema Suspense + Sky Cinema Uno + Sky Cinema Uno +24 + Sky Documentaries HD + Sky Documentaries +1 HD + Sky Investigation HD + Sky Investigation +1 HD + Sky Meteo 24 + Sky Nature HD + Sky News International + Sky Serie HD + Sky Serie Anime HD + Sky Sport 10 + Sky Sport 11 + Sky Sport 24 + Sky Sport 2 + Sky Sport 3 + Sky Sport 4 + Sky Sport 4K + Sky Sport 5 + Sky Sport 6 + Sky Sport 7 + Sky Sport 8 + Sky Sport 9 + Sky Sport Action HD + Sky Sport Arena + Sky Sport F1 + Sky Sport Football + Sky Sport Moto GP + Sky Sport NBA + Sky Sport Serie A + Sky Sport Tennis HD + Sky Sport Uno + Sky TG24 HD + Sky Uno + Sky Uno +1 + Super! + Super Tennis + TgCom24 HD + TG Norba 24 + Top Crime + TRM h24 + TV 2000 + TV 8 + VH1 Italia + Virgin Radio TV + ZONA DAZN + ZONA DAZN 2 + ZONA DAZN 3 + ZONA DAZN 4 + ZONA DAZN 5 + diff --git a/sites/guidatv.sky.it/guidatv.sky.it.test.js b/sites/guidatv.sky.it/guidatv.sky.it.test.js index 86ca43e4..77e5ee23 100644 --- a/sites/guidatv.sky.it/guidatv.sky.it.test.js +++ b/sites/guidatv.sky.it/guidatv.sky.it.test.js @@ -1,4 +1,4 @@ -// npx epg-grabber --config=sites/guidatv.sky.it/guidatv.sky.it.config.js --channels=sites/guidatv.sky.it/guidatv.sky.it.channels.xml --output=guide.xml --days=2 +// npm run grab -- --site=guidatv.sky.it const { parser, url } = require('./guidatv.sky.it.config.js') const dayjs = require('dayjs') @@ -20,7 +20,8 @@ it('can generate valid url', () => { }) it('can parse response', () => { - const content = `{"events": [ { "channel": { "id": 10458, "logo": "/logo/545820mediasethd_Light_Fit.png", "logoPadding": "/logo/545820mediasethd_Light_Padding.png", "logoDark": "/logo/545820mediasethd_Dark_Fit.png", "logoDarkPadding": "/logo/545820mediasethd_Dark_Padding.png", "logoLight": "/logo/545820mediasethd_Light_Padding.png", "name": "20Mediaset HD", "number": 151, "category": { "id": 3, "name": "Intrattenimento" } }, "content": { "uuid": "77c630aa-4744-44cb-a88e-3e871c6b73d9", "contentTitle": "Distretto di Polizia", "episodeNumber": 26, "seasonNumber": 6, "url": "/serie-tv/distretto-di-polizia/stagione-6/episodio-26/77c630aa-4744-44cb-a88e-3e871c6b73d9", "genre": { "id": 1, "name": "Intrattenimento" }, "subgenre": { "id": 9, "name": "Fiction" }, "imagesMap": [ { "key": "background", "img": { "url": "/uuid/77c630aa-4744-44cb-a88e-3e871c6b73d9/background?md5ChecksumParam=88d3f48ce855316f4be25ab9bb846d32" } }, { "key": "cover", "img": { "url": "/uuid/77c630aa-4744-44cb-a88e-3e871c6b73d9/cover?md5ChecksumParam=61135b999a63e3d3f4a933b9edeb0c1b" } }, { "key": "scene", "img": { "url": "/uuid/77c630aa-4744-44cb-a88e-3e871c6b73d9/16-9?md5ChecksumParam=f41bfe414bec32505abdab19d00b8b43" } } ] }, "eventId": "139585132", "starttime": "2022-05-06T00:35:40Z", "endtime": "2022-05-06T01:15:40Z", "eventTitle": "Distretto di Polizia", "eventSynopsis": "S6 Ep26 La resa dei conti - Fino all'ultimo la sfida tra Ardenzi e Carrano, nemici di vecchia data, riserva clamorosi colpi di scena. E si scopre che non e' tutto come sembrava.", "epgEventTitle": "S6 Ep26 - Distretto di Polizia", "primeVision": false, "resolutions": [ { "resolutionType": "resolution4k", "value": false } ] }]}` + const content = + '{"events": [ { "channel": { "id": 10458, "logo": "/logo/545820mediasethd_Light_Fit.png", "logoPadding": "/logo/545820mediasethd_Light_Padding.png", "logoDark": "/logo/545820mediasethd_Dark_Fit.png", "logoDarkPadding": "/logo/545820mediasethd_Dark_Padding.png", "logoLight": "/logo/545820mediasethd_Light_Padding.png", "name": "20Mediaset HD", "number": 151, "category": { "id": 3, "name": "Intrattenimento" } }, "content": { "uuid": "77c630aa-4744-44cb-a88e-3e871c6b73d9", "contentTitle": "Distretto di Polizia", "episodeNumber": 26, "seasonNumber": 6, "url": "/serie-tv/distretto-di-polizia/stagione-6/episodio-26/77c630aa-4744-44cb-a88e-3e871c6b73d9", "genre": { "id": 1, "name": "Intrattenimento" }, "subgenre": { "id": 9, "name": "Fiction" }, "imagesMap": [ { "key": "background", "img": { "url": "/uuid/77c630aa-4744-44cb-a88e-3e871c6b73d9/background?md5ChecksumParam=88d3f48ce855316f4be25ab9bb846d32" } }, { "key": "cover", "img": { "url": "/uuid/77c630aa-4744-44cb-a88e-3e871c6b73d9/cover?md5ChecksumParam=61135b999a63e3d3f4a933b9edeb0c1b" } }, { "key": "scene", "img": { "url": "/uuid/77c630aa-4744-44cb-a88e-3e871c6b73d9/16-9?md5ChecksumParam=f41bfe414bec32505abdab19d00b8b43" } } ] }, "eventId": "139585132", "starttime": "2022-05-06T00:35:40Z", "endtime": "2022-05-06T01:15:40Z", "eventTitle": "Distretto di Polizia", "eventSynopsis": "S6 Ep26 La resa dei conti - Fino all\'ultimo la sfida tra Ardenzi e Carrano, nemici di vecchia data, riserva clamorosi colpi di scena. E si scopre che non e\' tutto come sembrava.", "epgEventTitle": "S6 Ep26 - Distretto di Polizia", "primeVision": false, "resolutions": [ { "resolutionType": "resolution4k", "value": false } ] }]}' const result = parser({ content }).map(p => { p.start = p.start.toJSON() p.stop = p.stop.toJSON() @@ -45,7 +46,7 @@ it('can parse response', () => { it('can handle empty guide', () => { const result = parser({ - content: `{"events":[],"total":0}` + content: '{"events":[],"total":0}' }) expect(result).toMatchObject([]) }) diff --git a/sites/guide.dstv.com/guide.dstv.com.channels.xml b/sites/guide.dstv.com/guide.dstv.com.channels.xml index 0bdaf11a..f08da374 100644 --- a/sites/guide.dstv.com/guide.dstv.com.channels.xml +++ b/sites/guide.dstv.com/guide.dstv.com.channels.xml @@ -1,326 +1,324 @@ - - - 1KZN TV - 1 Magic Africa - Abol TV - Addis Media Network - Adom TV - Africa Magic Epic - Africa Magic Family - Africa Magic Hausa - Africa Magic Igbo - Africa Magic Showcase Africa - Africa Magic Urban - Africa Magic Yoruba - Africanews - Afro Music Pop - Ahadu TV - AIT International - Akili Kids! - Aljazeera English - Amhara TV - Arewa 24 - Arise News - ARTS TV - Asham TV - AYV TV - B4U Movies UK - Baba TV - Balageru TV - BBC Brit South Africa - BBC Earth South Africa - BBC Lifestyle South Africa - BBC World News Africa - BBS TV - BET Africa - Big Brother Mzansi - Bloomberg TV Africa - Boomerang EMEA - Botswana TV - Bukedde TV 1 - BusinessDay TV - Camnet TV - Cape Town TV - Cartoon Network Middle East & Africa - CBeebies South Africa - CBS Justice Africa - CBS Reality Africa - CCTV 4 Europe - CCTV Entertainment - CGTN - CGTN Documentary - CGTN Français - Channel 44 - Channel O - Channels TV - Citizen TV - CNBC Africa - CNN International Europe - Comedy Central Africa - Curiosity Channel - Da Vinci - Daystar TV - Diamond TV - Discovery Channel Middle East & Africa - Discovery Family Africa - Disney Channel South Africa - Disney Junior South Africa - Dominion TV - Dove TV - Dumisa TV - DW Deutsch - E! Africa - EBS - Edu Channel - E Extra - Emmanuel TV - E Movies - E Movies Extra - ENews Channel Africa - ESPN 2 Africa - ESPN Africa - E Toonz - E TV - E TV Africa - ETV News - EuroNews English - EuroNews Français - EuroNews Deutsch - EuroNews Português - EWTN Africa - Asia - Faith Africa - Fana TV - FliekNet - Food Network EMEA - Galaxy TV - Gau TV - Ghana Learning TV - Ghana TV - Gh One TV - Ginx eSports TV International - HGTV South Africa - Hip TV - History Africa - Honey - Ignition - Inooro TV - Investigation Discovery Africa - Iqraa Africa & Europe - Islam Channel - ITV Networks - Jiangsu TV - JimJam Europe - Joy News - Joy Prime - K24 - Kameme TV - Kass TV - KBC Channel 1 - KBN - Kiss TV - Kix - KTN Home - KTN News - KykNet - KykNet & Kie - KykNet Nou! - Lagos TV - Lifetime Africa - Lumen Christi TV Network - Maisha Magic Bongo - Maisha Magic Movies - Maisha Magic Plus - Maisha Magic Poa - Mambo Moto TV - MBC - Me - Mibawa TV - Mindset Learn - MITV - M-Net East - M-Net Movies 1 East Africa - M-Net Movies 1 West Africa - M-Net Movies 2 - M-Net Movies 3 - M-Net Movies 4 - M-Net Movies Men of Action - M-Net South Africa - M-Net West - Moja Love - MovieRoom - Mpuma Kapa TV - MTV Africa - MTV Base Africa - My Channel Africa - Mzansi Bioskop - Mzansi Magic - Mzansi Magic Music - Mzansi Wethu - Nahoo TV - National Geographic South Africa - National Geographic Wild South Africa - NBC 2 - NBS TV - NDTV 24x7 - Newzroom Afrika - NHK World Japan - Nickelodeon Africa - Nick Jr Africa - NickToons Africa - Novela Magic - Now! TV - NTA 2 - NTA International - NTA News 24 - NTA Parliament - NTV - NTV Uganda - OBN - Ogun State TV - One Africa TV - One Gospel - OneZed - Parliament TV - Parliament TV - PBS Kids - Pearl Magic Prime - People's Weather - Plus TV Africa - Pop Central - Power TV - Racing 240 - Rai Italia Africa - Real Time Africa - Rok - Rok 2 - Rok GH - RT News - SABC 1 - SABC 2 - SABC 3 - SABC News - Salt TV - SBN International - Silverbird TV - Sky News International - Soundcity Africa - Soweto TV - Spice - SSBC TV - StarLife - STN - Studio Universal Africa - Sunna TV - SuperSport Action Africa - SuperSport Blitz Africa - SuperSport Cricket Africa - SuperSport Football Africa - SuperSport Football Plus Africa - SuperSport Golf Africa - SuperSport Grandstand Africa - SuperSport LaLiga Africa - SuperSport Máximo 1 Africa - SuperSport Máximo 2 Africa - SuperSport Motorsport Africa - SuperSport OTT - SuperSport OTT 2 - SuperSport OTT 3 - SuperSport OTT 4 - SuperSport OTT 5 - SuperSport OTT 6 - SuperSport OTT 7 - SuperSport OTT 8 - SuperSport Play - SuperSport Premier League Africa - SuperSport PSL - SuperSport Rugby Africa - SuperSport Tennis Africa - SuperSport Variety 1 Africa - SuperSport Variety 2 Africa - SuperSport Variety 3 Africa - SuperSport Variety 4 Africa - Tanzania Safari Channel - TBN Africa - Telemundo Africa - Televista - Tellytrack 1 - The Home Channel - TLC Africa - Tlnovelas Europa - TNT Africa - Trace Gospel English Speaking Africa - Trace Jama - Trace Muzika - Trace Mziki - Trace Naija - Travel Channel Europe - Trybe TV - Tshwane TV - TV 1 - TV 3 - TV 47 - TV5Monde Afrique - TV Africa - TVC News - TV E - TV Lesotho - TV Moçambique Internacional - TV West - UBC TV - United TV - Universal TV Africa - Urban TV - Via - Walta TV - Wap TV - Wasafi TV - Wazobia Max TV Nigeria - WildEarth - WWE Channel - Y254 - Yadah TV - Zambezi Magic - ZBC TV - Zee Alem - Zee World - ZNBC TV 1 - ZNBC TV 2 - Zodiak TV - Afro Music Channel - AXN Movies - AXN Portugal - Banda TV - Best Brasil - Boomerang Portugal - Boom TV - Canal Panda Portugal - Cine Mundo - Disney Junior Portugal - DSTV Pipoca - Fé TV - Fox Comedy Portugal - Fox Crime Portugal - Fox Life Portugal - Fox Movies Portugal - Fox Portugal - Luta Pela Fama - Media Mais TV - MundoFox - National Geographic Portugal - Palanca TV - Record News - RTP África - RTP Internacional Europa - Soico TV - Strong Live - SuperSport Máximo 360 - TLN Network - TPA 1 - TPA2 - Trace Toca - TVM - TV Miramar - TV Zimbo - - \ No newline at end of file + + 1KZN TV + 1 Magic Africa + Abol TV + Addis Media Network + Adom TV + Africa Magic Epic + Africa Magic Family + Africa Magic Hausa + Africa Magic Igbo + Africa Magic Showcase Africa + Africa Magic Urban + Africa Magic Yoruba + Africanews + Afro Music Pop + Ahadu TV + AIT International + Akili Kids! + Aljazeera English + Amhara TV + Arewa 24 + Arise News + ARTS TV + Asham TV + AYV TV + B4U Movies UK + Baba TV + Balageru TV + BBC Brit South Africa + BBC Earth South Africa + BBC Lifestyle South Africa + BBC World News Africa + BBS TV + BET Africa + Big Brother Mzansi + Bloomberg TV Africa + Boomerang EMEA + Botswana TV + Bukedde TV 1 + BusinessDay TV + Camnet TV + Cape Town TV + Cartoon Network Middle East & Africa + CBeebies South Africa + CBS Justice Africa + CBS Reality Africa + CCTV 4 Europe + CCTV Entertainment + CGTN + CGTN Documentary + CGTN Français + Channel 44 + Channel O + Channels TV + Citizen TV + CNBC Africa + CNN International Europe + Comedy Central Africa + Curiosity Channel + Da Vinci + Daystar TV + Diamond TV + Discovery Channel Middle East & Africa + Discovery Family Africa + Disney Channel South Africa + Disney Junior South Africa + Dominion TV + Dove TV + Dumisa TV + DW Deutsch + E! Africa + EBS + Edu Channel + E Extra + Emmanuel TV + E Movies + E Movies Extra + ENews Channel Africa + ESPN 2 Africa + ESPN Africa + E Toonz + E TV + E TV Africa + ETV News + EuroNews English + EuroNews Français + EuroNews Deutsch + EuroNews Português + EWTN Africa - Asia + Faith Africa + Fana TV + FliekNet + Food Network EMEA + Galaxy TV + Gau TV + Ghana Learning TV + Ghana TV + Gh One TV + Ginx eSports TV International + HGTV South Africa + Hip TV + History Africa + Honey + Ignition + Inooro TV + Investigation Discovery Africa + Iqraa Africa & Europe + Islam Channel + ITV Networks + Jiangsu TV + JimJam Europe + Joy News + Joy Prime + K24 + Kameme TV + Kass TV + KBC Channel 1 + KBN + Kiss TV + Kix + KTN Home + KTN News + KykNet + KykNet & Kie + KykNet Nou! + Lagos TV + Lifetime Africa + Lumen Christi TV Network + Maisha Magic Bongo + Maisha Magic Movies + Maisha Magic Plus + Maisha Magic Poa + Mambo Moto TV + MBC + Me + Mibawa TV + Mindset Learn + MITV + M-Net East + M-Net Movies 1 East Africa + M-Net Movies 1 West Africa + M-Net Movies 2 + M-Net Movies 3 + M-Net Movies 4 + M-Net Movies Men of Action + M-Net South Africa + M-Net West + Moja Love + MovieRoom + Mpuma Kapa TV + MTV Africa + MTV Base Africa + My Channel Africa + Mzansi Bioskop + Mzansi Magic + Mzansi Magic Music + Mzansi Wethu + Nahoo TV + National Geographic South Africa + National Geographic Wild South Africa + NBC 2 + NBS TV + NDTV 24x7 + Newzroom Afrika + NHK World Japan + Nickelodeon Africa + Nick Jr Africa + NickToons Africa + Novela Magic + Now! TV + NTA 2 + NTA International + NTA News 24 + NTA Parliament + NTV + NTV Uganda + OBN + Ogun State TV + One Africa TV + One Gospel + OneZed + Parliament TV + Parliament TV + PBS Kids + Pearl Magic Prime + People's Weather + Plus TV Africa + Pop Central + Power TV + Racing 240 + Rai Italia Africa + Real Time Africa + Rok + Rok 2 + Rok GH + RT News + SABC 1 + SABC 2 + SABC 3 + SABC News + Salt TV + SBN International + Silverbird TV + Sky News International + Soundcity Africa + Soweto TV + Spice + SSBC TV + StarLife + STN + Studio Universal Africa + Sunna TV + SuperSport Action Africa + SuperSport Blitz Africa + SuperSport Cricket Africa + SuperSport Football Africa + SuperSport Football Plus Africa + SuperSport Golf Africa + SuperSport Grandstand Africa + SuperSport LaLiga Africa + SuperSport Máximo 1 Africa + SuperSport Máximo 2 Africa + SuperSport Motorsport Africa + SuperSport OTT + SuperSport OTT 2 + SuperSport OTT 3 + SuperSport OTT 4 + SuperSport OTT 5 + SuperSport OTT 6 + SuperSport OTT 7 + SuperSport OTT 8 + SuperSport Play + SuperSport Premier League Africa + SuperSport PSL + SuperSport Rugby Africa + SuperSport Tennis Africa + SuperSport Variety 1 Africa + SuperSport Variety 2 Africa + SuperSport Variety 3 Africa + SuperSport Variety 4 Africa + Tanzania Safari Channel + TBN Africa + Telemundo Africa + Televista + Tellytrack 1 + The Home Channel + TLC Africa + Tlnovelas Europa + TNT Africa + Trace Gospel English Speaking Africa + Trace Jama + Trace Muzika + Trace Mziki + Trace Naija + Travel Channel Europe + Trybe TV + Tshwane TV + TV 1 + TV 3 + TV 47 + TV5Monde Afrique + TV Africa + TVC News + TV E + TV Lesotho + TV Moçambique Internacional + TV West + UBC TV + United TV + Universal TV Africa + Urban TV + Via + Walta TV + Wap TV + Wasafi TV + Wazobia Max TV Nigeria + WildEarth + WWE Channel + Y254 + Yadah TV + Zambezi Magic + ZBC TV + Zee Alem + Zee World + ZNBC TV 1 + ZNBC TV 2 + Zodiak TV + Afro Music Channel + AXN Movies + AXN Portugal + Banda TV + Best Brasil + Boomerang Portugal + Boom TV + Canal Panda Portugal + Cine Mundo + Disney Junior Portugal + DSTV Pipoca + Fé TV + Fox Comedy Portugal + Fox Crime Portugal + Fox Life Portugal + Fox Movies Portugal + Fox Portugal + Luta Pela Fama + Media Mais TV + MundoFox + National Geographic Portugal + Palanca TV + Record News + RTP África + RTP Internacional Europa + Soico TV + Strong Live + SuperSport Máximo 360 + TLN Network + TPA 1 + TPA2 + Trace Toca + TVM + TV Miramar + TV Zimbo + \ No newline at end of file diff --git a/sites/guide.dstv.com/guide.dstv.com.config.js b/sites/guide.dstv.com/guide.dstv.com.config.js index 44ad8d38..44ca692a 100644 --- a/sites/guide.dstv.com/guide.dstv.com.config.js +++ b/sites/guide.dstv.com/guide.dstv.com.config.js @@ -7,9 +7,9 @@ const customParseFormat = require('dayjs/plugin/customParseFormat') dayjs.extend(utc) dayjs.extend(customParseFormat) +// ERR: certificate has expired module.exports = { site: 'guide.dstv.com', - skip: true, // NOTE: website is down (HTTP Server Error 503) days: 2, request: { cache: { @@ -24,9 +24,9 @@ module.exports = { 'YYYY-MM-DD' )}` }, - parser({ content, date, channel, cached }) { + parser({ content, date, channel }) { const programs = [] - const items = parseItems(content, date, channel) + const items = parseItems(content, channel) items.forEach(item => { const prev = programs[programs.length - 1] let start = parseStart(item, date) @@ -70,13 +70,13 @@ module.exports = { } function parseStart(item, date) { - time = `${date.format('MM/DD/YYYY')} ${item.time}` + const time = `${date.format('MM/DD/YYYY')} ${item.time}` return dayjs.utc(time, 'MM/DD/YYYY HH:mm') } -function parseItems(content, date, channel) { - const [_, channelTag] = channel.site_id.split('#') +function parseItems(content, channel) { + const [, channelTag] = channel.site_id.split('#') const data = JSON.parse(content) const html = data[channelTag] if (!html) return [] diff --git a/sites/guide.dstv.com/guide.dstv.com.test.js b/sites/guide.dstv.com/guide.dstv.com.test.js index afd4c318..09b242e5 100644 --- a/sites/guide.dstv.com/guide.dstv.com.test.js +++ b/sites/guide.dstv.com/guide.dstv.com.test.js @@ -1,5 +1,5 @@ -// node ./scripts/commands/parse-channels.js --config=./sites/guide.dstv.com/guide.dstv.com.config.js --output=./sites/guide.dstv.com/guide.dstv.com.channels.xml --set=bouquet:c35aaecd-5dd1-480b-ae24-357e600a0e4d -// npx epg-grabber --config=sites/guide.dstv.com/guide.dstv.com.config.js --channels=sites/guide.dstv.com/guide.dstv.com.channels.xml --output=guide.xml --timeout=30000 --days=2 +// npm run grab -- --site=guide.dstv.com +// npm run channels:parse -- --config=./sites/guide.dstv.com/guide.dstv.com.config.js --output=./sites/guide.dstv.com/guide.dstv.com.channels.xml --set=bouquet:c35aaecd-5dd1-480b-ae24-357e600a0e4d const { parser, url } = require('./guide.dstv.com.config.js') const dayjs = require('dayjs') @@ -22,7 +22,8 @@ it('can generate valid url', () => { }) it('can parse response', () => { - const content = `{"M4H": " 21:30 Deadly Flight 08:25 I Still Believe 15:50 Despicable Me 20:35 The Foreigner "}` + const content = + "{\"M4H\": \" 21:30 Deadly Flight 08:25 I Still Believe 15:50 Despicable Me 20:35 The Foreigner \"}" const result = parser({ date, channel, content }).map(p => { p.start = p.start.toJSON() p.stop = p.stop.toJSON() @@ -53,6 +54,6 @@ it('can parse response', () => { }) it('can handle empty guide', () => { - const result = parser({ date, channel, content: `{}` }) + const result = parser({ date, channel, content: '{}' }) expect(result).toMatchObject([]) }) diff --git a/sites/hd-plus.de/hd-plus.de.channels.xml b/sites/hd-plus.de/hd-plus.de.channels.xml index c22c83fa..ee89d1b2 100644 --- a/sites/hd-plus.de/hd-plus.de.channels.xml +++ b/sites/hd-plus.de/hd-plus.de.channels.xml @@ -1,125 +1,123 @@ - - - 1-2-3 TV - 13th Street Deutschland - 3sat - Anixe HD Serie - ARD Alpha - ARTE Deutsch - AstroTV - ATV - ATV 2 - Augsburg TV - Sony AXN - Bayerisches Fernsehen Nord - Bibel TV - Bloomberg TV Europe - Boomerang Deutschland - Cartoon Network Deutschland - Channel 21 - Comedy Central Deutschland - Das Erste - Deluxe Music - Deutsches Musik Fernsehen - Die Neue Zeit TV - Discovery Channel Deutschland - Disney Channel Deutschland - DMAX Deutschland - E! Europe - EuroNews Deutsch - Eurosport 1 Germany - EWTN auf Deutsch - Franken Fernsehen - GoTV - Heimatkanal - History Deutschland - Hope TV Deutsch - HR Fernsehen - HSE - HSE Extra - JML Direct - Junior - Juwelo - Kabel Eins Classics - Kabel Eins Deutschland - KIKA - Kinowelt TV - K-TV - L TV - Motorvision TV - MTV Germany - MTV Hits Europe - MTV Live HD - München TV - National Geographic Deutschland - National Geographic Wild Deutschland - Nitro Deutschland - NPO 1 - NPO 2 - N-TV - One - ORF 1 - ORF 2 - ORF III - ORF Sport + - Pearl TV - Phoenix - ProSieben Deutschland - ProSieben Maxx Deutschland - Puls 4 - QVC Deutschland - QVC Zwei - RFO - RheinMain TV - RiC - Romance TV Deutschland - RTL Crime Deutschland - RTL Deutschland - RTL Living Deutschland - RTL Zwei Deutschland - Sat. 1 Deutschland - Sat. 1 Emotions - Sat. 1 Gold Deutschland - Servus TV Deutschland - Sixx Deutschland - Sky Atlantic - Sky Cinema Action - Sky Cinema Hits - Sky Cinema Nostalgie - Sky Comedy - Sky Krimi - Sky Sport 1 - Sky Sport 2 - Sky Sport Austria 1 - Sky Sport Bundesliga 1 - Sky Sport Bundesliga 2 - Sky Sport Bundesliga 3 - Sky Sport Bundesliga 4 - Sky Sport News - Sonnenklar TV - Sport 1 - Sport 1+ - Sportdigital Fussball - SRF 1 - SR Fernsehen - SRF Zwei - Stingray Classica - Super RTL Deutschland - Syfy Deutschland - Tagesschau 24 - Tele 5 - TLC Germany - TNT Film - TNT Serie - TVA Ostbayern - TV Oberfranken - Universal TV Deutschland - Vox Deutschland - Welt - Welt der Wunder TV - ZDF - ZDF Info - ZDF Neo - - + + 1-2-3 TV + 13th Street Deutschland + 3sat + Anixe HD Serie + ARD Alpha + ARTE Deutsch + AstroTV + ATV + ATV 2 + Augsburg TV + Bibel TV + Bloomberg TV Europe + Boomerang Deutschland + Bayerisches Fernsehen Nord + Cartoon Network Deutschland + Channel 21 + Comedy Central Deutschland + Das Erste + Deluxe Music + Deutsches Musik Fernsehen + Die Neue Zeit TV + Discovery Channel Deutschland + Disney Channel Deutschland + DMAX Deutschland + E! Europe + EuroNews Deutsch + Eurosport 1 Germany + EWTN auf Deutsch + Franken Fernsehen + GoTV + Heimatkanal + History Deutschland + Hope TV Deutsch + HR Fernsehen + HSE + HSE Extra + JML Direct + Junior + Juwelo + Kabel Eins Deutschland + Kabel Eins Classics + KIKA + Kinowelt TV + K-TV + L TV + Motorvision TV + MTV Germany + MTV Hits Europe + MTV Live HD + München TV + National Geographic Deutschland + National Geographic Wild Deutschland + Nitro Deutschland + NPO 1 + NPO 2 + N-TV + One + ORF 1 + ORF 2 + ORF III + ORF Sport + + Pearl TV + Phoenix + ProSieben Deutschland + ProSieben Maxx Deutschland + Puls 4 + QVC Zwei + QVC Deutschland + RFO + RheinMain TV + RiC + Romance TV Deutschland + RTL Crime Deutschland + RTL Deutschland + RTL Living Deutschland + RTL Zwei Deutschland + Sat. 1 Deutschland + Sat. 1 Emotions + Sat. 1 Gold Deutschland + Servus TV Deutschland + Sixx Deutschland + Sky Atlantic + Sky Cinema Action + Sky Cinema Hits + Sky Cinema Nostalgie + Sky Comedy + Sky Krimi + Sky Sport 1 + Sky Sport 2 + Sky Sport Austria 1 + Sky Sport Bundesliga 1 + Sky Sport Bundesliga 2 + Sky Sport Bundesliga 3 + Sky Sport Bundesliga 4 + Sky Sport News + Sonnenklar TV + Sony AXN + Sport 1 + Sport 1+ + Sportdigital Fussball + SRF 1 + SR Fernsehen + SRF Zwei + Stingray Classica + Super RTL Deutschland + Syfy Deutschland + Tagesschau 24 + Tele 5 + TLC Germany + TNT Film + TNT Serie + TVA Ostbayern + TV Oberfranken + Universal TV Deutschland + Vox Deutschland + Welt + Welt der Wunder TV + ZDF + ZDF Info + ZDF Neo + diff --git a/sites/hd-plus.de/hd-plus.de.test.js b/sites/hd-plus.de/hd-plus.de.test.js index bbb5c2be..d8cb96d4 100644 --- a/sites/hd-plus.de/hd-plus.de.test.js +++ b/sites/hd-plus.de/hd-plus.de.test.js @@ -1,4 +1,4 @@ -// npx epg-grabber --config=sites/hd-plus.de/hd-plus.de.config.js --channels=sites/hd-plus.de/hd-plus.de.channels.xml --output=guide.xml --days=2 +// npm run grab -- --site=hd-plus.de const { parser, url } = require('./hd-plus.de.config.js') const dayjs = require('dayjs') @@ -12,7 +12,8 @@ const channel = { site_id: '1-2-3-tv-hd', xmltv_id: '123tv.de' } -const content = ` 1-2-3.tv HD Titel Ausstrahlungszeit Ihre Lieblingsuhren Do 25.11 00:00 Ihre Lieblingsuhren Do 25.11 01:00 Flash DealsDo 25.11 06:00 ` +const content = + ' 1-2-3.tv HD Titel Ausstrahlungszeit Ihre Lieblingsuhren Do 25.11 00:00 Ihre Lieblingsuhren Do 25.11 01:00 Flash DealsDo 25.11 06:00 ' it('can generate valid url', () => { const today = dayjs.utc().startOf('d') @@ -30,17 +31,17 @@ it('can parse response', () => { { start: '2021-11-24T23:00:00.000Z', stop: '2021-11-25T00:00:00.000Z', - title: `Ihre Lieblingsuhren` + title: 'Ihre Lieblingsuhren' }, { start: '2021-11-25T00:00:00.000Z', stop: '2021-11-25T05:00:00.000Z', - title: `Ihre Lieblingsuhren` + title: 'Ihre Lieblingsuhren' }, { start: '2021-11-25T05:00:00.000Z', stop: '2021-11-25T06:00:00.000Z', - title: `Flash Deals` + title: 'Flash Deals' } ]) }) @@ -49,7 +50,7 @@ it('can handle empty guide', () => { const result = parser({ date, channel, - content: `` + content: '' }) expect(result).toMatchObject([]) }) diff --git a/sites/horizon.tv/horizon.tv.channels.xml b/sites/horizon.tv/horizon.tv.channels.xml index 571ebb74..add65f86 100644 --- a/sites/horizon.tv/horizon.tv.channels.xml +++ b/sites/horizon.tv/horizon.tv.channels.xml @@ -1,189 +1,187 @@ - - - RTVS 24 HD - 360 TuneBox HD - AMC HD - Animal Planet HD - Magyar ATV - Auto Motor Sport - BabesTV HD - Barrandov Krimi HD - Bober - Brazzers TV HD - Cartoon Network HD - Cinemax 2 HD - Cinemax HD - Club MTV - CNBC Europe HD - CNN - CNN Prima News HD - Cool TV - CS History - CS Mystery - CT 1 HD - CT 2 HD - CT 24 HD - CT sport HD - Current Time - Discovery HD - Discovery Science HD - Disney Channel - Docubox HD - Dom Kino - Dom Kino PREMIUM HD - DTX HD - ducktv HD - Duna - Duna World - Dvojka HD - Deutsche Welle - EroXXX HD - Espreso TV - Euronews HD - Euronews FR - Euronews HU - Eurosport 1 HD - Eurosport 2 HD - Extasy HD - Extreme Sports - FashionBox - Fashion TV HD - Fast & FunBox HD - Fem3 - Fightbox HD - FilmBox HD - FilmBox Arthouse - FilmBox Extra HD - FilmBox Family - FilmBox Premium HD - FilmBox Stars HD - Film+ CZ HD - FILM+ HU - Folklorika HD - Food Network HD - France 24 - HBO 2 HD - HBO 3 HD - HBO HD - HirTV - History HD - Hobby TV HD - Jednotka HD - JimJam - JOJ 24 HD - JOJ Cinema HD - Jojko HD - JOJ Plus HD - JOJ Sport HD - WAU HD - Kabel eins - Carousel - Kino Barrandov HD - Leo TV HD - m1 HD - m2 - m4 Sport HD - m5 - Markiza HD - Dajto HD - Doma HD - Mezzo - Minimax - Mnam TV HD - Mnau TV - MTV 00s - MTV 80s - MTV 90s - MTV Live HD - Muzika Pervogo - Muzsika TV - National Geographic HD - Nat Geo Wild HD - Nick Jr. - Nickelodeon - NickToons - Nitro - Nova International HD - Nova Sport 1 HD - Nova Sport 2 HD - O! - ORF 1 - ORF 2 - ORF III - Park TV - Pobeda - Poekhali! - Prima COOL HD - Prima KRIMI HD - Prima love HD - Prima MAX HD - Prima PLUS HD - Prima ZOOM HD - ProSieben - Reality Kings HD - RELAX - Retro Music TV - RTL Gold - RTL KETTŐ - RTL DE - RTL HÁROM - RTL - RTL Zwei - SAT 1 - SENZI HD - Sky News - Slager muzika - Slager original - Slager Premium HD - Slager TV - Sorozat+ - Spektrum HD - Spektrum home - RTVS Sport HD - Sport 1 HD - Sport 2 HD - Sport 5 - Story 4 - Super RTL - Super TV2 - TA3 HD - Telecafe - Seznam.cz TV HD - Fishing and Hunting - Travel Channel HD - TRT World - TurboTV HD - TV2 - TV2Sef - TV4 - TV8 - Barrandov TV HD - JOJ HD - TV LUX HD - Noe TV HD - TV Paprika - TV Paprika HU - TVP Polonia - TV Raj HD - TV Romana - TV Ruzinov HD - UATV - Viasat Explore HD - Viasat History HD - Viasat Nature HD - VOX - Vremja - WELT - - - - - - - - - - - - + + + + + + + + + + + + Kabel eins + Nitro + ORF 1 + ORF 2 + ORF III + ProSieben + RTL DE + RTL Zwei + SAT 1 + Super RTL + VOX + WELT + 360 TuneBox HD + BabesTV HD + Brazzers TV HD + Club MTV + CNBC Europe HD + CNN + Docubox HD + Deutsche Welle + EroXXX HD + Euronews HD + Extasy HD + Extreme Sports + FashionBox + Fashion TV HD + Fast & FunBox HD + Fightbox HD + FilmBox Arthouse + Mezzo + MTV 00s + MTV 80s + MTV 90s + MTV Live HD + Reality Kings HD + Sky News + TRT World + UATV + Euronews FR + France 24 + RTVS 24 HD + AMC HD + Animal Planet HD + Magyar ATV + Auto Motor Sport + Barrandov Krimi HD + Bober + Cartoon Network HD + Cinemax 2 HD + Cinemax HD + CNN Prima News HD + Cool TV + CS History + CS Mystery + CT 1 HD + CT 2 HD + CT 24 HD + CT sport HD + Current Time + Discovery HD + Discovery Science HD + Disney Channel + Dom Kino + Dom Kino PREMIUM HD + DTX HD + ducktv HD + Duna + Duna World + Dvojka HD + Espreso TV + Euronews HU + Eurosport 1 HD + Eurosport 2 HD + Fem3 + FilmBox HD + FilmBox Extra HD + FilmBox Family + FilmBox Premium HD + FilmBox Stars HD + Film+ CZ HD + FILM+ HU + Folklorika HD + Food Network HD + HBO 2 HD + HBO 3 HD + HBO HD + HirTV + History HD + Hobby TV HD + Jednotka HD + JimJam + JOJ 24 HD + JOJ Cinema HD + Jojko HD + JOJ Plus HD + JOJ Sport HD + WAU HD + Carousel + Kino Barrandov HD + Leo TV HD + m1 HD + m2 + m4 Sport HD + m5 + Markiza HD + Dajto HD + Doma HD + Minimax + Mnam TV HD + Mnau TV + Muzika Pervogo + Muzsika TV + National Geographic HD + Nat Geo Wild HD + Nickelodeon + Nick Jr. + NickToons + Nova International HD + Nova Sport 1 HD + Nova Sport 2 HD + O! + Park TV + Pobeda + Poekhali! + Prima COOL HD + Prima KRIMI HD + Prima love HD + Prima MAX HD + Prima PLUS HD + Prima ZOOM HD + RELAX + Retro Music TV + RTL Gold + RTL HÁROM + RTL + RTL KETTŐ + SENZI HD + Slager muzika + Slager original + Slager Premium HD + Slager TV + Sorozat+ + Spektrum HD + Spektrum home + RTVS Sport HD + Sport 1 HD + Sport 2 HD + Sport 5 + Story 4 + Super TV2 + TA3 HD + Telecafe + Seznam.cz TV HD + Fishing and Hunting + Travel Channel HD + TurboTV HD + TV2 + TV2Sef + TV4 + TV8 + Barrandov TV HD + JOJ HD + TV LUX HD + Noe TV HD + TV Paprika + TV Paprika HU + TVP Polonia + TV Raj HD + TV Romana + TV Ruzinov HD + Viasat Explore HD + Viasat History HD + Viasat Nature HD + Vremja + diff --git a/sites/horizon.tv/horizon.tv.config.js b/sites/horizon.tv/horizon.tv.config.js index 92474cfa..0444317c 100644 --- a/sites/horizon.tv/horizon.tv.config.js +++ b/sites/horizon.tv/horizon.tv.config.js @@ -1,7 +1,7 @@ const axios = require('axios') const dayjs = require('dayjs') -const API_ENDPOINT = `https://legacy-static.oesp.horizon.tv/oesp/v4/SK/slk/web` +const API_ENDPOINT = 'https://legacy-static.oesp.horizon.tv/oesp/v4/SK/slk/web' module.exports = { site: 'horizon.tv', @@ -87,7 +87,7 @@ function parseStop(item) { function parseItems(content, channel) { if (!content) return [] - const data = (typeof content === 'string') ? JSON.parse(content) : content + const data = typeof content === 'string' ? JSON.parse(content) : content if (!data || !Array.isArray(data.entries)) return [] const entity = data.entries.find(e => e.o === `lgi-obolite-sk-prod-master:${channel.site_id}`) return entity ? entity.l : [] @@ -142,4 +142,4 @@ function parseYear(detail) { if (!detail) return null if (!detail.program) return null return detail.program.year || null -} \ No newline at end of file +} diff --git a/sites/horizon.tv/horizon.tv.test.js b/sites/horizon.tv/horizon.tv.test.js index 1e3fc985..4a5a6758 100644 --- a/sites/horizon.tv/horizon.tv.test.js +++ b/sites/horizon.tv/horizon.tv.test.js @@ -1,5 +1,5 @@ // npm run channels:parse -- --config=./sites/horizon.tv/horizon.tv.config.js --output=./sites/horizon.tv/horizon.tv.channels.xml -// npx epg-grabber --config=sites/horizon.tv/horizon.tv.config.js --channels=sites/horizon.tv/horizon.tv.channels.xml --output=guide.xml --days=2 +// npm run grab -- --site=horizon.tv const { parser, url } = require('./horizon.tv.config.js') const axios = require('axios') @@ -24,38 +24,70 @@ it('can generate valid url', () => { }) it('can parse response', done => { - const content = `{"entryCount":184,"totalResults":184,"updated":1675790518889,"expires":1675791343825,"title":"EPG","periods":4,"periodStartTime":1675724400000,"periodEndTime":1675746000000,"entries":[{"o":"lgi-obolite-sk-prod-master:10024","l":[{"i":"crid:~~2F~~2Fport.cs~~2F122941980,imi:7ca159c917344e0dd3fbe1cd8db5ff8043d96a78","t":"Avengement","s":1675719300000,"e":1675724700000,"c":"lgi-obolite-sk-prod-master:genre-9","a":false,"r":true,"rm":true,"rs":0,"re":604800,"rst":"cloud","ra":false,"ad":[],"sl":[]}]}]}` + const content = + '{"entryCount":184,"totalResults":184,"updated":1675790518889,"expires":1675791343825,"title":"EPG","periods":4,"periodStartTime":1675724400000,"periodEndTime":1675746000000,"entries":[{"o":"lgi-obolite-sk-prod-master:10024","l":[{"i":"crid:~~2F~~2Fport.cs~~2F122941980,imi:7ca159c917344e0dd3fbe1cd8db5ff8043d96a78","t":"Avengement","s":1675719300000,"e":1675724700000,"c":"lgi-obolite-sk-prod-master:genre-9","a":false,"r":true,"rm":true,"rs":0,"re":604800,"rst":"cloud","ra":false,"ad":[],"sl":[]}]}]}' axios.get.mockImplementation(url => { - if (url === 'https://legacy-static.oesp.horizon.tv/oesp/v4/SK/slk/web/programschedules/20230207/2') { + if ( + url === 'https://legacy-static.oesp.horizon.tv/oesp/v4/SK/slk/web/programschedules/20230207/2' + ) { return Promise.resolve({ - data: JSON.parse(`{"entryCount":184,"totalResults":184,"updated":1675790518889,"expires":1675791376097,"title":"EPG","periods":4,"periodStartTime":1675746000000,"periodEndTime":1675767600000,"entries":[{"o":"lgi-obolite-sk-prod-master:10024","l":[{"i":"crid:~~2F~~2Fport.cs~~2F248281986,imi:e85129f9d1e211406a521df7a36f22237c22651b","t":"Zoom In","s":1675744500000,"e":1675746000000,"c":"lgi-obolite-sk-prod-master:genre-21","a":false,"r":true,"rm":true,"rs":0,"re":604800,"rst":"cloud","ra":false,"ad":[],"sl":[]}]}]}`) + data: JSON.parse( + '{"entryCount":184,"totalResults":184,"updated":1675790518889,"expires":1675791376097,"title":"EPG","periods":4,"periodStartTime":1675746000000,"periodEndTime":1675767600000,"entries":[{"o":"lgi-obolite-sk-prod-master:10024","l":[{"i":"crid:~~2F~~2Fport.cs~~2F248281986,imi:e85129f9d1e211406a521df7a36f22237c22651b","t":"Zoom In","s":1675744500000,"e":1675746000000,"c":"lgi-obolite-sk-prod-master:genre-21","a":false,"r":true,"rm":true,"rs":0,"re":604800,"rst":"cloud","ra":false,"ad":[],"sl":[]}]}]}' + ) }) - } else if (url === 'https://legacy-static.oesp.horizon.tv/oesp/v4/SK/slk/web/programschedules/20230207/3') { + } else if ( + url === 'https://legacy-static.oesp.horizon.tv/oesp/v4/SK/slk/web/programschedules/20230207/3' + ) { return Promise.resolve({ - data: JSON.parse(`{"entryCount":184,"totalResults":184,"updated":1675789948804,"expires":1675791024984,"title":"EPG","periods":4,"periodStartTime":1675767600000,"periodEndTime":1675789200000,"entries":[{"o":"lgi-obolite-sk-prod-master:10024","l":[{"i":"crid:~~2F~~2Fport.cs~~2F1379541,imi:5f806a2a0bc13e9745e14907a27116c60ea2c6ad","t":"Studentka","s":1675761000000,"e":1675767600000,"c":"lgi-obolite-sk-prod-master:genre-14","a":false,"r":true,"rm":true,"rs":0,"re":604800,"rst":"cloud","ra":false,"ad":[],"sl":[]}]}]}`) + data: JSON.parse( + '{"entryCount":184,"totalResults":184,"updated":1675789948804,"expires":1675791024984,"title":"EPG","periods":4,"periodStartTime":1675767600000,"periodEndTime":1675789200000,"entries":[{"o":"lgi-obolite-sk-prod-master:10024","l":[{"i":"crid:~~2F~~2Fport.cs~~2F1379541,imi:5f806a2a0bc13e9745e14907a27116c60ea2c6ad","t":"Studentka","s":1675761000000,"e":1675767600000,"c":"lgi-obolite-sk-prod-master:genre-14","a":false,"r":true,"rm":true,"rs":0,"re":604800,"rst":"cloud","ra":false,"ad":[],"sl":[]}]}]}' + ) }) - } else if (url === 'https://legacy-static.oesp.horizon.tv/oesp/v4/SK/slk/web/programschedules/20230207/4') { + } else if ( + url === 'https://legacy-static.oesp.horizon.tv/oesp/v4/SK/slk/web/programschedules/20230207/4' + ) { return Promise.resolve({ - data: JSON.parse(`{"entryCount":184,"totalResults":184,"updated":1675789948804,"expires":1675790973469,"title":"EPG","periods":4,"periodStartTime":1675789200000,"periodEndTime":1675810800000,"entries":[{"o":"lgi-obolite-sk-prod-master:10024","l":[{"i":"crid:~~2F~~2Fport.cs~~2F71927954,imi:f1b4b0285b72cf44cba74e1c62322a4c682385c7","t":"Zilionáři","s":1675785900000,"e":1675791900000,"c":"lgi-obolite-sk-prod-master:genre-9","a":false,"r":true,"rm":true,"rs":0,"re":604800,"rst":"cloud","ra":false,"ad":[],"sl":[]}]}]}`) + data: JSON.parse( + '{"entryCount":184,"totalResults":184,"updated":1675789948804,"expires":1675790973469,"title":"EPG","periods":4,"periodStartTime":1675789200000,"periodEndTime":1675810800000,"entries":[{"o":"lgi-obolite-sk-prod-master:10024","l":[{"i":"crid:~~2F~~2Fport.cs~~2F71927954,imi:f1b4b0285b72cf44cba74e1c62322a4c682385c7","t":"Zilionáři","s":1675785900000,"e":1675791900000,"c":"lgi-obolite-sk-prod-master:genre-9","a":false,"r":true,"rm":true,"rs":0,"re":604800,"rst":"cloud","ra":false,"ad":[],"sl":[]}]}]}' + ) }) - } else if (url === 'https://legacy-static.oesp.horizon.tv/oesp/v4/SK/slk/web/listings/crid:~~2F~~2Fport.cs~~2F122941980,imi:7ca159c917344e0dd3fbe1cd8db5ff8043d96a78') { + } else if ( + url === + 'https://legacy-static.oesp.horizon.tv/oesp/v4/SK/slk/web/listings/crid:~~2F~~2Fport.cs~~2F122941980,imi:7ca159c917344e0dd3fbe1cd8db5ff8043d96a78' + ) { return Promise.resolve({ - data: JSON.parse(`{"id":"crid:~~2F~~2Fport.cs~~2F122941980,imi:7ca159c917344e0dd3fbe1cd8db5ff8043d96a78","startTime":1675719300000,"endTime":1675724700000,"actualStartTime":1675719300000,"actualEndTime":1675724700000,"expirationDate":1676324100000,"stationId":"lgi-obolite-sk-prod-master:10024","imi":"imi:7ca159c917344e0dd3fbe1cd8db5ff8043d96a78","scCridImi":"crid:~~2F~~2Fport.cs~~2F122941980,imi:7ca159c917344e0dd3fbe1cd8db5ff8043d96a78","mediaGroupId":"crid:~~2F~~2Fport.cs~~2F122941980","program":{"id":"crid:~~2F~~2Fport.cs~~2F122941980","title":"Avengement","description":"Během propustky z vězení za účelem návštěvy umírající matky v nemocnici zločinec Cain Burgess (Scott Adkins) unikne svým dozorcům a mizí v ulicích Londýna. Jde o epickou cestu krve a bolesti za...","longDescription":"Během propustky z vězení za účelem návštěvy umírající matky v nemocnici zločinec Cain Burgess (Scott Adkins) unikne svým dozorcům a mizí v ulicích Londýna. Jde o epickou cestu krve a bolesti za dosažením vytoužené pomsty na těch, kteří z něj udělali chladnokrevného vraha.","medium":"Movie","categories":[{"id":"lgi-obolite-sk-prod-master:genre-9","title":"Drama","scheme":"urn:libertyglobal:metadata:cs:ContentCS:2014_1"},{"id":"lgi-obolite-sk-prod-master:genre-33","title":"Akcia","scheme":"urn:libertyglobal:metadata:cs:ContentCS:2014_1"}],"isAdult":false,"parentalRating":"18","cast":["Scott Adkins","Craig Fairbrass","Thomas Turgoose","Nick Moran","Kierston Wareing","Leo Gregory","Mark Strange","Luke LaFontaine","Beau Fowler","Dan Styles","Christopher Sciueref","Matt Routledge","Jane Thorne","Louis Mandylor","Terence Maynard","Greg Burridge","Michael Higgs","Damian Gallagher","Daniel Adegboyega","John Ioannou","Sofie Golding-Spittle","Joe Egan","Darren Swain","Lee Charles","Dominic Kinnaird","Ross O'Hennessy","Teresa Mahoney","Andrew Dunkelberger","Sam Hardy","Ivan Moy","Mark Sears","Phillip Ray Tommy"],"directors":["Jesse V. Johnson"],"images":[{"assetType":"HighResLandscape","assetTypes":["HighResLandscape"],"url":"http://62.179.125.152/SK/Images/hrl_3fa8387df870473fdacb1024635b52b2496b159c.jpg"},{"assetType":"HighResPortrait","assetTypes":["HighResPortrait"],"url":"http://62.179.125.152/SK/Images/hrp_19e3a660e637cd39e31046c284a66b3a95d698e4.jpg"},{"assetType":"boxCover","assetTypes":["boxCover"],"url":"http://62.179.125.152/SK/Images/bc_939160772e45a783fb3a19970696f5ebcb6e568b.jpg"},{"assetType":"boxart-small","assetTypes":["boxart-small"],"url":"http://62.179.125.152/SK/Images/bc_939160772e45a783fb3a19970696f5ebcb6e568b.jpg?w=75&h=108&mode=box"},{"assetType":"boxart-medium","assetTypes":["boxart-medium"],"url":"http://62.179.125.152/SK/Images/bc_939160772e45a783fb3a19970696f5ebcb6e568b.jpg?w=110&h=159&mode=box"},{"assetType":"boxart-xlarge","assetTypes":["boxart-xlarge"],"url":"http://62.179.125.152/SK/Images/bc_939160772e45a783fb3a19970696f5ebcb6e568b.jpg?w=210&h=303&mode=box"},{"assetType":"boxart-large","assetTypes":["boxart-large"],"url":"http://62.179.125.152/SK/Images/bc_939160772e45a783fb3a19970696f5ebcb6e568b.jpg?w=180&h=260&mode=box"}],"rootId":"crid:~~2F~~2Fport.cs~~2F122941980","parentalRatingDescription":[],"resolutions":[],"mediaGroupId":"crid:~~2F~~2Fport.cs~~2F122941980","shortDescription":"Během propustky z vězení za účelem návštěvy umírající matky v nemocnici zločinec Cain Burgess (Scott Adkins) unikne svým dozorcům a mizí v ulicích Londýna. Jde o epickou cestu krve a bolesti za...","mediaType":"FeatureFilm","year":"2019","videos":[],"videoStreams":[],"entitlements":["VIP","_OPEN_"],"currentProductIds":[],"currentTvodProductIds":[]},"rootId":"crid:~~2F~~2Fport.cs~~2F122941980","replayTvAvailable":true,"audioTracks":[],"ratings":[],"offersLatestExpirationDate":1676247300000,"replayTvStartOffset":0,"replayTvEndOffset":604800,"replayEnabledOnMobileClients":true,"replaySource":"cloud","isGoReplayableViaExternalApp":false}`) + data: JSON.parse( + '{"id":"crid:~~2F~~2Fport.cs~~2F122941980,imi:7ca159c917344e0dd3fbe1cd8db5ff8043d96a78","startTime":1675719300000,"endTime":1675724700000,"actualStartTime":1675719300000,"actualEndTime":1675724700000,"expirationDate":1676324100000,"stationId":"lgi-obolite-sk-prod-master:10024","imi":"imi:7ca159c917344e0dd3fbe1cd8db5ff8043d96a78","scCridImi":"crid:~~2F~~2Fport.cs~~2F122941980,imi:7ca159c917344e0dd3fbe1cd8db5ff8043d96a78","mediaGroupId":"crid:~~2F~~2Fport.cs~~2F122941980","program":{"id":"crid:~~2F~~2Fport.cs~~2F122941980","title":"Avengement","description":"Během propustky z vězení za účelem návštěvy umírající matky v nemocnici zločinec Cain Burgess (Scott Adkins) unikne svým dozorcům a mizí v ulicích Londýna. Jde o epickou cestu krve a bolesti za...","longDescription":"Během propustky z vězení za účelem návštěvy umírající matky v nemocnici zločinec Cain Burgess (Scott Adkins) unikne svým dozorcům a mizí v ulicích Londýna. Jde o epickou cestu krve a bolesti za dosažením vytoužené pomsty na těch, kteří z něj udělali chladnokrevného vraha.","medium":"Movie","categories":[{"id":"lgi-obolite-sk-prod-master:genre-9","title":"Drama","scheme":"urn:libertyglobal:metadata:cs:ContentCS:2014_1"},{"id":"lgi-obolite-sk-prod-master:genre-33","title":"Akcia","scheme":"urn:libertyglobal:metadata:cs:ContentCS:2014_1"}],"isAdult":false,"parentalRating":"18","cast":["Scott Adkins","Craig Fairbrass","Thomas Turgoose","Nick Moran","Kierston Wareing","Leo Gregory","Mark Strange","Luke LaFontaine","Beau Fowler","Dan Styles","Christopher Sciueref","Matt Routledge","Jane Thorne","Louis Mandylor","Terence Maynard","Greg Burridge","Michael Higgs","Damian Gallagher","Daniel Adegboyega","John Ioannou","Sofie Golding-Spittle","Joe Egan","Darren Swain","Lee Charles","Dominic Kinnaird","Ross O\'Hennessy","Teresa Mahoney","Andrew Dunkelberger","Sam Hardy","Ivan Moy","Mark Sears","Phillip Ray Tommy"],"directors":["Jesse V. Johnson"],"images":[{"assetType":"HighResLandscape","assetTypes":["HighResLandscape"],"url":"http://62.179.125.152/SK/Images/hrl_3fa8387df870473fdacb1024635b52b2496b159c.jpg"},{"assetType":"HighResPortrait","assetTypes":["HighResPortrait"],"url":"http://62.179.125.152/SK/Images/hrp_19e3a660e637cd39e31046c284a66b3a95d698e4.jpg"},{"assetType":"boxCover","assetTypes":["boxCover"],"url":"http://62.179.125.152/SK/Images/bc_939160772e45a783fb3a19970696f5ebcb6e568b.jpg"},{"assetType":"boxart-small","assetTypes":["boxart-small"],"url":"http://62.179.125.152/SK/Images/bc_939160772e45a783fb3a19970696f5ebcb6e568b.jpg?w=75&h=108&mode=box"},{"assetType":"boxart-medium","assetTypes":["boxart-medium"],"url":"http://62.179.125.152/SK/Images/bc_939160772e45a783fb3a19970696f5ebcb6e568b.jpg?w=110&h=159&mode=box"},{"assetType":"boxart-xlarge","assetTypes":["boxart-xlarge"],"url":"http://62.179.125.152/SK/Images/bc_939160772e45a783fb3a19970696f5ebcb6e568b.jpg?w=210&h=303&mode=box"},{"assetType":"boxart-large","assetTypes":["boxart-large"],"url":"http://62.179.125.152/SK/Images/bc_939160772e45a783fb3a19970696f5ebcb6e568b.jpg?w=180&h=260&mode=box"}],"rootId":"crid:~~2F~~2Fport.cs~~2F122941980","parentalRatingDescription":[],"resolutions":[],"mediaGroupId":"crid:~~2F~~2Fport.cs~~2F122941980","shortDescription":"Během propustky z vězení za účelem návštěvy umírající matky v nemocnici zločinec Cain Burgess (Scott Adkins) unikne svým dozorcům a mizí v ulicích Londýna. Jde o epickou cestu krve a bolesti za...","mediaType":"FeatureFilm","year":"2019","videos":[],"videoStreams":[],"entitlements":["VIP","_OPEN_"],"currentProductIds":[],"currentTvodProductIds":[]},"rootId":"crid:~~2F~~2Fport.cs~~2F122941980","replayTvAvailable":true,"audioTracks":[],"ratings":[],"offersLatestExpirationDate":1676247300000,"replayTvStartOffset":0,"replayTvEndOffset":604800,"replayEnabledOnMobileClients":true,"replaySource":"cloud","isGoReplayableViaExternalApp":false}' + ) }) - } else if (url === 'https://legacy-static.oesp.horizon.tv/oesp/v4/SK/slk/web/listings/crid:~~2F~~2Fport.cs~~2F248281986,imi:e85129f9d1e211406a521df7a36f22237c22651b') { + } else if ( + url === + 'https://legacy-static.oesp.horizon.tv/oesp/v4/SK/slk/web/listings/crid:~~2F~~2Fport.cs~~2F248281986,imi:e85129f9d1e211406a521df7a36f22237c22651b' + ) { return Promise.resolve({ - data: JSON.parse(`{"id":"crid:~~2F~~2Fport.cs~~2F248281986,imi:e85129f9d1e211406a521df7a36f22237c22651b","startTime":1675744500000,"endTime":1675746000000,"actualStartTime":1675744500000,"actualEndTime":1675746000000,"expirationDate":1676349300000,"stationId":"lgi-obolite-sk-prod-master:10024","imi":"imi:e85129f9d1e211406a521df7a36f22237c22651b","scCridImi":"crid:~~2F~~2Fport.cs~~2F248281986,imi:e85129f9d1e211406a521df7a36f22237c22651b","mediaGroupId":"crid:~~2F~~2Fport.cs~~2F41764266","program":{"id":"crid:~~2F~~2Fport.cs~~2F248281986","title":"Zoom In","description":"Film/Kino","longDescription":"Film/Kino","medium":"TV","categories":[{"id":"lgi-obolite-sk-prod-master:genre-21","title":"Hudba a umenie","scheme":"urn:libertyglobal:metadata:cs:ContentCS:2014_1"},{"id":"lgi-obolite-sk-prod-master:genre-14","title":"Film","scheme":"urn:libertyglobal:metadata:cs:ContentCS:2014_1"}],"isAdult":false,"parentalRating":"9","cast":[],"directors":[],"images":[{"assetType":"HighResLandscape","assetTypes":["HighResLandscape"],"url":"http://62.179.125.152/SK/Images/hrl_cbed64b557e83227a2292604cbcae2d193877b1c.jpg"},{"assetType":"HighResPortrait","assetTypes":["HighResPortrait"],"url":"http://62.179.125.152/SK/Images/hrp_cfe405e669385365846b69196e1e94caa3e60de0.jpg"},{"assetType":"boxCover","assetTypes":["boxCover"],"url":"http://62.179.125.152/SK/Images/bc_cfe405e669385365846b69196e1e94caa3e60de0.jpg"},{"assetType":"boxart-small","assetTypes":["boxart-small"],"url":"http://62.179.125.152/SK/Images/bc_cfe405e669385365846b69196e1e94caa3e60de0.jpg?w=75&h=108&mode=box"},{"assetType":"boxart-medium","assetTypes":["boxart-medium"],"url":"http://62.179.125.152/SK/Images/bc_cfe405e669385365846b69196e1e94caa3e60de0.jpg?w=110&h=159&mode=box"},{"assetType":"boxart-xlarge","assetTypes":["boxart-xlarge"],"url":"http://62.179.125.152/SK/Images/bc_cfe405e669385365846b69196e1e94caa3e60de0.jpg?w=210&h=303&mode=box"},{"assetType":"boxart-large","assetTypes":["boxart-large"],"url":"http://62.179.125.152/SK/Images/bc_cfe405e669385365846b69196e1e94caa3e60de0.jpg?w=180&h=260&mode=box"}],"parentId":"crid:~~2F~~2Fport.cs~~2F41764266_series","rootId":"crid:~~2F~~2Fport.cs~~2F41764266","parentalRatingDescription":[],"resolutions":[],"mediaGroupId":"crid:~~2F~~2Fport.cs~~2F41764266","shortDescription":"Film/Kino","mediaType":"Episode","year":"2010","seriesEpisodeNumber":"1302070535","seriesNumber":"1302080520","videos":[],"videoStreams":[],"entitlements":["VIP","_OPEN_"],"currentProductIds":[],"currentTvodProductIds":[]},"parentId":"crid:~~2F~~2Fport.cs~~2F41764266_series","rootId":"crid:~~2F~~2Fport.cs~~2F41764266","replayTvAvailable":true,"audioTracks":[],"ratings":[],"offersLatestExpirationDate":1675746000000,"replayTvStartOffset":0,"replayTvEndOffset":604800,"replayEnabledOnMobileClients":true,"replaySource":"cloud","isGoReplayableViaExternalApp":false}`) + data: JSON.parse( + '{"id":"crid:~~2F~~2Fport.cs~~2F248281986,imi:e85129f9d1e211406a521df7a36f22237c22651b","startTime":1675744500000,"endTime":1675746000000,"actualStartTime":1675744500000,"actualEndTime":1675746000000,"expirationDate":1676349300000,"stationId":"lgi-obolite-sk-prod-master:10024","imi":"imi:e85129f9d1e211406a521df7a36f22237c22651b","scCridImi":"crid:~~2F~~2Fport.cs~~2F248281986,imi:e85129f9d1e211406a521df7a36f22237c22651b","mediaGroupId":"crid:~~2F~~2Fport.cs~~2F41764266","program":{"id":"crid:~~2F~~2Fport.cs~~2F248281986","title":"Zoom In","description":"Film/Kino","longDescription":"Film/Kino","medium":"TV","categories":[{"id":"lgi-obolite-sk-prod-master:genre-21","title":"Hudba a umenie","scheme":"urn:libertyglobal:metadata:cs:ContentCS:2014_1"},{"id":"lgi-obolite-sk-prod-master:genre-14","title":"Film","scheme":"urn:libertyglobal:metadata:cs:ContentCS:2014_1"}],"isAdult":false,"parentalRating":"9","cast":[],"directors":[],"images":[{"assetType":"HighResLandscape","assetTypes":["HighResLandscape"],"url":"http://62.179.125.152/SK/Images/hrl_cbed64b557e83227a2292604cbcae2d193877b1c.jpg"},{"assetType":"HighResPortrait","assetTypes":["HighResPortrait"],"url":"http://62.179.125.152/SK/Images/hrp_cfe405e669385365846b69196e1e94caa3e60de0.jpg"},{"assetType":"boxCover","assetTypes":["boxCover"],"url":"http://62.179.125.152/SK/Images/bc_cfe405e669385365846b69196e1e94caa3e60de0.jpg"},{"assetType":"boxart-small","assetTypes":["boxart-small"],"url":"http://62.179.125.152/SK/Images/bc_cfe405e669385365846b69196e1e94caa3e60de0.jpg?w=75&h=108&mode=box"},{"assetType":"boxart-medium","assetTypes":["boxart-medium"],"url":"http://62.179.125.152/SK/Images/bc_cfe405e669385365846b69196e1e94caa3e60de0.jpg?w=110&h=159&mode=box"},{"assetType":"boxart-xlarge","assetTypes":["boxart-xlarge"],"url":"http://62.179.125.152/SK/Images/bc_cfe405e669385365846b69196e1e94caa3e60de0.jpg?w=210&h=303&mode=box"},{"assetType":"boxart-large","assetTypes":["boxart-large"],"url":"http://62.179.125.152/SK/Images/bc_cfe405e669385365846b69196e1e94caa3e60de0.jpg?w=180&h=260&mode=box"}],"parentId":"crid:~~2F~~2Fport.cs~~2F41764266_series","rootId":"crid:~~2F~~2Fport.cs~~2F41764266","parentalRatingDescription":[],"resolutions":[],"mediaGroupId":"crid:~~2F~~2Fport.cs~~2F41764266","shortDescription":"Film/Kino","mediaType":"Episode","year":"2010","seriesEpisodeNumber":"1302070535","seriesNumber":"1302080520","videos":[],"videoStreams":[],"entitlements":["VIP","_OPEN_"],"currentProductIds":[],"currentTvodProductIds":[]},"parentId":"crid:~~2F~~2Fport.cs~~2F41764266_series","rootId":"crid:~~2F~~2Fport.cs~~2F41764266","replayTvAvailable":true,"audioTracks":[],"ratings":[],"offersLatestExpirationDate":1675746000000,"replayTvStartOffset":0,"replayTvEndOffset":604800,"replayEnabledOnMobileClients":true,"replaySource":"cloud","isGoReplayableViaExternalApp":false}' + ) }) - } else if (url === 'https://legacy-static.oesp.horizon.tv/oesp/v4/SK/slk/web/listings/crid:~~2F~~2Fport.cs~~2F1379541,imi:5f806a2a0bc13e9745e14907a27116c60ea2c6ad') { + } else if ( + url === + 'https://legacy-static.oesp.horizon.tv/oesp/v4/SK/slk/web/listings/crid:~~2F~~2Fport.cs~~2F1379541,imi:5f806a2a0bc13e9745e14907a27116c60ea2c6ad' + ) { return Promise.resolve({ - data: JSON.parse(`{"id":"crid:~~2F~~2Fport.cs~~2F1379541,imi:5f806a2a0bc13e9745e14907a27116c60ea2c6ad","startTime":1675761000000,"endTime":1675767600000,"actualStartTime":1675761000000,"actualEndTime":1675767600000,"expirationDate":1676365800000,"stationId":"lgi-obolite-sk-prod-master:10024","imi":"imi:5f806a2a0bc13e9745e14907a27116c60ea2c6ad","scCridImi":"crid:~~2F~~2Fport.cs~~2F1379541,imi:5f806a2a0bc13e9745e14907a27116c60ea2c6ad","mediaGroupId":"crid:~~2F~~2Fport.cs~~2F1379541","program":{"id":"crid:~~2F~~2Fport.cs~~2F1379541","title":"Studentka","description":"Ambiciózní vysokoškolačka Valentina (Sophie Marceau) studuje literaturu na pařížské Sorbonně a právě se připravuje k závěrečným zkouškám. Žádný odpočinek, žádné volno, žádné večírky, téměř žádný...","longDescription":"Ambiciózní vysokoškolačka Valentina (Sophie Marceau) studuje literaturu na pařížské Sorbonně a právě se připravuje k závěrečným zkouškám. Žádný odpočinek, žádné volno, žádné večírky, téměř žádný spánek a především a hlavně ... žádná láska! Věří, že jedině tak obstojí před zkušební komisí. Jednoho dne se však odehraje něco, s čím nepočítala. Potká charismatického hudebníka Neda - a bláznivě se zamiluje. V tuto chvíli stojí před osudovým rozhodnutím: zahodí roky obrovského studijního nasazení, nebo odmítne lásku? Nebo se snad dá obojí skloubit dohromady?","medium":"Movie","categories":[{"id":"lgi-obolite-sk-prod-master:genre-14","title":"Film","scheme":"urn:libertyglobal:metadata:cs:ContentCS:2014_1"},{"id":"lgi-obolite-sk-prod-master:genre-4","title":"Komédia","scheme":"urn:libertyglobal:metadata:cs:ContentCS:2014_1"}],"isAdult":false,"parentalRating":"9","cast":["Sophie Marceauová","Vincent Lindon","Elisabeth Vitali","Elena Pompei","Jean-Claude Leguay","Brigitte Chamarande","Christian Pereira","Gérard Dacier","Roberto Attias","Beppe Chierici","Nathalie Mann","Anne Macina","Janine Souchon","Virginie Demians","Hugues Leforestier","Jacqueline Noëlle","Marc-André Brunet","Isabelle Caubère","André Chazel","Med Salah Cheurfi","Guillaume Corea","Eric Denize","Gilles Gaston-Dreyfuss","Benoît Gourley","Marc Innocenti","Najim Laouriga","Laurent Ledermann","Philippe Maygal","Dominique Pifarely","Ysé Tran"],"directors":["Francis De Gueltz","Dominique Talmon","Claude Pinoteau"],"images":[{"assetType":"HighResLandscape","assetTypes":["HighResLandscape"],"url":"http://62.179.125.152/SK/Images/hrl_a8abceaa59bbb0aae8031dcdd5deba03aba8a100.jpg"},{"assetType":"HighResPortrait","assetTypes":["HighResPortrait"],"url":"http://62.179.125.152/SK/Images/hrp_72b11621270454812ac8474698fc75670db4a49d.jpg"},{"assetType":"boxCover","assetTypes":["boxCover"],"url":"http://62.179.125.152/SK/Images/bc_72b11621270454812ac8474698fc75670db4a49d.jpg"},{"assetType":"boxart-small","assetTypes":["boxart-small"],"url":"http://62.179.125.152/SK/Images/bc_72b11621270454812ac8474698fc75670db4a49d.jpg?w=75&h=108&mode=box"},{"assetType":"boxart-medium","assetTypes":["boxart-medium"],"url":"http://62.179.125.152/SK/Images/bc_72b11621270454812ac8474698fc75670db4a49d.jpg?w=110&h=159&mode=box"},{"assetType":"boxart-xlarge","assetTypes":["boxart-xlarge"],"url":"http://62.179.125.152/SK/Images/bc_72b11621270454812ac8474698fc75670db4a49d.jpg?w=210&h=303&mode=box"},{"assetType":"boxart-large","assetTypes":["boxart-large"],"url":"http://62.179.125.152/SK/Images/bc_72b11621270454812ac8474698fc75670db4a49d.jpg?w=180&h=260&mode=box"}],"rootId":"crid:~~2F~~2Fport.cs~~2F1379541","parentalRatingDescription":[],"resolutions":[],"mediaGroupId":"crid:~~2F~~2Fport.cs~~2F1379541","shortDescription":"Ambiciózní vysokoškolačka Valentina (Sophie Marceau) studuje literaturu na pařížské Sorbonně a právě se připravuje k závěrečným zkouškám. Žádný odpočinek, žádné volno, žádné večírky, téměř žádný...","mediaType":"FeatureFilm","year":"1988","videos":[],"videoStreams":[],"entitlements":["VIP","_OPEN_"],"currentProductIds":[],"currentTvodProductIds":[]},"rootId":"crid:~~2F~~2Fport.cs~~2F1379541","replayTvAvailable":true,"audioTracks":[],"ratings":[],"offersLatestExpirationDate":1675767600000,"replayTvStartOffset":0,"replayTvEndOffset":604800,"replayEnabledOnMobileClients":true,"replaySource":"cloud","isGoReplayableViaExternalApp":false}`) + data: JSON.parse( + '{"id":"crid:~~2F~~2Fport.cs~~2F1379541,imi:5f806a2a0bc13e9745e14907a27116c60ea2c6ad","startTime":1675761000000,"endTime":1675767600000,"actualStartTime":1675761000000,"actualEndTime":1675767600000,"expirationDate":1676365800000,"stationId":"lgi-obolite-sk-prod-master:10024","imi":"imi:5f806a2a0bc13e9745e14907a27116c60ea2c6ad","scCridImi":"crid:~~2F~~2Fport.cs~~2F1379541,imi:5f806a2a0bc13e9745e14907a27116c60ea2c6ad","mediaGroupId":"crid:~~2F~~2Fport.cs~~2F1379541","program":{"id":"crid:~~2F~~2Fport.cs~~2F1379541","title":"Studentka","description":"Ambiciózní vysokoškolačka Valentina (Sophie Marceau) studuje literaturu na pařížské Sorbonně a právě se připravuje k závěrečným zkouškám. Žádný odpočinek, žádné volno, žádné večírky, téměř žádný...","longDescription":"Ambiciózní vysokoškolačka Valentina (Sophie Marceau) studuje literaturu na pařížské Sorbonně a právě se připravuje k závěrečným zkouškám. Žádný odpočinek, žádné volno, žádné večírky, téměř žádný spánek a především a hlavně ... žádná láska! Věří, že jedině tak obstojí před zkušební komisí. Jednoho dne se však odehraje něco, s čím nepočítala. Potká charismatického hudebníka Neda - a bláznivě se zamiluje. V tuto chvíli stojí před osudovým rozhodnutím: zahodí roky obrovského studijního nasazení, nebo odmítne lásku? Nebo se snad dá obojí skloubit dohromady?","medium":"Movie","categories":[{"id":"lgi-obolite-sk-prod-master:genre-14","title":"Film","scheme":"urn:libertyglobal:metadata:cs:ContentCS:2014_1"},{"id":"lgi-obolite-sk-prod-master:genre-4","title":"Komédia","scheme":"urn:libertyglobal:metadata:cs:ContentCS:2014_1"}],"isAdult":false,"parentalRating":"9","cast":["Sophie Marceauová","Vincent Lindon","Elisabeth Vitali","Elena Pompei","Jean-Claude Leguay","Brigitte Chamarande","Christian Pereira","Gérard Dacier","Roberto Attias","Beppe Chierici","Nathalie Mann","Anne Macina","Janine Souchon","Virginie Demians","Hugues Leforestier","Jacqueline Noëlle","Marc-André Brunet","Isabelle Caubère","André Chazel","Med Salah Cheurfi","Guillaume Corea","Eric Denize","Gilles Gaston-Dreyfuss","Benoît Gourley","Marc Innocenti","Najim Laouriga","Laurent Ledermann","Philippe Maygal","Dominique Pifarely","Ysé Tran"],"directors":["Francis De Gueltz","Dominique Talmon","Claude Pinoteau"],"images":[{"assetType":"HighResLandscape","assetTypes":["HighResLandscape"],"url":"http://62.179.125.152/SK/Images/hrl_a8abceaa59bbb0aae8031dcdd5deba03aba8a100.jpg"},{"assetType":"HighResPortrait","assetTypes":["HighResPortrait"],"url":"http://62.179.125.152/SK/Images/hrp_72b11621270454812ac8474698fc75670db4a49d.jpg"},{"assetType":"boxCover","assetTypes":["boxCover"],"url":"http://62.179.125.152/SK/Images/bc_72b11621270454812ac8474698fc75670db4a49d.jpg"},{"assetType":"boxart-small","assetTypes":["boxart-small"],"url":"http://62.179.125.152/SK/Images/bc_72b11621270454812ac8474698fc75670db4a49d.jpg?w=75&h=108&mode=box"},{"assetType":"boxart-medium","assetTypes":["boxart-medium"],"url":"http://62.179.125.152/SK/Images/bc_72b11621270454812ac8474698fc75670db4a49d.jpg?w=110&h=159&mode=box"},{"assetType":"boxart-xlarge","assetTypes":["boxart-xlarge"],"url":"http://62.179.125.152/SK/Images/bc_72b11621270454812ac8474698fc75670db4a49d.jpg?w=210&h=303&mode=box"},{"assetType":"boxart-large","assetTypes":["boxart-large"],"url":"http://62.179.125.152/SK/Images/bc_72b11621270454812ac8474698fc75670db4a49d.jpg?w=180&h=260&mode=box"}],"rootId":"crid:~~2F~~2Fport.cs~~2F1379541","parentalRatingDescription":[],"resolutions":[],"mediaGroupId":"crid:~~2F~~2Fport.cs~~2F1379541","shortDescription":"Ambiciózní vysokoškolačka Valentina (Sophie Marceau) studuje literaturu na pařížské Sorbonně a právě se připravuje k závěrečným zkouškám. Žádný odpočinek, žádné volno, žádné večírky, téměř žádný...","mediaType":"FeatureFilm","year":"1988","videos":[],"videoStreams":[],"entitlements":["VIP","_OPEN_"],"currentProductIds":[],"currentTvodProductIds":[]},"rootId":"crid:~~2F~~2Fport.cs~~2F1379541","replayTvAvailable":true,"audioTracks":[],"ratings":[],"offersLatestExpirationDate":1675767600000,"replayTvStartOffset":0,"replayTvEndOffset":604800,"replayEnabledOnMobileClients":true,"replaySource":"cloud","isGoReplayableViaExternalApp":false}' + ) }) - } else if (url === 'https://legacy-static.oesp.horizon.tv/oesp/v4/SK/slk/web/listings/crid:~~2F~~2Fport.cs~~2F71927954,imi:f1b4b0285b72cf44cba74e1c62322a4c682385c7') { + } else if ( + url === + 'https://legacy-static.oesp.horizon.tv/oesp/v4/SK/slk/web/listings/crid:~~2F~~2Fport.cs~~2F71927954,imi:f1b4b0285b72cf44cba74e1c62322a4c682385c7' + ) { return Promise.resolve({ - data: JSON.parse(`{"id":"crid:~~2F~~2Fport.cs~~2F71927954,imi:f1b4b0285b72cf44cba74e1c62322a4c682385c7","startTime":1675785900000,"endTime":1675791900000,"actualStartTime":1675785900000,"actualEndTime":1675791900000,"expirationDate":1676390700000,"stationId":"lgi-obolite-sk-prod-master:10024","imi":"imi:f1b4b0285b72cf44cba74e1c62322a4c682385c7","scCridImi":"crid:~~2F~~2Fport.cs~~2F71927954,imi:f1b4b0285b72cf44cba74e1c62322a4c682385c7","mediaGroupId":"crid:~~2F~~2Fport.cs~~2F71927954","program":{"id":"crid:~~2F~~2Fport.cs~~2F71927954","title":"Zilionáři","description":"David (Zach Galifianakis) je nekomplikovaný muž, který uvízl v monotónním životě. Den co den usedá za volant svého obrněného automobilu, aby odvážel obrovské sumy peněz jiných lidí. Jediným...","longDescription":"David (Zach Galifianakis) je nekomplikovaný muž, který uvízl v monotónním životě. Den co den usedá za volant svého obrněného automobilu, aby odvážel obrovské sumy peněz jiných lidí. Jediným vzrušujícím momentem v jeho životě je flirtování s kolegyní Kelly (Kristen Wiig), která ho však brzy zatáhne do těžko uvěřitelného dobrodružství. Skupinka nepříliš inteligentních loserů, pod vedením Steva (Owen Wilson), plánuje vyloupit banku a David jim v tom má samozřejmě pomoci. Navzdory absolutně amatérskému plánu se ale stane nemožné a oni mají najednou v kapse 17 miliónů dolarů. A protože tato partička je opravdu bláznivá, začne je hned ve velkém roztáčet. Peníze létají vzduchem za luxusní a kolikrát i zbytečné věci, ale nedochází jim, že pro policii tak zanechávají jasné stopy...","medium":"Movie","categories":[{"id":"lgi-obolite-sk-prod-master:genre-9","title":"Drama","scheme":"urn:libertyglobal:metadata:cs:ContentCS:2014_1"},{"id":"lgi-obolite-sk-prod-master:genre-33","title":"Akcia","scheme":"urn:libertyglobal:metadata:cs:ContentCS:2014_1"}],"isAdult":false,"parentalRating":"15","cast":["Zach Galifianakis","Kristen Wiigová","Owen Wilson","Kate McKinnon","Leslie Jones","Jason Sudeikis","Ross Kimball","Devin Ratray","Mary Elizabeth Ellisová","Jon Daly","Ken Marino","Daniel Zacapa","Tom Werme","Njema Williams","Nils Cruz","Michael Fraguada","Christian Gonzalez","Candace Blanchard","Karsten Friske","Dallas Edwards","Barry Ratcliffe","Shelton Grant","Laura Palka","Reegus Flenory","Wynn Reichert","Jill Jane Clements","Joseph S. Wilson","Jee An","Rhoda Griffisová","Nicole Dupre Sobchack"],"directors":["Scott August","Richard L. Fox","Michelle Malley-Campos","Sebastian Mazzola","Steven Ritzi","Pete Waterman","Jared Hess"],"images":[{"assetType":"HighResLandscape","assetTypes":["HighResLandscape"],"url":"http://62.179.125.152/SK/Images/hrl_fd098116bac1429318aaf5fdae498ce76e258782.jpg"},{"assetType":"HighResPortrait","assetTypes":["HighResPortrait"],"url":"http://62.179.125.152/SK/Images/hrp_6f857ae9375b3bcceb6353a5b35775f52cd85302.jpg"},{"assetType":"boxCover","assetTypes":["boxCover"],"url":"http://62.179.125.152/SK/Images/bc_3f5a24412c7f4f434094fa1147a304aa6a5ebda6.jpg"},{"assetType":"boxart-small","assetTypes":["boxart-small"],"url":"http://62.179.125.152/SK/Images/bc_3f5a24412c7f4f434094fa1147a304aa6a5ebda6.jpg?w=75&h=108&mode=box"},{"assetType":"boxart-medium","assetTypes":["boxart-medium"],"url":"http://62.179.125.152/SK/Images/bc_3f5a24412c7f4f434094fa1147a304aa6a5ebda6.jpg?w=110&h=159&mode=box"},{"assetType":"boxart-xlarge","assetTypes":["boxart-xlarge"],"url":"http://62.179.125.152/SK/Images/bc_3f5a24412c7f4f434094fa1147a304aa6a5ebda6.jpg?w=210&h=303&mode=box"},{"assetType":"boxart-large","assetTypes":["boxart-large"],"url":"http://62.179.125.152/SK/Images/bc_3f5a24412c7f4f434094fa1147a304aa6a5ebda6.jpg?w=180&h=260&mode=box"}],"rootId":"crid:~~2F~~2Fport.cs~~2F71927954","parentalRatingDescription":[],"resolutions":[],"mediaGroupId":"crid:~~2F~~2Fport.cs~~2F71927954","shortDescription":"David (Zach Galifianakis) je nekomplikovaný muž, který uvízl v monotónním životě. Den co den usedá za volant svého obrněného automobilu, aby odvážel obrovské sumy peněz jiných lidí. Jediným...","mediaType":"FeatureFilm","year":"2016","videos":[],"videoStreams":[],"entitlements":["VIP","_OPEN_"],"currentProductIds":[],"currentTvodProductIds":[]},"rootId":"crid:~~2F~~2Fport.cs~~2F71927954","replayTvAvailable":true,"audioTracks":[],"ratings":[],"offersLatestExpirationDate":1676187900000,"replayTvStartOffset":0,"replayTvEndOffset":604800,"replayEnabledOnMobileClients":true,"replaySource":"cloud","isGoReplayableViaExternalApp":false}`) + data: JSON.parse( + '{"id":"crid:~~2F~~2Fport.cs~~2F71927954,imi:f1b4b0285b72cf44cba74e1c62322a4c682385c7","startTime":1675785900000,"endTime":1675791900000,"actualStartTime":1675785900000,"actualEndTime":1675791900000,"expirationDate":1676390700000,"stationId":"lgi-obolite-sk-prod-master:10024","imi":"imi:f1b4b0285b72cf44cba74e1c62322a4c682385c7","scCridImi":"crid:~~2F~~2Fport.cs~~2F71927954,imi:f1b4b0285b72cf44cba74e1c62322a4c682385c7","mediaGroupId":"crid:~~2F~~2Fport.cs~~2F71927954","program":{"id":"crid:~~2F~~2Fport.cs~~2F71927954","title":"Zilionáři","description":"David (Zach Galifianakis) je nekomplikovaný muž, který uvízl v monotónním životě. Den co den usedá za volant svého obrněného automobilu, aby odvážel obrovské sumy peněz jiných lidí. Jediným...","longDescription":"David (Zach Galifianakis) je nekomplikovaný muž, který uvízl v monotónním životě. Den co den usedá za volant svého obrněného automobilu, aby odvážel obrovské sumy peněz jiných lidí. Jediným vzrušujícím momentem v jeho životě je flirtování s kolegyní Kelly (Kristen Wiig), která ho však brzy zatáhne do těžko uvěřitelného dobrodružství. Skupinka nepříliš inteligentních loserů, pod vedením Steva (Owen Wilson), plánuje vyloupit banku a David jim v tom má samozřejmě pomoci. Navzdory absolutně amatérskému plánu se ale stane nemožné a oni mají najednou v kapse 17 miliónů dolarů. A protože tato partička je opravdu bláznivá, začne je hned ve velkém roztáčet. Peníze létají vzduchem za luxusní a kolikrát i zbytečné věci, ale nedochází jim, že pro policii tak zanechávají jasné stopy...","medium":"Movie","categories":[{"id":"lgi-obolite-sk-prod-master:genre-9","title":"Drama","scheme":"urn:libertyglobal:metadata:cs:ContentCS:2014_1"},{"id":"lgi-obolite-sk-prod-master:genre-33","title":"Akcia","scheme":"urn:libertyglobal:metadata:cs:ContentCS:2014_1"}],"isAdult":false,"parentalRating":"15","cast":["Zach Galifianakis","Kristen Wiigová","Owen Wilson","Kate McKinnon","Leslie Jones","Jason Sudeikis","Ross Kimball","Devin Ratray","Mary Elizabeth Ellisová","Jon Daly","Ken Marino","Daniel Zacapa","Tom Werme","Njema Williams","Nils Cruz","Michael Fraguada","Christian Gonzalez","Candace Blanchard","Karsten Friske","Dallas Edwards","Barry Ratcliffe","Shelton Grant","Laura Palka","Reegus Flenory","Wynn Reichert","Jill Jane Clements","Joseph S. Wilson","Jee An","Rhoda Griffisová","Nicole Dupre Sobchack"],"directors":["Scott August","Richard L. Fox","Michelle Malley-Campos","Sebastian Mazzola","Steven Ritzi","Pete Waterman","Jared Hess"],"images":[{"assetType":"HighResLandscape","assetTypes":["HighResLandscape"],"url":"http://62.179.125.152/SK/Images/hrl_fd098116bac1429318aaf5fdae498ce76e258782.jpg"},{"assetType":"HighResPortrait","assetTypes":["HighResPortrait"],"url":"http://62.179.125.152/SK/Images/hrp_6f857ae9375b3bcceb6353a5b35775f52cd85302.jpg"},{"assetType":"boxCover","assetTypes":["boxCover"],"url":"http://62.179.125.152/SK/Images/bc_3f5a24412c7f4f434094fa1147a304aa6a5ebda6.jpg"},{"assetType":"boxart-small","assetTypes":["boxart-small"],"url":"http://62.179.125.152/SK/Images/bc_3f5a24412c7f4f434094fa1147a304aa6a5ebda6.jpg?w=75&h=108&mode=box"},{"assetType":"boxart-medium","assetTypes":["boxart-medium"],"url":"http://62.179.125.152/SK/Images/bc_3f5a24412c7f4f434094fa1147a304aa6a5ebda6.jpg?w=110&h=159&mode=box"},{"assetType":"boxart-xlarge","assetTypes":["boxart-xlarge"],"url":"http://62.179.125.152/SK/Images/bc_3f5a24412c7f4f434094fa1147a304aa6a5ebda6.jpg?w=210&h=303&mode=box"},{"assetType":"boxart-large","assetTypes":["boxart-large"],"url":"http://62.179.125.152/SK/Images/bc_3f5a24412c7f4f434094fa1147a304aa6a5ebda6.jpg?w=180&h=260&mode=box"}],"rootId":"crid:~~2F~~2Fport.cs~~2F71927954","parentalRatingDescription":[],"resolutions":[],"mediaGroupId":"crid:~~2F~~2Fport.cs~~2F71927954","shortDescription":"David (Zach Galifianakis) je nekomplikovaný muž, který uvízl v monotónním životě. Den co den usedá za volant svého obrněného automobilu, aby odvážel obrovské sumy peněz jiných lidí. Jediným...","mediaType":"FeatureFilm","year":"2016","videos":[],"videoStreams":[],"entitlements":["VIP","_OPEN_"],"currentProductIds":[],"currentTvodProductIds":[]},"rootId":"crid:~~2F~~2Fport.cs~~2F71927954","replayTvAvailable":true,"audioTracks":[],"ratings":[],"offersLatestExpirationDate":1676187900000,"replayTvStartOffset":0,"replayTvEndOffset":604800,"replayEnabledOnMobileClients":true,"replaySource":"cloud","isGoReplayableViaExternalApp":false}' + ) }) - } else { return Promise.resolve({ data: '' }) } @@ -74,11 +106,9 @@ it('can parse response', done => { start: '2023-02-06T21:35:00.000Z', stop: '2023-02-06T23:05:00.000Z', title: 'Avengement', - description: `Během propustky z vězení za účelem návštěvy umírající matky v nemocnici zločinec Cain Burgess (Scott Adkins) unikne svým dozorcům a mizí v ulicích Londýna. Jde o epickou cestu krve a bolesti za dosažením vytoužené pomsty na těch, kteří z něj udělali chladnokrevného vraha.`, - category: [ - 'Drama', - 'Akcia' - ], + description: + 'Během propustky z vězení za účelem návštěvy umírající matky v nemocnici zločinec Cain Burgess (Scott Adkins) unikne svým dozorcům a mizí v ulicích Londýna. Jde o epickou cestu krve a bolesti za dosažením vytoužené pomsty na těch, kteří z něj udělali chladnokrevného vraha.', + category: ['Drama', 'Akcia'], directors: ['Jesse V. Johnson'], actors: [ 'Scott Adkins', @@ -106,7 +136,7 @@ it('can parse response', done => { 'Darren Swain', 'Lee Charles', 'Dominic Kinnaird', - `Ross O'Hennessy`, + "Ross O'Hennessy", 'Teresa Mahoney', 'Andrew Dunkelberger', 'Sam Hardy', @@ -128,45 +158,42 @@ it('can parse response', done => { start: '2023-02-07T09:10:00.000Z', stop: '2023-02-07T11:00:00.000Z', title: 'Studentka', - description: 'Ambiciózní vysokoškolačka Valentina (Sophie Marceau) studuje literaturu na pařížské Sorbonně a právě se připravuje k závěrečným zkouškám. Žádný odpočinek, žádné volno, žádné večírky, téměř žádný spánek a především a hlavně ... žádná láska! Věří, že jedině tak obstojí před zkušební komisí. Jednoho dne se však odehraje něco, s čím nepočítala. Potká charismatického hudebníka Neda - a bláznivě se zamiluje. V tuto chvíli stojí před osudovým rozhodnutím: zahodí roky obrovského studijního nasazení, nebo odmítne lásku? Nebo se snad dá obojí skloubit dohromady?', + description: + 'Ambiciózní vysokoškolačka Valentina (Sophie Marceau) studuje literaturu na pařížské Sorbonně a právě se připravuje k závěrečným zkouškám. Žádný odpočinek, žádné volno, žádné večírky, téměř žádný spánek a především a hlavně ... žádná láska! Věří, že jedině tak obstojí před zkušební komisí. Jednoho dne se však odehraje něco, s čím nepočítala. Potká charismatického hudebníka Neda - a bláznivě se zamiluje. V tuto chvíli stojí před osudovým rozhodnutím: zahodí roky obrovského studijního nasazení, nebo odmítne lásku? Nebo se snad dá obojí skloubit dohromady?', category: ['Film', 'Komédia'], actors: [ - "Sophie Marceauová", - "Vincent Lindon", - "Elisabeth Vitali", - "Elena Pompei", - "Jean-Claude Leguay", - "Brigitte Chamarande", - "Christian Pereira", - "Gérard Dacier", - "Roberto Attias", - "Beppe Chierici", - "Nathalie Mann", - "Anne Macina", - "Janine Souchon", - "Virginie Demians", - "Hugues Leforestier", - "Jacqueline Noëlle", - "Marc-André Brunet", - "Isabelle Caubère", - "André Chazel", - "Med Salah Cheurfi", - "Guillaume Corea", - "Eric Denize", - "Gilles Gaston-Dreyfuss", - "Benoît Gourley", - "Marc Innocenti", - "Najim Laouriga", - "Laurent Ledermann", - "Philippe Maygal", - "Dominique Pifarely", - "Ysé Tran" - ], - directors: [ - "Francis De Gueltz", - "Dominique Talmon", - "Claude Pinoteau" + 'Sophie Marceauová', + 'Vincent Lindon', + 'Elisabeth Vitali', + 'Elena Pompei', + 'Jean-Claude Leguay', + 'Brigitte Chamarande', + 'Christian Pereira', + 'Gérard Dacier', + 'Roberto Attias', + 'Beppe Chierici', + 'Nathalie Mann', + 'Anne Macina', + 'Janine Souchon', + 'Virginie Demians', + 'Hugues Leforestier', + 'Jacqueline Noëlle', + 'Marc-André Brunet', + 'Isabelle Caubère', + 'André Chazel', + 'Med Salah Cheurfi', + 'Guillaume Corea', + 'Eric Denize', + 'Gilles Gaston-Dreyfuss', + 'Benoît Gourley', + 'Marc Innocenti', + 'Najim Laouriga', + 'Laurent Ledermann', + 'Philippe Maygal', + 'Dominique Pifarely', + 'Ysé Tran' ], + directors: ['Francis De Gueltz', 'Dominique Talmon', 'Claude Pinoteau'], date: '1988' }, { @@ -177,57 +204,57 @@ it('can parse response', done => { 'David (Zach Galifianakis) je nekomplikovaný muž, který uvízl v monotónním životě. Den co den usedá za volant svého obrněného automobilu, aby odvážel obrovské sumy peněz jiných lidí. Jediným vzrušujícím momentem v jeho životě je flirtování s kolegyní Kelly (Kristen Wiig), která ho však brzy zatáhne do těžko uvěřitelného dobrodružství. Skupinka nepříliš inteligentních loserů, pod vedením Steva (Owen Wilson), plánuje vyloupit banku a David jim v tom má samozřejmě pomoci. Navzdory absolutně amatérskému plánu se ale stane nemožné a oni mají najednou v kapse 17 miliónů dolarů. A protože tato partička je opravdu bláznivá, začne je hned ve velkém roztáčet. Peníze létají vzduchem za luxusní a kolikrát i zbytečné věci, ale nedochází jim, že pro policii tak zanechávají jasné stopy...', category: ['Drama', 'Akcia'], actors: [ - "Zach Galifianakis", - "Kristen Wiigová", - "Owen Wilson", - "Kate McKinnon", - "Leslie Jones", - "Jason Sudeikis", - "Ross Kimball", - "Devin Ratray", - "Mary Elizabeth Ellisová", - "Jon Daly", - "Ken Marino", - "Daniel Zacapa", - "Tom Werme", - "Njema Williams", - "Nils Cruz", - "Michael Fraguada", - "Christian Gonzalez", - "Candace Blanchard", - "Karsten Friske", - "Dallas Edwards", - "Barry Ratcliffe", - "Shelton Grant", - "Laura Palka", - "Reegus Flenory", - "Wynn Reichert", - "Jill Jane Clements", - "Joseph S. Wilson", - "Jee An", - "Rhoda Griffisová", - "Nicole Dupre Sobchack" + 'Zach Galifianakis', + 'Kristen Wiigová', + 'Owen Wilson', + 'Kate McKinnon', + 'Leslie Jones', + 'Jason Sudeikis', + 'Ross Kimball', + 'Devin Ratray', + 'Mary Elizabeth Ellisová', + 'Jon Daly', + 'Ken Marino', + 'Daniel Zacapa', + 'Tom Werme', + 'Njema Williams', + 'Nils Cruz', + 'Michael Fraguada', + 'Christian Gonzalez', + 'Candace Blanchard', + 'Karsten Friske', + 'Dallas Edwards', + 'Barry Ratcliffe', + 'Shelton Grant', + 'Laura Palka', + 'Reegus Flenory', + 'Wynn Reichert', + 'Jill Jane Clements', + 'Joseph S. Wilson', + 'Jee An', + 'Rhoda Griffisová', + 'Nicole Dupre Sobchack' ], directors: [ - "Scott August", - "Richard L. Fox", - "Michelle Malley-Campos", - "Sebastian Mazzola", - "Steven Ritzi", - "Pete Waterman", - "Jared Hess" + 'Scott August', + 'Richard L. Fox', + 'Michelle Malley-Campos', + 'Sebastian Mazzola', + 'Steven Ritzi', + 'Pete Waterman', + 'Jared Hess' ], date: '2016' } - ]) - done() - }) - .catch(done) + ]) + done() + }) + .catch(done) }) it('can handle empty guide', done => { parser({ - content: `[{"type":"PATH_PARAM","code":"period","reason":"INVALID"}]`, + content: '[{"type":"PATH_PARAM","code":"period","reason":"INVALID"}]', channel, date }) diff --git a/sites/i.mjh.nz/i.mjh.nz.config.js b/sites/i.mjh.nz/i.mjh.nz.config.js index 084748e9..0f81dbf6 100644 --- a/sites/i.mjh.nz/i.mjh.nz.config.js +++ b/sites/i.mjh.nz/i.mjh.nz.config.js @@ -13,7 +13,6 @@ module.exports = { site: 'i.mjh.nz', days: 2, request: { - timeout: 30000, // 30s cache: { ttl: 3 * 60 * 60 * 1000 // 3h }, @@ -24,7 +23,7 @@ module.exports = { return `${API_ENDPOINT}/${path}.xml` }, - parser: function ({ content, channel, date, cached }) { + parser: function ({ content, channel, date }) { const items = parseItems(content, channel, date) let programs = items.map(item => { @@ -94,7 +93,7 @@ function parseItems(content, channel, date) { try { const curr_day = date const next_day = date.add(1, 'd') - const [_, site_id] = channel.site_id.split('#') + const [, site_id] = channel.site_id.split('#') const data = parser.parse(content) if (!data || !Array.isArray(data.programs)) return [] diff --git a/sites/i.mjh.nz/i.mjh.nz.test.js b/sites/i.mjh.nz/i.mjh.nz.test.js index 678eb70c..c5ba8bc8 100644 --- a/sites/i.mjh.nz/i.mjh.nz.test.js +++ b/sites/i.mjh.nz/i.mjh.nz.test.js @@ -1,5 +1,5 @@ // npm run channels:parse -- --config=./sites/i.mjh.nz/i.mjh.nz.config.js --output=./sites/i.mjh.nz/i.mjh.nz_pluto.channels.xml --set=path:PlutoTV/all -// npx epg-grabber --config=sites/i.mjh.nz/i.mjh.nz.config.js --channels=sites/i.mjh.nz/i.mjh.nz_plex.channels.xml --output=guide.xml +// npm run grab -- --site=i.mjh.nz const { parser, url } = require('./i.mjh.nz.config.js') const fs = require('fs') @@ -42,7 +42,7 @@ it('can parse response', () => { it('can handle empty guide', () => { const result = parser({ - content: `404: Not Found`, + content: '404: Not Found', channel, date }) diff --git a/sites/i.mjh.nz/i.mjh.nz_foxtel.channels.xml b/sites/i.mjh.nz/i.mjh.nz_foxtel.channels.xml index c92ec090..606dfef1 100644 --- a/sites/i.mjh.nz/i.mjh.nz_foxtel.channels.xml +++ b/sites/i.mjh.nz/i.mjh.nz_foxtel.channels.xml @@ -1,88 +1,86 @@ - - - A&E - Animal Planet - BBC Earth - BBC First - UKTV - BBC World News - beIN SPORTS 1 - beIN SPORTS 2 - beIN SPORTS 3 - Bloomberg Television - Boomerang - BoxSets - Cartoon Network - CBeebies - Club MTV - CMT - CNBC - CNN International - CRIME+INVESTIGATION - Discovery Channel - Discovery Turbo - DreamWorks - E! - ESPN2 - ESPN - FOX8 - FOX ARENA - FOX Classics - FOX Comedy - FOX CRICKET - FOX Crime - FOX DOCOS - FOX Footy - FOX Funny - FOX League - FOX News - FOX One - FOX Sci Fi - FOX SHOWCASE - FOX Sleuth - Fox Sports 503 - Fox Sports 505 - Fox Sports 506 - Fox Sports More+ - FOX SPORTS NEWS - Movies Action - Movies Comedy - Movies Drama - Movies Family - Movies Greats - Movies Hits - Movies Kids - Movies Premiere - Movies Romance - Movies Thriller - GOOD. - HISTORY - Investigation Discovery - LifeStyle - LifeStyle Food - LifeStyle Home - LMN - MTV - MTV Classic - MTV Hits - National Geographic - Nat Geo WILD - NHK World - Nickelodeon - Nick Jr. - Nick Music - SKY NEWS UK - SKY NEWS - Sky News Extra - Sky Racing 1 - Sky Racing 2 - Sky Racing Thoroughbred Central - TLC - TVSN - Universal TV - - - - - + + + + + A&E + Animal Planet + BBC Earth + BBC First + UKTV + BBC World News + beIN SPORTS 1 + beIN SPORTS 2 + beIN SPORTS 3 + Bloomberg Television + Boomerang + BoxSets + Cartoon Network + CBeebies + Club MTV + CMT + CNBC + CNN International + CRIME+INVESTIGATION + Discovery Channel + Discovery Turbo + DreamWorks + E! + ESPN2 + ESPN + FOX8 + FOX ARENA + FOX Classics + FOX Comedy + FOX CRICKET + FOX Crime + FOX DOCOS + FOX Footy + FOX Funny + FOX League + FOX News + FOX One + FOX Sci Fi + FOX SHOWCASE + FOX Sleuth + Fox Sports 503 + Fox Sports 505 + Fox Sports 506 + Fox Sports More+ + FOX SPORTS NEWS + Movies Action + Movies Comedy + Movies Drama + Movies Family + Movies Greats + Movies Hits + Movies Kids + Movies Premiere + Movies Romance + Movies Thriller + GOOD. + HISTORY + Investigation Discovery + LifeStyle + LifeStyle Food + LifeStyle Home + LMN + MTV + MTV Classic + MTV Hits + National Geographic + Nat Geo WILD + NHK World + Nickelodeon + Nick Jr. + Nick Music + SKY NEWS UK + SKY NEWS + Sky News Extra + Sky Racing 1 + Sky Racing 2 + Sky Racing Thoroughbred Central + TLC + TVSN + Universal TV + diff --git a/sites/i.mjh.nz/i.mjh.nz_plex.channels.xml b/sites/i.mjh.nz/i.mjh.nz_plex.channels.xml index 41007070..5659de73 100644 --- a/sites/i.mjh.nz/i.mjh.nz_plex.channels.xml +++ b/sites/i.mjh.nz/i.mjh.nz_plex.channels.xml @@ -1,332 +1,330 @@ - - - 24 Hour Free Movies - ACL Cornhole TV - AFV Family - All Reality WE tv - AMC Thrillers - Antiques Roadshow UK - AsianCrush - AXS TV NOW - BABY SHARK TV - BACKSTAGE - BBC Food - beIN SPORTS XTRA - Bloomberg Quicktake - Camp Spoopy - Canela TV - Chicken Soup for the Soul - ChiveTV - Choppertown - CineLife - CINEPRIDE - Cine Sureño - Comedy Dynamics - CONtv - CONtv Anime - Cooking Panda - Crackle - Crime 360 - Dark Matter TV - Discover Film - Docurama - Dove - Edge Sport - Electric Now - Entrepreneur TV - Estrella News - Euronews Français - Euronews Deutsch - Euronews Italiano - Euronews Portuguese - Euronews Español - FailArmy - Fight Network - FrightFlix - Fubo Sports Network - FUEL TV - Galxy TV - Game Show Central - GFN TV - Glewed TV - GoTraveler - Gravitas Movies - GUSTOTV - Hallmark Movies & More - Hard Knocks - Hi-YAH! - Humor Mill - IMPACT Wrestling - Johnny Carson TV - Journy - Judge Faith - Juntos TV - Kidoodle TV - KidsFlix - Law & Crime - Love Nature - Made In Hollywood - MagellanTV NOW - Maverick Black Cinema - MAVTV Select - MHz Now - Midnight Pulp - Motorvision TV - MOVIESPHERE - MST3K - NBC News NOW - News 12 New York - Newsmax TV - Newsy - Nosey - Nosey Casos - Nosey Escándalos - Outdoor America - Outside - Party Tyme Karaoke - Pattrn - People are Awesome - PeopleTV - pocket.watch - Popstar! TV - QwestTV Classical - QwestTV Jazz & Beyond - QwestTV Mix - Real Nosey - Real Stories - RetroCrush - Reuters TV - Revry - RevryNews - Runtime - Ryan and Friends - Samuel Goldwyn Channel - Samuel Goldwyn Classics - Shorts TV - Shout! Factory TV Stream - Skills + Thrills - Slightly Off IFC - Sony Canal Novelas - So...Real - So Yummy - SportsGrid - Stadium - Stingray Classica Stream - Stingray CMusic - Stingray DJAZZ - Stingray Karaoke - Stingray Naturescape - Stories by AMC - Surf Now TV - Tankee - Tastemade - TG Junior - The Archive - The Boat Show - The Bob Ross Channel - The Carol Burnett Show - The Design Network - The Film Detective - The Pet Collective - The Preview Channel - This Old House - Times Now Navbharat - TODAY All Day - TokuSHOUTsu - Top Cine - Unbeaten - Unidentified - USA TODAY - USA TODAY Sportswire - Us Weekly TV - VICE - Wanted: Dead or Alive - Watch it Kid - Watch it SCREAM - Waypoint TV - WeatherSpy - WildEarth - Wonder - Wu Tang Collection - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 24 Hour Free Movies + ACL Cornhole TV + AFV Family + All Reality WE tv + AMC Thrillers + Antiques Roadshow UK + AsianCrush + AXS TV NOW + BABY SHARK TV + BACKSTAGE + BBC Food + beIN SPORTS XTRA + Bloomberg Quicktake + Camp Spoopy + Canela TV + Chicken Soup for the Soul + ChiveTV + Choppertown + CineLife + CINEPRIDE + Cine Sureño + Comedy Dynamics + CONtv + CONtv Anime + Cooking Panda + Crackle + Crime 360 + Dark Matter TV + Discover Film + Docurama + Dove + Edge Sport + Electric Now + Entrepreneur TV + Estrella News + Euronews Français + Euronews Deutsch + Euronews Italiano + Euronews Portuguese + Euronews Español + FailArmy + Fight Network + FrightFlix + Fubo Sports Network + FUEL TV + Galxy TV + Game Show Central + GFN TV + Glewed TV + GoTraveler + Gravitas Movies + GUSTOTV + Hallmark Movies & More + Hard Knocks + Hi-YAH! + Humor Mill + IMPACT Wrestling + Johnny Carson TV + Journy + Judge Faith + Kidoodle TV + KidsFlix + Law & Crime + Love Nature + Made In Hollywood + MagellanTV NOW + Maverick Black Cinema + MAVTV Select + MHz Now + Midnight Pulp + Motorvision TV + MOVIESPHERE + MST3K + NBC News NOW + News 12 New York + Newsmax TV + Newsy + Nosey + Nosey Casos + Nosey Escándalos + Outdoor America + Outside + Party Tyme Karaoke + Pattrn + People are Awesome + PeopleTV + pocket.watch + Popstar! TV + QwestTV Classical + QwestTV Jazz & Beyond + QwestTV Mix + Real Nosey + Real Stories + RetroCrush + Reuters TV + Revry + RevryNews + Runtime + Ryan and Friends + Samuel Goldwyn Channel + Samuel Goldwyn Classics + Shorts TV + Shout! Factory TV Stream + Skills + Thrills + Slightly Off IFC + Sony Canal Novelas + So...Real + So Yummy + SportsGrid + Stadium + Stingray Classica Stream + Stingray CMusic + Stingray DJAZZ + Stingray Karaoke + Stingray Naturescape + Stories by AMC + Surf Now TV + Tankee + Tastemade + TG Junior + The Archive + The Boat Show + The Bob Ross Channel + The Carol Burnett Show + The Design Network + The Film Detective + The Pet Collective + The Preview Channel + This Old House + Times Now Navbharat + TODAY All Day + TokuSHOUTsu + Top Cine + Unbeaten + Unidentified + USA TODAY + USA TODAY Sportswire + Us Weekly TV + VICE + Wanted: Dead or Alive + Watch it Kid + Watch it SCREAM + Waypoint TV + WeatherSpy + WildEarth + Wonder + Wu Tang Collection + Juntos TV + \ No newline at end of file diff --git a/sites/i.mjh.nz/i.mjh.nz_pluto.channels.xml b/sites/i.mjh.nz/i.mjh.nz_pluto.channels.xml index a33d75b1..58bf58e2 100644 --- a/sites/i.mjh.nz/i.mjh.nz_pluto.channels.xml +++ b/sites/i.mjh.nz/i.mjh.nz_pluto.channels.xml @@ -1,335 +1,333 @@ - - - 48 Hours - 70s Cinema - 80s Rewind - 90210 - 90s Throwback - Acapulco Shore - All Reality by WE tv - Always Funny Videos - Amantes del romance - America's Test Kitchen - America's Voice News - Anime All Day - Antiques Roadshow UK - Antiques Road Trip - Awesomeness TV - Baby Shark TV - Badass novelas - Bar Rescue - Baywatch - BBC Food - BBC Home - BBC Kids - Bebecito Bum y sus amigos - beIN SPORTS XTRA en español - beIN SPORTS XTRA - Bellator MMA - Best of Dr. Phil - Best of The Drew Barrymore Show - BET Her - BET Pluto TV - Beverly Hillbillies - Black Cinema - Black Classics - Black Ink Crew - Black Throwbacks - Blaze Live - Bloomberg TV - BNC GO - Bounce XL - BritBox Mysteries - British Comedy - British Drama - BUZZR - Cats 24/7 - CBS News - CBS News Baltimore - CBS News Bay Area - CBS News Boston - CBS News Chicago - CBS News Colorado - CBS News Detroit - CBS News DFW - CBS News Los Angeles - CBS News Miami - CBS News Minnesota - CBS News New York - CBS News Philly - CBS News Pittsburgh - CBS News Sacramento - CBS Sports HQ - Cheddar News - Cine adrenalina - Cine ¡¡jaja!! - Cine Premiere - Cine terror - Cine XOXO - Classica - Classic Movies Channel - Classic Toons TV - Classic TV Comedy - Classic TV Drama - Classic TV: Families - CMT Equal Play - CMT Pluto TV - CNN RePlay - Cold Case Files - Combate World - Comedy Central Animation - Comedy Central en español - Comedy Central Pluto TV - COPS - Court TV - Crime 360 - Crímenes imperfectos - CSI - CSI en español - Dabl - Dallas Cowboy Cheerleaders - Dark Shadows - Deal or No Deal - Degrassi - Demand Africa - Doctor Who Classic - Dogs 24/7 - Dog the Bounty Hunter - Dora TV - Emergencia 911 - Entre nosotras - Estrella News - EstrellaTV - ET Live - Euronews - FailArmy - Faith TV - Family Ties - Fear Factor - Fight - Find Out Why - Flicks of Fury - Foodies - Food TV - Forensic Files - Forever Kids - FOX Sports - Funny AF - Fuse Beat - G4 Select - Gameplay: Call of Duty - Gameplay: Fortnite - Gameplay: Roblox - Gameplay: Sports - Game Show Central - Garfield and Friends - GLORY Kickboxing - Gordon Ramsay's Hell's Kitchen - Grande-ish - Gunsmoke - Happy Days - Heartland - Hell's Kitchen en español - IGN - IMPACT Wrestling - Ink Master - Investiga - Iron Chef - Jersey Shore - Johnny Carson TV - Judge Nosey - Julia Child - Kartoon Channel! - K-Content by CJ ENM - Kevin Hart’s LOL! Network - Kids Movie Club - LEGO Kids TV - Little Baby Bum - Little Stars Universe - Lively Place - Live Music Replay - Logo Pluto TV - Love & Hip Hop - Lucha Libre AAA - Lupin the 3rd - Matlock - MAVTV Select - Midsomer Murders - MinecrafTV - Mi obsesión favorita - Mission Impossible - Misterios sin resolver - MLB - MLS - More TV Drama - More TV Sitcoms - MST3K - MTV Biggest Pop - MTV Block Party - MTV Dating - MTV en español - MTV Pluto TV - MTV Spankin' New - Mundo geek - Mundo paranormal - Mundo viajero - Narcos - Narcos en español - Naruto - Naruto en español - Naturescape - NBC News NOW - News 12 New York - Newsmax - Newsy - NFL Channel - Nick en español - Nick Jr. en español - Nick Jr. Pluto TV - Nick Pluto TV - Niños por BBC Kids - No Parents Allowed - Nosey - Nosey escándalos - Novelas con la abuela - Nuestra Visión - OAN Plus - One Piece - Paramount Movie Channel - Paramount+ Picks - PBR RidePass - Pelis y Popcorn - People Are Awesome - Perry Mason - PGA TOUR - Pluto TV Action - Pluto TV Action Sports - Pluto TV Animals - Pluto TV Backcountry - Pluto TV Best Life - Pluto TV Boxing - Pluto TV Cars - Pluto TV Celebrity - Pluto TV Comedy - Pluto TV Courtroom - Pluto TV Crime Drama - Pluto TV Crime Movies - Pluto TV Cult Films - Pluto TV Documentaries - Pluto TV Drama - Pluto TV Drama Life - Pluto TV Fantastic - Pluto TV Gamer - Pluto TV Game Shows - Pluto TV History - Pluto TV Home - Pluto TV Horror - Pluto TV Lives - Pluto TV Love Stories - Pluto TV Military - Pluto TV News - Pluto TV Paranormal - Pluto TV Pranks - Pluto TV Pro Wrestling - Pluto TV Reaction - Pluto TV Reality - Pluto TV Romance - Pluto TV Science - Pluto TV Sci-Fi - Pluto TV Soaps - Pluto TV Sports - Pluto TV Spotlight - Pluto TV Staff Picks - Pluto TV Suspense - Pluto TV Terror - Pluto TV Thrillers - Pluto TV Travel - Pluto TV True Crime - Pluto TV Vs. - Pluto TV Weddings - Pluto TV Westerns - pocket.watch - PokerGo - Rainbow Squad - Realmadrid tv - Rescue 911 - RiffTrax - Ryan and Friends - Sala de parejas - Séptimo arte - Series con Ñ - Shout! Factory TV - Showtime Selects - Skills + Thrills - Sky News - Slightly Off IFC - Slow TV - Smithsonian Channel Selects - Sony Canal Comedias - Sony Canal Escape Perfecto - Spike ¡extremo! - Spike Outdoors - Spike Pluto TV - Stand-Up TV - Star Trek - Stories by AMC - Survivor - TBN - Team Spirit - Teen Mom - Telefe noticias - Telemundo telenovelas clásicas - The Addams Family - The Amazing Race - The Andy Griffith Show - The Asylum - The Bob Ross Channel - The Carol Burnett Show - The Challenge - The Design Network - The First - The Love Boat - The New Detectives - The Pet Collective - The Price Is Right: The Barker Era - The Rifleman - The Walking Dead en español - This Old House - Three's Company - Tiny House Nation - TODAY All Day - TokuSHOUTsu - Top Gear en español - Tosh.0 - TOTALLY TURTLES - TV Land Drama - TV Land Sitcoms - TYT Network - Unsolved Mysteries - Vevo 2K - Vevo '70s - Vevo '80s - Vevo '90s - Vevo Country - Vevo Latino - Vevo Pop - Vevo R&B - Vevo Reggaetón & Trap - Vevo Retro Rock - Vevo True School Hip-Hop - VH1 Hip Hop Family - VH1 I Love Reality - Viaje a las estrellas - Voyager Documentaries - Wanted: Dead or Alive - WeatherNation - Western TV - Wild 'N Out - World Poker Tour - Yahoo Finance - Yo! MTV - Yu-Gi-Oh! - Yu-Gi-Oh! en español - - + + 48 Hours + 70s Cinema + 80s Rewind + 90210 + 90s Throwback + Acapulco Shore + All Reality by WE tv + Always Funny Videos + Amantes del romance + America's Test Kitchen + America's Voice News + Anime All Day + Antiques Roadshow UK + Antiques Road Trip + Awesomeness TV + Baby Shark TV + Badass novelas + Bar Rescue + Baywatch + BBC Food + BBC Home + BBC Kids + beIN SPORTS XTRA + beIN SPORTS XTRA en español + Bellator MMA + Best of Dr. Phil + Best of The Drew Barrymore Show + BET Her + BET Pluto TV + Beverly Hillbillies + Black Cinema + Black Classics + Black Ink Crew + Black Throwbacks + Blaze Live + Bloomberg TV + BNC GO + Bounce XL + BritBox Mysteries + British Comedy + British Drama + BUZZR + Cats 24/7 + CBS News + CBS News Baltimore + CBS News Bay Area + CBS News Boston + CBS News Chicago + CBS News Colorado + CBS News Detroit + CBS News DFW + CBS News Los Angeles + CBS News Miami + CBS News Minnesota + CBS News New York + CBS News Philly + CBS News Pittsburgh + CBS News Sacramento + CBS Sports HQ + Cheddar News + Cine adrenalina + Cine ¡¡jaja!! + Cine Premiere + Cine terror + Cine XOXO + Classica + Classic Movies Channel + Classic Toons TV + Classic TV Comedy + Classic TV Drama + Classic TV: Families + CMT Equal Play + CMT Pluto TV + CNN RePlay + Cold Case Files + Combate World + Comedy Central Animation + Comedy Central en español + Comedy Central Pluto TV + COPS + Court TV + Crime 360 + Crímenes imperfectos + CSI + CSI en español + Dabl + Dallas Cowboy Cheerleaders + Dark Shadows + Deal or No Deal + Degrassi + Demand Africa + Doctor Who Classic + Dogs 24/7 + Dog the Bounty Hunter + Dora TV + Emergencia 911 + Entre nosotras + Estrella News + EstrellaTV + ET Live + Euronews + FailArmy + Faith TV + Family Ties + Fear Factor + Fight + Find Out Why + Flicks of Fury + Foodies + Food TV + Forensic Files + Forever Kids + FOX Sports + Funny AF + Fuse Beat + G4 Select + Gameplay: Call of Duty + Gameplay: Fortnite + Gameplay: Roblox + Gameplay: Sports + Game Show Central + Garfield and Friends + GLORY Kickboxing + Gordon Ramsay's Hell's Kitchen + Grande-ish + Gunsmoke + Happy Days + Heartland + Hell's Kitchen en español + IGN + IMPACT Wrestling + Ink Master + Investiga + Iron Chef + Jersey Shore + Johnny Carson TV + Judge Nosey + Julia Child + Kartoon Channel! + K-Content by CJ ENM + Kevin Hart’s LOL! Network + Kids Movie Club + LEGO Kids TV + Little Baby Bum + Little Stars Universe + Lively Place + Live Music Replay + Logo Pluto TV + Love & Hip Hop + Lucha Libre AAA + Lupin the 3rd + Matlock + MAVTV Select + Midsomer Murders + MinecrafTV + Mi obsesión favorita + Mission Impossible + Misterios sin resolver + MLB + MLS + More TV Drama + More TV Sitcoms + MST3K + MTV Biggest Pop + MTV Block Party + MTV Dating + MTV en español + MTV Pluto TV + MTV Spankin' New + Mundo geek + Mundo paranormal + Mundo viajero + Narcos + Narcos en español + Naruto + Naruto en español + NBC News NOW + News 12 New York + Newsmax + Newsy + NFL Channel + Nick en español + Nick Jr. en español + Nick Jr. Pluto TV + Nick Pluto TV + Niños por BBC Kids + No Parents Allowed + Nosey + Nosey escándalos + Novelas con la abuela + Nuestra Visión + OAN Plus + One Piece + Paramount Movie Channel + Paramount+ Picks + PBR RidePass + Pelis y Popcorn + People Are Awesome + Perry Mason + PGA TOUR + Pluto TV Action + Pluto TV Action Sports + Pluto TV Animals + Pluto TV Backcountry + Pluto TV Best Life + Pluto TV Boxing + Pluto TV Cars + Pluto TV Celebrity + Pluto TV Comedy + Pluto TV Courtroom + Pluto TV Crime Drama + Pluto TV Crime Movies + Pluto TV Cult Films + Pluto TV Documentaries + Pluto TV Drama + Pluto TV Drama Life + Pluto TV Fantastic + Pluto TV Gamer + Pluto TV Game Shows + Pluto TV History + Pluto TV Home + Pluto TV Horror + Pluto TV Lives + Pluto TV Love Stories + Pluto TV Military + Pluto TV News + Pluto TV Paranormal + Pluto TV Pranks + Pluto TV Pro Wrestling + Pluto TV Reaction + Pluto TV Reality + Pluto TV Romance + Pluto TV Science + Pluto TV Sci-Fi + Pluto TV Soaps + Pluto TV Sports + Pluto TV Spotlight + Pluto TV Staff Picks + Pluto TV Suspense + Pluto TV Terror + Pluto TV Thrillers + Pluto TV Travel + Pluto TV True Crime + Pluto TV Vs. + Pluto TV Weddings + Pluto TV Westerns + pocket.watch + PokerGo + Rainbow Squad + Realmadrid tv + Rescue 911 + RiffTrax + Ryan and Friends + Sala de parejas + Séptimo arte + Series con Ñ + Shout! Factory TV + Showtime Selects + Skills + Thrills + Sky News + Slightly Off IFC + Slow TV + Smithsonian Channel Selects + Sony Canal Comedias + Sony Canal Escape Perfecto + Spike ¡extremo! + Spike Outdoors + Spike Pluto TV + Stand-Up TV + Star Trek + Naturescape + Stories by AMC + Survivor + TBN + Team Spirit + Teen Mom + Telefe noticias + Telemundo telenovelas clásicas + The Addams Family + The Amazing Race + The Andy Griffith Show + The Asylum + The Bob Ross Channel + The Carol Burnett Show + The Challenge + The Design Network + The First + The Love Boat + The New Detectives + The Pet Collective + The Price Is Right: The Barker Era + The Rifleman + The Walking Dead en español + This Old House + Three's Company + Tiny House Nation + TODAY All Day + TokuSHOUTsu + Top Gear en español + Tosh.0 + TOTALLY TURTLES + TV Land Drama + TV Land Sitcoms + TYT Network + Unsolved Mysteries + Vevo 2K + Vevo '70s + Vevo '80s + Vevo '90s + Vevo Country + Vevo Latino + Vevo Pop + Vevo R&B + Vevo Reggaetón & Trap + Vevo Retro Rock + Vevo True School Hip-Hop + VH1 Hip Hop Family + VH1 I Love Reality + Viaje a las estrellas + Voyager Documentaries + Wanted: Dead or Alive + WeatherNation + Western TV + Wild 'N Out + World Poker Tour + Yahoo Finance + Yo! MTV + Yu-Gi-Oh! + Yu-Gi-Oh! en español + Bebecito Bum y sus amigos + diff --git a/sites/i.mjh.nz/i.mjh.nz_samsung.channels.xml b/sites/i.mjh.nz/i.mjh.nz_samsung.channels.xml index 5b224f10..44daec79 100644 --- a/sites/i.mjh.nz/i.mjh.nz_samsung.channels.xml +++ b/sites/i.mjh.nz/i.mjh.nz_samsung.channels.xml @@ -1,229 +1,227 @@ - - - All Reality WE tv - Always Funny Videos - America's Test Kitchen - Anime All day - Asian Crush - Backstage - Baywatch - BBC Food - BBC Home - beIN SPORTS XTRA - Bloomberg Quicktake - Bounce XL - Brat TV - BUZZR - Cars - CBS News - Chicken Soup for the Soul - CHIVE TV - Cine Romantico - CINEVAULT: 80s - CINEVAULT: Westerns - Circle - Clarity 4K - Comedy Dynamics - Court TV - Crime 360 - Dallas Cowboys Cheer - Danger TV - Deal or No Deal - Degrassi - Dove Channel - Drama Life - Dry Bar Comedy - DUST - EDGEsport - ElectricNOW - Estrella News - FailArmy - Family Ties - Fear Factor - FilmRise Action - FilmRise Free Movies - FilmRise Western - Forensic Files - FOX SOUL - FTF - fubo Sports Network - FUEL TV - Game Show Central - Gravitas Movies - Gusto TV - Hallmark Movies & More - Heartland - Hollywire - HSN - Hungry - IGN - IMPACT Wrestling - Insight TV - InWonder - Journy - Kidoodle.TV - Law & Crime - LiveNOW from FOX - Loupe 4K - Love & Hip Hop - Love Nature 4K - Lucky Dog - Magellan TV Now - Maverick Black Cinema - MAVTV Select - MHz Now - Midnight Pulp - Midsomer Murders - MinecrafTV - MovieSphere - MTV Pluto TV - NBCLX - NBC News NOW - NEW KMOVIES - Newsmax TV - Newsy - Nick Pluto TV - Nosey - Outdoor America - Outside - Pac-12 Insider - Paramount Movie Channel - PBS KIDS - People Are Awesome - People TV - Pluto TV Fantastic - Pluto TV Westerns - pocket.watch - PowerNation - Pursuit UP - QVC - Real America's Voice - Revry - RiffTrax - Samsung Wild Life - Shout! Factory - Skills + Thrills - Sony Canal Comedias - Sony Canal Novelas - SportsGrid - Stadium - Stingray Naturescape - Stories by AMC - SURF NOW TV - Tastemade - Tastemade Travel - TG Junior - The Asylum - The Bob Ross Channel - The Challenge - The Design Network - The New Detectives - The Pet Collective - The Preview Channel - This Old House - Tiny House Nation - TODAY All Day - Toon Goggles - TV Land Drama - TV Land Sitcoms - TYT Network - Unidentified - Unsolved Mysteries - USA Today - Vevo 2K - Vevo Country - Vevo Hip-Hop - Vevo Latino - Vevo Pop - Vevo R&B - VICE - Waypoint TV - WeatherNation - WeatherSpy - Wild 'N Out - Wipeout Xtra - World Poker Tour - Xplore - ZooMoo - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + All Reality WE tv + Always Funny Videos + America's Test Kitchen + Anime All day + Asian Crush + Backstage + Baywatch + BBC Food + BBC Home + beIN SPORTS XTRA + Bloomberg Quicktake + Bounce XL + Brat TV + BUZZR + Cars + CBS News + Chicken Soup for the Soul + CHIVE TV + Cine Romantico + CINEVAULT: 80s + CINEVAULT: Westerns + Circle + Clarity 4K + Comedy Dynamics + Court TV + Crime 360 + Dallas Cowboys Cheer + Danger TV + Deal or No Deal + Degrassi + Dove Channel + Drama Life + Dry Bar Comedy + DUST + EDGEsport + ElectricNOW + Estrella News + FailArmy + Family Ties + Fear Factor + FilmRise Action + FilmRise Free Movies + FilmRise Western + Forensic Files + FOX SOUL + FTF + fubo Sports Network + FUEL TV + Game Show Central + Gravitas Movies + Gusto TV + Hallmark Movies & More + Heartland + Hollywire + HSN + Hungry + IGN + IMPACT Wrestling + Insight TV + InWonder + Journy + Kidoodle.TV + Law & Crime + LiveNOW from FOX + Loupe 4K + Love & Hip Hop + Love Nature 4K + Lucky Dog + Magellan TV Now + Maverick Black Cinema + MAVTV Select + MHz Now + Midnight Pulp + Midsomer Murders + MinecrafTV + MovieSphere + MTV Pluto TV + NBCLX + NBC News NOW + NEW KMOVIES + Newsmax TV + Newsy + Nick Pluto TV + Nosey + Outdoor America + Outside + Pac-12 Insider + Paramount Movie Channel + PBS KIDS + People Are Awesome + People TV + Pluto TV Fantastic + Pluto TV Westerns + pocket.watch + PowerNation + Pursuit UP + QVC + Real America's Voice + Revry + RiffTrax + Samsung Wild Life + Shout! Factory + Skills + Thrills + Sony Canal Comedias + Sony Canal Novelas + SportsGrid + Stadium + Stingray Naturescape + Stories by AMC + SURF NOW TV + Tastemade + Tastemade Travel + TG Junior + The Asylum + The Bob Ross Channel + The Challenge + The Design Network + The New Detectives + The Pet Collective + The Preview Channel + This Old House + Tiny House Nation + TODAY All Day + Toon Goggles + TV Land Drama + TV Land Sitcoms + TYT Network + Unidentified + Unsolved Mysteries + USA Today + Vevo 2K + Vevo Country + Vevo Hip-Hop + Vevo Latino + Vevo Pop + Vevo R&B + VICE + Waypoint TV + WeatherNation + WeatherSpy + Wild 'N Out + Wipeout Xtra + World Poker Tour + Xplore + ZooMoo + diff --git a/sites/i.mjh.nz/i.mjh.nz_skygo.channels.xml b/sites/i.mjh.nz/i.mjh.nz_skygo.channels.xml index c99e1ea2..93b473ec 100644 --- a/sites/i.mjh.nz/i.mjh.nz_skygo.channels.xml +++ b/sites/i.mjh.nz/i.mjh.nz_skygo.channels.xml @@ -1,104 +1,102 @@ - - - Al Jazeera - Animal Planet - BBC Earth - BBC UKTV - BBC World News - Bravo - Bravo PLUS 1 - Breeze TV - Cartoon Network - Cbeebies - CGTN - CGTN Documentary - CNBC - CNN - Colors - Comedy Central - Country TV - CI - Discovery - Discovery Turbo - E! - eden - eden +1 - ESPN 2 - ESPN HD - FACE TV - Firstlight - Fox News - HGTV - HISTORY - Hope Channel - ID - JONES! - JONES! too - Living - MTV 80s - MTV Hits - MTV - NAT GEO - Nickelodeon - Nick Jr. - Nick Music - Parliament TV - Prime - Prime PLUS 1 - Rialto - RT - Rush - Shine TV - Sky 5 - SKY Arena - Sky Arts - SKY Box Office - SKY Box Office 041 - SKY Box Office 042 - SKY Box Office 043 - Sky Box Sets - Sky Movies Action - Sky Movies Classics - Sky Movies Collection - Sky Movies Comedy - Sky Movies Family - Sky Movies Greats - Sky Movies Premiere - Sky News - Sky Sport 1 - Sky Sport 2 - Sky Sport 3 - Sky Sport 4 - Sky Sport 5 - Sky Sport 6 - Sky Sport 7 beIN SPORTS - Sky Sport 9 - Sky Sport Premier League - Sky Sport Select - SoHo - Star Gold - TAB Trackside 1 - TAB Trackside 2 - Te Reo - The Edge TV - Shopping Channel - Three - ThreePlusOne - TLC - TVNZ 1 - TVNZ 1+1 - TVNZ 2 - TVNZ 2+1 - TVNZ DUKE - DukePlus1 - Universal TV - Vibe - Whakaata Māori - - - - - - - + + + + + + + Al Jazeera + Animal Planet + BBC Earth + BBC UKTV + BBC World News + Bravo + Bravo PLUS 1 + Breeze TV + Cartoon Network + Cbeebies + CGTN + CGTN Documentary + CNBC + CNN + Colors + Comedy Central + Country TV + CI + Discovery + Discovery Turbo + E! + eden + eden +1 + ESPN 2 + ESPN HD + FACE TV + Firstlight + Fox News + HGTV + HISTORY + Hope Channel + ID + JONES! + JONES! too + Living + MTV 80s + MTV Hits + MTV + NAT GEO + Nickelodeon + Nick Jr. + Nick Music + Parliament TV + Prime + Prime PLUS 1 + Rialto + RT + Rush + Shine TV + Sky 5 + SKY Arena + Sky Arts + SKY Box Office + SKY Box Office 041 + SKY Box Office 042 + SKY Box Office 043 + Sky Box Sets + Sky Movies Action + Sky Movies Classics + Sky Movies Collection + Sky Movies Comedy + Sky Movies Family + Sky Movies Greats + Sky Movies Premiere + Sky News + Sky Sport 1 + Sky Sport 2 + Sky Sport 3 + Sky Sport 4 + Sky Sport 5 + Sky Sport 6 + Sky Sport 7 beIN SPORTS + Sky Sport 9 + Sky Sport Premier League + Sky Sport Select + SoHo + Star Gold + TAB Trackside 1 + TAB Trackside 2 + Te Reo + The Edge TV + Shopping Channel + Three + ThreePlusOne + TLC + TVNZ 1 + TVNZ 1+1 + TVNZ 2 + TVNZ 2+1 + TVNZ DUKE + DukePlus1 + Universal TV + Vibe + Whakaata Māori + diff --git a/sites/i.mjh.nz/i.mjh.nz_stirr.channels.xml b/sites/i.mjh.nz/i.mjh.nz_stirr.channels.xml index e6be0d12..60b7a3f5 100644 --- a/sites/i.mjh.nz/i.mjh.nz_stirr.channels.xml +++ b/sites/i.mjh.nz/i.mjh.nz_stirr.channels.xml @@ -1,111 +1,109 @@ - - - AccuWeather - AFV - American Classics - America vs. Addiction - beIN Sports Xtra - Buzzr - CHARGE - Cheddar - Chicken Soup For The Soul - CineLife - Circle - Classica - Comedy Dynamics - COMET - CONtv - Deal or No Deal - Dick Cavett - Docurama - Dove - DUST - Electric Now - EVRGRN - FailArmy - Filmrise Classic TV - Filmrise Free Movies - FOX Soul - Glewed TV - Gravitas - Horse Shopping Channel - HSN - It's Showtime at the Apollo - Johnny Carson TV - Law & Crime - LiveXLive - MagellanTV - MavTv - Midnight Pulp - Mystery Science Theater 3000 - NASATV - News 12 New York - Nosey - ONTV4U - Outdoor America - People Are Awesome - People TV - Popstar! TV - PursuitUp - Quicktake - QVC - RetroCrush - Revry - Shop LC - Shout Factory - So...Real - SportsGrid - Sportswire - Stadium - Stingray Classic Rock - Stingray Flashback 70s - Stingray Greatest Hits - Stingray Hit List - Stingray Hot Country - Stingray Pop Adult - Stingray Rock Alternative - Stingray Today's Latin Pop - Stingray Urban Beats - STIRR Classic TV - STIRR Horror Movies - STIRR | Movies - STIRR P.D. - STIRR Reality TV - STIRR Westerns - TBD - The Archive - The Bob Ross Channel - The Carol Burnett Show - The Country Network - Film Detective - The First - The Pet Collective - The Tim Conway Show - Unbeaten - USA Today - Waypoint - WeatherSpy - Wipeout Xtra - World Poker Tour - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + AccuWeather + AFV + American Classics + America vs. Addiction + beIN Sports Xtra + Buzzr + CHARGE + Cheddar + Chicken Soup For The Soul + CineLife + Circle + Classica + Comedy Dynamics + COMET + CONtv + Deal or No Deal + Dick Cavett + Docurama + Dove + DUST + Electric Now + EVRGRN + FailArmy + Filmrise Classic TV + Filmrise Free Movies + FOX Soul + Glewed TV + Gravitas + Horse Shopping Channel + HSN + It's Showtime at the Apollo + Johnny Carson TV + Law & Crime + LiveXLive + MagellanTV + MavTv + Midnight Pulp + Mystery Science Theater 3000 + NASATV + News 12 New York + Nosey + ONTV4U + Outdoor America + People Are Awesome + People TV + Popstar! TV + PursuitUp + Quicktake + QVC + RetroCrush + Revry + Shop LC + Shout Factory + So...Real + SportsGrid + Sportswire + Stadium + Stingray Classic Rock + Stingray Flashback 70s + Stingray Greatest Hits + Stingray Hit List + Stingray Hot Country + Stingray Pop Adult + Stingray Rock Alternative + Stingray Today's Latin Pop + Stingray Urban Beats + STIRR Classic TV + STIRR Horror Movies + STIRR | Movies + STIRR P.D. + STIRR Reality TV + STIRR Westerns + TBD + The Archive + The Bob Ross Channel + The Carol Burnett Show + The Country Network + Film Detective + The First + The Pet Collective + The Tim Conway Show + Unbeaten + USA Today + Waypoint + WeatherSpy + Wipeout Xtra + World Poker Tour + diff --git a/sites/i24news.tv/i24news.tv.channels.xml b/sites/i24news.tv/i24news.tv.channels.xml index da14f333..af7d40a6 100644 --- a/sites/i24news.tv/i24news.tv.channels.xml +++ b/sites/i24news.tv/i24news.tv.channels.xml @@ -1,8 +1,6 @@ - - - i24News Arabic - i24News English - i24 News Français - - + + i24News Arabic + i24News English + i24 News Français + diff --git a/sites/i24news.tv/i24news.tv.test.js b/sites/i24news.tv/i24news.tv.test.js index b74452e9..ab96ad07 100644 --- a/sites/i24news.tv/i24news.tv.test.js +++ b/sites/i24news.tv/i24news.tv.test.js @@ -1,4 +1,4 @@ -// npx epg-grabber --config=sites/i24news.tv/i24news.tv.config.js --channels=sites/i24news.tv/i24news.tv.channels.xml --output=guide.xml --days=2 +// npm run grab -- --site=i24news.tv const { parser, url } = require('./i24news.tv.config.js') const dayjs = require('dayjs') @@ -18,7 +18,8 @@ it('can generate valid url', () => { }) it('can parse response', () => { - const content = `[{"id":348995,"startHour":"22:30","endHour":"23:00","day":5,"firstDiffusion":false,"override":false,"show":{"parsedBody":[{"type":"text","text":"Special Edition"}],"id":131,"title":"تغطية خاصة","body":"Special Edition","slug":"Special-Edition-تغطية-خاصة","visible":true,"image":{"id":1142467,"credit":"","legend":"","href":"https://cdn.i24news.tv/uploads/a1/be/85/20/69/6f/32/1c/ed/b0/f8/5c/f6/1c/40/f9/a1be8520696f321cedb0f85cf61c40f9.png"}}},{"id":349023,"startHour":"15:00","endHour":"15:28","day":6,"firstDiffusion":false,"override":false,"show":{"parsedBody":[{"type":"text","text":"Special Edition"}],"id":131,"title":"تغطية خاصة","body":"Special Edition","slug":"Special-Edition-تغطية-خاصة","visible":true,"image":{"id":1142467,"credit":"","legend":"","href":"https://cdn.i24news.tv/uploads/a1/be/85/20/69/6f/32/1c/ed/b0/f8/5c/f6/1c/40/f9/a1be8520696f321cedb0f85cf61c40f9.png"}}}]` + const content = + '[{"id":348995,"startHour":"22:30","endHour":"23:00","day":5,"firstDiffusion":false,"override":false,"show":{"parsedBody":[{"type":"text","text":"Special Edition"}],"id":131,"title":"تغطية خاصة","body":"Special Edition","slug":"Special-Edition-تغطية-خاصة","visible":true,"image":{"id":1142467,"credit":"","legend":"","href":"https://cdn.i24news.tv/uploads/a1/be/85/20/69/6f/32/1c/ed/b0/f8/5c/f6/1c/40/f9/a1be8520696f321cedb0f85cf61c40f9.png"}}},{"id":349023,"startHour":"15:00","endHour":"15:28","day":6,"firstDiffusion":false,"override":false,"show":{"parsedBody":[{"type":"text","text":"Special Edition"}],"id":131,"title":"تغطية خاصة","body":"Special Edition","slug":"Special-Edition-تغطية-خاصة","visible":true,"image":{"id":1142467,"credit":"","legend":"","href":"https://cdn.i24news.tv/uploads/a1/be/85/20/69/6f/32/1c/ed/b0/f8/5c/f6/1c/40/f9/a1be8520696f321cedb0f85cf61c40f9.png"}}}]' const result = parser({ content, date }).map(p => { p.start = p.start.toJSON() p.stop = p.stop.toJSON() @@ -38,7 +39,7 @@ it('can parse response', () => { it('can handle empty guide', () => { const result = parser({ - content: `[]`, + content: '[]', date }) expect(result).toMatchObject([]) diff --git a/sites/indihometv.com/indihometv.com.channels.xml b/sites/indihometv.com/indihometv.com.channels.xml index d3dada9b..b1b4564a 100644 --- a/sites/indihometv.com/indihometv.com.channels.xml +++ b/sites/indihometv.com/indihometv.com.channels.xml @@ -1,157 +1,150 @@ - - - ABC Australia - Aljazeera - Animax - ANIPlus - ANTV - Arirang - Asian Food Network - ATV - AXN - Baby First - Bali TV - beIN Sports 1 - beIN Sports 3 - Berita Satu - Bioskop Indonesia - Bloomberg - Boomerang - Cartoon Network - CCTV4 - Celestial Movie - CGTN Documentary - Cinema World - Citra Dangdut - Citra Drama - News Asia - CNBC Asia - CNBC Indonesia - CNN Indonesia - CNN International - Crime Investigation - CTI Asia - Daai TV - Discovery Channel - Dreamworks - Dunia anak - Dunia Lain - DW (English) - Eat N Go - EBC Asia - egg network - Euronews - FashionTV - Fight Sport - France 24 - Galaxy - Galaxy Premium - HGTV - History - Horee - Horizon Sports - IDX - IMC - IndiKids - Indosiar - iNews - Panda TV - JakTV - JTV - KBS World - Kix - Kompas TV - Kplus - Lifetime - Lingua - Mentari TV - Metro TV - MNC News - MQTV - M Shop - MTATV - MTV Live - My Cinema - My Cinema Asia - My Family - MyKidz - Nat Geo - Nat Geo Wild - NBA - Net. - NHK World Japan - NHK World Premium - Nickelodeon - Nick Junior - Insert - Nusantara TV - O Channel - SONE - Outdoor Channel - Paramount - Rajawali TV - Rock Entertainment - Rock Extreme - Rodja TV - RRI NET - Ruang Trampil - SCTV - SEA Today - Seru! - SPOTV - SPOTV2 - Star Chinese Channel - Star Chinese Movies - Tawaf TV - Tech Storm - Thrill - TLC - Trans7 - TransTV - TRT World - TV5Monde - TV9 NU - TVBS News - TV Edukasi - MUI TV - TVN - TVN Movies - TV One - TVRI - UChannel - Usee Photo - UseePrime - Warner - ZBioskop - Zhejiang - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + ABC Australia + Aljazeera + Animax + ANIPlus + ANTV + Arirang + Asian Food Network + ATV + AXN + Baby First + Bali TV + beIN Sports 1 + beIN Sports 3 + Berita Satu + Bioskop Indonesia + Bloomberg + Boomerang + Cartoon Network + CCTV4 + Celestial Movie + CGTN Documentary + Cinema World + Citra Dangdut + Citra Drama + News Asia + CNBC Asia + CNBC Indonesia + CNN Indonesia + CNN International + Crime Investigation + CTI Asia + Daai TV + Discovery Channel + Dreamworks + Dunia anak + Dunia Lain + DW (English) + Eat N Go + EBC Asia + egg network + Euronews + FashionTV + Fight Sport + France 24 + Galaxy + Galaxy Premium + HGTV + History + Horee + Horizon Sports + IDX + IMC + IndiKids + Indonesiana TV + Indosiar + iNews + Panda TV + JakTV + JTV + KBS World + Kix + Kompas TV + Kplus + Lifetime + Lingua + Mentari TV + Metro TV + MNC News + MQTV + M Shop + MTATV + MTV Live + My Cinema + My Cinema Asia + My Family + MyKidz + Nat Geo + Nat Geo Wild + NBA + Net. + NHK World Japan + NHK World Premium + Nickelodeon + Nick Junior + Insert + Nusantara TV + O Channel + SONE + Outdoor Channel + Paramount + Rajawali TV + Rock Entertainment + Rock Extreme + Rodja TV + RRI NET + Ruang Trampil + SCTV + SEA Today + Seru! + SPOTV + SPOTV2 + Star Chinese Channel + Star Chinese Movies + Tawaf TV + Tech Storm + Thrill + TLC + Trans7 + TransTV + TRT World + TV5Monde + TV9 NU + TVBS News + TV Edukasi + MUI TV + TVN + TVN Movies + TV One + TVRI + UChannel + Usee Photo + UseePrime + Warner + ZBioskop + Zhejiang + \ No newline at end of file diff --git a/sites/indihometv.com/indihometv.com.config.js b/sites/indihometv.com/indihometv.com.config.js index a33c8bf9..618e909d 100644 --- a/sites/indihometv.com/indihometv.com.config.js +++ b/sites/indihometv.com/indihometv.com.config.js @@ -43,7 +43,7 @@ module.exports = { function parseStart($item, date) { const timeString = $item('p').text() - const [_, start] = timeString.match(/(\d{2}:\d{2}) -/) || [null, null] + const [, start] = timeString.match(/(\d{2}:\d{2}) -/) || [null, null] const dateString = `${date.format('YYYY-MM-DD')} ${start}` return dayjs.tz(dateString, 'YYYY-MM-DD HH:mm', 'Asia/Jakarta') @@ -51,7 +51,7 @@ function parseStart($item, date) { function parseStop($item, date) { const timeString = $item('p').text() - const [_, stop] = timeString.match(/- (\d{2}:\d{2})/) || [null, null] + const [, stop] = timeString.match(/- (\d{2}:\d{2})/) || [null, null] const dateString = `${date.format('YYYY-MM-DD')} ${stop}` return dayjs.tz(dateString, 'YYYY-MM-DD HH:mm', 'Asia/Jakarta') diff --git a/sites/indihometv.com/indihometv.com.test.js b/sites/indihometv.com/indihometv.com.test.js index 5c959f19..7d015d36 100644 --- a/sites/indihometv.com/indihometv.com.test.js +++ b/sites/indihometv.com/indihometv.com.test.js @@ -1,6 +1,6 @@ -// npx epg-grabber --config=sites/indihometv.com/indihometv.com.config.js --channels=sites/indihometv.com/indihometv.com.channels.xml --output=guide.xml --timeout=30000 --days=2 +// npm run grab -- --site=indihometv.com -const { parser, url, request } = require('./indihometv.com.config.js') +const { parser, url } = require('./indihometv.com.config.js') const dayjs = require('dayjs') const utc = require('dayjs/plugin/utc') dayjs.extend(utc) @@ -10,7 +10,8 @@ const channel = { site_id: 'metrotv', xmltv_id: 'MetroTV.id' } -const content = `07:00 - 07:05Headline News07:05 - 07:30Editorial Media Indonesia07:30 - 07:45Editorial Media Indonesia07:45 - 08:00Editorial Media Indonesia` +const content = + '07:00 - 07:05Headline News07:05 - 07:30Editorial Media Indonesia07:30 - 07:45Editorial Media Indonesia07:45 - 08:00Editorial Media Indonesia' it('can generate valid url', () => { expect(url({ channel })).toBe('https://www.indihometv.com/tvod/metrotv') @@ -51,7 +52,7 @@ it('can handle empty guide', () => { const result = parser({ date, channel, - content: `` + content: '' }) expect(result).toMatchObject([]) }) diff --git a/sites/ionplustv.com/ionplustv.com.channels.xml b/sites/ionplustv.com/ionplustv.com.channels.xml index 78693bf8..01fabc51 100644 --- a/sites/ionplustv.com/ionplustv.com.channels.xml +++ b/sites/ionplustv.com/ionplustv.com.channels.xml @@ -1,6 +1,4 @@ - - - ION Plus - - + + ION Plus + diff --git a/sites/ionplustv.com/ionplustv.com.config.js b/sites/ionplustv.com/ionplustv.com.config.js index d9c99696..6dab5fe1 100644 --- a/sites/ionplustv.com/ionplustv.com.config.js +++ b/sites/ionplustv.com/ionplustv.com.config.js @@ -1,4 +1,3 @@ -const axios = require('axios') const dayjs = require('dayjs') const cheerio = require('cheerio') const utc = require('dayjs/plugin/utc') @@ -67,7 +66,7 @@ function parseSubTitle($item) { } function parseRating($item) { - const [_, rating] = $item('.tv-rating') + const [, rating] = $item('.tv-rating') .text() .match(/([^(]+)/) || [null, null] @@ -92,7 +91,7 @@ function parseStart($item, date) { } function parseDuration($item) { - const [_, duration] = $item('.tv-rating') + const [, duration] = $item('.tv-rating') .text() .trim() .match(/\((\d+)/) || [null, null] @@ -104,5 +103,5 @@ function parseItems(content) { if (!content) return [] const $ = cheerio.load(content) - return $(`#accordion > div`).toArray() + return $('#accordion > div').toArray() } diff --git a/sites/ionplustv.com/ionplustv.com.test.js b/sites/ionplustv.com/ionplustv.com.test.js index 673373ef..076ca9f6 100644 --- a/sites/ionplustv.com/ionplustv.com.test.js +++ b/sites/ionplustv.com/ionplustv.com.test.js @@ -1,19 +1,16 @@ -// npx epg-grabber --config=sites/ionplustv.com/ionplustv.com.config.js --channels=sites/ionplustv.com/ionplustv.com.channels.xml --output=guide.xml --days=2 +// npm run grab -- --site=ionplustv.com -const { parser, url, request } = require('./ionplustv.com.config.js') +const { parser, url } = require('./ionplustv.com.config.js') const fs = require('fs') const path = require('path') const dayjs = require('dayjs') const utc = require('dayjs/plugin/utc') const customParseFormat = require('dayjs/plugin/customParseFormat') + dayjs.extend(customParseFormat) dayjs.extend(utc) const date = dayjs.utc('2022-11-08', 'YYYY-MM-DD').startOf('d') -const channel = { - site_id: '#', - xmltv_id: 'IONPlus.us' -} it('can generate valid url', () => { expect(url({ date })).toBe('https://ionplustv.com/schedule/2022-11-08') diff --git a/sites/ipko.com/ipko.com.channels.xml b/sites/ipko.com/ipko.com.channels.xml index 4bd7ee89..603827da 100644 --- a/sites/ipko.com/ipko.com.channels.xml +++ b/sites/ipko.com/ipko.com.channels.xml @@ -1,40 +1,38 @@ - - - - 24 Kitchen - ABC News - Baby TV - Bang Bang - BBC World News - Boomerang - CNN - Çufo - Discovery Channel - Discovery Science - Eurosport 1 - Explorer Histori - Explorer Natyra - Explorer Shkencë - Film Aksion - Film Dramë - Film Hits - Film Komedi - Film Thriller - Hayat - Junior TV - Kohavision - MTV Live - My Music - National Geographic - News 24 - Peace TV English - Rai 1 - Rai 2 - Rai 3 - RTK 1 - RTV 21 Sat - Stinët - Arta - - \ No newline at end of file + + + 24 Kitchen + ABC News + Baby TV + Bang Bang + BBC World News + Boomerang + CNN + Çufo + Discovery Channel + Discovery Science + Eurosport 1 + Explorer Histori + Explorer Natyra + Explorer Shkencë + Film Aksion + Film Dramë + Film Hits + Film Komedi + Film Thriller + Hayat + Junior TV + Kohavision + MTV Live + My Music + National Geographic + News 24 + Peace TV English + Rai 1 + Rai 2 + Rai 3 + RTK 1 + RTV 21 Sat + Stinët + Arta + \ No newline at end of file diff --git a/sites/ipko.com/ipko.com.test.js b/sites/ipko.com/ipko.com.test.js index 6235ce13..dc0517a8 100644 --- a/sites/ipko.com/ipko.com.test.js +++ b/sites/ipko.com/ipko.com.test.js @@ -1,4 +1,4 @@ -// npx epg-grabber --config=sites/ipko.com/ipko.com.config.js --channels=sites/ipko.com/ipko.com.channels.xml --days=2 --output=guide.xml +// npm run grab -- --site=ipko.com const { parser, url } = require('./ipko.com.config.js') const dayjs = require('dayjs') @@ -12,7 +12,8 @@ const channel = { site_id: '406', xmltv_id: 'RTK1.xk' } -const content = `{"element":{"1":[{"id":6367,"channel_id":406,"program_name":"Beautiful People 13","name_short":"","description":"Lin largohet nga Nju Meksiko për t'u vendosur në Nju Jork e për t'ia nisur nga fillimi: një punë të re, shtëpi të re dhe njohje të reja. Bashkë me të janë vajzat e saj, Sofia, një 16 vjeçare që shkëlqen në shkollë, dhe Kareni, 20 vjeçare, që do të bë","category":"Sezoni I","duration":150,"day":"Sun","left_distanc":165,"date":"00:55:00"}]}}` +const content = + '{"element":{"1":[{"id":6367,"channel_id":406,"program_name":"Beautiful People 13","name_short":"","description":"Lin largohet nga Nju Meksiko për t\'u vendosur në Nju Jork e për t\'ia nisur nga fillimi: një punë të re, shtëpi të re dhe njohje të reja. Bashkë me të janë vajzat e saj, Sofia, një 16 vjeçare që shkëlqen në shkollë, dhe Kareni, 20 vjeçare, që do të bë","category":"Sezoni I","duration":150,"day":"Sun","left_distanc":165,"date":"00:55:00"}]}}' it('can generate valid url', () => { const result = url({ date }) @@ -26,13 +27,14 @@ it('can parse response', () => { start: 'Sun, 24 Oct 2021 00:55:00 GMT', stop: 'Sun, 24 Oct 2021 01:45:00 GMT', title: 'Beautiful People 13', - description: `Lin largohet nga Nju Meksiko për t'u vendosur në Nju Jork e për t'ia nisur nga fillimi: një punë të re, shtëpi të re dhe njohje të reja. Bashkë me të janë vajzat e saj, Sofia, një 16 vjeçare që shkëlqen në shkollë, dhe Kareni, 20 vjeçare, që do të bë`, + description: + "Lin largohet nga Nju Meksiko për t'u vendosur në Nju Jork e për t'ia nisur nga fillimi: një punë të re, shtëpi të re dhe njohje të reja. Bashkë me të janë vajzat e saj, Sofia, një 16 vjeçare që shkëlqen në shkollë, dhe Kareni, 20 vjeçare, që do të bë", category: 'Sezoni I' } ]) }) it('can handle empty guide', () => { - const result = parser({ date, channel, content: `{"element":{"1":[{"no":"no"}]}}` }) + const result = parser({ date, channel, content: '{"element":{"1":[{"no":"no"}]}}' }) expect(result).toMatchObject([]) }) diff --git a/sites/kan.org.il/kan.org.il.channels.xml b/sites/kan.org.il/kan.org.il.channels.xml index d973bf3c..c89752bc 100644 --- a/sites/kan.org.il/kan.org.il.channels.xml +++ b/sites/kan.org.il/kan.org.il.channels.xml @@ -1,8 +1,6 @@ - - - כאן 11 - חינוכית - مكان - - + + مكان + כאן 11 + חינוכית + diff --git a/sites/kan.org.il/kan.org.il.config.js b/sites/kan.org.il/kan.org.il.config.js index cf114879..987b4aa3 100644 --- a/sites/kan.org.il/kan.org.il.config.js +++ b/sites/kan.org.il/kan.org.il.config.js @@ -8,7 +8,6 @@ dayjs.extend(timezone) 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 }) { diff --git a/sites/kan.org.il/kan.org.il.test.js b/sites/kan.org.il/kan.org.il.test.js index 42c53a74..c2aa9710 100644 --- a/sites/kan.org.il/kan.org.il.test.js +++ b/sites/kan.org.il/kan.org.il.test.js @@ -1,4 +1,4 @@ -// npx epg-grabber --config=sites/kan.org.il/kan.org.il.config.js --channels=sites/kan.org.il/kan.org.il.channels.xml --output=guide.xml --days=2 +// npm run grab -- --site=kan.org.il const { parser, url } = require('./kan.org.il.config.js') const dayjs = require('dayjs') @@ -20,7 +20,8 @@ it('can generate valid url', () => { }) it('can parse response', () => { - const content = `[{"title":"ארץ מולדת - בין תורכיה לבריטניה","start_time":"2022-03-06T00:05:37","end_time":"2022-03-06T00:27:12","id":"2598","age_category_desc":"0","epg_name":"ארץ מולדת","title1":"ארץ מולדת - בין תורכיה לבריטניה","chapter_number":"9","live_desc":"קבוצת תלמידים מתארגנת בפרוץ מלחמת העולם הראשונה להגיש עזרה לישוב. באמצעות התלמידים לומד הצופה על בעיותיו של הישוב בתקופת המלחמה, והתלבטותו בין נאמנות לשלטון העות'מאני לבין תקוותיו מהבריטים הכובשים.","Station_Radio":"0","Station_Id":"20","stationUrlScheme":"kan11://plugin/?type=player&plugin_identifier=kan_player&ds=general-provider%3A%2F%2FfetchData%3Ftype%3DFEED_JSON%26url%3DaHR0cHM6Ly93d3cua2FuLm9yZy5pbC9hcHBLYW4vbGl2ZVN0YXRpb25zLmFzaHg%3D&id=4","program_code":"3671","picture_code":"https://kanweb.blob.core.windows.net/download/pictures/2021/1/20/imgid=45847_Z.jpeg","program_image":"","station_image":"Logo_Image_Logo20_img__8.jpg","program_id":"","timezone":"2"}]` + const content = + '[{"title":"ארץ מולדת - בין תורכיה לבריטניה","start_time":"2022-03-06T00:05:37","end_time":"2022-03-06T00:27:12","id":"2598","age_category_desc":"0","epg_name":"ארץ מולדת","title1":"ארץ מולדת - בין תורכיה לבריטניה","chapter_number":"9","live_desc":"קבוצת תלמידים מתארגנת בפרוץ מלחמת העולם הראשונה להגיש עזרה לישוב. באמצעות התלמידים לומד הצופה על בעיותיו של הישוב בתקופת המלחמה, והתלבטותו בין נאמנות לשלטון העות\'מאני לבין תקוותיו מהבריטים הכובשים.","Station_Radio":"0","Station_Id":"20","stationUrlScheme":"kan11://plugin/?type=player&plugin_identifier=kan_player&ds=general-provider%3A%2F%2FfetchData%3Ftype%3DFEED_JSON%26url%3DaHR0cHM6Ly93d3cua2FuLm9yZy5pbC9hcHBLYW4vbGl2ZVN0YXRpb25zLmFzaHg%3D&id=4","program_code":"3671","picture_code":"https://kanweb.blob.core.windows.net/download/pictures/2021/1/20/imgid=45847_Z.jpeg","program_image":"","station_image":"Logo_Image_Logo20_img__8.jpg","program_id":"","timezone":"2"}]' const result = parser({ content }).map(p => { p.start = p.start.toJSON() p.stop = p.stop.toJSON() @@ -41,7 +42,7 @@ it('can parse response', () => { it('can handle empty guide', () => { const result = parser({ - content: `[]` + content: '[]' }) expect(result).toMatchObject([]) }) diff --git a/sites/knr.gl/knr.gl.channels.xml b/sites/knr.gl/knr.gl.channels.xml index 613fa396..cb03446e 100644 --- a/sites/knr.gl/knr.gl.channels.xml +++ b/sites/knr.gl/knr.gl.channels.xml @@ -1,6 +1,4 @@ - - - KNR TV - - \ No newline at end of file + + KNR TV + \ No newline at end of file diff --git a/sites/knr.gl/knr.gl.config.js b/sites/knr.gl/knr.gl.config.js index c123d78d..c9ca8fe2 100644 --- a/sites/knr.gl/knr.gl.config.js +++ b/sites/knr.gl/knr.gl.config.js @@ -40,7 +40,7 @@ function parseStart(item, date) { return dayjs.tz(time, 'YYYY-MM-DD HH:mm', 'America/Godthab') } -function parseItems(content, date) { +function parseItems(content) { const data = JSON.parse(content) if (!data.program_list) return [] const $ = cheerio.load(data.program_list) diff --git a/sites/knr.gl/knr.gl.test.js b/sites/knr.gl/knr.gl.test.js index 30ddc8dc..a0cb8cd4 100644 --- a/sites/knr.gl/knr.gl.test.js +++ b/sites/knr.gl/knr.gl.test.js @@ -1,4 +1,4 @@ -// npx epg-grabber --config=sites/knr.gl/knr.gl.config.js --channels=sites/knr.gl/knr.gl.channels.xml --output=guide.xml --days=2 +// npm run grab -- --site=knr.gl const { parser, url } = require('./knr.gl.config.js') const dayjs = require('dayjs') @@ -18,7 +18,8 @@ it('can generate valid url', () => { }) it('can parse response', () => { - const content = `{\"program_list\":\"\\u003Cdt class=\\u0022program\\u0022\\u003E\\u003Cstrong\\u003E08:00\\u003C\\\/strong\\u003E Meeqqanut - Toqqorsivimmiit\\u003C\\\/dt\\u003E\\u003Cdt class=\\u0022knr-program-pointer knr-program-togle-program\\u0022 data-program-id=\\u0022588574\\u0022 data-module-path=\\u0022sites\\\/knr\\\/modules\\\/custom\\\/knr_site\\u0022\\u003E\\u003Cimg height=\\u00229\\u0022 width=\\u00229\\u0022 id=\\u0022icon_588574\\u0022 alt=\\u0022View description\\u0022 src=\\u0022\\\/sites\\\/knr\\\/modules\\\/custom\\\/knr_site\\\/assets\\\/img\\\/plus.gif\\u0022\\u003E\\u003Cstrong\\u003E08:30\\u003C\\\/strong\\u003E ICC 2018 Piorsarsimassutikkut pisut (1:3)\\u003C\\\/dt\\u003E\\u003Cdd id=\\u0022program_588574\\u0022 style=\\u0022display: none;\\u0022\\u003E\\u003Cdiv class=\\u0022box\\u0022\\u003E2018 ICC ataatsimersuareernerata kingorna unnukkut piorsarsimassutsikkut pisut takutinneqarput. Aammalu illoqarfik Utqiagvik ilisaritinneqarluni. Ove Heilmann, Aannguaq Nielsen, Aannguaq Reimer-Johansen\\r\\nKNR 09.12.2018\\u003C\\\/div\\u003E\\u003C\\\/dd\\u003E\"}` + const content = + '{"program_list":"\\u003Cdt class=\\u0022program\\u0022\\u003E\\u003Cstrong\\u003E08:00\\u003C\\/strong\\u003E Meeqqanut - Toqqorsivimmiit\\u003C\\/dt\\u003E\\u003Cdt class=\\u0022knr-program-pointer knr-program-togle-program\\u0022 data-program-id=\\u0022588574\\u0022 data-module-path=\\u0022sites\\/knr\\/modules\\/custom\\/knr_site\\u0022\\u003E\\u003Cimg height=\\u00229\\u0022 width=\\u00229\\u0022 id=\\u0022icon_588574\\u0022 alt=\\u0022View description\\u0022 src=\\u0022\\/sites\\/knr\\/modules\\/custom\\/knr_site\\/assets\\/img\\/plus.gif\\u0022\\u003E\\u003Cstrong\\u003E08:30\\u003C\\/strong\\u003E ICC 2018 Piorsarsimassutikkut pisut (1:3)\\u003C\\/dt\\u003E\\u003Cdd id=\\u0022program_588574\\u0022 style=\\u0022display: none;\\u0022\\u003E\\u003Cdiv class=\\u0022box\\u0022\\u003E2018 ICC ataatsimersuareernerata kingorna unnukkut piorsarsimassutsikkut pisut takutinneqarput. Aammalu illoqarfik Utqiagvik ilisaritinneqarluni. Ove Heilmann, Aannguaq Nielsen, Aannguaq Reimer-Johansen\\r\\nKNR 09.12.2018\\u003C\\/div\\u003E\\u003C\\/dd\\u003E"}' const result = parser({ content, date }).map(p => { p.start = p.start.toJSON() p.stop = p.stop.toJSON() @@ -29,12 +30,12 @@ it('can parse response', () => { { start: '2021-11-22T11:00:00.000Z', stop: '2021-11-22T11:30:00.000Z', - title: `Meeqqanut - Toqqorsivimmiit` + title: 'Meeqqanut - Toqqorsivimmiit' }, { start: '2021-11-22T11:30:00.000Z', stop: '2021-11-22T12:30:00.000Z', - title: `ICC 2018 Piorsarsimassutikkut pisut (1:3)`, + title: 'ICC 2018 Piorsarsimassutikkut pisut (1:3)', description: '2018 ICC ataatsimersuareernerata kingorna unnukkut piorsarsimassutsikkut pisut takutinneqarput. Aammalu illoqarfik Utqiagvik ilisaritinneqarluni. Ove Heilmann, Aannguaq Nielsen, Aannguaq Reimer-Johansen KNR 09.12.2018' } @@ -45,7 +46,7 @@ it('can handle empty guide', () => { const result = parser({ date, channel, - content: `{"program_list":""}` + content: '{"program_list":""}' }) expect(result).toMatchObject([]) }) diff --git a/sites/kplus.vn/kplus.vn.channels.xml b/sites/kplus.vn/kplus.vn.channels.xml index f2a0882e..3c9b7673 100644 --- a/sites/kplus.vn/kplus.vn.channels.xml +++ b/sites/kplus.vn/kplus.vn.channels.xml @@ -1,31 +1,29 @@ - - - AFC - AXN HD - CARTOON NETWORK - DISCOVERY CHANNEL - VTVCab1-GIAITRITV - HBO HD - HTV7 - HTV9 - KBS WORLD - K+CINE HD - K+LIFE HD - K+PC HD - K+PM HD - NHK WORLD JAPAN - SCTV PHIMTONGHOP - VTC7-TODAY TV - TV5 MONDE - VTC1 - VTV2 - VTV3 HD - VTV4 - VTV6 HD - VTV7 - VTV8 - VTV9 - YOU TV - - + + AFC + AXN HD + CARTOON NETWORK + DISCOVERY CHANNEL + HBO HD + HTV7 + HTV9 + KBS WORLD + K+CINE HD + K+LIFE HD + K+PM HD + K+PC HD + NHK WORLD JAPAN + SCTV PHIMTONGHOP + VTC7-TODAY TV + TV5 MONDE + VTC1 + VTV2 + VTV3 HD + VTV4 + VTV6 HD + VTV7 + VTV8 + VTV9 + VTVCab1-GIAITRITV + YOU TV + diff --git a/sites/kplus.vn/kplus.vn.config.js b/sites/kplus.vn/kplus.vn.config.js index a1bc59e8..a134f1cd 100644 --- a/sites/kplus.vn/kplus.vn.config.js +++ b/sites/kplus.vn/kplus.vn.config.js @@ -6,12 +6,11 @@ const timezone = require('dayjs/plugin/timezone') dayjs.extend(timezone) dayjs.extend(utc) -const API_ENDPOINT = `https://www.kplus.vn/Schedule/getSchedule` +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: { headers: { diff --git a/sites/kplus.vn/kplus.vn.test.js b/sites/kplus.vn/kplus.vn.test.js index 6a855b35..ddadd447 100644 --- a/sites/kplus.vn/kplus.vn.test.js +++ b/sites/kplus.vn/kplus.vn.test.js @@ -1,5 +1,5 @@ // npm run channels:parse -- --config=sites/kplus.vn/kplus.vn.config.js --output=sites/kplus.vn/kplus.vn.channels.xml -// npx epg-grabber --config=sites/kplus.vn/kplus.vn.config.js --channels=sites/kplus.vn/kplus.vn.channels.xml --output=guide.xml --days=2 +// npm run grab -- --site=kplus.vn const { parser, url, request } = require('./kplus.vn.config.js') const dayjs = require('dayjs') @@ -32,7 +32,8 @@ it('can generate valid request data', () => { }) it('can parse response', () => { - const content = `{"SchedulesCount":1105,"ChannelsCount":28,"Schedules":[{"Id":12195,"ChannelId":7019,"ProgramId":35111026,"EpgProgramId":"1252496\\r","ShowingTime":"2022-03-15T06:15:00","EpgBroadcastId":"HD_ENT_DOC_LNO_21_2649421_2652183_4383385_OnAir","EpgId":"HD_ENT_DOC_LNO_21_2649421_2652183_4383385_OnAir","IsDeleted":false,"CreatedOn":"2022-03-15T06:22:45","UpdatedOn":"0001-01-01T00:00:00","Channel":{"Id":7019,"Name":"K+1 HD","Image":"https://kplus-website-production-cdn.azureedge.net/content/upload/7/images-mkt/logo-k-1-hd-new.png","LiveUrlSegment":"highlights/broadcast-schedule/K-1-HD","FeatureImage":"https://kplus-website-production-cdn.azureedge.net/content/upload/7/images-mkt/logo-k-1-hd-new.png","EpgId":null,"IsOTTEnabled":false,"StartOver":0,"DisplayOrder":0},"Program":{"Id":35111026,"Name":"WEEKLY FILMS AND STARS, EP740","BodyContent":"","Cast":"","Director":"","Duration":0,"EpgId":"93701","EpgProgramId":null,"Episode":0,"Genres":"Documentary","Images":"https://img.kplus.vn/images?filename=Media/HDVN/2022_02/ENT_DOC_LNO_21_2649421_2652183_2652183.jpg","IsFeatured":false,"IsOTTEnabled":true,"IsRebroadcast":false,"ShortDescription":"","SubTitle":"","Trailers":"","UrlSegment":"highlights/broadcast-schedule/93701/weekly-films-and-stars-ep740","CreatedOn":"2022-03-16T00:15:45","UpdatedOn":"2022-03-16T00:15:45","ParentalRating":null},"RelatedSchedules":null},{"Id":12196,"ChannelId":7019,"ProgramId":35111279,"EpgProgramId":"798685\\r","ShowingTime":"2022-03-15T07:00:00","EpgBroadcastId":"HD_MOV_COM__2632318_4383386_OnAir","EpgId":"HD_MOV_COM__2632318_4383386_OnAir","IsDeleted":false,"CreatedOn":"2022-03-15T07:02:46","UpdatedOn":"0001-01-01T00:00:00","Channel":{"Id":7019,"Name":"K+1 HD","Image":"https://kplus-website-production-cdn.azureedge.net/content/upload/7/images-mkt/logo-k-1-hd-new.png","LiveUrlSegment":"highlights/broadcast-schedule/K-1-HD","FeatureImage":"https://kplus-website-production-cdn.azureedge.net/content/upload/7/images-mkt/logo-k-1-hd-new.png","EpgId":null,"IsOTTEnabled":false,"StartOver":0,"DisplayOrder":0},"Program":{"Id":35111279,"Name":"ST. VINCENT","BodyContent":"","Cast":"Bill Murray, Melissa McCarthy, Naomi Watts","Director":"Theodore Melfi","Duration":0,"EpgId":"93959","EpgProgramId":null,"Episode":0,"Genres":"Comedy","Images":"https://img.kplus.vn/images?filename=Media/HDVN/2020_05/MOV_COM__2632318_2632318.jpg","IsFeatured":false,"IsOTTEnabled":true,"IsRebroadcast":false,"ShortDescription":"","SubTitle":"","Trailers":"","UrlSegment":"highlights/broadcast-schedule/93959/st-vincent","CreatedOn":"2022-03-16T00:15:45","UpdatedOn":"2022-03-16T00:15:45","ParentalRating":null},"RelatedSchedules":null}]}` + const content = + '{"SchedulesCount":1105,"ChannelsCount":28,"Schedules":[{"Id":12195,"ChannelId":7019,"ProgramId":35111026,"EpgProgramId":"1252496\\r","ShowingTime":"2022-03-15T06:15:00","EpgBroadcastId":"HD_ENT_DOC_LNO_21_2649421_2652183_4383385_OnAir","EpgId":"HD_ENT_DOC_LNO_21_2649421_2652183_4383385_OnAir","IsDeleted":false,"CreatedOn":"2022-03-15T06:22:45","UpdatedOn":"0001-01-01T00:00:00","Channel":{"Id":7019,"Name":"K+1 HD","Image":"https://kplus-website-production-cdn.azureedge.net/content/upload/7/images-mkt/logo-k-1-hd-new.png","LiveUrlSegment":"highlights/broadcast-schedule/K-1-HD","FeatureImage":"https://kplus-website-production-cdn.azureedge.net/content/upload/7/images-mkt/logo-k-1-hd-new.png","EpgId":null,"IsOTTEnabled":false,"StartOver":0,"DisplayOrder":0},"Program":{"Id":35111026,"Name":"WEEKLY FILMS AND STARS, EP740","BodyContent":"","Cast":"","Director":"","Duration":0,"EpgId":"93701","EpgProgramId":null,"Episode":0,"Genres":"Documentary","Images":"https://img.kplus.vn/images?filename=Media/HDVN/2022_02/ENT_DOC_LNO_21_2649421_2652183_2652183.jpg","IsFeatured":false,"IsOTTEnabled":true,"IsRebroadcast":false,"ShortDescription":"","SubTitle":"","Trailers":"","UrlSegment":"highlights/broadcast-schedule/93701/weekly-films-and-stars-ep740","CreatedOn":"2022-03-16T00:15:45","UpdatedOn":"2022-03-16T00:15:45","ParentalRating":null},"RelatedSchedules":null},{"Id":12196,"ChannelId":7019,"ProgramId":35111279,"EpgProgramId":"798685\\r","ShowingTime":"2022-03-15T07:00:00","EpgBroadcastId":"HD_MOV_COM__2632318_4383386_OnAir","EpgId":"HD_MOV_COM__2632318_4383386_OnAir","IsDeleted":false,"CreatedOn":"2022-03-15T07:02:46","UpdatedOn":"0001-01-01T00:00:00","Channel":{"Id":7019,"Name":"K+1 HD","Image":"https://kplus-website-production-cdn.azureedge.net/content/upload/7/images-mkt/logo-k-1-hd-new.png","LiveUrlSegment":"highlights/broadcast-schedule/K-1-HD","FeatureImage":"https://kplus-website-production-cdn.azureedge.net/content/upload/7/images-mkt/logo-k-1-hd-new.png","EpgId":null,"IsOTTEnabled":false,"StartOver":0,"DisplayOrder":0},"Program":{"Id":35111279,"Name":"ST. VINCENT","BodyContent":"","Cast":"Bill Murray, Melissa McCarthy, Naomi Watts","Director":"Theodore Melfi","Duration":0,"EpgId":"93959","EpgProgramId":null,"Episode":0,"Genres":"Comedy","Images":"https://img.kplus.vn/images?filename=Media/HDVN/2020_05/MOV_COM__2632318_2632318.jpg","IsFeatured":false,"IsOTTEnabled":true,"IsRebroadcast":false,"ShortDescription":"","SubTitle":"","Trailers":"","UrlSegment":"highlights/broadcast-schedule/93959/st-vincent","CreatedOn":"2022-03-16T00:15:45","UpdatedOn":"2022-03-16T00:15:45","ParentalRating":null},"RelatedSchedules":null}]}' const result = parser({ content, channel }).map(p => { p.start = p.start.toJSON() p.stop = p.stop.toJSON() @@ -59,7 +60,7 @@ it('can parse response', () => { it('can handle empty guide', () => { const result = parser({ - content: `{"SchedulesCount":0,"ChannelsCount":0,"Schedules":[],"Channels":[],"MinDuration":0}`, + content: '{"SchedulesCount":0,"ChannelsCount":0,"Schedules":[],"Channels":[],"MinDuration":0}', channel }) expect(result).toMatchObject([]) diff --git a/sites/kvf.fo/kvf.fo.channels.xml b/sites/kvf.fo/kvf.fo.channels.xml index 50db3342..83f0c57a 100644 --- a/sites/kvf.fo/kvf.fo.channels.xml +++ b/sites/kvf.fo/kvf.fo.channels.xml @@ -1,6 +1,4 @@ - - - KVF Sjónvarp - - \ No newline at end of file + + KVF Sjónvarp + \ No newline at end of file diff --git a/sites/kvf.fo/kvf.fo.test.js b/sites/kvf.fo/kvf.fo.test.js index 21f30534..637ea272 100644 --- a/sites/kvf.fo/kvf.fo.test.js +++ b/sites/kvf.fo/kvf.fo.test.js @@ -1,4 +1,4 @@ -// npx epg-grabber --config=sites/kvf.fo/kvf.fo.config.js --channels=sites/kvf.fo/kvf.fo.channels.xml --output=guide.xml --days=2 +// npm run grab -- --site=kvf.fo const { parser, url } = require('./kvf.fo.config.js') const fs = require('fs') @@ -30,7 +30,7 @@ it('can parse response', () => { expect(result[2]).toMatchObject({ start: '2021-11-21T18:05:00.000Z', stop: '2021-11-21T18:30:00.000Z', - title: `Letibygd 13` + title: 'Letibygd 13' }) }) @@ -38,7 +38,7 @@ it('can handle empty guide', () => { const result = parser({ date, channel, - content: ` ` + content: ' ' }) expect(result).toMatchObject([]) }) diff --git a/sites/m.tv.sms.cz/m.tv.sms.cz.channels.xml b/sites/m.tv.sms.cz/m.tv.sms.cz.channels.xml index fcff0588..216da1d2 100644 --- a/sites/m.tv.sms.cz/m.tv.sms.cz.channels.xml +++ b/sites/m.tv.sms.cz/m.tv.sms.cz.channels.xml @@ -1,531 +1,529 @@ - - - - BN TV Satelitski - AMC Cesko - Animal Planet - Auto Motor und Sport - AXN Black - AXN - AXN White - Barrandov Krimi - Canal + Domo - Canal + Séries France - Canal+ Sport 1 - Cartoon Network - CBS Reality Europe - CGTN Arabic - CGTN Russkij - Channel 5 - 5 Kanal - 8 Kanal International - Cinemax 2 - Cinemax - CNN Prima News - Cool TV - Credo TV - Crime + Investigation - CS Film - CS History - CS Horror - CS Mystery - CT 1 - CT 2 - CT 24 - CT 3 - CT art - CT :D - CT Sport - Dave UK - Deluxe Lounge - Deluxe Music - Digi Sport 1 Hungary - Digi Sport 2 Hungary - Discovery Channel - Discovery Science - Disney Channel - DM Sat - Doma Hrvatska - Dom Kino - Dom Kino Premium International - DTX - Duck TV SD - Duck TV Plus - Duna TV - Duna World - RTVS 2 - E! Europe - Enter Film - Epic Drama - Eska TV - EuroNews Russkiy - Eurosport 1 - Eurosport 2 - FashionBox HD - Fast & FunBox HD - Fem 3 - FilmBox Action - FilmBox Central Europe - FilmBox Extra HD Czechia - FilmBox Extra HD Polska - FilmBox Family - FilmBox Premium Czechia - FilmBox Stars Czechia - Film Café Hungary - Film Europe - Film Europe + - Film Mánia - Film + Czechia - Film + Hungary - Fokus TV - Folklorika - Fox Crime Hrvatska - Fox Life Hrvatska - Fox Movies Hrvatska - Galaxy 4 - Gold TV - Golf Channel Czechia - HaHa TV - HBO 2 - HBO 3 - HBO - HGTV - Hír TV - History Channel - HNTV - Hobby TV - Home TV - HRT 1 - HRT 2 - HRT 3 - HRT 4 - HRT International - H!t Music Channel Hungary - Inter - Investigation Discovery Europe - Iris - Italia 1 - Italia 2 - Izaura TV - RTVS 1 - JimJam Europe - Joj 24 - Joj Cinema - Joj Family - Jojko - Joj Plus - Joj Šport - Wau TV - Jugoton TV - Jurnal TV - K2 - Kabel Eins Deutschland - Karusel International - KHL - Kino Barrandov - Kino Polska - Kino TV - Lala TV - Leo TV - Leo TV Gold - Love Nature - Luxe TV - M1 - M2 - M4 Sport - M5 - TV Markíza - Dajto - TV Doma - Markíza International - Markíza Krimi - Mediaset Extra - Mezzo Live HD - Minimax Czechia - Minimax Hungary - Mini TV - Mňam TV - Mňau TV - Movistar Acción - Movistar Comedia - Movistar Deportes - Movistar Drama - Movistar Estrenos - Movistar Golf - MTV 00s - MTV Hungary - Music Box Ukraina - Muzika Pervogo - Muzsika TV - Náš REGION TV - National Geographic Hrvatska - National Geographic - National Geographic Wild - Nickelodeon Czechia - Nick Jr Czechia - Nicktoons Czechia - Nova Action - Nova Cinema - Nova Fun - Nova Gold - Nova International - Nova Lady - Nova Sport 1 - Nova Sport 2 - Nova Sport 3 - Nova Sport 4 - Nova TV - Novela TV - N-TV - Nuta TV - Telekanal O! - O2 TV Fotbal - O2 TV Sport - O2 TV Sport 2 - O2 TV Sport 3 - O2 TV Sport 4 - O2 TV Sport 5 - O2 TV Sport 6 - O2 TV Tenis - Óčko - Óčko Black - Óčko Expres - Óčko Star - One - ORF 1 - ORF 2 - ORF III - Paramount Network - Park TV - Pax TV - Poehali! International - Polonia 1 - Polo TV - Polsat - Polsat 2 - Polsat Café - Polsat News - Polsat News 2 - Polsat Play - Polsat Sport - Polsat Sport Extra - Power TV - Premier Sport 1 - Premier Sport 2 - Prima - Prima Cool - Prima Krimi - Prima Love - Prima Max - Prima Plus - Prima Show - Prima Star - Prima Zoom - Private TV - ProSieben Deutschland - Puls 2 - Racing UK SD - Rai 1 - Rai 2 - Rai 3 - Rai 5 - Rai Gulp - Rai Movie - Rai News 24 - Rai Premium - Rai Sport 1 - Rai Sport 2 - Rai Storia - Rai Yoyo - RBB Berlin - Rebel - Red Carpet - Redlight HD - Relax - Rete 4 - Retro Music TV - RT Documentary - RTL 2 Hrvatska - RTL 4 - RTL 5 - RTL Crime Hrvatska - RTL Hrvatska - RTL Gold - RTL HÁROM - RTL - RTL KETTŐ - RTL Kockica - RTL Living Hrvatska - RTL Passion Hrvatska - RTL Zwei Deutschland - RTR Planeta - RTVi Europe - Rossiya 24 - Sat. 1 Deutschland - Sat. 1 Gold Deutschland - Senzi - Sixx Deutschland - Slágr Muzika - Slágr Original - Slágr Premium - Sláger TV - Sony Max Hungary - Sony Movie Channel Hungary - Sorozat + - Spektrum Czech - Spektrum Home Czech - Spektrum Home - Spektrum - RTVS Šport - Sport 1 Czechia - Sport 1 Hungary - Sport 2 Czechia - Sport 2 Hungary - Sport 5 - Stingray IConcerts - Stopklatka TV - Story 4 - Super Polsat - Super RTL Deutschland - Super TV 2 - Superyacht TV - TA 3 - Tagesschau 24 - TBN Polska - Telecafé International - TV Seznam - TF 1 - The Fishing & Hunting Channel - TLC Pan Regional - TMC - Travel Channel Europe - Travelxp HD Europe - RTVS 3 - TTV - Tuki TV - Turbo TV - TV 1000 Balkan - TV 2 - TV 2000 - TV 2 Séf - TV3 - TV3CAT - TV 4 - TV 4 - TV 6 - TV 7 - TV Osem - TV Barrandov - TVC - TV Central - TVCG Sat - Televízia Dolný Kubín - TVE Internacional Europa - TV Joj - TV Lux - TVN - TVN 24 - TVN 7 - TV Natura - TV Noe - TV Nova - TVN Turbo - TVP 1 - TVP 2 - TVP ABC - TV Paprika Czech Republic - TV Paprika - TVP HD - TVP Historia - TVP Info - TVP Kultura - TV Povazie - TVP Polonia - TVP Rozrywka - TVP Seriale - TVP Sport - TV Puls - TV Raj - TV Republika - Rik - TV Romana - TVS - TV Severka - TV Slovenija 1 - TV Slovenija 2 - TV TRWAM - TV Vega - TV Východ - UA TV - Ukraïna 24 - Up Network - Viasat Explore - Viasat History - Viasat Nature - VTV 1 - VTV 2 - VTV 3 - VTV 4 - Water Planet - W Polsce PL - Z1 - Zoom - Zoom TV - 3sat - Anixe HD Serie - ARD Alpha - Das Erste - Disney Channel Deutschland - HR Fernsehen - KIKA - Nitro Deutschland - Phoenix - RTL Deutschland - Welt - ZDF - ZDF Info - ZDF Neo - 360 Tune Box - Aljazeera Channel - Aljazeera English - Animal Planet UK - Arirang World - Babes TV - Baby TV Europe - BBC Entertainment Europe - BBC Four - BBC One - BBC Two - BBC World News Europe - Bloomberg TV Europe - Blue Hustler Europe - Boomerang Central & Eastern Europe - Brazzers TV Europe - CBBC - CCTV 4 Europe - CCTV 9 - Club MTV - CNN International Europe - Crime + Investigation UK - Desire TV - Disney Junior - DocuBox HD - Dorcel TV - Dorcel XXX - Dusk - DW Deutsch - E4 UK - Eden - English Club TV - Erox HD - Eroxxx HD - Eurochannel - EuroNews English - EuroNews Magyar - EWTN Europe - Extasy TV - Extreme Sports Channel - FashionTV Europe - FightBox HD - Film 4 - FilmBox Arthouse Worldwide - Food Network EMEA - France 24 English - Fuel TV - Gametoon - Ginx eSports TV International - Hustler HD Europe - Hustler TV Europe - ITV London - ITV 2 - ITV 3 - ITV 4 - KBS World - Lounge TV - More 4 UK - MTV 80s - MTV 90s - MTV Hits Europe - MTV Live - MTV UK - MyZen TV - MyZen TV 4K - NASA TV Public - NASA TV UHD Public - National Geographic HD UK - Nautical Channel - NBA TV - NHK World Japan - Outdoor Channel - Passion XXX - Pick UK - Playboy TV Europe - Reality Kings TV - RTG TV - Sky Arts UK - Sky Atlantic UK - Sky Cinema Action - Sky Cinema Drama - Sky Cinema Family - Sky Cinema Greats - Sky Cinema Hits - Sky Cinema Premiere - Sky Cinema Sci-fi Horror - Sky Cinema Select - Sky Comedy UK - Sky Crime - Sky History 2 - Sky News UK - Sky News International - Sky One UK - Sky Sci-Fi - Sky Sports Cricket - Sky Sports F1 - Sky Sports Football UK - Sky Sports Golf UK - Sky Sports Main Event UK - Sky Sports News UK - Sky Sports Premier League UK - Sky Witness UK - Stars TV - Stingray Classica - Stingray CMusic - Stingray Djazz - SuperOne HD - Trace Sport Stars - True Amateurs - Wild TV - #0 - Canal 24 Horas - CGTN Español - CGTN Français - France 24 Français - France 3 - Mezzo - TV5Monde Europe - Aljazeera Balkans - ATV - Comedy Central Family Hungary - Comedy Central Hungary - La 5 - BVN Europa - 4 Fun Dance - 4 Fun Kids - 4 Fun TV - Adventure - Belarus 24 - Biznes 24 - Cartoon Network Polska - 7D7 - Bober International - Perviy kanal - RTVS 24 - Arcadia TV - Arena Sport 1 - Arena Sport 2 - Chuck TV - CNL Evropa - Life TV - - + + + BN TV Satelitski + AMC Cesko + Animal Planet + Auto Motor und Sport + AXN Black + AXN + AXN White + Barrandov Krimi + Canal + Domo + Canal + Séries France + Canal+ Sport 1 + Cartoon Network + CBS Reality Europe + CGTN Arabic + CGTN Russkij + Channel 5 + 5 Kanal + 8 Kanal International + Cinemax 2 + Cinemax + CNN Prima News + Cool TV + Credo TV + Crime + Investigation + CS Film + CS History + CS Horror + CS Mystery + CT 1 + CT 2 + CT 24 + CT 3 + CT art + CT :D + CT Sport + Dave UK + Deluxe Lounge + Deluxe Music + Digi Sport 1 Hungary + Digi Sport 2 Hungary + Discovery Channel + Discovery Science + Disney Channel + DM Sat + Doma Hrvatska + Dom Kino + Dom Kino Premium International + DTX + Duck TV SD + Duck TV Plus + Duna TV + Duna World + RTVS 2 + E! Europe + Enter Film + Epic Drama + Eska TV + EuroNews Russkiy + Eurosport 1 + Eurosport 2 + FashionBox HD + Fast & FunBox HD + Fem 3 + FilmBox Action + FilmBox Central Europe + FilmBox Extra HD Czechia + FilmBox Extra HD Polska + FilmBox Family + FilmBox Premium Czechia + FilmBox Stars Czechia + Film Café Hungary + Film Europe + Film Europe + + Film Mánia + Film + Czechia + Film + Hungary + Fokus TV + Folklorika + Fox Crime Hrvatska + Fox Life Hrvatska + Fox Movies Hrvatska + Galaxy 4 + Gold TV + Golf Channel Czechia + HaHa TV + HBO 2 + HBO 3 + HBO + HGTV + Hír TV + History Channel + HNTV + Hobby TV + Home TV + HRT 1 + HRT 2 + HRT 3 + HRT 4 + HRT International + H!t Music Channel Hungary + Inter + Investigation Discovery Europe + Iris + Italia 1 + Italia 2 + Izaura TV + RTVS 1 + JimJam Europe + Joj 24 + Joj Cinema + Joj Family + Jojko + Joj Plus + Joj Šport + Wau TV + Jugoton TV + Jurnal TV + K2 + Kabel Eins Deutschland + Karusel International + KHL + Kino Barrandov + Kino Polska + Kino TV + Lala TV + Leo TV + Leo TV Gold + Love Nature + Luxe TV + M1 + M2 + M4 Sport + M5 + TV Markíza + Dajto + TV Doma + Markíza International + Markíza Krimi + Mediaset Extra + Mezzo Live HD + Minimax Czechia + Minimax Hungary + Mini TV + Mňam TV + Mňau TV + Movistar Acción + Movistar Comedia + Movistar Deportes + Movistar Drama + Movistar Estrenos + Movistar Golf + MTV 00s + MTV Hungary + Music Box Ukraina + Muzika Pervogo + Muzsika TV + Náš REGION TV + National Geographic Hrvatska + National Geographic + National Geographic Wild + Nickelodeon Czechia + Nick Jr Czechia + Nicktoons Czechia + Nova Action + Nova Cinema + Nova Fun + Nova Gold + Nova International + Nova Lady + Nova Sport 1 + Nova Sport 2 + Nova Sport 3 + Nova Sport 4 + Nova TV + Novela TV + N-TV + Nuta TV + Telekanal O! + O2 TV Fotbal + O2 TV Sport + O2 TV Sport 2 + O2 TV Sport 3 + O2 TV Sport 4 + O2 TV Sport 5 + O2 TV Sport 6 + O2 TV Tenis + Óčko + Óčko Black + Óčko Expres + Óčko Star + One + ORF 1 + ORF 2 + ORF III + Paramount Network + Park TV + Pax TV + Poehali! International + Polonia 1 + Polo TV + Polsat + Polsat 2 + Polsat Café + Polsat News + Polsat News 2 + Polsat Play + Polsat Sport + Polsat Sport Extra + Power TV + Premier Sport 1 + Premier Sport 2 + Prima + Prima Cool + Prima Krimi + Prima Love + Prima Max + Prima Plus + Prima Show + Prima Star + Prima Zoom + Private TV + ProSieben Deutschland + Puls 2 + Racing UK SD + Rai 1 + Rai 2 + Rai 3 + Rai 5 + Rai Gulp + Rai Movie + Rai News 24 + Rai Premium + Rai Sport 1 + Rai Sport 2 + Rai Storia + Rai Yoyo + RBB Berlin + Rebel + Red Carpet + Redlight HD + Relax + Rete 4 + Retro Music TV + RT Documentary + RTL 2 Hrvatska + RTL 4 + RTL 5 + RTL Crime Hrvatska + RTL Hrvatska + RTL Gold + RTL HÁROM + RTL + RTL KETTŐ + RTL Kockica + RTL Living Hrvatska + RTL Passion Hrvatska + RTL Zwei Deutschland + RTR Planeta + RTVi Europe + Rossiya 24 + Sat. 1 Deutschland + Sat. 1 Gold Deutschland + Senzi + Sixx Deutschland + Slágr Muzika + Slágr Original + Slágr Premium + Sláger TV + Sony Max Hungary + Sony Movie Channel Hungary + Sorozat + + Spektrum Czech + Spektrum Home Czech + Spektrum Home + Spektrum + RTVS Šport + Sport 1 Czechia + Sport 1 Hungary + Sport 2 Czechia + Sport 2 Hungary + Sport 5 + Stingray IConcerts + Stopklatka TV + Story 4 + Super Polsat + Super RTL Deutschland + Super TV 2 + Superyacht TV + TA 3 + Tagesschau 24 + TBN Polska + Telecafé International + TV Seznam + TF 1 + The Fishing & Hunting Channel + TLC Pan Regional + TMC + Travel Channel Europe + Travelxp HD Europe + RTVS 3 + TTV + Tuki TV + Turbo TV + TV 1000 Balkan + TV 2 + TV 2000 + TV 2 Séf + TV3 + TV3CAT + TV 4 + TV 4 + TV 6 + TV 7 + TV Osem + TV Barrandov + TVC + TV Central + TVCG Sat + Televízia Dolný Kubín + TVE Internacional Europa + TV Joj + TV Lux + TVN + TVN 24 + TVN 7 + TV Natura + TV Noe + TV Nova + TVN Turbo + TVP 1 + TVP 2 + TVP ABC + TV Paprika Czech Republic + TV Paprika + TVP HD + TVP Historia + TVP Info + TVP Kultura + TV Povazie + TVP Polonia + TVP Rozrywka + TVP Seriale + TVP Sport + TV Puls + TV Raj + TV Republika + Rik + TV Romana + TVS + TV Severka + TV Slovenija 1 + TV Slovenija 2 + TV TRWAM + TV Vega + TV Východ + UA TV + Ukraïna 24 + Up Network + Viasat Explore + Viasat History + Viasat Nature + VTV 1 + VTV 2 + VTV 3 + VTV 4 + Water Planet + W Polsce PL + Z1 + Zoom + Zoom TV + 3sat + Anixe HD Serie + ARD Alpha + Das Erste + Disney Channel Deutschland + HR Fernsehen + KIKA + Nitro Deutschland + Phoenix + RTL Deutschland + Welt + ZDF + ZDF Info + ZDF Neo + 360 Tune Box + Aljazeera Channel + Aljazeera English + Animal Planet UK + Arirang World + Babes TV + Baby TV Europe + BBC Entertainment Europe + BBC Four + BBC One + BBC Two + BBC World News Europe + Bloomberg TV Europe + Blue Hustler Europe + Boomerang Central & Eastern Europe + Brazzers TV Europe + CBBC + CCTV 4 Europe + CCTV 9 + Club MTV + CNN International Europe + Crime + Investigation UK + Desire TV + Disney Junior + DocuBox HD + Dorcel TV + Dorcel XXX + Dusk + DW Deutsch + E4 UK + Eden + English Club TV + Erox HD + Eroxxx HD + Eurochannel + EuroNews English + EuroNews Magyar + EWTN Europe + Extasy TV + Extreme Sports Channel + FashionTV Europe + FightBox HD + Film 4 + FilmBox Arthouse Worldwide + Food Network EMEA + France 24 English + Fuel TV + Gametoon + Ginx eSports TV International + Hustler HD Europe + Hustler TV Europe + ITV London + ITV 2 + ITV 3 + ITV 4 + KBS World + Lounge TV + More 4 UK + MTV 80s + MTV 90s + MTV Hits Europe + MTV Live + MTV UK + MyZen TV + MyZen TV 4K + NASA TV Public + NASA TV UHD Public + National Geographic HD UK + Nautical Channel + NBA TV + NHK World Japan + Outdoor Channel + Passion XXX + Pick UK + Playboy TV Europe + Reality Kings TV + RTG TV + Sky Arts UK + Sky Atlantic UK + Sky Cinema Action + Sky Cinema Drama + Sky Cinema Family + Sky Cinema Greats + Sky Cinema Hits + Sky Cinema Premiere + Sky Cinema Sci-fi Horror + Sky Cinema Select + Sky Comedy UK + Sky Crime + Sky History 2 + Sky News UK + Sky News International + Sky One UK + Sky Sci-Fi + Sky Sports Cricket + Sky Sports F1 + Sky Sports Football UK + Sky Sports Golf UK + Sky Sports Main Event UK + Sky Sports News UK + Sky Sports Premier League UK + Sky Witness UK + Stars TV + Stingray Classica + Stingray CMusic + Stingray Djazz + SuperOne HD + Trace Sport Stars + True Amateurs + Wild TV + #0 + Canal 24 Horas + CGTN Español + CGTN Français + France 24 Français + France 3 + Mezzo + TV5Monde Europe + Aljazeera Balkans + ATV + Comedy Central Family Hungary + Comedy Central Hungary + La 5 + BVN Europa + 4 Fun Dance + 4 Fun Kids + 4 Fun TV + Adventure + Belarus 24 + Biznes 24 + Cartoon Network Polska + 7D7 + Bober International + Perviy kanal + RTVS 24 + Arcadia TV + Arena Sport 1 + Arena Sport 2 + Chuck TV + CNL Evropa + Life TV + 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 7e01c27a..fadfd686 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 @@ -13,7 +13,7 @@ module.exports = { parser: function ({ buffer, date }) { const programs = [] const items = parseItems(buffer) - items.forEach((item, i) => { + items.forEach(item => { const prev = programs[programs.length - 1] const $item = cheerio.load(item) let start = parseStart($item, date) diff --git a/sites/m.tv.sms.cz/m.tv.sms.cz.test.js b/sites/m.tv.sms.cz/m.tv.sms.cz.test.js index 49426b41..9346a5af 100644 --- a/sites/m.tv.sms.cz/m.tv.sms.cz.test.js +++ b/sites/m.tv.sms.cz/m.tv.sms.cz.test.js @@ -1,4 +1,4 @@ -// npx epg-grabber --config=sites/m.tv.sms.cz/m.tv.sms.cz.config.js --channels=sites/m.tv.sms.cz/m.tv.sms.cz.channels.xml --output=guide.xml +// npm run grab -- --site=m.tv.sms.cz const { parser, url } = require('./m.tv.sms.cz.config.js') const iconv = require('iconv-lite') @@ -34,14 +34,14 @@ it('can parse response', () => { expect(results[0]).toMatchObject({ start: '2023-06-11T03:21:00.000Z', stop: '2023-06-11T04:08:00.000Z', - title: `Conspiraciones al descubierto: La bomba atómica alemana y el hundimiento del Titanic`, + title: 'Conspiraciones al descubierto: La bomba atómica alemana y el hundimiento del Titanic', description: 'Documentales' }) expect(results[25]).toMatchObject({ start: '2023-06-12T02:23:00.000Z', stop: '2023-06-12T03:23:00.000Z', - title: `Rapa I (6)`, + title: 'Rapa I (6)', description: 'Series' }) }) @@ -50,7 +50,7 @@ it('can handle empty guide', () => { const result = parser({ buffer: iconv.encode( Buffer.from( - `` + '' ), 'win1250' ) diff --git a/sites/magentatv.at/magentatv.at.channels.xml b/sites/magentatv.at/magentatv.at.channels.xml index 57afa997..5663918c 100644 --- a/sites/magentatv.at/magentatv.at.channels.xml +++ b/sites/magentatv.at/magentatv.at.channels.xml @@ -1,219 +1,217 @@ - - - 1-2-3.tv - 13th Street HD - 3sat - Al Jazeera - ARD-alpha - ARTE Deutsch - ATV - ATV 2 - Auto Motor und Sport - Baby TV - BBC Entertainment Europe - BBC World News Europe - Bergblick - Bibel TV - Bloomberg - Blue Hustler Europe - Bon Gusto - Boomerang - Cartoon Network - CCTV 4 Europe - CGTN - Club MTV - CNBC - CNN - COMEDY CENTRAL - Crime + Investigation - Das Erste - DELUXE MUSIC - Disney Channel Deutschland - DMAX Austria - Duna TV - E! Europe - eSPORTS1 HD - euronews (D) - Eurosport 1 Germany - - Eurosport Turkey - Evil Angel TV - Extreme Sports Channel - Fashion TV - Film Klub - Fix&Foxi - France 24 (en francais) - GEO TV HD - GoTV - Gute Laune TV - Habertürk - Hayat TV - Heimatkanal - History Germany - HOME & GARDEN TV HD - HR Fernsehen - HRT TV 1 - HSE - HSE Extra - HSE Trend - HT 1 Innviertel - Hustler TV Europe - Kabel Eins Austria - Kabel Eins Classics - Kabel Eins Doku Austria - KIKA - Kinowelt TV HD - Klasik TV - Krone TV - K-TV - Kurier TV - Melodie TV - Motorvision - MTV - MTV 00s - MTV 80s - MTV 90s - MTV Hits Europe - MTV Live HD - N24 Doku - NatGeo HD - National Geographic Wild HD - Nick HD - Nick.Jr. - Nitro Austria - N-TV Austria - Oe24 TV - Okto TV - One - ORF 1 - ORF 2 Burgenland - ORF 2 Europe - ORF 2 Kärnten - ORF 2 NiederÖsterreich - ORF 2 OberÖsterreich - ORF 2 Salzburg - ORF 2 Steiermark - ORF 2 Tirol - ORF 2 Vorarlberg - ORF 2 Wien - ORF III - ORF Sport + - Phoenix - Pink Extra - Pink Film - Pink Music - Pink Plus - ProSieben Austria - ProSieben FUN HD - ProSieben Maxx Austria - Puls 24 - Puls 4 - QVC Deutschland - QVC Style Deutschland - QVC ZWEI - R9 - Rai Due - Rai Tre - Rai Uno - RBB Berlin - RiC - Romance TV - RTL Austria - RTL Crime Deutschland - RTL Living Deutschland - RTL Passion Deutschland - RTL Zwei Austria - RTLup - RTR Planeta - Sat. 1 Gold Österreich - Sat. 1 Österreich - SAT.1 emotions - Servus TV Österreich - Sixx Austria - Sky Atlantic HD - Sky Cinema Action HD - Sky Cinema Best Of HD - Sky Cinema Classics - Sky Cinema Family - Sky Cinema Fun - Sky Cinema Premieren +24 - Sky Cinema Premieren HD - Sky Cinema Special HD - Sky Cinema Thriller HD - Sky Comedy HD - Sky Crime HD - Sky Documentaries HD - Sky Krimi HD - Sky Nature HD - Sky One HD - Sky Replay - Sky Showcase - Sky Sport 1 HD - Sky Sport 10 HD - Sky Sport 11 HD - Sky Sport 12 HD - Sky Sport 13 HD - Sky Sport 14 HD - Sky Sport 2 HD - Sky Sport 3 HD - Sky Sport 4 HD - Sky Sport 5 HD - Sky Sport 6 HD - Sky Sport 7 HD - Sky Sport 8 HD - Sky Sport 9 HD - Sky Sport Austria 1 - Sky Sport Austria 2 - Sky Sport Austria 3 - Sky Sport Austria 4 - Sky Sport Austria 5 - Sky Sport Austria 6 - Sky Sport Austria 7 - Sky Sport Bundesliga 1 HD - Sky Sport Bundesliga 10 HD - Sky Sport Bundesliga 2 HD - Sky Sport Bundesliga 3 HD - Sky Sport Bundesliga 4 HD - Sky Sport Bundesliga 5 HD - Sky Sport Bundesliga 6 HD - Sky Sport Bundesliga 7 HD - Sky Sport Bundesliga 8 HD - Sky Sport Bundesliga 9 HD - Sky Sport F1 HD - Sky Sport Golf - Sky Sport News HD - Sky Sport Premier League - Spiegel Geschichte - Spiegel TV Wissen HD - Sport 1 - Sport 1+ - SPORTDIGITAL FUSSBALL - SR Fernsehen HD - Stingray All Day Party! - Stingray Classic R&B - Stingray Classic Rock - Super RTL Austria - SWR Fernsehen RP - SYFY HD - tagesschau24 HD - Tele 5 - Tirol TV - TLC Austria - Toxic TV - TRT World - TV Polonia - TV5MONDE Europe - Universal TV HD - Vesti - Volksmusik TV - Vox Austria - W24 - Warner TV Comedy HD - Warner TV Serie - WDR Fernsehen Köln - ZDF - ZDF Info - ZDF Neo - - + + + + Film Klub + Hayat TV + 1-2-3.tv + 13th Street HD + 3sat + ARD-alpha + ARTE Deutsch + ATV + ATV 2 + Auto Motor und Sport + Baby TV + Bergblick + Bibel TV + Bon Gusto + Boomerang + Cartoon Network + COMEDY CENTRAL + Crime + Investigation + Das Erste + DELUXE MUSIC + Disney Channel Deutschland + DMAX Austria + E! Europe + eSPORTS1 HD + euronews (D) + Eurosport 1 Germany + Evil Angel TV + Extreme Sports Channel + Fix&Foxi + GEO TV HD + GoTV + Gute Laune TV + Habertürk + Heimatkanal + HOME & GARDEN TV HD + History Germany + HR Fernsehen + HSE + HSE Extra + HSE Trend + HT 1 Innviertel + Kabel Eins Austria + Kabel Eins Doku Austria + Kabel Eins Classics + KIKA + Kinowelt TV HD + Krone TV + K-TV + Kurier TV + Melodie TV + Motorvision + MTV 00s + MTV 80s + MTV + N24 Doku + NatGeo HD + National Geographic Wild HD + Nick.Jr. + Nitro Austria + N-TV Austria + Oe24 TV + Okto TV + One + ORF 1 + ORF 2 Burgenland + ORF 2 Europe + ORF 2 Kärnten + ORF 2 NiederÖsterreich + ORF 2 OberÖsterreich + ORF 2 Salzburg + ORF 2 Steiermark + ORF 2 Tirol + ORF 2 Vorarlberg + ORF 2 Wien + ORF III + ORF Sport + + Phoenix + ProSieben Austria + ProSieben FUN HD + ProSieben Maxx Austria + Puls 24 + Puls 4 + QVC ZWEI + QVC Deutschland + QVC Style Deutschland + R9 + RBB Berlin + RiC + Romance TV + RTL Crime Deutschland + RTL Austria + RTL Living Deutschland + RTL Passion Deutschland + RTLup + RTL Zwei Austria + RTR Planeta + Sat. 1 Österreich + SAT.1 emotions + Sat. 1 Gold Österreich + Servus TV Österreich + Sixx Austria + Sky Atlantic HD + Sky Cinema Action HD + Sky Cinema Best Of HD + Sky Cinema Classics + Sky Cinema Family + Sky Cinema Fun + Sky Cinema Premieren HD + Sky Cinema Premieren +24 + Sky Cinema Special HD + Sky Cinema Thriller HD + Sky Comedy HD + Sky Crime HD + Sky Documentaries HD + Sky Krimi HD + Sky Nature HD + Sky One HD + Sky Replay + Sky Showcase + Sky Sport 10 HD + Sky Sport 11 HD + Sky Sport 12 HD + Sky Sport 13 HD + Sky Sport 14 HD + Sky Sport 1 HD + Sky Sport 2 HD + Sky Sport 3 HD + Sky Sport 4 HD + Sky Sport 5 HD + Sky Sport 6 HD + Sky Sport 7 HD + Sky Sport 8 HD + Sky Sport 9 HD + Sky Sport Austria 1 + Sky Sport Austria 2 + Sky Sport Austria 3 + Sky Sport Austria 4 + Sky Sport Austria 5 + Sky Sport Austria 6 + Sky Sport Austria 7 + Sky Sport Bundesliga 1 HD + Sky Sport Bundesliga 10 HD + Sky Sport Bundesliga 2 HD + Sky Sport Bundesliga 3 HD + Sky Sport Bundesliga 4 HD + Sky Sport Bundesliga 5 HD + Sky Sport Bundesliga 6 HD + Sky Sport Bundesliga 7 HD + Sky Sport Bundesliga 8 HD + Sky Sport Bundesliga 9 HD + Sky Sport F1 HD + Sky Sport Golf + Sky Sport News HD + Sky Sport Premier League + Spiegel Geschichte + Spiegel TV Wissen HD + Sport 1 + Sport 1+ + SPORTDIGITAL FUSSBALL + SR Fernsehen HD + Stingray All Day Party! + Stingray Classic R&B + Stingray Classic Rock + Super RTL Austria + SWR Fernsehen RP + SYFY HD + tagesschau24 HD + Tele 5 + Tirol TV + TLC Austria + Universal TV HD + Volksmusik TV + Vox Austria + W24 + Warner TV Comedy HD + Warner TV Serie + WDR Fernsehen Köln + ZDF + ZDF Info + ZDF Neo + Al Jazeera + BBC Entertainment Europe + BBC World News Europe + Bloomberg + Blue Hustler Europe + CCTV 4 Europe + CGTN + Club MTV + CNBC + CNN + Fashion TV + Hustler TV Europe + MTV 90s + MTV Hits Europe + MTV Live HD + TRT World + France 24 (en francais) + TV5MONDE Europe + HRT TV 1 + Duna TV + Rai Uno + Rai Due + Rai Tre + TV Polonia + Klasik TV + Pink Extra + Pink Film + Pink Music + Pink Plus + Toxic TV + Vesti + Eurosport Turkey + diff --git a/sites/magentatv.at/magentatv.at.config.js b/sites/magentatv.at/magentatv.at.config.js index 6e768fce..71f16b0e 100644 --- a/sites/magentatv.at/magentatv.at.config.js +++ b/sites/magentatv.at/magentatv.at.config.js @@ -21,25 +21,19 @@ module.exports = { if (!items.length) return programs const promises = [ axios.get( - `${API_STATIC_ENDPOINT}/de/events/segments/${date - .add(6, 'h') - .format('YYYYMMDDHHmmss')}`, + `${API_STATIC_ENDPOINT}/de/events/segments/${date.add(6, 'h').format('YYYYMMDDHHmmss')}`, { responseType: 'arraybuffer' } ), axios.get( - `${API_STATIC_ENDPOINT}/de/events/segments/${date - .add(12, 'h') - .format('YYYYMMDDHHmmss')}`, + `${API_STATIC_ENDPOINT}/de/events/segments/${date.add(12, 'h').format('YYYYMMDDHHmmss')}`, { responseType: 'arraybuffer' } ), axios.get( - `${API_STATIC_ENDPOINT}/de/events/segments/${date - .add(18, 'h') - .format('YYYYMMDDHHmmss')}`, + `${API_STATIC_ENDPOINT}/de/events/segments/${date.add(18, 'h').format('YYYYMMDDHHmmss')}`, { responseType: 'arraybuffer' } diff --git a/sites/magentatv.at/magentatv.at.test.js b/sites/magentatv.at/magentatv.at.test.js index 8785663c..de0c538a 100644 --- a/sites/magentatv.at/magentatv.at.test.js +++ b/sites/magentatv.at/magentatv.at.test.js @@ -1,5 +1,5 @@ // npm run channels:parse -- --config=./sites/magentatv.at/magentatv.at.config.js --output=./sites/magentatv.at/magentatv.at.channels.xml -// npx epg-grabber --config=sites/magentatv.at/magentatv.at.config.js --channels=sites/magentatv.at/magentatv.at.channels.xml --output=guide.xml --days=2 +// npm run grab -- --site=magentatv.at const { parser, url } = require('./magentatv.at.config.js') const fs = require('fs') @@ -91,7 +91,7 @@ it('can parse response', async () => { }) it('can handle empty guide', async () => { - let results = await parser({ content: ``, channel, date }) + let results = await parser({ content: '', channel, date }) expect(results).toMatchObject([]) }) diff --git a/sites/magentatv.de/magentatv.de.channels.xml b/sites/magentatv.de/magentatv.de.channels.xml index 1e923afc..17aa69f4 100644 --- a/sites/magentatv.de/magentatv.de.channels.xml +++ b/sites/magentatv.de/magentatv.de.channels.xml @@ -1,263 +1,261 @@ - - - 1-2-3.tv - 13TH STREET - 3sat - ALEX Berlin - allgäu.tv - altenburg.tv - Animal Planet - ANIXE HD Serie - ANIXE+ - ARD-alpha - ARTE - a.tv - auto motor und sport - Baby TV - Baden TV - Baden TV Süd - BBC World - Beate-Uhse.TV (Sky) - beIN iZ - beIN Movies Turk - Bergblick - Bibel TV - BILD - Blue Hustler - BonGusto - Boomerang - BR Fernsehen Nord - BR Fernsehen Süd - Cartoon Network - CEM TV - CHANNEL21 - Chemnitz Fernsehen - Classica (Sky) - CNN International - Comedy Central - Nick/Comedy Central+1 - Crime+Investigation - #dabeiTV - Das Erste - DELUXE MUSIC - Deutsches Musik Fernsehen - Discovery Channel - Disney Channel - DMAX - Dresden Fernsehen - DW - E! Entertainment - ems TV - eSPORTS1 - Euro D - Euronews Deutsch - Euronews Italiano - Euronews Russki - Eurosport 1 - Eurosport 2 - Eurostar TV - Extreme Sports - Fashion TV - FC BAYERN.TV LIVE - France 24 francais - Franken Fernsehen - Friesischer Rundfunk - GEO Television - Habertürk TV - Hamburg 1 - HAUPTSTADT.TV - Heimatkanal - HGTV - The HISTORY Channel - hr-fernsehen - HSE - iTVN - Jukebox - Junior (Sky) - Juwelo - Kabel Eins CLASSICS - Kabel Eins - Kabel Eins Doku - Kanal 7 - KiKA - KinoweltTV - K-TV - LAUSITZWELLE - Leipzig Fernsehen - L-TV - Lust pur - MagentaSport - Marco Polo TV - MDF.1 Fernsehen - MDR-Fernsehen Sachsen - MDR-Fernsehen Sachsen-Anhalt - MDR-Fernsehen Thüringen - More Than Sports TV - MOTORVISION.TV - MTV - münchen.tv - N24 Doku - Kinomir - National Geographic - National Geographic Wild - NDR Fernsehen Hamburg - NDR Fernsehen Mecklenburg-Vorpommern - NDR Fernsehen Niedersachsen - NDR Fernsehen Schleswig-Holstein - Nick Jr. - Nicktoons (Sky) - NIEDERBAYERN TV - DEG - NIEDERBAYERN TV - LA - NIEDERBAYERN TV - PA - NITRO - nrwision - n-tv - Oberpfalz TV - OF-TV - OK4 - OK54 Trier - OK-TV Ludwigshafen - OK:TV Mainz - OK Weinstraße - ONE - OstWest - Penthouse Passion - phoenix - Playboy Europe - ProSieben - ProSieben FUN - ProSieben MAXX - QVC - Radio Bremen TV - Rai 1 - Rai 2 - Rai 3 - rbb fernsehen Berlin - rbb fernsehen Brandenburg - Red Bull TV - Rennsteig.TV - RFH Regionalfernsehen Harz - RFO - Rhein-Main TV - RNF - Romance TV - RTL Crime - RTL - RTL Hessen - RTL Living - RTL HH SH - RTL HB NDS - RTL Passion - RTLup - RTL NRW - RTLZWEI - RTR Planeta - salve.tv - SAT.1 Bayern - SAT.1 - SAT.1 emotions - SAT.1 GOLD - SAT.1 HH SH - SAT.1 NDS Bremen - SAT.1 NRW - SAT.1 RhlPf Hessen - ServusTV - Shop LC - Show Max - Show Turk - sixx - SkyAtlantic - Sky Cinema Action - Sky Cinema Best of - Sky Cinema Classics - Sky Cinema Family - Sky Cinema Fun - Sky Cinema Mittelerde - Sky Cinema Premieren - Sky Cinema Premieren +24 - Sky Cinema Thriller - Sky Comedy - Sky Crime - Sky Documentaries - SkyKrimi - Sky Nature - Sky One - Sky Sport 1 - Sky Sport 10 - Sky Sport 11 - Sky Sport 2 - Sky Sport 3 - Sky Sport 4 - Sky Sport 5 - Sky Sport 6 - Sky Sport 7 - Sky Sport 8 - Sky Sport 9 - Sky Sport Bundesliga 1 - Sky Sport Bundesliga 10 - Sky Sport Bundesliga 2 - Sky Sport Bundesliga 3 - Sky Sport Bundesliga 4 - Sky Sport Bundesliga 5 - Sky Sport Bundesliga 6 - Sky Sport Bundesliga 7 - Sky Sport Bundesliga 8 - Sky Sport Bundesliga 9 - Sky Sport F1 - Sky Sport News - sonnenklar.TV - SONY AXN - SONY CHANNEL - Spiegel Geschichte - Spiegel TV Wissen - SPORT1 - SPORT1+ - SPORTDIGITAL FUSSBALL - SR Fernsehen - Studio 47 - Super RTL - SWR Fernsehen BW - SWR Fernsehen RP - SYFY - tagesschau24 - TELE 5 - TeleBom/TeleDom - TLC - TOGGO plus - TV8 Int - TVA Ostbayern - tv.berlin - tv.ingolstadt - TV Mainfranken - TV Mittelrhein - TV Oberfranken - TV Polonia - TV Westsachsen - ÜLKE TV - Universal TV - VOX - VOXup - Warner TV Comedy - Warner TV Film - Warner TV Serie - WDR Fernsehen Aachen - WDR Fernsehen Bielefeld - WDR Fernsehen Bonn - WDR Fernsehen Dortmund - WDR Fernsehen Duisburg - WDR Fernsehen Düsseldorf - WDR Fernsehen Essen - WDR Fernsehen Köln - WDR Fernsehen Münster - WDR Fernsehen Siegen - WDR Fernsehen Wuppertal - WELT - Welt der Wunder - wetter.com TV - WWTV - ZDF - ZDFinfo - ZDFneo - - + + 1-2-3.tv + 13TH STREET + SAT.1 Bayern + SAT.1 RhlPf Hessen + SAT.1 HH SH + SAT.1 NDS Bremen + 3sat + ALEX Berlin + allgäu.tv + altenburg.tv + Animal Planet + ANIXE HD Serie + ANIXE+ + ARD-alpha + ARTE + a.tv + auto motor und sport + Baby TV + Baden TV + Baden TV Süd + BBC World + Beate-Uhse.TV (Sky) + beIN iZ + beIN Movies Turk + Bergblick + Bibel TV + BILD + Blue Hustler + BonGusto + Boomerang + BR Fernsehen Nord + BR Fernsehen Süd + Cartoon Network + CEM TV + CHANNEL21 + Classica (Sky) + CNN International + Comedy Central + Nick/Comedy Central+1 + Crime+Investigation + #dabeiTV + Das Erste + DELUXE MUSIC + Deutsches Musik Fernsehen + Discovery Channel + Disney Channel + DMAX + DW + E! Entertainment + ems TV + eSPORTS1 + Euro D + Euronews Deutsch + Euronews Italiano + Euronews Russki + Eurosport 1 + Eurosport 2 + Eurostar TV + Extreme Sports + Fashion TV + FC BAYERN.TV LIVE + France 24 francais + Franken Fernsehen + Friesischer Rundfunk + GEO Television + Habertürk TV + Hamburg 1 + HAUPTSTADT.TV + Heimatkanal + HGTV + The HISTORY Channel + hr-fernsehen + HSE + iTVN + Jukebox + Junior (Sky) + Juwelo + Kabel Eins + Kabel Eins CLASSICS + Kabel Eins Doku + Kanal 7 + KiKA + KinoweltTV + K-TV + LAUSITZWELLE + L-TV + Lust pur + MagentaSport + Marco Polo TV + MDF.1 Fernsehen + MDR-Fernsehen Sachsen + MDR-Fernsehen Sachsen-Anhalt + MDR-Fernsehen Thüringen + More Than Sports TV + MOTORVISION.TV + MTV + münchen.tv + N24 Doku + Kinomir + National Geographic + National Geographic Wild + NDR Fernsehen Hamburg + NDR Fernsehen Mecklenburg-Vorpommern + NDR Fernsehen Niedersachsen + NDR Fernsehen Schleswig-Holstein + Nick Jr. + Nicktoons (Sky) + NIEDERBAYERN TV - DEG + NIEDERBAYERN TV - LA + NIEDERBAYERN TV - PA + NITRO + nrwision + n-tv + Oberpfalz TV + OF-TV + OK4 + OK54 Trier + OK-TV Ludwigshafen + OK:TV Mainz + OK Weinstraße + ONE + OstWest + Penthouse Passion + phoenix + Playboy Europe + ProSieben + ProSieben FUN + ProSieben MAXX + QVC + Radio Bremen TV + Rai 1 + Rai 2 + Rai 3 + rbb fernsehen Berlin + rbb fernsehen Brandenburg + Red Bull TV + Rennsteig.TV + RFH Regionalfernsehen Harz + RFO + Rhein-Main TV + RNF + Romance TV + RTL Crime + RTL + RTL Hessen + RTL Living + RTL HH SH + RTL HB NDS + RTL Passion + RTLup + RTL NRW + RTLZWEI + RTR Planeta + Chemnitz Fernsehen + Dresden Fernsehen + Leipzig Fernsehen + salve.tv + SAT.1 + SAT.1 emotions + SAT.1 GOLD + SAT.1 NRW + ServusTV + Shop LC + Show Max + Show Turk + sixx + SkyAtlantic + Sky Cinema Action + Sky Cinema Best of + Sky Cinema Classics + Sky Cinema Family + Sky Cinema Fun + Sky Cinema Mittelerde + Sky Cinema Premieren + Sky Cinema Premieren +24 + Sky Cinema Thriller + Sky Comedy + Sky Crime + Sky Documentaries + SkyKrimi + Sky Nature + Sky One + Sky Sport 10 + Sky Sport 11 + Sky Sport 1 + Sky Sport 2 + Sky Sport 3 + Sky Sport 4 + Sky Sport 5 + Sky Sport 6 + Sky Sport 7 + Sky Sport 8 + Sky Sport 9 + Sky Sport Bundesliga 1 + Sky Sport Bundesliga 10 + Sky Sport Bundesliga 2 + Sky Sport Bundesliga 3 + Sky Sport Bundesliga 4 + Sky Sport Bundesliga 5 + Sky Sport Bundesliga 6 + Sky Sport Bundesliga 7 + Sky Sport Bundesliga 8 + Sky Sport Bundesliga 9 + Sky Sport F1 + Sky Sport News + sonnenklar.TV + SONY AXN + SONY CHANNEL + Spiegel Geschichte + Spiegel TV Wissen + SPORT1 + SPORT1+ + SPORTDIGITAL FUSSBALL + SR Fernsehen + Studio 47 + Super RTL + SWR Fernsehen BW + SWR Fernsehen RP + SYFY + tagesschau24 + TELE 5 + TeleBom/TeleDom + TLC + TOGGO plus + TV8 Int + TVA Ostbayern + tv.berlin + tv.ingolstadt + TV Mainfranken + TV Mittelrhein + TV Oberfranken + TV Polonia + TV Westsachsen + ÜLKE TV + Universal TV + VOX + VOXup + Warner TV Comedy + Warner TV Film + Warner TV Serie + WDR Fernsehen Aachen + WDR Fernsehen Bielefeld + WDR Fernsehen Bonn + WDR Fernsehen Dortmund + WDR Fernsehen Duisburg + WDR Fernsehen Düsseldorf + WDR Fernsehen Essen + WDR Fernsehen Köln + WDR Fernsehen Münster + WDR Fernsehen Siegen + WDR Fernsehen Wuppertal + WELT + Welt der Wunder + wetter.com TV + WWTV + ZDF + ZDFinfo + ZDFneo + diff --git a/sites/magentatv.de/magentatv.de.config.js b/sites/magentatv.de/magentatv.de.config.js index ce6ffab1..4edefacc 100644 --- a/sites/magentatv.de/magentatv.de.config.js +++ b/sites/magentatv.de/magentatv.de.config.js @@ -8,8 +8,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`, + url: 'https://api.prod.sngtv.magentatv.de/EPG/JSON/PlayBillList', request: { method: 'POST', headers: { @@ -54,7 +53,7 @@ module.exports = { async channels() { const data = await axios .post( - `https://api.prod.sngtv.magentatv.de/EPG/JSON/AllChannel`, + 'https://api.prod.sngtv.magentatv.de/EPG/JSON/AllChannel', { channelNamespace: 2, filterlist: [ diff --git a/sites/magentatv.de/magentatv.de.test.js b/sites/magentatv.de/magentatv.de.test.js index 430577a2..42a30a11 100644 --- a/sites/magentatv.de/magentatv.de.test.js +++ b/sites/magentatv.de/magentatv.de.test.js @@ -1,5 +1,5 @@ // npm run channels:parse -- --config=./sites/magentatv.de/magentatv.de.config.js --output=./sites/magentatv.de/magentatv.de.channels.xml -// npx epg-grabber --config=sites/magentatv.de/magentatv.de.config.js --channels=sites/magentatv.de/magentatv.de.channels.xml --output=guide.xml --days=2 +// npm run grab -- --site=magentatv.de const { parser, url, request } = require('./magentatv.de.config.js') const dayjs = require('dayjs') @@ -50,7 +50,8 @@ it('can generate valid request data', () => { }) it('can parse response', () => { - const content = `{"playbilllist":[{"id":"30021745","name":"FBI: Special Crime Unit","introduce":"Nachdem ein Mann von einem Sprengstoffpaket getötet wurde, das zu ihm nach Hause geschickt wurde, versucht das Team, den Absender zu fassen und sein neuestes tödliches Paket abzufangen. Maggie hat Mühe, ihrer jüngeren Schwester zu vertrauen.","channelid":"255","starttime":"2022-03-09 01:00:00 UTC+01:00","endtime":"2022-03-09 01:45:00 UTC+01:00","genres":"Wissen,Natur und Tiere","pictures":[{"rel":"image","href":"http://ngiss.t-online.de/sweetprogrammanager/media/gracenote/1/9/p19740197_e_h9_af.jpg","description":"Brother's Keeper","imageType":"1","copyrightNotice":"(c) ProSiebenSat.1","mimeType":"image/jpeg","resolution":["1440","1080"]},{"rel":"image","href":"http://ngiss.t-online.de/sweetprogrammanager/media/gracenote/1/5/p15528073_i_h9_ae.jpg","description":"FBI","imageType":"13","copyrightNotice":"(c) ProSiebenSat.1","mimeType":"image/jpeg","resolution":["1440","1080"]},{"rel":"image","href":"http://ngiss.t-online.de/sweetprogrammanager/media/gracenote/1/9/p19740197_e_h8_af.jpg","description":"Brother's Keeper","imageType":"17","copyrightNotice":"(c) ProSiebenSat.1","mimeType":"image/jpeg","resolution":["1920","1080"]},{"rel":"image","href":"http://ngiss.t-online.de/sweetprogrammanager/media/gracenote/1/5/p15528073_i_h10_af.jpg","description":"FBI","imageType":"18","copyrightNotice":"(c) ProSiebenSat.1","mimeType":"image/jpeg","resolution":["1920","1080"]}]}]}` + const content = + '{"playbilllist":[{"id":"30021745","name":"FBI: Special Crime Unit","introduce":"Nachdem ein Mann von einem Sprengstoffpaket getötet wurde, das zu ihm nach Hause geschickt wurde, versucht das Team, den Absender zu fassen und sein neuestes tödliches Paket abzufangen. Maggie hat Mühe, ihrer jüngeren Schwester zu vertrauen.","channelid":"255","starttime":"2022-03-09 01:00:00 UTC+01:00","endtime":"2022-03-09 01:45:00 UTC+01:00","genres":"Wissen,Natur und Tiere","pictures":[{"rel":"image","href":"http://ngiss.t-online.de/sweetprogrammanager/media/gracenote/1/9/p19740197_e_h9_af.jpg","description":"Brother\'s Keeper","imageType":"1","copyrightNotice":"(c) ProSiebenSat.1","mimeType":"image/jpeg","resolution":["1440","1080"]},{"rel":"image","href":"http://ngiss.t-online.de/sweetprogrammanager/media/gracenote/1/5/p15528073_i_h9_ae.jpg","description":"FBI","imageType":"13","copyrightNotice":"(c) ProSiebenSat.1","mimeType":"image/jpeg","resolution":["1440","1080"]},{"rel":"image","href":"http://ngiss.t-online.de/sweetprogrammanager/media/gracenote/1/9/p19740197_e_h8_af.jpg","description":"Brother\'s Keeper","imageType":"17","copyrightNotice":"(c) ProSiebenSat.1","mimeType":"image/jpeg","resolution":["1920","1080"]},{"rel":"image","href":"http://ngiss.t-online.de/sweetprogrammanager/media/gracenote/1/5/p15528073_i_h10_af.jpg","description":"FBI","imageType":"18","copyrightNotice":"(c) ProSiebenSat.1","mimeType":"image/jpeg","resolution":["1920","1080"]}]}]}' const result = parser({ content }).map(p => { p.start = p.start.toJSON() p.stop = p.stop.toJSON() @@ -72,7 +73,7 @@ it('can parse response', () => { it('can handle empty guide', () => { const result = parser({ - content: `{"counttotal":"0"}` + content: '{"counttotal":"0"}' }) expect(result).toMatchObject([]) }) diff --git a/sites/magticom.ge/magticom.ge.channels.xml b/sites/magticom.ge/magticom.ge.channels.xml index 1cfeb586..56b55df4 100644 --- a/sites/magticom.ge/magticom.ge.channels.xml +++ b/sites/magticom.ge/magticom.ge.channels.xml @@ -1,119 +1,117 @@ - - - 360 Tune Box - BBC World News Europe - CNBC Europe - CNN International Europe - Erox HD - FashionBox HD - France 24 English - MTV 80s - MTV Russia - RT News - 2 TV - Adjarasport 1 - Adjarasport 2 - Ajara TV - Brazzers TV Europe - Chveni Magti - Comedy TV - Dardimandi - Enki Benki - Ertsulovneba - 1 TV - Formula - GDS TV - Gurjaani TV - Imedi TV - Kavkasia TV - Maestro - Magti Hiti - Magti Kino - Marao TV - Mtavari Arkhi - Obieqtivi TV - Palitra News - Pos TV - Qartuli Arkhi - Quality Channel - Redlight HD - Rioni TV - Rugby TV - Rustavi 2 - Saperavi TV HD - Setanta Sports Georgia - Setanta Sports + Georgia - Silk Universal - TV 25 - TV Pirveli - A1 - A2 - Amedia Hit - Amedia Premium - Armenia 1 TV - Avto 24 - Az TV - Bollywood TV Rossiya - Cartoon Network Russia & South East Europe - Cinéma - STS International - Nastoyashcheye Vremya - Da Vinci - Discovery Science Rossiya - DocuBox HD - Domashniy - Dom Kino - Dom Kino Premium - DTX Rossiya - Duck TV SD - EuroNews Russkiy - Evrokino - Fast & FunBox HD - FightBox HD - FilmBox Arthouse Worldwide - FilmBox Russia - Fox Russia - Pyatnitsa! International - Gulli Girl - Hollywood HD - Illusion + - Investigation Discovery Rossiya - Istoriya - Karusel International - Mezzo - Moya Planeta - Mult - National Geographic Russia - National Geographic Wild Russia - Nauka - Nickelodeon CIS - Nick Jr CIS - NST - Telekanal O! - Ohotnik i Rybolov - Paramount Channel Russia - Paramount Comedy Russia - Peretz International - RBK TV - RTR Planeta - RTVi Europe - Rossiya 24 - Rossiya K - Russkiy Illusion - Sarafan - Tiji Russia - TNT Music - TV 1000 Action - TV 1000 East - TV 1000 Russkoe Kino - TV XXI - Viasat Explore East - Viasat History - Viasat Nature East - Viasat Sport East - Zagorodny International - Zhivaya Planeta - - - \ No newline at end of file + + + 360 Tune Box + BBC World News Europe + CNBC Europe + CNN International Europe + Erox HD + FashionBox HD + France 24 English + MTV 80s + MTV Russia + RT News + 1 TV + 2 TV + Adjarasport 1 + Adjarasport 2 + Ajara TV + Brazzers TV Europe + Chveni Magti + Comedy TV + Dardimandi + Enki Benki + Ertsulovneba + Formula + GDS TV + Gurjaani TV + Imedi TV + Kavkasia TV + Maestro + Magti Hiti + Magti Kino + Marao TV + Mtavari Arkhi + Obieqtivi TV + Palitra News + Pos TV + Qartuli Arkhi + Quality Channel + Redlight HD + Rioni TV + Rugby TV + Rustavi 2 + Saperavi TV HD + Setanta Sports Georgia + Setanta Sports + Georgia + Silk Universal + TV 25 + TV Pirveli + A1 + A2 + Amedia Hit + Amedia Premium + Armenia 1 TV + Avto 24 + Az TV + Bollywood TV Rossiya + Cartoon Network Russia & South East Europe + Cinéma + STS International + Nastoyashcheye Vremya + Da Vinci + Discovery Science Rossiya + DocuBox HD + Domashniy + Dom Kino + Dom Kino Premium + DTX Rossiya + Duck TV SD + EuroNews Russkiy + Evrokino + Fast & FunBox HD + FightBox HD + FilmBox Arthouse Worldwide + FilmBox Russia + Fox Russia + Pyatnitsa! International + Gulli Girl + Hollywood HD + Illusion + + Investigation Discovery Rossiya + Istoriya + Karusel International + Mezzo + Moya Planeta + Mult + National Geographic Russia + National Geographic Wild Russia + Nauka + Nickelodeon CIS + Nick Jr CIS + NST + Telekanal O! + Ohotnik i Rybolov + Paramount Channel Russia + Paramount Comedy Russia + Peretz International + RBK TV + RTR Planeta + RTVi Europe + Rossiya 24 + Rossiya K + Russkiy Illusion + Sarafan + Tiji Russia + TNT Music + TV 1000 Action + TV 1000 East + TV 1000 Russkoe Kino + TV XXI + Viasat Explore East + Viasat History + Viasat Nature East + Viasat Sport East + Zagorodny International + Zhivaya Planeta + \ No newline at end of file diff --git a/sites/magticom.ge/magticom.ge.config.js b/sites/magticom.ge/magticom.ge.config.js index 661f54e9..61044471 100644 --- a/sites/magticom.ge/magticom.ge.config.js +++ b/sites/magticom.ge/magticom.ge.config.js @@ -42,9 +42,9 @@ module.exports = { return programs }, - async channels({ country, lang }) { + async channels() { const html = await axios - .get(`https://www.magticom.ge/en/tv/tv-services/tv-guide`) + .get('https://www.magticom.ge/en/tv/tv-services/tv-guide') .then(r => r.data) .catch(console.log) @@ -77,7 +77,9 @@ function parseItems(content) { let data try { data = JSON.parse(content) - } catch (err) {} + } catch (error) { + console.log(error.message) + } if (!data || !Array.isArray(data)) return [] return data diff --git a/sites/magticom.ge/magticom.ge.test.js b/sites/magticom.ge/magticom.ge.test.js index bdcf4a8d..9282ebde 100644 --- a/sites/magticom.ge/magticom.ge.test.js +++ b/sites/magticom.ge/magticom.ge.test.js @@ -1,5 +1,5 @@ -// node ./scripts/channels.js --config=./sites/magticom.ge/magticom.ge.config.js --output=./sites/magticom.ge/magticom.ge.channels.xml -// npx epg-grabber --config=sites/magticom.ge/magticom.ge.config.js --channels=sites/magticom.ge/magticom.ge.channels.xml --output=guide.xml --days=2 +// npm run channels:parse -- --config=./sites/magticom.ge/magticom.ge.config.js --output=./sites/magticom.ge/magticom.ge.channels.xml +// npm run grab -- --site=magticom.ge const { parser, url, request } = require('./magticom.ge.config.js') const dayjs = require('dayjs') @@ -37,7 +37,8 @@ it('can generate valid request data', () => { }) it('can parse response', () => { - const content = `[{\"id\":2313254118,\"channelId\":260,\"startTimestamp\":\"2021-11-22T07:00:00\",\"endTimestamp\":\"2021-11-22T09:00:00\",\"duration\":null,\"title\":\"\\u0425\\\/\\u0444 \\\"\\u041d\\u0435\\u0440\\u0430\\u0432\\u043d\\u044b\\u0439 \\u0431\\u0440\\u0430\\u043a\\\".\",\"subTitle\":\"\\u0425\\\/\\u0444 \\\"\\u041d\\u0435\\u0440\\u0430\\u0432\\u043d\\u044b\\u0439 \\u0431\\u0440\\u0430\\u043a\\\".\",\"info\":\"\\u0413\\u0443\\u0434\\u0436\\u0430\\u0440\\u0430\\u0442\\u0435\\u0446 \\u0425\\u0430\\u0441\\u043c\\u0443\\u043a\\u0445 \\u041f\\u0430\\u0442\\u0435\\u043b \\u043f\\u043e\\u0441\\u0441\\u043e\\u0440\\u0438\\u043b\\u0441\\u044f \\u0441 \\u043d\\u043e\\u0432\\u044b\\u043c \\u0441\\u043e\\u0441\\u0435\\u0434\\u043e\\u043c \\u0413\\u0443\\u0433\\u0433\\u0438 \\u0422\\u0430\\u043d\\u0434\\u043e\\u043d\\u043e\\u043c. \\u041d\\u043e \\u0438\\u043c \\u043f\\u0440\\u0438\\u0445\\u043e\\u0434\\u0438\\u0442\\u0441\\u044f \\u043f\\u043e\\u043c\\u0438\\u0440\\u0438\\u0442\\u044c\\u0441\\u044f, \\u043a\\u043e\\u0433\\u0434\\u0430 \\u0438\\u0445 \\u0434\\u0435\\u0442\\u0438 \\u0432\\u043b\\u044e\\u0431\\u043b\\u044f\\u044e\\u0442\\u0441\\u044f \\u0434\\u0440\\u0443\\u0433 \\u0432 \\u0434\\u0440\\u0443\\u0433\\u0430. \\u0420\\u0435\\u0436\\u0438\\u0441\\u0441\\u0435\\u0440: \\u0421\\u0430\\u043d\\u0434\\u0436\\u0430\\u0439 \\u0427\\u0445\\u0435\\u043b. \\u0410\\u043a\\u0442\\u0435\\u0440\\u044b: \\u0420\\u0438\\u0448\\u0438 \\u041a\\u0430\\u043f\\u0443\\u0440, \\u041f\\u0430\\u0440\\u0435\\u0448 \\u0420\\u0430\\u0432\\u0430\\u043b, \\u0412\\u0438\\u0440 \\u0414\\u0430\\u0441. 2017 \\u0433\\u043e\\u0434.\",\"pg\":null,\"year\":null,\"country\":null,\"imageUrl\":null,\"createdBy\":-200,\"creationTimestamp\":\"2021-11-21T18:04:52\",\"epgSourceId\":8,\"startDateStr\":\"20211122070000\",\"genreByGenreId\":null,\"languageByLanguageId\":{\"id\":3,\"name\":\"\\u10e0\\u10e3\\u10e1\\u10e3\\u10da\\u10d8\",\"orderIndex\":3,\"nameShort\":\"ru\"},\"externalId\":\"2021460000084132\",\"programHumanById\":[],\"date\":null,\"time\":null,\"startDate\":null,\"endDate\":null,\"longInfo\":\"\\u0413\\u0443\\u0434\\u0436\\u0430\\u0440\\u0430\\u0442\\u0435\\u0446 \\u0425\\u0430\\u0441\\u043c\\u0443\\u043a\\u0445 \\u041f\\u0430\\u0442\\u0435\\u043b \\u043f\\u043e\\u0441\\u0441\\u043e\\u0440\\u0438\\u043b\\u0441\\u044f \\u0441 \\u043d\\u043e\\u0432\\u044b\\u043c \\u0441\\u043e\\u0441\\u0435\\u0434\\u043e\\u043c \\u0413\\u0443\\u0433\\u0433\\u0438 \\u0422\\u0430\\u043d\\u0434\\u043e\\u043d\\u043e\\u043c. \\u041d\\u043e \\u0438\\u043c \\u043f\\u0440\\u0438\\u0445\\u043e\\u0434\\u0438\\u0442\\u0441\\u044f \\u043f\\u043e\\u043c\\u0438\\u0440\\u0438\\u0442\\u044c\\u0441\\u044f, \\u043a\\u043e\\u0433\\u0434\\u0430 \\u0438\\u0445 \\u0434\\u0435\\u0442\\u0438 \\u0432\\u043b\\u044e\\u0431\\u043b\\u044f\\u044e\\u0442\\u0441\\u044f \\u0434\\u0440\\u0443\\u0433 \\u0432 \\u0434\\u0440\\u0443\\u0433\\u0430. \\u0420\\u0435\\u0436\\u0438\\u0441\\u0441\\u0435\\u0440: \\u0421\\u0430\\u043d\\u0434\\u0436\\u0430\\u0439 \\u0427\\u0445\\u0435\\u043b. \\u0410\\u043a\\u0442\\u0435\\u0440\\u044b: \\u0420\\u0438\\u0448\\u0438 \\u041a\\u0430\\u043f\\u0443\\u0440, \\u041f\\u0430\\u0440\\u0435\\u0448 \\u0420\\u0430\\u0432\\u0430\\u043b, \\u0412\\u0438\\u0440 \\u0414\\u0430\\u0441. 2017 \\u0433\\u043e\\u0434.\"}]` + const content = + '[{"id":2313254118,"channelId":260,"startTimestamp":"2021-11-22T07:00:00","endTimestamp":"2021-11-22T09:00:00","duration":null,"title":"\\u0425\\/\\u0444 \\"\\u041d\\u0435\\u0440\\u0430\\u0432\\u043d\\u044b\\u0439 \\u0431\\u0440\\u0430\\u043a\\".","subTitle":"\\u0425\\/\\u0444 \\"\\u041d\\u0435\\u0440\\u0430\\u0432\\u043d\\u044b\\u0439 \\u0431\\u0440\\u0430\\u043a\\".","info":"\\u0413\\u0443\\u0434\\u0436\\u0430\\u0440\\u0430\\u0442\\u0435\\u0446 \\u0425\\u0430\\u0441\\u043c\\u0443\\u043a\\u0445 \\u041f\\u0430\\u0442\\u0435\\u043b \\u043f\\u043e\\u0441\\u0441\\u043e\\u0440\\u0438\\u043b\\u0441\\u044f \\u0441 \\u043d\\u043e\\u0432\\u044b\\u043c \\u0441\\u043e\\u0441\\u0435\\u0434\\u043e\\u043c \\u0413\\u0443\\u0433\\u0433\\u0438 \\u0422\\u0430\\u043d\\u0434\\u043e\\u043d\\u043e\\u043c. \\u041d\\u043e \\u0438\\u043c \\u043f\\u0440\\u0438\\u0445\\u043e\\u0434\\u0438\\u0442\\u0441\\u044f \\u043f\\u043e\\u043c\\u0438\\u0440\\u0438\\u0442\\u044c\\u0441\\u044f, \\u043a\\u043e\\u0433\\u0434\\u0430 \\u0438\\u0445 \\u0434\\u0435\\u0442\\u0438 \\u0432\\u043b\\u044e\\u0431\\u043b\\u044f\\u044e\\u0442\\u0441\\u044f \\u0434\\u0440\\u0443\\u0433 \\u0432 \\u0434\\u0440\\u0443\\u0433\\u0430. \\u0420\\u0435\\u0436\\u0438\\u0441\\u0441\\u0435\\u0440: \\u0421\\u0430\\u043d\\u0434\\u0436\\u0430\\u0439 \\u0427\\u0445\\u0435\\u043b. \\u0410\\u043a\\u0442\\u0435\\u0440\\u044b: \\u0420\\u0438\\u0448\\u0438 \\u041a\\u0430\\u043f\\u0443\\u0440, \\u041f\\u0430\\u0440\\u0435\\u0448 \\u0420\\u0430\\u0432\\u0430\\u043b, \\u0412\\u0438\\u0440 \\u0414\\u0430\\u0441. 2017 \\u0433\\u043e\\u0434.","pg":null,"year":null,"country":null,"imageUrl":null,"createdBy":-200,"creationTimestamp":"2021-11-21T18:04:52","epgSourceId":8,"startDateStr":"20211122070000","genreByGenreId":null,"languageByLanguageId":{"id":3,"name":"\\u10e0\\u10e3\\u10e1\\u10e3\\u10da\\u10d8","orderIndex":3,"nameShort":"ru"},"externalId":"2021460000084132","programHumanById":[],"date":null,"time":null,"startDate":null,"endDate":null,"longInfo":"\\u0413\\u0443\\u0434\\u0436\\u0430\\u0440\\u0430\\u0442\\u0435\\u0446 \\u0425\\u0430\\u0441\\u043c\\u0443\\u043a\\u0445 \\u041f\\u0430\\u0442\\u0435\\u043b \\u043f\\u043e\\u0441\\u0441\\u043e\\u0440\\u0438\\u043b\\u0441\\u044f \\u0441 \\u043d\\u043e\\u0432\\u044b\\u043c \\u0441\\u043e\\u0441\\u0435\\u0434\\u043e\\u043c \\u0413\\u0443\\u0433\\u0433\\u0438 \\u0422\\u0430\\u043d\\u0434\\u043e\\u043d\\u043e\\u043c. \\u041d\\u043e \\u0438\\u043c \\u043f\\u0440\\u0438\\u0445\\u043e\\u0434\\u0438\\u0442\\u0441\\u044f \\u043f\\u043e\\u043c\\u0438\\u0440\\u0438\\u0442\\u044c\\u0441\\u044f, \\u043a\\u043e\\u0433\\u0434\\u0430 \\u0438\\u0445 \\u0434\\u0435\\u0442\\u0438 \\u0432\\u043b\\u044e\\u0431\\u043b\\u044f\\u044e\\u0442\\u0441\\u044f \\u0434\\u0440\\u0443\\u0433 \\u0432 \\u0434\\u0440\\u0443\\u0433\\u0430. \\u0420\\u0435\\u0436\\u0438\\u0441\\u0441\\u0435\\u0440: \\u0421\\u0430\\u043d\\u0434\\u0436\\u0430\\u0439 \\u0427\\u0445\\u0435\\u043b. \\u0410\\u043a\\u0442\\u0435\\u0440\\u044b: \\u0420\\u0438\\u0448\\u0438 \\u041a\\u0430\\u043f\\u0443\\u0440, \\u041f\\u0430\\u0440\\u0435\\u0448 \\u0420\\u0430\\u0432\\u0430\\u043b, \\u0412\\u0438\\u0440 \\u0414\\u0430\\u0441. 2017 \\u0433\\u043e\\u0434."}]' const result = parser({ content }).map(p => { p.start = p.start.toJSON() p.stop = p.stop.toJSON() @@ -48,8 +49,9 @@ it('can parse response', () => { { start: '2021-11-22T03:00:00.000Z', stop: '2021-11-22T05:00:00.000Z', - title: `Х/ф "Неравный брак".`, - description: `Гуджаратец Хасмукх Пател поссорился с новым соседом Гугги Тандоном. Но им приходится помириться, когда их дети влюбляются друг в друга. Режиссер: Санджай Чхел. Актеры: Риши Капур, Пареш Равал, Вир Дас. 2017 год.` + title: 'Х/ф "Неравный брак".', + description: + 'Гуджаратец Хасмукх Пател поссорился с новым соседом Гугги Тандоном. Но им приходится помириться, когда их дети влюбляются друг в друга. Режиссер: Санджай Чхел. Актеры: Риши Капур, Пареш Равал, Вир Дас. 2017 год.' } ]) }) @@ -58,7 +60,7 @@ it('can handle empty guide', () => { const result = parser({ date, channel, - content: `[]` + content: '[]' }) expect(result).toMatchObject([]) }) diff --git a/sites/mako.co.il/mako.co.il.channels.xml b/sites/mako.co.il/mako.co.il.channels.xml index fa1ac649..c64de9ca 100644 --- a/sites/mako.co.il/mako.co.il.channels.xml +++ b/sites/mako.co.il/mako.co.il.channels.xml @@ -1,6 +1,4 @@ - - - Keshet 12 - - + + Keshet 12 + diff --git a/sites/mako.co.il/mako.co.il.config.js b/sites/mako.co.il/mako.co.il.config.js index a0ee67ae..0466dfb6 100644 --- a/sites/mako.co.il/mako.co.il.config.js +++ b/sites/mako.co.il/mako.co.il.config.js @@ -36,12 +36,6 @@ function parseStart(item) { return dayjs(item.StartTimeUTC) } -function parseStop(item) { - if (!item.end_time) return null - - return dayjs.tz(item.end_time, 'YYYY-MM-DDTHH:mm:ss', 'Asia/Jerusalem') -} - function parseItems(content, date) { const data = JSON.parse(content) if (!data || !Array.isArray(data.programs)) return [] diff --git a/sites/mako.co.il/mako.co.il.test.js b/sites/mako.co.il/mako.co.il.test.js index 990cf29b..da82beca 100644 --- a/sites/mako.co.il/mako.co.il.test.js +++ b/sites/mako.co.il/mako.co.il.test.js @@ -1,4 +1,4 @@ -// npx epg-grabber --config=sites/mako.co.il/mako.co.il.config.js --channels=sites/mako.co.il/mako.co.il.channels.xml --output=guide.xml --days=2 +// npm run grab -- --site=mako.co.il const { parser, url } = require('./mako.co.il.config.js') const dayjs = require('dayjs') @@ -8,17 +8,14 @@ dayjs.extend(customParseFormat) dayjs.extend(utc) const date = dayjs.utc('2022-03-07', 'YYYY-MM-DD').startOf('d') -const channel = { - site_id: '#', - xmltv_id: 'Keshet12.il' -} it('can generate valid url', () => { expect(url).toBe('https://www.mako.co.il/AjaxPage?jspName=EPGResponse.jsp') }) it('can parse response', () => { - const content = `{"programs":[{"DisplayEndTime":"06:15","MakoTVURL":"","HouseNumber":"L17165475","StartTimeUTC":1646539200000,"DurationMs":900000,"DisplayStartTime":"06:00","MobilePicture":"https://img.mako.co.il/2017/01/01/placeHolder.jpg","StartTime":"06/03/2022 06:00:00","RerunBroadcast":false,"Duration":"00:15","ProgramName":"כותרות הבוקר","Date":"06/03/2022 06:00:00","MakoProgramsURL":"","LiveBroadcast":true,"ProgramCode":134987,"Episode":"","Picture":"https://img.mako.co.il//2021/08/04/hadshot_haboker_im_niv_raskin.jpg","MakoShortName":"","hebrewDate":"6 במרץ","Season":"","day":"הערב","EventDescription":"","EnglishName":"cotrot,EP 46"},{"DisplayEndTime":"02:39","MakoTVURL":"","HouseNumber":"A168960","StartTimeUTC":1646613480000,"DurationMs":60000,"DisplayStartTime":"02:38","MobilePicture":"https://img.mako.co.il/2017/01/01/placeHolder.jpg","StartTime":"07/03/2022 02:38:00","RerunBroadcast":true,"Duration":"00:01","ProgramName":"רוקדים עם כוכבים - בר זומר","Date":"07/03/2022 02:38:00","MakoProgramsURL":"","LiveBroadcast":false,"ProgramCode":135029,"Episode":"","Picture":"https://img.mako.co.il/2022/02/13/DancingWithStars2022_EPG.jpg","MakoShortName":"","hebrewDate":"7 במרץ","Season":"","day":"מחר","EventDescription":"מהדורת החדשות המרכזית של הבוקר, האנשים הפרשנויות והכותרות שיעשו את היום.","EnglishName":"rokdim,EP 10"}]}` + const content = + '{"programs":[{"DisplayEndTime":"06:15","MakoTVURL":"","HouseNumber":"L17165475","StartTimeUTC":1646539200000,"DurationMs":900000,"DisplayStartTime":"06:00","MobilePicture":"https://img.mako.co.il/2017/01/01/placeHolder.jpg","StartTime":"06/03/2022 06:00:00","RerunBroadcast":false,"Duration":"00:15","ProgramName":"כותרות הבוקר","Date":"06/03/2022 06:00:00","MakoProgramsURL":"","LiveBroadcast":true,"ProgramCode":134987,"Episode":"","Picture":"https://img.mako.co.il//2021/08/04/hadshot_haboker_im_niv_raskin.jpg","MakoShortName":"","hebrewDate":"6 במרץ","Season":"","day":"הערב","EventDescription":"","EnglishName":"cotrot,EP 46"},{"DisplayEndTime":"02:39","MakoTVURL":"","HouseNumber":"A168960","StartTimeUTC":1646613480000,"DurationMs":60000,"DisplayStartTime":"02:38","MobilePicture":"https://img.mako.co.il/2017/01/01/placeHolder.jpg","StartTime":"07/03/2022 02:38:00","RerunBroadcast":true,"Duration":"00:01","ProgramName":"רוקדים עם כוכבים - בר זומר","Date":"07/03/2022 02:38:00","MakoProgramsURL":"","LiveBroadcast":false,"ProgramCode":135029,"Episode":"","Picture":"https://img.mako.co.il/2022/02/13/DancingWithStars2022_EPG.jpg","MakoShortName":"","hebrewDate":"7 במרץ","Season":"","day":"מחר","EventDescription":"מהדורת החדשות המרכזית של הבוקר, האנשים הפרשנויות והכותרות שיעשו את היום.","EnglishName":"rokdim,EP 10"}]}' const result = parser({ content, date }).map(p => { p.start = p.start.toJSON() p.stop = p.stop.toJSON() @@ -38,7 +35,7 @@ it('can parse response', () => { it('can handle empty guide', () => { const result = parser({ - content: `[]`, + content: '[]', date }) expect(result).toMatchObject([]) diff --git a/sites/maxtv.hrvatskitelekom.hr/maxtv.hrvatskitelekom.hr.channels.xml b/sites/maxtv.hrvatskitelekom.hr/maxtv.hrvatskitelekom.hr.channels.xml index 869b0ab3..f1941e2e 100644 --- a/sites/maxtv.hrvatskitelekom.hr/maxtv.hrvatskitelekom.hr.channels.xml +++ b/sites/maxtv.hrvatskitelekom.hr/maxtv.hrvatskitelekom.hr.channels.xml @@ -1,165 +1,163 @@ - - - 24 Kitchen Hrvatska - 3sat - Aljazeera Balkans - Arena Sport 10 Hrvatska - Arena Sport 1 Hrvatska - Arena Sport 2 Hrvatska - Arena Sport 3 Hrvatska - Arena Sport 4 Hrvatska - Arena Sport 5 Hrvatska - Arena Sport 6 Hrvatska - Arena Sport 7 Hrvatska - Arena Sport 8 Hrvatska - Arena Sport 9 Hrvatska - Aurora TV - Baby TV Europe - Balkanika Music TV - BBC Earth Romania - BHT 1 - Blue Hustler Europe - Boomerang Central & Eastern Europe - Brazzers TV Europe - Cartoon Network Russia & South East Europe - CBS Reality Europe - CGTN - Cinemax 2 - Cinemax - CineStar TV 1 Hrvatska - CineStar TV Action Hrvatska - CineStar TV Fantasy - CineStar TV Premiere 1 - CineStar TV Premiere 2 - Club MTV - CMC TV - CNBC Europe - CNN International Europe - Crime & Investigation UK - Das Erste - Da Vinci - DM Sat - Doma Hrvatska - DW English - E! Europe - Epic Drama - EuroNews English - Extreme Sports Channel - FashionTV Europe - Federalna TV - Fox Crime Hrvatska - Fox Hrvatska - Fox Life Hrvatska - Fox Movies Hrvatska - France 24 English - France 24 Français - Grand - Happy - Hayat - HNTV - HRT 1 - HRT 2 - HRT 3 - HRT 4 - Hustler TV Europe - Jugoton TV - KIKA - Kino TV - Klasik TV - Kreator TV - Laudato TV - Lov i ribolov - Luxe TV - M1 Film - M1 Gold - María+Visión Medjugorje - Mediaset Italia - Mini TV - MTV 00s - MTV 80s - MTV Hits Europe - MyZen TV - N1 Hrvatska - Narodni - National Geographic - National Geographic Wild - Nautical Channel - Nickelodeon - Nick Jr - NickMusic - Nicktoons România - Nova TV - NTV Mir - OTV Valentino - Pickbox TV - Pikaboo - Pink BH - Pink Extra - Pink Fashion - Pink Film - Pink Folk 1 - Pink Koncert - Pink M - Pink Music - Pink Music 2 - Pink Plus - Pink TV - Pink World - Private TV - ProSieben Deutschland - Rai 1 - Rai 2 - Rai 3 - Rai Scuola - RTL 2 Hrvatska - RTL Crime Hrvatska - RTL Deutschland - RTL Hrvatska - RTL Kockica - RTL Living Hrvatska - RTL Passion Hrvatska - RTL Zwei Deutschland - RT News - RTS 1 - RTS 2 - RTS 3 - RTS Svet - Sat. 1 Deutschland - Sky News UK - Sport 1 - Sport Klub 1 Hrvatska - Sport Klub 2 Srbija - - - - - - - - Sportska TV - Stingray Classica - Stingray Djazz - Super RTL Deutschland - TRT World - TV 1000 Balkan - TV5Monde Europe - TVCG Sat - TVE Internacional Europa - TV Koper-Capodistria - TV Slovenija 1 - TV Slovenija 2 - Vavoom - Viasat Explore East - Viasat History - Viasat Nature East - Vivid Red - Vivid Touch - Vivid TV Europe - Vox Deutschland - Woman - Z1 - ZDF - Zdrava TV 7 Hrvatska - - + + + + + + + + + Das Erste + DW English + Sat. 1 Deutschland + Sport 1 + ZDF + Baby TV Europe + Balkanika Music TV + Blue Hustler Europe + Brazzers TV Europe + Cartoon Network Russia & South East Europe + CBS Reality Europe + CGTN + Club MTV + CNBC Europe + CNN International Europe + EuroNews English + Extreme Sports Channel + FashionTV Europe + France 24 English + Grand + Hustler TV Europe + MTV 00s + Nautical Channel + Sky News UK + Stingray Classica + Stingray Djazz + Vivid Red + Vivid Touch + Vivid TV Europe + France 24 Français + TV5Monde Europe + 24 Kitchen Hrvatska + 3sat + Aljazeera Balkans + Arena Sport 10 Hrvatska + Arena Sport 1 Hrvatska + Arena Sport 2 Hrvatska + Arena Sport 3 Hrvatska + Arena Sport 4 Hrvatska + Arena Sport 5 Hrvatska + Arena Sport 6 Hrvatska + Arena Sport 7 Hrvatska + Arena Sport 8 Hrvatska + Arena Sport 9 Hrvatska + Aurora TV + BBC Earth Romania + BHT 1 + Boomerang Central & Eastern Europe + Cinemax 2 + Cinemax + CineStar TV 1 Hrvatska + CineStar TV Action Hrvatska + CineStar TV Fantasy + CineStar TV Premiere 1 + CineStar TV Premiere 2 + CMC TV + Crime & Investigation UK + Da Vinci + DM Sat + Doma Hrvatska + E! Europe + Epic Drama + Federalna TV + Fox Crime Hrvatska + Fox Hrvatska + Fox Life Hrvatska + Fox Movies Hrvatska + Happy + Hayat + HNTV + HRT 1 + HRT 2 + HRT 3 + HRT 4 + Jugoton TV + KIKA + Kino TV + Klasik TV + Kreator TV + Laudato TV + Lov i ribolov + Luxe TV + M1 Film + M1 Gold + María+Visión Medjugorje + Mediaset Italia + Mini TV + MTV 80s + MTV Hits Europe + MyZen TV + N1 Hrvatska + Narodni + National Geographic + National Geographic Wild + Nickelodeon + Nick Jr + NickMusic + Nicktoons România + Nova TV + NTV Mir + OTV Valentino + Pickbox TV + Pikaboo + Pink BH + Pink Extra + Pink Fashion + Pink Film + Pink Folk 1 + Pink Koncert + Pink M + Pink Music + Pink Music 2 + Pink Plus + Pink TV + Pink World + Private TV + ProSieben Deutschland + RT News + RTL 2 Hrvatska + RTL Crime Hrvatska + RTL Hrvatska + RTL Deutschland + RTL Kockica + RTL Living Hrvatska + RTL Passion Hrvatska + RTL Zwei Deutschland + RTS 1 + RTS 2 + RTS 3 + RTS Svet + Sport Klub 1 Hrvatska + Sport Klub 2 Srbija + Sportska TV + Super RTL Deutschland + TRT World + TV 1000 Balkan + TVCG Sat + TVE Internacional Europa + TV Koper-Capodistria + TV Slovenija 1 + TV Slovenija 2 + Vavoom + Viasat Explore East + Viasat History + Viasat Nature East + Vox Deutschland + Woman + Z1 + Zdrava TV 7 Hrvatska + Rai 1 + Rai 2 + Rai 3 + Rai Scuola + diff --git a/sites/maxtv.hrvatskitelekom.hr/maxtv.hrvatskitelekom.hr.test.js b/sites/maxtv.hrvatskitelekom.hr/maxtv.hrvatskitelekom.hr.test.js index 16402b31..6388c9b7 100644 --- a/sites/maxtv.hrvatskitelekom.hr/maxtv.hrvatskitelekom.hr.test.js +++ b/sites/maxtv.hrvatskitelekom.hr/maxtv.hrvatskitelekom.hr.test.js @@ -1,4 +1,4 @@ -// npx epg-grabber --config=sites/maxtv.hrvatskitelekom.hr/maxtv.hrvatskitelekom.hr.config.js --channels=sites/maxtv.hrvatskitelekom.hr/maxtv.hrvatskitelekom.hr.channels.xml --output=guide.xml --days=2 +// npm run grab -- --site=maxtv.hrvatskitelekom.hr const { parser, url, request } = require('./maxtv.hrvatskitelekom.hr.config.js') const dayjs = require('dayjs') @@ -12,7 +12,8 @@ const channel = { site_id: '316', xmltv_id: '24KitchenCroatia.hr' } -const content = `{"status":{"code":200,"message":"OK","authType":"Unauthenticated","ottSessionToken":null},"data":[{"channelId":"316","title":"24Kitchen","logo":"http://ottepg5.nexttv.ht.hr:33200/EPG/jsp/images/universal/film/logo/fileEntity/20161109/000200/XTV100002173/493d03f8-0f08-4932-8371-e5b57d96f17d.png","chanNumber":500,"hasCatchup":false,"ottChannel":true,"userSubscribed":false,"shows":[{"showId":"-1","title":"Nema informacija","startTime":1636952400,"endTime":1636967400,"category":"ostalo","hasReminder":false,"hasRecording":false,"hasSeriesRecording":false,"userOttPlayable":false,"userLocked":false,"isPPV":false,"buyPrice":""},{"showId":"17298142","title":"Najčudniji svjetski restorani","startTime":1636952400,"endTime":1636952700,"category":"Kulinarski","hasReminder":false,"hasRecording":false,"hasSeriesRecording":false,"userOttPlayable":false,"userLocked":false,"isPPV":false,"buyPrice":""}]}]}` +const content = + '{"status":{"code":200,"message":"OK","authType":"Unauthenticated","ottSessionToken":null},"data":[{"channelId":"316","title":"24Kitchen","logo":"http://ottepg5.nexttv.ht.hr:33200/EPG/jsp/images/universal/film/logo/fileEntity/20161109/000200/XTV100002173/493d03f8-0f08-4932-8371-e5b57d96f17d.png","chanNumber":500,"hasCatchup":false,"ottChannel":true,"userSubscribed":false,"shows":[{"showId":"-1","title":"Nema informacija","startTime":1636952400,"endTime":1636967400,"category":"ostalo","hasReminder":false,"hasRecording":false,"hasSeriesRecording":false,"userOttPlayable":false,"userLocked":false,"isPPV":false,"buyPrice":""},{"showId":"17298142","title":"Najčudniji svjetski restorani","startTime":1636952400,"endTime":1636952700,"category":"Kulinarski","hasReminder":false,"hasRecording":false,"hasSeriesRecording":false,"userOttPlayable":false,"userLocked":false,"isPPV":false,"buyPrice":""}]}]}' it('can generate valid url', () => { expect(url).toBe('https://player.maxtvtogo.tportal.hr:8082/OTT4Proxy/proxy/epg/shows') @@ -47,7 +48,8 @@ it('can handle empty guide', () => { const result = parser({ date, channel, - content: `{"status":{"code":200,"message":"OK","authType":"Unauthenticated","ottSessionToken":null},"data":[]}` + content: + '{"status":{"code":200,"message":"OK","authType":"Unauthenticated","ottSessionToken":null},"data":[]}' }) expect(result).toMatchObject([]) }) diff --git a/sites/maxtvgo.mk/maxtvgo.mk.channels.xml b/sites/maxtvgo.mk/maxtvgo.mk.channels.xml index a01ce968..79bd7982 100644 --- a/sites/maxtvgo.mk/maxtvgo.mk.channels.xml +++ b/sites/maxtvgo.mk/maxtvgo.mk.channels.xml @@ -1,56 +1,54 @@ - - - Alfa TV - Aljazeera Balkans - Alsat-M - Arena Fight - Arena Premium 1 - Arena Premium 2 - Arena Premium 3 - Arena Sport 1 - Arena Sport 2 - Arena Sport 3 - Arena Sport 4 - Arena Sport 5 - Balkanika Music TV - Balkan Music TV - Da Vinci - DM Sat - Fox Crime - Fox Life - Fox Movies - Fox - Hayat Folk - Kanal 5 - Klan Macedonia - M1 Film - M1 Gold - Minimax Serbia - MRT 1 - MRT 2 - MRT 3 - MRT 4 - MRT 5 - MRT Sobraniski kanal - MTV 00s - MTV 80s - Nasa TV - National Geographic Channel HD - National Geographic Wild - Sitel TV - Telma - Tera TV - Tring Action - Tring Fantasy - TV 24 - TV 1000 Balkan - TV Edo - TV Iris - TV Shenja - TV Sonce - Viasat Explore - Viasat History HD - Viasat Nature - - \ No newline at end of file + + Alfa TV + Aljazeera Balkans + Alsat-M + Arena Fight + Arena Premium 1 + Arena Sport 1 + Arena Premium 2 + Arena Sport 2 + Arena Premium 3 + Arena Sport 3 + Arena Sport 4 + Arena Sport 5 + Balkanika Music TV + Balkan Music TV + Da Vinci + DM Sat + Fox Crime + Fox Life + Fox Movies + Fox + Hayat Folk + Kanal 5 + Klan Macedonia + M1 Film + M1 Gold + Minimax Serbia + MRT 1 + MRT 2 + MRT 3 + MRT 4 + MRT 5 + MRT Sobraniski kanal + MTV 00s + MTV 80s + Nasa TV + National Geographic Channel HD + National Geographic Wild + Sitel TV + Telma + Tera TV + Tring Action + Tring Fantasy + TV 1000 Balkan + TV 24 + TV Edo + TV Iris + TV Shenja + TV Sonce + Viasat Explore + Viasat History HD + Viasat Nature + \ No newline at end of file diff --git a/sites/maxtvgo.mk/maxtvgo.mk.config.js b/sites/maxtvgo.mk/maxtvgo.mk.config.js index 934d99fa..83991ae0 100644 --- a/sites/maxtvgo.mk/maxtvgo.mk.config.js +++ b/sites/maxtvgo.mk/maxtvgo.mk.config.js @@ -30,10 +30,10 @@ module.exports = { return programs }, - async channels({ country, lang }) { + async channels() { const channels = await axios .get( - `https://prd-static-mkt.spectar.tv/rev-1636968171/client_api.php/channel/all/application_id/deep_blue/device_configuration/2/instance_id/1/language/mk/http_proto/https/format/json` + 'https://prd-static-mkt.spectar.tv/rev-1636968171/client_api.php/channel/all/application_id/deep_blue/device_configuration/2/instance_id/1/language/mk/http_proto/https/format/json' ) .then(r => r.data) .catch(console.log) @@ -64,7 +64,7 @@ function parseIcon(item) { return item.icon['@attributes'].src } -function parseItems(content, channel) { +function parseItems(content) { const data = JSON.parse(content) if (!data || !Array.isArray(data.programme)) return [] diff --git a/sites/maxtvgo.mk/maxtvgo.mk.test.js b/sites/maxtvgo.mk/maxtvgo.mk.test.js index d0e227e7..18c7fa97 100644 --- a/sites/maxtvgo.mk/maxtvgo.mk.test.js +++ b/sites/maxtvgo.mk/maxtvgo.mk.test.js @@ -1,5 +1,5 @@ -// node ./scripts/channels.js --config=./sites/maxtvgo.mk/maxtvgo.mk.config.js --output=./sites/maxtvgo.mk/maxtvgo.mk.channels.xml -// npx epg-grabber --config=sites/maxtvgo.mk/maxtvgo.mk.config.js --channels=sites/maxtvgo.mk/maxtvgo.mk.channels.xml --output=guide.xml --days=2 +// npm run channels:parse -- --config=./sites/maxtvgo.mk/maxtvgo.mk.config.js --output=./sites/maxtvgo.mk/maxtvgo.mk.channels.xml +// npm run grab -- --site=maxtvgo.mk const { parser, url } = require('./maxtvgo.mk.config.js') const dayjs = require('dayjs') @@ -21,7 +21,8 @@ it('can generate valid url', () => { }) it('can parse response', () => { - const content = `{"programme":[{"@attributes":{"channel":"105","id":"21949063","start":"20211116231000 +0100","stop":"20211117010000 +0100","disable_catchup":"0","is_adult":"0"},"title":"Палмето - игран филм","original-title":{"@attributes":{"lang":""}},"sub-title":{"@attributes":{"lang":""}},"category_id":"11","category":"Останато","desc":"Екстремниот рибар, Џереми Вејд, е во потрага по слатководни риби кои јадат човечко месо. Со форензички методи, Џереми им илустрира на гледачите како овие нови чудовишта се создадени да убиваат.","icon":{"@attributes":{"src":"https:\/\/prd-static-mkt.spectar.tv\/rev-1636968170\/image_transform.php\/transform\/1\/epg_program_id\/21949063\/instance_id\/1"}},"episode_num":{},"date":"0","star-rating":{"value":{}},"rating":{"@attributes":{"system":""},"value":"0+"},"linear_channel_rating":"0+","genres":{},"credits":{}}]}` + const content = + '{"programme":[{"@attributes":{"channel":"105","id":"21949063","start":"20211116231000 +0100","stop":"20211117010000 +0100","disable_catchup":"0","is_adult":"0"},"title":"Палмето - игран филм","original-title":{"@attributes":{"lang":""}},"sub-title":{"@attributes":{"lang":""}},"category_id":"11","category":"Останато","desc":"Екстремниот рибар, Џереми Вејд, е во потрага по слатководни риби кои јадат човечко месо. Со форензички методи, Џереми им илустрира на гледачите како овие нови чудовишта се создадени да убиваат.","icon":{"@attributes":{"src":"https://prd-static-mkt.spectar.tv/rev-1636968170/image_transform.php/transform/1/epg_program_id/21949063/instance_id/1"}},"episode_num":{},"date":"0","star-rating":{"value":{}},"rating":{"@attributes":{"system":""},"value":"0+"},"linear_channel_rating":"0+","genres":{},"credits":{}}]}' const result = parser({ content }).map(p => { p.start = p.start.toJSON() p.stop = p.stop.toJSON() @@ -42,7 +43,8 @@ it('can parse response', () => { }) it('can parse response with no description', () => { - const content = `{"programme":[{"@attributes":{"channel":"105","id":"21949063","start":"20211116231000 +0100","stop":"20211117010000 +0100","disable_catchup":"0","is_adult":"0"},"title":"Палмето - игран филм","original-title":{"@attributes":{"lang":""}},"sub-title":{"@attributes":{"lang":""}},"category_id":"11","category":"Останато","desc":{},"icon":{"@attributes":{"src":"https:\/\/prd-static-mkt.spectar.tv\/rev-1636968170\/image_transform.php\/transform\/1\/epg_program_id\/21949063\/instance_id\/1"}},"episode_num":{},"date":"0","star-rating":{"value":{}},"rating":{"@attributes":{"system":""},"value":"0+"},"linear_channel_rating":"0+","genres":{},"credits":{}}]}` + const content = + '{"programme":[{"@attributes":{"channel":"105","id":"21949063","start":"20211116231000 +0100","stop":"20211117010000 +0100","disable_catchup":"0","is_adult":"0"},"title":"Палмето - игран филм","original-title":{"@attributes":{"lang":""}},"sub-title":{"@attributes":{"lang":""}},"category_id":"11","category":"Останато","desc":{},"icon":{"@attributes":{"src":"https://prd-static-mkt.spectar.tv/rev-1636968170/image_transform.php/transform/1/epg_program_id/21949063/instance_id/1"}},"episode_num":{},"date":"0","star-rating":{"value":{}},"rating":{"@attributes":{"system":""},"value":"0+"},"linear_channel_rating":"0+","genres":{},"credits":{}}]}' const result = parser({ content }).map(p => { p.start = p.start.toJSON() p.stop = p.stop.toJSON() @@ -65,7 +67,7 @@ it('can handle empty guide', () => { const result = parser({ date, channel, - content: `{"@attributes":{"source-info-name":"maxtvgo.mk","generator-info-name":"spectar_epg"}}` + content: '{"@attributes":{"source-info-name":"maxtvgo.mk","generator-info-name":"spectar_epg"}}' }) expect(result).toMatchObject([]) }) diff --git a/sites/mbc.net/mbc.net.channels.xml b/sites/mbc.net/mbc.net.channels.xml index 3d932ceb..59c83549 100644 --- a/sites/mbc.net/mbc.net.channels.xml +++ b/sites/mbc.net/mbc.net.channels.xml @@ -1,22 +1,20 @@ - - - MBC - MBC 2 - MBC 4 - MBC 5 - MBC Action - MBC Bollywood - MBC Drama - MBC Drama + - MBC Drama USA - MBC Iraq - MBC Maser - MBC Maser 2 - MBC Maser USA - MBC Max - MBC + Power - MBC USA - Wanasah - - \ No newline at end of file + + MBC + MBC USA + MBC 2 + MBC 4 + MBC 5 + MBC Action + MBC Bollywood + MBC Drama + MBC Drama USA + MBC Iraq + MBC Maser + MBC Maser 2 + MBC Maser USA + MBC Max + MBC Drama + + MBC + Power + Wanasah + \ No newline at end of file diff --git a/sites/mbc.net/mbc.net.config.js b/sites/mbc.net/mbc.net.config.js index f94d0e0a..b8ddf0ed 100644 --- a/sites/mbc.net/mbc.net.config.js +++ b/sites/mbc.net/mbc.net.config.js @@ -3,13 +3,12 @@ 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 .add(1, 'd') .valueOf()}&channel=${channel.site_id}` }, - parser: function ({ content, channel, date }) { + parser: function ({ content }) { let programs = [] const items = parseItems(content) items.forEach(item => { diff --git a/sites/mbc.net/mbc.net.test.js b/sites/mbc.net/mbc.net.test.js index 70b1dd65..554e61c0 100644 --- a/sites/mbc.net/mbc.net.test.js +++ b/sites/mbc.net/mbc.net.test.js @@ -1,4 +1,4 @@ -// npx epg-grabber --config=sites/mbc.net/mbc.net.config.js --channels=sites/mbc.net/mbc.net.channels.xml --output=guide.xml --days=2 +// npm run grab -- --site=mbc.net const { parser, url } = require('./mbc.net.config.js') const dayjs = require('dayjs') @@ -12,7 +12,8 @@ const channel = { site_id: 'mbc1', xmltv_id: 'MBC.ae' } -const content = `[{"id":3140240,"channelBCMId":"1","channelLabel":"MBC1","showPageTitle":"اختطاف","showPageGenreInArabic":" دراما","showPageAboutInArabic":".يستضيف برنامج تلفزيوني والدة لينا وشقيقتها، ولدى مشاهدتها الحلقة، تكتشف والدة ماجد الحقيقة، بينما تتعرض العنود لحادث سير مروع","startTime":1636155131000,"endTime":1636157806000,"startTimeInMilliseconds":1636155131000,"endTimeInMilliseconds":1636157806200,"premiereMode":"Fast Repeat","showingNow":false}]` +const content = + '[{"id":3140240,"channelBCMId":"1","channelLabel":"MBC1","showPageTitle":"اختطاف","showPageGenreInArabic":" دراما","showPageAboutInArabic":".يستضيف برنامج تلفزيوني والدة لينا وشقيقتها، ولدى مشاهدتها الحلقة، تكتشف والدة ماجد الحقيقة، بينما تتعرض العنود لحادث سير مروع","startTime":1636155131000,"endTime":1636157806000,"startTimeInMilliseconds":1636155131000,"endTimeInMilliseconds":1636157806200,"premiereMode":"Fast Repeat","showingNow":false}]' it('can generate valid url', () => { const result = url({ date, channel }) @@ -39,7 +40,7 @@ it('can handle empty guide', () => { const result = parser({ date, channel, - content: `[]` + content: '[]' }) expect(result).toMatchObject([]) }) diff --git a/sites/mediagenie.co.kr/mediagenie.co.kr.channels.xml b/sites/mediagenie.co.kr/mediagenie.co.kr.channels.xml index 8e439f16..8c92688c 100644 --- a/sites/mediagenie.co.kr/mediagenie.co.kr.channels.xml +++ b/sites/mediagenie.co.kr/mediagenie.co.kr.channels.xml @@ -1,10 +1,8 @@ - - - CHING - ENA DRAMA - ENA STORY - Healthmedi - ONT - - + + CHING + ENA DRAMA + ENA STORY + Healthmedi + ONT + diff --git a/sites/mediagenie.co.kr/mediagenie.co.kr.config.js b/sites/mediagenie.co.kr/mediagenie.co.kr.config.js index 9a4d545f..32f85cbe 100644 --- a/sites/mediagenie.co.kr/mediagenie.co.kr.config.js +++ b/sites/mediagenie.co.kr/mediagenie.co.kr.config.js @@ -11,7 +11,6 @@ dayjs.extend(customParseFormat) module.exports = { site: 'mediagenie.co.kr', days: 1, - skip: true, // NOTE: the guide appears on the site after the end of the daily update (https://github.com/iptv-org/epg/actions/workflows/mediagenie.co.kr.yml) url({ channel, date }) { return `https://mediagenie.co.kr/${channel.site_id}/?qd=${date.format('YYYYMMDD')}` }, @@ -22,11 +21,11 @@ module.exports = { }, parser({ content, date }) { const programs = [] - const items = parseItems(content, date) + const items = parseItems(content) items.forEach(item => { const $item = cheerio.load(item) const prev = programs[programs.length - 1] - const start = parseStart($item, date) + let start = parseStart($item, date) if (!start) return if (prev) { if (start.isBefore(prev.start)) { @@ -71,7 +70,7 @@ function parseStart($item, date) { return dayjs.tz(`${date.format('YYYY-MM-DD')} ${time}`, 'YYYY-MM-DD HH:mm', 'Asia/Seoul') } -function parseItems(content, channel, date) { +function parseItems(content) { const $ = cheerio.load(content) return $('.tbl > tbody > tr').toArray() diff --git a/sites/mediagenie.co.kr/mediagenie.co.kr.test.js b/sites/mediagenie.co.kr/mediagenie.co.kr.test.js index 595fff26..a50aa036 100644 --- a/sites/mediagenie.co.kr/mediagenie.co.kr.test.js +++ b/sites/mediagenie.co.kr/mediagenie.co.kr.test.js @@ -1,4 +1,4 @@ -// npx epg-grabber --config=sites/mediagenie.co.kr/mediagenie.co.kr.config.js --channels=sites/mediagenie.co.kr/mediagenie.co.kr.channels.xml --output=guide.xml --days=2 +// npm run grab -- --site=mediagenie.co.kr const { parser, url, request } = require('./mediagenie.co.kr.config.js') const fs = require('fs') @@ -37,7 +37,7 @@ it('can parse response', () => { expect(results[0]).toMatchObject({ start: '2023-01-24T15:20:00.000Z', stop: '2023-01-24T16:34:00.000Z', - title: `대행사`, + title: '대행사', rating: { system: 'KMRB', value: '15' @@ -47,7 +47,7 @@ it('can parse response', () => { expect(results[16]).toMatchObject({ start: '2023-01-25T14:27:00.000Z', stop: '2023-01-25T14:57:00.000Z', - title: `법쩐`, + title: '법쩐', rating: { system: 'KMRB', value: '15' diff --git a/sites/mediaklikk.hu/mediaklikk.hu.channels.xml b/sites/mediaklikk.hu/mediaklikk.hu.channels.xml index e45b2162..677d9f4a 100644 --- a/sites/mediaklikk.hu/mediaklikk.hu.channels.xml +++ b/sites/mediaklikk.hu/mediaklikk.hu.channels.xml @@ -1,13 +1,11 @@ - - - Duna - Duna World - M1 - M2 - M3 - M4 Sport - M4 Sport + - M5 - - \ No newline at end of file + + Duna + Duna World + M1 + M2 + M3 + M4 Sport + M4 Sport + + M5 + \ No newline at end of file diff --git a/sites/mediaklikk.hu/mediaklikk.hu.config.js b/sites/mediaklikk.hu/mediaklikk.hu.config.js index 7a024c15..c525911a 100644 --- a/sites/mediaklikk.hu/mediaklikk.hu.config.js +++ b/sites/mediaklikk.hu/mediaklikk.hu.config.js @@ -72,7 +72,7 @@ function parseDescription($item) { function parseIcon($item) { const backgroundImage = $item('.program_about > .program_photo').css('background-image') if (!backgroundImage) return null - const [_, icon] = backgroundImage.match(/url\(\'(.*)'\)/) || [null, null] + const [, icon] = backgroundImage.match(/url\('(.*)'\)/) || [null, null] if (!icon) return null return `https:${icon}` diff --git a/sites/mediaklikk.hu/mediaklikk.hu.test.js b/sites/mediaklikk.hu/mediaklikk.hu.test.js index ccc351a3..08b76e2c 100644 --- a/sites/mediaklikk.hu/mediaklikk.hu.test.js +++ b/sites/mediaklikk.hu/mediaklikk.hu.test.js @@ -1,4 +1,4 @@ -// npx epg-grabber --config=sites/mediaklikk.hu/mediaklikk.hu.config.js --channels=sites/mediaklikk.hu/mediaklikk.hu.channels.xml --output=guide.xml --days=2 +// npm run grab -- --site=mediaklikk.hu const { parser, url, request } = require('./mediaklikk.hu.config.js') const fs = require('fs') @@ -48,7 +48,7 @@ it('can parse response', () => { expect(results[0]).toMatchObject({ start: '2022-10-27T22:00:46.000Z', stop: '2022-10-27T22:54:00.000Z', - title: `A hegyi doktor - I. évad`, + title: 'A hegyi doktor - I. évad', description: 'Maxl iskolatársának, Vroninak az anyja egy autóbalesetben meghal. A 20 éves testvér, Vinzenz magához szeretné venni a lányt, ám a gyámüggyel problémái akadnak, ezért megpróbálja elszöktetni.(Eredeti hang digitálisan.)', icon: 'https://mediaklikk.hu/wp-content/uploads/sites/4/2019/10/A-hegyi-doktor-I-évad-e1571318391226-150x150.jpg' @@ -57,7 +57,7 @@ it('can parse response', () => { expect(results[56]).toMatchObject({ start: '2022-10-28T20:35:05.000Z', stop: '2022-10-28T21:05:05.000Z', - title: `Szemtől szemben (1967)`, + title: 'Szemtől szemben (1967)', description: 'Brad Fletcher bostoni történelemtanár, aki a délnyugati határvidéken kúrálja tüdőbetegségét, egy véletlen folytán összeakad Beauregard Bennett körözött útonállóval, akit végül maga segít a menekülésben. A tanárt lenyűgözi a törvényen kívüliek világa és felismeri, hogy értelmi felsőbbrendűségével bámulatosan tudja irányítani az embereket. Bennett csakhamar azt veszi észre, hogy a peremre szorult saját bandájában. Eközben a Pinkerton ügynökség beépített embere is csapdába igyekszik csalni mindnyájukat.' }) @@ -67,7 +67,7 @@ it('can handle empty guide', () => { const result = parser({ date, channel, - content: `` + content: '' }) expect(result).toMatchObject([]) }) diff --git a/sites/mediaset.it/mediaset.it.channels.xml b/sites/mediaset.it/mediaset.it.channels.xml index 0c3fb35d..5a3e9783 100644 --- a/sites/mediaset.it/mediaset.it.channels.xml +++ b/sites/mediaset.it/mediaset.it.channels.xml @@ -1,20 +1,18 @@ - - - 20 Mediaset - Boing Italia - Canale 5 - Cartoonito Italia - Focus - Iris - Italia 1 - Italia 2 - La 5 - Mediaset Extra - Premium Action - Premium Crime - Rete 4 - TGCom 24 - Top Crime - - \ No newline at end of file + + 20 Mediaset + Boing Italia + Canale 5 + Cartoonito Italia + Focus + Iris + Italia 1 + Italia 2 + La 5 + Mediaset Extra + Premium Action + Premium Crime + Rete 4 + TGCom 24 + Top Crime + \ No newline at end of file diff --git a/sites/melita.com/melita.com.channels.xml b/sites/melita.com/melita.com.channels.xml index a99e43c3..d147c8ef 100644 --- a/sites/melita.com/melita.com.channels.xml +++ b/sites/melita.com/melita.com.channels.xml @@ -1,123 +1,121 @@ - - - Al Jazeera Arabic - Al Jazeera English - Animal Planet HD - Baby TV - BBC Earth HD - BBC Entertainment - BBC World News HD - Bloomberg - Boing - Boomerang - Caccia e Pesca - Canale 5 HD - Canale Italia - Cartoonito - Cartoon Network - CBeeBies HD - CBS Reality - CGTN - Channel One Russia - Cielo - TV Moda - Club MTV - C Music TV - CNBC - CNN International - Crime + Investigation - Daystar Network HD - Discovery HD - Discovery Channel - Discovery Science - Disney Channel - Disney Junior - Dubai One - Duck TV - Deutsche Welle HD - E! Entertainment HD - Euronews HD - Eurosport HD - Eurosport 2 - EWTN - Extreme Sports - FTV HD - f Living - Food Network HD - FOX HD - FOX LIFE HD - France 2 HD - France 24 in English - France 24 in French - Ginx TV - GOD TV - GREAT! Movies Action - HGTV HD - HISTORY HD - ID HD - Iris - Italia 1 HD - Italia 2 - ITV Shopping - JimJam - La 5 - LBC Europe - Luxe TV HD - Mediaset Extra - Mediaset Italia - Melita More - Mezzo HD - MTV 00s - MTV 80s - MTV 90s - MTV - MTV Hits - MTV Live HD - National Geographic HD - Nat Geo Wild HD - NET HD - Nickelodeon HD - Nick Junior Global - ONE HD - Parliament Channel - Rai Uno - Rai Due - Rai Tre - Rai News - Rai Scuola - Rai Storia - Rete 4 HD - Russia Today - Radio TV - RTL - RTL II - RTR Planeta - Sky News HD - Smash TV - iConcerts HD - TGCOM 24 - TLC - Top Crime - TRACE Urban HD - Travel HD - TRT Turk - TRT World HD - TSN1 - TSN2 - TSN3 - TSN4 - TSN5 - TSN6 - TSN7 - TSN8 - TV 2000 - TV5 Monde - TVM HD - TVMNEWS+ - Xejk - TVE Internacional - BVN Europa - - - + + + RTL + RTL II + Al Jazeera Arabic + Al Jazeera English + Animal Planet HD + Baby TV + BBC Earth HD + BBC Entertainment + BBC World News HD + Bloomberg + Boomerang + Cartoonito + Cartoon Network + CBeeBies HD + CBS Reality + CGTN + Channel One Russia + Club MTV + C Music TV + CNBC + CNN International + Crime + Investigation + Daystar Network HD + Discovery HD + Discovery Channel + Discovery Science + Disney Channel + Disney Junior + Dubai One + Duck TV + Deutsche Welle HD + E! Entertainment HD + Euronews HD + Eurosport HD + Eurosport 2 + EWTN + Extreme Sports + FTV HD + f Living + Food Network HD + FOX HD + FOX LIFE HD + France 24 in English + Ginx TV + GOD TV + GREAT! Movies Action + HGTV HD + HISTORY HD + ID HD + Iris + ITV Shopping + JimJam + LBC Europe + Luxe TV HD + Melita More + MTV 00s + MTV 80s + MTV 90s + MTV + MTV Hits + MTV Live HD + National Geographic HD + Nat Geo Wild HD + NET HD + Nickelodeon HD + Nick Junior Global + ONE HD + Parliament Channel + Russia Today + RTR Planeta + Sky News HD + Smash TV + iConcerts HD + TLC + TRACE Urban HD + Travel HD + TSN1 + TSN2 + TSN3 + TSN4 + TSN5 + TSN6 + TSN7 + TSN8 + TVE Internacional + France 2 HD + France 24 in French + Mezzo HD + TV5 Monde + Boing + Caccia e Pesca + Canale 5 HD + Canale Italia + Cielo + TV Moda + Italia 1 HD + Italia 2 + La 5 + Mediaset Extra + Mediaset Italia + Rai Uno + Rai Due + Rai Tre + Rai News + Rai Scuola + Rai Storia + Rete 4 HD + Radio TV + TGCOM 24 + Top Crime + TV 2000 + TVM HD + TVMNEWS+ + Xejk + BVN Europa + TRT Turk + TRT World HD + diff --git a/sites/melita.com/melita.com.test.js b/sites/melita.com/melita.com.test.js index db358f97..3fa48f75 100644 --- a/sites/melita.com/melita.com.test.js +++ b/sites/melita.com/melita.com.test.js @@ -1,5 +1,5 @@ // npm run channels:parse -- --config=./sites/melita.com/melita.com.config.js --output=./sites/melita.com/melita.com.channels.xml -// npx epg-grabber --config=sites/melita.com/melita.com.config.js --channels=sites/melita.com/melita.com.channels.xml --output=guide.xml --days=2 +// npm run grab -- --site=melita.com const { parser, url } = require('./melita.com.config.js') const dayjs = require('dayjs') @@ -21,7 +21,8 @@ it('can generate valid url', () => { }) it('can parse response', () => { - const content = `{"schedules":[{"id":"138dabff-131a-42a0-9373-203545933dd0","published":{"start":"2022-04-20T06:25:00Z","end":"2022-04-20T06:45:00Z"},"program":"ae52299a-3c99-4d34-9932-e21d383f9800","live":false,"blackouts":[]}],"programs":[{"id":"ae52299a-3c99-4d34-9932-e21d383f9800","title":"How I Met Your Mother","shortSynopsis":"Symphony of Illumination - Robin gets some bad news and decides to keep it to herself. Marshall decorates the house.","posterImage":"https://androme.melitacable.com/media/images/epg/bc/07/p8953134_e_h10_ad.jpg","episode":12,"episodeTitle":"Symphony of Illumination","season":"fdd6e42c-97f9-4d7a-aaca-78b53378f960","genres":["3.5.7.3"],"tags":["comedy"],"adult":false}],"seasons":[{"id":"fdd6e42c-97f9-4d7a-aaca-78b53378f960","title":"How I Met Your Mother","adult":false,"season":7,"series":"858c535a-abbb-451b-807a-94196997ea2d"}],"series":[{"id":"858c535a-abbb-451b-807a-94196997ea2d","title":"How I Met Your Mother","adult":false}]}` + const content = + '{"schedules":[{"id":"138dabff-131a-42a0-9373-203545933dd0","published":{"start":"2022-04-20T06:25:00Z","end":"2022-04-20T06:45:00Z"},"program":"ae52299a-3c99-4d34-9932-e21d383f9800","live":false,"blackouts":[]}],"programs":[{"id":"ae52299a-3c99-4d34-9932-e21d383f9800","title":"How I Met Your Mother","shortSynopsis":"Symphony of Illumination - Robin gets some bad news and decides to keep it to herself. Marshall decorates the house.","posterImage":"https://androme.melitacable.com/media/images/epg/bc/07/p8953134_e_h10_ad.jpg","episode":12,"episodeTitle":"Symphony of Illumination","season":"fdd6e42c-97f9-4d7a-aaca-78b53378f960","genres":["3.5.7.3"],"tags":["comedy"],"adult":false}],"seasons":[{"id":"fdd6e42c-97f9-4d7a-aaca-78b53378f960","title":"How I Met Your Mother","adult":false,"season":7,"series":"858c535a-abbb-451b-807a-94196997ea2d"}],"series":[{"id":"858c535a-abbb-451b-807a-94196997ea2d","title":"How I Met Your Mother","adult":false}]}' const result = parser({ content }).map(p => { p.start = p.start.toJSON() p.stop = p.stop.toJSON() @@ -45,7 +46,7 @@ it('can parse response', () => { it('can handle empty guide', () => { const result = parser({ - content: `{}` + content: '{}' }) expect(result).toMatchObject([]) }) diff --git a/sites/meo.pt/meo.pt.channels.xml b/sites/meo.pt/meo.pt.channels.xml index e469d7c9..56de7099 100644 --- a/sites/meo.pt/meo.pt.channels.xml +++ b/sites/meo.pt/meo.pt.channels.xml @@ -1,206 +1,204 @@ - - - 24 Kitchen - 3sat - A Bola TV - ADVNCE - Afro Music Channel - Aljazeera English - Alma Lusa - AMC - Antena 3 Internacional - ARTE Français - AR TV Canal Parlamento - Atrecine - Atreseries - AXN Movies - AXN - AXN White - Baby TV - BBC Entertainment - Benfica TV - BFM Business - BFM TV - Biggs - Blaze - Bloomberg TV - BNT 4 - Body Sex HD - Bom Som TV - Boomerang - BVN - Caçavision - Canal 11 - Canal 24 Horas - Canal Cocina - Canal Hollywood - Canal Panda - Canal Q - Canal Um Europa - Cartoon Network - Caza y Pesca - CBS Reality - CCTV 4 Europe - CGTN - CGTN Documentary - Perviy kanal - Cine Mundo - Clubbing TV - CM TV - CNBC Europe - CNN - CNN Portugal - Cubavisión Internacional - Das Erste - Decasa - Discovery Channel - Disney Channel - Disney Junior - Dizi - Dog TV - DW Deutsch - DW English - E! - Eleven 1 - Eleven 2 - Eleven 3 - Eleven 4 - Eleven 5 - Eleven 6 - EuroNews English - EuroNews Deutsch - EuroNews - Eurosport 1 - Eurosport 2 - FashionTV - Fight Sports - Fox Comedy - Fox Crime - Fox Life - Fox Movies - Fox - France 2 - France 24 English - France 24 Français - France 3 - France 5 - Fuel TV - Galicia TV - Gametoon - Globo News - História - Hot Man - Hot Taboo - Hot - I24 News English - I24 News Français - Inter + - JimJam - KBS World - KIKA - Kuriakos TV - LocalVisão TV - Lolly Kids - Más Chic - MCM Pop - MCM Top - Mezzo - Mezzo Live HD - MTV 00s - MTV Live HD - MTV - National Geographic - National Geographic Wild - NBA TV - NHK World Japan - Nickelodeon - Odisseia - Panda Kids - Penthouse Gold - PFC - Phoenix CNE - Playboy TV - Porto Canal - Pro TV - Rai 1 - Rai 2 - Rai 3 - Rai News 24 - Rai Scuola - Rai Storia - Record News - Record TV - Rede Globo - RT News - RTP 1 - RTP 2 - RTP 3 - RTP Açores - RTP África - RTP Madeira - RTP Memória - Rybalka Telekanal - Sextreme - SIC - SIC Caras - SIC K - SIC Mulher - SIC Notícias - SIC Radical - Sky News - Sol Música - Somos - SET Asia - Sony Max UK - S+ - Sporting TV - Sport TV 1 - Sport TV 2 - Sport TV 3 - Sport TV 4 - Sport TV 5 - Sport TV 6 - Sport TV + - Star Cinema - Star Family - Stingray Classica - Stingray Djazz - Stingray IConcerts - Stingray Loud - Stingray Retro - Syfy - TCV - Telesur - TLC - Toros TV - TPA - Trace Brazuca - Trace Toca - Trace Urban - TRT World - TV 2 - TV5Monde Europe - TV Canção Nova - TVCine Action - TVCine Edition - TVCine Emotion - TVCine Top - TVE Internacional - TVI - TVI 24 - TVI Ficção - TVI Reality - TV Verdade - Ukraïna 24 - Ukraine 1 - Ukraine 2 - Venus - Vivid Red - X Sport - ZDF - ZDFNEO - Zee Cinema - Zee TV - - + + EuroNews Deutsch + France 24 English + KBS World + MTV 00s + MTV Live HD + NHK World Japan + Sky News + TPA + TRT World + 24 Kitchen + 3sat + A Bola TV + ADVNCE + Afro Music Channel + Aljazeera English + Alma Lusa + AMC + Antena 3 Internacional + ARTE Français + AR TV Canal Parlamento + Atrecine + Atreseries + AXN Movies + AXN + AXN White + Baby TV + BBC Entertainment + Benfica TV + BFM Business + BFM TV + Biggs + Blaze + Bloomberg TV + BNT 4 + Body Sex HD + Bom Som TV + Boomerang + BVN + Caçavision + Canal 11 + Canal 24 Horas + Canal Cocina + Canal Hollywood + Canal Panda + Canal Q + Canal Um Europa + Cartoon Network + Caza y Pesca + CBS Reality + CCTV 4 Europe + CGTN + CGTN Documentary + Perviy kanal + Cine Mundo + Clubbing TV + CM TV + CNBC Europe + CNN + CNN Portugal + Cubavisión Internacional + Das Erste + Decasa + Discovery Channel + Disney Channel + Disney Junior + Dizi + Dog TV + DW Deutsch + DW English + E! + Eleven 1 + Eleven 2 + Eleven 3 + Eleven 4 + Eleven 5 + Eleven 6 + EuroNews English + EuroNews + Eurosport 1 + Eurosport 2 + FashionTV + Fight Sports + Fox Comedy + Fox Crime + Fox Life + Fox Movies + Fox + France 2 + France 24 Français + France 3 + France 5 + Fuel TV + Galicia TV + Gametoon + Globo News + História + Hot Man + Hot Taboo + Hot + I24 News English + I24 News Français + Inter + + JimJam + KIKA + Kuriakos TV + LocalVisão TV + Lolly Kids + Más Chic + MCM Pop + MCM Top + Mezzo + Mezzo Live HD + MTV + National Geographic + National Geographic Wild + NBA TV + Nickelodeon + Odisseia + Panda Kids + Penthouse Gold + PFC + Phoenix CNE + Playboy TV + Porto Canal + Pro TV + Rai 1 + Rai 2 + Rai 3 + Rai News 24 + Rai Scuola + Rai Storia + Record News + Record TV + Rede Globo + RT News + RTP 1 + RTP 2 + RTP 3 + RTP Açores + RTP África + RTP Madeira + RTP Memória + Rybalka Telekanal + Sextreme + SIC + SIC Caras + SIC K + SIC Mulher + SIC Notícias + SIC Radical + Sol Música + Somos + SET Asia + Sony Max UK + S+ + Sporting TV + Sport TV 1 + Sport TV 2 + Sport TV 3 + Sport TV 4 + Sport TV 5 + Sport TV 6 + Sport TV + + Star Cinema + Star Family + Stingray Classica + Stingray Djazz + Stingray IConcerts + Stingray Loud + Stingray Retro + Syfy + TCV + Telesur + TLC + Toros TV + Trace Brazuca + Trace Toca + Trace Urban + TV 2 + TV5Monde Europe + TV Canção Nova + TVCine Action + TVCine Edition + TVCine Emotion + TVCine Top + TVE Internacional + TVI + TVI 24 + TVI Ficção + TVI Reality + TV Verdade + Ukraïna 24 + Ukraine 1 + Ukraine 2 + Venus + Vivid Red + X Sport + ZDF + ZDFNEO + Zee Cinema + Zee TV + diff --git a/sites/meo.pt/meo.pt.config.js b/sites/meo.pt/meo.pt.config.js index c899d3a4..baa87c55 100644 --- a/sites/meo.pt/meo.pt.config.js +++ b/sites/meo.pt/meo.pt.config.js @@ -3,7 +3,7 @@ const { DateTime } = require('luxon') module.exports = { site: 'meo.pt', days: 2, - url: `https://authservice.apps.meo.pt/Services/GridTv/GridTvMng.svc/getProgramsFromChannels`, + url: 'https://authservice.apps.meo.pt/Services/GridTv/GridTvMng.svc/getProgramsFromChannels', request: { method: 'POST', headers: { diff --git a/sites/meo.pt/meo.pt.test.js b/sites/meo.pt/meo.pt.test.js index e80f27ac..e4fe3ccb 100644 --- a/sites/meo.pt/meo.pt.test.js +++ b/sites/meo.pt/meo.pt.test.js @@ -1,4 +1,4 @@ -// npx epg-grabber --config=sites/meo.pt/meo.pt.config.js --channels=sites/meo.pt/meo.pt.channels.xml --output=guide.xml +// npm run grab -- --site=meo.pt const { parser, url, request } = require('./meo.pt.config.js') const fs = require('fs') diff --git a/sites/mewatch.sg/mewatch.sg.channels.xml b/sites/mewatch.sg/mewatch.sg.channels.xml index a2883a8d..0db4e147 100644 --- a/sites/mewatch.sg/mewatch.sg.channels.xml +++ b/sites/mewatch.sg/mewatch.sg.channels.xml @@ -1,22 +1,20 @@ - - - Channel 5 - Channel 8 - Channel U - Suria - Vasantham - CNA - oktolidays - eGG Network - Animax - GEM - HBO - HBO Hits - HBO Family - HBO Signature - Cinemax - LIVE 1 - LIVE 2 - - + + Animax + Channel 5 + Channel 8 + Channel U + Cinemax + CNA + eGG Network + GEM + HBO + HBO Family + HBO Hits + HBO Signature + LIVE 1 + LIVE 2 + oktolidays + Suria + Vasantham + diff --git a/sites/mewatch.sg/mewatch.sg.config.js b/sites/mewatch.sg/mewatch.sg.config.js index a8dc1363..baf58b9a 100644 --- a/sites/mewatch.sg/mewatch.sg.config.js +++ b/sites/mewatch.sg/mewatch.sg.config.js @@ -40,7 +40,7 @@ function parseStop(item) { function parseRating(info) { const classification = info.classification if (classification && classification.code) { - const [_, system, value] = classification.code.match(/^([A-Z]+)\-([A-Z0-9]+)/) || [ + const [, system, value] = classification.code.match(/^([A-Z]+)-([A-Z0-9]+)/) || [ null, null, null diff --git a/sites/mewatch.sg/mewatch.sg.test.js b/sites/mewatch.sg/mewatch.sg.test.js index e7c92a9f..ca944c90 100644 --- a/sites/mewatch.sg/mewatch.sg.test.js +++ b/sites/mewatch.sg/mewatch.sg.test.js @@ -1,4 +1,4 @@ -// npx epg-grabber --config=sites/mewatch.sg/mewatch.sg.config.js --channels=sites/mewatch.sg/mewatch.sg.channels.xml --output=guide.xml --days=2 +// npm run grab -- --site=mewatch.sg const { parser, url } = require('./mewatch.sg.config.js') const dayjs = require('dayjs') @@ -20,7 +20,8 @@ it('can generate valid url', () => { }) it('can parse response', () => { - const content = `[{"channelId":"97098","startDate":"2022-06-11T21:00:00.000Z","endDate":"2022-06-12T21:00:00.000Z","schedules":[{"channelId":"97098","customId":"37040748","endDate":"2022-06-11T21:30:00Z","id":"788a7dd","live":false,"startDate":"2022-06-11T21:00:00Z","isGap":false,"InteractiveType":"0","item":{"type":"episode","title":"Open Homes S3 - EP 2","blackoutMessage":"Programme is not available for live streaming.","description":"Mike heads down to the Sydney beaches to visit a beachside renovation with all the bells and whistles, we see a kitchen tip and recipe anyone can do at home. We finish up in the prestigious Byron bay to visit a multi million dollar award winning home.","classification":{"code":"IMDA-G (Violence)","name":"G (Violence)"},"episodeNumber":2,"episodeTitle":"Collaroy, Sydney","seasonNumber":3,"images":{"wallpaper":"https://production.togglestatic.com/shain/v1/dataservice/ResizeImage/$value?Format='jpg'&Quality=85&ImageId='4853691'&EntityType='LinearSchedule'&EntityId='788a7dd9-9b12-446f-91b4-c8ac9fec95e5'&Width=1280&Height=720&device=web_browser&subscriptions=Anonymous&segmentationTags=all","tile":"https://production.togglestatic.com/shain/v1/dataservice/ResizeImage/$value?Format='jpg'&Quality=85&ImageId='4853697'&EntityType='LinearSchedule'&EntityId='788a7dd9-9b12-446f-91b4-c8ac9fec95e5'&Width=1280&Height=720&device=web_browser&subscriptions=Anonymous&segmentationTags=all"},"enableCatchUp":true,"enableStartOver":false,"enableSeeking":false,"programSource":"ACQUIRED","simulcast":"LOCAL","masterReferenceKey":"0CH50CH5A0105567800020A0000000000P3254400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"}}]}]` + const content = + '[{"channelId":"97098","startDate":"2022-06-11T21:00:00.000Z","endDate":"2022-06-12T21:00:00.000Z","schedules":[{"channelId":"97098","customId":"37040748","endDate":"2022-06-11T21:30:00Z","id":"788a7dd","live":false,"startDate":"2022-06-11T21:00:00Z","isGap":false,"InteractiveType":"0","item":{"type":"episode","title":"Open Homes S3 - EP 2","blackoutMessage":"Programme is not available for live streaming.","description":"Mike heads down to the Sydney beaches to visit a beachside renovation with all the bells and whistles, we see a kitchen tip and recipe anyone can do at home. We finish up in the prestigious Byron bay to visit a multi million dollar award winning home.","classification":{"code":"IMDA-G (Violence)","name":"G (Violence)"},"episodeNumber":2,"episodeTitle":"Collaroy, Sydney","seasonNumber":3,"images":{"wallpaper":"https://production.togglestatic.com/shain/v1/dataservice/ResizeImage/$value?Format=\'jpg\'&Quality=85&ImageId=\'4853691\'&EntityType=\'LinearSchedule\'&EntityId=\'788a7dd9-9b12-446f-91b4-c8ac9fec95e5\'&Width=1280&Height=720&device=web_browser&subscriptions=Anonymous&segmentationTags=all","tile":"https://production.togglestatic.com/shain/v1/dataservice/ResizeImage/$value?Format=\'jpg\'&Quality=85&ImageId=\'4853697\'&EntityType=\'LinearSchedule\'&EntityId=\'788a7dd9-9b12-446f-91b4-c8ac9fec95e5\'&Width=1280&Height=720&device=web_browser&subscriptions=Anonymous&segmentationTags=all"},"enableCatchUp":true,"enableStartOver":false,"enableSeeking":false,"programSource":"ACQUIRED","simulcast":"LOCAL","masterReferenceKey":"0CH50CH5A0105567800020A0000000000P3254400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"}}]}]' const result = parser({ content, channel }).map(p => { p.start = p.start.toJSON() p.stop = p.stop.toJSON() @@ -34,7 +35,7 @@ it('can parse response', () => { title: 'Open Homes S3 - EP 2', description: 'Mike heads down to the Sydney beaches to visit a beachside renovation with all the bells and whistles, we see a kitchen tip and recipe anyone can do at home. We finish up in the prestigious Byron bay to visit a multi million dollar award winning home.', - icon: `https://production.togglestatic.com/shain/v1/dataservice/ResizeImage/$value?Format='jpg'&Quality=85&ImageId='4853697'&EntityType='LinearSchedule'&EntityId='788a7dd9-9b12-446f-91b4-c8ac9fec95e5'&Width=1280&Height=720&device=web_browser&subscriptions=Anonymous&segmentationTags=all`, + icon: "https://production.togglestatic.com/shain/v1/dataservice/ResizeImage/$value?Format='jpg'&Quality=85&ImageId='4853697'&EntityType='LinearSchedule'&EntityId='788a7dd9-9b12-446f-91b4-c8ac9fec95e5'&Width=1280&Height=720&device=web_browser&subscriptions=Anonymous&segmentationTags=all", episode: 2, season: 3, rating: { @@ -47,7 +48,8 @@ it('can parse response', () => { it('can handle empty guide', () => { const result = parser({ - content: `[{"channelId":"9798","startDate":"2022-06-11T21:00:00.000Z","endDate":"2022-06-12T21:00:00.000Z","schedules":[]}]`, + content: + '[{"channelId":"9798","startDate":"2022-06-11T21:00:00.000Z","endDate":"2022-06-12T21:00:00.000Z","schedules":[]}]', channel }) expect(result).toMatchObject([]) diff --git a/sites/mi.tv/mi.tv.config.js b/sites/mi.tv/mi.tv.config.js index 6de2b808..946d10e1 100644 --- a/sites/mi.tv/mi.tv.config.js +++ b/sites/mi.tv/mi.tv.config.js @@ -66,7 +66,7 @@ function parseDescription($item) { function parseIcon($item) { const backgroundImage = $item('a > div.image-parent > div.image').css('background-image') - const [_, icon] = backgroundImage.match(/url\(\'(.*)'\)/) || [null, null] + const [, icon] = backgroundImage.match(/url\('(.*)'\)/) || [null, null] return icon } diff --git a/sites/mi.tv/mi.tv.test.js b/sites/mi.tv/mi.tv.test.js index bed90649..5a4a1be0 100644 --- a/sites/mi.tv/mi.tv.test.js +++ b/sites/mi.tv/mi.tv.test.js @@ -1,4 +1,4 @@ -// npx epg-grabber --config=sites/mi.tv/mi.tv.config.js --channels=sites/mi.tv/mi.tv_ar.channels.xml --output=guide.xml --days=2 +// npm run grab -- --site=mi.tv const { parser, url } = require('./mi.tv.config.js') const dayjs = require('dayjs') @@ -12,7 +12,8 @@ const channel = { site_id: 'ar#24-7-canal-de-noticias', xmltv_id: '247CanaldeNoticias.ar' } -const content = ` Programación 24/7 Canal de Noticias Miércoles 24 de noviembre 03:00 Trasnoche de 24/7 Interés general Lo más visto de la semana en nuestra pantalla. 23:00 Noticiero central - Segunda edición Noticiero Cerramos el día con un completo resumen de los temas más relevantes con columnistas y análisis especiales para terminar el día. 01:00 Plus energético Cultural La energía tiene mucho para mostrar. Este programa reúne a las principales empresas y protagonistas de la actividad que esta revolucionando la región. ` +const content = + ' Programación 24/7 Canal de Noticias Miércoles 24 de noviembre 03:00 Trasnoche de 24/7 Interés general Lo más visto de la semana en nuestra pantalla. 23:00 Noticiero central - Segunda edición Noticiero Cerramos el día con un completo resumen de los temas más relevantes con columnistas y análisis especiales para terminar el día. 01:00 Plus energético Cultural La energía tiene mucho para mostrar. Este programa reúne a las principales empresas y protagonistas de la actividad que esta revolucionando la región. ' it('can generate valid url', () => { expect(url({ channel, date })).toBe( @@ -31,7 +32,7 @@ it('can parse response', () => { { start: '2021-11-24T03:00:00.000Z', stop: '2021-11-24T23:00:00.000Z', - title: `Trasnoche de 24/7`, + title: 'Trasnoche de 24/7', category: 'Interés general', description: 'Lo más visto de la semana en nuestra pantalla.', icon: 'https://cdn.mitvstatic.com/programs/fallback_other_l_m.jpg' @@ -39,17 +40,19 @@ it('can parse response', () => { { start: '2021-11-24T23:00:00.000Z', stop: '2021-11-25T01:00:00.000Z', - title: `Noticiero central - Segunda edición`, + title: 'Noticiero central - Segunda edición', category: 'Noticiero', - description: `Cerramos el día con un completo resumen de los temas más relevantes con columnistas y análisis especiales para terminar el día.`, + description: + 'Cerramos el día con un completo resumen de los temas más relevantes con columnistas y análisis especiales para terminar el día.', icon: 'https://cdn.mitvstatic.com/programs/fallback_other_l_m.jpg' }, { start: '2021-11-25T01:00:00.000Z', stop: '2021-11-25T02:00:00.000Z', - title: `Plus energético`, + title: 'Plus energético', category: 'Cultural', - description: `La energía tiene mucho para mostrar. Este programa reúne a las principales empresas y protagonistas de la actividad que esta revolucionando la región.`, + description: + 'La energía tiene mucho para mostrar. Este programa reúne a las principales empresas y protagonistas de la actividad que esta revolucionando la región.', icon: 'https://cdn.mitvstatic.com/programs/fallback_other_l_m.jpg' } ]) @@ -59,7 +62,7 @@ it('can handle empty guide', () => { const result = parser({ date, channel, - content: `` + content: '' }) expect(result).toMatchObject([]) }) diff --git a/sites/mi.tv/mi.tv_ar.channels.xml b/sites/mi.tv/mi.tv_ar.channels.xml index 0f82f6cc..a3a12ac2 100644 --- a/sites/mi.tv/mi.tv_ar.channels.xml +++ b/sites/mi.tv/mi.tv_ar.channels.xml @@ -1,164 +1,162 @@ - - - 24/7 Canal de Noticias - A24 - A&E Mundo - AMC - América Sports - América TV - Animal Planet - Argentinísima Satelital - Atrecine - Atreseries - Az Corazón - Baby TV Latin America - Bloomberg TV - C5N - Canal 10 Córdoba - Canal 20 Villa Maria - Canal 26 - Canal 4 - Canal (á) - Canal de la Ciudad - Canal DHE - Canal Luz - Canal Orbe 21 - Canal Rural - Canal U - Cartoon Network - Cine.ar - Cinecanal - CineLatino - Cinemax - Ciudad Magazine - CM El Canal de la Música - CN23 - CNN Chile - CNN en Español - CNN - Comedy Central - Conexión Educativa - Construir TV - Crónica TV - De Película - DeporTV - Discovery Channel - Discovery World HD - Discovery Home & Health - Discovery Kids - Discovery Science - Discovery Theater HD - Discovery Turbo - Disney Channel - E! - El Gourmet - El Nueve - El Trece - El Trece Internacional - Encuentro - ESPN Premium - Europa Europa - EWTN - Film & Arts - Food Network - Fox Sports 2 - Fox Sports 3 - Fox Sports HD - France 24 Español - FX - FXM - Galicia TV - Garage TV - Glitz - Golden Edge - Golden - Golf Channel - Gol TV - HAPSATV - HBO 2 - HBO Family - HBO Mundi - HBO Plus Panamericano HD - HBO Pop - HBO Signature - HBO Xtreme - HGTV - Hispan TV - H2 - History - Hola! TV - HTV - Investigation Discovery - I-Sat - IVC - Las Estrellas - Lifetime - LN+ - Más Chic - Metro - MTV Hits - MTV - Much - MusicTop - Nat Geo Kids - National Geographic - National Geographic Wild - NBA TV - Net TV - Nickelodeon - Nick Jr - Nicktoons - Pakapaka - Paramount Network - Pasiones - Penthouse Gold - Playboy TV - Quiero Musica en mi Idioma - Rai Italia - RT HD - Smithsonian Channel - Sony Channel - Space - Star Channel - Studio Universal - TBS - TCM - Tec TV - Telediario TV - Telefe - Telefe Córdoba - Telefe Rosario - Telefe Santa Fe - TeleHit - Telemax - Telemundo - Telesur - TLC - Tlnovelas - TN - TNT - TNT Series - TNT Sports - Tooncast - Tru TV - Turismo Visión Argentina - TV5Monde - TV Ciudad - TV Cortos - TVE - TV Globo - TV Nacional Uruguay - TV Pública - TyC Sports - TyC Sports 2 - Universal TV - Uruguay Natural TV - Venus - Viajar - Volver - VTV - Warner Channel - ZooMoo - - + + 24/7 Canal de Noticias + A24 + A&E Mundo + AMC + América Sports + América TV + Animal Planet + Argentinísima Satelital + Atrecine + Atreseries + Az Corazón + Baby TV Latin America + Bloomberg TV + C5N + Canal 10 Córdoba + Canal 20 Villa Maria + Canal 26 + Canal 4 + TV Nacional Uruguay + Canal (á) + Canal de la Ciudad + Canal Luz + Canal Orbe 21 + Canal Rural + Canal U + Cartoon Network + Cine.ar + Cinecanal + CineLatino + Cinemax + Ciudad Magazine + CM El Canal de la Música + CN23 + CNN Chile + CNN en Español + CNN + Comedy Central + Conexión Educativa + Construir TV + Crónica TV + De Película + DeporTV + Canal DHE + Discovery Channel + Discovery Home & Health + Discovery Kids + Discovery Science + Discovery Theater HD + Discovery Turbo + Discovery World HD + Disney Channel + E! + El Gourmet + El Nueve + El Trece + El Trece Internacional + Encuentro + ESPN Premium + Europa Europa + EWTN + Film & Arts + Food Network + Fox Sports 2 + Fox Sports 3 + Fox Sports HD + France 24 Español + FXM + FX + Galicia TV + Garage TV + Glitz + Golden Edge + Golden + Golf Channel + Gol TV + HAPSATV + HBO 2 + HBO Family + HBO Mundi + HBO Plus Panamericano HD + HBO Pop + HBO Signature + HBO Xtreme + HGTV + Hispan TV + H2 + History + Hola! TV + HTV + Investigation Discovery + I-Sat + IVC + LN+ + Las Estrellas + Lifetime + Más Chic + Metro + MTV Hits + MTV + Much + MusicTop + Nat Geo Kids + National Geographic + National Geographic Wild + NBA TV + Net TV + Nickelodeon + Nick Jr + Nicktoons + Pakapaka + Paramount Network + Pasiones + Penthouse Gold + Playboy TV + Quiero Musica en mi Idioma + Rai Italia + RT HD + Smithsonian Channel + Sony Channel + Space + Star Channel + Studio Universal + TBS + TCM + Tec TV + Telediario TV + Telefe + Telefe Córdoba + Telefe Rosario + Telefe Santa Fe + TeleHit + Telemax + Telemundo + Telesur + TLC + Tlnovelas + TN + TNT Series + TNT + TNT Sports + Tooncast + Tru TV + Turismo Visión Argentina + TV5Monde + TV Ciudad + TV Cortos + TVE + TV Globo + TV Pública + TyC Sports + TyC Sports 2 + Universal TV + Uruguay Natural TV + Venus + Viajar + Volver + VTV + Warner Channel + ZooMoo + diff --git a/sites/mi.tv/mi.tv_br.channels.xml b/sites/mi.tv/mi.tv_br.channels.xml index 8035791e..9dbbbb37 100644 --- a/sites/mi.tv/mi.tv_br.channels.xml +++ b/sites/mi.tv/mi.tv_br.channels.xml @@ -1,260 +1,258 @@ - - - A&E - Agro+ HD - Amazon Sat - AMC Brasil - Animal Planet - Arte 1 - AXN - Baby TV - Band Amazonas - Band Bahia - Band Curitiba - Band News - Band São Paulo - Band Sports - BBC World News Americas - Bis - - Boas Novas - Boa Vontade TV - Boomerang - Canal Brasil - Canal do Boi - Canal Futura - Canal Off - Canal Rural - Canal Viva - Cartoon Network Brasil - CGTN - Chef TV - CineBrasil TV - Cinemax Brasil - CNN Brasil - CNN International Asia Pacific - Comedy Central Brasil - Conmebol TV 1 - Conmebol TV 2 - Conmebol TV 3 - Conmebol TV 4 - Curta! - Discovery Channel Brasil - Discovery Home & Health Brasil - Discovery Kids Brasil - Discovery Science Brasil - Discovery Theater - Discovery Turbo Brasil - Discovery World Brasil - Disney Channel Brasil - Dog TV - DW Deutsch - E! Brasil - EPTV Sul de Minas - ESPN - ESPN Brasil - ESPN Extra - Eurochannel - FashionTV Brazil - Film & Arts Brasil - Fish TV - Food Network Brasil - Fox News Channel - Fox Sports 2 Brasil - Fox Sports Brasil - FX Brasil - Globo News - Gloob - Gloobinho - GNT - HBO 2 Brasil - HBO Brasil - HBO Family Brasil - HBO Mundi Brasil - HBO Plus Brasil - HBO Pop Brasil - HBO Signature Brasil - HBO Xtreme Brasil - HGTV Brasil - History 2 Brasil - History Brasil - Ideal TV - Inter TV Alto Litoral - Inter TV Cabugi - Inter TV Grande Minas - Inter TV Serramar - Investigação Discovery - I-Sat - Jovem Pan News - Lifetime Brasil - Loading - Mais na Tela - Megapix - MTV Brasil - MTV Live HD - Multishow - Music Box Brazil - Nat Geo Kids - National Geographic - National Geographic Wild - NHK World Japan - Nickelodeon - Nick Jr - NSC TV Blumenau HD - NSC TV Chapecó - NSC TV Criciúma - NSC TV Florianópolis HD - NSC TV Joinville HD - Paramount Network - Playboy TV Brazil - Premiere Clubes - Prime Box Brazil - Rai - RBA TV HD - RBI TV - RBS TV Porto Alegre HD - RBS TV RS - RBS TV Santa Maria - Record Belém - Record Cabrália - Record Goiás - Record Itapoan - Record Minas HD - Record Nacional - Record News - Record Paulista HD - Record Rio HD - Record Rio Grande do Sul HD - Record São Paulo HD - Rede 21 HD - Rede Amazônica - Rede Amazônica Manaus HD - Rede Brasil - Rede CNT Rio de Janeiro HD - Rede Família - Rede Gênesis - Rede Globo HD - Rede Gospel - Rede Internacional de TV - Rede Massa - Rede Meio Norte - Rede Minas - Rede Século 21 - Rede Super - Rede TV! - Rede TV! Rondônia - Rede Vida - RPC TV Curitiba - RPC TV Foz do Iguaçu - RPC TV Maringá - RPC TV Paranavaí - RPC TV Ponta Grossa - RTPi Brasil - SBN International - SBT MS - SBT Nacional - SBT Pará - SBT Rio - SESC TV - Sextreme - Sexy Hot - SIC Internacional - SIC TV - Smithsonian Channel HD Brasil - Sony Channel - Space - SporTV - SporTV 2 - SporTV 3 - Star Channel - Star Hits - Star Life - Studio Universal - Syfy - TBS - TCM - Telecine Action - Telecine Cult - Telecine Fun - Telecine Pipoca - Telecine Premium - Telecine Touch - Telefe Internacional - Terra Viva - TLC - TNT - TNT Series - Tooncast - Trace Brazuca - Travel Box Brazil - Tru TV - TV A Crítica - TV ALESP - TV Amapá - TV Anhanguera HD - TV Antena 10 - TV Aparecida - TV Aratu - TV Assembléia Ceará HD - TV Assembléia Minas Gerais - TV Atalaia - TV Bahia - TV Brasil - TV Cabo Branco - TV Câmara - TV Canção Nova - TV Capixaba - TV Ceará - TV Centro América Cuiabá - TV Cidade São Luíz HD - TV Cidade Verde Cuiabá HD - TV Clube - TV Correio - TV Cultura - TV Diário - TV Difusora São Luís - TVE - TVE Bahia - TVE - TV Em Tempo HD - TV Escola - TV Gazeta - TV Globo Brasília - TV Globo Nordeste HD - TV Globo Rio de Janeiro - TV Globo São Paulo - TV Goiânia Band - TV Guará HD - TV Horizonte - TV Iguaçu HD - TV Jangadeiro - TV Jornal Caruaru - TV Justiça - TV Liberal - TV Novo Tempo - TV Pajuçara - TV Pampa HD - TV Paranaíba HD - TV Paraná Turismo HD - TV Ponta Negra - TV Rá Tim Bum - TV Rio Sul HD - TV Rondônia - TV Santa Cruz HD - TV Senado - TV Sergipe HD - TV Serra Dourada HD - TVT - TV Tribuna - TV Tropical - TV União Fortaleza - TV Verdes Mares - Universal TV - Univesp TV - VH1 - Warner Channel - WooHoo - ZooMoo - - + + + A&E + Agro+ HD + Amazon Sat + AMC Brasil + Animal Planet + Arte 1 + AXN + Baby TV + Band Amazonas + Band Bahia + Band Curitiba + Band News + Band São Paulo + Band Sports + BBC World News Americas + Bis + Boas Novas + Boa Vontade TV + Boomerang + Canal Brasil + Canal do Boi + Canal Futura + Canal Off + Canal Rural + Canal Viva + Cartoon Network Brasil + CGTN + Chef TV + CineBrasil TV + Cinemax Brasil + CNN Brasil + CNN International Asia Pacific + Comedy Central Brasil + Conmebol TV 1 + Conmebol TV 2 + Conmebol TV 3 + Conmebol TV 4 + Curta! + Discovery Channel Brasil + Discovery Home & Health Brasil + Discovery Kids Brasil + Discovery Science Brasil + Discovery Theater + Discovery Turbo Brasil + Discovery World Brasil + Disney Channel Brasil + Dog TV + DW Deutsch + E! Brasil + EPTV Sul de Minas + ESPN + ESPN Brasil + ESPN Extra + Eurochannel + FashionTV Brazil + Film & Arts Brasil + Fish TV + Food Network Brasil + Fox News Channel + Fox Sports 2 Brasil + Fox Sports Brasil + FX Brasil + Globo News + Gloob + Gloobinho + GNT + HBO 2 Brasil + HBO Brasil + HBO Family Brasil + HBO Mundi Brasil + HBO Plus Brasil + HBO Pop Brasil + HBO Signature Brasil + HBO Xtreme Brasil + HGTV Brasil + History 2 Brasil + History Brasil + Ideal TV + Inter TV Alto Litoral + Inter TV Cabugi + Inter TV Grande Minas + Inter TV Serramar + Investigação Discovery + I-Sat + Jovem Pan News + Lifetime Brasil + Loading + Mais na Tela + Megapix + MTV Brasil + MTV Live HD + Multishow + Music Box Brazil + Nat Geo Kids + National Geographic + National Geographic Wild + NHK World Japan + Nickelodeon + Nick Jr + NSC TV Blumenau HD + NSC TV Chapecó + NSC TV Criciúma + NSC TV Florianópolis HD + NSC TV Joinville HD + Paramount Network + Playboy TV Brazil + Premiere Clubes + Prime Box Brazil + Rai + RBA TV HD + RBI TV + RBS TV Porto Alegre HD + RBS TV RS + RBS TV Santa Maria + Record News + Record Nacional + Record Belém + Record Cabrália + Record Goiás + Record Itapoan + Record Minas HD + Record Paulista HD + Record Rio HD + Record Rio Grande do Sul HD + Record São Paulo HD + Rede 21 HD + Rede Amazônica + Rede Amazônica Manaus HD + Rede Brasil + Rede CNT Rio de Janeiro HD + Rede Família + Rede Gênesis + Rede Globo HD + Rede Gospel + Rede Internacional de TV + Rede Massa + Rede Meio Norte + Rede Minas + Rede Século 21 + Rede Super + Rede TV! + Rede TV! Rondônia + Rede Vida + RPC TV Curitiba + RPC TV Foz do Iguaçu + RPC TV Maringá + RPC TV Paranavaí + RPC TV Ponta Grossa + RTPi Brasil + SBN International + SBT MS + SBT Nacional + SBT Pará + SBT Rio + SESC TV + Sextreme + Sexy Hot + SIC Internacional + SIC TV + Smithsonian Channel HD Brasil + Sony Channel + Space + SporTV + SporTV 2 + SporTV 3 + Star Channel + Star Hits + Star Life + Studio Universal + Syfy + TBS + TCM + Telecine Action + Telecine Cult + Telecine Fun + Telecine Pipoca + Telecine Premium + Telecine Touch + Telefe Internacional + Terra Viva + TLC + TNT + TNT Series + Tooncast + Trace Brazuca + Travel Box Brazil + Tru TV + TV A Crítica + TV ALESP + TV Amapá + TV Anhanguera HD + TV Antena 10 + TV Aparecida + TV Aratu + TV Assembléia Ceará HD + TV Assembléia Minas Gerais + TV Atalaia + TV Bahia + TV Brasil + TV Cabo Branco + TV Câmara + TV Canção Nova + TV Capixaba + TV Ceará + TV Centro América Cuiabá + TV Cidade São Luíz HD + TV Cidade Verde Cuiabá HD + TV Clube + TV Correio + TV Cultura + TV Diário + TV Difusora São Luís + TVE Bahia + TVE + TV Em Tempo HD + TVE + TV Escola + TV Gazeta + TV Globo Brasília + TV Globo Nordeste HD + TV Globo Rio de Janeiro + TV Globo São Paulo + TV Goiânia Band + TV Guará HD + TV Horizonte + TV Iguaçu HD + TV Jangadeiro + TV Jornal Caruaru + TV Justiça + TV Liberal + TV Novo Tempo + TV Pajuçara + TV Pampa HD + TV Paranaíba HD + TV Paraná Turismo HD + TV Ponta Negra + TV Rá Tim Bum + TV Rio Sul HD + TV Rondônia + TV Santa Cruz HD + TV Senado + TV Sergipe HD + TV Serra Dourada HD + TVT + TV Tribuna + TV Tropical + TV União Fortaleza + TV Verdes Mares + Universal TV + Univesp TV + VH1 + Warner Channel + WooHoo + ZooMoo + diff --git a/sites/mi.tv/mi.tv_cl.channels.xml b/sites/mi.tv/mi.tv_cl.channels.xml index 93f565c0..e825e0e0 100644 --- a/sites/mi.tv/mi.tv_cl.channels.xml +++ b/sites/mi.tv/mi.tv_cl.channels.xml @@ -1,84 +1,82 @@ - - - 13C - 24 Horas - AMC - America Sports - ARTV - Az Cinema - Azteca Uno - Boomerang - Canal 13 - Canal 24 Horas - Canal 7 Jujuy - Canal 9 Bío-Bío Televisión - Canal del Sur - Canal Ecool - Canal ISB - Canal Vasco - Caracol TV Internacional - Cartoon Network - CCTV 4 - CDF Básico - CDF HD - CDF Premium - CDO Básico - CDO HD - CDO Premium - ChileVisión - Concert Channel - Diputados TV - Discovery Channel - Discovery Kids - El Gourmet - Enlace - ESPN 2 - ESPN 3 - ESPN 4 - ETC TV - EuroNews - Fox Sports 1 HD - Fox Sports 2 - Fox Sports - France 24 English - FunBox - FX - FXM - HBO - La Red - María+Visión - Mega - National Geographic - NHK World Premium - Rec TV - RMS - Space - Star Action +3 - Star Channel - Star Cinema - Star Classics - Star Comedy - Star Fun +3 - Star Hits - Star Life - Star Series +3 - Studio Universal - TBS - TCM - Teletrak - TNT - TVN - TV Nuevo Tiempo - TV Senado - TVU - TyC Sports - UCV TV - Ufrovisión - Unicable - Universal TV - Vía X - Warner Channel - Zona Latina - - + + 13C + 24 Horas + AMC + America Sports + ARTV + Az Cinema + Azteca Uno + Boomerang + Canal 13 + Canal 24 Horas + Canal 7 Jujuy + Canal 9 Bío-Bío Televisión + Canal del Sur + Canal Ecool + Canal ISB + Canal Vasco + Caracol TV Internacional + Cartoon Network + CCTV 4 + CDF Básico + CDF HD + CDF Premium + CDO Básico + CDO HD + CDO Premium + ChileVisión + Concert Channel + Diputados TV + Discovery Channel + Discovery Kids + El Gourmet + Enlace + ESPN 2 + ESPN 3 + ESPN 4 + ETC TV + EuroNews + Fox Sports 1 HD + Fox Sports 2 + Fox Sports + France 24 English + FunBox + FX + FXM + HBO + La Red + María+Visión + Mega + National Geographic + NHK World Premium + TV Nuevo Tiempo + Rec TV + RMS + Space + Star Action +3 + Star Channel + Star Cinema + Star Classics + Star Comedy + Star Fun +3 + Star Hits + Star Life + Star Series +3 + Studio Universal + TBS + TCM + Teletrak + TNT + TVN + TV Senado + TVU + TyC Sports + UCV TV + Ufrovisión + Unicable + Universal TV + Vía X + Warner Channel + Zona Latina + diff --git a/sites/mi.tv/mi.tv_co.channels.xml b/sites/mi.tv/mi.tv_co.channels.xml index 0081b927..baa2c78c 100644 --- a/sites/mi.tv/mi.tv_co.channels.xml +++ b/sites/mi.tv/mi.tv_co.channels.xml @@ -1,46 +1,44 @@ - - - Aliento Vision - AXN - Az Mundo HD - Canal 1 - Canal C - Canal CaliTV - Canal Capital - Canal Cartagena - Canal TRO - Canal U - Caracol TV - Comedy Central HD - Cosmovisión - Cristovisión - Discovery Kids - Enlace Juvenil - Fashion One HD - Fox Sports 2 HD - FX HD - Golden Premier HD - HBO HD Este - Investigation Discovery HD - MTV Live HD - RCN TV HD - - Star Action - Star Channel - Star Fun - Star Life - Star Series - Sun Channel - Teleantioquia HD - Telemedellín HD - Tele Nostalgia - Tele Vid HD - TLC - TNT Series - Trace Sport Stars - Trece - Ve Plus - Win Sports HD - - + + + Aliento Vision + AXN + Az Mundo HD + Canal CaliTV + Canal 1 + Canal C + Canal Capital + Canal Cartagena + RCN TV HD + Canal TRO + Canal U + Caracol TV + Comedy Central HD + Cosmovisión + Cristovisión + Discovery Kids + Enlace Juvenil + Fashion One HD + Fox Sports 2 HD + FX HD + Golden Premier HD + HBO HD Este + Investigation Discovery HD + MTV Live HD + Star Action + Star Channel + Star Fun + Star Life + Star Series + Sun Channel + Teleantioquia HD + Telemedellín HD + Tele Nostalgia + Tele Vid HD + TLC + TNT Series + Trace Sport Stars + Trece + Ve Plus + Win Sports HD + diff --git a/sites/mi.tv/mi.tv_gt.channels.xml b/sites/mi.tv/mi.tv_gt.channels.xml index 11708283..8332c413 100644 --- a/sites/mi.tv/mi.tv_gt.channels.xml +++ b/sites/mi.tv/mi.tv_gt.channels.xml @@ -1,23 +1,21 @@ - - - Cablenoticias - Canal Antigua - Cartoon Network - Cinecanal - Discovery Home & Health - Distrito Comedia - Guatevisión - MTV Latino - MultiPremier - National Geographic - - Star Life - TDN - Telemicro Internacional - Televen - TNT - TV Agro - XTime Channel - - + + + Cablenoticias + Canal Antigua + Cartoon Network + Cinecanal + Discovery Home & Health + Distrito Comedia + Guatevisión + MTV Latino + MultiPremier + National Geographic + Star Life + TDN + Telemicro Internacional + Televen + TNT + TV Agro + XTime Channel + diff --git a/sites/mi.tv/mi.tv_hn.channels.xml b/sites/mi.tv/mi.tv_hn.channels.xml index cb77ccbb..acc8ea78 100644 --- a/sites/mi.tv/mi.tv_hn.channels.xml +++ b/sites/mi.tv/mi.tv_hn.channels.xml @@ -1,27 +1,25 @@ - - - 3ABN Latino - Alfa & Omega Vision - Azteca 7 - Bandamax - Bethel TV - Canal 11 - CCI Channel - CDM - Cinecanal - Cubavisión - Disney Channel - DTV - Fox Sports - Gol TV - HCH - Studio Universal - Telecadena 7 y 4 - Teleceiba - Telesistema 3 y 7 - Televicentro - Universal TV - VTV - - + + 3ABN Latino + Alfa & Omega Vision + Azteca 7 + Bandamax + Bethel TV + Canal 11 + CCI Channel + CDM + Cinecanal + Cubavisión + Disney Channel + DTV + Fox Sports + Gol TV + HCH + Studio Universal + Telecadena 7 y 4 + Teleceiba + Telesistema 3 y 7 + Televicentro + Universal TV + VTV + diff --git a/sites/mi.tv/mi.tv_mx.channels.xml b/sites/mi.tv/mi.tv_mx.channels.xml index a37881a7..b7db8741 100644 --- a/sites/mi.tv/mi.tv_mx.channels.xml +++ b/sites/mi.tv/mi.tv_mx.channels.xml @@ -1,31 +1,29 @@ - - - AMC - Azteca 7 - Boomerang - Canal 22 Metropolitana y Nacional - El Nu9ve - Las Estrellas - Canal 5 - Cartoon Network - Cine Mexicano - De Pelicula HD - Discovery Channel - Disney Channel - El Financiero Bloomberg - Foro TV - Milenio TV - Nu Music - Once México - Space - Star Channel - Star Life - Studio Universal - Tlnovelas - TNT - Universal TV - Warner Channel - WOBI TV - - + + AMC + Azteca 7 + Boomerang + Canal 22 Metropolitana y Nacional + Canal 5 + Cartoon Network + Cine Mexicano + De Pelicula HD + Discovery Channel + Disney Channel + El Financiero Bloomberg + El Nu9ve + Foro TV + Las Estrellas + Milenio TV + Nu Music + Space + Star Channel + Star Life + Studio Universal + Tlnovelas + TNT + Universal TV + Warner Channel + WOBI TV + Once México + diff --git a/sites/mi.tv/mi.tv_pe.channels.xml b/sites/mi.tv/mi.tv_pe.channels.xml index 850fc648..40fcb0d5 100644 --- a/sites/mi.tv/mi.tv_pe.channels.xml +++ b/sites/mi.tv/mi.tv_pe.channels.xml @@ -1,24 +1,22 @@ - - - - ATV - ATV+ - ATV Sur - BYU TV - City TV - DW Deutsch+ - Global TV - Latele - Latina - Más Chic - Mi Gente TV - Nickelodeon - Panamericana TV - Rumba TV - Telefuturo - TV Perú - Unitel - Willax TV - - + + + ATV + ATV+ + ATV Sur + BYU TV + City TV + DW Deutsch+ + Global TV + Latele + Latina + Más Chic + Mi Gente TV + Nickelodeon + Panamericana TV + Rumba TV + Telefuturo + TV Perú + Unitel + Willax TV + diff --git a/sites/mi.tv/mi.tv_sv.channels.xml b/sites/mi.tv/mi.tv_sv.channels.xml index 92cb7fa2..8a9e0ca4 100644 --- a/sites/mi.tv/mi.tv_sv.channels.xml +++ b/sites/mi.tv/mi.tv_sv.channels.xml @@ -1,17 +1,15 @@ - - - Canal 2 - Canal 4 - Canal 6 - Canal 10 - Canal 12 - Canal Claro - Gentevé - Megavisión Canal 19 - Megavisión Canal 21 - TVO Canal 23 - TVX - VTV Canal 35 - - + + Canal 10 + Canal 12 + Canal 2 + Canal 4 + Canal 6 + Canal Claro + Gentevé + Megavisión Canal 19 + Megavisión Canal 21 + TVO Canal 23 + TVX + VTV Canal 35 + diff --git a/sites/mncvision.id/mncvision.id.channels.xml b/sites/mncvision.id/mncvision.id.channels.xml index c01defef..fe2fbb6b 100644 --- a/sites/mncvision.id/mncvision.id.channels.xml +++ b/sites/mncvision.id/mncvision.id.channels.xml @@ -1,199 +1,197 @@ - - - ABC Australia - Aljazeera - Animal Planet - Animax Asia - ANTV - Arirang - Asian Food Network - AXN - Baby TV - BBC Earth - BBC World News - BeIn Sports 1 - BeIn Sports 3 - BTV - Besmart - Bloomberg TV - Boomerang - Cartoon - CBeebies - Celestial Classic Movies - Celestial Movies - CGTN - CGTN Documentary - Cinemax - CNA - CNBC - CNN International - Crime + Investigation - Discovery Channel - DW English - Ent - Fight Sports - FMN - Fox News Channel - France 24 - Galaxy - Galaxy Premium - GTV - HBO Asia - HBO Family Asia - HBO Hits - HBO Signature Asia - HGTV Asia - History - Hits - Hits Movies - IDX Channel - Ie - IMC - Indosiar - INews - Jak TV - Kids TV - Kix - Kompas TV - Life - Lifestyle & Fashion - Lifetime Asia - Metro TV - Miao Mi - MNC News - MNC Sports - MNC Sports 2 - MNC Sports 3 - MNC TV - M Shop Signature - M Shop Super Sale! - Music TV - Muslim TV - National Geographic - National Geographic Wild - NET - NHK World Japan - NHK World Premium - Nickelodeon - Nick Jr Asia - OK TV - One - Quran TV - RCTI - SCTV - SEA Today - Soccer Channel - SPOTV - SPOTV 2 - Tawaf TV - Thrill - TLC - Trans 7 - Trans TV - tvN - tvN Movies - TVOne - TVRI Nasional - Vision Prime - Warner TV - Zee Bioskop - ABC Australia - Aljazeera - Animal Planet - Animax - ANTV - Arirang World - Asian Food Network - AXN - Baby TV - BBC Earth - BBC World News - BeIn Sports 1 - BeIn Sports 3 - BTV - Besmart - Bloomberg TV - Boomerang - Cartoon Network - CBeebies Asia - Celestial Classic Movies - Celestial Movies - CGTN - CGTN Documentary - Cinemax Asia - CNA - CNBC - CNN International - Crime + Investigation - Discovery Channel - DW English - Ent - Fight Sports - FMN - Fox News Channel - France 24 - Galaxy - Galaxy Premium - GTV - HBO - HBO Family - HBO Hits - HBO Signature - HGTV - History - Hits - Hits Movies - IDX Channel - Ie - IMC - Indosiar - INews - Jak TV - Kids TV - Kix - Kompas TV - Life - Lifestyle & Fashion - Lifetime - Metro TV - Miao Mi - MNC News - MNC Sports - MNC Sports 2 - MNC Sports 3 - MNC TV - M Shop Signature - M Shop Super Sale! - Music TV - Muslim TV - National Geographic - National Geographic Wild - NET - NHK World Japan - NHK World Premium - Nickelodeon - Nick Jr - OK TV - One - Quran TV - RCTI - SCTV - SEA Today - Soccer Channel - SPOTV - SPOTV 2 - Tawaf TV - Thrill - TLC - Trans 7 - Trans TV - tvN - tvN Movies - TVOne - TVRI Nasional - Vision Prime - Warner TV - Zee Bioskop - - + + ABC Australia + Aljazeera + Animal Planet + Animax Asia + ANTV + Arirang + Asian Food Network + AXN + Baby TV + BBC Earth + BBC World News + BeIn Sports 1 + BeIn Sports 3 + BTV + Besmart + Bloomberg TV + Boomerang + Cartoon + CBeebies + Celestial Classic Movies + Celestial Movies + CGTN + CGTN Documentary + Cinemax + CNA + CNBC + CNN International + Crime + Investigation + Discovery Channel + DW English + Ent + Fight Sports + FMN + Fox News Channel + France 24 + Galaxy + Galaxy Premium + GTV + HBO Asia + HBO Family Asia + HBO Hits + HBO Signature Asia + HGTV Asia + History + Hits + Hits Movies + IDX Channel + Ie + IMC + Indosiar + INews + Jak TV + Kids TV + Kix + Kompas TV + Life + Lifestyle & Fashion + Lifetime Asia + Metro TV + Miao Mi + MNC News + MNC Sports + MNC Sports 2 + MNC Sports 3 + MNC TV + M Shop Signature + M Shop Super Sale! + Music TV + Muslim TV + National Geographic + National Geographic Wild + NET + NHK World Japan + NHK World Premium + Nickelodeon + Nick Jr Asia + OK TV + One + Quran TV + RCTI + SCTV + SEA Today + Soccer Channel + SPOTV + SPOTV 2 + Tawaf TV + Thrill + TLC + Trans 7 + Trans TV + tvN + tvN Movies + TVOne + TVRI Nasional + Vision Prime + Warner TV + Zee Bioskop + ABC Australia + Aljazeera + Animal Planet + Animax + ANTV + Arirang World + Asian Food Network + AXN + Baby TV + BBC Earth + BBC World News + BeIn Sports 1 + BeIn Sports 3 + BTV + Besmart + Bloomberg TV + Boomerang + Cartoon Network + CBeebies Asia + Celestial Classic Movies + Celestial Movies + CGTN + CGTN Documentary + Cinemax Asia + CNA + CNBC + CNN International + Crime + Investigation + Discovery Channel + DW English + Ent + Fight Sports + FMN + Fox News Channel + France 24 + Galaxy + Galaxy Premium + GTV + HBO + HBO Family + HBO Hits + HBO Signature + HGTV + History + Hits + Hits Movies + IDX Channel + Ie + IMC + Indosiar + INews + Jak TV + Kids TV + Kix + Kompas TV + Life + Lifestyle & Fashion + Lifetime + Metro TV + Miao Mi + MNC News + MNC Sports + MNC Sports 2 + MNC Sports 3 + MNC TV + M Shop Signature + M Shop Super Sale! + Music TV + Muslim TV + National Geographic + National Geographic Wild + NET + NHK World Japan + NHK World Premium + Nickelodeon + Nick Jr + OK TV + One + Quran TV + RCTI + SCTV + SEA Today + Soccer Channel + SPOTV + SPOTV 2 + Tawaf TV + Thrill + TLC + Trans 7 + Trans TV + tvN + tvN Movies + TVOne + TVRI Nasional + Vision Prime + Warner TV + Zee Bioskop + diff --git a/sites/mncvision.id/mncvision.id.config.js b/sites/mncvision.id/mncvision.id.config.js index 012dad43..1b5949f4 100644 --- a/sites/mncvision.id/mncvision.id.config.js +++ b/sites/mncvision.id/mncvision.id.config.js @@ -88,14 +88,14 @@ module.exports = { function parseSeason($item) { const title = parseTitle($item) - const [_, season] = title.match(/ S(\d+)/) || [null, null] + const [, season] = title.match(/ S(\d+)/) || [null, null] return season ? parseInt(season) : null } function parseEpisode($item) { const title = parseTitle($item) - const [_, episode] = title.match(/ Ep (\d+)/) || [null, null] + const [, episode] = title.match(/ Ep (\d+)/) || [null, null] return episode ? parseInt(episode) : null } @@ -158,7 +158,7 @@ function loadLangCookies(channel) { return axios .get(url, { timeout: 30000 }) .then(r => parseCookies(r.headers)) - .catch(err => null) + .catch(error => console.log(error.message)) } async function loadDescription($item, cookies) { @@ -170,7 +170,7 @@ async function loadDescription($item, cookies) { timeout: 30000 }) .then(r => r.data) - .catch(err => null) + .catch(error => console.log(error.message)) if (!content) return null const $page = cheerio.load(content) diff --git a/sites/mncvision.id/mncvision.id.test.js b/sites/mncvision.id/mncvision.id.test.js index f2638a59..81995497 100644 --- a/sites/mncvision.id/mncvision.id.test.js +++ b/sites/mncvision.id/mncvision.id.test.js @@ -1,5 +1,5 @@ -// npm run channels:parse --config=./sites/mncvision.id/mncvision.id.config.js --output=./sites/mncvision.id/mncvision.id.channels.xml -// npx epg-grabber --config=sites/mncvision.id/mncvision.id.config.js --channels=sites/mncvision.id/mncvision.id.channels.xml --output=guide.xml --timeout=30000 --days=2 +// npm run channels:parse -- --config=./sites/mncvision.id/mncvision.id.config.js --output=./sites/mncvision.id/mncvision.id.channels.xml +// npm run grab -- --site=mncvision.id const { parser, url, request } = require('./mncvision.id.config.js') const fs = require('fs') diff --git a/sites/moji.id/moji.id.channels.xml b/sites/moji.id/moji.id.channels.xml index 5157482b..61747315 100644 --- a/sites/moji.id/moji.id.channels.xml +++ b/sites/moji.id/moji.id.channels.xml @@ -1,7 +1,4 @@ - - - Moji - - \ No newline at end of file + + Moji + \ No newline at end of file diff --git a/sites/moji.id/moji.id.config.js b/sites/moji.id/moji.id.config.js index b9c4ffe3..d5656ce1 100644 --- a/sites/moji.id/moji.id.config.js +++ b/sites/moji.id/moji.id.config.js @@ -11,94 +11,112 @@ dayjs.extend(customParseFormat) const currentYear = new Date().getFullYear() module.exports = { - site: 'moji.id', - days: 4, - output: 'moji.id.guide.xml', - channels: 'moji.id.channels.xml', - lang: 'en', - delay: 5000, + site: 'moji.id', + days: 4, + output: 'moji.id.guide.xml', + channels: 'moji.id.channels.xml', + lang: 'en', + delay: 5000, - url: function () { - return 'https://moji.id/schedule' - }, + url: function () { + return 'https://moji.id/schedule' + }, - request: { - method: 'GET', - timeout: 5000, - cache: { ttl: 60 * 60 * 1000 }, - headers: { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36' } - }, - - logo: function (context) { - return context.channel.logo - }, - - parser: function (context) { - const programs = [] - const items = parseItems(context) - - items.forEach(function(item, i) { - programs.push({ - title: item.progTitle, - description: item.progDesc, - start: item.progStart, - stop: item.progStop - }) - }) - - return programs + request: { + method: 'GET', + timeout: 5000, + cache: { ttl: 60 * 60 * 1000 }, + headers: { + 'User-Agent': + 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36' } + }, + + logo: function (context) { + return context.channel.logo + }, + + parser: function (context) { + const programs = [] + const items = parseItems(context) + + items.forEach(item => { + programs.push({ + title: item.progTitle, + description: item.progDesc, + start: item.progStart, + stop: item.progStop + }) + }) + + return programs + } } function parseItems(context) { - const $ = cheerio.load(context.content) - const schDayMonths = $('.date-slider .month').toArray() - const schPrograms = $('.desc-slider .list-slider').toArray() - const monthDate = dayjs(context.date).format('MMM DD') - const items = []; + const $ = cheerio.load(context.content) + const schDayMonths = $('.date-slider .month').toArray() + const schPrograms = $('.desc-slider .list-slider').toArray() + const monthDate = dayjs(context.date).format('MMM DD') + const items = [] - schDayMonths.forEach(function(schDayMonth, i) { - if (monthDate == $(schDayMonth).text()) { - let schDayPrograms = $(schPrograms[i]).find('.accordion').toArray() - schDayPrograms.forEach(function(program, i) { - let itemDay = { - progStart: parseStart(schDayMonth, program), - progStop: parseStop(schDayMonth, program, schDayPrograms[i+1]), - progTitle: parseTitle(program), - progDesc: parseDescription(program) - }; - items.push(itemDay) - }) + schDayMonths.forEach(function (schDayMonth, i) { + if (monthDate == $(schDayMonth).text()) { + let schDayPrograms = $(schPrograms[i]).find('.accordion').toArray() + schDayPrograms.forEach(function (program, i) { + let itemDay = { + progStart: parseStart(schDayMonth, program), + progStop: parseStop(schDayMonth, program, schDayPrograms[i + 1]), + progTitle: parseTitle(program), + progDesc: parseDescription(program) } - }) + items.push(itemDay) + }) + } + }) - return items + return items } function parseTitle(item) { - return cheerio.load(item)('.name-prog').text() + return cheerio.load(item)('.name-prog').text() } function parseDescription(item) { - return cheerio.load(item)('.content-acc span').text() + return cheerio.load(item)('.content-acc span').text() } function parseStart(schDayMonth, item) { - let monthDate = cheerio.load(schDayMonth).text().split(' ') - let startTime = cheerio.load(item)('.pkl').text() - let progStart = dayjs.tz(currentYear + ' ' + monthDate[0] + ' ' + monthDate[1] + ' ' + startTime, 'YYYY MMM DD HH:mm', 'Asia/Jakarta') - return progStart + let monthDate = cheerio.load(schDayMonth).text().split(' ') + let startTime = cheerio.load(item)('.pkl').text() + let progStart = dayjs.tz( + currentYear + ' ' + monthDate[0] + ' ' + monthDate[1] + ' ' + startTime, + 'YYYY MMM DD HH:mm', + 'Asia/Jakarta' + ) + return progStart } function parseStop(schDayMonth, itemCurrent, itemNext) { - let monthDate = cheerio.load(schDayMonth).text().split(' ') - - if (itemNext) { - let stopTime = cheerio.load(itemNext)('.pkl').text() - return dayjs.tz(currentYear + ' ' + monthDate[0] + ' ' + monthDate[1] + ' ' + stopTime, 'YYYY MMM DD HH:mm', 'Asia/Jakarta') - } - else - { - return dayjs.tz(currentYear + ' ' + monthDate[0] + ' ' + (parseInt(monthDate[1]) + 1).toString().padStart(2, '0') + ' 00:00', 'YYYY MMM DD HH:mm', 'Asia/Jakarta') - } -} \ No newline at end of file + let monthDate = cheerio.load(schDayMonth).text().split(' ') + + if (itemNext) { + let stopTime = cheerio.load(itemNext)('.pkl').text() + return dayjs.tz( + currentYear + ' ' + monthDate[0] + ' ' + monthDate[1] + ' ' + stopTime, + 'YYYY MMM DD HH:mm', + 'Asia/Jakarta' + ) + } else { + return dayjs.tz( + currentYear + + ' ' + + monthDate[0] + + ' ' + + (parseInt(monthDate[1]) + 1).toString().padStart(2, '0') + + ' 00:00', + 'YYYY MMM DD HH:mm', + 'Asia/Jakarta' + ) + } +} diff --git a/sites/moji.id/moji.id.test.js b/sites/moji.id/moji.id.test.js index b579aa37..51182732 100644 --- a/sites/moji.id/moji.id.test.js +++ b/sites/moji.id/moji.id.test.js @@ -1,4 +1,4 @@ -// npx epg-grabber --config=sites/moji.id/moji.id.config.js --channels=sites/moji.id/moji.id.channels.xml --output=guide.xml --days=2 +// npm run grab -- --site=moji.id // npx jest moji.id.test.js const { url, parser } = require('./moji.id.config.js') @@ -7,33 +7,32 @@ const utc = require('dayjs/plugin/utc') dayjs.extend(utc) const date = dayjs.utc('2023-08-18', 'YYYY-MM-DD').startOf('d') -const channel = { site_id: '0', xmltv_id: 'moji.id', lang: 'en', logo: 'https://moji.id/site/uploads/logo/62f9387ce00a2-224-x-71.png' } - -const content = `scheduleFriAug 18SatAug 19SunAug 20Jam TayangProgram00:00TRUSTInformasi seputar menjaga vitalitas pria00:302023 AVC CHALLENGE CUP FOR WOMEN (RECORDED)India Vs. Vietnam02:30ONE CHAMPIONSHIP 2021Siaran laga-laga pertandingan tinju gaya bebas internasional. Meyuguhkan pertarungan sengit dari para petarung profeisional kelas dunia.03:30VOLLEYBALL NATION'S LEAGUE 2023 (RECORDED)TURKI vs BRAZIL05:00MOJI SPORTMOJI SPORT06:15LIPUTAN 6 PAGI MOJIKompilasi ragam berita hard news dan soft news baik dari dalam negeri maupun internasional juga info prediksi cuaca di wilayah Indonesia07:00UNGKAPLiputan investigasi seputar berbagai topik dan peristiwa hangat serta kontroversial yang terjadi di Indonesia08:00PIALA KAPOLRI 2023 PUTRI (LIVE)PIALA KAPOLRI 2023 PUTRI (LIVE)10:30SERIES PAGIGANTENG GANTENG SERIGALA12:30DIAM-DIAM SUKADIAM-DIAM SUKA13:30PIALA KAPOLRI 2023 PUTRA (LIVE)PIALA KAPOLRI 2023 PUTRA (LIVE)16:00PIALA KAPOLRI 2023 PUTRI (LIVE)PIALA KAPOLRI 2023 PUTRI (LIVE)18:00PIALA KAPOLRI 2023 PUTRA (LIVE)PIALA KAPOLRI 2023 PUTRA (LIVE)20:00MOJI DRAMA (CHHOTI SARDARNI)CHHOTI SARDARNI21:30SINEMA MALAM (BIDADARI CANTIK DI RUMAH KOST)(BIDADARI CANTIK DI RUMAH KOST23:00TRUSTInformasi seputar menjaga vitalitas pria23:30TRUSTInformasi seputar menjaga vitalitas pria00:00TRUSTInformasi seputar menjaga vitalitas pria00:30UNGKAPLiputan investigasi seputar berbagai topik dan peristiwa hangat serta kontroversial yang terjadi di Indonesia01:00EXCLUSIVE INTERVIEWPETER SCHMEICHEL01:30PREMIER LEAGUE (LIVE)NOTT'M FOREST VS SHEFFIELD UTD03:30VOLLEYBALL NATION'S LEAGUE 2023 FOR WOMEN (RECORDED)GERMANY vs USA05:00MOJI SPORTMOJI SPORT06:15LIPUTAN 6 PAGI MOJIKompilasi ragam berita hard news dan soft news baik dari dalam negeri maupun internasional juga info prediksi cuaca di wilayah Indonesia07:00UNGKAPLiputan investigasi seputar berbagai topik dan peristiwa hangat serta kontroversial yang terjadi di Indonesia08:00TRUSTInformasi Kesehatan08:30TRUSTInformasi Kesehatan09:00MASAK APA CEU?Jenny Hendrawati, seorang koki selebritis, menyajikan beraneka hidangan internasional serta membagikan tips-tips seputar dunia memasak yang mudah diikuti oleh para pemirsa di rumah.09:30BISIK PAGIberbagai berita dan perkembangan terbaru dari sederet kasus yang menimpa sejumlah sosok ternama di Indonesia.10:30GANTENG GANTENG SERIGALAGANTENG GANTENG SERIGALA11:30PIALA KAPOLRI 2023 PUTRI (LIVE)PIALA KAPOLRI 2023 PUTRI (LIVE)14:00PIALA KAPOLRI 2023 PUTRA (LIVE)PIALA KAPOLRI 2023 PUTRA (LIVE)16:00PIALA KAPOLRI 2023 PUTRI (LIVE)PIALA KAPOLRI 2023 PUTRI (LIVE)18:00PIALA KAPOLRI 2023 PUTRA (LIVE)PIALA KAPOLRI 2023 PUTRA (LIVE)20:00MOJI DRAMA (CHHOTI SARDARNI)CHHOTI SARDARNI20:45PREMIER LEAGUE (LIVE)WOLVES VS BRIGHTON00:00TRUSTInformasi seputar menjaga vitalitas pria00:302023 AVC CHALLENGE CUP FOR WOMEN (RECORDED)Chinese Taipei Vs. India02:30ONE CHAMPIONSHIP 2021Siaran laga-laga pertandingan tinju gaya bebas internasional. Meyuguhkan pertarungan sengit dari para petarung profeisional kelas dunia.03:30VOLLEYBALL NATION'S LEAGUE 2023 FOR WOMEN (RECORDED)THAILAND vs JAPAN05:00MOJI SPORTMOJI SPORT06:15LIPUTAN 6 PAGI MOJIKompilasi ragam berita hard news dan soft news baik dari dalam negeri maupun internasional juga info prediksi cuaca di wilayah Indonesia07:00UNGKAPLiputan investigasi seputar berbagai topik dan peristiwa hangat serta kontroversial yang terjadi di Indonesia08:00TRUSTInformasi Kesehatan08:30TRUSTInformasi Kesehatan09:00MASAK APA CEU?Jenny Hendrawati, seorang koki selebritis, menyajikan beraneka hidangan internasional serta membagikan tips-tips seputar dunia memasak yang mudah diikuti oleh para pemirsa di rumah.09:30BISIK PAGIberbagai berita dan perkembangan terbaru dari sederet kasus yang menimpa sejumlah sosok ternama di Indonesia.10:30GANTENG GANTENG SERIGALAGANTENG GANTENG SERIGALA12:30DIAM-DIAM SUKADIAM-DIAM SUKA14:30SINEMA SIANGFTV16:00SEA VLEAGUE (RECORDED)PHILIPPINES VS INDONESIA18:00NETIZEN UPDATEberbagai berita dan perkembangan terbaru dari sederet kasus yang menimpa sejumlah sosok ternama di Indonesia.19:00MOJI DRAMA (CHHOTI SARDARNI)CHHOTI SARDARNI21:00MOJI MOVIE (LONDON LOVE STORY)LONDON LOVE STORY23:00TRUSTInformasi seputar menjaga vitalitas pria23:30TRUSTInformasi seputar menjaga vitalitas pria` - -const context = { - 'content': content, - 'date': date +const channel = { + site_id: '0', + xmltv_id: 'moji.id', + lang: 'en', + logo: 'https://moji.id/site/uploads/logo/62f9387ce00a2-224-x-71.png' } +const content = + 'scheduleFriAug 18SatAug 19SunAug 20Jam TayangProgram00:00TRUSTInformasi seputar menjaga vitalitas pria00:302023 AVC CHALLENGE CUP FOR WOMEN (RECORDED)India Vs. Vietnam02:30ONE CHAMPIONSHIP 2021Siaran laga-laga pertandingan tinju gaya bebas internasional. Meyuguhkan pertarungan sengit dari para petarung profeisional kelas dunia.03:30VOLLEYBALL NATION\'S LEAGUE 2023 (RECORDED)TURKI vs BRAZIL05:00MOJI SPORTMOJI SPORT06:15LIPUTAN 6 PAGI MOJIKompilasi ragam berita hard news dan soft news baik dari dalam negeri maupun internasional juga info prediksi cuaca di wilayah Indonesia07:00UNGKAPLiputan investigasi seputar berbagai topik dan peristiwa hangat serta kontroversial yang terjadi di Indonesia08:00PIALA KAPOLRI 2023 PUTRI (LIVE)PIALA KAPOLRI 2023 PUTRI (LIVE)10:30SERIES PAGIGANTENG GANTENG SERIGALA12:30DIAM-DIAM SUKADIAM-DIAM SUKA13:30PIALA KAPOLRI 2023 PUTRA (LIVE)PIALA KAPOLRI 2023 PUTRA (LIVE)16:00PIALA KAPOLRI 2023 PUTRI (LIVE)PIALA KAPOLRI 2023 PUTRI (LIVE)18:00PIALA KAPOLRI 2023 PUTRA (LIVE)PIALA KAPOLRI 2023 PUTRA (LIVE)20:00MOJI DRAMA (CHHOTI SARDARNI)CHHOTI SARDARNI21:30SINEMA MALAM (BIDADARI CANTIK DI RUMAH KOST)(BIDADARI CANTIK DI RUMAH KOST23:00TRUSTInformasi seputar menjaga vitalitas pria23:30TRUSTInformasi seputar menjaga vitalitas pria00:00TRUSTInformasi seputar menjaga vitalitas pria00:30UNGKAPLiputan investigasi seputar berbagai topik dan peristiwa hangat serta kontroversial yang terjadi di Indonesia01:00EXCLUSIVE INTERVIEWPETER SCHMEICHEL01:30PREMIER LEAGUE (LIVE)NOTT\'M FOREST VS SHEFFIELD UTD03:30VOLLEYBALL NATION\'S LEAGUE 2023 FOR WOMEN (RECORDED)GERMANY vs USA05:00MOJI SPORTMOJI SPORT06:15LIPUTAN 6 PAGI MOJIKompilasi ragam berita hard news dan soft news baik dari dalam negeri maupun internasional juga info prediksi cuaca di wilayah Indonesia07:00UNGKAPLiputan investigasi seputar berbagai topik dan peristiwa hangat serta kontroversial yang terjadi di Indonesia08:00TRUSTInformasi Kesehatan08:30TRUSTInformasi Kesehatan09:00MASAK APA CEU?Jenny Hendrawati, seorang koki selebritis, menyajikan beraneka hidangan internasional serta membagikan tips-tips seputar dunia memasak yang mudah diikuti oleh para pemirsa di rumah.09:30BISIK PAGIberbagai berita dan perkembangan terbaru dari sederet kasus yang menimpa sejumlah sosok ternama di Indonesia.10:30GANTENG GANTENG SERIGALAGANTENG GANTENG SERIGALA11:30PIALA KAPOLRI 2023 PUTRI (LIVE)PIALA KAPOLRI 2023 PUTRI (LIVE)14:00PIALA KAPOLRI 2023 PUTRA (LIVE)PIALA KAPOLRI 2023 PUTRA (LIVE)16:00PIALA KAPOLRI 2023 PUTRI (LIVE)PIALA KAPOLRI 2023 PUTRI (LIVE)18:00PIALA KAPOLRI 2023 PUTRA (LIVE)PIALA KAPOLRI 2023 PUTRA (LIVE)20:00MOJI DRAMA (CHHOTI SARDARNI)CHHOTI SARDARNI20:45PREMIER LEAGUE (LIVE)WOLVES VS BRIGHTON00:00TRUSTInformasi seputar menjaga vitalitas pria00:302023 AVC CHALLENGE CUP FOR WOMEN (RECORDED)Chinese Taipei Vs. India02:30ONE CHAMPIONSHIP 2021Siaran laga-laga pertandingan tinju gaya bebas internasional. Meyuguhkan pertarungan sengit dari para petarung profeisional kelas dunia.03:30VOLLEYBALL NATION\'S LEAGUE 2023 FOR WOMEN (RECORDED)THAILAND vs JAPAN05:00MOJI SPORTMOJI SPORT06:15LIPUTAN 6 PAGI MOJIKompilasi ragam berita hard news dan soft news baik dari dalam negeri maupun internasional juga info prediksi cuaca di wilayah Indonesia07:00UNGKAPLiputan investigasi seputar berbagai topik dan peristiwa hangat serta kontroversial yang terjadi di Indonesia08:00TRUSTInformasi Kesehatan08:30TRUSTInformasi Kesehatan09:00MASAK APA CEU?Jenny Hendrawati, seorang koki selebritis, menyajikan beraneka hidangan internasional serta membagikan tips-tips seputar dunia memasak yang mudah diikuti oleh para pemirsa di rumah.09:30BISIK PAGIberbagai berita dan perkembangan terbaru dari sederet kasus yang menimpa sejumlah sosok ternama di Indonesia.10:30GANTENG GANTENG SERIGALAGANTENG GANTENG SERIGALA12:30DIAM-DIAM SUKADIAM-DIAM SUKA14:30SINEMA SIANGFTV16:00SEA VLEAGUE (RECORDED)PHILIPPINES VS INDONESIA18:00NETIZEN UPDATEberbagai berita dan perkembangan terbaru dari sederet kasus yang menimpa sejumlah sosok ternama di Indonesia.19:00MOJI DRAMA (CHHOTI SARDARNI)CHHOTI SARDARNI21:00MOJI MOVIE (LONDON LOVE STORY)LONDON LOVE STORY23:00TRUSTInformasi seputar menjaga vitalitas pria23:30TRUSTInformasi seputar menjaga vitalitas pria' + it('can generate valid url', () => { - expect(url({ channel, date })).toBe('https://moji.id/schedule') + expect(url({ channel, date })).toBe('https://moji.id/schedule') }) it('can handle empty guide', () => { - const results = parser({ content: '' }) - expect(results).toMatchObject([]) + const results = parser({ content: '' }) + expect(results).toMatchObject([]) }) it('can parse response', () => { - const results = parser({ content: content, date: date }) + const results = parser({ content: content, date: date }) - expect(results[0]).toMatchObject( - { - title: 'TRUST', - start: dayjs.tz('2023 Aug 18 00:00', 'YYYY MMM DD HH:mm', 'Asia/Jakarta'), - stop: dayjs.tz('2023 Aug 18 00:30', 'YYYY MMM DD HH:mm', 'Asia/Jakarta'), - description: 'Informasi seputar menjaga vitalitas pria' - } - ) -}) \ No newline at end of file + expect(results[0]).toMatchObject({ + title: 'TRUST', + start: dayjs.tz('2023 Aug 18 00:00', 'YYYY MMM DD HH:mm', 'Asia/Jakarta'), + stop: dayjs.tz('2023 Aug 18 00:30', 'YYYY MMM DD HH:mm', 'Asia/Jakarta'), + description: 'Informasi seputar menjaga vitalitas pria' + }) +}) diff --git a/sites/mon-programme-tv.be/mon-programme-tv.be.channels.xml b/sites/mon-programme-tv.be/mon-programme-tv.be.channels.xml index 4b688005..3a7d1f6e 100644 --- a/sites/mon-programme-tv.be/mon-programme-tv.be.channels.xml +++ b/sites/mon-programme-tv.be/mon-programme-tv.be.channels.xml @@ -1,116 +1,114 @@ - - - - - - - - - - - - 13EME RUE - AB3 - ABXPLORE - ACTION - ALTICE STUDIO - ANIMAUX - ARTE - AUTOMOTO - BBC ENTERTAINMENT - BE 1 - BE CINE - BE SERIES - BFM TV - BOING - BOOMERANG - C8 - CANAL J - CANVAS - CARTOON NETWORK - CHASSE & PECHE - CINE + CLASSIC BE - CINE + FRISSON BE - CINE + PREMIER BE - CLUB RTL - CNEWS - COMEDIE + - CSTAR - DISCOVERY CHANNEL - DISNEY CHANNEL - DISNEY JUNIOR - EEN - E! ENTERTAINMENT - EQUIDIA - EUROSPORT - EUROSPORT NL - EUROSPORT 2 - FRANCE 2 - FRANCE 24 - FRANCE 3 - FRANCE 4 - FRANCE 5 - GAME ONE - GULLI - HISTOIRE - KETNET - KTO - LA TROIS - LA UNE (RTBF) - LCI - LN24 - M6 - M6 MUSIC - MANGAS - MELODY - MEZZO - MTV - NATIONAL GEOGRAPHIC CHANNEL - NATIONAL GEOGRAPHIC WILD - NAUTICAL CHANNEL - NICKELODEON - NJAM ! - NPO1 - NPO2 - NPO3 - PARAMOUNT CHANNEL - PIWI + - PLANETE + - PLANETE+ AE - PLANETE+ CI - VIER - VIJF - PLAYBOY TV - PLUG RTL - RAI 1 - RMC SPORT 2 - RTL TVI - RTS UN - RTS DEUX - SCIENCE & VIE TV - STUDIO100tv - SYFY - TCM CINEMA - TELETOON + - TF1 - TF1 Séries Films - TIJI - TIPIK - TMC - TOUTE L'HISTOIRE - TRACE URBAN - TV5 MONDE - TV BREIZH - USHUAIA TV - VOO Sport World 1 - VOO Sport World 2 - VOO Sport World 3 - VTM - VTM2 - VTM3 - VTM4 - VTM KIDS - Warner TV - - + + + + + + + + + + + 13EME RUE + AB3 + ABXPLORE + ACTION + ALTICE STUDIO + ANIMAUX + ARTE + AUTOMOTO + BBC ENTERTAINMENT + BE 1 + BE CINE + BE SERIES + BFM TV + BOING + BOOMERANG + C8 + CANAL J + CANVAS + CARTOON NETWORK + CHASSE & PECHE + CINE + CLASSIC BE + CINE + FRISSON BE + CINE + PREMIER BE + CLUB RTL + CNEWS + COMEDIE + + CSTAR + DISCOVERY CHANNEL + DISNEY CHANNEL + DISNEY JUNIOR + EEN + E! ENTERTAINMENT + EQUIDIA + EUROSPORT + EUROSPORT NL + EUROSPORT 2 + FRANCE 2 + FRANCE 24 + FRANCE 3 + FRANCE 4 + FRANCE 5 + GAME ONE + GULLI + HISTOIRE + KETNET + KTO + LA TROIS + LA UNE (RTBF) + LCI + LN24 + M6 + M6 MUSIC + MANGAS + MELODY + MEZZO + MTV + NATIONAL GEOGRAPHIC CHANNEL + NATIONAL GEOGRAPHIC WILD + NAUTICAL CHANNEL + NICKELODEON + NJAM ! + NPO1 + NPO2 + NPO3 + PARAMOUNT CHANNEL + PIWI + + PLANETE + + PLANETE+ AE + PLANETE+ CI + VIER + VIJF + PLAYBOY TV + PLUG RTL + RAI 1 + RMC SPORT 2 + RTL TVI + RTS UN + RTS DEUX + SCIENCE & VIE TV + STUDIO100tv + SYFY + TCM CINEMA + TELETOON + + TF1 + TF1 Séries Films + TIJI + TIPIK + TMC + TOUTE L'HISTOIRE + TRACE URBAN + TV5 MONDE + TV BREIZH + USHUAIA TV + VOO Sport World 1 + VOO Sport World 2 + VOO Sport World 3 + VTM + VTM2 + VTM3 + VTM4 + VTM KIDS + Warner TV + diff --git a/sites/mon-programme-tv.be/mon-programme-tv.be.config.js b/sites/mon-programme-tv.be/mon-programme-tv.be.config.js index f1e7d856..72c8f6b3 100644 --- a/sites/mon-programme-tv.be/mon-programme-tv.be.config.js +++ b/sites/mon-programme-tv.be/mon-programme-tv.be.config.js @@ -44,7 +44,7 @@ module.exports = { }, async channels() { const data = await axios - .get(`https://www.mon-programme-tv.be/chaine/toutes-les-chaines-television.html`) + .get('https://www.mon-programme-tv.be/chaine/toutes-les-chaines-television.html') .then(r => r.data) .catch(console.log) const $ = cheerio.load(data) diff --git a/sites/mon-programme-tv.be/mon-programme-tv.be.test.js b/sites/mon-programme-tv.be/mon-programme-tv.be.test.js index b4a07f3d..c9f56deb 100644 --- a/sites/mon-programme-tv.be/mon-programme-tv.be.test.js +++ b/sites/mon-programme-tv.be/mon-programme-tv.be.test.js @@ -1,5 +1,5 @@ // npm run channels:parse -- --config=./sites/mon-programme-tv.be/mon-programme-tv.be.config.js --output=./sites/mon-programme-tv.be/mon-programme-tv.be.channels.xml -// npx epg-grabber --config=sites/mon-programme-tv.be/mon-programme-tv.be.config.js --channels=sites/mon-programme-tv.be/mon-programme-tv.be.channels.xml --output=guide.xml --days=2 +// npm run grab -- --site=mon-programme-tv.be const { parser, url } = require('./mon-programme-tv.be.config.js') const fs = require('fs') diff --git a/sites/movistarplus.es/movistarplus.es.channels.xml b/sites/movistarplus.es/movistarplus.es.channels.xml index dddfa6f6..d3716a77 100644 --- a/sites/movistarplus.es/movistarplus.es.channels.xml +++ b/sites/movistarplus.es/movistarplus.es.channels.xml @@ -1,187 +1,185 @@ - - - #0 - 3/24 - 7 Televisión Región de Murcia - 8 TV Cádiz - Aljazeera English - Alquiler 1 - Alquiler HD - AMC España - Antena 3 - À Punt - Aragón TV - Aragón TV Internacional - Atreseries - AXN España - AXN White España - Baby TV Latin America - Barça TV - BBC World News Europe - Be Mad - betevé - Blaze España - Bloomberg TV Europe - Boing España - Bom Cine - Calle 13 - Canal 24 Horas - Canal Cocina - Canal Extremadura - Canal Extremadura Satélite - Canal Hollywood España - Canal Panda España - Canal Sur - Canal Sur Andalucía - Caza y Pesca - CGTN Español - Clan TVE - TV Castilla-La Mancha - CNBC Europe - CNC World English - CNN International Europe - Comedy Central España - Cosmopolitan TV España - Cuatro - Cubavisión Internacional - Dark - DAZN 1 España - DAZN 2 España - DAZN 3 España - DAZN 4 España - DAZN F1 - Decasa - Discovery Channel Iberia - Disney Channel España - Disney Junior España - Divinity - DKiss - DMAX España - DreamWorks TV - EITB Basque - El33/SX3 - El Garage TV - El Toro TV - Energy - Esport3 - ETB 1 - ETB 2 - ETB 3 - EuroNews Español - Eurosport 1 - Eurosport 2 - EWTN España - Latinoamérica - Factoria de Ficción - Fox News Channel - Fox España - France 24 Español - Canal Fútbol Replay - Galicia TV Europa - Gol - Historia España - Horse TV - IB3 Global - Iberalia TV - La 1 - La 2 - La 7 - La Ocho TV - LaOtra - La Resistencia - Las Estrellas Europa - La Sexta - Movistar Liga de Campeones 10 - Movistar Liga de Campeones 11 - Movistar Liga de Campeones 12 - Movistar Liga de Campeones 9 - Mega - Mezzo - Mezzo Live HD - Movistar Acción - Movistar Cine Español - Movistar Clásicos - Movistar Comedia - Movistar Deportes - Movistar Deportes 1 - Movistar Deportes 2 - Movistar Deportes 3 - Movistar Deportes 4 - Movistar Deportes 5 - Movistar Deportes 6 - Movistar Deportes 7 - Movistar Drama - Movistar Estrenos - Movistar Estrenos 2 - Movistar Fest - Movistar Golf - Movistar LaLiga - Movistar LaLiga 1 - Movistar LaLiga 10 - Movistar LaLiga 2 - Movistar LaLiga 3 - Movistar LaLiga 4 - Movistar LaLiga 5 - Movistar LaLiga 6 - Movistar LaLiga 7 - Movistar LaLiga 8 - Movistar LaLiga 9 - Movistar LaLiga UHD - Movistar Liga de Campeones - Movistar Liga de Campeones 1 - Movistar Liga de Campeones 2 - Movistar Liga de Campeones 3 - Movistar Liga de Campeones 4 - Movistar Liga de Campeones 5 - Movistar Liga de Campeones 6 - Movistar Liga de Campeones 7 - Movistar Liga de Campeones 8 - Movistar Liga de Campeones UHD - Movistar Series - Movistar Series 2 - MTV 00s - MTV España - National Geographic España - National Geographic Wild España - Nautical Channel - Negocios TV - Neox - NHK World Japan - Nickelodeon Iberia - Nick Jr España - Nova - Odisea - Movistar Los Oscar - Paramount Channel España - Playboy TV Iberia - RCN Nuestra Tele Internacional - Real Madrid TV Español - Sky News International - Sol Música - Somos - Stingray Classica - Sundance TV España - Syfy España - TCM España - Telecinco - Teledeporte - Telefe Internacional - Telemadrid - Telesur - Ten - TNT España - Toros TV - TPA 7 - Trece TV - TV3 - TV3CAT - TV5Monde Europe - TV Canaria - TV Chile - tvG2 - TVG Europa - U-Beat - #Vamos - Xtrm - - + + #0 + 3/24 + 7 Televisión Región de Murcia + 8 TV Cádiz + Aljazeera English + Alquiler 1 + Alquiler HD + AMC España + Antena 3 + À Punt + Aragón TV + Aragón TV Internacional + Atreseries + AXN España + AXN White España + Baby TV Latin America + Barça TV + BBC World News Europe + Be Mad + betevé + Blaze España + Bloomberg TV Europe + Boing España + Bom Cine + Calle 13 + Canal 24 Horas + Canal Cocina + Canal Extremadura + Canal Extremadura Satélite + Canal Hollywood España + Canal Panda España + Canal Sur + Canal Sur Andalucía + Caza y Pesca + CGTN Español + Clan TVE + TV Castilla-La Mancha + CNBC Europe + CNC World English + CNN International Europe + Comedy Central España + Cosmopolitan TV España + Cuatro + Cubavisión Internacional + Dark + DAZN 1 España + DAZN 2 España + DAZN 3 España + DAZN 4 España + DAZN F1 + Decasa + Discovery Channel Iberia + Disney Channel España + Disney Junior España + Divinity + DKiss + DMAX España + DreamWorks TV + EITB Basque + El33/SX3 + El Garage TV + El Toro TV + Energy + Esport3 + ETB 1 + ETB 2 + ETB 3 + EuroNews Español + Eurosport 1 + Eurosport 2 + EWTN España - Latinoamérica + Factoria de Ficción + Fox News Channel + Fox España + France 24 Español + Canal Fútbol Replay + Galicia TV Europa + Gol + Historia España + Horse TV + IB3 Global + Iberalia TV + La 1 + La 2 + La 7 + La Ocho TV + LaOtra + La Resistencia + Las Estrellas Europa + La Sexta + Movistar Liga de Campeones 10 + Movistar Liga de Campeones 11 + Movistar Liga de Campeones 12 + Movistar Liga de Campeones 9 + Mega + Mezzo + Mezzo Live HD + Movistar Acción + Movistar Cine Español + Movistar Clásicos + Movistar Comedia + Movistar Deportes + Movistar Deportes 1 + Movistar Deportes 2 + Movistar Deportes 3 + Movistar Deportes 4 + Movistar Deportes 5 + Movistar Deportes 6 + Movistar Deportes 7 + Movistar Drama + Movistar Estrenos + Movistar Estrenos 2 + Movistar Fest + Movistar Golf + Movistar LaLiga + Movistar LaLiga 1 + Movistar LaLiga 10 + Movistar LaLiga 2 + Movistar LaLiga 3 + Movistar LaLiga 4 + Movistar LaLiga 5 + Movistar LaLiga 6 + Movistar LaLiga 7 + Movistar LaLiga 8 + Movistar LaLiga 9 + Movistar LaLiga UHD + Movistar Liga de Campeones + Movistar Liga de Campeones 1 + Movistar Liga de Campeones 2 + Movistar Liga de Campeones 3 + Movistar Liga de Campeones 4 + Movistar Liga de Campeones 5 + Movistar Liga de Campeones 6 + Movistar Liga de Campeones 7 + Movistar Liga de Campeones 8 + Movistar Liga de Campeones UHD + Movistar Series + Movistar Series 2 + MTV 00s + MTV España + National Geographic España + National Geographic Wild España + Nautical Channel + Negocios TV + Neox + NHK World Japan + Nickelodeon Iberia + Nick Jr España + Nova + Odisea + Movistar Los Oscar + Paramount Channel España + Playboy TV Iberia + RCN Nuestra Tele Internacional + Real Madrid TV Español + Sky News International + Sol Música + Somos + Stingray Classica + Sundance TV España + Syfy España + TCM España + Telecinco + Teledeporte + Telefe Internacional + Telemadrid + Telesur + Ten + TNT España + Toros TV + TPA 7 + Trece TV + TV3 + TV3CAT + TV5Monde Europe + TV Canaria + TV Chile + tvG2 + TVG Europa + U-Beat + #Vamos + Xtrm + diff --git a/sites/movistarplus.es/movistarplus.es.config.js b/sites/movistarplus.es/movistarplus.es.config.js index fa341c73..d0c1f9ac 100644 --- a/sites/movistarplus.es/movistarplus.es.config.js +++ b/sites/movistarplus.es/movistarplus.es.config.js @@ -15,12 +15,16 @@ module.exports = { let startTime = DateTime.fromFormat( `${guideDate.format('YYYY-MM-DD')} ${item.HORA_INICIO}`, 'yyyy-MM-dd HH:mm', - { zone: 'Europe/Madrid' } + { + zone: 'Europe/Madrid' + } ).toUTC() let stopTime = DateTime.fromFormat( `${guideDate.format('YYYY-MM-DD')} ${item.HORA_FIN}`, 'yyyy-MM-dd HH:mm', - { zone: 'Europe/Madrid' } + { + zone: 'Europe/Madrid' + } ).toUTC() if (stopTime < startTime) { guideDate = guideDate.add(1, 'd') diff --git a/sites/movistarplus.es/movistarplus.es.test.js b/sites/movistarplus.es/movistarplus.es.test.js index 5d6915f8..88f665b2 100644 --- a/sites/movistarplus.es/movistarplus.es.test.js +++ b/sites/movistarplus.es/movistarplus.es.test.js @@ -1,6 +1,6 @@ -// npx epg-grabber --config=sites/movistarplus.es/movistarplus.es.config.js --channels=sites/movistarplus.es/movistarplus.es.channels.xml --output=guide.xml +// npm run grab -- --site=movistarplus.es -const { parser, url, request } = require('./movistarplus.es.config.js') +const { parser, url } = require('./movistarplus.es.config.js') const dayjs = require('dayjs') const utc = require('dayjs/plugin/utc') const customParseFormat = require('dayjs/plugin/customParseFormat') @@ -18,7 +18,8 @@ it('can generate valid url', () => { }) it('can parse response', () => { - const content = `{"success":"true","msg":"","data":{"TVE-CODE":{"DATOS_CADENA":{"CODIGO":"TVE","MARCA":"TVE","NOMBRE":"LA 1","URL":"https://www.movistarplus.es/canal?nombre=LA%2B1&id=TVE","DIAL_PRINCIPAL":["01"],"DIALES":[1],"UID":null,"CASID":null,"SERVICEUID":null,"SERVICEUID2":null,"SERVICEID":null,"ESVIRTUAL":null,"ESSATELITE":null,"UPSELLING":null,"puntoReproduccion":null},"PROGRAMAS":[{"DIRECTO":false,"TEMPORADA":"","TITULO":"Telediario Matinal","GENERO":"Información","CODIGO_GENERO":"IF","DURACION":150,"DURACION_VISUAL":150,"HORA_INICIO":"06:00","HORA_FIN":"08:30","ELEMENTO":"1709045","EVENTO":"99422566","ShowId":null,"x1":0,"x2":0,"Disponible":null,"URL":"https://www.movistarplus.es/ficha/telediario-matinal?tipo=R&id=99422566"},{"DIRECTO":false,"TEMPORADA":"","TITULO":"Las Claves del Siglo XXI: Episodio 8","GENERO":"Información","CODIGO_GENERO":"IF","DURACION":135,"DURACION_VISUAL":135,"HORA_INICIO":"22:15","HORA_FIN":"00:30","ELEMENTO":"2051356","EVENTO":"99422634","ShowId":null,"x1":0,"x2":0,"Disponible":null,"URL":"https://www.movistarplus.es/ficha/las-claves-del-siglo-xxi-t1/episodio-8?tipo=R&id=99422634"},{"DIRECTO":false,"TEMPORADA":"","TITULO":"Noticias 24H","GENERO":"Información","CODIGO_GENERO":"IF","DURACION":170,"DURACION_VISUAL":170,"HORA_INICIO":"03:10","HORA_FIN":"06:00","ELEMENTO":"518403","EVENTO":"99422646","ShowId":null,"x1":0,"x2":0,"Disponible":null,"URL":"https://www.movistarplus.es/ficha/noticias-24h?tipo=R&id=99422646"}]}}}` + const content = + '{"success":"true","msg":"","data":{"TVE-CODE":{"DATOS_CADENA":{"CODIGO":"TVE","MARCA":"TVE","NOMBRE":"LA 1","URL":"https://www.movistarplus.es/canal?nombre=LA%2B1&id=TVE","DIAL_PRINCIPAL":["01"],"DIALES":[1],"UID":null,"CASID":null,"SERVICEUID":null,"SERVICEUID2":null,"SERVICEID":null,"ESVIRTUAL":null,"ESSATELITE":null,"UPSELLING":null,"puntoReproduccion":null},"PROGRAMAS":[{"DIRECTO":false,"TEMPORADA":"","TITULO":"Telediario Matinal","GENERO":"Información","CODIGO_GENERO":"IF","DURACION":150,"DURACION_VISUAL":150,"HORA_INICIO":"06:00","HORA_FIN":"08:30","ELEMENTO":"1709045","EVENTO":"99422566","ShowId":null,"x1":0,"x2":0,"Disponible":null,"URL":"https://www.movistarplus.es/ficha/telediario-matinal?tipo=R&id=99422566"},{"DIRECTO":false,"TEMPORADA":"","TITULO":"Las Claves del Siglo XXI: Episodio 8","GENERO":"Información","CODIGO_GENERO":"IF","DURACION":135,"DURACION_VISUAL":135,"HORA_INICIO":"22:15","HORA_FIN":"00:30","ELEMENTO":"2051356","EVENTO":"99422634","ShowId":null,"x1":0,"x2":0,"Disponible":null,"URL":"https://www.movistarplus.es/ficha/las-claves-del-siglo-xxi-t1/episodio-8?tipo=R&id=99422634"},{"DIRECTO":false,"TEMPORADA":"","TITULO":"Noticias 24H","GENERO":"Información","CODIGO_GENERO":"IF","DURACION":170,"DURACION_VISUAL":170,"HORA_INICIO":"03:10","HORA_FIN":"06:00","ELEMENTO":"518403","EVENTO":"99422646","ShowId":null,"x1":0,"x2":0,"Disponible":null,"URL":"https://www.movistarplus.es/ficha/noticias-24h?tipo=R&id=99422646"}]}}}' const result = parser({ content, channel, date }).map(p => { p.start = p.start.toJSON() p.stop = p.stop.toJSON() @@ -29,19 +30,19 @@ it('can parse response', () => { start: '2022-03-11T05:00:00.000Z', stop: '2022-03-11T07:30:00.000Z', category: 'Información', - title: `Telediario Matinal` + title: 'Telediario Matinal' }, { start: '2022-03-11T21:15:00.000Z', stop: '2022-03-11T23:30:00.000Z', category: 'Información', - title: `Las Claves del Siglo XXI: Episodio 8` + title: 'Las Claves del Siglo XXI: Episodio 8' }, { start: '2022-03-12T02:10:00.000Z', stop: '2022-03-12T05:00:00.000Z', category: 'Información', - title: `Noticias 24H` + title: 'Noticias 24H' } ]) }) @@ -50,7 +51,7 @@ it('can handle empty guide', () => { const result = parser({ date, channel, - content: `{"success":"true","msg":"","data":{}}` + content: '{"success":"true","msg":"","data":{}}' }) expect(result).toMatchObject([]) }) diff --git a/sites/mtel.ba/mtel.ba.channels.xml b/sites/mtel.ba/mtel.ba.channels.xml index 64c35954..d7dfbf91 100644 --- a/sites/mtel.ba/mtel.ba.channels.xml +++ b/sites/mtel.ba/mtel.ba.channels.xml @@ -1,173 +1,171 @@ - - - - - 101 TV - 24 Kitchen - Agro TV - Aljazeera Balkans - Amari TV - Animal Planet - Arena Esport - Arena Fight - Arena Sport 1 - Arena Sport 1x2 - Arena Sport 2 - Arena Sport 3 - Arena Sport 4 - B92 - Balkan Trip - BHT 1 - BN Music - BN - Boomerang Central & Eastern Europe - Cafe & Club - CBS Reality Europe - CineStar TV 1 Srbija - CineStar TV Action Srbija - CineStar TV Comedy - CineStar TV Fantasy - Decija TV - Dexy TV - Discovery Channel Srbija - Discovery Science - Dizi - DM Sat - Dox TV - EG Melody - EX YU Melody - FashionTV Europe - FilmBox Arthouse Worldwide - FilmBox Extra HD Adria - FilmBox Stars Adria - Film Klub - Folk Melody - Food Network EMEA - Fox Srbija - France 24 Français - Happy Reality 1 - Happy Reality 2 - Hayatovci - Hayat Plus - Hits Melody - HRT 1 - HRT 2 - Hype TV - Investigation Discovery Europe - Jeka - K3 - K CN 3 - Kitchen TV - Klasik TV - Kurir TV - Kuvo TV - Melos TV - Muzzik - National Geographic - National Geographic Wild - Nicktoons Adria - OTV Valentino - Pink Action - Pink BH - Pink Classic - Pink Comedy - Pink Crime & Mystery - Pink Extra - Pink Family - Pink Film - Pink Horror - Pink Koncert - Pink Kuvar - Pink Movies - Pink Pedia - Pink Reality - Pink Sci-Fi & Fantasy - Pink Srbija - Pink Serije - Pink Show - Pink Soap - Pink Style - Pink Thriller - Pink Western - Pink World - Pink Zabava - Pop Melody - Prva Files - Prva Kick - Prva Life - Prva Max - Prva Srpska TV - Prva World - Red TV - Rock & Roll - RTL Hrvatska - RTL KETTŐ - RTL Kockica - RTL Living Hrvatska - RTR Planeta - RTRS TV - RTS 2 - RTS Klasika - RTS Kolo - RTS Nauka - RTS Poletarac - RTS Svet - RTV 2 - Rossiya 24 - Sat. 1 Deutschland - SOS Kanal Plus - Super Sat - Superstar - Tanjug TV - Tb1 - TLC Balkan - Toxic Folk - Toxic TV - Travel Channel Europe - Tropik TV - TV Arena - TV Niksic - TV One - TV Partizan - TV Simić - Viasat Explore East - Viasat History - Viasat Nature East - World Wild Muzzik - Zdravlje TV - Zvezda TV - 360 Tune Box - Adult Channel 1 - Adult Channel 2 - Adult Channel 3 - Adult Channel 4 - Adult Channel 5 - Adult Channel 6 - Adult Channel 7 - Babes TV - Baby TV Europe - Bang U - CGTN - CNN International Europe - DocuBox HD - English Club TV - Erotic - Erotic 2 - Erotic 3 - Erotic 4 - Erotic 7 - Erotic 8 - Erox HD - Eroxxx HD - Extreme Sports Channel - JimJam Europe - LFC TV - MTV 00s - MTV 80s - MTV Global - MTV Hits Europe - Reality Kings TV - RT News - - \ No newline at end of file + + + + 101 TV + 24 Kitchen + Agro TV + Aljazeera Balkans + Amari TV + Animal Planet + Arena Esport + Arena Fight + Arena Sport 1 + Arena Sport 1x2 + Arena Sport 2 + Arena Sport 3 + Arena Sport 4 + B92 + Balkan Trip + BHT 1 + BN Music + BN + Boomerang Central & Eastern Europe + Cafe & Club + CBS Reality Europe + CineStar TV 1 Srbija + CineStar TV Action Srbija + CineStar TV Comedy + CineStar TV Fantasy + Decija TV + Dexy TV + Discovery Channel Srbija + Discovery Science + Dizi + DM Sat + Dox TV + EG Melody + EX YU Melody + FashionTV Europe + FilmBox Arthouse Worldwide + FilmBox Extra HD Adria + FilmBox Stars Adria + Film Klub + Folk Melody + Food Network EMEA + Fox Srbija + France 24 Français + Happy Reality 1 + Happy Reality 2 + Hayatovci + Hayat Plus + Hits Melody + HRT 1 + HRT 2 + Hype TV + Investigation Discovery Europe + Jeka + K3 + K CN 3 + Kitchen TV + Klasik TV + Kurir TV + Kuvo TV + Melos TV + Muzzik + National Geographic + National Geographic Wild + Nicktoons Adria + OTV Valentino + Pink Action + Pink BH + Pink Classic + Pink Comedy + Pink Crime & Mystery + Pink Extra + Pink Family + Pink Film + Pink Horror + Pink Koncert + Pink Kuvar + Pink Movies + Pink Pedia + Pink Reality + Pink Sci-Fi & Fantasy + Pink Srbija + Pink Serije + Pink Show + Pink Soap + Pink Style + Pink Thriller + Pink Western + Pink World + Pink Zabava + Pop Melody + Prva Files + Prva Kick + Prva Life + Prva Max + Prva Srpska TV + Prva World + Red TV + Rock & Roll + RTL Hrvatska + RTL KETTŐ + RTL Kockica + RTL Living Hrvatska + RTR Planeta + RTRS TV + RTS 2 + RTS Klasika + RTS Kolo + RTS Nauka + RTS Poletarac + RTS Svet + RTV 2 + Rossiya 24 + Sat. 1 Deutschland + SOS Kanal Plus + Super Sat + Superstar + Tanjug TV + Tb1 + TLC Balkan + Toxic Folk + Toxic TV + Travel Channel Europe + Tropik TV + TV Arena + TV Niksic + TV One + TV Partizan + TV Simić + Viasat Explore East + Viasat History + Viasat Nature East + World Wild Muzzik + Zdravlje TV + Zvezda TV + 360 Tune Box + Adult Channel 1 + Adult Channel 2 + Adult Channel 3 + Adult Channel 4 + Adult Channel 5 + Adult Channel 6 + Adult Channel 7 + Babes TV + Baby TV Europe + Bang U + CGTN + CNN International Europe + DocuBox HD + English Club TV + Erotic + Erotic 2 + Erotic 3 + Erotic 4 + Erotic 7 + Erotic 8 + Erox HD + Eroxxx HD + Extreme Sports Channel + JimJam Europe + LFC TV + MTV 00s + MTV 80s + MTV Global + MTV Hits Europe + Reality Kings TV + RT News + \ No newline at end of file diff --git a/sites/mtel.ba/mtel.ba.config.js b/sites/mtel.ba/mtel.ba.config.js index 7c50b8a2..33f13ab4 100644 --- a/sites/mtel.ba/mtel.ba.config.js +++ b/sites/mtel.ba/mtel.ba.config.js @@ -44,7 +44,7 @@ function parseStop(item) { } function parseContent(content, channel) { - const [_, channelId] = channel.site_id.split('#') + const [, channelId] = channel.site_id.split('#') const data = JSON.parse(content) if (!data || !Array.isArray(data.channels)) return null diff --git a/sites/mtel.ba/mtel.ba.test.js b/sites/mtel.ba/mtel.ba.test.js index f6f7cf74..765979ee 100644 --- a/sites/mtel.ba/mtel.ba.test.js +++ b/sites/mtel.ba/mtel.ba.test.js @@ -1,4 +1,4 @@ -// npx epg-grabber --config=sites/mtel.ba/mtel.ba.config.js --channels=sites/mtel.ba/mtel.ba.channels.xml --output=guide.xml --days=2 +// npm run grab -- --site=mtel.ba const { parser, url, request } = require('./mtel.ba.config.js') const dayjs = require('dayjs') @@ -12,7 +12,8 @@ const channel = { site_id: '001#11', xmltv_id: 'RTRSTV.ba' } -const content = `{"page":0,"total_pages":1,"date":"2021-11-10","channels":[{"id":"11","name":"RTRS","description":null,"link":null,"image":"https:\/\/mtel.ba\/oec\/images\/tv_channels\/c3556aa629b00325aaaea622abfb1070.png","position":"001","items":[{"id_channel":"11","title":"\u0160uma","description":"Krajem decembra 1947. godine jugoslovenski predsjednik Josip Broz Tito prvi put je posjetio Rumuniju. Da bi u\u010dvrstili novo socijalisti\u010dko prijateljstvo, rumunski zvani\u010dnici su poklonili Titu sliku velikog rumunskog umjetnika Jona Andreskua pod nazivom \u0160uma. Mnogo godina kasnije ta slika je umje\u0161ana u napetu \u0161pijunsku pri\u010du i otkriva tajnu koja \u0107e uzdrmati temelje i Jugoslavije i Rumunije. Film je svjedok kompleksnosti i raznovrsnosti glasova koji \u010dine ono \u0161to zovemo stvarno\u0161\u0107u.","start":"00:00:00","duration":"46.00","full_start":"2021-11-09 23:29:00","full_end":"2021-11-10 00:46:00","image":"https:\/\/mtel.ba\/oec\/images\/epg\/60881491.jpg","category":"Televizijski film","subcategory":"Dokumentarna drama"},{"id_channel":"11","title":"Nema informacija o programu","description":"","start":"07:32:00","duration":"988.00","full_start":"2021-11-10 07:32:00","full_end":"2021-11-10 24:00:00","image":"","category":"","subcategory":""}]}]}` +const content = + '{"page":0,"total_pages":1,"date":"2021-11-10","channels":[{"id":"11","name":"RTRS","description":null,"link":null,"image":"https://mtel.ba/oec/images/tv_channels/c3556aa629b00325aaaea622abfb1070.png","position":"001","items":[{"id_channel":"11","title":"\u0160uma","description":"Krajem decembra 1947. godine jugoslovenski predsjednik Josip Broz Tito prvi put je posjetio Rumuniju. Da bi u\u010dvrstili novo socijalisti\u010dko prijateljstvo, rumunski zvani\u010dnici su poklonili Titu sliku velikog rumunskog umjetnika Jona Andreskua pod nazivom \u0160uma. Mnogo godina kasnije ta slika je umje\u0161ana u napetu \u0161pijunsku pri\u010du i otkriva tajnu koja \u0107e uzdrmati temelje i Jugoslavije i Rumunije. Film je svjedok kompleksnosti i raznovrsnosti glasova koji \u010dine ono \u0161to zovemo stvarno\u0161\u0107u.","start":"00:00:00","duration":"46.00","full_start":"2021-11-09 23:29:00","full_end":"2021-11-10 00:46:00","image":"https://mtel.ba/oec/images/epg/60881491.jpg","category":"Televizijski film","subcategory":"Dokumentarna drama"},{"id_channel":"11","title":"Nema informacija o programu","description":"","start":"07:32:00","duration":"988.00","full_start":"2021-11-10 07:32:00","full_end":"2021-11-10 24:00:00","image":"","category":"","subcategory":""}]}]}' it('can generate valid url', () => { expect(url({ channel, date })).toBe( @@ -34,7 +35,8 @@ it('can parse response', () => { stop: '2021-11-09T23:46:00.000Z', title: 'Šuma', icon: 'https://mtel.ba/oec/images/epg/60881491.jpg', - description: `Krajem decembra 1947. godine jugoslovenski predsjednik Josip Broz Tito prvi put je posjetio Rumuniju. Da bi učvrstili novo socijalističko prijateljstvo, rumunski zvaničnici su poklonili Titu sliku velikog rumunskog umjetnika Jona Andreskua pod nazivom Šuma. Mnogo godina kasnije ta slika je umješana u napetu špijunsku priču i otkriva tajnu koja će uzdrmati temelje i Jugoslavije i Rumunije. Film je svjedok kompleksnosti i raznovrsnosti glasova koji čine ono što zovemo stvarnošću.`, + description: + 'Krajem decembra 1947. godine jugoslovenski predsjednik Josip Broz Tito prvi put je posjetio Rumuniju. Da bi učvrstili novo socijalističko prijateljstvo, rumunski zvaničnici su poklonili Titu sliku velikog rumunskog umjetnika Jona Andreskua pod nazivom Šuma. Mnogo godina kasnije ta slika je umješana u napetu špijunsku priču i otkriva tajnu koja će uzdrmati temelje i Jugoslavije i Rumunije. Film je svjedok kompleksnosti i raznovrsnosti glasova koji čine ono što zovemo stvarnošću.', category: 'Televizijski film' } ]) @@ -44,7 +46,8 @@ it('can handle empty guide', () => { const result = parser({ date, channel, - content: `{"message":"Tra\u017eeni termin nije prona\u0111en.\u003Cbr\u003E\u003Cbr\u003EProverite da li ste upisali pravilno ili poku\u0161ajte sa nekim drugim terminom."}` + content: + '{"message":"Tra\u017eeni termin nije prona\u0111en.\u003Cbr\u003E\u003Cbr\u003EProverite da li ste upisali pravilno ili poku\u0161ajte sa nekim drugim terminom."}' }) expect(result).toMatchObject([]) }) diff --git a/sites/mts.rs/mts.rs.channels.xml b/sites/mts.rs/mts.rs.channels.xml index bf89733c..4545b823 100644 --- a/sites/mts.rs/mts.rs.channels.xml +++ b/sites/mts.rs/mts.rs.channels.xml @@ -1,353 +1,351 @@ - - - - - 101 TV - 24 Kitchen - 360 Tune Box - Agro TV - Aljazeera Balkans - Alternativna TV - Animal Planet - Arena Esport - Arena Fight - Arena Premium 1 - Arena Sport 1 - Arena Sport 1x2 - Arena Premium 2 - Arena Sport 2 - Arena Premium 3 - Arena Sport 3 - Arena Sport 4 - Arena Sport 5 - Arena Sport 6 - Arena Sport 7 - Arena Sport 8 - AXN - AXN Spin - B92 - Baby TV Europe - Balkan Trip - Balkan TV - BBC Earth - Bloomberg TV - BN Music - BN - Boomerang - Bravo Music - B TV - Cafe & Club - CBS Reality - CCTV 4 Europe - CGTN - CineStar TV 1 Srbija - CineStar TV Action Srbija - CineStar TV Comedy - CineStar TV Fantasy - Club MTV - CNBC Europe - CNN International Europe - Cool TV - Crime + Investigation UK - Da Vinci - Decija TV - Dexy TV - Discovery Channel Srbija - Discovery Science - Disney Channel Polska - Dizi - DM Sat - DocuBox HD - Dox TV - Duck TV SD - Duna TV - Dunav TV - Duna World - eduTV - E! Europe - Epic Drama - EuroNews English - EuroNews Serbia - Eurosport 1 - Eurosport 2 - Extreme Sports Channel - Face TV - FashionBox HD - Fashion TV Europe - Fast & FunBox HD - Federalna TV - FightBox HD - Fight Network - Film 4 - FilmBox Arthouse Worldwide - FilmBox Extra HD Adria - FilmBox Stars Adria - Film Klub - Film Klub Extra - Film + Hungary - Food Network EMEA - Fox Crime Srbija - Fox Life Srbija - Fox Movies Srbija - Fox News Channel - Fox Srbija - France 24 English - Gametoon - Gradska M TV - Ha Ha - Happy - Happy Reality 1 - Happy Reality 2 - Hayat - Hayat Folk - Hayat Music - Hayatovci - Hayat Plus - HGTV Pan Regional - History 2 Polska - Humana TV Plus - Hype TV - Investigation Discovery Europe - Jeka - JimJam Europe - K1 - K23 TV - K3 - KA TV - Kazbuka - K CN 1 - K CN 2 - K CN 3 - K CN Istok - K CN K - K CN Raška - K CN Zapad - Kitchen TV - Klasik TV - Kurir TV - Kuvo TV - LFC TV - Lol - M1 - M2 - M4 Sport - M5 - Minimax Romania - Mostnet - Motorvision TV - MTV 00s - MTV 80s - MTV 90s - MTV Global - MTV Hits Europe - Muzsika TV - Muzzik - National Geographic - Nat Geo Wild - NBA TV - Nickelodeon - Nick Jr - Nicktoons Adria - TV Nova - Novosadska TV - NTV - OBN - OKK - Pannon TV - Pink Action - Pink Classic - Pink Comedy - Pink Crime & Mystery - Pink Extra - Pink Family - Pink Fashion - Pink Film - Pink Folk 1 - Pink Folk 2 - Pink Hits - Pink Hits 2 - Pink Horror - Pink Kids - Pink Koncert - Pink Kuvar - Pink M - Pink Movies - Pink Music - Pink Music 2 - Pink n Roll - Pink Pedia - Pink Plus - Pink Premium - Pink Reality - Pink Romance - Pink Sci-Fi & Fantasy - Pink Srbija - Pink Serije - Pink Show - Pink Soap - Pink Style - Pink Super Kids - Pink Thriller - Pink Western - Pink World - Pink Zabava - Prva Files - Prva Kick - Prva Life - Prva Max - Prva Srpska TV - Prva TV Crna Gora - Prva World - Red TV - Rock & Roll - RT News - RT Documentary - RTL Hrvatska - RTL Croatia World - RTL Deutschland - RTL Gold - RTL HÁROM - RTL - RTL KETTŐ - RTL Kockica - RTP - RTR Planeta - RTRS TV - RTS 1 - RTS 2 - RTS 3 - RTS Drama - RTS Klasika - RTS Kolo - RTS Muzika - RTS Nauka - RTS Poletarac - RTS Trezor - RTS Zivot - RTV 1 - RTV 2 - RTV Bap - RTV Bosphorus - RTV Melos - RTV SP - RTV Sreće - RTV Subotica - RTV Šumadija - Rossiya 24 - Sandžačka TV Mreža - Sandžak TV - SAT TV - Scifi Srbija - Sorozat + - SOS Kanal Plus - Sremska TV - Story 4 - Studio B - Super D+ - Super Sat - Superstar 2 - Superstar - Super TV 2 - T1 - Tanjug TV - Telebet - Televizija Fokus - Televizija Plus - TLC Balkan - TMS Televizija Telemark - Toxic Folk - Toxic Rap - Toxic TV - Travel Channel Europe - Turizam TV - TV 1000 Balkan - TV 2 - TV 4S - TV5Monde Europe - TV 5 Uzice - TV Apatin - TV AS - TV Bačka - TV Banat - TV Bečej - TV Belle Amie - TV Bor - TV Bujanovac - TV Caribrod - TVCG Sat - TV Cink - TV City - TV Delta - TV Diskos - TV DR - TV Duga + - TV Fruška Gora - TV Galaksija 32 - TV Gem - TV GM Plus - TV Hit Plus Batočina - TV Hram - TV Info 24 Plus - TV Istok - TV Jasenica - TV K-1 - TV K9 - TV Kanal 25 - TV Kanal M - TV Kikinda - TV Kladovo - TV Koreni - TV Kragujevac - TV Kraljevo - TV Kruševac - TV Lav - TV Lav Plus - TV Leskovac - TV Lotel Plus - TV Mag - TV Marš - TV Mix - TV Most - TV Novi Bečej - TV Novi Pazar - TV Palma Plus - TV Pančevo - TV Partizan - TV P Canal - TV Petrovec - TV Pirot - TV Podrinje - TV Požega - TV Priboj - TV Q - TV Rača - TV Ras - TV Ritam - TV Šabac - TV Santos - TV Skay - TV Sunce - TV Trans - TV Trstenik - VA Plus - TV Vranje - TV Vrnjačka Banja - TV Vujic - TV YU Eco - TV Zlatar - TV Zona Plus - Vesti - Viasat Explore East - Viasat History - Viasat Nature East - Vranjska Plus - World Wild Muzzik - Zadruga 1 - Zadruga 2 - Zadruga 3 - Zadruga 4 - Zdravlje TV - Zvezda TV - - \ No newline at end of file + + + + 101 TV + 24 Kitchen + 360 Tune Box + Agro TV + Aljazeera Balkans + Alternativna TV + Animal Planet + Arena Esport + Arena Fight + Arena Premium 1 + Arena Sport 1 + Arena Sport 1x2 + Arena Premium 2 + Arena Sport 2 + Arena Premium 3 + Arena Sport 3 + Arena Sport 4 + Arena Sport 5 + Arena Sport 6 + Arena Sport 7 + Arena Sport 8 + AXN + AXN Spin + B92 + Baby TV Europe + Balkan Trip + Balkan TV + BBC Earth + Bloomberg TV + BN Music + BN + Boomerang + Bravo Music + B TV + Cafe & Club + CBS Reality + CCTV 4 Europe + CGTN + CineStar TV 1 Srbija + CineStar TV Action Srbija + CineStar TV Comedy + CineStar TV Fantasy + Club MTV + CNBC Europe + CNN International Europe + Cool TV + Crime + Investigation UK + Da Vinci + Decija TV + Dexy TV + Discovery Channel Srbija + Discovery Science + Disney Channel Polska + Dizi + DM Sat + DocuBox HD + Dox TV + Duck TV SD + Duna TV + Dunav TV + Duna World + eduTV + E! Europe + Epic Drama + EuroNews English + EuroNews Serbia + Eurosport 1 + Eurosport 2 + Extreme Sports Channel + Face TV + FashionBox HD + Fashion TV Europe + Fast & FunBox HD + Federalna TV + FightBox HD + Fight Network + Film 4 + FilmBox Arthouse Worldwide + FilmBox Extra HD Adria + FilmBox Stars Adria + Film Klub + Film Klub Extra + Film + Hungary + Food Network EMEA + Fox Crime Srbija + Fox Life Srbija + Fox Movies Srbija + Fox News Channel + Fox Srbija + France 24 English + Gametoon + Gradska M TV + Ha Ha + Happy + Happy Reality 1 + Happy Reality 2 + Hayat + Hayat Folk + Hayat Music + Hayatovci + Hayat Plus + HGTV Pan Regional + History 2 Polska + Humana TV Plus + Hype TV + Investigation Discovery Europe + Jeka + JimJam Europe + K1 + K23 TV + K3 + KA TV + Kazbuka + K CN 1 + K CN 2 + K CN 3 + K CN Istok + K CN K + K CN Raška + K CN Zapad + Kitchen TV + Klasik TV + Kurir TV + Kuvo TV + LFC TV + Lol + M1 + M2 + M4 Sport + M5 + Minimax Romania + Mostnet + Motorvision TV + MTV 00s + MTV 80s + MTV 90s + MTV Global + MTV Hits Europe + Muzsika TV + Muzzik + National Geographic + Nat Geo Wild + NBA TV + Nickelodeon + Nick Jr + Nicktoons Adria + TV Nova + Novosadska TV + NTV + OBN + OKK + Pannon TV + Pink Action + Pink Classic + Pink Comedy + Pink Crime & Mystery + Pink Extra + Pink Family + Pink Fashion + Pink Film + Pink Folk 1 + Pink Folk 2 + Pink Hits + Pink Hits 2 + Pink Horror + Pink Kids + Pink Koncert + Pink Kuvar + Pink M + Pink Movies + Pink Music + Pink Music 2 + Pink n Roll + Pink Pedia + Pink Plus + Pink Premium + Pink Reality + Pink Romance + Pink Sci-Fi & Fantasy + Pink Srbija + Pink Serije + Pink Show + Pink Soap + Pink Style + Pink Super Kids + Pink Thriller + Pink Western + Pink World + Pink Zabava + Prva Files + Prva Kick + Prva Life + Prva Max + Prva Srpska TV + Prva TV Crna Gora + Prva World + Red TV + Rock & Roll + RT News + RT Documentary + RTL Hrvatska + RTL Croatia World + RTL Deutschland + RTL Gold + RTL HÁROM + RTL + RTL KETTŐ + RTL Kockica + RTP + RTR Planeta + RTRS TV + RTS 1 + RTS 2 + RTS 3 + RTS Drama + RTS Klasika + RTS Kolo + RTS Muzika + RTS Nauka + RTS Poletarac + RTS Trezor + RTS Zivot + RTV 1 + RTV 2 + RTV Bap + RTV Bosphorus + RTV Melos + RTV SP + RTV Sreće + RTV Subotica + RTV Šumadija + Rossiya 24 + Sandžačka TV Mreža + Sandžak TV + SAT TV + Scifi Srbija + Sorozat + + SOS Kanal Plus + Sremska TV + Story 4 + Studio B + Super D+ + Super Sat + Superstar 2 + Superstar + Super TV 2 + T1 + Tanjug TV + Telebet + Televizija Fokus + Televizija Plus + TLC Balkan + TMS Televizija Telemark + Toxic Folk + Toxic Rap + Toxic TV + Travel Channel Europe + Turizam TV + TV 1000 Balkan + TV 2 + TV 4S + TV5Monde Europe + TV 5 Uzice + TV Apatin + TV AS + TV Bačka + TV Banat + TV Bečej + TV Belle Amie + TV Bor + TV Bujanovac + TV Caribrod + TVCG Sat + TV Cink + TV City + TV Delta + TV Diskos + TV DR + TV Duga + + TV Fruška Gora + TV Galaksija 32 + TV Gem + TV GM Plus + TV Hit Plus Batočina + TV Hram + TV Info 24 Plus + TV Istok + TV Jasenica + TV K-1 + TV K9 + TV Kanal 25 + TV Kanal M + TV Kikinda + TV Kladovo + TV Koreni + TV Kragujevac + TV Kraljevo + TV Kruševac + TV Lav + TV Lav Plus + TV Leskovac + TV Lotel Plus + TV Mag + TV Marš + TV Mix + TV Most + TV Novi Bečej + TV Novi Pazar + TV Palma Plus + TV Pančevo + TV Partizan + TV P Canal + TV Petrovec + TV Pirot + TV Podrinje + TV Požega + TV Priboj + TV Q + TV Rača + TV Ras + TV Ritam + TV Šabac + TV Santos + TV Skay + TV Sunce + TV Trans + TV Trstenik + VA Plus + TV Vranje + TV Vrnjačka Banja + TV Vujic + TV YU Eco + TV Zlatar + TV Zona Plus + Vesti + Viasat Explore East + Viasat History + Viasat Nature East + Vranjska Plus + World Wild Muzzik + Zadruga 1 + Zadruga 2 + Zadruga 3 + Zadruga 4 + Zdravlje TV + Zvezda TV + \ No newline at end of file diff --git a/sites/mts.rs/mts.rs.config.js b/sites/mts.rs/mts.rs.config.js index 89e488f4..00d3b552 100644 --- a/sites/mts.rs/mts.rs.config.js +++ b/sites/mts.rs/mts.rs.config.js @@ -18,7 +18,7 @@ module.exports = { 'X-Requested-With': 'XMLHttpRequest' } }, - parser: function ({ content, channel, date }) { + parser: function ({ content, channel }) { let programs = [] const data = parseContent(content, channel) const items = parseItems(data) @@ -38,21 +38,23 @@ module.exports = { } function parseContent(content, channel) { - const [_, site_id] = channel.site_id.split('#') + const [, site_id] = channel.site_id.split('#') let data try { data = JSON.parse(content) - } catch (e) {} + } catch (error) { + console.log(error) + } if (!data || !data.channels || !data.channels.length) return null return data.channels.find(c => c.id === site_id) || null } -function parseStart(item, date) { +function parseStart(item) { return dayjs.tz(item.full_start, 'Europe/Belgrade') } -function parseStop(item, date) { +function parseStop(item) { return dayjs.tz(item.full_end, 'Europe/Belgrade') } diff --git a/sites/mts.rs/mts.rs.test.js b/sites/mts.rs/mts.rs.test.js index e3f62c5b..87ff70cc 100644 --- a/sites/mts.rs/mts.rs.test.js +++ b/sites/mts.rs/mts.rs.test.js @@ -1,4 +1,4 @@ -// npx epg-grabber --config=sites/mts.rs/mts.rs.config.js --channels=sites/mts.rs/mts.rs.channels.xml --output=guide.xml --days=2 +// npm run grab -- --site=mts.rs const { parser, url, request } = require('./mts.rs.config.js') const dayjs = require('dayjs') @@ -12,7 +12,8 @@ const channel = { site_id: '101#597', xmltv_id: 'RTS1.rs' } -const content = `{"page":0,"total_pages":1,"date":"2021-11-07","channels":[{"id":"597","name":"RTS 1","description":null,"link":null,"image":"https:\/\/mts.rs\/oec\/images\/tv_channels\/904ddd8cd6720a4a1c23eae513b5b957.jpg","position":"101","positions":"101","items":[{"id_channel":"597","title":"Zaboravljeni zlo\u010din","description":"Novinarka-fotoreporter, D\u017ein, istra\u017euje okrutno i senzacionalno, nere\u0161eno ubistvo sekirom iz davne 1873. godine. Ubistvo koje koincidira sa nedavnim identi\u010dnim brutalnim dvostrukim ubistvom. Zaplet se odvija izme\u0111u pri\u010de o\u010devica iz toga doba - pri\u010de iz novinske arhive i D\u017einine privatne borbe sa ljubomorom i sumnjom koje prate njen brak.","start":"00:00:00","duration":"103.00","full_start":"2021-11-06 23:44:00","full_end":"2021-11-07 01:43:00","image":"https:\/\/mts.rs\/oec\/images\/epg\/2_abb81cc24d8ce957eece50f991a31e59780e4e53_E7D8ECDE568E84E3C86CCDBDB647355E.jpg","category":"Bioskopski film","subcategory":""}]}]}` +const content = + '{"page":0,"total_pages":1,"date":"2021-11-07","channels":[{"id":"597","name":"RTS 1","description":null,"link":null,"image":"https://mts.rs/oec/images/tv_channels/904ddd8cd6720a4a1c23eae513b5b957.jpg","position":"101","positions":"101","items":[{"id_channel":"597","title":"Zaboravljeni zlo\u010din","description":"Novinarka-fotoreporter, D\u017ein, istra\u017euje okrutno i senzacionalno, nere\u0161eno ubistvo sekirom iz davne 1873. godine. Ubistvo koje koincidira sa nedavnim identi\u010dnim brutalnim dvostrukim ubistvom. Zaplet se odvija izme\u0111u pri\u010de o\u010devica iz toga doba - pri\u010de iz novinske arhive i D\u017einine privatne borbe sa ljubomorom i sumnjom koje prate njen brak.","start":"00:00:00","duration":"103.00","full_start":"2021-11-06 23:44:00","full_end":"2021-11-07 01:43:00","image":"https://mts.rs/oec/images/epg/2_abb81cc24d8ce957eece50f991a31e59780e4e53_E7D8ECDE568E84E3C86CCDBDB647355E.jpg","category":"Bioskopski film","subcategory":""}]}]}' it('can generate valid url', () => { const result = url({ date, channel }) @@ -38,7 +39,8 @@ it('can parse response', () => { title: 'Zaboravljeni zlo\u010din', category: 'Bioskopski film', icon: 'https://mts.rs/oec/images/epg/2_abb81cc24d8ce957eece50f991a31e59780e4e53_E7D8ECDE568E84E3C86CCDBDB647355E.jpg', - description: `Novinarka-fotoreporter, D\u017ein, istra\u017euje okrutno i senzacionalno, nere\u0161eno ubistvo sekirom iz davne 1873. godine. Ubistvo koje koincidira sa nedavnim identi\u010dnim brutalnim dvostrukim ubistvom. Zaplet se odvija izme\u0111u pri\u010de o\u010devica iz toga doba - pri\u010de iz novinske arhive i D\u017einine privatne borbe sa ljubomorom i sumnjom koje prate njen brak.` + description: + 'Novinarka-fotoreporter, D\u017ein, istra\u017euje okrutno i senzacionalno, nere\u0161eno ubistvo sekirom iz davne 1873. godine. Ubistvo koje koincidira sa nedavnim identi\u010dnim brutalnim dvostrukim ubistvom. Zaplet se odvija izme\u0111u pri\u010de o\u010devica iz toga doba - pri\u010de iz novinske arhive i D\u017einine privatne borbe sa ljubomorom i sumnjom koje prate njen brak.' } ]) }) @@ -47,7 +49,7 @@ it('can handle empty guide', () => { const result = parser({ date, channel, - content: `{"message":"Nema rezultata."}` + content: '{"message":"Nema rezultata."}' }) expect(result).toMatchObject([]) }) diff --git a/sites/mujtvprogram.cz/mujtvprogram.cz.channels.xml b/sites/mujtvprogram.cz/mujtvprogram.cz.channels.xml index 21bf6f62..ab8bef3f 100644 --- a/sites/mujtvprogram.cz/mujtvprogram.cz.channels.xml +++ b/sites/mujtvprogram.cz/mujtvprogram.cz.channels.xml @@ -1,274 +1,272 @@ - - - 360TuneBox - 3SAT - Adult Channel - Al Jazeera - AMC - - Animal Planet - - ARD - Das Erste - Arena Sport 1 HD - Arena Sport 2 - ARTE - Auto Motor Sport HD - AXN - - AXN Black - - AXN White - BabyTV - Barrandov Krimi - BBC World News HD - Bloomberg Europe - Blue Hustler - Boomerang - BoomerangEMEA.us - - Brazzers TV Europe - Canal 24 Horas - CANAL+ Domo - Cartoon Network - CBS Reality - - Cinemax - - Cinemax2 - Club MTV Europe - CNBC Europe - CNN International Europe - CNN Prima NEWS HD - Cool TV - Crime & Investigation - CS Film - - CS History - CS Horror - CS Mystery - ČT :D HD - ČT art HD - ČT Sport HD - - ČT1 HD - - ČT2 HD - ČT24 HD - ČT3 HD - Deutsche Welle English - Deluxe Music - Discovery Channel - - Discovery Science - Disney Channel - Disney Channel - Disney Junior - DMAX - DocuBox - Dorcel TV - Dorcel XXX - Duck TV - Duck TV - Duna - Duna SK - Dvojka HD - E! Europe - English Club TV - Epic Drama HD - Erox - Eroxxx - EuroNews - Eurosport 1 - - Eurosport 2 - - Extreme Sports Channel - Fashion TV Europe - FashionBox.nl - Fast&FunBox - FightBox - Film Europe HD - - Film Europe+ HD - Film+ - - FilmBox - - FilmBox Extra HD - - FilmBox Family - - - FilmBox Premium HD - FilmBox Premium - FilmBox Stars - - Fishing and Hunting - - Food Network - France 24 HD - France 24 - Ginx eSports TV - Golf Channel - HBO - - HBO2 - - HBO3 - HBO3 - History HD - - HTV1 - HTV2 - Hustler - Hustler HD - Investigation Discovery - Jednotka HD - JimJam - JOJ Cinema HD - JOJ Family HD - JOJCinema.sk - Jojko.sk - JOJ Plus - JOJSport.sk - JOJWAU.sk - Kabel1 - KiKA - Kino Barrandov - LALA TV - LEO TV - Love Nature HD - M1 - M2 - Markiza Dajto - Markíza International - Markíza - Markíza Doma - MDR - Mezzo HD - Mezzo Live HD - Minimax - Mňam TV - MnauTV.cz - - MTV 00s - MTV 80s - MTV 90s - MTV - MTVHitsEurope.uk - MTV Live - Music Box - Náš region TV - National Geographic - - - National Geographic Wild - - - Nick Jr Czech - Nickelodeon - Nicktoons - Nova Action HD - Nova Cinema HD - Nova Fun HD - Nova Gold - Nova HD - Nova International - Nova Lady - Nova Sport 1 HD - Nova Sport 2 HD - Nova Sport 3 - Nova Sport 4 - ÓČKO - ÓČKO BLACK HD - ÓČKO EXPRES HD - ÓČKO STAR - ORF1 - - ORF2 - - Paramount Network - Playboy TV Europe - Polsat - - Power TV - Praha TV - Premier Sport 1 - Premier Sport 2 - Prima COOL HD - Prima HD - Prima KRIMI HD - Prima LOVE HD - Prima MAX HD - Prima Show - Prima STAR - Prima ZOOM HD - PrimaPlus.cz - Private TV - PRO7 - - Rebel - RELAX - Retro - Russia Today - RT Doc - RTL - RTL Hungary - RTL Hungary - RTL2 - SAT.1 - - SAT.1 Gold - Senzi - Sky News International - Skylink 7 - Šláger Originál - Šlágr Premium HD - Spektrum HD - Spektrum Home - Spektrum - - Sport1 - - Sport 1 - - Sport 2 - - Sport.sk - SPORT5 - Stingray Classica HD - Stingray CMusic - Stingray iConcerts HD - TA3 HD - Televize Seznam - TLC - Travel Channel - Travelxp HD - TV5 Monde - TV Barrandov HD - JOJ - TV Central - - TV Lux HD - TV Noe HD - - TVP 1 - TVP 2 - TV Paprika - - TV8 HD - UP NETWORK - - Viasat Explore - - Viasat History - - Viasat Nature - - VIXEN HD - VOX - ZDF - ZDF NEO - - \ No newline at end of file + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3SAT + AMC + Animal Planet + ARTE + Auto Motor Sport HD + AXN Black + AXN + AXN White + Barrandov Krimi + Canal 24 Horas + CANAL+ Domo + Cartoon Network + CBS Reality + Cinemax2 + Cinemax + CNBC Europe + CNN Prima NEWS HD + Crime & Investigation + CS Film + CS History + CS Horror + CS Mystery + ČT1 HD + ČT2 HD + ČT24 HD + ČT3 HD + ČT art HD + ČT :D HD + ČT Sport HD + ARD - Das Erste + Discovery Channel + Discovery Science + Disney Channel + Duck TV + Duna SK + E! Europe + Epic Drama HD + Eurosport 1 + Eurosport 2 + FashionBox.nl + FilmBox + FilmBox Extra HD + FilmBox Family + FilmBox Premium HD + FilmBox Stars + Film Europe HD + Film Europe+ HD + Film+ + Food Network + Golf Channel + HBO2 + HBO3 + HBO + History HD + HTV1 + HTV2 + Investigation Discovery + JimJam + JOJ Cinema HD + Kabel1 + KiKA + Kino Barrandov + LALA TV + LEO TV + M1 + M2 + Markíza International + MDR + Minimax + Mňam TV + MnauTV.cz + MTV + MTV Live + Náš region TV + National Geographic + National Geographic Wild + Nickelodeon + Nick Jr Czech + Nicktoons + Nova Action HD + Nova Cinema HD + Nova Fun HD + Nova Gold + Nova International + Nova Lady + Nova Sport 1 HD + Nova Sport 2 HD + Nova Sport 3 + Nova Sport 4 + ÓČKO + ÓČKO BLACK HD + ÓČKO EXPRES HD + ÓČKO STAR + ORF1 + ORF2 + Paramount Network + Polsat + Power TV + Praha TV + Premier Sport 1 + Premier Sport 2 + Prima HD + Prima COOL HD + Prima KRIMI HD + Prima LOVE HD + Prima MAX HD + PrimaPlus.cz + Prima Show + Prima STAR + Prima ZOOM HD + PRO7 + Rebel + RELAX + Retro + RTL + RTL Hungary + RTL2 + SAT.1 + SAT.1 Gold + Skylink 7 + Šláger Originál + Šlágr Premium HD + Spektrum HD + Spektrum Home + Sport 1 + Sport1 + Sport 2 + SPORT5 + Televize Seznam + Fishing and Hunting + TLC + Travel Channel + Travelxp HD + TV Barrandov HD + TV Central + TV Noe HD + Nova HD + TVP 1 + TVP 2 + TV Paprika + UP NETWORK + Viasat Explore + Viasat History + Viasat Nature + VOX + ZDF + BoomerangEMEA.us + DMAX + ZDF NEO + 360TuneBox + Adult Channel + Al Jazeera + BabyTV + BBC World News HD + Bloomberg Europe + Blue Hustler + Boomerang + Brazzers TV Europe + Club MTV Europe + CNN International Europe + Deluxe Music + Disney Channel + Disney Junior + DocuBox + Dorcel TV + Dorcel XXX + Deutsche Welle English + English Club TV + Erox + Eroxxx + EuroNews + Extreme Sports Channel + Fashion TV Europe + Fast&FunBox + FightBox + France 24 HD + Ginx eSports TV + Hustler HD + Hustler + Love Nature HD + MTV 00s + MTV 80s + MTV 90s + MTVHitsEurope.uk + Music Box + Playboy TV Europe + Private TV + Russia Today + RT Doc + Sky News International + Stingray Classica HD + Stingray CMusic + Stingray iConcerts HD + VIXEN HD + France 24 + Mezzo HD + Mezzo Live HD + TV5 Monde + Cool TV + Duna + RTL Hungary + Arena Sport 1 HD + Arena Sport 2 + Duck TV + Dvojka HD + FilmBox Premium + HBO3 + Jednotka HD + JOJCinema.sk + JOJ Family HD + Jojko.sk + JOJ Plus + JOJSport.sk + JOJWAU.sk + Markíza + Markiza Dajto + Markíza Doma + Senzi + Spektrum + Sport.sk + TA3 HD + TV8 HD + JOJ + TV Lux HD + \ No newline at end of file diff --git a/sites/mujtvprogram.cz/mujtvprogram.cz.test.js b/sites/mujtvprogram.cz/mujtvprogram.cz.test.js index d0a45073..c15d2329 100644 --- a/sites/mujtvprogram.cz/mujtvprogram.cz.test.js +++ b/sites/mujtvprogram.cz/mujtvprogram.cz.test.js @@ -1,4 +1,4 @@ -// npx epg-grabber --config=sites/mujtvprogram.cz/mujtvprogram.cz.config.js --channels=sites/mujtvprogram.cz/mujtvprogram.cz.channels.xml --output=guide.xml --days=2 +// npm run grab -- --site=mujtvprogram.cz const { parser, url } = require('./mujtvprogram.cz.config.js') const fs = require('fs') @@ -37,8 +37,9 @@ it('can parse response', () => { return p }) expect(results[3]).toMatchObject({ - title: `Čepice`, - description: `Jarka (J. Bohdalová) vyčítá manželovi Jiřímu (F. Řehák), že jí nepomáhá při předvánočním úklidu. Vzápětí ale náhodou najde ve skříni ukrytou dámskou čepici a napadne ji, že jde o Jiřího dárek pro ni pod stromeček. Její chování se ihned změní. Jen muži naznačí, že by chtěla čepici jiné barvy. Manžel jí ovšem řekne, že čepici si u něj schoval kamarád Venca (M. Šulc). Zklamaná žena to prozradí Vencově manželce Božce (A. Tománková). Na Štědrý den však Božka najde pod stromečkem jen rtěnku...`, + title: 'Čepice', + description: + 'Jarka (J. Bohdalová) vyčítá manželovi Jiřímu (F. Řehák), že jí nepomáhá při předvánočním úklidu. Vzápětí ale náhodou najde ve skříni ukrytou dámskou čepici a napadne ji, že jde o Jiřího dárek pro ni pod stromeček. Její chování se ihned změní. Jen muži naznačí, že by chtěla čepici jiné barvy. Manžel jí ovšem řekne, že čepici si u něj schoval kamarád Venca (M. Šulc). Zklamaná žena to prozradí Vencově manželce Božce (A. Tománková). Na Štědrý den však Božka najde pod stromečkem jen rtěnku...', category: 'film', date: '1983', director: ['Mudra F.'], diff --git a/sites/musor.tv/musor.tv.channels.xml b/sites/musor.tv/musor.tv.channels.xml index c723bd4e..49d7201f 100644 --- a/sites/musor.tv/musor.tv.channels.xml +++ b/sites/musor.tv/musor.tv.channels.xml @@ -1,174 +1,172 @@ - - - club MTV - E! Entertainment - English Club TV - Extreme Sports Channel - Fightbox - Filmbox Arthouse - MTV 00s - MTV 90s - MTV European - MTV Hits - MTV Live - Sky News - Stingray Classica - Stingray C Music - Total Dance TV - Trace Sports - Trace Urban - Travel XP - 7.TV - AMC - Animal Planet - Apostol TV - Arena4 - ATV - ATV Spirit - Auto Motor Sport - AXN - Baby TV - Balaton TV - BBC Earth - BBC World News - Boomerang - Cartoon Network - CBS Reality - Cinemax 2 - Cinemax - CNBC - CNN - Comedy Central Family - Comedy Central - Cool - d1 TV - Da Vinci - DIGI Animal World - DIGI Life - DIGI Sport 1 - DIGI Sport 2 - DIGI Sport 3 - DIGI World - Dikh TV - Direct One TV - Discovery Channel - Discovery Science - Disney Channel - Docubox - Duck TV - Duna TV - Duna World - Epic Drama - Erdély TV - Euronews - Eurosport 1 - Eurosport 2 - Eurosport 4K - EWTN / Bonum TV - Fashion TV - Fehérvár TV - FEM3 - Film4 - Filmbox Extra - Filmbox Family - Filmbox Premium - Filmbox Stars - Film Café - Film Mánia - Film Now - film+ - Fit HD - FIX TV - Food Network - Funbox UltraHD 4K - Galaxy4 - Gametoon - Hatoscsatorna - HBO 2 - HBO 3 - HBO - Hegyvidék TV - Heti TV - HGTV - Hír TV - History - H!T Music - ID - Izaura TV - JimJam - Jocky TV - Kapos TV - Kölcsey TV - Life TV - Love Nature - M1 - M2 / Petőfi - M4 Sport - M4 Sport+ - M5 - Match4 - Magyar Mozi TV - MAX4 - Mezzo - Mezzo Live - Minimax - Mozi+ - Moziverzum - MTV 80s - 1 Music Channel - Muzsika TV - National Geographic - National Geographic Wild - Nautical Channel - Nickelodeon - Nick Jr - Nicktoons - Ozone TV - Pannon TV (Vajdaság) - Paramount Network - PAX TV - Pesti TV - Prime - RTL Gold - RTL KETTŐ - RTL HÁROM - RTL - Sláger TV - Sorozat+ - Spektrum Home - Spektrum - Spíler1 TV - Spíler2 TV - Sport1 - Sport2 - Stingray iConcerts - Story4 - Super TV2 - Szeged TV - TeenNick - Fishing & Hunting Channel - TLC - Travel Channel - TV2 - TV21 Ungvár (Kárpátalja) - TV2 Comedy - TV2 Kids - TV2 Séf - TV4 - TV Eger - TV Paprika - Újbuda TV - Viasat2 - Viasat3 - Viasat6 - Viasat Explore - Viasat Film - Viasat History - Viasat Nature - Zalaegerszegi TV - Zenebutik TV - - - - + + + + club MTV + E! Entertainment + English Club TV + Extreme Sports Channel + Fightbox + Filmbox Arthouse + MTV 00s + MTV 90s + MTV European + MTV Hits + MTV Live + Sky News + Stingray Classica + Stingray C Music + Total Dance TV + Trace Sports + Trace Urban + Travel XP + 7.TV + AMC + Animal Planet + Apostol TV + Arena4 + ATV + ATV Spirit + Auto Motor Sport + AXN + Baby TV + Balaton TV + BBC Earth + BBC World News + Boomerang + Cartoon Network + CBS Reality + Cinemax 2 + Cinemax + CNBC + CNN + Comedy Central Family + Comedy Central + Cool + d1 TV + Da Vinci + DIGI Animal World + DIGI Life + DIGI Sport 1 + DIGI Sport 2 + DIGI Sport 3 + DIGI World + Dikh TV + Direct One TV + Discovery Channel + Discovery Science + Disney Channel + Docubox + Duck TV + Duna TV + Duna World + Epic Drama + Erdély TV + Euronews + Eurosport 1 + Eurosport 2 + Eurosport 4K + EWTN / Bonum TV + Fashion TV + Fehérvár TV + FEM3 + Film4 + Filmbox Extra + Filmbox Family + Filmbox Premium + Filmbox Stars + Film Café + Film Mánia + Film Now + film+ + Fit HD + FIX TV + Food Network + Funbox UltraHD 4K + Galaxy4 + Gametoon + Hatoscsatorna + HBO 2 + HBO 3 + HBO + Hegyvidék TV + Heti TV + HGTV + Hír TV + History + H!T Music + ID + Izaura TV + JimJam + Jocky TV + Kapos TV + Kölcsey TV + Life TV + Love Nature + M1 + M2 / Petőfi + M4 Sport + M4 Sport+ + M5 + Magyar Mozi TV + Match4 + MAX4 + Mezzo + Mezzo Live + Minimax + Mozi+ + Moziverzum + MTV 80s + 1 Music Channel + Muzsika TV + National Geographic + National Geographic Wild + Nautical Channel + Nickelodeon + Nick Jr + Nicktoons + Ozone TV + Pannon TV (Vajdaság) + Paramount Network + PAX TV + Pesti TV + Prime + RTL Gold + RTL HÁROM + RTL + RTL KETTŐ + Sláger TV + Sorozat+ + Spektrum Home + Spektrum + Spíler1 TV + Spíler2 TV + Sport1 + Sport2 + Stingray iConcerts + Story4 + Super TV2 + Szeged TV + TeenNick + Fishing & Hunting Channel + TLC + Travel Channel + TV2 + TV21 Ungvár (Kárpátalja) + TV2 Comedy + TV2 Kids + TV2 Séf + TV4 + TV Eger + TV Paprika + Újbuda TV + Viasat2 + Viasat3 + Viasat6 + Viasat Explore + Viasat Film + Viasat History + Viasat Nature + Zalaegerszegi TV + Zenebutik TV + diff --git a/sites/musor.tv/musor.tv.config.js b/sites/musor.tv/musor.tv.config.js index a436b8af..85568d9f 100644 --- a/sites/musor.tv/musor.tv.config.js +++ b/sites/musor.tv/musor.tv.config.js @@ -37,7 +37,7 @@ module.exports = { }, async channels() { const html = await axios - .get(`https://musor.tv/`) + .get('https://musor.tv/') .then(r => r.data) .catch(console.log) diff --git a/sites/musor.tv/musor.tv.test.js b/sites/musor.tv/musor.tv.test.js index 351c5cd6..6caa143a 100644 --- a/sites/musor.tv/musor.tv.test.js +++ b/sites/musor.tv/musor.tv.test.js @@ -1,5 +1,5 @@ // npm run channels:parse -- --config=./sites/musor.tv/musor.tv.config.js --output=./sites/musor.tv/musor.tv.channels.xml -// npx epg-grabber --config=sites/musor.tv/musor.tv.config.js --channels=sites/musor.tv/musor.tv.channels.xml --output=guide.xml --days=2 +// npm run grab -- --site=musor.tv const { parser, url } = require('./musor.tv.config.js') const fs = require('fs') @@ -38,7 +38,7 @@ it('can parse response', () => { expect(results[0]).toMatchObject({ start: '2022-11-19T23:00:00.000Z', stop: '2022-11-19T23:30:00.000Z', - title: `Egészségtér`, + title: 'Egészségtér', description: 'Egészségtér címmel új természetgyógyászattal foglalkozó magazinműsor indult hetente fél órás időtartamban a hatoscsatornán. A műsor derűs, objektív hangvételével és szakmailag magas színvonalú ismeretterjesztő jellegével az e' }) @@ -46,7 +46,7 @@ it('can parse response', () => { expect(results[1]).toMatchObject({ start: '2022-11-19T23:30:00.000Z', stop: '2022-11-20T00:00:00.000Z', - title: `Tradíció Klipek`, + title: 'Tradíció Klipek', description: 'Tradíció Klipek Birinyi József néprajzi, vallási, népzenei, népszokás filmjeiből.' }) }) @@ -54,7 +54,7 @@ it('can parse response', () => { it('can handle empty guide', () => { const result = parser({ date, - content: `` + content: '' }) expect(result).toMatchObject([]) }) diff --git a/sites/myafn.dodmedia.osd.mil/myafn.dodmedia.osd.mil.channels.xml b/sites/myafn.dodmedia.osd.mil/myafn.dodmedia.osd.mil.channels.xml index ac6e5e1b..080afd42 100644 --- a/sites/myafn.dodmedia.osd.mil/myafn.dodmedia.osd.mil.channels.xml +++ b/sites/myafn.dodmedia.osd.mil/myafn.dodmedia.osd.mil.channels.xml @@ -1,13 +1,11 @@ - - - AFN|prime Atlantic - AFN|news - AFN|sports - AFN|prime Pacific - AFN|spectrum - AFN|sports2 - AFN|family,AFN|pulse - AFN|movie - - + + AFN|family,AFN|pulse + AFN|movie + AFN|news + AFN|prime Atlantic + AFN|prime Pacific + AFN|spectrum + AFN|sports + AFN|sports2 + 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 024fc0c7..0969598d 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 @@ -40,7 +40,7 @@ module.exports = { }, async channels() { const data = await axios - .get(`https://v3.myafn.dodmedia.osd.mil/api/json/32/channels.json`) + .get('https://v3.myafn.dodmedia.osd.mil/api/json/32/channels.json') .then(r => r.data) .catch(console.log) @@ -51,7 +51,7 @@ module.exports = { } } -function parseStart(item, date) { +function parseStart(item) { return dayjs.utc(item.e, 'YYYY,M,D,H,m,s,0').add(1, 'month') } diff --git a/sites/myafn.dodmedia.osd.mil/myafn.dodmedia.osd.mil.test.js b/sites/myafn.dodmedia.osd.mil/myafn.dodmedia.osd.mil.test.js index 91f27eb6..1fefb07c 100644 --- a/sites/myafn.dodmedia.osd.mil/myafn.dodmedia.osd.mil.test.js +++ b/sites/myafn.dodmedia.osd.mil/myafn.dodmedia.osd.mil.test.js @@ -1,4 +1,4 @@ -// npx epg-grabber --config=sites/myafn.dodmedia.osd.mil/myafn.dodmedia.osd.mil.config.js --channels=sites/myafn.dodmedia.osd.mil/myafn.dodmedia.osd.mil.channels.xml --output=guide.xml --days=2 +// npm run grab -- --site=myafn.dodmedia.osd.mil // npm run channels:parse -- --config=./sites/myafn.dodmedia.osd.mil/myafn.dodmedia.osd.mil.config.js --output=./sites/myafn.dodmedia.osd.mil/myafn.dodmedia.osd.mil.channels.xml const { parser, url } = require('./myafn.dodmedia.osd.mil.config.js') @@ -21,7 +21,8 @@ it('can generate valid url', () => { }) it('can parse response', () => { - const content = `[{"a":566,"b":2,"c":"2022,9,3,3,0,0,0","d":"2022,9,3,4,0,0,0","e":"2022,9,3,3,0,0,0","f":"2022,9,3,4,0,0,0","g":60,"h":"This Week with George Stephanopoulos (ABC)","i":"Episode Title","j":"TV-14","k":false,"l":"Former Clinton White House staffer and current co-anchor of ABC's weekday morning news show \\"\\"Good Morning America,\\"\\" George Stephanopoulos and co-anchors Martha Raddatz and Jonathan Karl offer a look at current events with a focus on the politics of the day. Each week's show includes interviews with top newsmakers (including some of the nation's top political leaders) as well as a roundtable discussion, usually featuring journalists from ABC and other news organizations, of the week's happenings. Since 2008, the program has broadcast from a studio at the Newseum in Washington, D.C.","m":"News,Politics,Public affairs,Talk","n":694284445,"o":60,"p":20,"q":true,"r":694285705,"s":null}]` + const content = + '[{"a":566,"b":2,"c":"2022,9,3,3,0,0,0","d":"2022,9,3,4,0,0,0","e":"2022,9,3,3,0,0,0","f":"2022,9,3,4,0,0,0","g":60,"h":"This Week with George Stephanopoulos (ABC)","i":"Episode Title","j":"TV-14","k":false,"l":"Former Clinton White House staffer and current co-anchor of ABC\'s weekday morning news show \\"\\"Good Morning America,\\"\\" George Stephanopoulos and co-anchors Martha Raddatz and Jonathan Karl offer a look at current events with a focus on the politics of the day. Each week\'s show includes interviews with top newsmakers (including some of the nation\'s top political leaders) as well as a roundtable discussion, usually featuring journalists from ABC and other news organizations, of the week\'s happenings. Since 2008, the program has broadcast from a studio at the Newseum in Washington, D.C.","m":"News,Politics,Public affairs,Talk","n":694284445,"o":60,"p":20,"q":true,"r":694285705,"s":null}]' const result = parser({ content, date, channel }).map(p => { p.start = p.start.toJSON() p.stop = p.stop.toJSON() diff --git a/sites/mysky.com.ph/mysky.com.ph.channels.xml b/sites/mysky.com.ph/mysky.com.ph.channels.xml index b45ab088..ee75ab84 100644 --- a/sites/mysky.com.ph/mysky.com.ph.channels.xml +++ b/sites/mysky.com.ph/mysky.com.ph.channels.xml @@ -1,125 +1,123 @@ - - - A2Z - ANC - ASIAN FOOD NETWORK - BABY TV - CARTOON NETWORK - CELESTIAL CLASSIC MOVIES - CINEMA ONE - CINEMO! - DA VINCI KIDS - GLOBAL TREKKER HD - JEEPNEY TV - KAPAMILYA CHANNEL - KBS WORLD - KIX - KNOWLEDGE CHANNEL - K-PLUS - LOVE NATURE HD - METRO CHANNEL SD - MEZZO LIVE HD - MTV 90s - MYX - NHK WORLD JAPAN - ONE SPORTS - PBO - PREMIER FOOTBALL HD - PREMIER SPORTS - PREMIER SPORTS 2 HD - ROCK ENTERTAINMENT - ROCK EXTREME - SOLAR SPORTS - SPOTV - SPOTV 2 - STAR BHARAT - TMC (TAGALIZED MOVIE CHANNEL) - TapAction Flix - TAP EDGE - TAP MOVIES - TAP SPORTS HD - TAP TV - TECH STORM - THRILL - TLC - TV5 - TVBS ASIA - TVBS NEWS - ZOO MOO - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A2Z + ANC + ASIAN FOOD NETWORK + BABY TV + CARTOON NETWORK + CELESTIAL CLASSIC MOVIES + CINEMA ONE + CINEMO! + DA VINCI KIDS + GLOBAL TREKKER HD + JEEPNEY TV + KAPAMILYA CHANNEL + KBS WORLD + KIX + KNOWLEDGE CHANNEL + K-PLUS + LOVE NATURE HD + METRO CHANNEL SD + MEZZO LIVE HD + MTV 90s + MYX + NHK WORLD JAPAN + ONE SPORTS + PBO + PREMIER FOOTBALL HD + PREMIER SPORTS + PREMIER SPORTS 2 HD + ROCK ENTERTAINMENT + ROCK EXTREME + SOLAR SPORTS + SPOTV + SPOTV 2 + STAR BHARAT + TMC (TAGALIZED MOVIE CHANNEL) + TapAction Flix + TAP EDGE + TAP MOVIES + TAP SPORTS HD + TAP TV + TECH STORM + THRILL + TLC + TV5 + TVBS ASIA + TVBS NEWS + ZOO MOO + diff --git a/sites/mysky.com.ph/mysky.com.ph.config.js b/sites/mysky.com.ph/mysky.com.ph.config.js index 3735b0e0..af604cb2 100644 --- a/sites/mysky.com.ph/mysky.com.ph.config.js +++ b/sites/mysky.com.ph/mysky.com.ph.config.js @@ -33,7 +33,7 @@ module.exports = { }, async channels() { const items = await axios - .get(`https://skyepg.mysky.com.ph/Main/getEventsbyType`) + .get('https://skyepg.mysky.com.ph/Main/getEventsbyType') .then(r => r.data.location) .catch(console.log) diff --git a/sites/mysky.com.ph/mysky.com.ph.test.js b/sites/mysky.com.ph/mysky.com.ph.test.js index 40f46c19..b53c25ae 100644 --- a/sites/mysky.com.ph/mysky.com.ph.test.js +++ b/sites/mysky.com.ph/mysky.com.ph.test.js @@ -1,4 +1,4 @@ -// npx epg-grabber --config=sites/mysky.com.ph/mysky.com.ph.config.js --channels=sites/mysky.com.ph/mysky.com.ph.channels.xml --output=guide.xml --days=2 +// npm run grab -- --site=mysky.com.ph // npm run channels:parse -- --config=./sites/mysky.com.ph/mysky.com.ph.config.js --output=./sites/mysky.com.ph/mysky.com.ph.channels.xml const { parser, url } = require('./mysky.com.ph.config.js') @@ -19,7 +19,8 @@ it('can generate valid url', () => { }) it('can parse response', () => { - const content = `{"events":[{"name":"TV PATROL","location":"8","start":"2022/10/04 19:00","end":"2022/10/04 20:00","userData":{"description":"Description example"}},{"name":"DARNA","location":"8","start":"2022/10/05 20:00","end":"2022/10/05 20:45","userData":{"description":""}},{"name":"Zoe Bakes S1","location":"22","start":"2022/10/04 20:30","end":"2022/10/04 21:00","userData":{"description":"Zo Franois Dad is a beekeeper. So for his birthday, she bakes him a special beehiveshaped cake."}}]}` + const content = + '{"events":[{"name":"TV PATROL","location":"8","start":"2022/10/04 19:00","end":"2022/10/04 20:00","userData":{"description":"Description example"}},{"name":"DARNA","location":"8","start":"2022/10/05 20:00","end":"2022/10/05 20:45","userData":{"description":""}},{"name":"Zoe Bakes S1","location":"22","start":"2022/10/04 20:30","end":"2022/10/04 21:00","userData":{"description":"Zo Franois Dad is a beekeeper. So for his birthday, she bakes him a special beehiveshaped cake."}}]}' const result = parser({ content, channel, date }).map(p => { p.start = p.start.toJSON() p.stop = p.stop.toJSON() @@ -38,7 +39,7 @@ it('can parse response', () => { it('can handle empty guide', () => { const result = parser({ - content: ``, + content: '', channel, date }) diff --git a/sites/mytvsuper.com/mytvsuper.com.channels.xml b/sites/mytvsuper.com/mytvsuper.com.channels.xml index 3befb083..14b11e0c 100644 --- a/sites/mytvsuper.com/mytvsuper.com.channels.xml +++ b/sites/mytvsuper.com/mytvsuper.com.channels.xml @@ -1,109 +1,107 @@ - - - Al Jazeera English - Animal Planet - Animax - Arirang TV - Asian Drama - Asian Variety - AXN - BBC Earth - BBC Lifestyle - BBC World News - CBeebies - CCM - China Movie Channel - Chinese Drama - Chinese Opera Channel - Classic Movies - Channel NewsAsia - Creation TV - Discovery Channel - Discovery Science - DW - Entertainment News - Eurosport - Fashion One - France 24 - GEM - Global Trekker - Golden Jade - Hands Up Channel - J2 - Jade - KIX - Love Nature HD - Love Nature 4K - Mainland News - Mei Ah Movie Channel - Mezzo Live HD - myTV SUPER 18 - myTV SUPER Live Soccer 1 - myTV SUPER Live Soccer 2 - myTV SUPER Live Soccer 3 - myTV SUPER Live Soccer 4 - myTV SUPER Live Soccer 5 - NHK World-Japan - Nickelodeon - Nick Jr - Paramount Network - Pearl - ROCK Entertainment - ROCK Extreme - Thrill - TVB Classic - TVB Finance, Sports & Information Channel - TVB News Channel - TVBS Asia - TVBS News - tvN - 半島電視台英語頻道 - 動物星球頻道 - Animax - 亞洲劇台 - 亞洲綜藝台 - AXN - BBC Earth - BBC Lifestyle - 天映經典頻道 - 中國電影頻道 - 華語劇台 - 戲曲台 - 粵語片台 - 創世電視 - Discovery頻道 - Discovery科學頻道 - 娛樂新聞台 - France 24 - GEM - Global Trekker - 黃金翡翠台 - Hands Up Channel - J2 - 翡翠台 - KIX - Love Nature HD - Love Nature 4K - 神州新聞台 - 美亞電影台 - myTV SUPER 18台 - myTV SUPER直播足球1台 - myTV SUPER直播足球2台 - myTV SUPER直播足球3台 - myTV SUPER直播足球4台 - myTV SUPER直播足球5台 - Nickelodeon - Paramount Network - 明珠台 - ROCK綜藝娛樂 - ROCK超極娛樂 - Thrill - 千禧經典台 - 無綫財經 體育 資訊台 - 無綫新聞台 - 無線衛星亞洲台 - 無線衛星新聞台 - tvN - - + + Al Jazeera English + Animal Planet + Animax + Arirang TV + Asian Drama + Asian Variety + AXN + BBC Earth + BBC Lifestyle + BBC World News + CBeebies + CCM + China Movie Channel + Chinese Drama + Chinese Opera Channel + Classic Movies + Channel NewsAsia + Creation TV + Discovery Channel + Discovery Science + DW + Entertainment News + Eurosport + Fashion One + France 24 + GEM + Global Trekker + Golden Jade + Hands Up Channel + J2 + Jade + KIX + Love Nature HD + Love Nature 4K + Mainland News + Mei Ah Movie Channel + Mezzo Live HD + myTV SUPER 18 + myTV SUPER Live Soccer 1 + myTV SUPER Live Soccer 2 + myTV SUPER Live Soccer 3 + myTV SUPER Live Soccer 4 + myTV SUPER Live Soccer 5 + NHK World-Japan + Nickelodeon + Nick Jr + Paramount Network + Pearl + ROCK Entertainment + ROCK Extreme + Thrill + TVB Classic + TVB Finance, Sports & Information Channel + TVB News Channel + TVBS Asia + TVBS News + tvN + 半島電視台英語頻道 + 動物星球頻道 + Animax + 亞洲劇台 + 亞洲綜藝台 + AXN + BBC Earth + BBC Lifestyle + 天映經典頻道 + 中國電影頻道 + 華語劇台 + 戲曲台 + 粵語片台 + 創世電視 + Discovery頻道 + Discovery科學頻道 + 娛樂新聞台 + France 24 + GEM + Global Trekker + 黃金翡翠台 + Hands Up Channel + J2 + 翡翠台 + KIX + Love Nature HD + Love Nature 4K + 神州新聞台 + 美亞電影台 + myTV SUPER 18台 + myTV SUPER直播足球1台 + myTV SUPER直播足球2台 + myTV SUPER直播足球3台 + myTV SUPER直播足球4台 + myTV SUPER直播足球5台 + Nickelodeon + Paramount Network + 明珠台 + ROCK綜藝娛樂 + ROCK超極娛樂 + Thrill + 千禧經典台 + 無綫財經 體育 資訊台 + 無綫新聞台 + 無線衛星亞洲台 + 無線衛星新聞台 + tvN + diff --git a/sites/mytvsuper.com/mytvsuper.com.test.js b/sites/mytvsuper.com/mytvsuper.com.test.js index fba9505d..6025d492 100644 --- a/sites/mytvsuper.com/mytvsuper.com.test.js +++ b/sites/mytvsuper.com/mytvsuper.com.test.js @@ -1,10 +1,9 @@ // npm run channels:parse -- --config=./sites/mytvsuper.com/mytvsuper.com.config.js --output=./sites/mytvsuper.com/mytvsuper.com.channels.xml --set=lang:zh -// npx epg-grabber --config=sites/mytvsuper.com/mytvsuper.com.config.js --channels=sites/mytvsuper.com/mytvsuper.com.channels.xml --output=guide.xml --days=2 +// npm run grab -- --site=mytvsuper.com const { parser, url } = require('./mytvsuper.com.config.js') const fs = require('fs') const path = require('path') -const axios = require('axios') const dayjs = require('dayjs') const utc = require('dayjs/plugin/utc') const customParseFormat = require('dayjs/plugin/customParseFormat') diff --git a/sites/nhk.or.jp/nhk.or.jp.channels.xml b/sites/nhk.or.jp/nhk.or.jp.channels.xml index 5242039b..1fcd6def 100644 --- a/sites/nhk.or.jp/nhk.or.jp.channels.xml +++ b/sites/nhk.or.jp/nhk.or.jp.channels.xml @@ -1,8 +1,4 @@ - - - NHK - World-Japan - - \ No newline at end of file + + NHK World-Japan + \ No newline at end of file diff --git a/sites/nhk.or.jp/nhk.or.jp.config.js b/sites/nhk.or.jp/nhk.or.jp.config.js index f51fe044..b43bf6a4 100644 --- a/sites/nhk.or.jp/nhk.or.jp.config.js +++ b/sites/nhk.or.jp/nhk.or.jp.config.js @@ -1,65 +1,70 @@ const dayjs = require('dayjs') module.exports = { - site: 'nhk.or.jp', - days: 5, - output: 'nhk.or.jp.guide.xml', - channels: 'nhk.or.jp.channels.xml', - lang: 'en', - delay: 5000, + site: 'nhk.or.jp', + days: 5, + output: 'nhk.or.jp.guide.xml', + channels: 'nhk.or.jp.channels.xml', + lang: 'en', + delay: 5000, - url: function ({ date }) { - return `https://nwapi.nhk.jp/nhkworld/epg/v7b/world/s${date.unix() * 1000}-e${date.add(1, 'd').unix() * 1000}.json` - }, + url: function ({ date }) { + return `https://nwapi.nhk.jp/nhkworld/epg/v7b/world/s${date.unix() * 1000}-e${ + date.add(1, 'd').unix() * 1000 + }.json` + }, - request: { - method: 'GET', - timeout: 5000, - cache: { ttl: 60 * 1000 }, - headers: { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36' } - }, - - logo: function (context) { - return context.channel.logo - }, - - parser: function (context) { - const programs = [] - - const items = parseItems(context.content) - - items.forEach(item => { - programs.push({ - title: item.title, - start: parseStart(item), - stop: parseStop(item), - description: item.description, - icon: parseIcon(item), - sub_title: item.subtitle - }) - }) - - return programs + request: { + method: 'GET', + timeout: 5000, + cache: { ttl: 60 * 1000 }, + headers: { + 'User-Agent': + 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36' } + }, + + logo: function (context) { + return context.channel.logo + }, + + parser: function (context) { + const programs = [] + + const items = parseItems(context.content) + + items.forEach(item => { + programs.push({ + title: item.title, + start: parseStart(item), + stop: parseStop(item), + description: item.description, + icon: parseIcon(item), + sub_title: item.subtitle + }) + }) + + return programs + } } function parseItems(content) { - if (content != '') { - const data = JSON.parse(content) - return (!data || !data.channel || !Array.isArray(data.channel.item)) ? [] : data.channel.item - } else { - return [] - } + if (content != '') { + const data = JSON.parse(content) + return !data || !data.channel || !Array.isArray(data.channel.item) ? [] : data.channel.item + } else { + return [] + } } function parseStart(item) { - return dayjs.unix(parseInt(item.pubDate) / 1000) + return dayjs.unix(parseInt(item.pubDate) / 1000) } function parseStop(item) { - return dayjs.unix(parseInt(item.endDate) / 1000) + return dayjs.unix(parseInt(item.endDate) / 1000) } function parseIcon(item) { - return 'https://www.nhk.or.jp' + item.thumbnail -} \ No newline at end of file + return 'https://www.nhk.or.jp' + item.thumbnail +} diff --git a/sites/nhk.or.jp/nhk.or.jp.test.js b/sites/nhk.or.jp/nhk.or.jp.test.js index 6defd9f8..66d35b0c 100644 --- a/sites/nhk.or.jp/nhk.or.jp.test.js +++ b/sites/nhk.or.jp/nhk.or.jp.test.js @@ -1,4 +1,4 @@ -// npx epg-grabber --config=sites/nhk.or.jp/nhk.or.jp.config.js --channels=sites/nhk.or.jp/nhk.or.jp.channels.xml --output=guide.xml --days=2 +// npm run grab -- --site=nhk.or.jp // npx jest nhk.or.jp.test.js const { url, parser } = require('./nhk.or.jp.config.js') @@ -7,30 +7,39 @@ const utc = require('dayjs/plugin/utc') dayjs.extend(utc) const date = dayjs.utc('2023-04-29', 'YYYY-MM-DD').startOf('d') -const channel = { site_id: '0', xmltv_id: 'NHKWorldJapan.jp', lang: 'en', logo: 'https://www3.nhk.or.jp/nhkworld/common/site_images/nw_webapp_1024x1024.png' } +const channel = { + site_id: '0', + xmltv_id: 'NHKWorldJapan.jp', + lang: 'en', + logo: 'https://www3.nhk.or.jp/nhkworld/common/site_images/nw_webapp_1024x1024.png' +} it('can generate valid url', () => { - expect(url({ channel, date })).toBe('https://nwapi.nhk.jp/nhkworld/epg/v7b/world/s1682726400000-e1682812800000.json') + expect(url({ channel, date })).toBe( + 'https://nwapi.nhk.jp/nhkworld/epg/v7b/world/s1682726400000-e1682812800000.json' + ) }) it('can parse response', () => { - const content = `{"channel":{"item":[{"seriesId":"1007","airingId":"000","title":"NHK NEWSLINE","description":"NHK WORLD-JAPAN's flagship hourly news program delivers the latest world news, business and weather, with a focus on Japan and the rest of Asia.","link":"/nhkworld/en/news/","pubDate":"1682726400000","endDate":"1682727000000","vodReserved":false,"jstrm":"1","wstrm":"1","subtitle":"","content":"","content_clean":"","pgm_gr_id":"","thumbnail":"/nhkworld/upld/thumbnails/en/tv/regular_program/340aed63308aafd1178172abf6325231_large.jpg","thumbnail_s":"/nhkworld/upld/thumbnails/en/tv/regular_program/340aed63308aafd1178172abf6325231_small.jpg","showlist":"0","internal":"0","genre":{"TV":"11","Top":"","LC":""},"vod_id":"","vod_url":"","analytics":"[nhkworld]simul;NHK NEWSLINE;w02,001;1007-000-2023;2023-04-29T09:00:00+09:00"}]}}` - const results = parser({ content }) + const content = + '{"channel":{"item":[{"seriesId":"1007","airingId":"000","title":"NHK NEWSLINE","description":"NHK WORLD-JAPAN\'s flagship hourly news program delivers the latest world news, business and weather, with a focus on Japan and the rest of Asia.","link":"/nhkworld/en/news/","pubDate":"1682726400000","endDate":"1682727000000","vodReserved":false,"jstrm":"1","wstrm":"1","subtitle":"","content":"","content_clean":"","pgm_gr_id":"","thumbnail":"/nhkworld/upld/thumbnails/en/tv/regular_program/340aed63308aafd1178172abf6325231_large.jpg","thumbnail_s":"/nhkworld/upld/thumbnails/en/tv/regular_program/340aed63308aafd1178172abf6325231_small.jpg","showlist":"0","internal":"0","genre":{"TV":"11","Top":"","LC":""},"vod_id":"","vod_url":"","analytics":"[nhkworld]simul;NHK NEWSLINE;w02,001;1007-000-2023;2023-04-29T09:00:00+09:00"}]}}' + const results = parser({ content }) - expect(results).toMatchObject([ - { - title: 'NHK NEWSLINE', - start: dayjs(1682726400000), - stop: dayjs(1682727000000), - description: `NHK WORLD-JAPAN's flagship hourly news program delivers the latest world news, business and weather, with a focus on Japan and the rest of Asia.`, - icon: 'https://www.nhk.or.jp/nhkworld/upld/thumbnails/en/tv/regular_program/340aed63308aafd1178172abf6325231_large.jpg', - sub_title: '' - } - ]) + expect(results).toMatchObject([ + { + title: 'NHK NEWSLINE', + start: dayjs(1682726400000), + stop: dayjs(1682727000000), + description: + "NHK WORLD-JAPAN's flagship hourly news program delivers the latest world news, business and weather, with a focus on Japan and the rest of Asia.", + icon: 'https://www.nhk.or.jp/nhkworld/upld/thumbnails/en/tv/regular_program/340aed63308aafd1178172abf6325231_large.jpg', + sub_title: '' + } + ]) }) it('can handle empty guide', () => { - const results = parser({ content: '' }) + const results = parser({ content: '' }) - expect(results).toMatchObject([]) + expect(results).toMatchObject([]) }) diff --git a/sites/nhkworldpremium.com/nhkworldpremium.com.test.js b/sites/nhkworldpremium.com/nhkworldpremium.com.test.js index db012b05..9b097800 100644 --- a/sites/nhkworldpremium.com/nhkworldpremium.com.test.js +++ b/sites/nhkworldpremium.com/nhkworldpremium.com.test.js @@ -1,10 +1,9 @@ -// npx epg-grabber --config=sites/nhkworldpremium.com/nhkworldpremium.com.config.js --channels=sites/nhkworldpremium.com/nhkworldpremium.com_en.channels.xml --output=guide.xml -// npx epg-grabber --config=sites/nhkworldpremium.com/nhkworldpremium.com.config.js --channels=sites/nhkworldpremium.com/nhkworldpremium.com_ja.channels.xml --output=guide.xml +// npm run grab -- --site=nhkworldpremium.com +// npm run grab -- --site=nhkworldpremium.com -const { parser, url, request } = require('./nhkworldpremium.com.config.js') +const { parser, url } = require('./nhkworldpremium.com.config.js') const fs = require('fs') const path = require('path') -const axios = require('axios') const dayjs = require('dayjs') const utc = require('dayjs/plugin/utc') const customParseFormat = require('dayjs/plugin/customParseFormat') diff --git a/sites/nhkworldpremium.com/nhkworldpremium.com_en.channels.xml b/sites/nhkworldpremium.com/nhkworldpremium.com_en.channels.xml index 49ea7c11..aee9444a 100644 --- a/sites/nhkworldpremium.com/nhkworldpremium.com_en.channels.xml +++ b/sites/nhkworldpremium.com/nhkworldpremium.com_en.channels.xml @@ -1,6 +1,4 @@ - - - NHK World Premium - - \ No newline at end of file + + NHK World Premium + \ No newline at end of file diff --git a/sites/nhkworldpremium.com/nhkworldpremium.com_ja.channels.xml b/sites/nhkworldpremium.com/nhkworldpremium.com_ja.channels.xml index d37c6402..3e7b1cc4 100644 --- a/sites/nhkworldpremium.com/nhkworldpremium.com_ja.channels.xml +++ b/sites/nhkworldpremium.com/nhkworldpremium.com_ja.channels.xml @@ -1,6 +1,4 @@ - - - NHK World Premium - - \ No newline at end of file + + NHK World Premium + \ No newline at end of file diff --git a/sites/nos.pt/nos.pt.channels.xml b/sites/nos.pt/nos.pt.channels.xml index 201fbffa..9317ffe4 100644 --- a/sites/nos.pt/nos.pt.channels.xml +++ b/sites/nos.pt/nos.pt.channels.xml @@ -1,209 +1,207 @@ - - - 1+1 - 24Kitchen HD - 3SAT - Afro Music Channel - AMC Crime - AMC - ARTV - AXN Movies - AXN - Baby TV - Biggs - Bloomberg - BVN - Canal 11 HD - Canal Hollywood - Canal NOS HD - Canal Panda - Canal Q - Cartoon Network HD - Casa e Cozinha HD - CCTV 4 - CGTN - CMTV - CNBC - CNN Portugal - Cubavisión Internacional - Discovery Channel - Disney Channel HD - Disney Junior - DOGTV - DW (Alemão) - DW - Eleven 1 - Eleven 2 - Eleven 3 - Eleven 4 - Eleven 5 - Eleven 6 - Euronews - Fight Network HD - Food Network HD - FOX Comedy - FOX Crime - FOX Life - FOX Movies - FOX - France 24 (I) - France 24 (F) - Fuel TV - TV Galicia - Globo Now HD - Globo - Canal História - Horse TV - HOT Man - HOT Taboo - HOT - ID Investigation Discovery - KBS World HD - KiKa - Kuriakos TV - Localvisão TV HD - M6 - MCM Pop - MCM Top - Mezzo - Mezzo Live HD - Motorvision HD - MTV 00s - MTV Live - MTV Portugal - MyZen TV - National Geographic - National Geographic WILD - Nautical Channel - NHK World TV - Nickelodeon - Nick Jr. - Nickelodeon Ukraine Pluto TV - NOS Studios - Odisseia - Panda KIDS - Phoenix CNE - Phoenix Infonews - Porto Canal - ProSieben - Record News - Russia Today - RTP 1 - RTP 2 - RTP 3 - RTP Madeira - RTP Memória - RTR Planeta - SAT 1 - Sextreme - SIC - SIC Caras - SIC K - SIC Mulher - SIC Notícias - SIC Radical - S+ HD - Sporting TV - SPORT TV1 - SPORT TV2 - SPORT TV3 - SPORT TV4 - SPORT TV5 - Sport TV 6 HD - SPORT TV+ - Stingray iConcerts HD - Super RTL - SYFY - TCV Internacional - TPA Internacional - Trace Toca - Trace Urban HD - Travel Channel - TV5 Monde - TVCine ACTION - TVCine EDITION - TVCine EMOTION - TVCine TOP - TVEi - TVI - TVI Ficção HD - TVI Reality - TVR Internacional - Venus - ZAP Viva HD - ZDF - ZDF Neo - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1+1 + 24Kitchen HD + 3SAT + Afro Music Channel + AMC Crime + AMC + ARTV + AXN Movies + AXN + Baby TV + Biggs + Bloomberg + BVN + Canal 11 HD + Canal Hollywood + Canal NOS HD + Canal Panda + Canal Q + Cartoon Network HD + Casa e Cozinha HD + CCTV 4 + CGTN + CMTV + CNBC + CNN Portugal + Cubavisión Internacional + Discovery Channel + Disney Channel HD + Disney Junior + DOGTV + DW (Alemão) + DW + Eleven 1 + Eleven 2 + Eleven 3 + Eleven 4 + Eleven 5 + Eleven 6 + Euronews + Fight Network HD + Food Network HD + FOX Comedy + FOX Crime + FOX Life + FOX Movies + FOX + France 24 (I) + France 24 (F) + Fuel TV + TV Galicia + Globo Now HD + Globo + Canal História + Horse TV + HOT Man + HOT Taboo + HOT + ID Investigation Discovery + KBS World HD + KiKa + Kuriakos TV + Localvisão TV HD + M6 + MCM Pop + MCM Top + Mezzo + Mezzo Live HD + Motorvision HD + MTV 00s + MTV Live + MTV Portugal + MyZen TV + National Geographic + National Geographic WILD + Nautical Channel + NHK World TV + Nickelodeon + Nickelodeon Ukraine Pluto TV + Nick Jr. + NOS Studios + Odisseia + Panda KIDS + Phoenix CNE + Phoenix Infonews + Porto Canal + ProSieben + Record News + Russia Today + RTP 1 + RTP 2 + RTP 3 + RTP Madeira + RTP Memória + RTR Planeta + SAT 1 + Sextreme + SIC + SIC Caras + SIC K + SIC Mulher + SIC Notícias + SIC Radical + S+ HD + Sporting TV + SPORT TV1 + SPORT TV2 + SPORT TV3 + SPORT TV4 + SPORT TV5 + Sport TV 6 HD + SPORT TV+ + Stingray iConcerts HD + Super RTL + SYFY + TCV Internacional + TPA Internacional + Trace Toca + Trace Urban HD + Travel Channel + TV5 Monde + TVCine ACTION + TVCine EDITION + TVCine EMOTION + TVCine TOP + TVEi + TVI + TVI Ficção HD + TVI Reality + TVR Internacional + Venus + ZAP Viva HD + ZDF + ZDF Neo + diff --git a/sites/nos.pt/nos.pt.config.js b/sites/nos.pt/nos.pt.config.js index a32dc382..86c2fc38 100644 --- a/sites/nos.pt/nos.pt.config.js +++ b/sites/nos.pt/nos.pt.config.js @@ -20,7 +20,6 @@ module.exports = { const items = parseItems(content, date) date = date.subtract(1, 'd') for (let item of items) { - const prev = programs[programs.length - 1] const $item = cheerio.load(item) const channelAcronym = parseChannelAcronym(content) @@ -38,9 +37,9 @@ module.exports = { return programs }, - async channels({ country }) { + async channels() { const html = await axios - .get(`https://www.nos.pt/particulares/televisao/guia-tv/Pages/default.aspx`) + .get('https://www.nos.pt/particulares/televisao/guia-tv/Pages/default.aspx') .then(r => r.data) .catch(console.log) @@ -63,7 +62,7 @@ async function loadProgramDetails(channelAcronym, programId) { if (!channelAcronym || !programId) return {} const data = await axios .post( - `https://www.nos.pt/_layouts/15/Armstrong/ApplicationPages/EPGGetProgramsAndDetails.aspx/GetProgramDetails`, + 'https://www.nos.pt/_layouts/15/Armstrong/ApplicationPages/EPGGetProgramsAndDetails.aspx/GetProgramDetails', { programId, channelAcronym, diff --git a/sites/nos.pt/nos.pt.test.js b/sites/nos.pt/nos.pt.test.js index 5e7083ee..7ff15af1 100644 --- a/sites/nos.pt/nos.pt.test.js +++ b/sites/nos.pt/nos.pt.test.js @@ -1,5 +1,5 @@ // npm run channels:parse -- --config=./sites/nos.pt/nos.pt.config.js --output=./sites/nos.pt/nos.pt.channels.xml -// npx epg-grabber --config=sites/nos.pt/nos.pt.config.js --channels=sites/nos.pt/nos.pt.channels.xml --output=guide.xml --days=2 +// npm run grab -- --site=nos.pt const { parser, url } = require('./nos.pt.config.js') const fs = require('fs') @@ -74,7 +74,7 @@ it('can parse response', async () => { expect(results[0]).toMatchObject({ start: '2023-01-27T23:50:00.000Z', stop: '2023-01-28T00:36:00.000Z', - title: `Anatomia de Grey T.17 Ep.3`, + title: 'Anatomia de Grey T.17 Ep.3', description: 'Os médicos do Grey Sloan continuam a enfrentar a nova realidade do COVID-19 e lidam com um paciente conhecido e teimoso. Koracick fica encarregue dos internos e Link opera um terapeuta sexual.', icon: 'https://images.nos.pt/b6fd27f4bd0b404abd4c3fc4faa79024_resized_352x198.jpg' @@ -83,7 +83,7 @@ it('can parse response', async () => { expect(results[21]).toMatchObject({ start: '2023-01-28T21:38:00.000Z', stop: '2023-01-29T00:05:00.000Z', - title: `MasterChef Portugal T.1 Ep.10`, + title: 'MasterChef Portugal T.1 Ep.10', description: 'A maior competição de cozinha do mundo arranca ao comando de três dos mais conceituados chefs portugueses: Pedro Pena Bastos, Noélia Jerónimo e Ricardo Costa, que nos vão transmitir os seus conhecimentos e a sua paixão pela cozinha.', icon: 'https://images.nos.pt/8aa511d697f0401a88a0cb1ec2718cc3_resized_352x198.jpg' diff --git a/sites/novacyprus.com/novacyprus.com.channels.xml b/sites/novacyprus.com/novacyprus.com.channels.xml index 87d9322d..b06f7f31 100644 --- a/sites/novacyprus.com/novacyprus.com.channels.xml +++ b/sites/novacyprus.com/novacyprus.com.channels.xml @@ -1,34 +1,32 @@ - - - Animal Planet Africa - Boomerang Central & Eastern Europe - Disney Channel Middle East - EuroNews Ellinika - Eurosport 1 - Eurosport 2 - Fox Greece - Fox Life Greece - Vouli TV - Insight HD - Mad Greekz - Mad TV - MTV Live - MyZen TV - National Geographic Ellada - Nickelodeon Greece - Nova Cinema 1 - Nova Cinema 2 - Nova Cinema 3 - Nova Cinema 4 - Nova Life - Nova Sports 2 - Nova Sports 3 - Nova Sports 4 - Nova Sports 5 - Number 1 TV - One Channel - Smile TV - Viasat History HD - - \ No newline at end of file + + Animal Planet Africa + Boomerang Central & Eastern Europe + Disney Channel Middle East + EuroNews Ellinika + Eurosport 1 + Eurosport 2 + Fox Greece + Fox Life Greece + Vouli TV + Insight HD + Mad Greekz + Mad TV + MTV Live + MyZen TV + National Geographic Ellada + Nickelodeon Greece + Nova Cinema 1 + Nova Cinema 2 + Nova Cinema 3 + Nova Cinema 4 + Nova Life + Nova Sports 2 + Nova Sports 3 + Nova Sports 4 + Nova Sports 5 + Number 1 TV + One Channel + Smile TV + Viasat History HD + \ No newline at end of file diff --git a/sites/novacyprus.com/novacyprus.com.config.js b/sites/novacyprus.com/novacyprus.com.config.js index 60bf8ac4..5096014d 100644 --- a/sites/novacyprus.com/novacyprus.com.config.js +++ b/sites/novacyprus.com/novacyprus.com.config.js @@ -13,7 +13,7 @@ dayjs.extend(customParseFormat) module.exports = { site: 'novacyprus.com', days: 2, - url({ channel, date }) { + url({ date }) { return `https://www.novacyprus.com/api/v1/tvprogram/from/${date.format('YYYYMMDD')}/to/${date .add(1, 'd') .format('YYYYMMDD')}` @@ -35,9 +35,9 @@ module.exports = { return programs }, - async channels({ country, lang }) { + async channels() { const channels = await axios - .get(`https://www.novacyprus.com/api/v1/guide/dailychannels`) + .get('https://www.novacyprus.com/api/v1/guide/dailychannels') .then(r => r.data) .catch(console.log) diff --git a/sites/novacyprus.com/novacyprus.com.test.js b/sites/novacyprus.com/novacyprus.com.test.js index 51e79d05..282ce1e3 100644 --- a/sites/novacyprus.com/novacyprus.com.test.js +++ b/sites/novacyprus.com/novacyprus.com.test.js @@ -1,5 +1,5 @@ -// node ./scripts/channels.js --config=./sites/novacyprus.com/novacyprus.com.config.js --output=./sites/novacyprus.com/novacyprus.com.channels.xml -// npx epg-grabber --config=sites/novacyprus.com/novacyprus.com.config.js --channels=sites/novacyprus.com/novacyprus.com.channels.xml --output=guide.xml --days=2 +// npm run channels:parse -- --config=./sites/novacyprus.com/novacyprus.com.config.js --output=./sites/novacyprus.com/novacyprus.com.channels.xml +// npm run grab -- --site=novacyprus.com const { parser, url } = require('./novacyprus.com.config.js') const dayjs = require('dayjs') @@ -21,7 +21,8 @@ it('can generate valid url', () => { }) it('can parse response', () => { - const content = `{"nodes":[{"datetime":"2021-11-17 06:20:00","day":"Wednesday","numDay":17,"numMonth":11,"month":"November","channelName":"Cyprus Novacinema1HD","channelLog":"https:\/\/ssl2.novago.gr\/EPG\/jsp\/images\/universal\/film\/logo\/20200210\/000100\/XTV100000762\/d6a2f5e0-dbc0-49c7-9843-e3161ca5ae5d.png","cid":"42","ChannelId":"614","startingTime":"06:20","endTime":"08:10","title":"Δεσμοί Αίματος","description":"Θρίλερ Μυστηρίου","duration":"109","slotDuration":"110","bref":"COMMOBLOOX","mediaItems":[{"MediaListTypeId":"6","CdnUrl":"http:\/\/cache-forthnet.secure.footprint.net\/linear\/3\/0\/305608_COMMOBLOOX_GUIDE_STILL.jpg"},{"MediaListTypeId":"7","CdnUrl":"http:\/\/cache-forthnet.secure.footprint.net\/linear\/3\/0\/305608_COMMOBLOOX_POSTER_CROSS.jpg"},{"MediaListTypeId":"8","CdnUrl":"http:\/\/cache-forthnet.secure.footprint.net\/linear\/3\/0\/305608_COMMOBLOOX_ICON_CYP.jpg"},{"MediaListTypeId":"9","CdnUrl":"http:\/\/cache-forthnet.secure.footprint.net\/linear\/3\/0\/305608_COMMOBLOOX_POSTER_CYP.jpg"},{"MediaListTypeId":"10","CdnUrl":"http:\/\/cache-forthnet.secure.footprint.net\/linear\/3\/0\/305608_COMMOBLOOX_BACKGROUND_CYP.jpg"}]},{"datetime":"2021-11-17 06:00:00","day":"Wednesday","numDay":17,"numMonth":11,"month":"November","channelName":"Cyprus Novacinema2HD","channelLog":"https:\/\/ssl2.novago.gr\/EPG\/jsp\/images\/universal\/film\/logo\/20200210\/000100\/XTV100000763\/24e05354-d6ad-4949-bcb3-a81d1c1d2cba.png","cid":"62","ChannelId":"653","startingTime":"06:00","endTime":"07:40","title":"Ανυπόφοροι Γείτονες","description":"Κωμωδία","duration":"93","slotDuration":"100","bref":"NEIGHBORSX","mediaItems":[{"MediaListTypeId":"7","CdnUrl":"http:\/\/cache-forthnet.secure.footprint.net\/linear\/3\/1\/312582_NEIGHBORSX_POSTER_CROSS.jpg"},{"MediaListTypeId":"8","CdnUrl":"http:\/\/cache-forthnet.secure.footprint.net\/linear\/3\/1\/312582_NEIGHBORSX_ICON_CYP.jpg"},{"MediaListTypeId":"9","CdnUrl":"http:\/\/cache-forthnet.secure.footprint.net\/linear\/3\/1\/312582_NEIGHBORSX_POSTER_CYP.jpg"},{"MediaListTypeId":"10","CdnUrl":"http:\/\/cache-forthnet.secure.footprint.net\/linear\/3\/1\/312582_NEIGHBORSX_BACKGROUND_CYP.jpg"}]}]}` + const content = + '{"nodes":[{"datetime":"2021-11-17 06:20:00","day":"Wednesday","numDay":17,"numMonth":11,"month":"November","channelName":"Cyprus Novacinema1HD","channelLog":"https://ssl2.novago.gr/EPG/jsp/images/universal/film/logo/20200210/000100/XTV100000762/d6a2f5e0-dbc0-49c7-9843-e3161ca5ae5d.png","cid":"42","ChannelId":"614","startingTime":"06:20","endTime":"08:10","title":"Δεσμοί Αίματος","description":"Θρίλερ Μυστηρίου","duration":"109","slotDuration":"110","bref":"COMMOBLOOX","mediaItems":[{"MediaListTypeId":"6","CdnUrl":"http://cache-forthnet.secure.footprint.net/linear/3/0/305608_COMMOBLOOX_GUIDE_STILL.jpg"},{"MediaListTypeId":"7","CdnUrl":"http://cache-forthnet.secure.footprint.net/linear/3/0/305608_COMMOBLOOX_POSTER_CROSS.jpg"},{"MediaListTypeId":"8","CdnUrl":"http://cache-forthnet.secure.footprint.net/linear/3/0/305608_COMMOBLOOX_ICON_CYP.jpg"},{"MediaListTypeId":"9","CdnUrl":"http://cache-forthnet.secure.footprint.net/linear/3/0/305608_COMMOBLOOX_POSTER_CYP.jpg"},{"MediaListTypeId":"10","CdnUrl":"http://cache-forthnet.secure.footprint.net/linear/3/0/305608_COMMOBLOOX_BACKGROUND_CYP.jpg"}]},{"datetime":"2021-11-17 06:00:00","day":"Wednesday","numDay":17,"numMonth":11,"month":"November","channelName":"Cyprus Novacinema2HD","channelLog":"https://ssl2.novago.gr/EPG/jsp/images/universal/film/logo/20200210/000100/XTV100000763/24e05354-d6ad-4949-bcb3-a81d1c1d2cba.png","cid":"62","ChannelId":"653","startingTime":"06:00","endTime":"07:40","title":"Ανυπόφοροι Γείτονες","description":"Κωμωδία","duration":"93","slotDuration":"100","bref":"NEIGHBORSX","mediaItems":[{"MediaListTypeId":"7","CdnUrl":"http://cache-forthnet.secure.footprint.net/linear/3/1/312582_NEIGHBORSX_POSTER_CROSS.jpg"},{"MediaListTypeId":"8","CdnUrl":"http://cache-forthnet.secure.footprint.net/linear/3/1/312582_NEIGHBORSX_ICON_CYP.jpg"},{"MediaListTypeId":"9","CdnUrl":"http://cache-forthnet.secure.footprint.net/linear/3/1/312582_NEIGHBORSX_POSTER_CYP.jpg"},{"MediaListTypeId":"10","CdnUrl":"http://cache-forthnet.secure.footprint.net/linear/3/1/312582_NEIGHBORSX_BACKGROUND_CYP.jpg"}]}]}' const result = parser({ content, channel }).map(p => { p.start = p.start.toJSON() p.stop = p.stop.toJSON() @@ -43,7 +44,7 @@ it('can handle empty guide', () => { const result = parser({ date, channel, - content: `{"nodes":[],"total":0,"pages":0}` + content: '{"nodes":[],"total":0,"pages":0}' }) expect(result).toMatchObject([]) }) diff --git a/sites/novasports.gr/novasports.gr.channels.xml b/sites/novasports.gr/novasports.gr.channels.xml index 10ff7321..f28227f8 100644 --- a/sites/novasports.gr/novasports.gr.channels.xml +++ b/sites/novasports.gr/novasports.gr.channels.xml @@ -1,21 +1,19 @@ - - - Eurosport 1 HD - Eurosport 2 HD - Novasports1HD - Novasports2HD - Novasports3HD - Novasports4HD - Novasports5HD - Novasports6HD - Novasports Εxtra1 - Novasports Extra2 - Novasports Extra3 - Novasports Extra4 - ΝovasportsNews - Novasports Premier League - Novasports Prime - ΝovasportsStart - - + + Eurosport 1 HD + Eurosport 2 HD + Novasports1HD + Novasports2HD + Novasports3HD + Novasports4HD + Novasports5HD + Novasports6HD + Novasports Εxtra1 + Novasports Extra2 + Novasports Extra3 + Novasports Extra4 + ΝovasportsNews + Novasports Premier League + Novasports Prime + ΝovasportsStart + diff --git a/sites/novasports.gr/novasports.gr.config.js b/sites/novasports.gr/novasports.gr.config.js index 9fba886a..0721f670 100644 --- a/sites/novasports.gr/novasports.gr.config.js +++ b/sites/novasports.gr/novasports.gr.config.js @@ -10,7 +10,7 @@ dayjs.extend(timezone) module.exports = { site: 'novasports.gr', days: 2, - url: function ({ date, channel }) { + url: function ({ date }) { return `https://www.novasports.gr/wp-admin/admin-ajax.php?action=nova_get_template&template=tv-program/broadcast&dt=${date.format( 'YYYY-MM-DD' )}` @@ -43,13 +43,13 @@ module.exports = { async channels() { const html = await axios .get( - `https://www.novasports.gr/wp-admin/admin-ajax.php?action=nova_get_template&template=tv-program/broadcast&dt=2022-10-29` + 'https://www.novasports.gr/wp-admin/admin-ajax.php?action=nova_get_template&template=tv-program/broadcast&dt=2022-10-29' ) .then(r => r.data) .catch(console.log) const $ = cheerio.load(html) const items = $( - `#mc-broadcast-content:nth-child(2) > div > #channelist-slider > div.channelist-wrapper.slider-wrapper.content > div > div` + '#mc-broadcast-content:nth-child(2) > div > #channelist-slider > div.channelist-wrapper.slider-wrapper.content > div > div' ).toArray() return items.map(item => { const name = $(item).find('.channel').text().trim() diff --git a/sites/novasports.gr/novasports.gr.test.js b/sites/novasports.gr/novasports.gr.test.js index 97d4078b..45f71cc8 100644 --- a/sites/novasports.gr/novasports.gr.test.js +++ b/sites/novasports.gr/novasports.gr.test.js @@ -1,5 +1,5 @@ // npm run channels:parse -- --config=./sites/novasports.gr/novasports.gr.config.js --output=./sites/novasports.gr/novasports.gr.channels.xml -// npx epg-grabber --config=sites/novasports.gr/novasports.gr.config.js --channels=sites/novasports.gr/novasports.gr.channels.xml --output=guide.xml --days=2 +// npm run grab -- --site=novasports.gr const { parser, url } = require('./novasports.gr.config.js') const fs = require('fs') diff --git a/sites/nowplayer.now.com/nowplayer.now.com.channels.xml b/sites/nowplayer.now.com/nowplayer.now.com.channels.xml index 78e48579..ec3d6ee8 100644 --- a/sites/nowplayer.now.com/nowplayer.now.com.channels.xml +++ b/sites/nowplayer.now.com/nowplayer.now.com.channels.xml @@ -1,248 +1,246 @@ - - - ABC Australia Asia - Aljazeera English - Animal Planet - Animax Asia - Asian Food Network - Astro Cricket - AXN East Asia - BBC Earth Asia - BBC Lifestyle Asia - BBC World News - BeIn Sports 1 Hong Kong - BeIn Sports 2 Hong Kong - BeIn Sports Max 1 - BeIn Sports Max 2 - BeIn Sports Max 3 - Bloomberg TV - Boomerang - Cartoon Network - CBeebies Asia - CCTV 1 - CCTV 4 Asia - Channel Adult - Cinemax - CNA - CNBC - CNN - Colors - CTI TV Asia - Da Vinci - Discovery Asia - Discovery Channel - Discovery Science - DMAX Southeast Asia - DreamWorks TV - DW Deutsch - DW English - EBC News Asia - ETTV Asia News - EuroNews English - Fight Sports - Food Network - France 24 English - France 24 Français - GMA Life TV - GMA News TV International - GMA Pinoy TV Asia-Pacific - HBO - HBO Family - HBO Hits - HBO Signature - HGTV - History - HKS TV - Ice Fire - KBS World - Lifetime - Movie Movie - MTV India - MUTV - National Geographic - National Geographic Wild - NHK World Japan - NHK World Premium - Nickelodeon - Nick Jr - Now 668 - Now Baogu Movies - Now Baogu Superstars - Now Business News Channel - Now Chinese Drama Channel - Now Data Channel - Now Direct - Now Golf 2 - Now Golf 3 - Now Jelli - Now News - Now Sports 1 - Now Sports 2 - Now Sports 3 - Now Sports 4 - Now Sports 4K - Now Sports 5 - Now Sports 6 - Now Sports 7 - Now Sports Plus - Now Sports Premier League 1 - Now Sports Premier League 2 - Now Sports Premier League 3 - Now Sports Premier League 4 - Now Sports Premier League 5 - Now Sports Premier League 6 - Now Sports Premier League TV - Now Sports Prime - Now Video Express - Outdoor Channel International - Phoenix Chinese Channel - Phoenix Hong Kong - Phoenix InfoNews Channel - Rock Entertainment - RT News - RugbyPass TV - Sansha TV - Shenzhen Satellite TV - Sky News UK - SET India - Sony SAB TV Asia - Star Bharat India - Star Chinese Movies South East Asia - Star Gold - Star Plus Southeast Asia - Macau Asia Satellite TV - TFC Asia-Pacific - Thrill - TLC Southeast Asia - Travel Channel Asia - TV5Monde Asie - TV5Monde Style HD - TVBS Asia - TVN Asia - TVS 2 Southern TV - ViuTV - ViuTVsix - Warner TV Southeast Asia - Yicai TV - Zee Cinema Asia - Zee News - Zee TV Asia Pacific - Zhejiang Satellite TV - ABC Australia Asia - Aljazeera English - Animal Planet - Animax Asia - Asian Food Network - Astro Cricket - AXN - BBC Earth - BBC Lifestyle - BeIn Sports 1 - BeIn Sports 2 - BeIn Sports Max 1 - BeIn Sports Max 2 - BeIn Sports Max 3 - Bloomberg TV Asia - Boomerang South East Asia - Cartoon Network Asia - CBeebies Asia - CCTV 1 - CCTV 4 Asia - Channel Adult - Cinemax Asia - CNA - CNBC Asia-Pacific - Colors Asia Pacific - CTI TV Asia - Da Vinci Asia - Discovery Asia - Discovery Channel - Discovery Science - DMAX Southeast Asia - DreamWorks TV Asia - EBC News Asia - ETTV Asia News - Fight Sports - Food Network Asia - France 24 Français - GMA Pinoy TV Asia-Pacific - HBO Asia - HBO Family Asia - HBO Hits - HBO Signature Asia - HGTV Asia - History Asia - HKS TV - Ice Fire - KBS World - Lifetime Asia - Movie Movie - MTV India - MUTV - National Geographic Asia - National Geographic Wild Asia - Nickelodeon South East Asia - Nick Jr Asia - Now 668 - Now Baogu Movies - Now Baogu Superstars - Now Business News Channel - Now Chinese Drama Channel - Now Data Channel - Now Direct - Now Golf 2 - Now Golf 3 - Now Jelli - Now News - Now Sports 1 - Now Sports 2 - Now Sports 3 - Now Sports 4 - Now Sports 4K - Now Sports 5 - Now Sports 6 - Now Sports 7 - Now Sports Plus - Now Sports Premier League 1 - Now Sports Premier League 2 - Now Sports Premier League 3 - Now Sports Premier League 4 - Now Sports Premier League 5 - Now Sports Premier League 6 - Now Sports Premier League TV - Now Sports Prime - Now Video Express - Outdoor Channel International - Phoenix Chinese Channel - Phoenix Hong Kong - Phoenix InfoNews Channel - Rock Entertainment - RugbyPass TV - Sansha TV - Shenzhen Satellite TV - SET India - Sony SAB TV Asia - Star Bharat India - Star Chinese Movies South East Asia - Star Gold - Star Plus Southeast Asia - Macau Asia Satellite TV - TFC Asia-Pacific - Thrill - TLC Southeast Asia - Travel Channel Asia - TV5Monde Asie - TV5Monde Style HD - TVBS Asia - TVN Asia - TVS 2 Southern TV - ViuTV - ViuTVsix - Warner TV Southeast Asia - Yicai TV - Zee Cinema Asia - Zee TV Asia Pacific - Zhejiang Satellite TV - - \ No newline at end of file + + DW Deutsch + ABC Australia Asia + Aljazeera English + Animal Planet + Animax Asia + Asian Food Network + Astro Cricket + AXN East Asia + BBC Earth Asia + BBC Lifestyle Asia + BBC World News + BeIn Sports 1 Hong Kong + BeIn Sports 2 Hong Kong + BeIn Sports Max 1 + BeIn Sports Max 2 + BeIn Sports Max 3 + Bloomberg TV + Boomerang + Cartoon Network + CBeebies Asia + CCTV 1 + CCTV 4 Asia + Channel Adult + Cinemax + CNA + CNBC + CNN + Colors + CTI TV Asia + Da Vinci + Discovery Asia + Discovery Channel + Discovery Science + DMAX Southeast Asia + DreamWorks TV + DW English + EBC News Asia + ETTV Asia News + EuroNews English + Fight Sports + Food Network + France 24 English + France 24 Français + GMA Life TV + GMA News TV International + GMA Pinoy TV Asia-Pacific + HBO + HBO Family + HBO Hits + HBO Signature + HGTV + History + HKS TV + Ice Fire + KBS World + Lifetime + Movie Movie + MTV India + MUTV + National Geographic + National Geographic Wild + NHK World Japan + NHK World Premium + Nickelodeon + Nick Jr + Now 668 + Now Baogu Movies + Now Baogu Superstars + Now Business News Channel + Now Chinese Drama Channel + Now Data Channel + Now Direct + Now Golf 2 + Now Golf 3 + Now Jelli + Now News + Now Sports 1 + Now Sports 2 + Now Sports 3 + Now Sports 4 + Now Sports 4K + Now Sports 5 + Now Sports 6 + Now Sports 7 + Now Sports Plus + Now Sports Premier League 1 + Now Sports Premier League 2 + Now Sports Premier League 3 + Now Sports Premier League 4 + Now Sports Premier League 5 + Now Sports Premier League 6 + Now Sports Premier League TV + Now Sports Prime + Now Video Express + Outdoor Channel International + Phoenix Chinese Channel + Phoenix Hong Kong + Phoenix InfoNews Channel + Rock Entertainment + RT News + RugbyPass TV + Sansha TV + Shenzhen Satellite TV + Sky News UK + SET India + Sony SAB TV Asia + Star Bharat India + Star Chinese Movies South East Asia + Star Gold + Star Plus Southeast Asia + Macau Asia Satellite TV + TFC Asia-Pacific + Thrill + TLC Southeast Asia + Travel Channel Asia + TV5Monde Asie + TV5Monde Style HD + TVBS Asia + TVN Asia + TVS 2 Southern TV + ViuTV + ViuTVsix + Warner TV Southeast Asia + Yicai TV + Zee Cinema Asia + Zee News + Zee TV Asia Pacific + Zhejiang Satellite TV + ABC Australia Asia + Aljazeera English + Animal Planet + Animax Asia + Asian Food Network + Astro Cricket + AXN + BBC Earth + BBC Lifestyle + BeIn Sports 1 + BeIn Sports 2 + BeIn Sports Max 1 + BeIn Sports Max 2 + BeIn Sports Max 3 + Bloomberg TV Asia + Boomerang South East Asia + Cartoon Network Asia + CBeebies Asia + CCTV 1 + CCTV 4 Asia + Channel Adult + Cinemax Asia + CNA + CNBC Asia-Pacific + Colors Asia Pacific + CTI TV Asia + Da Vinci Asia + Discovery Asia + Discovery Channel + Discovery Science + DMAX Southeast Asia + DreamWorks TV Asia + EBC News Asia + ETTV Asia News + Fight Sports + Food Network Asia + France 24 Français + GMA Pinoy TV Asia-Pacific + HBO Asia + HBO Family Asia + HBO Hits + HBO Signature Asia + HGTV Asia + History Asia + HKS TV + Ice Fire + KBS World + Lifetime Asia + Movie Movie + MTV India + MUTV + National Geographic Asia + National Geographic Wild Asia + Nickelodeon South East Asia + Nick Jr Asia + Now 668 + Now Baogu Movies + Now Baogu Superstars + Now Business News Channel + Now Chinese Drama Channel + Now Data Channel + Now Direct + Now Golf 2 + Now Golf 3 + Now Jelli + Now News + Now Sports 1 + Now Sports 2 + Now Sports 3 + Now Sports 4 + Now Sports 4K + Now Sports 5 + Now Sports 6 + Now Sports 7 + Now Sports Plus + Now Sports Premier League 1 + Now Sports Premier League 2 + Now Sports Premier League 3 + Now Sports Premier League 4 + Now Sports Premier League 5 + Now Sports Premier League 6 + Now Sports Premier League TV + Now Sports Prime + Now Video Express + Outdoor Channel International + Phoenix Chinese Channel + Phoenix Hong Kong + Phoenix InfoNews Channel + Rock Entertainment + RugbyPass TV + Sansha TV + Shenzhen Satellite TV + SET India + Sony SAB TV Asia + Star Bharat India + Star Chinese Movies South East Asia + Star Gold + Star Plus Southeast Asia + Macau Asia Satellite TV + TFC Asia-Pacific + Thrill + TLC Southeast Asia + Travel Channel Asia + TV5Monde Asie + TV5Monde Style HD + TVBS Asia + TVN Asia + TVS 2 Southern TV + ViuTV + ViuTVsix + Warner TV Southeast Asia + Yicai TV + Zee Cinema Asia + Zee TV Asia Pacific + Zhejiang Satellite TV + \ No newline at end of file diff --git a/sites/nowplayer.now.com/nowplayer.now.com.config.js b/sites/nowplayer.now.com/nowplayer.now.com.config.js index 0b63e9b2..9cf554ed 100644 --- a/sites/nowplayer.now.com/nowplayer.now.com.config.js +++ b/sites/nowplayer.now.com/nowplayer.now.com.config.js @@ -35,7 +35,7 @@ module.exports = { }, async channels({ lang }) { const html = await axios - .get(`https://nowplayer.now.com/channels`, { headers: { Accept: 'text/html' } }) + .get('https://nowplayer.now.com/channels', { headers: { Accept: 'text/html' } }) .then(r => r.data) .catch(console.log) diff --git a/sites/nowplayer.now.com/nowplayer.now.com.test.js b/sites/nowplayer.now.com/nowplayer.now.com.test.js index f9bea918..da866de9 100644 --- a/sites/nowplayer.now.com/nowplayer.now.com.test.js +++ b/sites/nowplayer.now.com/nowplayer.now.com.test.js @@ -1,5 +1,5 @@ // npm run channels:parse -- --config=./sites/nowplayer.now.com/nowplayer.now.com.config.js --output=./sites/nowplayer.now.com/nowplayer.now.com.channels.xml --set=lang:zh -// npx epg-grabber --config=sites/nowplayer.now.com/nowplayer.now.com.config.js --channels=sites/nowplayer.now.com/nowplayer.now.com.channels.xml --output=guide.xml --timeout=30000 --days=2 +// npm run grab -- --site=nowplayer.now.com const { parser, url, request } = require('./nowplayer.now.com.config.js') const dayjs = require('dayjs') @@ -30,12 +30,13 @@ it('can generate valid url for tomorrow', () => { it('can generate valid request headers', () => { expect(request.headers({ channel })).toMatchObject({ - Cookie: `LANG=zh; Expires=null; Path=/; Domain=nowplayer.now.com` + Cookie: 'LANG=zh; Expires=null; Path=/; Domain=nowplayer.now.com' }) }) it('can parse response', () => { - const content = `[[{"key":"key_202111174524739","vimProgramId":"202111174524739","name":"ViuTVsix Station Closing","start":1637690400000,"end":1637715600000,"date":"20211124","startTime":"02:00AM","endTime":"09:00AM","duration":420,"recordable":false,"restartTv":false,"npvrProg":false,"npvrStartTime":0,"npvrEndTime":0,"cid":"viutvsix station closing","cc":"","isInWatchlist":false}]]` + const content = + '[[{"key":"key_202111174524739","vimProgramId":"202111174524739","name":"ViuTVsix Station Closing","start":1637690400000,"end":1637715600000,"date":"20211124","startTime":"02:00AM","endTime":"09:00AM","duration":420,"recordable":false,"restartTv":false,"npvrProg":false,"npvrStartTime":0,"npvrEndTime":0,"cid":"viutvsix station closing","cc":"","isInWatchlist":false}]]' const result = parser({ content }).map(p => { p.start = p.start.toJSON() p.stop = p.stop.toJSON() @@ -53,7 +54,7 @@ it('can parse response', () => { it('can handle empty guide', () => { const result = parser({ - content: `[[]]` + content: '[[]]' }) expect(result).toMatchObject([]) }) diff --git a/sites/nuevosiglo.com.uy/nuevosiglo.com.uy.channels.xml b/sites/nuevosiglo.com.uy/nuevosiglo.com.uy.channels.xml index 64854368..8e7d492d 100644 --- a/sites/nuevosiglo.com.uy/nuevosiglo.com.uy.channels.xml +++ b/sites/nuevosiglo.com.uy/nuevosiglo.com.uy.channels.xml @@ -1,179 +1,177 @@ - - - A24 - BBC WORLD - BLOOMBERG - C5N - SAETA - 26 TV HD - CANAL 4 MONTECARLO - CANAL 5 - CARTOONITO - CIUDAD MAGAZINE - CNN EN ESPAÑOL - CRONICA TV - CANAL VASCO - EUROCHANNEL - EUROPA EUROPA - EWTN - FOX NEWS - GALICIA TV - GOLDEN PLUS - GOLDEN PREMIER HD - GOL TV - HBO FAMILY HD - HBO - HBO MUNDI HD - HBO SIGNATURE HD - HBO XTREME HD - HOLA TV - KANAL D DRAMA - LN+ - LAS ESTRELLAS HD - NS EVENTOS 1 - NS EVENTOS 2 - NS EVENTOS 3 - NUEVO SIGLO TV - PASIONES - PLAYBOY - SEXTREME - TELEDOCE - TELEFE INTER - TN - TOONCAST - TRU TV - TVN CHILE - TEVECIUDAD - VENUS - VTV - VTV PLUS - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A24 + BBC WORLD + BLOOMBERG + C5N + SAETA + 26 TV HD + CANAL 4 MONTECARLO + CANAL 5 + CARTOONITO + CIUDAD MAGAZINE + CNN EN ESPAÑOL + CRONICA TV + CANAL VASCO + EUROCHANNEL + EUROPA EUROPA + EWTN + FOX NEWS + GALICIA TV + GOLDEN PLUS + GOLDEN PREMIER HD + GOL TV + HBO FAMILY HD + HBO + HBO MUNDI HD + HBO SIGNATURE HD + HBO XTREME HD + HOLA TV + KANAL D DRAMA + LN+ + LAS ESTRELLAS HD + NS EVENTOS 1 + NS EVENTOS 2 + NS EVENTOS 3 + NUEVO SIGLO TV + PASIONES + PLAYBOY + SEXTREME + TELEDOCE + TELEFE INTER + TN + TOONCAST + TRU TV + TVN CHILE + TEVECIUDAD + VENUS + VTV + VTV PLUS + diff --git a/sites/nuevosiglo.com.uy/nuevosiglo.com.uy.config.js b/sites/nuevosiglo.com.uy/nuevosiglo.com.uy.config.js index 7863522f..c337095d 100644 --- a/sites/nuevosiglo.com.uy/nuevosiglo.com.uy.config.js +++ b/sites/nuevosiglo.com.uy/nuevosiglo.com.uy.config.js @@ -30,8 +30,6 @@ module.exports = { const programId = parseProgramId($item) const details = await loadProgramDetails(programId) if (!details) continue - const start = parseStart(details) - const stop = parseStop(details) programs.push({ title: details.main_title, description: details.short_argument, diff --git a/sites/nuevosiglo.com.uy/nuevosiglo.com.uy.test.js b/sites/nuevosiglo.com.uy/nuevosiglo.com.uy.test.js index 443ffd68..580326bb 100644 --- a/sites/nuevosiglo.com.uy/nuevosiglo.com.uy.test.js +++ b/sites/nuevosiglo.com.uy/nuevosiglo.com.uy.test.js @@ -1,5 +1,5 @@ // npm run channels:parse -- --config=./sites/nuevosiglo.com.uy/nuevosiglo.com.uy.config.js --output=./sites/nuevosiglo.com.uy/nuevosiglo.com.uy.channels.xml -// npx epg-grabber --config=sites/nuevosiglo.com.uy/nuevosiglo.com.uy.config.js --channels=sites/nuevosiglo.com.uy/nuevosiglo.com.uy.channels.xml --output=guide.xml --days=2 +// npm run grab -- --site=nuevosiglo.com.uy const { parser, url } = require('./nuevosiglo.com.uy.config.js') const fs = require('fs') @@ -51,7 +51,7 @@ it('can parse response', async () => { expect(results[0]).toMatchObject({ start: '2023-02-10T01:11:00.000Z', stop: '2023-02-10T03:46:00.000Z', - title: `Jurassic World: Dominion`, + title: 'Jurassic World: Dominion', description: 'Años después de la destrucción de Isla Nublar, los dinosaurios viven y cazan junto a los humanos. Este equilibrio determinará, si los humanos seguirán siendo los depredadores máximos en un planeta que comparten con las criaturas temibles.', icon: 'https://img-ns.s3.amazonaws.com/grid_data/23354476.jpg', @@ -66,7 +66,7 @@ it('can parse response', async () => { expect(results[1]).toMatchObject({ start: '2023-02-11T02:06:00.000Z', stop: '2023-02-11T04:16:00.000Z', - title: `Black Adam`, + title: 'Black Adam', description: 'Black Adam es liberado de su tumba casi cinco mil años después de haber sido encarcelado y recibir sus poderes de los antiguos dioses. Ahora está listo para desatar su forma única de justicia en el mundo.', icon: 'https://img-ns.s3.amazonaws.com/grid_data/24638423.jpg', @@ -93,7 +93,7 @@ it('can parse response', async () => { it('can handle empty guide', async () => { const results = await parser({ channel, - content: `` + content: '' }) expect(results).toMatchObject([]) diff --git a/sites/ontvtonight.com/ontvtonight.com.config.js b/sites/ontvtonight.com/ontvtonight.com.config.js index 3c8c06fb..673be064 100644 --- a/sites/ontvtonight.com/ontvtonight.com.config.js +++ b/sites/ontvtonight.com/ontvtonight.com.config.js @@ -20,7 +20,7 @@ module.exports = { days: 2, url: function ({ date, channel }) { const [region, id] = channel.site_id.split('#') - let url = `https://www.ontvtonight.com` + let url = 'https://www.ontvtonight.com' if (region) url += `/${region}` url += `/guide/listings/channel/${id}.html?dt=${date.format('YYYY-MM-DD')}` @@ -32,7 +32,7 @@ module.exports = { items.forEach(item => { const prev = programs[programs.length - 1] const $item = cheerio.load(item) - const start = parseStart($item, date, channel) + let start = parseStart($item, date, channel) if (prev) { if (start.isBefore(prev.start)) { start = start.add(1, 'd') @@ -54,7 +54,7 @@ module.exports = { } function parseStart($item, date, channel) { - const [region, id] = channel.site_id.split('#') + const [region] = channel.site_id.split('#') const timezone = region ? tz[region] : tz['uk'] const timeString = $item('td:nth-child(1) > h5').text().trim() const dateString = `${date.format('YYYY-MM-DD')} ${timeString}` diff --git a/sites/ontvtonight.com/ontvtonight.com.test.js b/sites/ontvtonight.com/ontvtonight.com.test.js index 54dbf8a9..70b85b91 100644 --- a/sites/ontvtonight.com/ontvtonight.com.test.js +++ b/sites/ontvtonight.com/ontvtonight.com.test.js @@ -1,5 +1,5 @@ -// npx epg-grabber --config=sites/ontvtonight.com/ontvtonight.com.config.js --channels=sites/ontvtonight.com/ontvtonight.com_au.channels.xml --output=guide.xml --days=2 -// npx epg-grabber --config=sites/ontvtonight.com/ontvtonight.com.config.js --channels=sites/ontvtonight.com/ontvtonight.com_us.channels.xml --output=guide.xml --days=2 +// npm run grab -- --site=ontvtonight.com +// npm run grab -- --site=ontvtonight.com const { parser, url } = require('./ontvtonight.com.config.js') const dayjs = require('dayjs') @@ -13,7 +13,8 @@ const channel = { site_id: 'au#1692/7two', xmltv_id: '7two.au' } -const content = ` 12:10 am What A Carry On 12:50 am Bones The Devil In The Details 10:50 pm Inspector Morse: The Remorseful Day ` +const content = + ' 12:10 am What A Carry On 12:50 am Bones The Devil In The Details 10:50 pm Inspector Morse: The Remorseful Day ' it('can generate valid url', () => { expect(url({ channel, date })).toBe( @@ -32,18 +33,18 @@ it('can parse response', () => { { start: '2021-11-24T13:10:00.000Z', stop: '2021-11-24T13:50:00.000Z', - title: `What A Carry On` + title: 'What A Carry On' }, { start: '2021-11-24T13:50:00.000Z', stop: '2021-11-25T11:50:00.000Z', - title: `Bones`, + title: 'Bones', description: 'The Devil In The Details' }, { start: '2021-11-25T11:50:00.000Z', stop: '2021-11-25T12:50:00.000Z', - title: `Inspector Morse: The Remorseful Day` + title: 'Inspector Morse: The Remorseful Day' } ]) }) @@ -52,7 +53,7 @@ it('can handle empty guide', () => { const result = parser({ date, channel, - content: `` + content: '' }) expect(result).toMatchObject([]) }) diff --git a/sites/ontvtonight.com/ontvtonight.com_au.channels.xml b/sites/ontvtonight.com/ontvtonight.com_au.channels.xml index 2f69c243..60c6b551 100644 --- a/sites/ontvtonight.com/ontvtonight.com_au.channels.xml +++ b/sites/ontvtonight.com/ontvtonight.com_au.channels.xml @@ -1,55 +1,53 @@ - - - 10 Bold - 10 Peach - 10 Shake - 7 flix - 7 mate - 7 Two - 9 Gem - 9 Go! - 9 Life - 9 Rush - ABC Kids / ABC TV Plus - ABC ME - ABC News - ABC TV - A&E Australia - Ten - Seven - Nine - ESPN Australia - Fox 8 - Fox Arena - Fox Classics - Fox Comedy - Fox Crime - Fox Docos - Fox Funny - Fox News - Fox One - Fox SciFi - Fox Showcase - Fox Sleuth - Foxtel Movies Ultra HD - Foxtel Movies Action - Foxtel Movies Comedy - Foxtel Movies Drama - Foxtel Movies Family - Foxtel Movies Greats - Foxtel Movies Kids - Foxtel Movies Premiere - Foxtel Movies Romance - Foxtel Movies Thriller - NITV - PBS Kids - Racing.com - SBS Food - SBS One - SBS World Movies - SBS WorldWatch - Sky News Regional - SpreeTV - - + + 10 Bold + 10 Peach + 10 Shake + 7 flix + 7 mate + 7 Two + 9 Gem + 9 Go! + 9 Life + 9 Rush + ABC Kids / ABC TV Plus + ABC ME + ABC News + ABC TV + A&E Australia + Ten + Seven + Nine + ESPN Australia + Fox 8 + Fox Arena + Fox Classics + Fox Comedy + Fox Crime + Fox Docos + Fox Funny + Fox News + Fox One + Fox SciFi + Fox Showcase + Fox Sleuth + Foxtel Movies Action + Foxtel Movies Comedy + Foxtel Movies Drama + Foxtel Movies Family + Foxtel Movies Greats + Foxtel Movies Kids + Foxtel Movies Premiere + Foxtel Movies Romance + Foxtel Movies Thriller + Foxtel Movies Ultra HD + NITV + PBS Kids + Racing.com + SBS One + SBS Food + SBS World Movies + SBS WorldWatch + Sky News Regional + SpreeTV + diff --git a/sites/ontvtonight.com/ontvtonight.com_ie.channels.xml b/sites/ontvtonight.com/ontvtonight.com_ie.channels.xml index 050b17b1..10b695ea 100644 --- a/sites/ontvtonight.com/ontvtonight.com_ie.channels.xml +++ b/sites/ontvtonight.com/ontvtonight.com_ie.channels.xml @@ -1,8 +1,6 @@ - - - Oireachtas TV - RTÉ News - TG 4 - - \ No newline at end of file + + Oireachtas TV + RTÉ News + TG 4 + \ No newline at end of file diff --git a/sites/ontvtonight.com/ontvtonight.com_uk.channels.xml b/sites/ontvtonight.com/ontvtonight.com_uk.channels.xml index c325c20c..0126862f 100644 --- a/sites/ontvtonight.com/ontvtonight.com_uk.channels.xml +++ b/sites/ontvtonight.com/ontvtonight.com_uk.channels.xml @@ -1,103 +1,101 @@ - - - E4 Extra - 4Seven - 5 Action - 5 Select - 5 Star - 5 USA - 92 News - Ahlulbayt TV - Akaal Channel UK - Aljazeera English - BBC Four - BBC News - BBC One - BBC One London - BBC One Scotland - BBC Parliament - BBC Red Button 1 - BBC Two - Blaze UK - Box Hits - Brit Asia TV - CBBC - CBeebies UK - CBS Drama UK - CBS Justice UK - CBS Reality UK - Challenge UK - Challenge +1 UK - Channel 5 - Channel 5 +1 - CITV - Create and Craft - Cruise 1st TV - Dave ja vu - Dave UK - DMAX UK - Drama UK - Drama UK +1 - E4 UK - E4 UK +1 - Eman Channel - Film 4 UK - Film 4 UK +1 - Food Network UK - ViaplayXtra - Gems TV - Great! Movies - Great! Movies Action - Great! Movies Classic - Great! Movies Classic +1 - Great! TV - Great! TV +1 - HGTV UK - Horror Channel UK - - Ideal World - ITV 2 - ITV 2 +1 - ITV 3 - ITV 3 +1 - ITV 4 - ITV 4 +1 - ITV Be - ITV London - Jewellery Maker - Kanshi TV - KTO - London Live - More 4 UK - Now 80's - PBS America - Pick UK - Pop - Quest Red UK - Quest Red UK +1 - Quest UK - Quest UK +1 - QVC Beauty - QVC Style UK - QVC UK - Racing TV - Really UK - RT News - RT UK - Sangat TV - SBN International - Sky Arts UK - Sky Max UK - Smithsonian Channel UK - Spotlight TV - Talking Pictures TV - TBN UK - The Box UK - Tiny Pop - TJC - Together TV - Yesterday - Yesterday +1 - - + + + 4Seven + 5 Action + 5 Select + 5 Star + 5 USA + 92 News + Ahlulbayt TV + Akaal Channel UK + Aljazeera English + BBC Four + BBC News + BBC One + BBC One London + BBC One Scotland + BBC Parliament + BBC Red Button 1 + BBC Two + Blaze UK + Box Hits + Brit Asia TV + CBBC + CBeebies UK + CBS Drama UK + CBS Justice UK + CBS Reality UK + Challenge UK + Challenge +1 UK + Channel 5 + Channel 5 +1 + CITV + Create and Craft + Cruise 1st TV + Dave UK + Dave ja vu + DMAX UK + Drama UK + Drama UK +1 + E4 UK + E4 Extra + E4 UK +1 + Eman Channel + Film 4 UK + Film 4 UK +1 + Food Network UK + Gems TV + Great! Movies + Great! Movies Action + Great! Movies Classic + Great! Movies Classic +1 + Great! TV + Great! TV +1 + HGTV UK + Ideal World + ITV London + ITV 2 + ITV 2 +1 + ITV 3 + ITV 3 +1 + ITV 4 + ITV 4 +1 + ITV Be + Jewellery Maker + Kanshi TV + KTO + Horror Channel UK + London Live + More 4 UK + Now 80's + PBS America + Pick UK + Pop + Quest Red UK + Quest Red UK +1 + Quest UK + Quest UK +1 + QVC Beauty + QVC Style UK + QVC UK + Racing TV + Really UK + RT News + RT UK + Sangat TV + SBN International + Sky Arts UK + Sky Max UK + Smithsonian Channel UK + Spotlight TV + Talking Pictures TV + TBN UK + The Box UK + Tiny Pop + TJC + Together TV + ViaplayXtra + Yesterday + Yesterday +1 + diff --git a/sites/ontvtonight.com/ontvtonight.com_us.channels.xml b/sites/ontvtonight.com/ontvtonight.com_us.channels.xml index aee570e4..f8e656e9 100644 --- a/sites/ontvtonight.com/ontvtonight.com_us.channels.xml +++ b/sites/ontvtonight.com/ontvtonight.com_us.channels.xml @@ -1,41 +1,39 @@ - - - ABC East - ACC Network - ActionMAX (East) - AMC (East) - Animal Planet (East) - BBC America (East) - beIN Sports (English) - BET Her West - BET Jams - BET Soul - Big Ten Network (National) - Cheddar News - De Película Clásico - De Película - De Película EUA (USA) - Investigation Discovery West - K16IW CMC-USA - K16IW CMC-TV - Sports News Highlights (KDNU-LD5) Las Vegas, NV - MeTV (KITV-DT2) Honolulu, HI - Hawaii TV (KITV-DT3) Honolulu, HI - MeTV (KREG-TV) Glenwood Springs, CO - KYAZ MeTV+ - MSG WNY - News12 Bronx - News12 Brooklyn - News12 New Jersey - News 12 Hudson Valley - News12 Westchester - Lifetime Movies West - Lifetime West - TBS Superstation (East) - truTV HDTV (West) - CBS (WCBS) - XEWT 12 BC - XHBC Tu Canal HDTV - - + + ABC East + ACC Network + ActionMAX (East) + AMC (East) + Animal Planet (East) + BBC America (East) + beIN Sports (English) + BET Her West + BET Jams + BET Soul + Big Ten Network (National) + Cheddar News + Investigation Discovery West + K16IW CMC-USA + K16IW CMC-TV + Sports News Highlights (KDNU-LD5) Las Vegas, NV + MeTV (KITV-DT2) Honolulu, HI + Hawaii TV (KITV-DT3) Honolulu, HI + MeTV (KREG-TV) Glenwood Springs, CO + KYAZ MeTV+ + Lifetime Movies West + Lifetime West + MSG WNY + News12 Bronx + News12 Brooklyn + News 12 Hudson Valley + News12 New Jersey + News12 Westchester + TBS Superstation (East) + truTV HDTV (West) + CBS (WCBS) + De Película Clásico + De Película + De Película EUA (USA) + XEWT 12 BC + XHBC Tu Canal HDTV + diff --git a/sites/osn.com/osn.com.channels.xml b/sites/osn.com/osn.com.channels.xml deleted file mode 100644 index c46b56a8..00000000 --- a/sites/osn.com/osn.com.channels.xml +++ /dev/null @@ -1,213 +0,0 @@ - - - - - - - - - - Kapatid TV5 - Al Aan TV - Al Dafrah TV - Alfa Series +2 - Alfa Series Channel - AL Hurra HD - AlMamlaka TV - Al Safwa - Al Wosta from Al Dhaid - Al Yawm - ANC - Arirang TV - ART Aflam 1 - ART Aflam 2 - ART Cinema - Hekayat - Hekayat 2 - B4U Aflam - B4U Plus - BabyTV Europe - Bahrain TV - BBC Arabic - BBC World - Bloomberg - CGTN - CGTN Arabic - Cinema 1 - Cinema 2 - Cinema One Global - Cine Mo - CNBC Arabia - CNBC - Crime + Investigation Network - Discovery HD - Discovery Science HD - Disney HD - Disney Junior - Dubai Racing 1 HD - Dubai Racing 3 - E! Entertainment HD - Fann - France 24 - France 24 English - GMA Life TV - GMA News TV - GMA Pinoy TV - H2 HD - History HD - Discovery ID - KTV1 HD - KTV2 HD - KTV Majlis HD - Al Qurain HD - KTV Arabe HD - KTV Ethraa HD - KTV Sport HD - KTV Sport Plus HD - Madani TV - Marina TV - Moonbug Kids - MTV 00s - MTV Live HD - Music Now - Myx - Nat Geo HD - Nat Geo Wild HD - NHK World TV - Nickelodeon HD - Nick Jr - NickToons HD - OSN Comedy - OSN Family - OSN Kids - OSN Kidzone - OSN Living - OSN Mezze - OSN Movies Action - OSN Movies Hollywood - OSN Movies Premiere - OSN Movies Premiere +2 - OSN News - OSN Popup - OSN Series Prime - OSN Showcase - OSN W - OSN Yahala - OSN Yahala Aflam - OSN Yahala Bil Arabi - PBA Rush - Al Roya TV - Rusiya Al Yawm - Sharjah Sport HD - Sharjah TV - Sharqiya from Kalba - Sky News Arabia - Sky News HD - Star Movies HD - Star World HD - DZMM Teleradyo - TFC - TLC HD - Kapatid TV5 - Al Aan TV - Al Dafrah TV - Alfa Series +2 - Alfa Series Channel - AL Hurra HD - AlMamlaka TV - Al Safwa - Al Wosta from Al Dhaid - Al Yawm - ANC - Arirang TV - ART Aflam 1 - ART Aflam 2 - ART Cinema - Hekayat - Hekayat 2 - B4U Aflam - B4U Plus - BabyTV Europe - Bahrain TV - BBC Arabic - BBC World - Bloomberg - CGTN - CGTN Arabic - Cinema 1 - Cinema 2 - Cinema One Global - Cine Mo - CNBC Arabia - CNBC - Crime + Investigation Network - Discovery HD - Discovery Science HD - Disney HD - Disney Junior - Dubai Racing 1 HD - Dubai Racing 3 - E! Entertainment HD - Fann - France 24 - France 24 English - GMA Life TV - GMA News TV - GMA Pinoy TV - H2 HD - History HD - Discovery ID - KTV1 HD - KTV2 HD - KTV Majlis HD - Al Qurain HD - KTV Arabe HD - KTV Ethraa HD - KTV Sport HD - KTV Sport Plus HD - Madani TV - Marina TV - Moonbug Kids - MTV 00s - MTV Live HD - Music Now - Myx - Nat Geo HD - Nat Geo Wild HD - NHK World TV - Nickelodeon HD - Nick Jr - NickToons HD - OSN Comedy - OSN Family - OSN Kids - OSN Kidzone - OSN Living - OSN Mezze - OSN Movies Action - OSN Movies Hollywood - OSN Movies Premiere - OSN Movies Premiere +2 - OSN News - OSN Popup - OSN Series Prime - OSN Showcase - OSN W - OSN Yahala - OSN Yahala Aflam - OSN Yahala Bil Arabi - PBA Rush - Al Roya TV - Rusiya Al Yawm - Sharjah Sport HD - Sharjah TV - Sharqiya from Kalba - Sky News Arabia - Sky News HD - Star Movies HD - Star World HD - DZMM Teleradyo - TFC - TLC HD - - \ No newline at end of file diff --git a/sites/osn.com/osn.com.config.js b/sites/osn.com/osn.com.config.js index cceabbfc..955b0756 100644 --- a/sites/osn.com/osn.com.config.js +++ b/sites/osn.com/osn.com.config.js @@ -6,10 +6,9 @@ dayjs.extend(utc) dayjs.extend(timezone) module.exports = { - skip: true, // NOTE: return an HTTP error 302 on requests from GitHub server (https://github.com/iptv-org/epg/issues/1654#issuecomment-1382915005) site: 'osn.com', days: 2, - url: `https://www.osn.com/CMSPages/TVScheduleWebService.asmx/GetTVChannelsProgramTimeTable`, + url: 'https://www.osn.com/CMSPages/TVScheduleWebService.asmx/GetTVChannelsProgramTimeTable', request: { method: 'POST', headers: { @@ -58,7 +57,7 @@ function parseDuration(item) { return parseInt(item.TotalDivWidth / 4.8) } -function parseStart(item, channel) { +function parseStart(item) { const time = item.StartDateTime return dayjs.tz(time, 'DD MMM YYYY, HH:mm', 'Asia/Dubai') diff --git a/sites/osn.com/osn.com_ar.channels.xml b/sites/osn.com/osn.com_ar.channels.xml new file mode 100644 index 00000000..4c123011 --- /dev/null +++ b/sites/osn.com/osn.com_ar.channels.xml @@ -0,0 +1,104 @@ + + + Kapatid TV5 + Al Aan TV + Al Dafrah TV + Alfa Series +2 + Alfa Series Channel + AL Hurra HD + AlMamlaka TV + Al Safwa + Al Wosta from Al Dhaid + Al Yawm + ANC + Arirang TV + ART Aflam 1 + ART Aflam 2 + ART Cinema + Hekayat + Hekayat 2 + B4U Aflam + B4U Plus + BabyTV Europe + Bahrain TV + BBC Arabic + BBC World + Bloomberg + CGTN + CGTN Arabic + Cinema 1 + Cinema 2 + Cinema One Global + Cine Mo + CNBC Arabia + CNBC + Crime + Investigation Network + Discovery HD + Discovery Science HD + Disney HD + Disney Junior + Dubai Racing 1 HD + Dubai Racing 3 + E! Entertainment HD + Fann + France 24 + France 24 English + GMA Life TV + GMA News TV + GMA Pinoy TV + H2 HD + History HD + Discovery ID + KTV1 HD + KTV2 HD + KTV Majlis HD + Al Qurain HD + KTV Arabe HD + KTV Ethraa HD + KTV Sport HD + KTV Sport Plus HD + Madani TV + Marina TV + Moonbug Kids + MTV 00s + MTV Live HD + Music Now + Myx + Nat Geo HD + Nat Geo Wild HD + NHK World TV + Nickelodeon HD + Nick Jr + NickToons HD + OSN Comedy + OSN Family + OSN Kids + OSN Kidzone + OSN Living + OSN Mezze + OSN Movies Action + OSN Movies Hollywood + OSN Movies Premiere + OSN Movies Premiere +2 + OSN News + OSN Popup + OSN Series Prime + OSN Showcase + OSN W + OSN Yahala + OSN Yahala Aflam + OSN Yahala Bil Arabi + PBA Rush + Al Roya TV + Rusiya Al Yawm + Sharjah Sport HD + Sharjah TV + Sharqiya from Kalba + Sky News Arabia + Sky News HD + Star Movies HD + Star World HD + DZMM Teleradyo + TFC + TLC HD + \ No newline at end of file diff --git a/sites/osn.com/osn.com_en.channels.xml b/sites/osn.com/osn.com_en.channels.xml new file mode 100644 index 00000000..d69387d3 --- /dev/null +++ b/sites/osn.com/osn.com_en.channels.xml @@ -0,0 +1,104 @@ + + + Kapatid TV5 + Al Aan TV + Al Dafrah TV + Alfa Series +2 + Alfa Series Channel + AL Hurra HD + AlMamlaka TV + Al Safwa + Al Wosta from Al Dhaid + Al Yawm + ANC + Arirang TV + ART Aflam 1 + ART Aflam 2 + ART Cinema + Hekayat + Hekayat 2 + B4U Aflam + B4U Plus + BabyTV Europe + Bahrain TV + BBC Arabic + BBC World + Bloomberg + CGTN + CGTN Arabic + Cinema 1 + Cinema 2 + Cinema One Global + Cine Mo + CNBC Arabia + CNBC + Crime + Investigation Network + Discovery HD + Discovery Science HD + Disney HD + Disney Junior + Dubai Racing 1 HD + Dubai Racing 3 + E! Entertainment HD + Fann + France 24 + France 24 English + GMA Life TV + GMA News TV + GMA Pinoy TV + H2 HD + History HD + Discovery ID + KTV1 HD + KTV2 HD + KTV Majlis HD + Al Qurain HD + KTV Arabe HD + KTV Ethraa HD + KTV Sport HD + KTV Sport Plus HD + Madani TV + Marina TV + Moonbug Kids + MTV 00s + MTV Live HD + Music Now + Myx + Nat Geo HD + Nat Geo Wild HD + NHK World TV + Nickelodeon HD + Nick Jr + NickToons HD + OSN Comedy + OSN Family + OSN Kids + OSN Kidzone + OSN Living + OSN Mezze + OSN Movies Action + OSN Movies Hollywood + OSN Movies Premiere + OSN Movies Premiere +2 + OSN News + OSN Popup + OSN Series Prime + OSN Showcase + OSN W + OSN Yahala + OSN Yahala Aflam + OSN Yahala Bil Arabi + PBA Rush + Al Roya TV + Rusiya Al Yawm + Sharjah Sport HD + Sharjah TV + Sharqiya from Kalba + Sky News Arabia + Sky News HD + Star Movies HD + Star World HD + DZMM Teleradyo + TFC + TLC HD + \ No newline at end of file diff --git a/sites/pbsguam.org/pbsguam.org.channels.xml b/sites/pbsguam.org/pbsguam.org.channels.xml index 39d07196..52a795ba 100644 --- a/sites/pbsguam.org/pbsguam.org.channels.xml +++ b/sites/pbsguam.org/pbsguam.org.channels.xml @@ -1,6 +1,4 @@ - - - PBS Guam (KGTF) Hagåtña, Guam - - \ No newline at end of file + + PBS Guam (KGTF) Hagåtña, Guam + \ No newline at end of file diff --git a/sites/pbsguam.org/pbsguam.org.config.js b/sites/pbsguam.org/pbsguam.org.config.js index e4392f0d..5f0ce258 100644 --- a/sites/pbsguam.org/pbsguam.org.config.js +++ b/sites/pbsguam.org/pbsguam.org.config.js @@ -23,9 +23,14 @@ module.exports = { } function parseItems(content, date) { - const [_, json] = content.match(/EventsSchedule_1 = (.*);/i) || [null, null] - if (!json) return [] - const data = JSON.parse(json) + const [, json] = content.match(/EventsSchedule_1 = (.*);/i) || [null, ''] + let data + try { + data = JSON.parse(json) + } catch (error) { + return [] + } + if (!data || !Array.isArray(data.feed)) return [] return data.feed.filter( diff --git a/sites/pbsguam.org/pbsguam.org.test.js b/sites/pbsguam.org/pbsguam.org.test.js index b491246e..732b4f06 100644 --- a/sites/pbsguam.org/pbsguam.org.test.js +++ b/sites/pbsguam.org/pbsguam.org.test.js @@ -1,4 +1,4 @@ -// npx epg-grabber --config=sites/pbsguam.org/pbsguam.org.config.js --channels=sites/pbsguam.org/pbsguam.org.channels.xml --output=guide.xml --days=2 +// npm run grab -- --site=pbsguam.org const { parser, url } = require('./pbsguam.org.config.js') const dayjs = require('dayjs') @@ -20,7 +20,7 @@ it('can generate valid url', () => { it('can parse response', () => { const content = ` ` const result = parser({ date, content }).map(p => { @@ -42,7 +42,7 @@ it('can handle empty guide', () => { const result = parser({ date, channel, - content: ` ` + content: ' ' }) expect(result).toMatchObject([]) }) diff --git a/sites/plex.tv/plex.tv.channels.xml b/sites/plex.tv/plex.tv.channels.xml index 98add2a0..6d19c7ca 100644 --- a/sites/plex.tv/plex.tv.channels.xml +++ b/sites/plex.tv/plex.tv.channels.xml @@ -1,345 +1,343 @@ - - - - 24 Hour Free Movies - ACCDN - AccuWeather NOW - ACL Cornhole TV - ACTION!!! - Action News Jax - AfroLandTV - AFV Family - ALF - ALLBLK Gems - All Reality WE tv - All Weddings WE tv - ALTRD.TV - AMC Thrillers - Anger Management - Antiques Roadshow UK - Antiques Road Trip - Are We There Yet? - ARTFLIX - Movie Classics - ARTS TWG+ - AsianCrush - At Home with Family Handyman - AXS TV NOW - BABY SHARK TV - BACKSTAGE - BBC Food - BBC Home & Garden - Beautiful Planet - beIN SPORTS XTRA - Best TV Ever - Billiard TV - BITE - Bjgtjme - Free Movies - BlackPix - Bloomberg Quicktake - Bloomberg TV - Boonie Cubs TV - Boston 25 News - CampusLore Sports - Caught in Providence - Cheddar News - Chicken Soup for the Soul - ChiveTV - Choppertown - CineLife - Cinema Libre Channel - CINEPRIDE - Cine Sureño - Cineverse Selects - Classic Doctor Who - Classic Rock Network - ClixTV - Comedy Dynamics - COMMUNE - CONtv - CONtv Anime - Cooking Panda - Cowboy Way - Crackle - Crime 360 - Dark Matter TV - Discover Film - Doctors - Documentary+ - Docurama - Don't Tell The Bride - Dove - Dungeon TV - Edge Sport - Electric Now - EL REY - Entrepreneur TV - ESTV - Euronews - Euronews Français - Euronews Deutsch - Euronews Italiano - FailArmy - FamilyTime - Farscape - Fight Network - Filmstream - Fite 24/7 - Flash - FLOU Cine - FOX13 Memphis - FOX23 Tulsa - Freebie TV - Freebie TV - Los Pitufos - FrightFlix - FTF Sports - Fubo Sports Network - FUEL TV - GAGO TV - Galxy TV - Game Show Central - GFN TV - Glewed TV - GoTraveler - GoUSA TV - Go Wild - Gravitas Adrenaline - Gravitas Documentaries - Gravitas Movies - Grjngo - Western Movies - GUSTOTV - Hallmark Movies & More - Hannibal - HappiTV - Hard Knocks - HBCU-GO Sports - History Hit - Hi-YAH! - Home.Made.Nation - Humor Mill - i24NEWS Updates - IFC Films Picks - IGN1 - IMPACT Wrestling - Impossible - Quiz Show - INFAST - Johnny Carson TV - Journy - JOURNY Presents: America the Beautiful - Judge Faith - Julia Child - LOL! Network - Kidoodle TV - KidsFlix - Kids Pang TV - Kin - Kino Cult - KIRO 7 Seattle - KMTV - La Bocina Latina - La Corriente - Law & Crime - Local Now Bergen County - Local Now Long Island - Local Now Manhattan - Local Now Newburgh - Local Now New York City - Local Now White Plains - LOL! Stand Up - Lone Star Network - Love Destination - Love Nature - Made In Hollywood - MagellanTV NOW - Maverick Black Cinema - MAVTV Select - MBC - MegaNoticias - MHz Now - Midnight Pulp - MMA TV - MOB TV - Moconomy - Economy & Finance Infotainment - More U - Motorvision TV - MOVIESPHERE - MST3K - Mystery Alley - NBC News NOW - NEW K.MOVIES - NEW K-POP - News 12 New York - Newsmax TV - Newsy - NHRA TV - Ninja Kidz TV - Nosey - OnDemandChina - Outdoor America - Outside - Overtime - Party Poker TV - Pattrn - PBS Antiques Roadshow - PBS Nature - People are Awesome - PeopleTV - PlayWorks - pocket.watch - Poker Night TV - Popcornflix - Popstar! TV - POPSUGAR Fitness - Portlandia - Pro Wrestling TV - PW Kids - Qello Concerts by Stingray - QwestTV Classical - QwestTV Jazz & Beyond - QwestTV Mix - Racing America - Rakuten Viki - RCN Más - Real Life - Real Nosey - Real Stories - Real Wild - RetroCrush - Reuters TV - Revry - RevryNews - Runtime - Ryan and Friends - Samuel Goldwyn Channel - Samuel Goldwyn Classics - Samuel Goldwyn International - Scream Factory TV - Shemaroo Bollywood - Shorts - Shout! Cult - Shout! Factory TV Stream - Skills + Thrills - SKWAD - Slightly Off IFC - SLOPES - Sonic TV - Sony KAL - So...Real - So Yummy - Space Channel - Space Science Now - Spark TV Light & Love - SPEEDVISION - SportsGrid - Stadium - Stingray Classica Stream - Classic Rock - Stingray CMusic - Stingray DJAZZ - Easy Listening - Euro Hits - Everything ‘80s - Éxitos del Momento - Flashback 70s - Greatest Holiday Hits - Hip-Hop/R&B - Hit List - Hot Country - Stingray Karaoke - Stingray Naturescape - Nothin' But 90s - Pop Adult - Alternative - Smooth Jazz - Soul Storm - The Spa - Today's K-Pop - Y2K - Stories by AMC - Surf Now TV - Swerve Sports - Tastemade - TED - TG Junior - The Archive - The Boat Show - The Bob Ross Channel - The Carol Burnett Show - The Design Network - The Elvis Presley Channel - The Film Detective - The Grid - The Hill TV - The Pet Collective - The Preview Channel - The Walking Dead Universe - Weather Channel Español - This Old House - Times Now Navbharat - TODAY All Day - TokuSHOUTsu - Toon Goggles - Top Gear - Trailer Park Boys: The SwearNet Show - Trailers From Hell - Tribeca Channel - True Crime Now - True History - TV Asia Comedy Powered by Shemaroo - Unbeaten - Unexplained - Unidentified - USA TODAY - USA TODAY SPORTS - Us Weekly TV - Vice News - VICE - Vivaldi - Wanted: Dead or Alive - War & Military Now - Watch it Kid - Watch it SCREAM - Waypoint TV - WeatherSpy - WFTV 9 Orlando - WHIO Dayton - Whistle TV - WildEarth - Wired2Fish - Women's Sports Network - Wonder - WPXI Now Pittsburgh - WSB Now Atlanta - WSOC Channel 9 - Wu Tang Collection - XFC TV - Yahoo Finance - YG TV - AFV Español - AMC en Español - Canela TV - Chiquilines - Cine Real - El Conflicto TV - Estrella News - Estrella TV - Euronews Español - Horrorfy - Juntos TV - LevelUp - Love Nature en Español - MMC - Nosey Casos - Nosey Escándalos - Party Tyme Karaoke - Runtime Español - Saber Mas - Sony Canal Competencias - Sony Canal Novelas - The Bob Ross Channel en Español - Top Cine - Tu Cine - Cortos - Euronews Portuguese - - + + + 24 Hour Free Movies + ACCDN + AccuWeather NOW + ACL Cornhole TV + ACTION!!! + Action News Jax + AfroLandTV + AFV Family + ALF + ALLBLK Gems + All Reality WE tv + All Weddings WE tv + ALTRD.TV + AMC Thrillers + Anger Management + Antiques Roadshow UK + Antiques Road Trip + Are We There Yet? + ARTFLIX - Movie Classics + ARTS TWG+ + AsianCrush + At Home with Family Handyman + AXS TV NOW + BABY SHARK TV + BACKSTAGE + BBC Food + BBC Home & Garden + Beautiful Planet + beIN SPORTS XTRA + Best TV Ever + Billiard TV + BITE + Bjgtjme - Free Movies + BlackPix + Bloomberg Quicktake + Bloomberg TV + Boonie Cubs TV + Boston 25 News + CampusLore Sports + Caught in Providence + Cheddar News + Chicken Soup for the Soul + ChiveTV + Choppertown + CineLife + Cinema Libre Channel + CINEPRIDE + Cine Sureño + Cineverse Selects + Classic Doctor Who + Classic Rock Network + ClixTV + Comedy Dynamics + COMMUNE + CONtv + CONtv Anime + Cooking Panda + Cowboy Way + Crackle + Crime 360 + Dark Matter TV + Discover Film + Doctors + Documentary+ + Docurama + Don't Tell The Bride + Dove + Dungeon TV + Edge Sport + Electric Now + EL REY + Entrepreneur TV + ESTV + Euronews + Euronews Français + Euronews Deutsch + Euronews Italiano + FailArmy + FamilyTime + Farscape + Fight Network + Filmstream + Fite 24/7 + Flash + FLOU Cine + FOX13 Memphis + FOX23 Tulsa + Freebie TV + Freebie TV - Los Pitufos + FrightFlix + FTF Sports + Fubo Sports Network + FUEL TV + GAGO TV + Galxy TV + Game Show Central + GFN TV + Glewed TV + GoTraveler + GoUSA TV + Go Wild + Gravitas Adrenaline + Gravitas Documentaries + Gravitas Movies + Grjngo - Western Movies + GUSTOTV + Hallmark Movies & More + Hannibal + HappiTV + Hard Knocks + HBCU-GO Sports + History Hit + Hi-YAH! + Home.Made.Nation + Humor Mill + i24NEWS Updates + IFC Films Picks + IGN1 + IMPACT Wrestling + Impossible - Quiz Show + INFAST + Johnny Carson TV + Journy + JOURNY Presents: America the Beautiful + Judge Faith + Julia Child + LOL! Network + Kidoodle TV + KidsFlix + Kids Pang TV + Kin + Kino Cult + KIRO 7 Seattle + KMTV + La Bocina Latina + La Corriente + Law & Crime + Local Now Bergen County + Local Now Long Island + Local Now Manhattan + Local Now Newburgh + Local Now New York City + Local Now White Plains + LOL! Stand Up + Lone Star Network + Love Destination + Love Nature + Made In Hollywood + MagellanTV NOW + Maverick Black Cinema + MAVTV Select + MBC + MegaNoticias + MHz Now + Midnight Pulp + MMA TV + MOB TV + Moconomy - Economy & Finance Infotainment + More U + Motorvision TV + MOVIESPHERE + MST3K + Mystery Alley + NBC News NOW + NEW K.MOVIES + NEW K-POP + News 12 New York + Newsmax TV + Newsy + NHRA TV + Ninja Kidz TV + Nosey + OnDemandChina + Outdoor America + Outside + Overtime + Party Poker TV + Pattrn + PBS Antiques Roadshow + PBS Nature + People are Awesome + PeopleTV + PlayWorks + pocket.watch + Poker Night TV + Popcornflix + Popstar! TV + POPSUGAR Fitness + Portlandia + Pro Wrestling TV + PW Kids + Qello Concerts by Stingray + QwestTV Classical + QwestTV Jazz & Beyond + QwestTV Mix + Racing America + Rakuten Viki + RCN Más + Real Life + Real Nosey + Real Stories + Real Wild + RetroCrush + Reuters TV + Revry + RevryNews + Runtime + Ryan and Friends + Samuel Goldwyn Channel + Samuel Goldwyn Classics + Samuel Goldwyn International + Scream Factory TV + Shemaroo Bollywood + Shorts + Shout! Cult + Shout! Factory TV Stream + Skills + Thrills + SKWAD + Slightly Off IFC + SLOPES + Sonic TV + Sony KAL + So...Real + So Yummy + Space Channel + Space Science Now + Spark TV Light & Love + SPEEDVISION + SportsGrid + Stadium + Stingray Classica Stream + Classic Rock + Stingray CMusic + Stingray DJAZZ + Easy Listening + Euro Hits + Everything ‘80s + Éxitos del Momento + Flashback 70s + Greatest Holiday Hits + Hip-Hop/R&B + Hit List + Hot Country + Stingray Karaoke + Stingray Naturescape + Nothin' But 90s + Pop Adult + Alternative + Smooth Jazz + Soul Storm + The Spa + Today's K-Pop + Y2K + Stories by AMC + Surf Now TV + Swerve Sports + Tastemade + TED + TG Junior + The Archive + The Boat Show + The Bob Ross Channel + The Carol Burnett Show + The Design Network + The Elvis Presley Channel + The Film Detective + The Grid + The Hill TV + The Pet Collective + The Preview Channel + The Walking Dead Universe + Weather Channel Español + This Old House + Times Now Navbharat + TODAY All Day + TokuSHOUTsu + Toon Goggles + Top Gear + Trailer Park Boys: The SwearNet Show + Trailers From Hell + Tribeca Channel + True Crime Now + True History + TV Asia Comedy Powered by Shemaroo + Unbeaten + Unexplained + Unidentified + USA TODAY + USA TODAY SPORTS + Us Weekly TV + Vice News + VICE + Vivaldi + Wanted: Dead or Alive + War & Military Now + Watch it Kid + Watch it SCREAM + Waypoint TV + WeatherSpy + WFTV 9 Orlando + WHIO Dayton + Whistle TV + WildEarth + Wired2Fish + Women's Sports Network + Wonder + WPXI Now Pittsburgh + WSB Now Atlanta + WSOC Channel 9 + Wu Tang Collection + XFC TV + Yahoo Finance + YG TV + AFV Español + AMC en Español + Canela TV + Chiquilines + Cine Real + El Conflicto TV + Estrella News + Estrella TV + Euronews Español + Horrorfy + Juntos TV + LevelUp + Love Nature en Español + MMC + Nosey Casos + Nosey Escándalos + Party Tyme Karaoke + Runtime Español + Saber Mas + Sony Canal Competencias + Sony Canal Novelas + The Bob Ross Channel en Español + Top Cine + Tu Cine + Cortos + Euronews Portuguese + diff --git a/sites/plex.tv/plex.tv.config.js b/sites/plex.tv/plex.tv.config.js index f9b654d2..ac4bd781 100644 --- a/sites/plex.tv/plex.tv.config.js +++ b/sites/plex.tv/plex.tv.config.js @@ -12,7 +12,7 @@ module.exports = { } }, url: function ({ channel, date }) { - const [_, channelGridKey] = channel.site_id.split('-') + const [, channelGridKey] = channel.site_id.split('-') return `${API_ENDPOINT}/grid?channelGridKey=${channelGridKey}&date=${date.format('YYYY-MM-DD')}` }, @@ -32,7 +32,7 @@ module.exports = { return programs }, - async channels({ lang }) { + async channels() { const data = await axios .get(`${API_ENDPOINT}/lineups/plex/channels?X-Plex-Token=zb85PfdNQLmsry9kQLBR`) .then(r => r.data) @@ -66,7 +66,7 @@ function parseItems(content) { const items = [] metadata.forEach(item => { let segments = [] - item.Media.sort(byTime).forEach((media, i) => { + item.Media.sort(byTime).forEach(media => { let prevSegment = segments[segments.length - 1] if (prevSegment && prevSegment.endsAt === media.beginsAt) { prevSegment.endsAt = media.endsAt diff --git a/sites/plex.tv/plex.tv.test.js b/sites/plex.tv/plex.tv.test.js index a6b4280f..6f137e09 100644 --- a/sites/plex.tv/plex.tv.test.js +++ b/sites/plex.tv/plex.tv.test.js @@ -1,10 +1,9 @@ // npm run channels:parse -- --config=./sites/plex.tv/plex.tv.config.js --output=./sites/plex.tv/plex.tv.channels.xml -// npx epg-grabber --config=sites/plex.tv/plex.tv.config.js --channels=sites/plex.tv/plex.tv.channels.xml --output=guide.xml --days=2 +// npm run grab -- --site=plex.tv const { parser, url, request } = require('./plex.tv.config.js') const fs = require('fs') const path = require('path') -const axios = require('axios') const dayjs = require('dayjs') const utc = require('dayjs/plugin/utc') const customParseFormat = require('dayjs/plugin/customParseFormat') diff --git a/sites/programacion-tv.elpais.com/programacion-tv.elpais.com.channels.xml b/sites/programacion-tv.elpais.com/programacion-tv.elpais.com.channels.xml index 94a204e0..cd405e79 100644 --- a/sites/programacion-tv.elpais.com/programacion-tv.elpais.com.channels.xml +++ b/sites/programacion-tv.elpais.com/programacion-tv.elpais.com.channels.xml @@ -1,203 +1,201 @@ - - - 3/24 - 7 Región de Murcia - Al Jazeera English - AMC - Antena 3 - Aragón TV - Atreseries - AXN - AXN White - Baby TV - Barça TV - BBC World - BeIN Sports - Be Mad - Boing - Calle 13 - Canal 24 h - Canal Cocina - Canal Extremadura TV - Hollywood - Canal Panda - Canal Parlamento - Canal Sur - Canal Sur Andalucía - Caracol TV - Caza y Pesca - Clan TVE - CNBC - CNN International - CMM TV - Comedy Central - Cosmopolitan - Cuatro - Cubavisión Internacional - Dark - Decasa - Discovery Channel - Disney Channel - Disney Junior - Divinity - DMAX - Deutsche Welle - Energy - El Toro TV - ETB 1 - ETB 3 - EuroNews - Eurosport - Eurosport 2 - EWTN - Extreme Sports - FDF Telecinco - Fox Life - FOX - France 24 - Galicia TV - Gol TV - Historia - i24 News - Iberalia - La 1 - La 2 - laSexta - Mega - Mezzo - Movistar Acción - Movistar Cine Español - Movistar Comedia - Movistar Deportes - Movistar Estrenos - Movistar Series - MTV 90s - MTV Hits - MTV Live - MTV España - National Geographic - Neox - Nickelodeon - Nick Junior - Nova - La 8 Burgos - Odisea - Pro TV International - Real Madrid TV - Record TV - RT Español - Sol Música - Somos - Sundance Channel - Syfy - Taroteame - TCM - Telecinco - Teledeporte - teleSUR - TNT - TV3 - TV3CAT - TV5 Monde - TV Canaria - TV Chile - TVE Internacional Asia - TVE Internacional - VE PLUS TV - Viajar - XTRM - - - - - - - - - - - - - - - - - - - - - - - - - - - - Super 3 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Navarra Televisión - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3/24 + 7 Región de Murcia + Al Jazeera English + AMC + Antena 3 + Aragón TV + Atreseries + AXN + AXN White + Baby TV + Barça TV + BBC World + BeIN Sports + Be Mad + Boing + Calle 13 + Canal 24 h + Canal Cocina + Canal Extremadura TV + Hollywood + Canal Panda + Canal Parlamento + Canal Sur + Canal Sur Andalucía + Caracol TV + Caza y Pesca + Clan TVE + CMM TV + CNBC + CNN International + Comedy Central + Cosmopolitan + Cuatro + Cubavisión Internacional + Dark + Decasa + Discovery Channel + Disney Channel + Disney Junior + Divinity + DMAX + Deutsche Welle + El Toro TV + Energy + ETB 1 + ETB 3 + EuroNews + Eurosport + Eurosport 2 + EWTN + Extreme Sports + FDF Telecinco + Fox Life + FOX + France 24 + Galicia TV + Gol TV + Historia + i24 News + Iberalia + La 1 + La 2 + La 8 Burgos + laSexta + Mega + Mezzo + Movistar Acción + Movistar Cine Español + Movistar Comedia + Movistar Deportes + Movistar Estrenos + Movistar Series + MTV 90s + MTV Hits + MTV Live + MTV España + National Geographic + Navarra Televisión + Neox + Nickelodeon + Nick Junior + Nova + Odisea + Pro TV International + Real Madrid TV + Record TV + RT Español + Sol Música + Somos + Sundance Channel + Super 3 + Syfy + Taroteame + TCM + Telecinco + Teledeporte + teleSUR + TNT + TV3 + TV3CAT + TV5 Monde + TV Canaria + TV Chile + TVE Internacional Asia + TVE Internacional + VE PLUS TV + Viajar + XTRM + 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 8aadfb62..be1be74a 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 @@ -50,7 +50,7 @@ module.exports = { }, async channels() { const data = await axios - .get(`https://programacion-tv.elpais.com/data/canales.json`) + .get('https://programacion-tv.elpais.com/data/canales.json') .then(r => r.data) .catch(console.log) diff --git a/sites/programacion-tv.elpais.com/programacion-tv.elpais.com.test.js b/sites/programacion-tv.elpais.com/programacion-tv.elpais.com.test.js index 6a58da87..c600e327 100644 --- a/sites/programacion-tv.elpais.com/programacion-tv.elpais.com.test.js +++ b/sites/programacion-tv.elpais.com/programacion-tv.elpais.com.test.js @@ -1,4 +1,4 @@ -// npx epg-grabber --config=sites/programacion-tv.elpais.com/programacion-tv.elpais.com.config.js --channels=sites/programacion-tv.elpais.com/programacion-tv.elpais.com.channels.xml --output=guide.xml --days=2 +// npm run grab -- --site=programacion-tv.elpais.com // npm run channels:parse -- --config=./sites/programacion-tv.elpais.com/programacion-tv.elpais.com.config.js --output=./sites/programacion-tv.elpais.com/programacion-tv.elpais.com.channels.xml const { parser, url } = require('./programacion-tv.elpais.com.config.js') @@ -67,7 +67,7 @@ it('can parse response', async () => { it('can handle empty guide', async () => { const result = await parser({ - content: ``, + content: '', channel }) expect(result).toMatchObject([]) diff --git a/sites/programacion.tcc.com.uy/programacion.tcc.com.uy.channels.xml b/sites/programacion.tcc.com.uy/programacion.tcc.com.uy.channels.xml index aa853cf7..23fb833d 100644 --- a/sites/programacion.tcc.com.uy/programacion.tcc.com.uy.channels.xml +++ b/sites/programacion.tcc.com.uy/programacion.tcc.com.uy.channels.xml @@ -1,154 +1,152 @@ - - - 1000xHora - America 24 - Adrenalina Sports HD - Antena 3 - A+V - Asuntos Publicos HD - Band Internacional - Band news - BBC World - bitMe HD - C5N - Canal 10 HD - Canal 26 - Canal 4 HD - Canal 5 HD - Canal a - Cartoonito HD - CGTN Español HD - Claro Sports HD - CNN Español - CNN Internacional - Cronica TV - Deutsche Welle Español HD - Canal 9 - Encuentro - Europa Europa HD - Fox News - France 24 HD - Golden Premier HD - Golden Premier 2 HD - GOL TV VO HD - HBO Family - HBO Mundi HD - HBO Signature HD - HBO Xtreme HD - La Nacion - Las Estrellas HD - Multipremier SD - Pasiones - Playboy - RAI Italia HD - RT HD - PPV 14 Sextreme - Sony Movies - Sun Channel HD - TCC 1 - TCC 2 - TCC 3 - La Tele HD - Telefe HD - Tooncast - TV5 - TV Chile - TV Ciudad HD - TVE - Venus - VTV VO HD - VTV Plus VO HD - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1000xHora + America 24 + Adrenalina Sports HD + Antena 3 + A+V + Asuntos Publicos HD + Band Internacional + Band news + BBC World + bitMe HD + C5N + Canal 10 HD + Canal 26 + Canal 4 HD + Canal 5 HD + Canal a + Cartoonito HD + CGTN Español HD + Claro Sports HD + CNN Español + CNN Internacional + Cronica TV + Deutsche Welle Español HD + Canal 9 + Encuentro + Europa Europa HD + Fox News + France 24 HD + Golden Premier HD + Golden Premier 2 HD + GOL TV VO HD + HBO Family + HBO Mundi HD + HBO Signature HD + HBO Xtreme HD + La Nacion + Las Estrellas HD + Multipremier SD + Pasiones + Playboy + RAI Italia HD + RT HD + PPV 14 Sextreme + Sony Movies + Sun Channel HD + TCC 1 + TCC 2 + TCC 3 + La Tele HD + Telefe HD + Tooncast + TV5 + TV Chile + TV Ciudad HD + TVE + Venus + VTV VO HD + VTV Plus VO HD + diff --git a/sites/programacion.tcc.com.uy/programacion.tcc.com.uy.test.js b/sites/programacion.tcc.com.uy/programacion.tcc.com.uy.test.js index 949b8d80..cd79c822 100644 --- a/sites/programacion.tcc.com.uy/programacion.tcc.com.uy.test.js +++ b/sites/programacion.tcc.com.uy/programacion.tcc.com.uy.test.js @@ -1,5 +1,5 @@ // npm run channels:parse -- --config=./sites/programacion.tcc.com.uy/programacion.tcc.com.uy.config.js --output=./sites/programacion.tcc.com.uy/programacion.tcc.com.uy.channels.xml -// npx epg-grabber --config=sites/programacion.tcc.com.uy/programacion.tcc.com.uy.config.js --channels=sites/programacion.tcc.com.uy/programacion.tcc.com.uy.channels.xml --output=guide.xml --timeout=30000 --days=2 +// npm run grab -- --site=programacion.tcc.com.uy const { parser, url } = require('./programacion.tcc.com.uy.config.js') const fs = require('fs') @@ -18,7 +18,7 @@ const channel = { it('can generate valid url', () => { expect(url({ date })).toBe( - `https://www.tccvivo.com.uy/api/v1/navigation_filter/1575/filter/?cable_operator=1&emission_start=2023-02-11T00:00:00Z&emission_end=2023-02-12T00:00:00Z&format=json` + 'https://www.tccvivo.com.uy/api/v1/navigation_filter/1575/filter/?cable_operator=1&emission_start=2023-02-11T00:00:00Z&emission_end=2023-02-12T00:00:00Z&format=json' ) }) diff --git a/sites/programetv.ro/programetv.ro.channels.xml b/sites/programetv.ro/programetv.ro.channels.xml index 59aef3ab..d01a06d6 100644 --- a/sites/programetv.ro/programetv.ro.channels.xml +++ b/sites/programetv.ro/programetv.ro.channels.xml @@ -1,233 +1,231 @@ - - - 3sat - A7TV - Acasa - Acasa Gold - Agro TV - Aleph News - Alfa Omega TV - Aljazeera - AMC - Animal Planet - Antena 1 - Antena 3 - Antena International - Antena Stars - Auto Motor und Sport - Arcadia TV - AXN Black - AXN - AXN Spin - AXN White - B1 - Baby TV - Balkanika Music TV - BBC Earth - BBC World News - Bloomberg TV - Blue Hustler - Bollywood HD - Bollywood Classic - Bollywood Film - Bollywood TV - Boomerang - Brazzers TV Europe - Cartoon Network - CBS Reality - CGTN - Cinemax 2 - Cinemax - Club MTV - CNN - Comedy Central - Cool TV - Credo TV - Crime + Investigation - Das Erste - Da Vinci - Digi 24 - Digi Animal World - Digi Life - Digi Sport 1 - Digi Sport 2 - Digi Sport 3 - Digi Sport 4 - Digi World - Discovery Channel - Discovery Science - Disney Channel - Diva Romania - Dizi - DocuBox HD - Dorcel TV - - Duck TV - Duna TV - Duna World - DW - E! - Epic Drama - Erdély TV - Erox HD - Eroxxx HD - Etno TV - EuroNews - Eurosport 1 - Eurosport 2 - Eurosport 4K - Extreme Sports Channel - FashionBox HD - FashionTV - Favorit TV - FightBox HD - Film 4 UK - FilmBox Arthouse Worldwide - FilmBox Family - FilmBox Premium - Film Café - Film Now - Food Network - France 2 - France 24 English - France 24 - France 3 - France 5 - Fuel TV - FunBox UHD - Galaxy 4 - Ginx eSports TV - Happy Channel - HBO 2 - HBO 3 - HBO Romania - History România - H!t Music Channel - Hustler HD - Hustler TV - Inedit TV - Investigation Discovery - JimJam - Kabel Eins - Kanal D - KIKA - Kiss TV - Love Nature - Luxe TV - M1 - M2 - M4 Sport - M5 - Magic TV - Mediaset Italia - Mezzo - Mezzo Live HD - Minimax - Mooz Dance - Mooz Hits - Mooz Ro! - Motorvision HD - MTV 80s - MTV 90s - MTV Hits - MTV Live HD - Museum HD - Music Channel - Muzsika TV - MyZen HD - Nasul TV - National 24 Plus - National Geographic - National Geographic Wild - National TV - Nautical Channel - Nickelodeon - Nick Jr - Nicktoons - Nitro - N-TV - Orange Sport 1 - Orange Sport 2 - Orange Sport 3 - Orange Sport 4 - Phoenix - Playboy TV - Prima 4K - Prima Sport 1 - Prima Sport 2 - Prima Sport 3 - Prima Sport 4 - Prima TV - Private TV - Pro Arena - Pro Cinema - Profit TV - ProSieben - Pro TV - Pro TV International - Publika TV - Rai 1 - Rai 2 - Rai 3 - Realitatea Plus - Redlight HD - Rock TV - România TV - RTL - RTL Gold - RTL KETTŐ - RTL HÁROM - RTL Klub - RTL Zwei - RT HD - Sat. 1 - Sixx - Sorozat + - Speranta TV - Sport Extra - Stingray Classica - Stingray Djazz - Stingray IConcerts HD - Story 4 - Super RTL - Taraf TV - TeenNick - The Fishing & Hunting Channel - TLC - Trace Caribbean - Trace Sport Stars - Trace Urban HD - Travel Channel - Travel Mix - Trinitas TV - TV 1000 - TV 1000 Russkoe Kino - TV 4 - TV5Monde Europe - TVE - TV Paprika - TVR 1 - TVR 2 - TVR 3 - TVR Cluj - TVR Craiova - TVR Iasi - TVR International - TVR Moldova - TVR Targu-Mures - TVR Timisoara - U TV - Viasat Explore - Viasat History - Viasat Nature - Vox - VTV - Warner TV - Welt - ZDF - ZDF Info - ZDF Neo - Zu TV - - + + + 3sat + A7TV + Acasa + Acasa Gold + Agro TV + Aleph News + Alfa Omega TV + Aljazeera + AMC + Animal Planet + Antena 1 + Antena 3 + Antena International + Antena Stars + Arcadia TV + Auto Motor und Sport + AXN Black + AXN + AXN Spin + AXN White + B1 + Baby TV + Balkanika Music TV + BBC Earth + BBC World News + Bloomberg TV + Blue Hustler + Bollywood Classic + Bollywood Film + Bollywood HD + Bollywood TV + Boomerang + Brazzers TV Europe + Cartoon Network + CBS Reality + CGTN + Cinemax 2 + Cinemax + Club MTV + CNN + Comedy Central + Cool TV + Credo TV + Crime + Investigation + Das Erste + Da Vinci + Digi 24 + Digi Animal World + Digi Life + Digi Sport 1 + Digi Sport 2 + Digi Sport 3 + Digi Sport 4 + Digi World + Discovery Channel + Discovery Science + Disney Channel + Diva Romania + Dizi + DocuBox HD + Dorcel TV + Duck TV + Duna TV + Duna World + DW + E! + Epic Drama + Erdély TV + Erox HD + Eroxxx HD + Etno TV + EuroNews + Eurosport 1 + Eurosport 2 + Eurosport 4K + Extreme Sports Channel + FashionBox HD + FashionTV + Favorit TV + FightBox HD + Film 4 UK + FilmBox Arthouse Worldwide + FilmBox Family + FilmBox Premium + Film Café + Film Now + Food Network + France 2 + France 24 English + France 24 + France 3 + France 5 + Fuel TV + FunBox UHD + Galaxy 4 + Ginx eSports TV + Happy Channel + HBO 2 + HBO 3 + HBO Romania + History România + H!t Music Channel + Hustler HD + Hustler TV + Inedit TV + Investigation Discovery + JimJam + Kabel Eins + Kanal D + KIKA + Kiss TV + Love Nature + Luxe TV + M1 + M2 + M4 Sport + M5 + Magic TV + Mediaset Italia + Mezzo + Mezzo Live HD + Minimax + Mooz Dance + Mooz Hits + Mooz Ro! + Motorvision HD + MTV 80s + MTV 90s + MTV Hits + MTV Live HD + Museum HD + Music Channel + Muzsika TV + MyZen HD + Nasul TV + National 24 Plus + National Geographic + National Geographic Wild + National TV + Nautical Channel + Nickelodeon + Nick Jr + Nicktoons + Nitro + N-TV + Orange Sport 1 + Orange Sport 2 + Orange Sport 3 + Orange Sport 4 + Phoenix + Playboy TV + Prima 4K + Prima Sport 1 + Prima Sport 2 + Prima Sport 3 + Prima Sport 4 + Prima TV + Private TV + Pro Arena + Pro Cinema + Profit TV + ProSieben + Pro TV + Pro TV International + Publika TV + Rai 1 + Rai 2 + Rai 3 + Realitatea Plus + Redlight HD + Rock TV + România TV + RT HD + RTL + RTL Gold + RTL HÁROM + RTL Klub + RTL KETTŐ + RTL Zwei + Sat. 1 + Sixx + Sorozat + + Speranta TV + Sport Extra + Stingray Classica + Stingray Djazz + Stingray IConcerts HD + Story 4 + Super RTL + Taraf TV + TeenNick + The Fishing & Hunting Channel + TLC + Trace Caribbean + Trace Sport Stars + Trace Urban HD + Travel Channel + Travel Mix + Trinitas TV + TV 1000 + TV 1000 Russkoe Kino + TV 4 + TV5Monde Europe + TVE + TV Paprika + TVR 1 + TVR 2 + TVR 3 + TVR Cluj + TVR Craiova + TVR Iasi + TVR International + TVR Moldova + TVR Targu-Mures + TVR Timisoara + U TV + Viasat Explore + Viasat History + Viasat Nature + Vox + VTV + Warner TV + Welt + ZDF + ZDF Info + ZDF Neo + Zu TV + diff --git a/sites/programetv.ro/programetv.ro.config.js b/sites/programetv.ro/programetv.ro.config.js index b93cbc80..64f73227 100644 --- a/sites/programetv.ro/programetv.ro.config.js +++ b/sites/programetv.ro/programetv.ro.config.js @@ -20,7 +20,7 @@ module.exports = { return `https://www.programetv.ro/post/${channel.site_id}/${daysOfWeek[day]}/` }, - parser: function ({ content, channel }) { + parser: function ({ content }) { let programs = [] const data = parseContent(content) if (!data || !data.shows) return programs @@ -57,7 +57,7 @@ function parseStop(item) { } function parseContent(content) { - const [_, data] = content.match(/var pageData = ((.|[\r\n])+);\n/) || [null, null] + const [, data] = content.match(/var pageData = ((.|[\r\n])+);\n/) || [null, null] return data ? JSON.parse(data) : {} } diff --git a/sites/programetv.ro/programetv.ro.test.js b/sites/programetv.ro/programetv.ro.test.js index 60a68d92..c4e9690e 100644 --- a/sites/programetv.ro/programetv.ro.test.js +++ b/sites/programetv.ro/programetv.ro.test.js @@ -1,4 +1,4 @@ -// npx epg-grabber --config=sites/programetv.ro/programetv.ro.config.js --channels=sites/programetv.ro/programetv.ro.channels.xml --output=guide.xml --days=2 +// npm run grab -- --site=programetv.ro const { parser, url } = require('./programetv.ro.config.js') const dayjs = require('dayjs') @@ -19,7 +19,7 @@ const content = ` j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src= 'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f); })(window,document,'script','dataLayer','GTM-WPX9FM9'); -var cfg = {"homeUrl":"https:\/\/www.programetv.ro\/","loginUrl":"https:\/\/www.programetv.ro\/auth\/login","logoutUrl":"https:\/\/www.programetv.ro\/auth\/logout","nowOnTvUrl":"https:\/\/www.programetv.ro\/acum-la-tv\/","favoriteStationsUrl":"https:\/\/www.programetv.ro\/posturi-tv\/favorite\/","saveFavoritesUrl":"https:\/\/www.programetv.ro\/save-favorites\/","popularStationsUrl":"https:\/\/www.programetv.ro\/posturi-tv\/populare\/","stationListUrl":"https:\/\/www.programetv.ro\/posturi-tv\/","privacyPolicyUrl":"https:\/\/www.programetv.ro\/privacy-policy\/","user":false,"showMovieDetails":true,"banners":{"inlist":{"enabled":true,"code":"9647692440"},"footer":{"enabled":true,"code":"9608163999"},"modal":{"enabled":true,"code":"3427954368"}}}; +var cfg = {"homeUrl":"https://www.programetv.ro/","loginUrl":"https://www.programetv.ro/auth/login","logoutUrl":"https://www.programetv.ro/auth/logout","nowOnTvUrl":"https://www.programetv.ro/acum-la-tv/","favoriteStationsUrl":"https://www.programetv.ro/posturi-tv/favorite/","saveFavoritesUrl":"https://www.programetv.ro/save-favorites/","popularStationsUrl":"https://www.programetv.ro/posturi-tv/populare/","stationListUrl":"https://www.programetv.ro/posturi-tv/","privacyPolicyUrl":"https://www.programetv.ro/privacy-policy/","user":false,"showMovieDetails":true,"banners":{"inlist":{"enabled":true,"code":"9647692440"},"footer":{"enabled":true,"code":"9608163999"},"modal":{"enabled":true,"code":"3427954368"}}}; var __stations = []; var pageData = {"station":{"id":"1","displayName":"PRO TV","domain":"Românești","icon":"https://static.cinemagia.ro/img/tv_station/pro-tv.jpg","tvProvider":[{"tvPId":"2","tvPPos":["113"]},{"tvPId":"3","tvPPos":["113"]},{"tvPId":"4","tvPPos":["113"]},{"tvPId":"5","tvPPos":["3"]},{"tvPId":"6","tvPPos":["3"]},{"tvPId":"8","tvPPos":["4"]},{"tvPId":"11","tvPPos":["111"]}]},"shows":[{"id":"690127679","start":"2021-11-07T07:00:00+02:00","stop":"2021-11-07T09:59:59+02:00","stationId":"1","replay":false,"live":true,"online":true,"OTTRights":true,"categories":["Ştiri"],"title":"Ştirile Pro Tv","tvShowId":"5","desc":"În fiecare zi, cele mai importante evenimente, transmisiuni LIVE, analize, anchete şi reportaje sunt la Ştirile ProTV.","obs":"În fiecare zi, cele mai importante evenimente, transmisiuni LIVE, analize, anchete şi reportaje sunt la Ştirile ProTV.","icon":"https://www.programetv.ro/img/shows/84/54/stirile-pro-tv.png?key=Z2lfZnVial90cmFyZXZwLzAwLzAwLzA1LzE4MzgxMnktMTIwazE3MC1hLW40NTk4MW9zLmNhdA==","templating":[]}],"date":"2021-11-07","controls ":[{"date":"2021-11-03","slug":"ieri","label":"Ieri","name":"Ieri","url":"https://www.programetv.ro/post/pro-tv/ieri/"},{"date":"2021-11-04","slug":"azi","label":"Azi","name":"Azi","url":"https://www.programetv.ro/post/pro-tv/"},{"date":"2021-11-05","slug":"vineri","label":"Vi","name":"Vineri","url":"https://www.programetv.ro/post/pro-tv/vineri/"},{"date":"2021-11-06","slug":"sambata","label":"Sb","name":"Sâmbătă","url":"https://www.programetv.ro/post/pro-tv/sambata/"},{"date":"2021-11-07","slug":"duminica","label":"Du","name":"Duminică","url":"https://www.programetv.ro/post/pro-tv/duminica/"},{"date":"2021-11-08","slug":"luni","label":"Lu","name":"Luni","url":"https://www.programetv.ro/post/pro-tv/luni/"},{"date":"2021-11-09","slug":"marti","label":"Ma","name":"Marți","url":"https://www.programetv.ro/post/pro-tv/marti/"}],"todayDate":"2021-11-04","adsenabled":true}; var __controls = [{"date":"2021-11-03","slug":"ieri","label":"Ieri","name":"Ieri","url":"https://www.programetv.ro/post/pro-tv/ieri/"},{"date":"2021-11-04","slug":"azi","label":"Azi","name":"Azi","url":"https://www.programetv.ro/post/pro-tv/"},{"date":"2021-11-05","slug":"vineri","label":"Vi","name":"Vineri","url":"https://www.programetv.ro/post/pro-tv/vineri/"},{"date":"2021-11-06","slug":"sambata","label":"Sb","name":"Sâmbătă","url":"https://www.programetv.ro/post/pro-tv/sambata/"},{"date":"2021-11-07","slug":"duminica","label":"Du","name":"Duminică","url":"https://www.programetv.ro/post/pro-tv/duminica/"},{"date":"2021-11-08","slug":"luni","label":"Lu","name":"Luni","url":"https://www.programetv.ro/post/pro-tv/luni/"},{"date":"2021-11-09","slug":"marti","label":"Ma","name":"Marți","url":"https://www.programetv.ro/post/pro-tv/marti/"}]; @@ -38,7 +38,8 @@ it('can parse response', () => { start: '2021-11-07T05:00:00.000Z', stop: '2021-11-07T07:59:59.000Z', title: 'Ştirile Pro Tv', - description: `În fiecare zi, cele mai importante evenimente, transmisiuni LIVE, analize, anchete şi reportaje sunt la Ştirile ProTV.`, + description: + 'În fiecare zi, cele mai importante evenimente, transmisiuni LIVE, analize, anchete şi reportaje sunt la Ştirile ProTV.', category: ['Ştiri'], icon: 'https://www.programetv.ro/img/shows/84/54/stirile-pro-tv.png?key=Z2lfZnVial90cmFyZXZwLzAwLzAwLzA1LzE4MzgxMnktMTIwazE3MC1hLW40NTk4MW9zLmNhdA==' } @@ -59,7 +60,7 @@ it('can handle empty guide', () => { j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src= 'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f); })(window,document,'script','dataLayer','GTM-WPX9FM9'); -var cfg = {"homeUrl":"https:\/\/www.programetv.ro\/","loginUrl":"https:\/\/www.programetv.ro\/auth\/login","logoutUrl":"https:\/\/www.programetv.ro\/auth\/logout","nowOnTvUrl":"https:\/\/www.programetv.ro\/acum-la-tv\/","favoriteStationsUrl":"https:\/\/www.programetv.ro\/posturi-tv\/favorite\/","saveFavoritesUrl":"https:\/\/www.programetv.ro\/save-favorites\/","popularStationsUrl":"https:\/\/www.programetv.ro\/posturi-tv\/populare\/","stationListUrl":"https:\/\/www.programetv.ro\/posturi-tv\/","privacyPolicyUrl":"https:\/\/www.programetv.ro\/privacy-policy\/","user":false,"showMovieDetails":true,"banners":{"inlist":{"enabled":true,"code":"9647692440"},"footer":{"enabled":true,"code":"9608163999"},"modal":{"enabled":true,"code":"3427954368"}}}; +var cfg = {"homeUrl":"https://www.programetv.ro/","loginUrl":"https://www.programetv.ro/auth/login","logoutUrl":"https://www.programetv.ro/auth/logout","nowOnTvUrl":"https://www.programetv.ro/acum-la-tv/","favoriteStationsUrl":"https://www.programetv.ro/posturi-tv/favorite/","saveFavoritesUrl":"https://www.programetv.ro/save-favorites/","popularStationsUrl":"https://www.programetv.ro/posturi-tv/populare/","stationListUrl":"https://www.programetv.ro/posturi-tv/","privacyPolicyUrl":"https://www.programetv.ro/privacy-policy/","user":false,"showMovieDetails":true,"banners":{"inlist":{"enabled":true,"code":"9647692440"},"footer":{"enabled":true,"code":"9608163999"},"modal":{"enabled":true,"code":"3427954368"}}}; var __stations = [];
NoSuchKey
Canal Analógico: 48
00:00:00 Abya Yala noticias - 3ra edición
01:00:00 Cierre de emisión
23:00:00 Referentes
Regresar a canales
21:30
Deadly Flight
08:25
I Still Believe
15:50
Despicable Me
20:35
The Foreigner
07:00 - 07:05
07:05 - 07:30
07:30 - 07:45
07:45 - 08:00
Lo más visto de la semana en nuestra pantalla.
Cerramos el día con un completo resumen de los temas más relevantes con columnistas y análisis especiales para terminar el día.
La energía tiene mucho para mostrar. Este programa reúne a las principales empresas y protagonistas de la actividad que esta revolucionando la región.