From c28877918398712e8bd3b31f0a7dae8010a6e1c8 Mon Sep 17 00:00:00 2001 From: whitesnakeftw Date: Mon, 11 Aug 2025 02:25:22 +0200 Subject: [PATCH] fix sky.it channels() --- sites/guidatv.sky.it/__data__/content.json | 2 +- .../guidatv.sky.it.channels.xml | 213 +++++++++++++----- sites/guidatv.sky.it/guidatv.sky.it.config.js | 33 ++- sites/guidatv.sky.it/guidatv.sky.it.test.js | 23 +- 4 files changed, 189 insertions(+), 82 deletions(-) diff --git a/sites/guidatv.sky.it/__data__/content.json b/sites/guidatv.sky.it/__data__/content.json index a391e8bf..eefa90e0 100644 --- a/sites/guidatv.sky.it/__data__/content.json +++ b/sites/guidatv.sky.it/__data__/content.json @@ -1 +1 @@ -{"events": [ { "channel": { "id": 10458, "logo": "/logo/545820mediasethd_Light_Fit.png", "logoPadding": "/logo/545820mediasethd_Light_Padding.png", "logoDark": "/logo/545820mediasethd_Dark_Fit.png", "logoDarkPadding": "/logo/545820mediasethd_Dark_Padding.png", "logoLight": "/logo/545820mediasethd_Light_Padding.png", "name": "20Mediaset HD", "number": 151, "category": { "id": 3, "name": "Intrattenimento" } }, "content": { "uuid": "77c630aa-4744-44cb-a88e-3e871c6b73d9", "contentTitle": "Distretto di Polizia", "episodeNumber": 26, "seasonNumber": 6, "url": "/serie-tv/distretto-di-polizia/stagione-6/episodio-26/77c630aa-4744-44cb-a88e-3e871c6b73d9", "genre": { "id": 1, "name": "Intrattenimento" }, "subgenre": { "id": 9, "name": "Fiction" }, "imagesMap": [ { "key": "background", "img": { "url": "/uuid/77c630aa-4744-44cb-a88e-3e871c6b73d9/background?md5ChecksumParam=88d3f48ce855316f4be25ab9bb846d32" } }, { "key": "cover", "img": { "url": "/uuid/77c630aa-4744-44cb-a88e-3e871c6b73d9/cover?md5ChecksumParam=61135b999a63e3d3f4a933b9edeb0c1b" } }, { "key": "scene", "img": { "url": "/uuid/77c630aa-4744-44cb-a88e-3e871c6b73d9/16-9?md5ChecksumParam=f41bfe414bec32505abdab19d00b8b43" } } ] }, "eventId": "139585132", "starttime": "2022-05-06T00:35:40Z", "endtime": "2022-05-06T01:15:40Z", "eventTitle": "Distretto di Polizia", "eventSynopsis": "S6 Ep26 La resa dei conti - Fino all'ultimo la sfida tra Ardenzi e Carrano, nemici di vecchia data, riserva clamorosi colpi di scena. E si scopre che non e' tutto come sembrava.", "epgEventTitle": "S6 Ep26 - Distretto di Polizia", "primeVision": false, "resolutions": [ { "resolutionType": "resolution4k", "value": false } ] }]} \ No newline at end of file +{"events": [ { "channel": { "id": 10458, "logo": "/logo/545820mediasethd_Light_Fit.png", "logoPadding": "/logo/545820mediasethd_Light_Padding.png", "logoDark": "/logo/545820mediasethd_Dark_Fit.png", "logoDarkPadding": "/logo/545820mediasethd_Dark_Padding.png", "logoLight": "/logo/545820mediasethd_Light_Padding.png", "name": "20Mediaset HD", "number": 151, "category": { "id": 3, "name": "Intrattenimento" } }, "content": { "uuid": "77c630aa-4744-44cb-a88e-3e871c6b73d9", "contentTitle": "Distretto di Polizia", "episodeNumber": 26, "seasonNumber": 6, "url": "/serie-tv/distretto-di-polizia/stagione-6/episodio-26/77c630aa-4744-44cb-a88e-3e871c6b73d9", "genre": { "id": 1, "name": "Intrattenimento" }, "subgenre": { "id": 9, "name": "Fiction" }, "imagesMap": [ { "key": "background", "img": { "url": "/uuid/77c630aa-4744-44cb-a88e-3e871c6b73d9/background?md5ChecksumParam=88d3f48ce855316f4be25ab9bb846d32" } }, { "key": "cover", "img": { "url": "/uuid/77c630aa-4744-44cb-a88e-3e871c6b73d9/cover?md5ChecksumParam=61135b999a63e3d3f4a933b9edeb0c1b" } }, { "key": "scene", "img": { "url": "/uuid/77c630aa-4744-44cb-a88e-3e871c6b73d9/16-9?md5ChecksumParam=f41bfe414bec32505abdab19d00b8b43" } } ] }, "eventId": "139585132", "starttime": "2022-05-06T00:35:40Z", "endtime": "2022-05-06T01:15:40Z", "eventTitle": "Distretto di Polizia", "eventSynopsis": "S6 Ep26 La resa dei conti - Fino all'ultimo la sfida tra Ardenzi e Carrano, nemici di vecchia data, riserva clamorosi colpi di scena. E si scopre che non e' tutto come sembrava.", "epgEventTitle": "S6 Ep26 - Distretto di Polizia", "primeVision": false, "resolutions": [ { "resolutionType": "resolution4k", "value": false } ] }]} diff --git a/sites/guidatv.sky.it/guidatv.sky.it.channels.xml b/sites/guidatv.sky.it/guidatv.sky.it.channels.xml index 9ce5c458..8aaf24a8 100644 --- a/sites/guidatv.sky.it/guidatv.sky.it.channels.xml +++ b/sites/guidatv.sky.it/guidatv.sky.it.channels.xml @@ -1,64 +1,157 @@ - Boomerang - Canale 5 - Cartoon Network - cielo - CNN Intl. - Comedy Central - DeAJunior + Al Jazeera Intl. HD + Bloomberg + CNN Intl. + Euronews + Fox Business + Fox News + France 24 English HD + France 24 Francais HD + 20Mediaset HD + ACI Sport TV + BBC World News + BIKE + Boing + Boomerang + Boomerang +1 + CACCIA e Pesca + Canale 5 HD + CARTOONITO DTT + Cartoon Network + Cartoon Network +1 + cielo + Cine34 HD + Class CNBC + Sky Classica + CNBC HD + Comedy Central + Comedy +1 + DeAJunior DeAKids - Gambero Rosso - History - Italia 1 - LA7 - MTV + DeAKids +1 + Deejay TV + EQUtv + Fashion TV + Focus HD + Gambero Rosso HD + Gambero Rosso HD + History + History +1 + Horse TV HD + Inter TV + Iris HD + Italia 1 HD + Mediaset Italia2 HD + La 5 HD + LA7D + LA7 HD + Mediaset Extra HD + Milan TV + MTV HD + MTV Music + MTV Music + NHK World TV HD Nickelodeon - Nick Jr - Rai 1 - Rai 2 - Rai 3 - Rete 4 - Sky Adventure - Sky Arte - Sky Atlantic - Sky Cinema Action - Sky Cinema Collection - Sky Cinema Comedy - Sky Cinema Drama - Sky Cinema Due - Sky Cinema Family - Sky Cinema Romance - Sky Cinema Suspense - Sky Cinema Uno - Sky Crime - Sky Documentaries - Sky Investigation - Sky Nature - Sky Serie - Sky Sport24 - Sky Sport 251 - Sky Sport 252 - Sky Sport 253 - Sky Sport 254 - Sky Sport 255 - Sky Sport 256 - Sky Sport 257 - Sky Sport 258 - Sky Sport 259 - Sky Sport Arena - Sky Sport Calcio - Sky Sport F1 - Sky Sport Golf - Sky Sport Legend - Sky Sport Max - Sky Sport Mix - Sky Sport MotoGP - Sky Sport Basket - Sky Sport Tennis - Sky Sport Uno - Sky TG24 - Sky Uno - SuperTennis - TV8 - \ No newline at end of file + Nickelodeon +1 + Nick Jr + Nick Jr. +1 + Caccia e PESCA + QVC + RADIOFRECCIA HD + Radio Italia Trend Tv HD + Radio Italia TV HD + Radio Monte Carlo + RADIONORBA TV + Rai 1 HD + Rai 2 HD + Rai 3 HD + Rai 4 + Rai 5 + Rai Gulp + Rai Movie + Rai News 24 + Rai Premium + RAI Sport + Rai Storia + Rai Yoyo + Rete 4 HD + RTL 102.5 HD + San Marino RTV + Sky Adventure + Sky Adventure + Sky Arte + Sky Arte + Sky Atlantic + Sky Atlantic HD +1 + Sky Calcio 10 + Sky Calcio 11 + Sky Cinema Action + Sky Cinema Collection + Sky Cinema Comedy + Sky Cinema Drama + Sky Cinema Due + Sky Cinema Due +24 + Sky Cinema Family + Sky Cinema Romance + Sky Cinema Suspense + Sky Cinema Uno + Sky Cinema Uno +24 + Sky Crime + Sky Crime + Sky Documentaries + Sky Documentaries + Sky Documentaries +1 HD + Sky Documentaries +1 HD + Sky Investigation + Sky Investigation +1 HD + Sky Meteo24 + Sky Nature + Sky Nature + Sky News + Sky Serie + Sky Serie +1 + Sky Sport 4K + Sky Sport24 + Sky Sport + Sky Sport + Sky Sport + Sky Sport + Sky Sport + Sky Sport + Sky Sport + Sky Sport + Sky Sport + Sky Sport Arena + Sky Sport Arena + Sky Sport Basket + Sky Sport Calcio + Sky Sport F1 + Sky Sport Golf + Sky Sport Legend + Sky Sport Max + Sky Sport Mix + Sky Sport MotoGP + Sky Sport Basket + Sky Sport Tennis + Sky Sport Uno + Sky TG24 + TG24PrimoPiano + Sky Uno + Sky Uno +1 + Super! + SuperTennis HD + TgCom24 HD + TG NORBA 24 + TOPcrime HD + TRM h24 + TV8 HD + TV2000 HD + 27Twentyseven HD + VALUE 24 TV + Virgin Radio + DAZN 2 + DAZN3 + DAZN4 + DAZN 1 + diff --git a/sites/guidatv.sky.it/guidatv.sky.it.config.js b/sites/guidatv.sky.it/guidatv.sky.it.config.js index 0649292f..cfd38653 100644 --- a/sites/guidatv.sky.it/guidatv.sky.it.config.js +++ b/sites/guidatv.sky.it/guidatv.sky.it.config.js @@ -1,4 +1,5 @@ const dayjs = require('dayjs') +const axios = require('axios') module.exports = { site: 'guidatv.sky.it', @@ -31,29 +32,21 @@ module.exports = { return programs }, async channels() { - const axios = require('axios') - const cheerio = require('cheerio') + const res = await axios.get('https://apid.sky.it/gtv/v1/channels?env=DTH') + const list = res.data?.channels || [] + const channels = list.map(ch => { + const num = (ch.number >= 251 && ch.number <= 259) ? ch.number : '' + const hd = /\bHD\b/i.test(ch.name) + const plus = ch.name.match(/\+(1|24)\b/)?.[1] + const feeds = (hd ? '@HD' : '') + (plus ? (plus === '1' ? '@Plus1' : '@Plus24') : '') - const data = await axios - .get('https://guidatv.sky.it/canali') - .then(r => r.data) - .catch(console.log) - - const $ = cheerio.load(data) - - let channels = [] - $('.c-channelsCard__container').each((i, el) => { - const name = $(el).find('.c-channelsCard__title').text() - const url = $(el).find('.c-channelsCard__link').attr('href') - const [, channelId] = url.match(/\/(\d+)$/) - - channels.push({ + return { lang: 'it', - site_id: `DTH#${channelId}`, - name - }) + site_id: `DTH#${ch.id}`, + name: ch.name, + xmltv_id: ch.name.replace(/ |HD|\+1/g, '') + num + '.it' + feeds, + } }) - return channels } } diff --git a/sites/guidatv.sky.it/guidatv.sky.it.test.js b/sites/guidatv.sky.it/guidatv.sky.it.test.js index 6ed28155..be1c2d1d 100644 --- a/sites/guidatv.sky.it/guidatv.sky.it.test.js +++ b/sites/guidatv.sky.it/guidatv.sky.it.test.js @@ -1,6 +1,7 @@ -const { parser, url } = require('./guidatv.sky.it.config.js') +const { parser, url, channels } = require('./guidatv.sky.it.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') @@ -50,3 +51,23 @@ it('can handle empty guide', () => { }) expect(result).toMatchObject([]) }) + +it('can parse channel list', async () => { + const mockResponse = fs.readFileSync(path.join(__dirname, '__data__', 'data.json'), 'utf8') + axios.get = jest.fn().mockResolvedValue({ data: JSON.parse(mockResponse) }) + const results = await channels() + + expect(results.length).toBe(154) + expect(results[0]).toMatchObject({ + site_id: 'DTH#9115', + name: 'Sky Uno', + lang: 'it', + xmltv_id: 'SkyUno.it', + }) + expect(results[29]).toMatchObject({ + site_id: 'DTH#9094', + name: 'Sky Sport24', + lang: 'it', + xmltv_id: 'SkySport24.it', + }) +})