Requisito previo:
Python ofrece múltiples opciones para desarrollar GUI (interfaz gráfica de usuario). De todos los métodos GUI, Tkinter es el método más utilizado. Es una interfaz estándar de Python para el kit de herramientas Tk GUI que se envía con Python. Python con Tkinter es la forma más rápida y sencilla de crear aplicaciones GUI.
En este artículo, discutiremos cómo podemos crear una aplicación GUI para descargar un video de YouTube o una lista de reproducción completa de YouTube usando python.
Antes de comenzar, hablaremos sobre el módulo de pyyoutube . El módulo de pyyoutube proporciona una manera fácil de usar la API de datos de YouTube V3.
Instalación:
pip install python-youtube
pip install pytube
Descargar video seleccionado de la lista de reproducción de YouTube
En esta sección, aprenderemos cómo descargar solo videos seleccionados de la lista de reproducción de YouTube usando Tkinter en Python.
Acercarse:
- Primero, buscaremos todos los enlaces de video de la lista de reproducción de YouTube usando el módulo pyyoutube .
- Luego seleccionaremos el enlace del video, el cual queremos descargar.
- Luego, descargaremos cada video uno por uno usando el módulo pytube .
A continuación se muestra el aspecto de la GUI:
Entendamos la implementación paso a paso:
- Cree una ventana de Tkinter y agregue botones, etiquetas, barra de desplazamiento, etc.
Python3
# Import Required Modules from tkinter import * # Create Object root = Tk() # Set geometry root.geometry('400x400') # Add Label Label(root, text="Youtube Playlist Downloader", font="italic 15 bold").pack(pady=10) Label(root, text="Enter Playlist URL:-", font="italic 10").pack() # Add Entry box playlistId = Entry(root, width=60) playlistId.pack(pady=5) # Add Button get_videos = Button(root, text="Get Videos") get_videos.pack(pady=10) # Add Scorllbar scrollbar = Scrollbar(root) scrollbar.pack(side=RIGHT, fill=BOTH) list_box = Listbox(root, selectmode="multiple") list_box.pack(expand=YES, fill="both") list_box.config(yscrollcommand=scrollbar.set) scrollbar.config(command=list_box.yview) download_start = Button(root, text="Download Start", state=DISABLED) download_start.pack(pady=10) # Execute Tkinter root.mainloop()
- Ahora vamos a crear tres funciones:
- get_list_videos: – Dará una lista de todos los enlaces de video de una lista de reproducción de YouTube.
- enhebrado: – Se utiliza para enhebrar en Tkinter.
- download_videos: – Se utiliza para descargar videos de YouTube.
Python3
def get_list_videos(): global playlist_item_by_id # Clear ListBox list_box.delete(0, 'end') # Create API Object api = Api(api_key='Enter API Key') if "youtube" in playlistId.get(): playlist_id = playlistId.get()[len( "https://www.youtube.com/playlist?list="):] else: playlist_id = playlistId.get() # Get list of video links playlist_item_by_id = api.get_playlist_items( playlist_id=playlist_id, count=None, return_json=True) # Iterate through all video links and insert into listbox for index, videoid in enumerate(playlist_item_by_id['items']): list_box.insert( END, f" {str(index+1)}. {videoid['contentDetails']['videoId']}") download_start.config(state=NORMAL) def threading(): # Call download_videos function t1 = Thread(target=download_videos) t1.start() def download_videos(): download_start.config(state="disabled") get_videos.config(state="disabled") # Iterate through all selected videos for i in list_box.curselection(): videoid = playlist_item_by_id['items'][i]['contentDetails']['videoId'] link = f"https://www.youtube.com/watch?v={videoid}" yt_obj = YouTube(link) filters = yt_obj.streams.filter(progressive=True, file_extension='mp4') # download the highest quality video filters.get_highest_resolution().download() messagebox.showinfo("Success", "Video Successfully downloaded") download_start.config(state="normal") get_videos.config(state="normal")
A continuación se muestra la implementación completa:
Python3
# Import Required Modules from tkinter import * from pyyoutube import Api from pytube import YouTube from threading import Thread from tkinter import messagebox def get_list_videos(): global playlist_item_by_id # Clear ListBox list_box.delete(0, 'end') # Create API Object api = Api(api_key='Enter API Key') if "youtube" in playlistId.get(): playlist_id = playlistId.get()[len( "https://www.youtube.com/playlist?list="):] else: playlist_id = playlistId.get() # Get list of video links playlist_item_by_id = api.get_playlist_items( playlist_id=playlist_id, count=None, return_json=True) # Iterate through all video links and insert into listbox for index, videoid in enumerate(playlist_item_by_id['items']): list_box.insert( END, f" {str(index+1)}. {videoid['contentDetails']['videoId']}") download_start.config(state=NORMAL) def threading(): # Call download_videos function t1 = Thread(target=download_videos) t1.start() def download_videos(): download_start.config(state="disabled") get_videos.config(state="disabled") # Iterate through all selected videos for i in list_box.curselection(): videoid = playlist_item_by_id['items'][i]['contentDetails']['videoId'] link = f"https://www.youtube.com/watch?v={videoid}" yt_obj = YouTube(link) filters = yt_obj.streams.filter(progressive=True, file_extension='mp4') # download the highest quality video filters.get_highest_resolution().download() messagebox.showinfo("Success", "Video Successfully downloaded") download_start.config(state="normal") get_videos.config(state="normal") # Create Object root = Tk() # Set geometry root.geometry('400x400') # Add Label Label(root, text="Youtube Playlist Downloader", font="italic 15 bold").pack(pady=10) Label(root, text="Enter Playlist URL:-", font="italic 10").pack() # Add Entry box playlistId = Entry(root, width=60) playlistId.pack(pady=5) # Add Button get_videos = Button(root, text="Get Videos", command=get_list_videos) get_videos.pack(pady=10) # Add Scrollbar scrollbar = Scrollbar(root) scrollbar.pack(side=RIGHT, fill=BOTH) list_box = Listbox(root, selectmode="multiple") list_box.pack(expand=YES, fill="both") list_box.config(yscrollcommand=scrollbar.set) scrollbar.config(command=list_box.yview) download_start = Button(root, text="Download Start", command=threading, state=DISABLED) download_start.pack(pady=10) # Execute Tkinter root.mainloop()
Producción:
Descargar lista de reproducción completa de YouTube
Aquí, aprenderemos cómo descargar la lista de reproducción completa de YouTube en Tkinter usando Python.
Acercarse:
- Primero, buscaremos todos los enlaces de video de la lista de reproducción de YouTube usando el módulo pyyoutube .
- Luego iteraremos a través de todos los videos y descargaremos cada video uno por uno usando el módulo pytube .
A continuación se muestra el aspecto de la GUI:
Entendamos la implementación paso a paso:
- Cree una ventana de Tkinter y agregue botones, etiquetas, etc.
Python3
# Import Required Modules from tkinter import * # Create Object root = Tk() # Set geometry root.geometry('400x200') # Add Label Label(root, text="Youtube Playlist Downloader", font="italic 15 bold").pack(pady=10) Label(root, text="Enter Playlist URL:-", font="italic 10").pack() # Add Entry box playlistId = Entry(root, width=60) playlistId.pack(pady=5) download_start = Button(root, text="Download Start") download_start.pack(pady=10) # Execute Tkinter root.mainloop()
- Ahora vamos a crear dos funciones:
- enhebrado: – Se utiliza para enhebrar en Tkinter.
- download_videos: – Se utiliza para descargar videos de YouTube.
Python3
def threading(): # Call download_videos function t1 = Thread(target=download_videos) t1.start() def download_videos(): # Create API Object api = Api(api_key='Enter API Key') if "youtube" in playlistId.get(): playlist_id = playlistId.get()[len( "https://www.youtube.com/playlist?list="):] else: playlist_id = playlistId.get() # Get list of video links playlist_item_by_id = api.get_playlist_items( playlist_id=playlist_id, count=None, return_json=True) # Iterate through all video links for index, videoid in enumerate(playlist_item_by_id['items']): link = f"https://www.youtube.com/watch?v={videoid['contentDetails']['videoId']}" yt_obj = YouTube(link) filters = yt_obj.streams.filter(progressive=True, file_extension='mp4') # download the highest quality video filters.get_highest_resolution().download() print(f"Downloaded:- {link}") messagebox.showinfo("Success", "Video Successfully downloaded")
A continuación se muestra la implementación completa:
Python3
# Import Required Modules from tkinter import * from pyyoutube import Api from pytube import YouTube from threading import Thread from tkinter import messagebox def threading(): # Call download_videos function t1 = Thread(target=download_videos) t1.start() def download_videos(): # Create API Object api = Api(api_key='Enter API Key') if "youtube" in playlistId.get(): playlist_id = playlistId.get()[len( "https://www.youtube.com/playlist?list="):] else: playlist_id = playlistId.get() # Get list of video links playlist_item_by_id = api.get_playlist_items( playlist_id=playlist_id, count=None, return_json=True) # Iterate through all video links for index, videoid in enumerate(playlist_item_by_id['items']): link = f"https://www.youtube.com/watch?v={videoid['contentDetails']['videoId']}" yt_obj = YouTube(link) filters = yt_obj.streams.filter(progressive=True, file_extension='mp4') # download the highest quality video filters.get_highest_resolution().download() print(f"Downloaded:- {link}") messagebox.showinfo("Success", "Video Successfully downloaded") # Create Object root = Tk() # Set geometry root.geometry('400x200') # Add Label Label(root, text="Youtube Playlist Downloader", font="italic 15 bold").pack(pady=10) Label(root, text="Enter Playlist URL:-", font="italic 10").pack() # Add Entry box playlistId = Entry(root, width=60) playlistId.pack(pady=5) download_start = Button(root, text="Download Start", command=threading) download_start.pack(pady=10) # Execute Tkinter root.mainloop()
Producción: