Skip to content

Commit 270e85c

Browse files
Merge pull request #2410 from ToRvaLDz/master
Adding subtitle, catgory, season, episode, thumb to mediasetinfinity.mediaset.it
2 parents 704b6b3 + 1a7c1ca commit 270e85c

File tree

2 files changed

+79
-31
lines changed

2 files changed

+79
-31
lines changed

sites/mediasetinfinity.mediaset.it/mediasetinfinity.mediaset.it.config.js

Lines changed: 62 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -10,41 +10,84 @@ dayjs.extend(timezone)
1010
module.exports = {
1111
site: 'mediasetinfinity.mediaset.it',
1212
days: 2,
13-
url: function ({ date, channel }) {
13+
url: function ({date, channel}) {
1414
// Get the epoch timestamp
15-
const todayEpoch = date.startOf('day').utc().valueOf();
15+
const todayEpoch = date.startOf('day').utc().valueOf()
1616
// Get the epoch timestamp for the next day
17-
const nextDayEpoch = date.add(1, 'day').startOf('day').utc().valueOf();
17+
const nextDayEpoch = date.add(1, 'day').startOf('day').utc().valueOf()
1818
return `https://api-ott-prod-fe.mediaset.net/PROD/play/feed/allListingFeedEpg/v2.0?byListingTime=${todayEpoch}~${nextDayEpoch}&byCallSign=${channel.site_id}`
1919
},
20-
parser: function ({ content, date }) {
21-
const programs = [];
22-
const data = JSON.parse(content);
20+
parser: function ({content}) {
21+
const programs = []
22+
const data = JSON.parse(content)
2323

2424
if (!data.response || !data.response.entries || !data.response.entries[0] || !data.response.entries[0].listings) {
2525
// If the structure is not as expected, return an empty array
26-
return programs;
26+
return programs
2727
}
2828

29-
const listings = data.response.entries[0].listings;
29+
const listings = data.response.entries[0].listings
3030

3131
listings.forEach((listing) => {
32-
if (listing.program.title && listing.startTime && listing.endTime) {
33-
const start = parseTime(listing.startTime);
34-
const stop = parseTime(listing.endTime);
32+
const title = listing.mediasetlisting$epgTitle
33+
const subTitle = listing.program.title
34+
const season = parseSeason(listing)
35+
const episode = parseEpisode(listing)
36+
3537

38+
if (listing.program.title && listing.startTime && listing.endTime) {
3639
programs.push({
37-
title: listing.program.title,
38-
description: listing.program.description,
39-
start,
40-
stop
41-
});
40+
title: title || subTitle,
41+
sub_title: title && title != subTitle ? subTitle : null,
42+
description: listing.program.description || null,
43+
category: listing.program.mediasetprogram$skyGenre || null,
44+
season: episode && !season ? '0' : season,
45+
episode: episode,
46+
start: parseTime(listing.startTime),
47+
stop: parseTime(listing.endTime),
48+
image: getMaxResolutionThumbnails(listing)
49+
})
4250
}
43-
});
44-
return programs;
51+
})
52+
53+
return programs
4554
}
4655
}
4756

57+
4858
function parseTime(timestamp) {
49-
return dayjs(timestamp).utc().format('YYYY-MM-DD HH:mm');
59+
return dayjs(timestamp).utc().format('YYYY-MM-DD HH:mm')
60+
}
61+
62+
function parseSeason(item) {
63+
if (!item.mediasetlisting$shortDescription) return null
64+
const season = item.mediasetlisting$shortDescription.match(/S(\d+)\s/)
65+
return season ? season[1] : null
66+
}
67+
68+
function parseEpisode(item) {
69+
if (!item.mediasetlisting$shortDescription) return null
70+
const episode = item.mediasetlisting$shortDescription.match(/Ep(\d+)\s/)
71+
return episode ? episode[1] : null
72+
}
73+
74+
function getMaxResolutionThumbnails(item) {
75+
const thumbnails = item.program.thumbnails || null
76+
const maxResolutionThumbnails = {}
77+
78+
for (const key in thumbnails) {
79+
const type = key.split('-')[0] // Estrarre il tipo di thumbnail
80+
const {width, height, url, title} = thumbnails[key]
81+
82+
if (!maxResolutionThumbnails[type] ||
83+
(width * height > maxResolutionThumbnails[type].width * maxResolutionThumbnails[type].height)) {
84+
maxResolutionThumbnails[type] = {width, height, url, title}
85+
}
86+
}
87+
if (maxResolutionThumbnails.image_keyframe_poster)
88+
return maxResolutionThumbnails.image_keyframe_poster.url
89+
else if (maxResolutionThumbnails.image_header_poster)
90+
return maxResolutionThumbnails.image_header_poster.url
91+
else
92+
return null
5093
}

sites/mediasetinfinity.mediaset.it/mediasetinfinity.mediaset.it.test.js

Lines changed: 17 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
const { parser, url } = require('./mediasetinfinity.mediaset.it.config.js')
1+
const {parser, url} = require('./mediasetinfinity.mediaset.it.config.js')
22
const fs = require('fs')
33
const path = require('path')
44
const dayjs = require('dayjs')
@@ -9,27 +9,32 @@ dayjs.extend(utc)
99

1010
const date = dayjs.utc('2024-01-20', 'YYYY-MM-DD').startOf('d')
1111
const channel = {
12-
site_id: 'LB',
13-
xmltv_id: '20.it'
12+
site_id: 'LB', xmltv_id: '20.it'
1413
}
1514

1615
it('can generate valid url', () => {
17-
expect(url({ channel, date })).toBe(
18-
'https://api-ott-prod-fe.mediaset.net/PROD/play/feed/allListingFeedEpg/v2.0?byListingTime=1705708800000~1705795200000&byCallSign=LB'
19-
)
16+
expect(url({
17+
channel,
18+
date
19+
})).toBe('https://api-ott-prod-fe.mediaset.net/PROD/play/feed/allListingFeedEpg/v2.0?byListingTime=1705708800000~1705795200000&byCallSign=LB')
2020
})
2121

2222
it('can parse response', () => {
2323
const content = fs.readFileSync(path.resolve(__dirname, '__data__/content.json'), 'utf8')
24-
const results = parser({ content, date }).map(p => {
24+
const results = parser({content, date}).map(p => {
2525
return p
2626
})
2727

28-
expect(results[0]).toMatchObject({
29-
start: '2024-01-19 22:37',
30-
stop: '2024-01-20 00:54',
31-
title: 'Independence day: Rigenerazione',
32-
description: 'Sequel del film di fantascienza Independence Day, con L. Hemsworth e B. Pullman. Dopo 20 anni la Terra si prepara a subire un secondo, terrificante attacco alieno.',
28+
expect(results[3]).toMatchObject({
29+
start: '2024-01-20 02:14',
30+
stop: '2024-01-20 02:54',
31+
title: 'Chicago Fire',
32+
sub_title: 'Ep. 22 - Io non ti lascio',
33+
description: 'Severide e Kidd continuano a indagare su un vecchio caso doloso di Benny. Notizie inaspettate portano Brett a meditare su una grande decisione.',
34+
category: 'Intrattenimento',
35+
season: '7',
36+
episode: '22',
37+
image: 'https://static2.mediasetplay.mediaset.it/Mediaset_Italia_Production_-_Main/F309370301002204/media/0/0/1ef76b73-3173-43bd-9c16-73986a0ec131/46896726-11e7-4438-b947-d2ae53f58c0b.jpg'
3338
})
3439
})
3540

0 commit comments

Comments
 (0)