Vous êtes sur la page 1sur 5

1.

Installer le module "pytube" de python

Lancez votre navigateur et copiez le lien "https://github.com/pytube/pytube" dans


la barre de recherche.
Pacourez la page vers le bas et allez à la section installation pour les
instructions d'installation.

Si vous utilisez Windows, veillez utiliser "pip" pour installer. Sinon, utiliez
"pip3" sur linux ou MacOS.

ATTENTION: Dans la description, il y a deux commandes pour l'installation.


Choisissez la deuxième pour avoir
la dernière version de pytube.

python -m pip install git+https://github.com/pytube/pytube

2. Création du projet

Lancez visual studio code et créer le dossier qui doit contenir votre projet.
Donnez-lui le nom de votre choix.
Dans le dossier, créer le fichier "YoutubeDownloader.py" et ouvrez-le dans
l'éditeur de code.

3. Importation du module pytube.

Commencez par importer le module pytube avec l'instruction:

from pytube import YouTube.

Attention: Veuillez respectez la case. Y et T son en majuscule.

Ensuite, exécutez le code et vérifiez que tout fonctionne normalement. Si vous avez
une erreur d'exécution,
vérifiez que vous avez bien écrit le module à importer. Sinon, si vous avez plus
d'une version de python sur
votre ordinateur, vérifiez bien avec laquelle des versions vous travaillez et sur
quelle version vous avez installer pytube.
Il faut installer pytube sur la version de python utilisez dans le projet.

4. Développons.

a)Allez sur YouTube et cherchez une vidéo à télécharger.

ATTENTION: A ce stade, ne prenez pas une longue vidéo, cela risque de prendre
beaucoup de temps. Prenez une vidéo courte.
Je vous propose un exemple ici : https://www.youtube.com/watch?v=Hi7Rx3En7-k

Copiez le lien de la vidéo et créer une variable au nom de votre choix dans votre
projet et donnez-lui comme valeur
le lien que vous avez copié.

url = "https://www.youtube.com/watch?v=Hi7Rx3En7-k"

b) Créer l'objet YouTube.

Créez une nouvelle variable et passez-lui l'url pour créer l'objet.

youtube_video = YouTube(url) # Attention, respectez la case en appelant le module


"YouTube".

c) Testez si vous avez l'accez à la vidéo.


Le but du projet est de télécharger le contenu mais à partir de ce niveau on peut
tester si l'on a déjà accès à la vidéo.
Une vidéo a un titre, le nombre de vues, la date de publication, etc.

print("TITRE : " + youtube_video.title)


print("DESCRIPTION : " + youtube_video.description)
print("DUREE : " + str(youtube_video.length) + " secondes")
print("AUTEUR : " + youtube_video.author)
print("VUES : " + str(youtube_video.views))
print("NOTE : " + str(youtube_video.rating))
print("TAGS : " + str(youtube_video.keywords))
print("DATE DE PUBLICATION : " + youtube_video.publish_date.strftime("%d/%m/%Y"))
print("URL : " + url)
print("FORMATS DISPONIBLES : " +
str(youtube_video.streams.filter(progressive=True).all()))

Exécutez le fichier puis allez sur YouTube pour comparer les résultats.

d) Téléchargement d'un stream

Pour connaitre les streams disponible, vous pouvez vérifier avec l'instruction
suivante:

#on peut vérifier le nombre de streams disponibles avec la fonction


print(youtube_video.streams)
print(youtube_video.streams)
print("FORMATS DISPONIBLES : " +
str(youtube_video.streams.filter(progressive=True).all()))

#Ou par un boucle for

for stream in youtube_video.streams:


print(stream)

# On peux les filtrer directement aussi si on veut connaître seulement les streams
progressifs.

print("FORMATS DISPONIBLES : " +


str(youtube_video.streams.filter(progressive=True).all()))

Les streams pour lesquels progressive=True sont des streams contenant à la fois
l'audio et la vidéo.

Chaque stream contien un ensemble d'informations qui doivent servir pour


télécharger le stream correspondant à nos besoins.
Avant de choisir un stream, parcour la liste et identifier celui qui répond à nos
besoins (en termes de qualité audio et vidéo).
L'élément le plus important dans cet exercice est le "itag" qui représente
l'identifiant de chaque stream. C'est grace à cette
identifiant qu'il ne sera possible de sélectionner un stream.
Pour en savoir plus sur les streams, consulter la documentation de pytube:
https://pytube.io/en/latest/

Pour télécharger le stream, on selection d'abord le stream à télécharger. Et on


appelle la fonction download() sur le stream selectionné.
downloaded_stream = youtube_video.streams.get_by_itag(17) # On choisit le stream
dont l'itag est 17
print("Téléchargement de la vidéo en cours...") # Juste pour montrer que
le programme est en train de travailler
downloaded_stream.download()
print("Téléchagement terminé")

Le stream téléchargé va directement dans le réportoire à partir duquel vous avez


lancez le script. Il est bon que vous poussiez vous positionner dans le répertoire
de votre project pour que les treams téléchargés ne soit pas stockés en dehors de
votre projet.

ATTENTION: Durant le test, le script ne peux pas télécharger la même vidéo deux
fois dans un même répertoire. Pour ce faire, supprimer chaque fois la vidéo
téléchargée précédemment et reexécuter le script pour télécharger de nouveau.
Sinon, le script ignore le téléchargement.

e) Choisir le stream à télécharger automatique.

C'est laborieux de pouvoir choisir manuellement le stream à télécharger. Il est


possible de demander au script de choisir automatique le stream avec la meilleure
résolution par exemple.

Modifiez le code suivant.

downloaded_stream = youtube_video.streams.get_highest_resolution()
print("Téléchargement de la vidéo en cours...") # Juste pour montrer que le
programme est en train de travailler
downloaded_stream.download()

Attention: Commencez par supprimer la vidéo téléchargée précédemment avant


d'exécuter le programme.

En affichant la vidéo téléchargée, vous remarquerez qu'il s'agit d'une résolution


de 720p. Pourquoi 720p alors que, en affichant tous les streams, on remarque que la
résolution maximale est de 1080p?
La réponse est que la méthode utilisé va prendre la résolution maximale uniquement
parmi les streams progressifs, c'est-à-dire ceux dont le champ "progressive=True".

Vous pouvez vérifiéz quel stream a été télécharger en utilisant

print(downloaded_stream).

f)Affichez la progression du téléchargement

Pour avoir toutes les informations sur la progression du téléchargement, retournez


dans la documentation pytube.io et cliquez sur la section API. Coisissez YouTube
Object et scroller pour chercher la fonction register_on_progress_callback(). Lisez
bien la documentation pour savoir comment cette fonction fonctionne. Cette fonction
elle-même prend en paramètre un autre fonction que nous allons devoir créer dans
notre code.

On va devoir modifier notre code en créant la fonction suivante:


Créer la fonction juste après l'initialisation de l'url. Nous allons lui donner
trois paramètres qui devront recueillir les résultats retournés par la
register_on_progress_callback() qui sont stream, chunk, bytes_remaining.
Le paramètre stream recupère le stream en téléchargement, chunk récupère le morceau
de donné que le script a téléchargé (de manière progressive) et bytes_remaining
recupères le nombre d'octets restant à télécharger. C'est ce dernier paramètre qui
va nous intéresser dans ce tuto.

def on_download_progress(stram, chunk, bytes_remaining):


print("Progression du téléchargement :", bytes_remain)

Ensuite, appelez appelez la fonction register_on_progress_callback() sur l'object


YouTube créé au départ.

youtube_video.register_on_progress_callback(on_download_progress)

Attention: Cette fonction doit toujours être appelez avant de commencer le


téléchargement. C'est-à-dire avant d'appeler la fonction downlaod().

Exécuté votre code pour voir le résultat. N'oubliez pas de supprimer le fichiez
téléchargé précédemment avant d'exécuter le code.

g) Exercice: Améliorez le code pour affichez la progression en pourcentages.


Astuces: si on est en mesure de connaître le nombre de bytes restant à télécharger,
il est donc possible de connaitre la totalité des bytes dès le départ pour calculer
le pourcentage durant la progression de téléchargement.
Pour connaître le nombre total de bytes, utilisez stream.filesize déjà au niveau de
la fonction créée.
La progression en pourcentage doit aller de 0 à 100% et non l'inverse. Donc, il
faut connaître ce qui a déjà été téléchargé et le sctocker dans une variable.

Faites cet exercice

h) Exercice: Demandez l'Url à l'utilisateur


Modifier le code pour qu'il demande à l'utilisateur de fournir un lien YouTube au
lieu de le tapper dans le code.
Faites en sorte que le programme détecte si le lien provien de YouTube ou non avant
de commencer le téléchargement.
S'il le lien ne vient pas de YouTube, le prgramme doit demander à l'utilisateur de
fournir un lien YouTube.
Utilisez l'instruction conditionnelle avec les slices ou autre manière que vous
maîtrisez miex.

Faites l'exercie

i) A domicile: amélioration du script


On peut améliorer le code et lui ajouter plus de fonctionnalités. On peut
l'améliorer pour que l'utilisateur choisisse quel stream télécharger et/ou la
résolution, pour donner à l'utilisateur de télécharger le meilleur stream audio et
vidéo séparement et les combiner pour produire le meilleur téléchargement possible,
pour télécharger plusieurs vidéos, et même ajouter une interface graphique.

Astuce :On peut filtrer les streams par résolution, type de fichier, etc.

Par exemple:

streams = youtube_video.streams.filter(progressive=True,
file_extension="mp4").order_by("resolution").desc().all()
On peut aussi récupérer les fichiers audios et faire une liste de des streams vidéo
et audio parmi lesquels l'utilisateur pourra choisir pour le téléchargement selon
la conveance.

Vous aimerez peut-être aussi