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', () => {