diff --git a/sites/tvplus.com.tr/__data__/build.html b/sites/tvplus.com.tr/__data__/build.html
new file mode 100644
index 00000000..4301b2ce
--- /dev/null
+++ b/sites/tvplus.com.tr/__data__/build.html
@@ -0,0 +1,7 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/sites/tvplus.com.tr/tvplus.com.tr.channels.xml b/sites/tvplus.com.tr/tvplus.com.tr.channels.xml
index fa270dc2..ce490790 100644
--- a/sites/tvplus.com.tr/tvplus.com.tr.channels.xml
+++ b/sites/tvplus.com.tr/tvplus.com.tr.channels.xml
@@ -1,147 +1,146 @@
- BluTV Play 1
- BluTV Play 2
- EKOL TV
- GZT TV
- KIBRIS ADA TV
- tabii spor
- tabii TV
- TRT EBA
- TV 2020
- TV+ Ekstra UFC
- 24
- 360
- A2
- A HABER
- AKİT TV
- AL JAZEERA ARABIC
- AL JAZEERA ENGLISH
- A NEWS
- A PARA
- A SPOR
- ATV
- BABYTV
- BBC News
- BENGÜTÜRK
- BEYAZ TV
- BİZİM EV TV
- BLOOMBERG HT
- Bloomberg
- BRT 1
- BRT 2
- CARTOONITO
- CARTOON NETWORK
- ÇİFTÇİ TV
- CNBC-E
- CNN International
- CNN TÜRK
- DA VINCI
- DISCOVERY CHANNEL
- DISNEY JUNIOR
- DİYANET TV
- DMAX
- DREAM TÜRK
- DUCK TV
- DEUTSCHE WELLE ENGLISH
- EKOTÜRK
- ENGLISH CLUB TV
- EPIC DRAMA
- EURONEWS
- EUROSPORT 1
- EUROSPORT 2
- FB TV
- FLASH TV
- FM TV
- FRANCE 24 ARABIC
- FRANCE 24 ENGLISH
- FX
- HABER GLOBAL
- HABERTÜRK
- HALK TV
- HT SPOR
- KADIRGA TV
- KANAL 7
- KANAL 23
- KANAL 26
- KANAL 33
- KANAL D
- KANAL V
- KIBRIS GENC TV
- KANAL T
- KIBRIS TV
- KONTV
- KRT TV
- LOVE NATURE
- MELTEM TV
- MİNİKA ÇOCUK
- MİNİKA GO
- MOONBUG KIDS TV
- NATIONAL GEOGRAPHIC
- NATIONAL GEOGRAPHIC WILD
- NBA TV
- Nick JR
- NICKTOONS
- NOW
- NTV
- NR1 DAMAR
- NUMBER1 TURK
- NUMBER1 TV
- ON6
- POWER TURK
- POWER TV
- SEMERKAND
- SHOW TV
- SİNEMA TV 2
- SİNEMA TV 1001
- SİNEMA 1002
- SİNEMA AİLE 2
- SİNEMA AİLE
- SİNEMA AKSİYON 2
- SİNEMA TV AKSİYON
- SİNEMA KOMEDİ
- SİNEMA TV
- SİNEMA YERLİ 2
- SİNEMA YERLİ
- SKY NEWS ARABIA
- SÖZCÜ TV
- SPORTS TV
- S SPORT 2
- S SPORT
- STAR TV
- TARIH TV
- TARIM TV
- TELE1
- TEVE2
- TGRT HABER
- TLC
- TMB TV
- TRT1
- TRT 2
- TRT 3
- TRT ARABI
- TRT AVAZ
- TRT BELGESEL
- TRT ÇOCUK
- TRT DIYANET COCUK
- TRT HABER
- TRT KURDİ
- TRT MÜZİK
- TRT SPOR
- TRT SPOR YILDIZ
- TRT TÜRK
- TRT World
- TURKHABER
- TV 4
- TV5
- TV5 MONDE
- TV8
- TV8,5
- TV100
- TVNET
- ÜLKE TV
- ULUSAL KANAL
- VAV TV
- VIASAT EXPLORE
- VIASAT HISTORY
+ BluTV Play 1
+ BluTV Play 2
+ EKOL TV
+ GZT TV
+ KIBRIS ADA TV
+ tabii spor
+ tabii TV
+ TRT EBA
+ TV 2020
+ 24
+ 360
+ A2
+ A HABER
+ AKİT TV
+ AL JAZEERA ARABIC
+ AL JAZEERA ENGLISH
+ A NEWS
+ A PARA
+ A SPOR
+ ATV
+ BABYTV
+ BBC News
+ BENGÜTÜRK
+ BEYAZ TV
+ BİZİM EV TV
+ BLOOMBERG HT
+ Bloomberg
+ BRT 1
+ BRT 2
+ CARTOONITO
+ CARTOON NETWORK
+ ÇİFTÇİ TV
+ CNBC-E
+ CNN International
+ CNN TÜRK
+ DA VINCI
+ DISCOVERY CHANNEL
+ DISNEY JUNIOR
+ DİYANET TV
+ DMAX
+ DREAM TÜRK
+ DUCK TV
+ DEUTSCHE WELLE ENGLISH
+ EKOTÜRK
+ ENGLISH CLUB TV
+ EPIC DRAMA
+ EURONEWS
+ EUROSPORT 1
+ EUROSPORT 2
+ FB TV
+ FLASH TV
+ FM TV
+ FRANCE 24 ARABIC
+ FRANCE 24 ENGLISH
+ FX
+ HABER GLOBAL
+ HABERTÜRK
+ HALK TV
+ HT SPOR
+ KADIRGA TV
+ KANAL 7
+ KANAL 23
+ KANAL 26
+ KANAL 33
+ KANAL D
+ KANAL V
+ KIBRIS GENC TV
+ KANAL T
+ KIBRIS TV
+ KONTV
+ KRT TV
+ LOVE NATURE
+ MELTEM TV
+ MİNİKA ÇOCUK
+ MİNİKA GO
+ MOONBUG KIDS TV
+ NATIONAL GEOGRAPHIC
+ NATIONAL GEOGRAPHIC WILD
+ NBA TV
+ Nick JR
+ NICKTOONS
+ NOW
+ NTV
+ NR1 DAMAR
+ NUMBER1 TURK
+ NUMBER1 TV
+ ON6
+ POWER TURK
+ POWER TV
+ SEMERKAND
+ SHOW TV
+ SİNEMA TV 2
+ SİNEMA TV 1001
+ SİNEMA 1002
+ SİNEMA AİLE 2
+ SİNEMA AİLE
+ SİNEMA AKSİYON 2
+ SİNEMA TV AKSİYON
+ SİNEMA KOMEDİ
+ SİNEMA TV
+ SİNEMA YERLİ 2
+ SİNEMA YERLİ
+ SKY NEWS ARABIA
+ SÖZCÜ TV
+ SPORTS TV
+ S SPORT 2
+ S SPORT
+ STAR TV
+ TARIH TV
+ TARIM TV
+ TELE1
+ TEVE2
+ TGRT HABER
+ TLC
+ TMB TV
+ TRT1
+ TRT 2
+ TRT 3
+ TRT ARABI
+ TRT AVAZ
+ TRT BELGESEL
+ TRT ÇOCUK
+ TRT DIYANET COCUK
+ TRT HABER
+ TRT KURDİ
+ TRT MÜZİK
+ TRT SPOR
+ TRT SPOR YILDIZ
+ TRT TÜRK
+ TRT World
+ TURKHABER
+ TV 4
+ TV5
+ TV5 MONDE
+ TV8
+ TV8,5
+ TV100
+ TVNET
+ ÜLKE TV
+ ULUSAL KANAL
+ VAV TV
+ VIASAT EXPLORE
+ VIASAT HISTORY
diff --git a/sites/tvplus.com.tr/tvplus.com.tr.config.js b/sites/tvplus.com.tr/tvplus.com.tr.config.js
index 812bab00..391f3929 100644
--- a/sites/tvplus.com.tr/tvplus.com.tr.config.js
+++ b/sites/tvplus.com.tr/tvplus.com.tr.config.js
@@ -1,10 +1,15 @@
+const cheerio = require('cheerio')
+const axios = require('axios')
const dayjs = require('dayjs')
const utc = require('dayjs/plugin/utc')
const customParseFormat = require('dayjs/plugin/customParseFormat')
+const debug = require('debug')('site:tvplus.com.tr')
dayjs.extend(utc)
dayjs.extend(customParseFormat)
+const channelsUrl = 'https://tvplus.com.tr/canli-tv/yayin-akisi'
+
module.exports = {
site: 'tvplus.com.tr',
days: 2,
@@ -13,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/${
@@ -54,31 +62,39 @@ module.exports = {
return programs
},
async channels() {
- const cheerio = require('cheerio')
- const axios = require('axios')
const channels = []
const data = await axios
- .get(`https://tvplus.com.tr/canli-tv/yayin-akisi`)
+ .get(channelsUrl)
.then(r => r.data)
.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
})
})
return channels
+ },
+ async fetchBuildId() {
+ const data = await axios
+ .get(channelsUrl)
+ .then(r => r.data)
+ .catch(console.error)
+
+ if (data) {
+ const $ = cheerio.load(data)
+ const nextData = JSON.parse($('#__NEXT_DATA__').text())
+ return nextData?.buildId || null
+ } else {
+ 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', () => {