Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #Baixa Video do Youtube - Permite configurar pasta que será salvo os vídeos. Se quiser mudar pode. Programa salva em um JSON o local
- import tkinter as tk
- from tkinter import filedialog, messagebox
- import pytube
- import ctypes
- import json
- # Obtém o identificador da janela do console
- hwnd = ctypes.windll.kernel32.GetConsoleWindow()
- # Oculta a janela do console
- ctypes.windll.user32.ShowWindow(hwnd, 0) # 0 representa o comando para ocultar a janela
- # Caminho padrão da pasta de destino
- DEFAULT_DESTINATION_PATH = ""
- def save_destination_path(destination_path):
- # Salva o caminho da pasta de destino em um arquivo JSON
- with open("destination_path.json", "w") as file:
- json.dump({"destination_path": destination_path}, file)
- def load_destination_path():
- # Carrega o caminho da pasta de destino do arquivo JSON
- try:
- with open("destination_path.json", "r") as file:
- data = json.load(file)
- return data["destination_path"]
- except FileNotFoundError:
- return DEFAULT_DESTINATION_PATH
- def configure_destination_folder():
- # Abre uma janela de diálogo para escolher a pasta de destino
- folder_selected = filedialog.askdirectory()
- if folder_selected:
- save_destination_path(folder_selected)
- messagebox.showinfo("Configuração de Pasta", "A pasta de destino foi configurada com sucesso.")
- def download_video():
- # Obtém a URL digitada na caixa de texto
- video_url = entry.get()
- # Verifica se o campo de texto está vazio
- if not video_url:
- messagebox.showwarning("Aviso", "Por favor, informe a URL do vídeo do YouTube.")
- return
- # Exibe a mensagem de status
- status_label.config(text="Aguarde, download em andamento.", fg="green")
- try:
- # Cria um objeto 'YouTube' com a URL do vídeo
- youtube = pytube.YouTube(video_url)
- # Obtém a melhor resolução disponível para o vídeo
- video = youtube.streams.get_highest_resolution()
- # Carrega o caminho da pasta de destino
- destination_path = load_destination_path()
- if destination_path:
- # Define o diretório de destino para o download
- video.download(destination_path)
- # Exibe a mensagem no console
- print("O vídeo foi baixado com sucesso.")
- # Exibe a mensagem em uma caixa de diálogo
- messagebox.showinfo("Download Concluído", "O vídeo foi baixado com sucesso.")
- # Limpa a caixa de texto e posiciona o cursor nela
- entry.delete(0, tk.END)
- entry.focus()
- else:
- messagebox.showwarning("Aviso", "Nenhuma pasta de destino configurada.")
- # Limpa a mensagem de status após o término do download ou em caso de erro
- status_label.config(text="")
- except Exception as e:
- messagebox.showerror("Erro", str(e))
- # Limpa a mensagem de status em caso de erro
- status_label.config(text="")
- def show_context_menu(event):
- # Exibe o menu de contexto do Windows com a opção "Colar"
- menu.post(event.x_root, event.y_root)
- # Cria a janela principal
- window = tk.Tk()
- # Define o título da janela
- window.title("Youtube Vídeo Downloader")
- # Define o tamanho da janela
- window.geometry("765x150")
- # Centraliza a janela no meio da tela
- window.eval('tk::PlaceWindow . center')
- # Cria o rótulo "Informe a URL do vídeo:"
- label = tk.Label(window, text="Informe a URL do vídeo:")
- label.grid(row=0, column=0, sticky="w", padx=10, pady=10) # Posiciona na primeira linha, primeira coluna (canto superior esquerdo), alinhado à esquerda, com margem de 10 pixels
- # Cria a caixa de texto
- entry = tk.Entry(window, width=80)
- entry.grid(row=1, column=0, padx=10, pady=10) # Posiciona na segunda linha, primeira coluna (canto superior esquerdo), com margem de 10 pixels à esquerda
- # Associa o evento de clique com botão direito do mouse à função do menu de contexto
- entry.bind("<Button-3>", show_context_menu)
- # Cria o menu de contexto do Windows
- menu = tk.Menu(entry, tearoff=False)
- menu.add_command(label="Colar", command=lambda: entry.event_generate("<<Paste>>"))
- # Cria o botão "Configurar Pasta de Destino"
- config_button = tk.Button(window, text="Configurar Pasta de Destino", command=configure_destination_folder)
- config_button.grid(row=1, column=2, padx=5, pady=10) # Posiciona na segunda linha, segunda coluna (canto superior direito), com margem de 10 pixels à direita
- # Cria o botão de download
- button = tk.Button(window, text="Baixar vídeo", command=download_video)
- button.grid(row=1, column=1, padx=5, pady=10) # Posiciona na segunda linha, terceira coluna, com margem de 10 pixels à direita
- # Cria o rótulo para exibir a mensagem de status
- status_label = tk.Label(window, text="", fg="green")
- status_label.grid(row=2, column=0, sticky="w", padx=10)
- # Inicia o loop principal da janela
- window.mainloop()
Add Comment
Please, Sign In to add comment