diff --git a/sites/canalplus.com/__data__/content.json b/sites/canalplus.com/__data__/content.json
index 72cdf1ea..f932bb8d 100644
--- a/sites/canalplus.com/__data__/content.json
+++ b/sites/canalplus.com/__data__/content.json
@@ -1 +1 @@
-{"timeSlices":[{"timeSlice":"0","contents":[{"contentID":"20482220_50001","title":"Le cercle","subtitle":"Emission du 06 janv. 2023","startTime":1673504880000,"onClick":{"displayTemplate":"detailSeason","displayName":"Le cercle","path":"/cinema/le-cercle/h/4501558_50001","URLPage":"https://hodor.canalplus.pro/api/v2/mycanal/detail/da2291af3b10e9900d1c55e1a65d3388/okapi/6564630_50001.json?detailType=detailSeason&objectType=season&broadcastID=PLM_1196447642&episodeId=20482220_50001&brandID=4501558_50001&fromDiff=true","parameters":[{"in":"parameters","id":"featureToggles","enum":["detailV5"]}]}}],"context":{"context_type":"epg","context_page_title":"Guide - Grille TV - CANAL+ CINEMA","context_list_title":"CANAL+ CINEMA - J - Maintenant - Matin","context_list_id":"198","context_list_type":"epgGrid","context_list_position":1}},{"timeSlice":"1","contents":[{"contentID":"17230453_50001","title":"Illusions perdues","subtitle":"Film Drame","startTime":1673525160000,"onClick":{"displayTemplate":"detailPage","displayName":"Illusions perdues","path":"/cinema/illusions-perdues-film-drame/h/17230453_50001","URLPage":"https://hodor.canalplus.pro/api/v2/mycanal/detail/da2291af3b10e9900d1c55e1a65d3388/okapi/17230453_50001.json?detailType=detailPage&objectType=unit&broadcastID=PLM_1196447637&fromDiff=true","parameters":[{"in":"parameters","id":"featureToggles","enum":["detailV5"]}]}}],"context":{"context_type":"epg","context_page_title":"Guide - Grille TV - CANAL+ CINEMA","context_list_title":"CANAL+ CINEMA - J - Maintenant - Apres-midi","context_list_id":"198","context_list_type":"epgGrid","context_list_position":2}},{"timeSlice":"2","contents":[],"context":{"context_type":"epg","context_page_title":"Guide - Grille TV - CANAL+ CINEMA","context_list_title":"CANAL+ CINEMA - J - Maintenant - Debut de soiree","context_list_id":"198","context_list_type":"epgGrid","context_list_position":3}},{"timeSlice":"3","contents":[],"context":{"context_type":"epg","context_page_title":"Guide - Grille TV - CANAL+ CINEMA","context_list_title":"CANAL+ CINEMA - J - Maintenant - Soiree","context_list_id":"198","context_list_type":"epgGrid","context_list_position":4}},{"timeSlice":"4","contents":[],"context":{"context_type":"epg","context_page_title":"Guide - Grille TV - CANAL+ CINEMA","context_list_title":"CANAL+ CINEMA - J - Maintenant - Nuit","context_list_id":"198","context_list_type":"epgGrid","context_list_position":5}}]}
\ No newline at end of file
+{"timeSlices":[{"timeSlice":"0","contents":[{"contentID":"20482220_50001","title":"Le cercle","subtitle":"Emission du 06 janv. 2023","startTime":1673504880000,"onClick":{"displayTemplate":"detailSeason","displayName":"Le cercle","path":"/cinema/le-cercle/h/4501558_50001","URLPage":"https://hodor.canalplus.pro/api/v2/mycanal/detail/f000c6f4ebf44647682b3a0fa66d7d99/okapi/6564630_50001.json?detailType=detailSeason&objectType=season&broadcastID=PLM_1196447642&episodeId=20482220_50001&brandID=4501558_50001&fromDiff=true","parameters":[{"in":"parameters","id":"featureToggles","enum":["detailV5"]}]}}],"context":{"context_type":"epg","context_page_title":"Guide - Grille TV - CANAL+ CINEMA","context_list_title":"CANAL+ CINEMA - J - Maintenant - Matin","context_list_id":"198","context_list_type":"epgGrid","context_list_position":1}},{"timeSlice":"1","contents":[{"contentID":"17230453_50001","title":"Illusions perdues","subtitle":"Film Drame","startTime":1673525160000,"onClick":{"displayTemplate":"detailPage","displayName":"Illusions perdues","path":"/cinema/illusions-perdues-film-drame/h/17230453_50001","URLPage":"https://hodor.canalplus.pro/api/v2/mycanal/detail/f000c6f4ebf44647682b3a0fa66d7d99/okapi/17230453_50001.json?detailType=detailPage&objectType=unit&broadcastID=PLM_1196447637&fromDiff=true","parameters":[{"in":"parameters","id":"featureToggles","enum":["detailV5"]}]}}],"context":{"context_type":"epg","context_page_title":"Guide - Grille TV - CANAL+ CINEMA","context_list_title":"CANAL+ CINEMA - J - Maintenant - Apres-midi","context_list_id":"198","context_list_type":"epgGrid","context_list_position":2}},{"timeSlice":"2","contents":[],"context":{"context_type":"epg","context_page_title":"Guide - Grille TV - CANAL+ CINEMA","context_list_title":"CANAL+ CINEMA - J - Maintenant - Debut de soiree","context_list_id":"198","context_list_type":"epgGrid","context_list_position":3}},{"timeSlice":"3","contents":[],"context":{"context_type":"epg","context_page_title":"Guide - Grille TV - CANAL+ CINEMA","context_list_title":"CANAL+ CINEMA - J - Maintenant - Soiree","context_list_id":"198","context_list_type":"epgGrid","context_list_position":4}},{"timeSlice":"4","contents":[],"context":{"context_type":"epg","context_page_title":"Guide - Grille TV - CANAL+ CINEMA","context_list_title":"CANAL+ CINEMA - J - Maintenant - Nuit","context_list_id":"198","context_list_type":"epgGrid","context_list_position":5}}]}
\ No newline at end of file
diff --git a/sites/canalplus.com/__data__/programme-tv.html b/sites/canalplus.com/__data__/programme-tv.html
new file mode 100644
index 00000000..ab2af7fc
--- /dev/null
+++ b/sites/canalplus.com/__data__/programme-tv.html
@@ -0,0 +1,29 @@
+
+
Programme TV : que regarder maintenant et ce soir ? | myCANAL Burundi
\ No newline at end of file
diff --git a/sites/canalplus.com/canalplus.com.channels.xml b/sites/canalplus.com/canalplus.com.channels.xml
index deed6bc6..14891e4a 100644
--- a/sites/canalplus.com/canalplus.com.channels.xml
+++ b/sites/canalplus.com/canalplus.com.channels.xml
@@ -1,231 +1,326 @@
- 6TER
- AB1
- ACTION
- AL JAZEERA ENG
- ALTICE STUDIO
- ANIMAUX
- ARIRANG TV
- ARTE
- ASTROCENTER TV
- AUTOMOTO LA CHAINE
- BBC WORLD NEWS
- BEIN SPORTS 1
- BEIN SPORTS 2
- BEIN SPORTS 3
- BEIN SPORTS MAX 10
- BEIN SPORTS MAX 4
- BEIN SPORTS MAX 5
- BEIN SPORTS MAX 6
- BEIN SPORTS MAX 7
- BEIN SPORTS MAX 8
- BEIN SPORTS MAX 9
- BET
- BFM BUSINESS
- BFM TV
- BLOOMBERG TV
- BLUE ZOOM
- BOING
- BOOMERANG
- BSMART TV
- C8
- CANAL ALPHA NE
- CANAL J
- CANAL+CINEMA
- CANAL+DOCS
- CANAL+FOOT
- CANAL+FORMULA1
- CANAL+
- CANAL+GRAND ECRAN
- CANAL+KIDS
- CANAL+MOTOGP
- CANAL+PREMIER LEAGUE
- CANAL+SERIES
- CANAL+ SPORT 2 (CH)
- CANAL+SPORT360
- CANAL+SPORT
- CANAL+TOP14
- CARTOON NETWORK
- CHASSE ET PECHE
- CHERIE 25
- CINE+ CLASSIC
- CINE+ CLUB
- CINE+ EMOTION
- CINE+ FAMIZ
- CINE+ FRISSON
- CINE+ PREMIER
- CLIQUE TV
- CNBC
- CNEWS
- CNN INT.
- COLMAX TV
- COMEDIE+
- COMEDY CENTRAL
- CSTAR
- CSTAR HITS FRANCE
- ARD DAS ERSTE
- DISNEY CHANNEL
- DISNEY CHANNEL+1
- DISNEY JUNIOR
- DORCEL TV
- DORCEL XXX
- EQUIDIA
- EURONEWS
- EUROSPORT 1
- EUROSPORT 2
- EUROSPORT 3
- EUROSPORT 360 1
- EUROSPORT 360 2
- EUROSPORT 360 3
- EUROSPORT 360 4
- EUROSPORT 360 5
- EUROSPORT 360 6
- EUROSPORT 360 7
- EUROSPORT 360 8
- EUROSPORT 4
- EUROSPORT 5
- FOOT+ 24/24
- FRANCE 2
- FRANCE 24 ENG
- FRANCE 24
- FRANCE 3
- F3 ALPES
- F3 ALSACE
- F3 AQUITAINE
- F3 AUVERGNE
- F3 BNORMANDIE
- F3 BOURGOGNE
- F3 BRETAGNE
- F3 CENTRE
- F3 CHAMP ARDENNE
- F3 CORSEVIASTELLA
- F3 COTE D'AZUR
- F3 FRANCHE COMTE
- F3 HNORMANDIE
- F3 LANGUEDOCROU
- F3 LIMOUSIN
- F3 LORRAINE
- F3 MIDI PYRENEES
- F3 NORD PDC
- F3 NOUVELLE AQUITAINE
- F3 PARIS IDF
- F3 PAYS DE LA LOIRE
- F3 PICARDIE
- F3 POITOUCHAR
- F3 PROV ALPES
- F3 RHONE ALPES
- FRANCE 4
- FRANCE 5
- FRANCEINFO:
- GAME ONE
- GOLF+
- GULLI
- HISTOIRE TV
- I24 NEWS
- INFOSPORT+
- JACQUIE & MICHEL TV
- J-ONE
- LA CHAINE METEO
- LCI
- LCP
- L'EQUIPE
- LFM TV
- M6
- M6 MUSIC
- MANGAS
- MAN X
- MCM
- MELODY
- MEZZO
- MEZZO LIVE
- MGG TV
- MTV
- MTV HITS
- MULTISPORTS 1
- MULTISPORTS 2
- MULTISPORTS 3
- MULTISPORTS 4
- MULTISPORTS 5
- MULTISPORTS 6
- MUSEUM
- MY ZEN TV
- NATIONAL GEO
- NATIONAL GEOGRAPHIC WILD
- NHK WORLD-JAPAN
- NICKELODEON
- NICKELODEON JUNIOR
- NICKELODEON TEEN
- NOLLYWOOD TV
- NON STOP PEOPLE
- NOVELAS TV
- NRJ 12
- NRJ HITS
- OCS CHOC
- OCS CITY
- OCS GEANTS
- OCS MAX
- OLYMPIA TV
- ONE TV
- ORF 1
- PARAMOUNT CHANNEL
- PARIS PREMIERE
- PENTHOUSE BLACK
- PENTHOUSE
- PINK X
- PIWI+
- PLANETE+
- PLANETE+AVENTURE
- PLANETE+CRIME
- POLAR+
- RAI UNO
- RFM TV
- RMC DECOUVERTE
- RMC SPORT 1
- RMC SPORT 2
- RMC SPORT 3
- RMC SPORT 4
- RMC SPORT LIVE 5
- RMC SPORT LIVE 6
- RMC SPORT LIVE 7
- RMC SPORT LIVE 8
- RMC SPORT LIVE 9
- RMC SPORT LIVE 10
- RMC SPORT LIVE 11
- RMC SPORT LIVE 12
- RMC SPORT LIVE 13
- RMC SPORT LIVE 14
- RMC STORY
- ROUGE TV
- RT FRANCE
- RTL9
- SCIENCE ET VIE TV
- SEASONS
- SERIE CLUB
- SRF 1
- CLASSICA
- DJAZZ
- TCM CINEMA
- TELEBIELINGUE
- TELETOON+
- TELETOON+1
- TEVA
- TF1
- TF1 SERIES FILMS
- TFX
- TIJI
- TMC
- TOONAMI
- TOUTE L'HISTOIRE
- TRACE URBAN
- TV5 MONDE
- TV BREIZH
- USHUAIA TV
- VICE TV
- VIXEN
- W9
- WARNER TV
- XXL
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ AL JAZEERA ENG
+ BBC WORLD NEWS
+ CNN INT.
+ FRANCE 24 ENG
+ NHK WORLD-JAPAN
+ 2STV
+ 6TER
+ AB1
+ ACTION
+ AL JAZEERA ENG
+ ALTICE STUDIO
+ ANIMAUX
+ ARIRANG TV
+ ARTE
+ ASTROCENTER TV
+ AUTOMOTO LA CHAINE
+ BEIN SPORTS 1
+ BEIN SPORTS 2
+ BEIN SPORTS 3
+ BEIN SPORTS MAX 10
+ BEIN SPORTS MAX 4
+ BEIN SPORTS MAX 5
+ BEIN SPORTS MAX 6
+ BEIN SPORTS MAX 7
+ BEIN SPORTS MAX 8
+ BEIN SPORTS MAX 9
+ BET
+ BFM BUSINESS
+ BFM TV
+ BLOOMBERG TV
+ BLUE ZOOM
+ BOING
+ BOOMERANG
+ BSMART TV
+ C8
+ CANAL ALPHA NE
+ CANAL J
+ CANAL+CINEMA
+ CANAL+DOCS
+ CANAL+FOOT
+ CANAL+FOOT
+ CANAL+FOOT
+ CANAL+FORMULA1
+ CANAL+
+ CANAL+
+ CANAL+
+ CANAL+GRAND ECRAN
+ CANAL+KIDS
+ CANAL+MOTOGP
+ CANAL+PREMIER LEAGUE
+ CANAL+SERIES
+ CANAL+ SPORT 2 (CH)
+ CANAL+SPORT360
+ CANAL+SPORT360
+ CANAL+SPORT
+ CANAL+SPORT
+ CANAL+TOP14
+ CARTOON NETWORK
+ CHASSE ET PECHE
+ CHERIE 25
+ CINE+ CLASSIC
+ CINE+ CLUB
+ CINE+ EMOTION
+ CINE+ FAMIZ
+ CINE+ FRISSON
+ CINE+ PREMIER
+ CLIQUE TV
+ CNBC
+ CNEWS
+ COLMAX TV
+ COMEDIE+
+ COMEDY CENTRAL
+ CSTAR
+ CSTAR HITS FRANCE
+ ARD DAS ERSTE
+ DISNEY CHANNEL
+ DISNEY CHANNEL+1
+ DISNEY JUNIOR
+ DORA TV
+ DORCEL TV
+ DORCEL XXX
+ EQUIDIA
+ EURONEWS
+ EUROSPORT 1
+ EUROSPORT 2
+ EUROSPORT 3
+ EUROSPORT 360 1
+ EUROSPORT 360 2
+ EUROSPORT 360 3
+ EUROSPORT 360 4
+ EUROSPORT 360 5
+ EUROSPORT 360 6
+ EUROSPORT 360 7
+ EUROSPORT 360 8
+ EUROSPORT 4
+ EUROSPORT 5
+ EUROSPORT 6
+ EUROSPORT 7
+ EUROSPORT 8
+ EUROSPORT 9
+ FOOT+ 24/24
+ FRANCE 2
+ FRANCE 24 ENG
+ FRANCE 24
+ FRANCE 3
+ F3 ALPES
+ F3 ALSACE
+ F3 AQUITAINE
+ F3 AUVERGNE
+ F3 BNORMANDIE
+ F3 BOURGOGNE
+ F3 BRETAGNE
+ F3 CENTRE
+ F3 CHAMP ARDENNE
+ F3 CORSEVIASTELLA
+ F3 COTE D'AZUR
+ F3 FRANCHE COMTE
+ F3 HNORMANDIE
+ F3 LANGUEDOCROU
+ F3 LIMOUSIN
+ F3 LORRAINE
+ F3 MIDI PYRENEES
+ F3 NORD PDC
+ F3 NOUVELLE AQUITAINE
+ F3 PARIS IDF
+ F3 PAYS DE LA LOIRE
+ F3 PICARDIE
+ F3 POITOUCHAR
+ F3 PROV ALPES
+ F3 RHONE ALPES
+ FRANCE 4
+ FRANCE 5
+ FRANCEINFO:
+ GAME ONE
+ GOLF+
+ GULLI
+ HISTOIRE TV
+ I24 NEWS
+ INFOSPORT+
+ JACQUIE & MICHEL TV
+ J-ONE
+ LA CHAINE METEO
+ LA TELE
+ LCI
+ LCP
+ LEMAN BLEU
+ L'EQUIPE
+ LFM TV
+ M6
+ M6 MUSIC
+ MANGAS
+ MAN X
+ MCM
+ MELODY
+ MEZZO
+ MEZZO LIVE
+ MGG TV
+ MTV
+ MTV HITS
+ MULTISPORTS 1
+ MULTISPORTS 2
+ MULTISPORTS 3
+ MULTISPORTS 4
+ MULTISPORTS 5
+ MULTISPORTS 6
+ MUSEUM
+ MY ZEN TV
+ NATIONAL GEO
+ NATIONAL GEOGRAPHIC WILD
+ NHK WORLD-JAPAN
+ NICKELODEON
+ NICKELODEON JUNIOR
+ NICKELODEON TEEN
+ NOLLYWOOD TV
+ NON STOP PEOPLE
+ NOVELAS TV
+ NRJ 12
+ NRJ HITS
+ OCS CHOC
+ OCS CITY
+ OCS GEANTS
+ OCS MAX
+ OLYMPIA TV
+ ONE TV
+ ORF 1
+ PARAMOUNT CHANNEL
+ PARIS PREMIERE
+ PENTHOUSE BLACK
+ PENTHOUSE
+ PINK X
+ PIWI+
+ PLANETE+
+ PLANETE+AVENTURE
+ PLANETE+CRIME
+ POLAR+
+ RAI UNO
+ RFM TV
+ RMC DECOUVERTE
+ RMC SPORT 1
+ RMC SPORT 2
+ RMC SPORT 3
+ RMC SPORT 4
+ RMC SPORT LIVE 10
+ RMC SPORT LIVE 11
+ RMC SPORT LIVE 12
+ RMC SPORT LIVE 13
+ RMC SPORT LIVE 14
+ RMC SPORT LIVE 5
+ RMC SPORT LIVE 6
+ RMC SPORT LIVE 7
+ RMC SPORT LIVE 8
+ RMC SPORT LIVE 9
+ RMC STORY
+ ROUGE TV
+ RT FRANCE
+ RTL9
+ SCIENCE ET VIE TV
+ SEASONS
+ SERIE CLUB
+ SRF 1
+ CLASSICA
+ DJAZZ
+ TCM CINEMA
+ TELEBIELINGUE
+ TELETOON+
+ TELETOON+1
+ TEVA
+ TF1
+ TF1 SERIES FILMS
+ TFX
+ TIJI
+ TMC
+ TOONAMI
+ TOUTE L'HISTOIRE
+ TRACE AFRICA
+ TRACE LATINA
+ TRACE URBAN
+ TV5 MONDE
+ TV BREIZH
+ USHUAIA TV
+ VICE TV
+ VIXEN
+ W9
+ WARNER TV
+ XXL
diff --git a/sites/canalplus.com/canalplus.com.config.js b/sites/canalplus.com/canalplus.com.config.js
index bb72e112..0b38a6ef 100644
--- a/sites/canalplus.com/canalplus.com.config.js
+++ b/sites/canalplus.com/canalplus.com.config.js
@@ -1,19 +1,20 @@
const dayjs = require('dayjs')
const axios = require('axios')
-// TODO: calculate API_KEY based on the current date
-//
-// const API_KEY = 'f55e5c7ddf0afba59d1c64581358910d' // 03.2022
-//const API_KEY = 'c71b6b8eb30125dab9d10a3850131ac6' // 05.2022
-const API_KEY = 'da2291af3b10e9900d1c55e1a65d3388' // 10.2022
-
module.exports = {
site: 'canalplus.com',
days: 2,
- url: function ({ channel, date }) {
+ url: async function ({ channel, date }) {
+ const [region, site_id] = channel.site_id.split('#')
+ const data = await axios
+ .get(`https://www.canalplus.com/${region}/programme-tv/`)
+ .then(r => r.data.toString())
+ .catch(err => console.log(err))
+ const token = parseToken(data)
+
const diff = date.diff(dayjs.utc().startOf('d'), 'd')
- return `https://hodor.canalplus.pro/api/v2/mycanal/channels/${API_KEY}/${channel.site_id}/broadcasts/day/${diff}`
+ return `https://hodor.canalplus.pro/api/v2/mycanal/channels/${token}/${site_id}/broadcasts/day/${diff}`
},
async parser({ content }) {
let programs = []
@@ -29,11 +30,11 @@ module.exports = {
title: item.title,
description: parseDescription(info),
icon: parseIcon(info),
- actors: parseCast(info,"Avec :"),
- director: parseCast(info,"De :"),
- writer: parseCast(info,"Scénario :"),
- composer: parseCast(info,"Musique :"),
- presenter: parseCast(info,"Présenté par :"),
+ actors: parseCast(info, 'Avec :'),
+ director: parseCast(info, 'De :'),
+ writer: parseCast(info, 'Scénario :'),
+ composer: parseCast(info, 'Musique :'),
+ presenter: parseCast(info, 'Présenté par :'),
date: parseDate(info),
rating: parseRating(info),
start,
@@ -44,21 +45,78 @@ module.exports = {
return programs
},
async channels() {
- const data = await axios
- .get(`https://secure-webtv-static.canal-plus.com/metadata/cpfra/all/v2.2/globalchannels.json`)
- .then(r => r.data)
- .catch(console.log)
+ const endpoints = {
+ ad: 'https://secure-webtv-static.canal-plus.com/metadata/cpafr/ad/all/v2.2/globalchannels.json',
+ bf: 'https://secure-webtv-static.canal-plus.com/metadata/cpafr/bf/all/v2.2/globalchannels.json',
+ bi: 'https://secure-webtv-static.canal-plus.com/metadata/cpafr/bi/all/v2.2/globalchannels.json',
+ bj: 'https://secure-webtv-static.canal-plus.com/metadata/cpafr/bj/all/v2.2/globalchannels.json',
+ bl: 'https://secure-webtv-static.canal-plus.com/metadata/cpant/bl/all/v2.2/globalchannels.json',
+ cd: 'https://secure-webtv-static.canal-plus.com/metadata/cpafr/cd/all/v2.2/globalchannels.json',
+ cf: 'https://secure-webtv-static.canal-plus.com/metadata/cpafr/cf/all/v2.2/globalchannels.json',
+ cg: 'https://secure-webtv-static.canal-plus.com/metadata/cpafr/cg/all/v2.2/globalchannels.json',
+ ch: 'https://secure-webtv-static.canal-plus.com/metadata/cpche/all/v2.2/globalchannels.json',
+ ci: 'https://secure-webtv-static.canal-plus.com/metadata/cpafr/ci/all/v2.2/globalchannels.json',
+ cm: 'https://secure-webtv-static.canal-plus.com/metadata/cpafr/cm/all/v2.2/globalchannels.json',
+ cv: 'https://secure-webtv-static.canal-plus.com/metadata/cpafr/cv/all/v2.2/globalchannels.json',
+ dj: 'https://secure-webtv-static.canal-plus.com/metadata/cpafr/dj/all/v2.2/globalchannels.json',
+ fr: 'https://secure-webtv-static.canal-plus.com/metadata/cpfra/all/v2.2/globalchannels.json',
+ ga: 'https://secure-webtv-static.canal-plus.com/metadata/cpafr/ga/all/v2.2/globalchannels.json',
+ gf: 'https://secure-webtv-static.canal-plus.com/metadata/cpant/gf/all/v2.2/globalchannels.json',
+ gh: 'https://secure-webtv-static.canal-plus.com/metadata/cpafr/gh/all/v2.2/globalchannels.json',
+ gm: 'https://secure-webtv-static.canal-plus.com/metadata/cpafr/gm/all/v2.2/globalchannels.json',
+ gn: 'https://secure-webtv-static.canal-plus.com/metadata/cpafr/gn/all/v2.2/globalchannels.json',
+ gp: 'https://secure-webtv-static.canal-plus.com/metadata/cpafr/gp/all/v2.2/globalchannels.json',
+ gp: 'https://secure-webtv-static.canal-plus.com/metadata/cpant/gp/all/v2.2/globalchannels.json',
+ gw: 'https://secure-webtv-static.canal-plus.com/metadata/cpafr/gw/all/v2.2/globalchannels.json',
+ mf: 'https://secure-webtv-static.canal-plus.com/metadata/cpant/mf/all/v2.2/globalchannels.json',
+ mg: 'https://secure-webtv-static.canal-plus.com/metadata/cpafr/mg/all/v2.2/globalchannels.json',
+ ml: 'https://secure-webtv-static.canal-plus.com/metadata/cpafr/ml/all/v2.2/globalchannels.json',
+ mq: 'https://secure-webtv-static.canal-plus.com/metadata/cpant/mq/all/v2.2/globalchannels.json',
+ mr: 'https://secure-webtv-static.canal-plus.com/metadata/cpafr/mr/all/v2.2/globalchannels.json',
+ mu: 'https://secure-webtv-static.canal-plus.com/metadata/cpmus/mu/all/v2.2/globalchannels.json',
+ nc: 'https://secure-webtv-static.canal-plus.com/metadata/cpncl/nc/all/v2.2/globalchannels.json',
+ ne: 'https://secure-webtv-static.canal-plus.com/metadata/cpafr/ne/all/v2.2/globalchannels.json',
+ pl: 'https://secure-webtv-static.canal-plus.com/metadata/cppol/all/v2.2/globalchannels.json',
+ re: 'https://secure-webtv-static.canal-plus.com/metadata/cpreu/re/all/v2.2/globalchannels.json',
+ rw: 'https://secure-webtv-static.canal-plus.com/metadata/cpafr/rw/all/v2.2/globalchannels.json',
+ sl: 'https://secure-webtv-static.canal-plus.com/metadata/cpafr/sl/all/v2.2/globalchannels.json',
+ sn: 'https://secure-webtv-static.canal-plus.com/metadata/cpafr/sn/all/v2.2/globalchannels.json',
+ td: 'https://secure-webtv-static.canal-plus.com/metadata/cpafr/td/all/v2.2/globalchannels.json',
+ tg: 'https://secure-webtv-static.canal-plus.com/metadata/cpafr/tg/all/v2.2/globalchannels.json',
+ wf: 'https://secure-webtv-static.canal-plus.com/metadata/cpncl/wf/all/v2.2/globalchannels.json',
+ yt: 'https://secure-webtv-static.canal-plus.com/metadata/cpreu/yt/all/v2.2/globalchannels.json'
+ }
- return data.channels.map(item => {
- return {
- lang: 'fr',
- site_id: item.id,
- name: item.name
- }
- })
+ let channels = []
+ for (let [region, url] of Object.entries(endpoints)) {
+ const data = await axios
+ .get(url)
+ .then(r => r.data)
+ .catch(console.log)
+
+ data.channels.forEach(channel => {
+ const site_id = region === 'fr' ? `#${channel.id}` : `${region}#${channel.id}`
+
+ if (channel.name === '.') return
+
+ channels.push({
+ lang: 'fr',
+ site_id,
+ name: channel.name
+ })
+ })
+ }
+
+ return channels
}
}
+function parseToken(data) {
+ const [, token] = data.match(/"token":"([^"]+)/) || [null, null]
+
+ return token
+}
+
function parseStart(item) {
return item && item.startTime ? dayjs(item.startTime) : null
}
@@ -101,7 +159,7 @@ function parseCast(info, type) {
if (info && info.personnalities) {
const personnalities = info.personnalities.find(i => i.prefix == type)
if (!personnalities) return people
- for(let person of personnalities.personnalitiesList) {
+ for (let person of personnalities.personnalitiesList) {
people.push(person.title)
}
}
@@ -109,20 +167,20 @@ function parseCast(info, type) {
}
function parseDate(info) {
- return (info && info.productionYear) ? info.productionYear : null
+ return info && info.productionYear ? info.productionYear : null
}
function parseRating(info) {
- if (!info || !info.parentalRatings) return null
- let rating = info.parentalRatings.find(i => i.authority === 'CSA')
- if (!rating || Array.isArray(rating)) return null
- if (rating.value === '1') return null
- if (rating.value === '2') rating.value = '-10'
- if (rating.value === '3') rating.value = '-12'
- if (rating.value === '4') rating.value = '-16'
- if (rating.value === '5') rating.value = '-18'
- return {
- system: rating.authority,
- value: rating.value
- }
+ if (!info || !info.parentalRatings) return null
+ let rating = info.parentalRatings.find(i => i.authority === 'CSA')
+ if (!rating || Array.isArray(rating)) return null
+ if (rating.value === '1') return null
+ if (rating.value === '2') rating.value = '-10'
+ if (rating.value === '3') rating.value = '-12'
+ if (rating.value === '4') rating.value = '-16'
+ if (rating.value === '5') rating.value = '-18'
+ return {
+ system: rating.authority,
+ value: rating.value
+ }
}
diff --git a/sites/canalplus.com/canalplus.com.test.js b/sites/canalplus.com/canalplus.com.test.js
index b7fa1f18..b6c35b71 100644
--- a/sites/canalplus.com/canalplus.com.test.js
+++ b/sites/canalplus.com/canalplus.com.test.js
@@ -1,5 +1,5 @@
// npm run channels:parse -- --config=./sites/canalplus.com/canalplus.com.config.js --output=./sites/canalplus.com/canalplus.com.channels.xml
-// npx epg-grabber --config=sites/canalplus.com/canalplus.com.config.js --channels=sites/canalplus.com/canalplus.com.channels.xml --output=guide.xml --days=2
+// npx epg-grabber --config=sites/canalplus.com/canalplus.com.config.js --channels=sites/canalplus.com/canalplus.com.channels.xml --output=guide.xml
const { parser, url } = require('./canalplus.com.config.js')
const fs = require('fs')
@@ -13,39 +13,68 @@ dayjs.extend(utc)
jest.mock('axios')
const channel = {
- site_id: '198',
+ site_id: 'bi#198',
xmltv_id: 'CanalPlusCinemaFrance.fr'
}
+it('can generate valid url for today', done => {
+ axios.get.mockImplementation(url => {
+ if (url === 'https://www.canalplus.com/bi/programme-tv/') {
+ return Promise.resolve({
+ data: fs.readFileSync(path.resolve(__dirname, '__data__/programme-tv.html'))
+ })
+ } else {
+ return Promise.resolve({ data: '' })
+ }
+ })
-it('can generate valid url for today', () => {
const today = dayjs.utc().startOf('d')
- expect(url({ channel, date: today })).toBe(
- 'https://hodor.canalplus.pro/api/v2/mycanal/channels/da2291af3b10e9900d1c55e1a65d3388/198/broadcasts/day/0'
- )
+ url({ channel, date: today })
+ .then(result => {
+ expect(result).toBe(
+ 'https://hodor.canalplus.pro/api/v2/mycanal/channels/f000c6f4ebf44647682b3a0fa66d7d99/198/broadcasts/day/0'
+ )
+ done()
+ })
+ .catch(done)
})
-it('can generate valid url for tomorrow', () => {
+it('can generate valid url for tomorrow', done => {
+ axios.get.mockImplementation(url => {
+ if (url === 'https://www.canalplus.com/bi/programme-tv/') {
+ return Promise.resolve({
+ data: fs.readFileSync(path.resolve(__dirname, '__data__/programme-tv.html'))
+ })
+ } else {
+ return Promise.resolve({ data: '' })
+ }
+ })
+
const tomorrow = dayjs.utc().startOf('d').add(1, 'd')
- expect(url({ channel, date: tomorrow })).toBe(
- 'https://hodor.canalplus.pro/api/v2/mycanal/channels/da2291af3b10e9900d1c55e1a65d3388/198/broadcasts/day/1'
- )
+ url({ channel, date: tomorrow })
+ .then(result => {
+ expect(result).toBe(
+ 'https://hodor.canalplus.pro/api/v2/mycanal/channels/f000c6f4ebf44647682b3a0fa66d7d99/198/broadcasts/day/1'
+ )
+ done()
+ })
+ .catch(done)
})
it('can parse response', done => {
- const content = fs.readFileSync(path.resolve(__dirname, '__data__/content.json'))
+ const content = fs.readFileSync(path.resolve(__dirname, '__data__/content.json'))
axios.get.mockImplementation(url => {
if (
url ===
- 'https://hodor.canalplus.pro/api/v2/mycanal/detail/da2291af3b10e9900d1c55e1a65d3388/okapi/6564630_50001.json?detailType=detailSeason&objectType=season&broadcastID=PLM_1196447642&episodeId=20482220_50001&brandID=4501558_50001&fromDiff=true'
+ 'https://hodor.canalplus.pro/api/v2/mycanal/detail/f000c6f4ebf44647682b3a0fa66d7d99/okapi/6564630_50001.json?detailType=detailSeason&objectType=season&broadcastID=PLM_1196447642&episodeId=20482220_50001&brandID=4501558_50001&fromDiff=true'
) {
return Promise.resolve({
data: JSON.parse(fs.readFileSync(path.resolve(__dirname, '__data__/program1.json')))
})
} else if (
url ===
- 'https://hodor.canalplus.pro/api/v2/mycanal/detail/da2291af3b10e9900d1c55e1a65d3388/okapi/17230453_50001.json?detailType=detailPage&objectType=unit&broadcastID=PLM_1196447637&fromDiff=true'
+ 'https://hodor.canalplus.pro/api/v2/mycanal/detail/f000c6f4ebf44647682b3a0fa66d7d99/okapi/17230453_50001.json?detailType=detailPage&objectType=unit&broadcastID=PLM_1196447637&fromDiff=true'
) {
return Promise.resolve({
data: JSON.parse(fs.readFileSync(path.resolve(__dirname, '__data__/program2.json')))
@@ -110,7 +139,7 @@ it('can parse response', done => {
})
it('can handle empty guide', async () => {
- const content = fs.readFileSync(path.resolve(__dirname, '__data__/no_content.json'))
- const result = await parser({ content })
- expect(result).toMatchObject([])
+ const content = fs.readFileSync(path.resolve(__dirname, '__data__/no_content.json'))
+ const result = await parser({ content })
+ expect(result).toMatchObject([])
})