From f644583a656c5a94c1c5e3b6a25c22b1ff01ff27 Mon Sep 17 00:00:00 2001 From: Toha Date: Sun, 15 Dec 2024 22:49:55 +0700 Subject: [PATCH] Update tvplus.com.tr guide. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Test: ```sh npm test -- tvplus.com.tr > test > run-script-os tvplus.com.tr > test:win32 > SET "TZ=Pacific/Nauru" && npx jest --runInBand tvplus.com.tr PASS sites/tvplus.com.tr/tvplus.com.tr.test.js √ can generate valid url (4 ms) √ can parse response (15 ms) √ can handle empty guide Test Suites: 1 passed, 1 total Tests: 3 passed, 3 total Snapshots: 0 total Time: 3.648 s, estimated 4 s Ran all test suites matching /tvplus.com.tr/i. ``` Grab: ```sh npm run grab -- --site=tvplus.com.tr > grab > npx tsx scripts/commands/epg/grab.ts --site=tvplus.com.tr starting... config: output: guide.xml maxConnections: 1 gzip: false site: tvplus.com.tr loading channels... found 10 channel(s) run #1: [1/20] tvplus.com.tr (tr) - 24TV.tr - Dec 15, 2024 (22 programs) [2/20] tvplus.com.tr (tr) - 24TV.tr - Dec 16, 2024 (19 programs) [3/20] tvplus.com.tr (tr) - BabyTV.uk - Dec 16, 2024 (48 programs) [4/20] tvplus.com.tr (tr) - BabyTV.uk - Dec 15, 2024 (48 programs) [5/20] tvplus.com.tr (tr) - ASpor.tr - Dec 16, 2024 (13 programs) [6/20] tvplus.com.tr (tr) - ASpor.tr - Dec 15, 2024 (14 programs) [7/20] tvplus.com.tr (tr) - APara.tr - Dec 16, 2024 (31 programs) [8/20] tvplus.com.tr (tr) - APara.tr - Dec 15, 2024 (25 programs) [9/20] tvplus.com.tr (tr) - AlJazeeraEnglish.qa - Dec 16, 2024 (32 programs) [10/20] tvplus.com.tr (tr) - AlJazeeraEnglish.qa - Dec 15, 2024 (32 programs) [11/20] tvplus.com.tr (tr) - AlJazeera.qa - Dec 16, 2024 (40 programs) [12/20] tvplus.com.tr (tr) - AlJazeera.qa - Dec 15, 2024 (41 programs) [13/20] tvplus.com.tr (tr) - AkitTV.tr - Dec 16, 2024 (15 programs) [14/20] tvplus.com.tr (tr) - AkitTV.tr - Dec 15, 2024 (12 programs) [15/20] tvplus.com.tr (tr) - AHaber.tr - Dec 16, 2024 (27 programs) [16/20] tvplus.com.tr (tr) - AHaber.tr - Dec 15, 2024 (19 programs) [17/20] tvplus.com.tr (tr) - A2TV.tr - Dec 16, 2024 (11 programs) [18/20] tvplus.com.tr (tr) - A2TV.tr - Dec 15, 2024 (11 programs) [19/20] tvplus.com.tr (tr) - 360.tr - Dec 16, 2024 (18 programs) [20/20] tvplus.com.tr (tr) - 360.tr - Dec 15, 2024 (18 programs) saving to "guide.xml"... done in 00h 02m 17s ``` Signed-off-by: Toha --- sites/tvplus.com.tr/tvplus.com.tr.config.js | 27 +++++++++------------ sites/tvplus.com.tr/tvplus.com.tr.test.js | 17 ++++++++++--- 2 files changed, 26 insertions(+), 18 deletions(-) diff --git a/sites/tvplus.com.tr/tvplus.com.tr.config.js b/sites/tvplus.com.tr/tvplus.com.tr.config.js index 12e039a9..391f3929 100644 --- a/sites/tvplus.com.tr/tvplus.com.tr.config.js +++ b/sites/tvplus.com.tr/tvplus.com.tr.config.js @@ -1,3 +1,5 @@ +const cheerio = require('cheerio') +const axios = require('axios') const dayjs = require('dayjs') const utc = require('dayjs/plugin/utc') const customParseFormat = require('dayjs/plugin/customParseFormat') @@ -16,11 +18,14 @@ module.exports = { ttl: 24 * 60 * 60 * 1000 // 1 day } }, - url({ channel }) { - const [buildId, slug, nr] = channel.site_id.split('/') - const channelId = [slug, nr].join('--') + async url({ channel }) { + if (module.exports.buildId === undefined) { + module.exports.buildId = await module.exports.fetchBuildId() + debug('Got build id', module.exports.buildId) + } + const channelId = channel.site_id.replace('/', '--') return `https://tvplus.com.tr/_next/data/${ - buildId + module.exports.buildId }/${ channel.lang }/canli-tv/yayin-akisi/${ @@ -57,8 +62,6 @@ module.exports = { return programs }, async channels() { - const cheerio = require('cheerio') - const axios = require('axios') const channels = [] const data = await axios .get(channelsUrl) @@ -66,19 +69,15 @@ module.exports = { .catch(console.error) const $ = cheerio.load(data) - const nextData = JSON.parse($('#__NEXT_DATA__').text()) $('.channel-list-item a').toArray() .forEach(el => { const a = $(el) channels.push({ lang: 'tr', name: a.attr('title').replace(/Yayın Akışı/, '').trim(), - site_id: [ - nextData.buildId, - ...a.attr('href') - .replace(/\/canli\-tv\/yayin\-akisi\//, '') - .split('--') - ].join('/') + site_id: a.attr('href') + .replace(/\/canli\-tv\/yayin\-akisi\//, '') + .replace('--', '/') // change -- to / as it used in xml comment }) }) @@ -98,6 +97,4 @@ module.exports = { return null } } -} - } } diff --git a/sites/tvplus.com.tr/tvplus.com.tr.test.js b/sites/tvplus.com.tr/tvplus.com.tr.test.js index ec7f28dc..c0f5c13e 100644 --- a/sites/tvplus.com.tr/tvplus.com.tr.test.js +++ b/sites/tvplus.com.tr/tvplus.com.tr.test.js @@ -1,6 +1,7 @@ const { parser, url } = require('./tvplus.com.tr.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') @@ -8,15 +9,25 @@ const customParseFormat = require('dayjs/plugin/customParseFormat') dayjs.extend(customParseFormat) dayjs.extend(utc) +jest.mock('axios') + const date = dayjs.utc('2024-12-15', 'YYYY-MM-DD').startOf('d') const channel = { lang: 'tr', - site_id: 'wOhzpck_jO2kKrDfRHmHs/nick-jr/4353', + site_id: 'nick-jr/4353', xmltv_id: 'NickJr.tr' } -it('can generate valid url', () => { - expect(url({ channel })).toBe('https://tvplus.com.tr/_next/data/wOhzpck_jO2kKrDfRHmHs/tr/canli-tv/yayin-akisi/nick-jr--4353.json?title=nick-jr--4353') +axios.get.mockImplementation((url, opts) => { + if (url === 'https://tvplus.com.tr/canli-tv/yayin-akisi') { + return Promise.resolve({ + data: fs.readFileSync(path.join(__dirname, '__data__', 'build.html')).toString() + }) + } +}) + +it('can generate valid url', async () => { + expect(await url({ channel })).toBe('https://tvplus.com.tr/_next/data/kUzvz_bbQJNaShlFUkrR3/tr/canli-tv/yayin-akisi/nick-jr--4353.json?title=nick-jr--4353') }) it('can parse response', () => {