Initial Commit

This commit is contained in:
2023-09-10 21:48:48 +02:00
commit 227cca7d31
791 changed files with 165200 additions and 0 deletions

View File

@@ -0,0 +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}}]}

View File

@@ -0,0 +1 @@
{"currentPage":{"displayTemplate":"error","displayName":"Page indisponible","path":"/erreur","BOName":"Page indisponible","BOLayoutName":"Erreur 400"},"title":"Page indisponible","text":"La page que vous demandez est indisponible. Si le problème persiste, vous pouvez contacter l'assistance de CANAL+.","code":400,"tracking":{"omniture":{"channel":"error","prop4":"error","prop5":"error - Page indisponible - channels_broadcast","prop10":"Contenu","prop11":"Autres","prop12":"Consumer","pageType":"errorPage","eVar14":"La page que vous demandez est indisponible. Si le problème persiste, vous pouvez contacter l'assistance de CANAL+.","pageName":"error - Page indisponible - channels_broadcast","error_message":"La page que vous demandez est indisponible. Si le problème persiste, vous pouvez contacter l'assistance de CANAL+.","page_level_1":"error","page_level_2":"Page indisponible - channels_broadcast","page_name":"error - Page indisponible - channels_broadcast","page_title":"Page indisponible","page_display_title":"Page indisponible","page_type":"errorPage","user_profile":"Consumer"},"dataLayer":{"error_message":"La page que vous demandez est indisponible. Si le problème persiste, vous pouvez contacter l'assistance de CANAL+.","page_level_1":"error","page_level_2":"Page indisponible - channels_broadcast","page_name":"error - Page indisponible - channels_broadcast","page_title":"Page indisponible","page_display_title":"Page indisponible","page_type":"errorPage","user_profile":"Consumer"}},"errorDetails":[{"message":"\"epgId\" must be a number","path":["epgId"],"type":"number.base"}]}

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,452 @@
{
"currentPage": {
"displayTemplate": "detailPage",
"displayName": "Illusions perdues",
"path": "/cinema/illusions-perdues/h/17230453_50001"
},
"meta": {
"title": "Illusions perdues",
"description": "Pendant la Restauration, Lucien de Rubempré, jeune provincial d'Angoulême, se rêve poète. Il débarque à Paris en quête de gloire. Il a le soutien de Louise de Bargeton, une aristocrate qui croit en son talent. Pour gagner sa vie, Lucien trouve un emploi dans le journal dirigé par le peu scrupuleux Etienne Lousteau..."
},
"tracking": {
"omniture": {
"channel": "myCANAL",
"prop4": "myCANAL - Prog",
"prop5": "myCANAL - Prog - Fiche",
"prop6": "myCANAL - Prog - Fiche - Cinema",
"prop7": "myCANAL - Prog - Fiche - Cinema - Illusions perdues",
"pageName": "myCANAL - Prog - Fiche - Cinema - Illusions perdues",
"prop10": "Contenu",
"prop11": "DRM",
"content_protection": "DRM",
"prop12": "Consumer",
"eVar39": "17230453_50001",
"prop19": "CANAL+",
"prop32": "notInOffer",
"prop36": "Cinema",
"prop35": "Film Drame",
"content_title": "Illusions perdues",
"page_level_1": "Prog",
"page_level_2": "Fiche",
"page_level_3": "Cinema",
"page_level_4": "Illusions perdues",
"page_name": "myCANAL - Prog - Fiche - Cinema - Illusions perdues",
"page_title": "Illusions perdues",
"page_display_title": "Illusions perdues",
"user_profile": "Consumer",
"content_id": "17230453_50001",
"content_in_offer": "notInOffer",
"genre": "Cinema",
"subgenre": "Film Drame",
"channel_name": "CANAL+"
},
"dataLayer": {
"page_level_1": "Prog",
"page_level_2": "Fiche",
"page_level_3": "Cinema",
"page_level_4": "Illusions perdues",
"page_name": "myCANAL - Prog - Fiche - Cinema - Illusions perdues",
"page_title": "Illusions perdues",
"page_display_title": "Illusions perdues",
"user_profile": "Consumer",
"content_id": "17230453_50001",
"content_in_offer": "notInOffer",
"genre": "Cinema",
"subgenre": "Film Drame",
"channel_name": "CANAL+",
"content_title": "Illusions perdues",
"content_protection": "DRM"
}
},
"detail": {
"informations": {
"type": "VoD",
"contentID": "17230453_50001",
"idRevision": "17230453_50001",
"title": "Illusions perdues",
"URLImage": "https://thumb.canalplus.pro/http/unsafe/{resolutionXY}/filters:quality({imageQualityPercentage})/img-hapi.canalplus.pro:80/ServiceImage/ImageID/107356485",
"URLLogoChannel": "https://thumb.canalplus.pro/http/unsafe/{resolutionXY}/filters:quality({imageQualityPercentage})/img-hapi.canalplus.pro:80/ServiceImage/ImageID/68603655",
"altLogoChannel": "CANAL+",
"summary": "Pendant la Restauration, Lucien de Rubempré, jeune provincial d'Angoulême, se rêve poète. Il débarque à Paris en quête de gloire. Il a le soutien de Louise de Bargeton, une aristocrate qui croit en son talent. Pour gagner sa vie, Lucien trouve un emploi dans le journal dirigé par le peu scrupuleux Etienne Lousteau...",
"isTVoD": false,
"audioLanguage": "VF",
"subtitle": "Film Drame",
"uploadDate": 1671673200000,
"noPub": true,
"editorialTitle": "Film Drame, France, 2021, 2h24",
"sharingURL": "https://mycan.al/cinema/illusions-perdues/h/17230453_50001",
"formats": {
"video": [
"UHD",
"HD"
],
"audio": [
"DOLBY 5.1",
"STEREO"
]
},
"URLVitrine": "https://hodor.canalplus.pro/api/v2/mycanal/highlight/da2291af3b10e9900d1c55e1a65d3388/objectType/unit/17230453_50001.json?previousPageName=myCANAL%20-%20Prog%20-%20Fiche%20-%20Cinema&adult=false&context_page_title=Content%20-%20See%20also%20-%20Illusions%20perdues&omitTracking=true",
"closedCaptioning": true,
"consumptionPlatform": "HAPI",
"trailer": false,
"teasers": [
{
"URLMedias": "https://static.canal-plus.net/ba/17230453_50001.mp4",
"default": true
}
],
"personnalities": [
{
"prefix": "De :",
"personnalitiesList": [
{
"title": "Xavier Giannoli",
"onClick": {
"displayName": "Xavier Giannoli",
"displayTemplate": "contentGrid",
"URLPage": "https://hodor.canalplus.pro/api/v2/mycanal/contentGrid/da2291af3b10e9900d1c55e1a65d3388/12307.json?objectType=person&dsp=detailPage",
"path": "/personne/xavier-giannoli/12307"
}
}
]
},
{
"prefix": "Avec :",
"personnalitiesList": [
{
"title": "Benjamin Voisin",
"onClick": {
"displayName": "Benjamin Voisin",
"displayTemplate": "contentGrid",
"URLPage": "https://hodor.canalplus.pro/api/v2/mycanal/contentGrid/da2291af3b10e9900d1c55e1a65d3388/339366.json?objectType=person&dsp=detailPage",
"path": "/personne/benjamin-voisin/339366"
}
},
{
"title": "Cécile de France",
"onClick": {
"displayName": "Cécile de France",
"displayTemplate": "contentGrid",
"URLPage": "https://hodor.canalplus.pro/api/v2/mycanal/contentGrid/da2291af3b10e9900d1c55e1a65d3388/31634.json?objectType=person&dsp=detailPage",
"path": "/personne/cecile-de-france/31634"
}
},
{
"title": "Vincent Lacoste",
"onClick": {
"displayName": "Vincent Lacoste",
"displayTemplate": "contentGrid",
"URLPage": "https://hodor.canalplus.pro/api/v2/mycanal/contentGrid/da2291af3b10e9900d1c55e1a65d3388/3554.json?objectType=person&dsp=detailPage",
"path": "/personne/vincent-lacoste/3554"
}
},
{
"title": "Xavier Dolan",
"onClick": {
"displayName": "Xavier Dolan",
"displayTemplate": "contentGrid",
"URLPage": "https://hodor.canalplus.pro/api/v2/mycanal/contentGrid/da2291af3b10e9900d1c55e1a65d3388/29821.json?objectType=person&dsp=detailPage",
"path": "/personne/xavier-dolan/29821"
}
},
{
"title": "Gérard Depardieu",
"onClick": {
"displayName": "Gérard Depardieu",
"displayTemplate": "contentGrid",
"URLPage": "https://hodor.canalplus.pro/api/v2/mycanal/contentGrid/da2291af3b10e9900d1c55e1a65d3388/2033.json?objectType=person&dsp=detailPage",
"path": "/personne/gerard-depardieu/2033"
}
},
{
"title": "Salomé Dewaels",
"onClick": {
"displayName": "Salomé Dewaels",
"displayTemplate": "contentGrid",
"URLPage": "https://hodor.canalplus.pro/api/v2/mycanal/contentGrid/da2291af3b10e9900d1c55e1a65d3388/306041.json?objectType=person&dsp=detailPage",
"path": "/personne/salome-dewaels/306041"
}
},
{
"title": "Jeanne Balibar",
"onClick": {
"displayName": "Jeanne Balibar",
"displayTemplate": "contentGrid",
"URLPage": "https://hodor.canalplus.pro/api/v2/mycanal/contentGrid/da2291af3b10e9900d1c55e1a65d3388/2349.json?objectType=person&dsp=detailPage",
"path": "/personne/jeanne-balibar/2349"
}
},
{
"title": "Louis-Do de Lencquesaing",
"onClick": {
"displayName": "Louis-Do de Lencquesaing",
"displayTemplate": "contentGrid",
"URLPage": "https://hodor.canalplus.pro/api/v2/mycanal/contentGrid/da2291af3b10e9900d1c55e1a65d3388/134975.json?objectType=person&dsp=detailPage",
"path": "/personne/louis-do-de-lencquesaing/134975"
}
},
{
"title": "Alexis Barbosa",
"onClick": {
"displayName": "Alexis Barbosa",
"displayTemplate": "contentGrid",
"URLPage": "https://hodor.canalplus.pro/api/v2/mycanal/contentGrid/da2291af3b10e9900d1c55e1a65d3388/553741.json?objectType=person&dsp=detailPage",
"path": "/personne/alexis-barbosa/553741"
}
},
{
"title": "Jean-François Stévenin",
"onClick": {
"displayName": "Jean-François Stévenin",
"displayTemplate": "contentGrid",
"URLPage": "https://hodor.canalplus.pro/api/v2/mycanal/contentGrid/da2291af3b10e9900d1c55e1a65d3388/578.json?objectType=person&dsp=detailPage",
"path": "/personne/jean-francois-stevenin/578"
}
},
{
"title": "André Marcon",
"onClick": {
"displayName": "André Marcon",
"displayTemplate": "contentGrid",
"URLPage": "https://hodor.canalplus.pro/api/v2/mycanal/contentGrid/da2291af3b10e9900d1c55e1a65d3388/3647.json?objectType=person&dsp=detailPage",
"path": "/personne/andre-marcon/3647"
}
},
{
"title": "Marie Cornillon",
"onClick": {
"displayName": "Marie Cornillon",
"displayTemplate": "contentGrid",
"URLPage": "https://hodor.canalplus.pro/api/v2/mycanal/contentGrid/da2291af3b10e9900d1c55e1a65d3388/553722.json?objectType=person&dsp=detailPage",
"path": "/personne/marie-cornillon/553722"
}
}
]
},
{
"prefix": "Scénario :",
"personnalitiesList": [
{
"title": "Xavier Giannoli",
"onClick": {
"displayName": "Xavier Giannoli",
"displayTemplate": "contentGrid",
"URLPage": "https://hodor.canalplus.pro/api/v2/mycanal/contentGrid/da2291af3b10e9900d1c55e1a65d3388/12307.json?objectType=person&dsp=detailPage",
"path": "/personne/xavier-giannoli/12307"
}
}
]
}
],
"reviews": [
{
"name": "Allociné Presse",
"displayRating": true,
"stars": {
"type": "allocine",
"value": 4
}
},
{
"name": "Allociné Spectateur",
"displayRating": true,
"stars": {
"type": "allocine",
"value": 4.5
}
},
{
"name": "Télérama",
"displayRating": true,
"review": "Lascension et la chute du célèbre Lucien de Rubempré, petit poète venu tenter sa chance à Paris. Avec cette adaptation de lœuvre phare de Balzac, Xavier Giannoli signe une fresque flamboyante et cruelle, qui tend un miroir grimaçant à notre époque.",
"stars": {
"type": "telerama",
"value": 3
}
},
{
"name": "Télécâble Sat",
"displayRating": true,
"review": "Récompensée par sept césars, une adaptation aussi somptueuse que moderne du roman de Balzac. L'écriture est ciselée, l'interprétation parfaite, la réalisation affûtée.",
"stars": {
"type": "telecable",
"value": 4
}
}
],
"recommendationTags": [
{
"label": "Adaptations de textes classiques",
"onClick": {
"displayTemplate": "contentGrid",
"displayName": "Adaptations de textes classiques",
"URLPage": "https://hodor.canalplus.pro/api/v2/mycanal/tag/da2291af3b10e9900d1c55e1a65d3388/id/100000014?dsp=detailPage",
"path": "/tag/100000014/adaptations-de-textes-classiques"
}
},
{
"label": "Journalisme",
"onClick": {
"displayTemplate": "contentGrid",
"displayName": "Journalisme",
"URLPage": "https://hodor.canalplus.pro/api/v2/mycanal/tag/da2291af3b10e9900d1c55e1a65d3388/id/100000455?dsp=detailPage",
"path": "/tag/100000455/journalisme"
}
},
{
"label": "Luxe",
"onClick": {
"displayTemplate": "contentGrid",
"displayName": "Luxe",
"URLPage": "https://hodor.canalplus.pro/api/v2/mycanal/tag/da2291af3b10e9900d1c55e1a65d3388/id/100000484?dsp=detailPage",
"path": "/tag/100000484/luxe"
}
},
{
"label": "Réputation",
"onClick": {
"displayTemplate": "contentGrid",
"displayName": "Réputation",
"URLPage": "https://hodor.canalplus.pro/api/v2/mycanal/tag/da2291af3b10e9900d1c55e1a65d3388/id/100000661?dsp=detailPage",
"path": "/tag/100000661/reputation"
}
},
{
"label": "Écrivains",
"onClick": {
"displayTemplate": "contentGrid",
"displayName": "Écrivains",
"URLPage": "https://hodor.canalplus.pro/api/v2/mycanal/tag/da2291af3b10e9900d1c55e1a65d3388/id/100000252?dsp=detailPage",
"path": "/tag/100000252/ecrivains"
}
},
{
"label": "Déceptions amoureuses",
"onClick": {
"displayTemplate": "contentGrid",
"displayName": "Déceptions amoureuses",
"URLPage": "https://hodor.canalplus.pro/api/v2/mycanal/tag/da2291af3b10e9900d1c55e1a65d3388/id/100000211?dsp=detailPage",
"path": "/tag/100000211/deceptions-amoureuses"
}
},
{
"label": "Attirance ou sentiments",
"onClick": {
"displayTemplate": "contentGrid",
"displayName": "Attirance ou sentiments",
"URLPage": "https://hodor.canalplus.pro/api/v2/mycanal/tag/da2291af3b10e9900d1c55e1a65d3388/id/100000077?dsp=detailPage",
"path": "/tag/100000077/attirance-ou-sentiments"
}
},
{
"label": "Subtil",
"onClick": {
"displayTemplate": "contentGrid",
"displayName": "Subtil",
"URLPage": "https://hodor.canalplus.pro/api/v2/mycanal/tag/da2291af3b10e9900d1c55e1a65d3388/id/100000762?dsp=detailPage",
"path": "/tag/100000762/subtil"
}
},
{
"label": "Glamour",
"onClick": {
"displayTemplate": "contentGrid",
"displayName": "Glamour",
"URLPage": "https://hodor.canalplus.pro/api/v2/mycanal/tag/da2291af3b10e9900d1c55e1a65d3388/id/100000364?dsp=detailPage",
"path": "/tag/100000364/glamour"
}
}
],
"parentalRatings": [
{
"value": "2",
"authority": "CSA"
}
],
"duration": "8640000",
"productionYear": "2021",
"contentAvailability": {
"isInCatalog": true,
"isInOffer": false,
"availabilities": {
"download": {
"consumptionPlatform": "HAPI",
"isAvailable": true,
"isInOffer": false,
"URLMedias": "https://hodor.canalplus.pro/api/v2/mycanal/me/getMediaUrl/{tokenCMS}/okapi/17230453_50001.json",
"availabilityEndDate": 1677797940000
},
"stream": {
"consumptionPlatform": "HAPI",
"isAvailable": true,
"isInOffer": false,
"label": "Dispo. jusqu'au 02/03/2023",
"URLMedias": "https://hodor.canalplus.pro/api/v2/mycanal/me/getMediaUrl/{tokenCMS}/okapi/17230453_50001.json"
},
"live": {
"isInOffer": false,
"isAvailable": true
}
}
}
}
},
"perso": [
{
"platform": "HAPI"
}
],
"associatedContents": [
{
"title": "En plus",
"context": {
"contextType": "associatedContent",
"contextDetail": "mycanal-prog-fiche-cinema-illusions_perdues-creplay_chaine_cplus_illusions_perdues-en_plus",
"context_type": "associatedContent",
"context_page_title": "Prog - Fiche - Cinema - Illusions perdues",
"context_list_id": "creplay_chaine_cplus_illusions_perdues",
"context_list_title": "En plus",
"context_list_type": "contentRow",
"context_list_position": 1
},
"contentID": "creplay_chaine_cplus_illusions_perdues",
"contents": [
{
"contentID": "19644697_50001",
"URLImage": "https://thumb.canalplus.pro/http/unsafe/{resolutionXY}/filters:quality({imageQualityPercentage})/img-hapi.canalplus.pro:80/ServiceImage/ImageID/107282238",
"parentalRatings": [
{
"value": "1",
"authority": "CSA"
}
],
"title": "Intro : Illusions perdues",
"subtitle": "Illusions perdues",
"contentAvailability": {
"isInCatalog": true,
"isInOffer": true,
"availabilities": {
"download": {
"consumptionPlatform": "HAPI",
"isAvailable": true,
"isInOffer": false,
"URLMedias": "https://hodor.canalplus.pro/api/v2/mycanal/me/getMediaUrl/{tokenCMS}/okapi/19644697_50001.json",
"availabilityEndDate": 1679785140000
},
"stream": {
"consumptionPlatform": "HAPI",
"isAvailable": true,
"isInOffer": true,
"URLMedias": "https://hodor.canalplus.pro/api/v2/mycanal/me/getMediaUrl/{tokenCMS}/okapi/19644697_50001.json"
},
"live": {
"isInOffer": false,
"isAvailable": false
}
}
}
}
]
}
]
}

View File

@@ -0,0 +1,231 @@
<?xml version="1.0" encoding="UTF-8"?>
<site site="canalplus.com">
<channels>
<channel lang="fr" xmltv_id="6ter.fr" site_id="521">6TER</channel>
<channel lang="fr" xmltv_id="AB1.fr" site_id="611">AB1</channel>
<channel lang="fr" xmltv_id="Action.fr" site_id="504">ACTION</channel>
<channel lang="en" xmltv_id="AlJazeeraEnglish.qa" site_id="675">AL JAZEERA ENG</channel>
<channel lang="fr" xmltv_id="AlticeStudio.fr" site_id="820">ALTICE STUDIO</channel>
<channel lang="fr" xmltv_id="Animaux.fr" site_id="503">ANIMAUX</channel>
<channel lang="fr" xmltv_id="ArirangWorld.kr" site_id="252">ARIRANG TV</channel>
<channel lang="fr" xmltv_id="ARTEFrance.fr" site_id="154">ARTE</channel>
<channel lang="fr" xmltv_id="AstrocenterTV.fr" site_id="632">ASTROCENTER TV</channel>
<channel lang="fr" xmltv_id="Automotolachaine.fr" site_id="612">AUTOMOTO LA CHAINE</channel>
<channel lang="en" xmltv_id="BBCWorldNewsEurope.uk" site_id="589">BBC WORLD NEWS</channel>
<channel lang="fr" xmltv_id="beINSports1France.fr" site_id="381">BEIN SPORTS 1</channel>
<channel lang="fr" xmltv_id="beINSports2France.fr" site_id="384">BEIN SPORTS 2</channel>
<channel lang="fr" xmltv_id="beINSports3France.fr" site_id="516">BEIN SPORTS 3</channel>
<channel lang="fr" xmltv_id="beINSportsMax10France.fr" site_id="605">BEIN SPORTS MAX 10</channel>
<channel lang="fr" xmltv_id="beINSportsMax4France.fr" site_id="596">BEIN SPORTS MAX 4</channel>
<channel lang="fr" xmltv_id="beINSportsMax5France.fr" site_id="597">BEIN SPORTS MAX 5</channel>
<channel lang="fr" xmltv_id="beINSportsMax6France.fr" site_id="598">BEIN SPORTS MAX 6</channel>
<channel lang="fr" xmltv_id="beINSportsMax7France.fr" site_id="599">BEIN SPORTS MAX 7</channel>
<channel lang="fr" xmltv_id="beINSportsMax8France.fr" site_id="603">BEIN SPORTS MAX 8</channel>
<channel lang="fr" xmltv_id="beINSportsMax9France.fr" site_id="604">BEIN SPORTS MAX 9</channel>
<channel lang="fr" xmltv_id="BETFrance.fr" site_id="628">BET</channel>
<channel lang="fr" xmltv_id="BFMBusiness.fr" site_id="645">BFM BUSINESS</channel>
<channel lang="fr" xmltv_id="BFMTV.fr" site_id="633">BFM TV</channel>
<channel lang="fr" xmltv_id="BloombergTVEurope.uk" site_id="47">BLOOMBERG TV</channel>
<channel lang="fr" xmltv_id="BlueZoomD.ch" site_id="893">BLUE ZOOM</channel>
<channel lang="fr" xmltv_id="BoingFrance.fr" site_id="529">BOING</channel>
<channel lang="fr" xmltv_id="BoomerangFrance.fr" site_id="530">BOOMERANG</channel>
<channel lang="fr" xmltv_id="BSmartTV.fr" site_id="849">BSMART TV</channel>
<channel lang="fr" xmltv_id="C8.fr" site_id="450">C8</channel>
<channel lang="fr" xmltv_id="CanalAlphaNE.ch" site_id="772">CANAL ALPHA NE</channel>
<channel lang="fr" xmltv_id="CanalJ.fr" site_id="525">CANAL J</channel>
<channel lang="fr" xmltv_id="CanalPlusCinemaFrance.fr" site_id="198">CANAL+CINEMA</channel>
<channel lang="fr" xmltv_id="CanalPlusDocs.fr" site_id="899">CANAL+DOCS</channel>
<channel lang="fr" xmltv_id="CanalPlusFoot.fr" site_id="19">CANAL+FOOT</channel>
<channel lang="fr" xmltv_id="CanalPlusFormula1.fr" site_id="824">CANAL+FORMULA1</channel>
<channel lang="fr" xmltv_id="CanalPlusFrance.fr" site_id="301">CANAL+</channel>
<channel lang="fr" xmltv_id="CanalPlusGrandEcran.fr" site_id="900">CANAL+GRAND ECRAN</channel>
<channel lang="fr" xmltv_id="CanalPlusKids.fr" site_id="259">CANAL+KIDS</channel>
<channel lang="fr" xmltv_id="CanalPlusMotoGP.fr" site_id="823">CANAL+MOTOGP</channel>
<channel lang="fr" xmltv_id="CanalPlusPremierLeague.fr" site_id="815">CANAL+PREMIER LEAGUE</channel>
<channel lang="fr" xmltv_id="CanalPlusSeriesFrance.fr" site_id="481">CANAL+SERIES</channel>
<channel lang="fr" xmltv_id="CanalPlusSport2.fr" site_id="861">CANAL+ SPORT 2 (CH)</channel>
<channel lang="fr" xmltv_id="CanalPlusSport360.fr" site_id="83">CANAL+SPORT360</channel>
<channel lang="fr" xmltv_id="CanalPlusSportFrance.fr" site_id="177">CANAL+SPORT</channel>
<channel lang="fr" xmltv_id="CanalPlusTop14.fr" site_id="816">CANAL+TOP14</channel>
<channel lang="fr" xmltv_id="CartoonNetworkFrance.fr" site_id="502">CARTOON NETWORK</channel>
<channel lang="fr" xmltv_id="ChassePeche.fr" site_id="681">CHASSE ET PECHE</channel>
<channel lang="fr" xmltv_id="Cherie25.fr" site_id="440">CHERIE 25</channel>
<channel lang="fr" xmltv_id="CinePlusClassic.fr" site_id="531">CINE+ CLASSIC</channel>
<channel lang="fr" xmltv_id="CinePlusClub.fr" site_id="532">CINE+ CLUB</channel>
<channel lang="fr" xmltv_id="CinePlusEmotion.fr" site_id="396">CINE+ EMOTION</channel>
<channel lang="fr" xmltv_id="CinePlusFamiz.fr" site_id="533">CINE+ FAMIZ</channel>
<channel lang="fr" xmltv_id="CinePlusFrisson.fr" site_id="398">CINE+ FRISSON</channel>
<channel lang="fr" xmltv_id="CinePlusPremier.fr" site_id="322">CINE+ PREMIER</channel>
<channel lang="fr" xmltv_id="CliqueTV.fr" site_id="665">CLIQUE TV</channel>
<channel lang="fr" xmltv_id="CNBCEurope.uk" site_id="64">CNBC</channel>
<channel lang="fr" xmltv_id="CNews.fr" site_id="480">CNEWS</channel>
<channel lang="en" xmltv_id="CNNInternationalEurope.us" site_id="30">CNN INT.</channel>
<channel lang="fr" xmltv_id="ColmaxTV.fr" site_id="643">COLMAX TV</channel>
<channel lang="fr" xmltv_id="ComediePlus.fr" site_id="534">COMEDIE+</channel>
<channel lang="fr" xmltv_id="ComedyCentralFrance.fr" site_id="806">COMEDY CENTRAL</channel>
<channel lang="fr" xmltv_id="CStar.fr" site_id="513">CSTAR</channel>
<channel lang="fr" xmltv_id="CStarHitsFrance.fr" site_id="723">CSTAR HITS FRANCE</channel>
<channel lang="fr" xmltv_id="DasErste.de" site_id="781">ARD DAS ERSTE</channel>
<channel lang="fr" xmltv_id="DisneyChannelFrance.fr" site_id="282">DISNEY CHANNEL</channel>
<channel lang="fr" xmltv_id="DisneyChannelFrancePlus1.fr" site_id="535">DISNEY CHANNEL+1</channel>
<channel lang="fr" xmltv_id="DisneyJuniorFrance.fr" site_id="274">DISNEY JUNIOR</channel>
<channel lang="fr" xmltv_id="DorcelTV.nl" site_id="536">DORCEL TV</channel>
<channel lang="fr" xmltv_id="DorcelXXX.nl" site_id="537">DORCEL XXX</channel>
<channel lang="fr" xmltv_id="Equidia.fr" site_id="540">EQUIDIA</channel>
<channel lang="fr" xmltv_id="EuronewsFrench.fr" site_id="324">EURONEWS</channel>
<channel lang="fr" xmltv_id="Eurosport1.fr" site_id="101">EUROSPORT 1</channel>
<channel lang="fr" xmltv_id="Eurosport2.fr" site_id="436">EUROSPORT 2</channel>
<channel lang="fr" xmltv_id="Eurosport3.fr" site_id="985">EUROSPORT 3</channel>
<channel lang="fr" xmltv_id="Eurosport360HD1.fr" site_id="635">EUROSPORT 360 1</channel>
<channel lang="fr" xmltv_id="Eurosport360HD2.fr" site_id="636">EUROSPORT 360 2</channel>
<channel lang="fr" xmltv_id="Eurosport360HD3.fr" site_id="637">EUROSPORT 360 3</channel>
<channel lang="fr" xmltv_id="Eurosport360HD4.fr" site_id="638">EUROSPORT 360 4</channel>
<channel lang="fr" xmltv_id="Eurosport360HD5.fr" site_id="650">EUROSPORT 360 5</channel>
<channel lang="fr" xmltv_id="Eurosport360HD6.fr" site_id="651">EUROSPORT 360 6</channel>
<channel lang="fr" xmltv_id="Eurosport360HD7.fr" site_id="652">EUROSPORT 360 7</channel>
<channel lang="fr" xmltv_id="Eurosport360HD8.fr" site_id="653">EUROSPORT 360 8</channel>
<channel lang="fr" xmltv_id="Eurosport4.fr" site_id="986">EUROSPORT 4</channel>
<channel lang="fr" xmltv_id="Eurosport5.fr" site_id="987">EUROSPORT 5</channel>
<channel lang="fr" xmltv_id="FootPlus.fr" site_id="542">FOOT+ 24/24</channel>
<channel lang="fr" xmltv_id="France2.fr" site_id="26">FRANCE 2</channel>
<channel lang="en" xmltv_id="France24English.fr" site_id="311">FRANCE 24 ENG</channel>
<channel lang="fr" xmltv_id="France24French.fr" site_id="310">FRANCE 24</channel>
<channel lang="fr" xmltv_id="France3.fr" site_id="543">FRANCE 3</channel>
<channel lang="fr" xmltv_id="France3Alpes.fr" site_id="926">F3 ALPES</channel>
<channel lang="fr" xmltv_id="France3Alsace.fr" site_id="941">F3 ALSACE</channel>
<channel lang="fr" xmltv_id="France3Aquitaine.fr" site_id="922">F3 AQUITAINE</channel>
<channel lang="fr" xmltv_id="France3Auvergne.fr" site_id="924">F3 AUVERGNE</channel>
<channel lang="fr" xmltv_id="France3BasseNormandie.fr" site_id="923">F3 BNORMANDIE</channel>
<channel lang="fr" xmltv_id="France3Bourgogne.fr" site_id="925">F3 BOURGOGNE</channel>
<channel lang="fr" xmltv_id="France3Bretagne.fr" site_id="939">F3 BRETAGNE</channel>
<channel lang="fr" xmltv_id="France3CentreValdeLoire.fr" site_id="935">F3 CENTRE</channel>
<channel lang="fr" xmltv_id="France3ChampagneArdenne.fr" site_id="938">F3 CHAMP ARDENNE</channel>
<channel lang="fr" xmltv_id="France3CorseViaStella.fr" site_id="943">F3 CORSEVIASTELLA</channel>
<channel lang="fr" xmltv_id="France3CotedAzur.fr" site_id="934">F3 COTE D&apos;AZUR</channel>
<channel lang="fr" xmltv_id="France3FrancheComte.fr" site_id="921">F3 FRANCHE COMTE</channel>
<channel lang="fr" xmltv_id="France3HauteNormandie.fr" site_id="940">F3 HNORMANDIE</channel>
<channel lang="fr" xmltv_id="France3LanguedocRoussillon.fr" site_id="931">F3 LANGUEDOCROU</channel>
<channel lang="fr" xmltv_id="France3Limousin.fr" site_id="928">F3 LIMOUSIN</channel>
<channel lang="fr" xmltv_id="France3Lorraine.fr" site_id="932">F3 LORRAINE</channel>
<channel lang="fr" xmltv_id="France3MidiPyrenees.fr" site_id="942">F3 MIDI PYRENEES</channel>
<channel lang="fr" xmltv_id="France3NordPasdeCalais.fr" site_id="927">F3 NORD PDC</channel>
<channel lang="fr" xmltv_id="France3NouvelleAquitaine.fr" site_id="998">F3 NOUVELLE AQUITAINE</channel>
<channel lang="fr" xmltv_id="France3ParisIledeFrance.fr" site_id="936">F3 PARIS IDF</channel>
<channel lang="fr" xmltv_id="France3PaysdelaLoire.fr" site_id="933">F3 PAYS DE LA LOIRE</channel>
<channel lang="fr" xmltv_id="France3Picardie.fr" site_id="920">F3 PICARDIE</channel>
<channel lang="fr" xmltv_id="France3PoitouCharentes.fr" site_id="937">F3 POITOUCHAR</channel>
<channel lang="fr" xmltv_id="France3ProvenceAlpes.fr" site_id="930">F3 PROV ALPES</channel>
<channel lang="fr" xmltv_id="France3RhoneAlpes.fr" site_id="929">F3 RHONE ALPES</channel>
<channel lang="fr" xmltv_id="France4.fr" site_id="544">FRANCE 4</channel>
<channel lang="fr" xmltv_id="France5.fr" site_id="545">FRANCE 5</channel>
<channel lang="fr" xmltv_id="Franceinfo.fr" site_id="670">FRANCEINFO:</channel>
<channel lang="fr" xmltv_id="GameOne.fr" site_id="592">GAME ONE</channel>
<channel lang="fr" xmltv_id="GolfPlus.fr" site_id="378">GOLF+</channel>
<channel lang="fr" xmltv_id="Gulli.fr" site_id="549">GULLI</channel>
<channel lang="fr" xmltv_id="HistoireTV.fr" site_id="550">HISTOIRE TV</channel>
<channel lang="fr" xmltv_id="I24NewsFrench.il" site_id="362">I24 NEWS</channel>
<channel lang="fr" xmltv_id="InfosportPlus.fr" site_id="551">INFOSPORT+</channel>
<channel lang="fr" xmltv_id="JacquieMichelTV.fr" site_id="850">JACQUIE &amp; MICHEL TV</channel>
<channel lang="fr" xmltv_id="JOne.fr" site_id="484">J-ONE</channel>
<channel lang="fr" xmltv_id="LaChaineMeteo.fr" site_id="552">LA CHAINE METEO</channel>
<channel lang="fr" xmltv_id="LCI.fr" site_id="553">LCI</channel>
<channel lang="fr" xmltv_id="LCP.fr" site_id="554">LCP</channel>
<channel lang="fr" xmltv_id="LEquipe.fr" site_id="451">L&apos;EQUIPE</channel>
<channel lang="fr" xmltv_id="LFMTV.ch" site_id="879">LFM TV</channel>
<channel lang="fr" xmltv_id="M6.fr" site_id="313">M6</channel>
<channel lang="fr" xmltv_id="M6Music.fr" site_id="352">M6 MUSIC</channel>
<channel lang="fr" xmltv_id="Mangas.fr" site_id="613">MANGAS</channel>
<channel lang="fr" xmltv_id="ManX.be" site_id="672">MAN X</channel>
<channel lang="fr" xmltv_id="MCM.fr" site_id="556">MCM</channel>
<channel lang="fr" xmltv_id="Melody.fr" site_id="580">MELODY</channel>
<channel lang="fr" xmltv_id="Mezzo.fr" site_id="560">MEZZO</channel>
<channel lang="fr" xmltv_id="MezzoLiveHD.fr" site_id="268">MEZZO LIVE</channel>
<channel lang="fr" xmltv_id="MGGTV.fr" site_id="819">MGG TV</channel>
<channel lang="fr" xmltv_id="MTVFrance.fr" site_id="470">MTV</channel>
<channel lang="fr" xmltv_id="MTVHitsFrance.fr" site_id="629">MTV HITS</channel>
<channel lang="fr" xmltv_id="MultiSports1.fr" site_id="562">MULTISPORTS 1</channel>
<channel lang="fr" xmltv_id="MultiSports2.fr" site_id="563">MULTISPORTS 2</channel>
<channel lang="fr" xmltv_id="MultiSports3.fr" site_id="564">MULTISPORTS 3</channel>
<channel lang="fr" xmltv_id="MultiSports4.fr" site_id="565">MULTISPORTS 4</channel>
<channel lang="fr" xmltv_id="MultiSports5.fr" site_id="566">MULTISPORTS 5</channel>
<channel lang="fr" xmltv_id="MultiSports6.fr" site_id="567">MULTISPORTS 6</channel>
<channel lang="fr" xmltv_id="MuseumTV.fr" site_id="678">MUSEUM</channel>
<channel lang="fr" xmltv_id="MyZenTV.fr" site_id="656">MY ZEN TV</channel>
<channel lang="fr" xmltv_id="NationalGeographicFrance.fr" site_id="302">NATIONAL GEO</channel>
<channel lang="fr" xmltv_id="NationalGeographicWildFrance.fr" site_id="290">NATIONAL GEOGRAPHIC WILD</channel>
<channel lang="en" xmltv_id="NHKWorldJapan.jp" site_id="654">NHK WORLD-JAPAN</channel>
<channel lang="fr" xmltv_id="NickelodeonFrance.fr" site_id="591">NICKELODEON</channel>
<channel lang="fr" xmltv_id="NickelodeonJunior.fr" site_id="593">NICKELODEON JUNIOR</channel>
<channel lang="fr" xmltv_id="NickelodeonTeen.fr" site_id="518">NICKELODEON TEEN</channel>
<channel lang="fr" xmltv_id="NollywoodTV.fr" site_id="527">NOLLYWOOD TV</channel>
<channel lang="fr" xmltv_id="NonStopPeople.fr" site_id="434">NON STOP PEOPLE</channel>
<channel lang="fr" xmltv_id="NovelasTV.fr" site_id="693">NOVELAS TV</channel>
<channel lang="fr" xmltv_id="NRJ12.fr" site_id="568">NRJ 12</channel>
<channel lang="fr" xmltv_id="NRJHits.fr" site_id="569">NRJ HITS</channel>
<channel lang="fr" xmltv_id="OCSChoc.fr" site_id="466">OCS CHOC</channel>
<channel lang="fr" xmltv_id="OCSCity.fr" site_id="467">OCS CITY</channel>
<channel lang="fr" xmltv_id="OCSGeants.fr" site_id="468">OCS GEANTS</channel>
<channel lang="fr" xmltv_id="OCSMax.fr" site_id="372">OCS MAX</channel>
<channel lang="fr" xmltv_id="OlympiaTV.fr" site_id="813">OLYMPIA TV</channel>
<channel lang="fr" xmltv_id="OneTV.ch" site_id="880">ONE TV</channel>
<channel lang="fr" xmltv_id="ORF1.at" site_id="783">ORF 1</channel>
<channel lang="fr" xmltv_id="ParamountChannelFrance.fr" site_id="487">PARAMOUNT CHANNEL</channel>
<channel lang="fr" xmltv_id="ParisPremiere.fr" site_id="294">PARIS PREMIERE</channel>
<channel lang="fr" xmltv_id="PenthouseBlack.us" site_id="686">PENTHOUSE BLACK</channel>
<channel lang="fr" xmltv_id="PenthouseGold.us" site_id="167">PENTHOUSE</channel>
<channel lang="fr" xmltv_id="PinkX.fr" site_id="575">PINK X</channel>
<channel lang="fr" xmltv_id="PiwiPlus.fr" site_id="576">PIWI+</channel>
<channel lang="fr" xmltv_id="PlanetePlus.fr" site_id="270">PLANETE+</channel>
<channel lang="fr" xmltv_id="PlanetePlusAE.fr" site_id="588">PLANETE+AVENTURE</channel>
<channel lang="fr" xmltv_id="PlanetePlusCI.fr" site_id="587">PLANETE+CRIME</channel>
<channel lang="fr" xmltv_id="PolarPlus.fr" site_id="692">POLAR+</channel>
<channel lang="fr" xmltv_id="Rai1.it" site_id="782">RAI UNO</channel>
<channel lang="fr" xmltv_id="RFMTV.fr" site_id="557">RFM TV</channel>
<channel lang="fr" xmltv_id="RMCDecouverte.fr" site_id="595">RMC DECOUVERTE</channel>
<channel lang="fr" xmltv_id="RMCSport1.fr" site_id="732">RMC SPORT 1</channel>
<channel lang="fr" xmltv_id="RMCSport2.fr" site_id="733">RMC SPORT 2</channel>
<channel lang="fr" xmltv_id="RMCSport3.fr" site_id="734">RMC SPORT 3</channel>
<channel lang="fr" xmltv_id="RMCSport4.fr" site_id="735">RMC SPORT 4</channel>
<channel lang="fr" xmltv_id="RMCSportLive5.fr" site_id="756">RMC SPORT LIVE 5</channel>
<channel lang="fr" xmltv_id="RMCSportLive6.fr" site_id="757">RMC SPORT LIVE 6</channel>
<channel lang="fr" xmltv_id="RMCSportLive7.fr" site_id="758">RMC SPORT LIVE 7</channel>
<channel lang="fr" xmltv_id="RMCSportLive8.fr" site_id="759">RMC SPORT LIVE 8</channel>
<channel lang="fr" xmltv_id="RMCSportLive9.fr" site_id="760">RMC SPORT LIVE 9</channel>
<channel lang="fr" xmltv_id="RMCSportLive10.fr" site_id="761">RMC SPORT LIVE 10</channel>
<channel lang="fr" xmltv_id="RMCSportLive11.fr" site_id="762">RMC SPORT LIVE 11</channel>
<channel lang="fr" xmltv_id="RMCSportLive12.fr" site_id="763">RMC SPORT LIVE 12</channel>
<channel lang="fr" xmltv_id="RMCSportLive13.fr" site_id="764">RMC SPORT LIVE 13</channel>
<channel lang="fr" xmltv_id="RMCSportLive14.fr" site_id="765">RMC SPORT LIVE 14</channel>
<channel lang="fr" xmltv_id="RMCStory.fr" site_id="571">RMC STORY</channel>
<channel lang="fr" xmltv_id="RougeTV.ch" site_id="878">ROUGE TV</channel>
<channel lang="fr" xmltv_id="RTFrance.fr" site_id="479">RT FRANCE</channel>
<channel lang="fr" xmltv_id="RTL9.lu" site_id="505">RTL9</channel>
<channel lang="fr" xmltv_id="ScienceVieTV.fr" site_id="614">SCIENCE ET VIE TV</channel>
<channel lang="fr" xmltv_id="Seasons.fr" site_id="577">SEASONS</channel>
<channel lang="fr" xmltv_id="SerieClub.fr" site_id="356">SERIE CLUB</channel>
<channel lang="fr" xmltv_id="SRF1.ch" site_id="778">SRF 1</channel>
<channel lang="fr" xmltv_id="StingrayClassica.ca" site_id="165">CLASSICA</channel>
<channel lang="fr" xmltv_id="StingrayDJAZZ.ca" site_id="407">DJAZZ</channel>
<channel lang="fr" xmltv_id="TCMCinema.fr" site_id="374">TCM CINEMA</channel>
<channel lang="fr" xmltv_id="TeleBielingue.ch" site_id="775">TELEBIELINGUE</channel>
<channel lang="fr" xmltv_id="TeletoonPlus.fr" site_id="581">TELETOON+</channel>
<channel lang="fr" xmltv_id="TeletoonPlus1.fr" site_id="582">TELETOON+1</channel>
<channel lang="fr" xmltv_id="Teva.fr" site_id="292">TEVA</channel>
<channel lang="fr" xmltv_id="TF1.fr" site_id="312">TF1</channel>
<channel lang="fr" xmltv_id="TF1SeriesFilms.fr" site_id="526">TF1 SERIES FILMS</channel>
<channel lang="fr" xmltv_id="TFX.fr" site_id="570">TFX</channel>
<channel lang="fr" xmltv_id="TiJi.fr" site_id="583">TIJI</channel>
<channel lang="fr" xmltv_id="TMC.fr" site_id="584">TMC</channel>
<channel lang="fr" xmltv_id="ToonamiFrance.fr" site_id="683">TOONAMI</channel>
<channel lang="fr" xmltv_id="ToutelHistoire.fr" site_id="620">TOUTE L&apos;HISTOIRE</channel>
<channel lang="fr" xmltv_id="TraceUrban.fr" site_id="585">TRACE URBAN</channel>
<channel lang="fr" xmltv_id="TV5MondeFranceBelgiumSwitzerland.fr" site_id="520">TV5 MONDE</channel>
<channel lang="fr" xmltv_id="TVBreizh.fr" site_id="586">TV BREIZH</channel>
<channel lang="fr" xmltv_id="UshuaiaTV.fr" site_id="142">USHUAIA TV</channel>
<channel lang="fr" xmltv_id="VICETV.us" site_id="677">VICE TV</channel>
<channel lang="fr" xmltv_id="VixenTV.ca" site_id="547">VIXEN</channel>
<channel lang="fr" xmltv_id="W9.fr" site_id="296">W9</channel>
<channel lang="fr" xmltv_id="WarnerTVFrance.fr" site_id="694">WARNER TV</channel>
<channel lang="fr" xmltv_id="XXL.fr" site_id="616">XXL</channel>
</channels>
</site>

View File

@@ -0,0 +1,128 @@
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 }) {
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}`
},
async parser({ content }) {
let programs = []
const items = parseItems(content)
for (let item of items) {
const prev = programs[programs.length - 1]
const details = await loadProgramDetails(item)
const info = parseInfo(details)
const start = parseStart(item)
if (prev) prev.stop = start
const stop = start.add(1, 'h')
programs.push({
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 :"),
date: paseDate(info),
rating: parseRating(info),
start,
stop
})
}
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)
return data.channels.map(item => {
return {
lang: 'fr',
site_id: item.id,
name: item.name
}
})
}
}
function parseStart(item) {
return item && item.startTime ? dayjs(item.startTime) : null
}
function parseIcon(info) {
return info ? info.URLImage : null
}
function parseDescription(info) {
return info ? info.summary : null
}
function parseInfo(data) {
if (!data || !data.detail || !data.detail.informations) return null
return data.detail.informations
}
async function loadProgramDetails(item) {
if (!item.onClick || !item.onClick.URLPage) return {}
return await axios
.get(item.onClick.URLPage)
.then(r => r.data)
.catch(console.error)
}
function parseItems(content) {
const data = JSON.parse(content)
if (!data || !Array.isArray(data.timeSlices)) return []
return data.timeSlices.reduce((acc, curr) => {
acc = acc.concat(curr.contents)
return acc
}, [])
}
function parseCast(info, type) {
let people = []
if (info && info.personnalities) {
const personnalities = info.personnalities.find(i => i.prefix == type)
if (!personnalities) return people
for(let person of personnalities.personnalitiesList) {
people.push(person.title)
}
}
return people
}
function paseDate(info) {
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
}
}

View File

@@ -0,0 +1,116 @@
// 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
const { parser, url } = require('./canalplus.com.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')
dayjs.extend(customParseFormat)
dayjs.extend(utc)
jest.mock('axios')
const channel = {
site_id: '198',
xmltv_id: 'CanalPlusCinemaFrance.fr'
}
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'
)
})
it('can generate valid url for tomorrow', () => {
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'
)
})
it('can parse response', done => {
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'
) {
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'
) {
return Promise.resolve({
data: JSON.parse(fs.readFileSync(path.resolve(__dirname, '__data__/program2.json')))
})
} else {
return Promise.resolve({ data: '' })
}
})
parser({ content })
.then(result => {
result.map(p => {
p.start = p.start.toJSON()
p.stop = p.stop.toJSON()
return p
})
expect(result).toMatchObject([
{
start: '2023-01-12T06:28:00.000Z',
stop: '2023-01-12T12:06:00.000Z',
title: 'Le cercle',
description: `Tant qu'il y aura du cinéma, LE CERCLE sera là. C'est la seule émission télévisée de débats critiques 100% consacrée au cinéma et elle rentre dans sa 18e saison. Chaque semaine, elle offre des joutes enflammées, joyeuses et sans condescendance, sur les films à l'affiche ; et invite avec \"Le questionnaire du CERCLE\" les réalisatrices et réalisateurs à venir partager leur passion cinéphile.`,
icon: 'https://thumb.canalplus.pro/http/unsafe/{resolutionXY}/filters:quality({imageQualityPercentage})/img-hapi.canalplus.pro:80/ServiceImage/ImageID/107297573',
presenter: ['Lily Bloom'],
rating: {
system: 'CSA',
value: '-10'
}
},
{
start: '2023-01-12T12:06:00.000Z',
stop: '2023-01-12T13:06:00.000Z',
title: 'Illusions perdues',
description: `Pendant la Restauration, Lucien de Rubempré, jeune provincial d'Angoulême, se rêve poète. Il débarque à Paris en quête de gloire. Il a le soutien de Louise de Bargeton, une aristocrate qui croit en son talent. Pour gagner sa vie, Lucien trouve un emploi dans le journal dirigé par le peu scrupuleux Etienne Lousteau...`,
icon: 'https://thumb.canalplus.pro/http/unsafe/{resolutionXY}/filters:quality({imageQualityPercentage})/img-hapi.canalplus.pro:80/ServiceImage/ImageID/107356485',
director: ['Xavier Giannoli'],
actors: [
'Benjamin Voisin',
'Cécile de France',
'Vincent Lacoste',
'Xavier Dolan',
'Gérard Depardieu',
'Salomé Dewaels',
'Jeanne Balibar',
'Louis-Do de Lencquesaing',
'Alexis Barbosa',
'Jean-François Stévenin',
'André Marcon',
'Marie Cornillon'
],
writer: ['Xavier Giannoli'],
rating: {
system: 'CSA',
value: '-10'
}
}
])
done()
})
.catch(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([])
})