diff --git a/sites/mojmaxtv.hrvatskitelekom.hr/mojmaxtv.hrvatskitelekom.hr.channels.xml b/sites/mojmaxtv.hrvatskitelekom.hr/mojmaxtv.hrvatskitelekom.hr.channels.xml
index f7476f5d5..fb5505cfc 100644
--- a/sites/mojmaxtv.hrvatskitelekom.hr/mojmaxtv.hrvatskitelekom.hr.channels.xml
+++ b/sites/mojmaxtv.hrvatskitelekom.hr/mojmaxtv.hrvatskitelekom.hr.channels.xml
@@ -6,7 +6,7 @@
Nova TV
Arenasport 1
MAXtv Promo
- Pickbox TV
+ Pickbox 1
RTL Kockica
Viasat Nature
History 2
@@ -28,31 +28,27 @@
Baby TV
Mini TV
Nicktoons
- CineStar TV 1
+ CineStar 1
STAR Movies
Cinemax
- Cinestar TV Premiere 2
Sportska Televizija
CGTN Documentary
Da Vinci
Cartoonito
STAR Crime
STAR
- CineStar TV Action & Thriller
- Cinestar TV Premiere 1
Doma TV
HRT 3
Crime & Investigation
- Nick Jr. hrvatski
+ Nick Jr.
STAR Life
HBO 2
RTL Passion
- Epic Drama
+ Viasat Epic Drama
M1 Gold
M1 Film
- Cinestar TV Fantasy
Klasik
- Nickelodeon hrvatski
+ Nickelodeon
Kino TV
Arenasport 5
Arenasport 7
@@ -61,7 +57,7 @@
Arenasport 10
Luxe TV
Fashion TV
- bravo! TV
+ bravo TV
CGTN
CNN Europe
Arenasport 2
@@ -70,7 +66,6 @@
Arenasport 6
24Kitchen
ExtraTV
- Al Jazeera
E! Entertainment
Laudato TV
myZen.tv
@@ -82,8 +77,6 @@
MAXSport 1
RTL Adria
MAXSport 2
- Club MTV
- MTV Hits
Pink Extra
Balkanika
France 24 francuski
@@ -91,11 +84,9 @@
Pink Music
Pink Fashion
Pink World
- MTV 00s
- MTV 80s
Euronews
Doku TV
- TV1000
+ Viasat Kino
Pink M
Pink Folk 1
Sport 1
@@ -112,13 +103,12 @@
Pink Koncert
Extreme Sports
Nautical Channel
- NickMusic
Pink Film
GP1
Stingray Djazz
Toxic TV
DW engleski
- Mreža TV Zagreb
+ Blue Televizija
TV SLO 1
RTS Svet
TV Zapad
@@ -137,7 +127,6 @@
TV SLO 2
Disney Channel
Disney Junior
- Cinestar TV 2
RTL 2 njemački
Sky News
ZDF
@@ -159,9 +148,8 @@
RAI 3
NonStop
TV DALMACIJA
- Trend TV
Happy
- Super RTL
+ RTL Super
Zdrava TV
OTV
FTV
@@ -170,16 +158,13 @@
TVE Internacional
Z1
TVCG MNE
- Cinestar TV Comedy & Family
Arena Esport
Arena Fight
- Nickelodeon engleski
- Nick Jr. engleski
Radio HR1
Radio HR3
Radio HR2
Radio Extra FM
- Radio bravo!
+ Radio bravo
Radio Top
Radio Osijek
Radio Split
@@ -211,19 +196,19 @@
Balkan TV
ICTbusiness TV
Viasat History
- CineStar TV 1
- Cinestar TV Premiere 1
- Cinestar TV Premiere 2
- CineStar TV Action & Thriller
- Cinestar TV Fantasy
- Cinestar TV 2
- Cinestar TV Comedy & Family
+ CineStar 1
+ Cinestar Premiere 1
+ Cinestar Premiere 2
+ CineStar Action & Thriller
+ Cinestar Fantasy
+ Cinestar 2
+ Cinestar Comedy & Family
AMC
Pop Star
- Moba
+ Restart
R&R
WWM (World Wide Muzzik)
- Tik Tak
+ Myuzzik
MUZZIK mix
ZZ TV
DocuBox
@@ -241,6 +226,26 @@
Muzzik
Flashback
Hit mjeseca
- TV Nakupi
HDTV
+ ADRIA MUSIC TELEVISION
+ Viasat True Crime
+ ShiftTV
+ Hype TV
+ SK 5
+ SK 8
+ SK 1
+ SK 6
+ SK 2
+ SK 9
+ SK 10
+ SK 7
+ SK 3
+ SK 4
+ SK Fight
+ SK 11
+ SK Golf
+ SK Esports
+ SK 12
+ Daystar
+ Pickbox 2
diff --git a/sites/mojmaxtv.hrvatskitelekom.hr/mojmaxtv.hrvatskitelekom.hr.config.js b/sites/mojmaxtv.hrvatskitelekom.hr/mojmaxtv.hrvatskitelekom.hr.config.js
index a8da1bcd0..bb7443915 100644
--- a/sites/mojmaxtv.hrvatskitelekom.hr/mojmaxtv.hrvatskitelekom.hr.config.js
+++ b/sites/mojmaxtv.hrvatskitelekom.hr/mojmaxtv.hrvatskitelekom.hr.config.js
@@ -8,7 +8,7 @@ const sortBy = require('lodash.sortby')
const NATCO_CODE = 'hr'
const APP_LANGUAGE = 'hr'
const APP_KEY = 'GWaBW4RTloLwpUgYVzOiW5zUxFLmoMj5'
-const APP_VERSION = '02.0.1080'
+const APP_VERSION = '02.0.1470'
const NATCO_KEY = 'l2lyvGVbUm2EKJE96ImQgcc8PKMZWtbE'
const SITE_URL = 'mojmaxtv.hrvatskitelekom.hr'
@@ -30,27 +30,12 @@ const SESSION_ID = crypto.randomUUID()
const cached = {}
-const getHeaders = () => ({
- 'app_key': APP_KEY,
- 'app_version': APP_VERSION,
- 'device-id': DEVICE_ID,
- 'tenant': 'tv',
- 'user-agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/133.0.0.0 Safari/537.36',
- 'origin': `https://${SITE_URL}`,
- 'x-request-session-id': SESSION_ID,
- 'x-request-tracking-id': crypto.randomUUID(),
- 'x-tv-step': 'EPG_SCHEDULES',
- 'x-tv-flow': 'EPG',
- 'x-call-type': 'GUEST_USER',
- 'x-user-agent': `web|web|Chrome-133|${APP_VERSION}|1`
-})
-
module.exports = {
site: SITE_URL,
url({ date }) {
return `${API_ENDPOINT}/epg/channel/schedules?date=${date.format(
'YYYY-MM-DD'
- )}&hour_offset=0&hour_range=3&channelMap_id&filler=true&app_language=${APP_LANGUAGE}&natco_code=${NATCO_CODE}`
+ )}&hour_offset=0&hour_range=3&channelMap_id=&filler=true&app_language=${APP_LANGUAGE}&natco_code=${NATCO_CODE}`
},
request: {
headers: getHeaders(),
@@ -90,11 +75,20 @@ module.exports = {
// Fetch program details for each item
const programs = []
- for (let item of items) {
- const detail = await loadProgramDetails(item)
-
-// detectUnknownRoles(detail)
-
+ const queues = items
+ .filter(item => item.program_id)
+ .map(item => ({
+ url: `${API_ENDPOINT}/details/series/${item.program_id}?natco_code=${NATCO_CODE}`,
+ params: {
+ headers: getHeaders()
+ },
+ item
+ }))
+ await doFetch(queues, (queue, res) => {
+ queue.item.detail = res
+ })
+ items.forEach(item => {
+ const detail = item.detail || {}
programs.push({
title: item.description,
sub_title: item.episode_name,
@@ -111,7 +105,7 @@ module.exports = {
start: item.start_time,
stop: item.end_time
})
- }
+ })
return programs
},
@@ -132,17 +126,6 @@ module.exports = {
}
}
-async function loadProgramDetails(item) {
- if (!item.program_id) return {}
- const url = `${API_ENDPOINT}/details/series/${item.program_id}?natco_code=${NATCO_CODE}`
- const data = await axios
- .get(url, { headers: getHeaders() })
- .then(r => r.data)
- .catch(console.log)
-
- return data || {}
-}
-
function parseData(content) {
try {
const data = JSON.parse(content)
@@ -190,3 +173,32 @@ function parseRoles(item, role_name) {
if (!item.roles) return null
return item.roles.filter(role => role.role_name === role_name).map(role => role.person_name)
}
+
+function getHeaders() {
+ const res = {
+ 'app_key': APP_KEY,
+ 'app_version': APP_VERSION,
+ 'device-id': DEVICE_ID,
+ 'tenant': 'tv',
+ 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/149.0.0.0 Safari/537.36',
+ 'origin': `https://${SITE_URL}`,
+ 'x-call-type': 'GUEST_USER',
+ 'x-call-time': new Date().getTime(),
+ 'x-request-session-id': SESSION_ID,
+ 'x-request-tracking-id': crypto.randomUUID(),
+ 'x-tv-step': 'EPG_SCHEDULES',
+ 'x-tv-flow': 'EPG',
+ 'x-txn-id': null,
+ 'x-user-agent': `web|web|Chrome-149|${APP_VERSION}|1`
+ }
+ const hash = crypto.createHash('sha256')
+ hash.update([
+ res['x-request-tracking-id'],
+ res['x-request-session-id'],
+ res['device-id'],
+ res['x-call-time']
+ ].join(''))
+ res['x-txn-id'] = hash.digest('hex').substr(0, 32)
+
+ return res
+}
diff --git a/sites/mojmaxtv.hrvatskitelekom.hr/mojmaxtv.hrvatskitelekom.hr.test.js b/sites/mojmaxtv.hrvatskitelekom.hr/mojmaxtv.hrvatskitelekom.hr.test.js
index c91a7eb92..ce86dfa04 100644
--- a/sites/mojmaxtv.hrvatskitelekom.hr/mojmaxtv.hrvatskitelekom.hr.test.js
+++ b/sites/mojmaxtv.hrvatskitelekom.hr/mojmaxtv.hrvatskitelekom.hr.test.js
@@ -5,6 +5,7 @@ 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)
@@ -16,14 +17,14 @@ jest.mock('axios')
axios.get.mockImplementation(url => {
if (
url ===
- 'https://tv-hr-prod.yo-digital.com/hr-bifrost/epg/channel/schedules?date=2025-01-24&hour_offset=3&hour_range=3&channelMap_id&filler=true&app_language=hr&natco_code=hr'
+ 'https://tv-hr-prod.yo-digital.com/hr-bifrost/epg/channel/schedules?date=2025-01-24&hour_offset=3&hour_range=3&channelMap_id=&filler=true&app_language=hr&natco_code=hr'
) {
return Promise.resolve({
data: JSON.parse(fs.readFileSync(path.resolve(__dirname, '__data__/content_3.json')))
})
} else if (
url ===
- 'https://tv-hr-prod.yo-digital.com/hr-bifrost/epg/channel/schedules?date=2025-01-24&hour_offset=21&hour_range=3&channelMap_id&filler=true&app_language=hr&natco_code=hr'
+ 'https://tv-hr-prod.yo-digital.com/hr-bifrost/epg/channel/schedules?date=2025-01-24&hour_offset=21&hour_range=3&channelMap_id=&filler=true&app_language=hr&natco_code=hr'
) {
return Promise.resolve({
data: JSON.parse(fs.readFileSync(path.resolve(__dirname, '__data__/content_21.json')))
@@ -37,14 +38,14 @@ axios.get.mockImplementation(url => {
it('can generate valid url', () => {
expect(url({ date })).toBe(
- 'https://tv-hr-prod.yo-digital.com/hr-bifrost/epg/channel/schedules?date=2025-01-24&hour_offset=0&hour_range=3&channelMap_id&filler=true&app_language=hr&natco_code=hr'
+ 'https://tv-hr-prod.yo-digital.com/hr-bifrost/epg/channel/schedules?date=2025-01-24&hour_offset=0&hour_range=3&channelMap_id=&filler=true&app_language=hr&natco_code=hr'
)
})
it('can generate valid request headers', () => {
expect(request.headers).toMatchObject({
app_key: 'GWaBW4RTloLwpUgYVzOiW5zUxFLmoMj5',
- app_version: '02.0.1080',
+ app_version: '02.0.1470',
})
})