J'explique comment je télécharge à partir des sites de streaming

J'essaierai de le faire par ordre de difficulté, du plus facile au plus difficile. Commençons donc par la façon la plus facile :

Cas d'un player HTML5

Avec l'arrivée de HTML5 et de la balise <video>, il est désormais possible de directement incorporer des médias sur son site web sans avoir à passer par cet usine à gaz qu'est Flash. Ce nouveau tag permet, à moins que le développeur ne prenne les mesures nécessaires, d'obtenir le lien direct de la vidéo par un simple clic avec le bouton droit.

Plonger dans le code source de la page

Si vous êtes chanceux, il est possible que le lien de téléchargement de la vidéo soit déjà déclaré quelque part dans le code de la page, que ce soit en HTML ou en Javascript. De façon générale, il suffit de faire un contrôle + F et de chercher des extensions qui sont propres aux fichiers vidéo : .mp4, .flv, .webm, .avi, .mkv, etc. D'après mon expérience, ce sont généralement les deux premières qui sont utilisées le plus.

Si cette recherche n'aboutit à rien, peut-être que le code responsable de lancer la vidéo est à l'intérieur d'un iframe. Essayez donc d'effectuer la démarche décrite ci-dessus dans la page pointée par l'attribut "src" de l'iframe en question.

Sinon, peut-être que le lien existe bien dans le code mais qu'il ne se termine pas forcément avec une extension courante. C'est notamment le cas quand c'est un script PHP (ou autre) qui se charge de servir la vidéo.

Démonstration sur un site de cartons chinois.

Si rien de cela n'aboutit, il est temps de passer au lourd :

youtube-dl

Cette petite merveille supporte un grand nombre de sites contrairement à ce que son nom laisse croire (dont certains connaissent un grand afflux de la part des marocains (remarquez comment les chutes d'intérêt coincident avec le mois de Ramadan (une parenthèse de plus et on se croirait à l'intérieur d'un programme Lisp))). C'est un programme en ligne de commande qui est écrit en Python et qui offre tout un tas d'options permettant d'avoir un grand degré de contrôle sur le téléchargement.

Voici quelques options que j'utilise fréquemment :

  • -r : Limite la vitesse du téléchargement
  • -f : définit le format de la vidéo : flv, mp4, etc. (pour youtube uniquement)
  • -F : liste tous les formats disponibles pour une certaine vidéo
  • --batch-file : afin d'indiquer un fichier qui contient une liste de vidéos à télécharger
  • -c : reprend le téléchargement d'un fichier préalablement arrêté

Si vous êtes sous Windows, il y a une version dite "self-contained", c'est à dire qu'elle ne nécessite pas que l'interprétateur Python soit installé sur votre machine. En gros, c'est un fichier .exe qu'on peut exécuter de façon directe. Il est téléchargeable de la rubrique "Download" du site officiel du projet. Si par contre vous utilisez une distribution Linux, il se peut qu'il soit déjà disponible dans le dépôt, sinon vous pourrez toujours télécharger Python et youtube-dl séparément.

Il y a aussi un programme similaire sous le nom de JDownloader. Celui-ci offre une interface graphique ainsi que davantage de fonctionnalités, malheureusement, je ne peux pas donner mon avis dessus vu que je ne l'ai jamais utilisé. J'ai tendance à éviter les programmes écrits en Java car mon ordinateur a du mal à les faire tourner. Dès que je clique sur un bouton, voilà comment ça réagit : http://i.imgur.com/jfySxRc.gif

Utiliser les outils de développeur du navigateur

J'avais déjà expliqué cette méthode sur Hackforums, mais vu qu'ils bloquent les requêtes issues de notre beau pays (update du 18/02/2016 : ce n'est plus le cas), et à moins de passer par un proxy, voilà une version trouvée dans le cache de Gougueule. Pour les non anglophones d'entre vous, voici une brève traduction :

Vous aurez besoin d'un navigateur pouvant examiner les requêtes HTTP et d'un peu de sens commun (ne vous inquiétez pas, j'en manque terriblement moi aussi). Il est aussi recommandé d'utiliser un plugin qui bloque et débloque le contenu flash à volonté. Nous verrons pourquoi plus tard.

Prenons cette vidéo aléatoire à titre d'exemple. Ouvrez-là dans un nouvel onglet, et lancez la console web (dans le sous-menu "Outils du développeur" du menu "Outils", ou en utilisant le raccourci ctrl + shift + K). Tout un tas de données va se mettre à défiler dans la console web. Dès que la vidéo commence à se charger, arrêtez-là tout de suite : le lien direct est désormais présent dans la console, nul besoin d'aller plus loin. C'est ici que le plugin mentionné ci-haut jouera son rôle, mais si vous trouvez un autre moyen pour arrêter le chargement, utilisez-le. Toutefois cette étape n'est pas obligatoire, vous pouvez vous en passer si le chargement de la vidéo ne vous dérange pas.

Il est temps d'examiner les données "sniffées" par la console. Le lien y est peut être renseigné sous la forme d'une requête du genre GET http://www.siteweb.com/chemin/vers/la/video.mp4.

Remarquez la zone de recherche "Filtrer", elle est expliquée ci-dessous.

Cherchez tout ce qui pourrait indiquer qu'il s'agit d'une vidéo. Dans la capture d'écran, on voit qu'il y a un lien se terminant avec .swf, un autre avec .xml, ceux-là ne pointent certainement pas sur une vidéo. Pour les autres, on peut les vérifier individuellement en cliquant dessus. Une fenêtre qui contient des informations sur la requête HTTP s'ouvrira, nous nous y intéresserons à l'entête Content-Type, c'est elle qui indique le type de la ressource en question.

Nous pouvons aussi utiliser le filtre et y écrire par exemple "video" ou encore "flv", cela aura pour effet de masquer toutes les entrées ne contenant pas ces mot-clés.

Parmi les intérêts d'utiliser un plugin qui bloque le chargement de la vidéo : nous aurions par exemple pu attendre que la page se charge, effacer toutes les entrées jusque-là capturées par la console, puis débloquer la vidéo. Les URLs qui s'afficheront par la suite ne concerneront que celle-ci, et on peut facilement y trouver ce qu'on cherche.

Firefox > Outils > Informations de la page

C'est une technique à laquelle je viens de penser, tellement j'suis fort :D

Testée sur la version HTML5 de youtube, elle fonctionne bel et bien. Il suffit de se rendre au sous-menu "Informations de la page" (Page Info), puis d'accéder à l'onglet intitulé "Média" où l'on trouvera un tableau listant tous les médias de la page. Et qui dit média dit vidéo, classez donc les lignes du tableau en cliquant sur la colonne "Type" et cherchez les entrées du type "vidéo" :

Ecrire votre propre script/programme

Si vous vous y connaissez en web scraping, ça reste une option à envisager. L'avantage principal réside dans le fait que l'on peut automatiser les démarches décrites ci-dessus en écrivant un script qui les refait pour nous. Il existe différentes bibliothèques pour vous aider, dont on peut citer :

  • Requests et BeautifulSoup 4 pour Python
  • cURL et DOMDocument/DOMXpath pour PHP
  • Scrapy pour Python toujours
  • Goutte pour PHP (écrite par Fabien Potencier, ou fabpot, et non pas fapbot)

Celles-là sont celles que je connais dans les langages que j'utilise couramment (à moins que quelqu'un connaisse une qui soit écrite en D). Je n'ai cependant utilisé que les deux premières. On peut aussi se passer d'un parseur de HTML/XML et s'y mettre à coups d'expressions régulières, mais vous risquez d'invoquer Zalgo si vous ne faites pas attention à ce que vous écrivez.

Commentaires

Posts les plus consultés de ce blog

Writing a fast(er) youtube downloader

My experience with Win by Inwi

Porting a Golang and Rust CLI tool to D