From 83bc85c9454d9493b8025bc5833945736f3f52f1 Mon Sep 17 00:00:00 2001 From: Tadhg Riordan Date: Tue, 21 Oct 2025 12:10:57 +0100 Subject: [PATCH] site:sky.com - update data fetching, XMLTV IDs --- sites/sky.com/__data__/content.json | 98 ++++++++++- sites/sky.com/sky.com.channels.xml | 255 +++++++++++++--------------- sites/sky.com/sky.com.config.js | 48 ++++-- 3 files changed, 250 insertions(+), 151 deletions(-) diff --git a/sites/sky.com/__data__/content.json b/sites/sky.com/__data__/content.json index 079239dc..249c62f3 100644 --- a/sites/sky.com/__data__/content.json +++ b/sites/sky.com/__data__/content.json @@ -1029,5 +1029,101 @@ } ] } + ], + "regions": [ + { "text": "Atherstone HD", "bouquet": 4101, "subBouquet": 19, "value": "4101-19" }, + { "text": "Atherstone SD", "bouquet": 4097, "subBouquet": 19, "value": "4097-19" }, + { "text": "Border England HD", "bouquet": 4101, "subBouquet": 12, "value": "4101-12" }, + { "text": "Border England SD", "bouquet": 4097, "subBouquet": 12, "value": "4097-12" }, + { "text": "Border Scotland HD", "bouquet": 4102, "subBouquet": 36, "value": "4102-36" }, + { "text": "Border Scotland SD", "bouquet": 4098, "subBouquet": 36, "value": "4098-36" }, + { "text": "Brighton HD", "bouquet": 4103, "subBouquet": 65, "value": "4103-65" }, + { "text": "Brighton SD", "bouquet": 4099, "subBouquet": 65, "value": "4099-65" }, + { "text": "Central Midlands HD", "bouquet": 4101, "subBouquet": 3, "value": "4101-3" }, + { "text": "Central Midlands SD", "bouquet": 4097, "subBouquet": 3, "value": "4097-3" }, + { "text": "Channel Isles HD", "bouquet": 4104, "subBouquet": 34, "value": "4104-34" }, + { "text": "Channel Isles SD", "bouquet": 4100, "subBouquet": 34, "value": "4100-34" }, + { "text": "Dundee HD", "bouquet": 4102, "subBouquet": 39, "value": "4102-39" }, + { "text": "Dundee SD", "bouquet": 4098, "subBouquet": 39, "value": "4098-39" }, + { "text": "East Midlands HD", "bouquet": 4101, "subBouquet": 20, "value": "4101-20" }, + { "text": "East Midlands SD", "bouquet": 4097, "subBouquet": 20, "value": "4097-20" }, + { "text": "Essex HD", "bouquet": 4101, "subBouquet": 2, "value": "4101-2" }, + { "text": "Essex SD", "bouquet": 4097, "subBouquet": 2, "value": "4097-2" }, + { "text": "Gloucester HD", "bouquet": 4101, "subBouquet": 24, "value": "4101-24" }, + { "text": "Gloucester SD", "bouquet": 4097, "subBouquet": 24, "value": "4097-24" }, + { "text": "Grampian HD", "bouquet": 4102, "subBouquet": 35, "value": "4102-35" }, + { "text": "Grampian SD", "bouquet": 4098, "subBouquet": 35, "value": "4098-35" }, + { "text": "Granada HD", "bouquet": 4101, "subBouquet": 7, "value": "4101-7" }, + { "text": "Granada SD", "bouquet": 4097, "subBouquet": 7, "value": "4097-7" }, + { "text": "HTV West HD", "bouquet": 4101, "subBouquet": 4, "value": "4101-4" }, + { "text": "HTV West SD", "bouquet": 4097, "subBouquet": 4, "value": "4097-4" }, + { "text": "HTV West / Thames Valley HD", "bouquet": 4103, "subBouquet": 63, "value": "4103-63" }, + { "text": "HTV West / Thames Valley SD", "bouquet": 4099, "subBouquet": 63, "value": "4099-63" }, + { "text": "Henley On Thames HD", "bouquet": 4103, "subBouquet": 70, "value": "4103-70" }, + { "text": "Henley On Thames SD", "bouquet": 4099, "subBouquet": 70, "value": "4099-70" }, + { "text": "Humber HD", "bouquet": 4101, "subBouquet": 29, "value": "4101-29" }, + { "text": "Humber SD", "bouquet": 4097, "subBouquet": 29, "value": "4097-29" }, + { "text": "London HD", "bouquet": 4101, "subBouquet": 1, "value": "4101-1" }, + { "text": "London SD", "bouquet": 4097, "subBouquet": 1, "value": "4097-1" }, + { "text": "London / Essex HD", "bouquet": 4101, "subBouquet": 18, "value": "4101-18" }, + { "text": "London / Essex SD", "bouquet": 4097, "subBouquet": 18, "value": "4097-18" }, + { "text": "London / Thames Valley HD", "bouquet": 4103, "subBouquet": 66, "value": "4103-66" }, + { "text": "London / Thames Valley SD", "bouquet": 4099, "subBouquet": 66, "value": "4099-66" }, + { "text": "London Kent HD", "bouquet": 4103, "subBouquet": 64, "value": "4103-64" }, + { "text": "London Kent SD", "bouquet": 4099, "subBouquet": 64, "value": "4099-64" }, + { "text": "Meridian East HD", "bouquet": 4101, "subBouquet": 11, "value": "4101-11" }, + { "text": "Meridian East SD", "bouquet": 4097, "subBouquet": 11, "value": "4097-11" }, + { "text": "Meridian North HD", "bouquet": 4103, "subBouquet": 68, "value": "4103-68" }, + { "text": "Meridian North SD", "bouquet": 4099, "subBouquet": 68, "value": "4099-68" }, + { "text": "Meridian South HD", "bouquet": 4101, "subBouquet": 5, "value": "4101-5" }, + { "text": "Meridian South SD", "bouquet": 4097, "subBouquet": 5, "value": "4097-5" }, + { "text": "Meridian South East HD", "bouquet": 4101, "subBouquet": 10, "value": "4101-10" }, + { "text": "Meridian South East SD", "bouquet": 4097, "subBouquet": 10, "value": "4097-10" }, + { "text": "Merseyside HD", "bouquet": 4103, "subBouquet": 45, "value": "4103-45" }, + { "text": "Merseyside SD", "bouquet": 4099, "subBouquet": 45, "value": "4099-45" }, + { "text": "Norfolk HD", "bouquet": 4101, "subBouquet": 21, "value": "4101-21" }, + { "text": "Norfolk SD", "bouquet": 4097, "subBouquet": 21, "value": "4097-21" }, + { "text": "North East Midlands HD", "bouquet": 4103, "subBouquet": 62, "value": "4103-62" }, + { "text": "North East Midlands SD", "bouquet": 4099, "subBouquet": 62, "value": "4099-62" }, + { "text": "North West Yorkshire HD", "bouquet": 4101, "subBouquet": 8, "value": "4101-8" }, + { "text": "North West Yorkshire SD", "bouquet": 4097, "subBouquet": 8, "value": "4097-8" }, + { "text": "North Yorkshire HD", "bouquet": 4101, "subBouquet": 26, "value": "4101-26" }, + { "text": "North Yorkshire SD", "bouquet": 4097, "subBouquet": 26, "value": "4097-26" }, + { "text": "Northern Ireland HD", "bouquet": 4104, "subBouquet": 33, "value": "4104-33" }, + { "text": "Northern Ireland SD", "bouquet": 4100, "subBouquet": 33, "value": "4100-33" }, + { "text": "Oxford HD", "bouquet": 4103, "subBouquet": 71, "value": "4103-71" }, + { "text": "Oxford SD", "bouquet": 4099, "subBouquet": 71, "value": "4099-71" }, + { "text": "Republic of Ireland HD", "bouquet": 4104, "subBouquet": 50, "value": "4104-50" }, + { "text": "Republic of Ireland SD", "bouquet": 4100, "subBouquet": 50, "value": "4100-50" }, + { "text": "Ridge Hill HD", "bouquet": 4103, "subBouquet": 41, "value": "4103-41" }, + { "text": "Ridge Hill SD", "bouquet": 4099, "subBouquet": 41, "value": "4099-41" }, + { "text": "Scarborough HD", "bouquet": 4103, "subBouquet": 61, "value": "4103-61" }, + { "text": "Scarborough SD", "bouquet": 4099, "subBouquet": 61, "value": "4099-61" }, + { "text": "Scottish East HD", "bouquet": 4102, "subBouquet": 38, "value": "4102-38" }, + { "text": "Scottish East SD", "bouquet": 4098, "subBouquet": 38, "value": "4098-38" }, + { "text": "Scottish West HD", "bouquet": 4102, "subBouquet": 37, "value": "4102-37" }, + { "text": "Scottish West SD", "bouquet": 4098, "subBouquet": 37, "value": "4098-37" }, + { "text": "Sheffield HD", "bouquet": 4103, "subBouquet": 60, "value": "4103-60" }, + { "text": "Sheffield SD", "bouquet": 4099, "subBouquet": 60, "value": "4099-60" }, + { "text": "South Lakeland HD", "bouquet": 4101, "subBouquet": 28, "value": "4101-28" }, + { "text": "South Lakeland SD", "bouquet": 4097, "subBouquet": 28, "value": "4097-28" }, + { "text": "South Yorkshire HD", "bouquet": 4103, "subBouquet": 72, "value": "4103-72" }, + { "text": "South Yorkshire SD", "bouquet": 4099, "subBouquet": 72, "value": "4099-72" }, + { "text": "Tees HD", "bouquet": 4103, "subBouquet": 69, "value": "4103-69" }, + { "text": "Tees SD", "bouquet": 4099, "subBouquet": 69, "value": "4099-69" }, + { "text": "Thames Valley HD", "bouquet": 4101, "subBouquet": 9, "value": "4101-9" }, + { "text": "Thames Valley SD", "bouquet": 4097, "subBouquet": 9, "value": "4097-9" }, + { "text": "Tring HD", "bouquet": 4101, "subBouquet": 27, "value": "4101-27" }, + { "text": "Tring SD", "bouquet": 4097, "subBouquet": 27, "value": "4097-27" }, + { "text": "Tyne HD", "bouquet": 4101, "subBouquet": 13, "value": "4101-13" }, + { "text": "Tyne SD", "bouquet": 4097, "subBouquet": 13, "value": "4097-13" }, + { "text": "Wales HD", "bouquet": 4104, "subBouquet": 32, "value": "4104-32" }, + { "text": "Wales SD", "bouquet": 4100, "subBouquet": 32, "value": "4100-32" }, + { "text": "West Anglia HD", "bouquet": 4101, "subBouquet": 25, "value": "4101-25" }, + { "text": "West Anglia SD", "bouquet": 4097, "subBouquet": 25, "value": "4097-25" }, + { "text": "West Dorset HD", "bouquet": 4103, "subBouquet": 67, "value": "4103-67" }, + { "text": "West Dorset SD", "bouquet": 4099, "subBouquet": 67, "value": "4099-67" }, + { "text": "Westcountry HD", "bouquet": 4101, "subBouquet": 6, "value": "4101-6" }, + { "text": "Westcountry SD", "bouquet": 4097, "subBouquet": 6, "value": "4097-6" } ] - } \ No newline at end of file + } diff --git a/sites/sky.com/sky.com.channels.xml b/sites/sky.com/sky.com.channels.xml index bcbb6fe0..8ca5e575 100644 --- a/sites/sky.com/sky.com.channels.xml +++ b/sites/sky.com/sky.com.channels.xml @@ -1,33 +1,15 @@ - QTV Religious - PBC Sky Intro - Climax - XXX Girl Girl - Rewind TV - TVX 40+ - U&Drama+1 Heart 90s - Ideal World HD Sky Intro - NOW XMAS Sky Intro - U&Yesterday HD - TRUE CRIME Virgin Radio LBC News - That's Dance - LoveWorld HD - TRUE CRIME X RTÉ Radio 1 RTÉ 2FM RTÉ R na G RTÉ Lyric fm - Premier 1 HD - Premier 2 HD - That's Melody - Chl Line-up BBC R Cymru 2 BBC R5L BBC R5SX @@ -48,20 +30,6 @@ BBC R4 Extra BBC RnGàid BBC R London - U&Eden - U&Alibi - U&Gold - U&Yesterday - U&Dave - U&Eden+1 - U&DaveJaVu - ID - U&Drama - U&Yesterday+1 - U&W+1 - U&W - U&Alibi+1 - U&Gold+1 talkSPORT Gold Radio Radio X @@ -73,28 +41,12 @@ Heart 80s Capital XTRA BBC ALBA HD - EWTN Catholic - MTA1 World HD - TRUE CRIME Panjab Radio BFBS Radio SonLife - Babenation Classic FM - NTD - U&Dave HD - U&W HD - CHSTV - U&Alibi HD - GEO TV - TWR WRN Europe EWTN Catholic - Xpanded TV - Television X - Adult Channel - babes&brazzers - NTV My Sky My Account Program Your Remote @@ -108,9 +60,11 @@ 5STAR+1 5 USA 5USA+1 + TVX 40+ Islam Bangla AAJ TAK Aastha + Adult Channel Ahlebait TV Akaal Channel U&Alibi @@ -121,13 +75,16 @@ Arirang TV HD Arise News ARY Digital + QTV Religious ATN B4U Movies B4U Music + Babenation + babes&brazzers BabyTV - BBC Four HD BBC Four HD - BBC NEWS HD + BBC Four HD + BBC NEWS HD BBC One CI HD BBC One EastHD BBC One EMidHD @@ -154,13 +111,11 @@ BBC Two NI HD BBC Two Wal HD Best Direct - BLAZE BLAZE Bloomberg HD Boomerang Boomerang HD Boomerang+1 - Brit Asia TV Cartoonito Cartoon Netwrk Cartoon Net HD @@ -172,25 +127,28 @@ TRUE CRIME+1 Challenge Challenge - Channel 4 HD - Channel 4 HD - Channel 4 HD - Channel 4 HD - Channel 4 HD Channel 4 HD Channel 4 HD Channel 4+1 - Channel 4+1 - Channel 4+1 - Channel 4+1 - Channel 4+1 - Channel 5 - Channel 5 HD - Channel 5+1 + Channel 4 HD + Channel 4 HD + Channel 4 HD + Channel 4 HD + Channel 4 HD + Channel 4+1 + Channel 4+1 + Channel 4+1 + Channel 4+1 + 5 + 5 HD + 5+1 Channels 24 + CHSTV + Chl Line-up + Climax Clubland TV CNBC HD - CNN HD + CNN HD COLORS ColorsCineplex ColorsGujarati @@ -203,7 +161,6 @@ ComedyXtra ComedyXtra Court TV - Crime+Inv Crime+Inv Crime+Inv HD Crime+Inv+1 @@ -213,33 +170,31 @@ U&Dave HD DAYSTAR HD Deen TV - Discovery - Discovery HD Discovery - Discovery+1 + Discovery + Discovery HD + Discovery+1 Disc.History Disc.History+1 Disc.Science - Disc.Sci+1 + Disc.Sci+1 Disc.Turbo Disc.Turbo+1 DMAX DMAX - DMAX+1 + DMAX+1 + DM News English U&Drama Dunamis TV E4 - E4+1 E4 E4 HD E4+1 + E4 Extra E4 Extra Eman Channel Euronews - Eurosport 1 - Eurosport 1 HD - Eurosport 2 - Eurosport 2 HD + EWTN Catholic Faith UK Faith World TV Film4 @@ -249,25 +204,23 @@ Food Network Food Network Food Netwrk+1 - Music India FRANCE 24 HD GB News HD - Gems TV + Gems TV HD GEO News + GEO TV GOD Channel - U&Gold - U&Gold HD - GREAT! action - GREAT!action+1 - GREAT! movies - GREAT! movies - GREAT! movies+1 - GREAT! xmas - GREAT! xmas - GREAT! xmas+1 - GREAT! tv - GREAT! tv - GREAT! tv+1 + Great! Action + Great! Action+1 + Great! Mystery + Great! Mystery + G! Mystery+1 + Great!Christmas + Great!Christmas + Great! Xmas+1 + Great! TV + Great! TV + Great! TV+1 HGTV HGTV HGTV+1 @@ -278,8 +231,9 @@ LEGEND XTRA LEGEND XTRA+1 HUM EUROPE - India Today + Ideal World HD ID + ID ID+1 iON TV IQRA Bangla @@ -290,24 +244,24 @@ ITV1 HD ITV1 HD ITV1 HD - ITV1 HD - ITV1 HD - ITV1 HD - ITV1 HD - ITV1 HD - ITV1 HD - ITV1 HD - ITV1 HD - ITV1 HD - ITV1 HD - ITV1 HD - ITV1 HD + ITV1 HD + ITV1 HD + ITV1 HD + ITV1 HD + ITV1 HD + ITV1 HD + ITV1 HD + ITV1 HD + ITV1 HD + ITV1 HD + ITV1 HD + ITV1 HD ITV1 HD + ITV1+1 + ITV1+1 + ITV1+1 + ITV1+1 ITV1 HD - ITV1+1 - ITV1+1 - ITV1+1 - ITV1+1 ITV1 Wales HD ITV2 HD ITV2+1 @@ -315,12 +269,14 @@ ITV3+1 ITV4 HD ITV4+1 - ITV Be HD + ITV Quiz HD JewelleryMaker Kanshi TV + NTD LEGEND LFCTV HD - London Live + London TV + LoveWorld HD Madani Chnl HUM Masala MATV National @@ -330,12 +286,13 @@ More4+1 Christmas24 Christmas24+ + MTA1 World HD MTV MTV MTV HD - MTV XMAS + MTV 90s MTV 80s - MTV HITS + Club MTV MTV MUSIC MstHveIdeasHD MUTV HD @@ -357,26 +314,31 @@ Nick Jr+1 Nick Jr. Too Nick Jr. Too - Nicktoons - Nicktoons + NickSpongeBob + NickSpongeBob Noor TV NOW 70s NOW 80s + NOW 90s & 00s NOW ROCK + NTV Oireachtas TV + Panjab TV + PBC PBS America PCNE Chinese HD Pitaara PoliticsPunjab POP POP+1 - POP Max - POP Max+1 + Premier 1 HD Premier 1 HD + Premier 2 HD Premier 2 HD PTC PUNJABI QUEST QUEST HD + QUEST HD QUEST+1 Quest Red Quest Red @@ -391,6 +353,7 @@ Really Really revelation + Rewind TV RTÉ2 HD RTÉ2+1 RTÉjr @@ -412,13 +375,13 @@ Sky Action HD SkyAnimationHD Sky Comedy HD - SkyChristmasHD + Sky Drama HD Sky Family HD - Favourites HD - Sky 00s HD + Sky Greats HD + Sky Hits HD SkyPremiereHD - Sky ScFi/HorHD - SkyBestOf24HD + Sky Sci-Fi HD + Halloween HD Sky Thriller HD Sky Comedy Sky Comedy @@ -431,12 +394,9 @@ SkyDocumntrs SkyDocumntrs SkyDocmntrsHD - Sky History + Sky History2 Sky History Sky HistoryHD - Sky History+1 - Sky History2 - SkyHistory2HD Sky Kids HD Sky Max Sky Max @@ -462,11 +422,10 @@ SkyShowcase+1 SkySp+ SkySp+ HD - SkySpBoxOffHD SkySp Cricket SkySpCricket HD - SkySp Darts - SkySp DartsHD + SkySp F1 + SkySp F1 HD SkySp F'ball SkySp F'ball HD SkySp Golf @@ -486,9 +445,8 @@ SkySp PL SkySp PL HD SkySp PL HD - SkySp Racing - SkySp Racing HD SkySp Racing HD + SkySp Racing HD SkySp Tennis SkySp Tennis HD Sky Witness @@ -498,9 +456,9 @@ Sky Witness+1 SONY TV SONY TV HD + SONY MAX 2 SONY MAX SONY MAX HD - SONY MAX 2 SONY SAB STV STV @@ -511,12 +469,14 @@ Takbeer TV TalkingPictures TBN UK + Television X TG4 HD - That's Christmas + That's TV 3 That's TV 2 - That's Fabulous + That's Rock + That's Melody + That's Oldies That's TV - Word Network Tiny Pop Tiny Pop+1 TJC HD @@ -525,6 +485,7 @@ TLC HD TLC+1 TNT Sports 1 + TNTSports1 HD TNTSports1 HD TNT Sports 2 TNTSports2 HD @@ -532,29 +493,51 @@ TNTSports3 HD TNT Sports 4 TNTSports4 HD - TNT Sports Box Office HD TNTSBoxOff2HD + TNTSBoxOffHD Together Travelxp TRT World TRT World HD + TRUE CRIME + TRUE CRIME + TRUE CRIME X TVC News TV One TV Warehouse + U&Alibi + U&Alibi HD + U&Alibi+1 + U&Dave + U&Dave HD + U&DaveJaVu + U&Drama + U&Drama+1 + U&Eden + U&Eden+1 + U&Gold + U&Gold HD + U&Gold+1 + U&Gold Utsav Bharat Utsav Gold Utsav Gold HD Utsav Plus Utsav Plus HD UTV HD + U&W + U&W+1 + U&Yesterday + U&Yesterday+1 Virgin Four HD Virgin One HD Virgin One+1 Virgin Three Virgin Two HD U&W - U&W HD WION HD + Xpanded TV + XXX Girl Girl Zee Cinema Zee Punjabi Zee TV diff --git a/sites/sky.com/sky.com.config.js b/sites/sky.com/sky.com.config.js index a2da0903..eb6a042b 100644 --- a/sites/sky.com/sky.com.config.js +++ b/sites/sky.com/sky.com.config.js @@ -1,9 +1,10 @@ -const cheerio = require('cheerio') const dayjs = require('dayjs') const utc = require('dayjs/plugin/utc') const doFetch = require('@ntlab/sfetch') const debug = require('debug')('site:sky.com') const sortBy = require('lodash.sortby') +const path = require('path') +const fs = require('fs/promises') dayjs.extend(utc) @@ -50,20 +51,39 @@ module.exports = { return programs }, async channels() { - const channels = {} - const queues = [{ t: 'r', url: 'https://www.sky.com/tv-guide' }] - await doFetch(queues, (queue, res) => { - // process regions - if (queue.t === 'r') { - const $ = cheerio.load(res) - const initialData = JSON.parse(decodeURIComponent($('#initialData').text())) - initialData.state.epgData.regions.forEach(region => { - queues.push({ - t: 'c', - url: `https://awk.epgsky.com/hawk/linear/services/${region.bouquet}/${region.subBouquet}` - }) - }) + const dataPath = path.join(__dirname, '__data__', 'content.json') + let regions = [] + + try { + const raw = await fs.readFile(dataPath, 'utf8') + const payload = JSON.parse(raw) + if (Array.isArray(payload.regions)) { + regions = payload.regions } + } catch (err) { + debug('Failed to read regions from %s: %o', dataPath, err) + throw err + } + + if (regions.length === 0) { + debug('No regions defined in %s', dataPath) + return [] + } + + const uniqueRegions = new Map() + regions.forEach(region => { + if (!region || region.bouquet === undefined || region.subBouquet === undefined) return + const key = `${region.bouquet}-${region.subBouquet}` + if (!uniqueRegions.has(key)) uniqueRegions.set(key, region) + }) + + const channels = {} + const queues = Array.from(uniqueRegions.values()).map(region => ({ + t: 'c', + url: `https://awk.epgsky.com/hawk/linear/services/${region.bouquet}/${region.subBouquet}` + })) + + await doFetch(queues, (queue, res) => { // process channels if (queue.t === 'c') { if (Array.isArray(res.services)) {