Replace LF line endings with CRLF

This commit is contained in:
freearhey
2025-09-28 17:55:05 +03:00
parent efc74efcf8
commit b6a589c62a
1192 changed files with 445631 additions and 445631 deletions

View File

@@ -1,16 +1,16 @@
<?xml version="1.0" encoding="UTF-8"?>
<channels>
<channel site="mediasetinfinity.mediaset.it" lang="it" xmltv_id="20.it" site_id="LB">20 Mediaset</channel>
<channel site="mediasetinfinity.mediaset.it" lang="it" xmltv_id="Boing.it" site_id="KB">Boing</channel>
<channel site="mediasetinfinity.mediaset.it" lang="it" xmltv_id="Canale5.it" site_id="C5">Canale 5</channel>
<channel site="mediasetinfinity.mediaset.it" lang="it" xmltv_id="Cartoonito.it" site_id="LA">Cartoonito</channel>
<channel site="mediasetinfinity.mediaset.it" lang="it" xmltv_id="Focus.it" site_id="FU">Focus</channel>
<channel site="mediasetinfinity.mediaset.it" lang="it" xmltv_id="Iris.it" site_id="KI">Iris</channel>
<channel site="mediasetinfinity.mediaset.it" lang="it" xmltv_id="Italia1.it" site_id="I1">Italia 1</channel>
<channel site="mediasetinfinity.mediaset.it" lang="it" xmltv_id="Italia2.it" site_id="I2">Italia 2</channel>
<channel site="mediasetinfinity.mediaset.it" lang="it" xmltv_id="La5.it" site_id="KA">La5</channel>
<channel site="mediasetinfinity.mediaset.it" lang="it" xmltv_id="MediasetExtra.it" site_id="KQ">Mediaset Extra</channel>
<channel site="mediasetinfinity.mediaset.it" lang="it" xmltv_id="Rete4.it" site_id="R4">Rete 4</channel>
<channel site="mediasetinfinity.mediaset.it" lang="it" xmltv_id="TopCrime.it" site_id="LT">Top Crime</channel>
<channel site="mediasetinfinity.mediaset.it" lang="it" xmltv_id="TGCom24.it" site_id="KF">TGCom 24</channel>
</channels>
<?xml version="1.0" encoding="UTF-8"?>
<channels>
<channel site="mediasetinfinity.mediaset.it" lang="it" xmltv_id="20.it" site_id="LB">20 Mediaset</channel>
<channel site="mediasetinfinity.mediaset.it" lang="it" xmltv_id="Boing.it" site_id="KB">Boing</channel>
<channel site="mediasetinfinity.mediaset.it" lang="it" xmltv_id="Canale5.it" site_id="C5">Canale 5</channel>
<channel site="mediasetinfinity.mediaset.it" lang="it" xmltv_id="Cartoonito.it" site_id="LA">Cartoonito</channel>
<channel site="mediasetinfinity.mediaset.it" lang="it" xmltv_id="Focus.it" site_id="FU">Focus</channel>
<channel site="mediasetinfinity.mediaset.it" lang="it" xmltv_id="Iris.it" site_id="KI">Iris</channel>
<channel site="mediasetinfinity.mediaset.it" lang="it" xmltv_id="Italia1.it" site_id="I1">Italia 1</channel>
<channel site="mediasetinfinity.mediaset.it" lang="it" xmltv_id="Italia2.it" site_id="I2">Italia 2</channel>
<channel site="mediasetinfinity.mediaset.it" lang="it" xmltv_id="La5.it" site_id="KA">La5</channel>
<channel site="mediasetinfinity.mediaset.it" lang="it" xmltv_id="MediasetExtra.it" site_id="KQ">Mediaset Extra</channel>
<channel site="mediasetinfinity.mediaset.it" lang="it" xmltv_id="Rete4.it" site_id="R4">Rete 4</channel>
<channel site="mediasetinfinity.mediaset.it" lang="it" xmltv_id="TopCrime.it" site_id="LT">Top Crime</channel>
<channel site="mediasetinfinity.mediaset.it" lang="it" xmltv_id="TGCom24.it" site_id="KF">TGCom 24</channel>
</channels>

View File

@@ -1,97 +1,97 @@
const dayjs = require('dayjs')
const utc = require('dayjs/plugin/utc')
const customParseFormat = require('dayjs/plugin/customParseFormat')
const timezone = require('dayjs/plugin/timezone')
dayjs.extend(utc)
dayjs.extend(customParseFormat)
dayjs.extend(timezone)
module.exports = {
site: 'mediasetinfinity.mediaset.it',
days: 2,
url: function ({ date, channel }) {
// Get the epoch timestamp
const todayEpoch = date.startOf('day').utc().valueOf()
// Get the epoch timestamp for the next day
const nextDayEpoch = date.add(1, 'day').startOf('day').utc().valueOf()
return `https://api-ott-prod-fe.mediaset.net/PROD/play/feed/allListingFeedEpg/v2.0?byListingTime=${todayEpoch}~${nextDayEpoch}&byCallSign=${channel.site_id}`
},
parser: function ({ content }) {
const programs = []
const data = JSON.parse(content)
if (
!data.response ||
!data.response.entries ||
!data.response.entries[0] ||
!data.response.entries[0].listings
) {
// If the structure is not as expected, return an empty array
return programs
}
const listings = data.response.entries[0].listings
listings.forEach(listing => {
const title = listing.mediasetlisting$epgTitle
const subTitle = listing.program.title
const season = parseSeason(listing)
const episode = parseEpisode(listing)
if (listing.program.title && listing.startTime && listing.endTime) {
programs.push({
title: title || subTitle,
sub_title: title && title != subTitle ? subTitle : null,
description: listing.program.description || null,
category: listing.program.mediasetprogram$skyGenre || null,
season: episode && !season ? '0' : season,
episode: episode,
start: parseTime(listing.startTime),
stop: parseTime(listing.endTime),
image: getMaxResolutionThumbnails(listing)
})
}
})
return programs
}
}
function parseTime(timestamp) {
return dayjs(timestamp).utc().format('YYYY-MM-DD HH:mm')
}
function parseSeason(item) {
if (!item.mediasetlisting$shortDescription) return null
const season = item.mediasetlisting$shortDescription.match(/S(\d+)\s/)
return season ? season[1] : null
}
function parseEpisode(item) {
if (!item.mediasetlisting$shortDescription) return null
const episode = item.mediasetlisting$shortDescription.match(/Ep(\d+)\s/)
return episode ? episode[1] : null
}
function getMaxResolutionThumbnails(item) {
const thumbnails = item.program.thumbnails || null
const maxResolutionThumbnails = {}
for (const key in thumbnails) {
const type = key.split('-')[0] // Estrarre il tipo di thumbnail
const { width, height, url, title } = thumbnails[key]
if (
!maxResolutionThumbnails[type] ||
width * height > maxResolutionThumbnails[type].width * maxResolutionThumbnails[type].height
) {
maxResolutionThumbnails[type] = { width, height, url, title }
}
}
if (maxResolutionThumbnails.image_keyframe_poster)
return maxResolutionThumbnails.image_keyframe_poster.url
else if (maxResolutionThumbnails.image_header_poster)
return maxResolutionThumbnails.image_header_poster.url
else return null
}
const dayjs = require('dayjs')
const utc = require('dayjs/plugin/utc')
const customParseFormat = require('dayjs/plugin/customParseFormat')
const timezone = require('dayjs/plugin/timezone')
dayjs.extend(utc)
dayjs.extend(customParseFormat)
dayjs.extend(timezone)
module.exports = {
site: 'mediasetinfinity.mediaset.it',
days: 2,
url: function ({ date, channel }) {
// Get the epoch timestamp
const todayEpoch = date.startOf('day').utc().valueOf()
// Get the epoch timestamp for the next day
const nextDayEpoch = date.add(1, 'day').startOf('day').utc().valueOf()
return `https://api-ott-prod-fe.mediaset.net/PROD/play/feed/allListingFeedEpg/v2.0?byListingTime=${todayEpoch}~${nextDayEpoch}&byCallSign=${channel.site_id}`
},
parser: function ({ content }) {
const programs = []
const data = JSON.parse(content)
if (
!data.response ||
!data.response.entries ||
!data.response.entries[0] ||
!data.response.entries[0].listings
) {
// If the structure is not as expected, return an empty array
return programs
}
const listings = data.response.entries[0].listings
listings.forEach(listing => {
const title = listing.mediasetlisting$epgTitle
const subTitle = listing.program.title
const season = parseSeason(listing)
const episode = parseEpisode(listing)
if (listing.program.title && listing.startTime && listing.endTime) {
programs.push({
title: title || subTitle,
sub_title: title && title != subTitle ? subTitle : null,
description: listing.program.description || null,
category: listing.program.mediasetprogram$skyGenre || null,
season: episode && !season ? '0' : season,
episode: episode,
start: parseTime(listing.startTime),
stop: parseTime(listing.endTime),
image: getMaxResolutionThumbnails(listing)
})
}
})
return programs
}
}
function parseTime(timestamp) {
return dayjs(timestamp).utc().format('YYYY-MM-DD HH:mm')
}
function parseSeason(item) {
if (!item.mediasetlisting$shortDescription) return null
const season = item.mediasetlisting$shortDescription.match(/S(\d+)\s/)
return season ? season[1] : null
}
function parseEpisode(item) {
if (!item.mediasetlisting$shortDescription) return null
const episode = item.mediasetlisting$shortDescription.match(/Ep(\d+)\s/)
return episode ? episode[1] : null
}
function getMaxResolutionThumbnails(item) {
const thumbnails = item.program.thumbnails || null
const maxResolutionThumbnails = {}
for (const key in thumbnails) {
const type = key.split('-')[0] // Estrarre il tipo di thumbnail
const { width, height, url, title } = thumbnails[key]
if (
!maxResolutionThumbnails[type] ||
width * height > maxResolutionThumbnails[type].width * maxResolutionThumbnails[type].height
) {
maxResolutionThumbnails[type] = { width, height, url, title }
}
}
if (maxResolutionThumbnails.image_keyframe_poster)
return maxResolutionThumbnails.image_keyframe_poster.url
else if (maxResolutionThumbnails.image_header_poster)
return maxResolutionThumbnails.image_header_poster.url
else return null
}

View File

@@ -1,53 +1,53 @@
const { parser, url } = require('./mediasetinfinity.mediaset.it.config.js')
const fs = require('fs')
const path = require('path')
const dayjs = require('dayjs')
const utc = require('dayjs/plugin/utc')
const customParseFormat = require('dayjs/plugin/customParseFormat')
dayjs.extend(customParseFormat)
dayjs.extend(utc)
const date = dayjs.utc('2024-01-20', 'YYYY-MM-DD').startOf('d')
const channel = {
site_id: 'LB',
xmltv_id: '20.it'
}
it('can generate valid url', () => {
expect(
url({
channel,
date
})
).toBe(
'https://api-ott-prod-fe.mediaset.net/PROD/play/feed/allListingFeedEpg/v2.0?byListingTime=1705708800000~1705795200000&byCallSign=LB'
)
})
it('can parse response', () => {
const content = fs.readFileSync(path.resolve(__dirname, '__data__/content.json'), 'utf8')
const results = parser({ content, date }).map(p => {
return p
})
expect(results[3]).toMatchObject({
start: '2024-01-20 02:14',
stop: '2024-01-20 02:54',
title: 'Chicago Fire',
sub_title: 'Ep. 22 - Io non ti lascio',
description:
'Severide e Kidd continuano a indagare su un vecchio caso doloso di Benny. Notizie inaspettate portano Brett a meditare su una grande decisione.',
category: 'Intrattenimento',
season: '7',
episode: '22',
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'
})
})
it('can handle empty guide', () => {
const result = parser({
content: '[]'
})
expect(result).toMatchObject([])
})
const { parser, url } = require('./mediasetinfinity.mediaset.it.config.js')
const fs = require('fs')
const path = require('path')
const dayjs = require('dayjs')
const utc = require('dayjs/plugin/utc')
const customParseFormat = require('dayjs/plugin/customParseFormat')
dayjs.extend(customParseFormat)
dayjs.extend(utc)
const date = dayjs.utc('2024-01-20', 'YYYY-MM-DD').startOf('d')
const channel = {
site_id: 'LB',
xmltv_id: '20.it'
}
it('can generate valid url', () => {
expect(
url({
channel,
date
})
).toBe(
'https://api-ott-prod-fe.mediaset.net/PROD/play/feed/allListingFeedEpg/v2.0?byListingTime=1705708800000~1705795200000&byCallSign=LB'
)
})
it('can parse response', () => {
const content = fs.readFileSync(path.resolve(__dirname, '__data__/content.json'), 'utf8')
const results = parser({ content, date }).map(p => {
return p
})
expect(results[3]).toMatchObject({
start: '2024-01-20 02:14',
stop: '2024-01-20 02:54',
title: 'Chicago Fire',
sub_title: 'Ep. 22 - Io non ti lascio',
description:
'Severide e Kidd continuano a indagare su un vecchio caso doloso di Benny. Notizie inaspettate portano Brett a meditare su una grande decisione.',
category: 'Intrattenimento',
season: '7',
episode: '22',
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'
})
})
it('can handle empty guide', () => {
const result = parser({
content: '[]'
})
expect(result).toMatchObject([])
})

View File

@@ -1,15 +1,15 @@
# mediasetinfinity.mediaset.it
https://mediasetinfinity.mediaset.it/ _[Geo-blocked]_
### Download the guide
```sh
npm run grab --- --site=mediasetinfinity.mediaset.it
```
### Test
```sh
npm test --- mediasetinfinity.mediaset.it
```
# mediasetinfinity.mediaset.it
https://mediasetinfinity.mediaset.it/ _[Geo-blocked]_
### Download the guide
```sh
npm run grab --- --site=mediasetinfinity.mediaset.it
```
### Test
```sh
npm test --- mediasetinfinity.mediaset.it
```