Initial Commit
This commit is contained in:
1
sites/canalplus.com/__data__/content.json
Normal file
1
sites/canalplus.com/__data__/content.json
Normal 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}}]}
|
||||
1
sites/canalplus.com/__data__/no_content.json
Normal file
1
sites/canalplus.com/__data__/no_content.json
Normal 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"}]}
|
||||
2233
sites/canalplus.com/__data__/program1.json
Normal file
2233
sites/canalplus.com/__data__/program1.json
Normal file
File diff suppressed because it is too large
Load Diff
452
sites/canalplus.com/__data__/program2.json
Normal file
452
sites/canalplus.com/__data__/program2.json
Normal 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": "L’ascension 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
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
231
sites/canalplus.com/canalplus.com.channels.xml
Normal file
231
sites/canalplus.com/canalplus.com.channels.xml
Normal 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'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 & 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'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'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>
|
||||
128
sites/canalplus.com/canalplus.com.config.js
Normal file
128
sites/canalplus.com/canalplus.com.config.js
Normal 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
|
||||
}
|
||||
}
|
||||
116
sites/canalplus.com/canalplus.com.test.js
Normal file
116
sites/canalplus.com/canalplus.com.test.js
Normal 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([])
|
||||
})
|
||||
Reference in New Issue
Block a user