MizunoBrasil

Youtube Downloader (Escolhe Destino e salva em Json)

Jun 20th, 2023
122
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 4.94 KB | None | 0 0
  1. #Baixa Video do Youtube - Permite configurar pasta que será salvo os vídeos. Se quiser mudar pode. Programa salva em um JSON o local
  2.  
  3. import tkinter as tk
  4. from tkinter import filedialog, messagebox
  5. import pytube
  6. import ctypes
  7. import json
  8.  
  9. # Obtém o identificador da janela do console
  10. hwnd = ctypes.windll.kernel32.GetConsoleWindow()
  11.  
  12. # Oculta a janela do console
  13. ctypes.windll.user32.ShowWindow(hwnd, 0)  # 0 representa o comando para ocultar a janela
  14.  
  15. # Caminho padrão da pasta de destino
  16. DEFAULT_DESTINATION_PATH = ""
  17.  
  18. def save_destination_path(destination_path):
  19.     # Salva o caminho da pasta de destino em um arquivo JSON
  20.     with open("destination_path.json", "w") as file:
  21.         json.dump({"destination_path": destination_path}, file)
  22.  
  23. def load_destination_path():
  24.     # Carrega o caminho da pasta de destino do arquivo JSON
  25.     try:
  26.         with open("destination_path.json", "r") as file:
  27.             data = json.load(file)
  28.             return data["destination_path"]
  29.     except FileNotFoundError:
  30.         return DEFAULT_DESTINATION_PATH
  31.  
  32. def configure_destination_folder():
  33.     # Abre uma janela de diálogo para escolher a pasta de destino
  34.     folder_selected = filedialog.askdirectory()
  35.     if folder_selected:
  36.         save_destination_path(folder_selected)
  37.         messagebox.showinfo("Configuração de Pasta", "A pasta de destino foi configurada com sucesso.")
  38.  
  39. def download_video():
  40.     # Obtém a URL digitada na caixa de texto
  41.     video_url = entry.get()
  42.  
  43.     # Verifica se o campo de texto está vazio
  44.     if not video_url:
  45.         messagebox.showwarning("Aviso", "Por favor, informe a URL do vídeo do YouTube.")
  46.         return
  47.  
  48.     # Exibe a mensagem de status
  49.     status_label.config(text="Aguarde, download em andamento.", fg="green")
  50.  
  51.     try:
  52.         # Cria um objeto 'YouTube' com a URL do vídeo
  53.         youtube = pytube.YouTube(video_url)
  54.  
  55.         # Obtém a melhor resolução disponível para o vídeo
  56.         video = youtube.streams.get_highest_resolution()
  57.  
  58.         # Carrega o caminho da pasta de destino
  59.         destination_path = load_destination_path()
  60.  
  61.         if destination_path:
  62.             # Define o diretório de destino para o download
  63.             video.download(destination_path)
  64.  
  65.             # Exibe a mensagem no console
  66.             print("O vídeo foi baixado com sucesso.")
  67.  
  68.             # Exibe a mensagem em uma caixa de diálogo
  69.             messagebox.showinfo("Download Concluído", "O vídeo foi baixado com sucesso.")
  70.  
  71.             # Limpa a caixa de texto e posiciona o cursor nela
  72.             entry.delete(0, tk.END)
  73.             entry.focus()
  74.         else:
  75.             messagebox.showwarning("Aviso", "Nenhuma pasta de destino configurada.")
  76.  
  77.         # Limpa a mensagem de status após o término do download ou em caso de erro
  78.         status_label.config(text="")
  79.     except Exception as e:
  80.         messagebox.showerror("Erro", str(e))
  81.         # Limpa a mensagem de status em caso de erro
  82.         status_label.config(text="")
  83.  
  84. def show_context_menu(event):
  85.     # Exibe o menu de contexto do Windows com a opção "Colar"
  86.     menu.post(event.x_root, event.y_root)
  87.  
  88. # Cria a janela principal
  89. window = tk.Tk()
  90.  
  91. # Define o título da janela
  92. window.title("Youtube Vídeo Downloader")
  93.  
  94. # Define o tamanho da janela
  95. window.geometry("765x150")
  96.  
  97. # Centraliza a janela no meio da tela
  98. window.eval('tk::PlaceWindow . center')
  99.  
  100. # Cria o rótulo "Informe a URL do vídeo:"
  101. label = tk.Label(window, text="Informe a URL do vídeo:")
  102. 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
  103.  
  104. # Cria a caixa de texto
  105. entry = tk.Entry(window, width=80)
  106. 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
  107.  
  108. # Associa o evento de clique com botão direito do mouse à função do menu de contexto
  109. entry.bind("<Button-3>", show_context_menu)
  110.  
  111. # Cria o menu de contexto do Windows
  112. menu = tk.Menu(entry, tearoff=False)
  113. menu.add_command(label="Colar", command=lambda: entry.event_generate("<<Paste>>"))
  114.  
  115. # Cria o botão "Configurar Pasta de Destino"
  116. config_button = tk.Button(window, text="Configurar Pasta de Destino", command=configure_destination_folder)
  117. 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
  118.  
  119. # Cria o botão de download
  120. button = tk.Button(window, text="Baixar vídeo", command=download_video)
  121. button.grid(row=1, column=1, padx=5, pady=10)  # Posiciona na segunda linha, terceira coluna, com margem de 10 pixels à direita
  122.  
  123. # Cria o rótulo para exibir a mensagem de status
  124. status_label = tk.Label(window, text="", fg="green")
  125. status_label.grid(row=2, column=0, sticky="w", padx=10)
  126.  
  127. # Inicia o loop principal da janela
  128. window.mainloop()
  129.  
Add Comment
Please, Sign In to add comment