{MyCanal} – Télécharger les vidéos de la plateforme MyCanal.fr

 

Hello les amis,

 

Petit challenge que l'on m'a lancé récemment, est-il possible de télécharger les vidéos sur MyCanal.fr ...
On parle de plus en plus souvent de DRM, et les plateformes mènent la vie dur à toutes les petites extensions qui permettent de télécharger les vidéos en ligne !
Alors comme tout bon challenger je me suis penché sur ce projet !!!

Est-il oui ou non possible de télécharger une vidéo sur MyCanal  ?

Bien entendu, je n'aurais pas écrit cet article pour vous dire qu'il ne serait pas possible de le faire.
Cela étant dit, je tiens à dire à toute personne qui m'écrirait dans 3 ans que "ça ne marche pas / plus" ... c'est "normal" ...

Un "Hack" n'est pas fait pour durer dans le temps, il s'agit là d'une astuce temporaire, qui n'est pas vouée à être persistente.
Canal+ (myCanal aura certainement mis à jour sa plateforme d'ici quelques temps)

Alors la question c'est comment faire pour y parvenir ?

 

Reverse Engeenering - Step 1 :

La première étape consiste bien entendu à analyser un peu avec la console (touche F12 de votre clavier)
J'ai donc cherché dans le code source l’élément "video" avec le code suivant :

document.getElementsByTagName('video')

Et j'ai pu constater que ... la source de la vidéo (url) était ... un blob
Lorsque l'on sait ça ... il faut s'attendre à ce qu'il y ait quelques contre-mesures pour empêcher de copier la vidéo !

Je prends donc quelques instants pour regarder dans l'onglet "network" (réseau) pour analyser les données envoyées et reçues par la plateforme !
Je recherche bien évidemment un petit .mp4 ou .m3u8 ...
Bingo !

J'obtiens toutes les URL possibles pour la qualité de la vidéos ... dont celles qui ne sont pas "sécurisés"

La requête qui permet de récupérer ces informations est la suivante :

https://secure-service.canal-plus.com/video/rest/<type>/cplus/<id>?format=json

Pour l'instant mes recherches m'ont permis de découvrir qu'il existait 2 types (il en a peut être d'autres) :

  • getVideosLiees
  • getRelancesVideo

Concernant l'id ... il s'agit bien entendu de l'id de la vidéo que vous pourrez facilement retrouver dans l'url :
Ainsi, via cette requête, vous aurez accès à la liste des différents liens de téléchargement de la vidéos.
Cette liste contient notamment les fichiers mp4 ...

Bien entendu, j'ai pu vérifier que cela fonctionnait !

Il est possible que vous ayez parfois un "Access Denied".
Si c'est le cas, essayez juste une autre qualité.

Dans le cas où vous n'auriez  que le .m3u8 de disponible, faites attention ... il ne s'agit pas là d'un simple fichier vidéo ... vous ne pourrez pas l'emmener partout où vous voulez, ni le consulter hors ligne ...
Ce fichier, si vous l'ouvrez avec un bloc note, contient simplement des informations relatives aux différentes parties de la vidéo ...
Un lecteur tel que VLC est parfaitement capable de l'utiliser pour lire une vidéo.

D'ailleurs, si vous utilisez VLC, allez dans le menu "Ouvrir un flux réseau" ...
Récupérez ensuite l'url du .m3u8 et copiez là dans le champ prévu à cet effet :

 

 

Sur le bouton "lire" vous avez une petite flèche ... choisissez "Convertir"
Et voilà, plus qu'à indiquer l'endroit où vous souhaitez sauvegarder votre petit mp4 et c'est parti !

 

Le Code

Pour mes lecteurs préférés, j'ai pris le temps de faire un script, qui vous fournira directement la liste des liens  de téléchargement disponibles pour une vidéos de myCanal.
Il suffit simplement de le copier dans la console de votre navigateur lorsque vous serez sur la page de la vidéo que vous souhaitez télécharger ;)

var a = document.createElement('a'), types = ['getRelancesVideo', 'getVideosLiees'];
for (var i in types){
    var myCanal = new XMLHttpRequest();
    myCanal.open('POST', "https://secure-service.canal-plus.com/video/rest/"+types[i]+"/cplus/"+(/\/([0-9]{5,8})/.exec(document.location.toString())[1])+"?format=json");
    myCanal.addEventListener('load', function(e){
        urls = JSON.parse(e.target.response)
        if (urls['MEDIA']){
			 console.log("Plus d'info : ", e.target.responseURL);
			console.dir(urls['MEDIA']['VIDEOS']);
        }
    });
    myCanal.send();
}

 

 

Conclusion

Merci à tous pour vos encouragements, que ça soit par mail ou par commentaire !
J'espère pouvoir continuer à vous écrire sur de bons sujets ;)
Je ne peux malheureusement pas aider tout le monde sur tous les sujets, et je vous invite à exprimer vos demandes directement par commentaire, ce qui peut permettre à d'autres personnes de vous aider ^^
En attendant je tiens à vous dire que la plupart de mes articles sont tirés de mon quotidien, mais de plus en plus de sujets viennent de vos demandes ;)
Ce qui explique aussi pourquoi je ne peux pas aider tout le monde ^^
En tout cas je vous souhaite à tous un excellent Weekend !

Partagez ce contenu

5 comments

  • C’est toujours un plaisir de lire tes articles. Merci ! ;)

  • Hey, super pour ton boulot !

     

    Obtenais-tu une erreur de ce genre là :

    « Blocage d’une requête multiorigines (Cross-Origin Request) : la politique « Same Origin » ne permet pas de consulter la ressource distante située sur https://hss-od.snl-lv3.canalplus-cdn.net/replay/cplus/ssd/cpl100019259-ant-1195636-1/ANT-1195636-1.ism/QualityLevels(749952)/Fragments(Video=120000000). Raison : échec de la requête CORS. »

     

    Si non c’est qu’ils sont très réactif..

    • Hello Fraht

      Merci pour tes encouragements ;)

      Pour t’aider, il faudrait que tu me copies ici l’entête de la requête que tu fais via la console développeur:
      Touche F12 du clavier, onglet « network », tu vas sur la requête qui merde (en rouge), et tu me copie l’entête (header)
      Si tu ne vois pas la requête, laisses la console ouverte et fais un F5

  • Les liens ne sont plus affichés

    en cherchant on trouve un fichier ism qui est en réalité un xml, il nous indique les liens de : ismv (video) isma (audio) ismc (manifest) , ce sont des fichiers uniques pas découpés.

    dans le navigateur le lecteur intégré arrive a lire la video mais on voit pas l’image c’est tout noir, apres dans vlc ca ne lit pas et en l’ouvrant dans mediainfo ca nout dit conteneur MPEG4 (ISML) flux AVC

    apres en l’ouvrant en hexadecimal on voit au debut du fichier un header de drm c marqué wrm header

    sinon dans network dans le navigateur ya un fichier javascript qui nous dit drmType : PlayReady Download // drmType : DRM Common Encryption Download // drmType : DRM Widevine

    voila widevine apparemment c’est google netflix etc jpense que le flux doit etre chiffré enfin jen sait rien comment ca marche en meme temps si le navigateur arrive a le lire soit il a le contenu déchiffré soit il a la clé pour dechiffrer….

    en telechargeant l’application mycanal et en telechargeant la video dans le dossier il y a pleins de fichiers .video et .video.metadata mediainfo reconnait aucun format mais en hexa on voit plusieurs « mdat », donc c bien un fichier video.

    https://ibb.co/bSfXiL

    https://ibb.co/f80jV0

    • hello Mat’,

      Merci pour toutes ces infos ^^
      Et surtout pour avoir passé pas mal de temps à investiguer.
      De mon côté je constate que cela fonctionne toujours avec le script qui utilise l’id dans l’url, que je vous ai fournie ( peut-être pas sur tous les contenus ? ).
      Si ça t’intéresse j’ai également écrit un autre article (publié ce weekend) sur la partie « abonné ».

      Bon après-midi.

      Dyrk

Laisser une réponse

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *