Explication de script python

Résolu
kiff665 Messages postés 2 Date d'inscription vendredi 20 mars 2020 Statut Membre Dernière intervention 7 septembre 2023 - Modifié le 12 sept. 2023 à 15:14
mamiemando Messages postés 33081 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 27 avril 2024 - 12 sept. 2023 à 15:34

Bonjour,

J'aimerais une explication détaillée sur le bout de script ci-dessous. Mon but est de comprendre les méthodes se rattachant à tel module, et ce que signifient les ordres du script. Mon but est d'apprendre et savoir refaire quelque chose comme cela.

from pytube import YouTube
from PIL import Image, ImageTk
import base64
import io

def choose_download_path():
    download_path = filedialog.askdirectory()
    download_path_entry.delete(0, tk.END)
    download_path_entry.insert(0, download_path)

def download_video():
    try:
        url = url_entry.get()
        yt = YouTube(url)
        download_path = download_path_entry.get()
        if mp4_var.get():
            video = yt.streams.get_highest_resolution()
            video.download(download_path)
            messagebox.showinfo("Téléchargement terminé", f"La vidéo '{yt.title}' a été téléchargée au format MP4 dans {download_path}")
        if mp3_var.get():
            audio = yt.streams.filter(only_audio=True).first()
            audio.download(download_path)
            messagebox.showinfo("Téléchargement terminé", f"L'audio de la vidéo '{yt.title}' a été téléchargé au format MP3 dans {download_path}")
    except Exception as e:
        messagebox.showerror("Erreur", f"Une erreur est survenue : {str(e)}")

image_data = base64.b64decode(base64_image)
image_pil = Image.open(io.BytesIO(image_data))

# Interface graphique

root = tk.Tk()
root.title("Moi j'dis allonzikoi !")
root.configure(bg="black")  

url_label = tk.Label(root, text="URL de la vidéo YouTube:", bg="black", fg="white")
url_label.pack()
url_entry = tk.Entry(root, width=50)
url_entry.pack()

download_path_label = tk.Label(root, text="Emplacement de téléchargement:", bg="black", fg="white")
download_path_label.pack()
download_path_entry = tk.Entry(root, width=40)
download_path_entry.pack()

choose_path_button = tk.Button(root, text="Choisir emplacement", command=choose_download_path)
choose_path_button.pack()

mp4_var = IntVar()
mp4_checkbutton = tk.Checkbutton(root, text="Télécharger en MP4", variable=mp4_var, bg="black", fg="white", selectcolor="black", activebackground="black")
mp4_checkbutton.pack()

mp3_var = IntVar()
mp3_checkbutton = tk.Checkbutton(root, text="Télécharger en MP3", variable=mp3_var, bg="black", fg="white", selectcolor="black", activebackground="black")
mp3_checkbutton.pack()

download_button = tk.Button(root, text="Télécharger", command=download_video)
download_button.pack()

image_tk = ImageTk.PhotoImage(image_pil)
image_label = tk.Label(root, image=image_tk, bg="black")
image_label.pack()

root.mainloop()

En vous remerciant d'avance,
Cordialement

A voir également:

4 réponses

yg_be Messages postés 22731 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 27 avril 2024 1 477
7 sept. 2023 à 20:31

bonjour,

si tu veux apprendre, je pense que le mieux c'est de faire d'abord, toi même, des exercices beaucoup plus simples.

0
Phil_1857 Messages postés 1883 Date d'inscription lundi 23 mars 2020 Statut Membre Dernière intervention 28 février 2024 178
8 sept. 2023 à 16:51

En gros, c'est pour télécharger les vidéos de Youtube ....

0
mariam-j Messages postés 1033 Date d'inscription mercredi 9 mars 2022 Statut Membre Dernière intervention 26 avril 2024
8 sept. 2023 à 17:13

Bonjour,

60 lignes, c'est plus qu'un bout.

C'est une tranche.

0
mamiemando Messages postés 33081 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 27 avril 2024 7 749
Modifié le 12 sept. 2023 à 15:35

Bonjour,

Ton script sert comme dit précédemment à télécharger une vidéo Youtube au format mp4 (vidéo) ou mp3 (son).

Il met en jeu les modules suivants. Pour chacun d'entre eux, je mets le lien vers le projet et/ou la documentation correspondante si tu veux plus de détails :

  • pytube : un module qui permet de s'interfacer avec youtube (ici pour télécharger des vidéos)
  • PIL: ce module pour traiter des images. Mais ici, il n'est pas utilisé pour ça, il sert juste à importer des bouts de tkinter... Je ne sais pas qui a écrit une horreur pareil (ne me dis pas que c'est ChatGPT !) mais en tout cas il vaudrait mieux importer tkinter à la place.
  • tkinter : un module qui permet de faire une application fenêtrée en Tk
  • base64 : un module pour lire/écrire une image en base64 ( =chaîne de caractères qu'on peut inclure dans une balise <img> en HTML)

Passons au code :

  • La fonction choose_download_path sert (comme sont nom l'indique) à définir un chemin (dans lequel sera sauvé la vidéo). Les méthodes mises en jeu sont celles de Tk. Le code semble invalide ou incomplet car filedialog n'est pas défini.
  • La fonction dowload_video sert à télécharger la vidéo. Selon qu'il s'agisse en réalité d'une musique (mp3) ou d'une vidéo (mp4), le comportement est légèrement adapté.
  • Les lignes 26 et 27 n'ont aucun sens prises seules. En gros ça lit une chaîne en base64 (qui n'est définie nulle part) et la convertit sous forme d'image. Pourquoi, mystère...
  • Les lignes suivantes sont du pur Tk, dans laquelle est implémentée toute l'interface graphique. On y définit
    • la fenêtre (root) ;
    • un texte (url_label) ;
    • un champ de saisie correspondant (url_entry) dans lequel on peut saisir l'adresse youtube ;
    • un bouton (download_button) qui permet d'ouvrir une fenêtre depuis on va pouvoir spécifier où sauver la vidéo
    • deux cases à cocher, indiquant si on veut télécharger en mp3 ou mp4
    • une image (je suspecte que si le code était complet ce serait l'aperçu de la vidéo ?)
  • Une fois tous ses éléments spécifiés, on peut lancer l'interface graphique (root.mainloop()).

Bonne chance

0