' Gambas class file '' Instalar para todos los usuarios ' sudo apt-get -y install yt-dlp '' Forma de uso (incluye imagen en audio) ' yt-dlp https://soundcloud.com/grupo/cancion --embed-thumbnail Public hProceso As Process Public Sub Form_Open() Me.Title = "SoundClouding - version " & Application.Version Giro.Visible = False Giro.Stop ' Definimos la shell para llamadas... System.Shell = "/bin/bash" CompruebaDL() labelProcesando.Text = "" End Public Sub Form_Drop() Dim cadenaDrag As String 'Message.Info(("Recibido en pegado:" & Drag.Format)) If Drag.Format = "text/plain" Then 'Borramos caracteres NULL (\x00) del codigo UNICODE recibido 'cadenaDrag = Replace(Drag.Paste("text/unicode"), "\x00", "") cadenaDrag = Replace(Drag.Paste("text/plain"), "\x00", "") 'Eliminamos cadena solo para Escritorio cadenaDrag = Replace(Drag.Paste("text/plain"), "app=desktop&", "") txtURL.Text = cadenaDrag Else Message.Title = ("URL no válida") Message.Warning(("Solo puede arrastrar y soltar una URL") & gb.CrLf & ("Si tiene algún problema, pruebe a cortar y pegar la dirección")) Endif End Public Sub botonDescargar_Click() Dim NombreFichero As String 'Crear la carpeta SoundClouding Shell "mkdir -p " & User.Home & "/SoundClouding" Wait ' Desactivamos para evitar pulsar más de una vez a los nerviosos botonDescargar.Enabled = False If txtURL.Text <> "" Then 'Eliminamos cadena solo para Escritorio txtURL.Text = Replace(txtURL.Text, "app=desktop&", "") ' Mostramos que estamos haciendo algo... 'labelProcesando.Text = ("Chequeando URL y ficheros multimedia...") ' Obtener el nombre de fichero 'Shell "echo -ne $(yt-dlp " & txtURL.Text & " --get-filename)" To NombreFichero 'Shell "echo -ne $(yt-dlp " & txtURL.Text & " -F 2>/dev/null|grep mp4|grep -v 'only'|tail -1|awk '{print $1})" To NombreFichero 'Shell "echo -ne $(yt-dlp " & txtURL.Text & " -F 2>/dev/null|grep mp4|grep -v 'only'|tail -1|awk '{print $1}')" To NombreFichero 'Message.Info(("ID de video:" & NombreFichero)) 'If NombreFichero = "" ' Message.Title = ("Error en URL") ' Message.Error(("La URL indicada no se puede procesar para extraer audio/vídeo")) ' txtURL.Text = "" 'Else Dim MejorFormato As String '' Obtener el ID del mejor formato MP4 'Shell "echo -ne $(yt-dlp -F " & txtURL.Text & " 2>/dev/null|grep mp4|grep -v 'only'|tail -1|awk '{print $1}' )" To MejorFormato 'labelProcesando.Text = ("Descargando multimedia (audio/vídeo)") 'Giro.Visible = True 'Giro.Start 'Giro.Refresh Shell "notify-send -t 6000 '📽️ SoundClouding:\nDescargando audio/vídeo...\nEspere a que finalice'" labelProcesando.Text = "Descargando... Espere a que finalice" Wait 0.1 'txtGira.Visible = True 'Wait 0.1 ' Descargamos musica/Video e incluimos la imagen de la caratula embebida If chkMusica.Value Then Shell "cd " & User.Home & "/SoundClouding ; yt-dlp " & txtURL.Text & " --embed-thumbnail -x --audio-format mp3 " Wait 'hProceso = Shell ("cd " & User.Home & "/SoundClouding ; yt-dlp " & txtURL.Text & " -x --audio-format mp3 ") For Read As "Proceso" Else Shell "cd " & User.Home & "/SoundClouding ; yt-dlp " & txtURL.Text & " --embed-thumbnail" Wait ' Descargar por ID (-f) 'hProceso = Shell ("cd " & User.Home & "/SoundClouding ; yt-dlp " & txtURL.Text & " --embed thumbnail --ignore-errors") For Read As "Proceso" Endif ' Do While hProceso.State = Process.Running ' Select Case txtGira.Text ' Case "|" ' txtGira.Text = "/" ' Case "/" ' txtGira.Text = "-" ' Case "-" ' txtGira.Text = "\\" ' Case "\\" ' txtGira.Text = "|" ' Case Else ' txtGira.Text = "|" ' End Select ' Wait 0.1 ' Loop 'Giro.Stop 'Giro.Visible = False txtGira.Visible = False labelProcesando.Text = "Descarga finalizada en: " & User.Home & "/SoundClouding" Message.Title = ("Descarga finalizada") Message.Info(("Se ha descargado el audio/vídeo en: ") & User.Home & "/SoundClouding") txtURL.Text = "" 'Endif Else Message.Title = ("URL no válida") Message.Warning(("Puede arrastrar y soltar una URL") & gb.CrLf & ("Si tiene algún problema, pruebe a cortar y pegar la dirección")) Endif ' Reactivamos el boton botonDescargar.Enabled = True labelProcesando.Text = "" End Public Sub Proceso_Read() Dim sline As String sline = Read #Last, Lof(Last) txtSalida.Text = sline End Public Function CompruebaDL() ' Comprobamos si existe youtube-dl (VERSION ) Dim Resultado As String Shell "yt-dlp --version 1>/dev/null 2>/dev/null; echo -n $?" To Resultado If Resultado <> "0" Message.Title = ("Error yt-dlp") Message.Error(("No se ha localizado la herramienta externa yt-dlp") & gb.CrLf & ("* Debe instalarlo desde su gestor de paquetes") & gb.CrLf & ("* También puede descargarlo desde: https://yt-dl.org/latest/yt-dlp ") & gb.CrLf & ("* Si lo tiene instalado cree un link en /usr/local/bin/")) Quit Endif End