' 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", "") 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 <> "" ' 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 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 ; youtube-dl " & 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 ; youtube-dl " & txtURL.Text & " --embed-thumbnail" Wait ' Descargar por ID (-f) hProceso = Shell ("cd " & User.Home & "/SoundClouding ; yt-dlp -f " & MejorFormato & " " & txtURL.Text) 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