Reglamento general de los foros   •   FAQ   •   Buscar en el foro •  Registrarse | Iniciar sesión 



Portada » Foros Linux » Desarrollo » Programación


Nuevo tema Responder al tema
 [ 11 mensajes ] 
Patrocinadores

Autor
Buscar:
Mensaje

Desconectado
Forista Ancestral
Forista Ancestral
Avatar de Usuario

Registrado: Mié Ago 11, 2010 10:32 am
Mensajes: 3234
Ubicación: Oviedo-es_ES

Nota Publicado: Vie Feb 23, 2018 4:30 pm 
Arriba  
Como no tengo ni idea de programación, a ver si me podeis echar una mano en un programita (o script) que me quiero montar. Se trata de lo siguiente (a ver si soy capaz de explicarlo bien):
a) parto de un archivo de texto, que ya tendré creado, que se llamará youtubeLinks.txt
b) El ‘programa’ debe empezar ejecutando la orden, por consola…
Código:
youtube-dl –list-formats -a youtubeLinks.txt

(o puede ser un simple script, con esa orden). Y al ejecutarse esta orden se me presentarán, en la consola, las posibilidades de formato de descarga de los links que tenga en el archivo youtubeLinks.txt. Algo como esto:
Imagen
c) De esta información que veo, tengo que seleccionar el código del formato elegido (que se identifica con un número, de 2 o 3 cifras) y, esto es lo importante, que no se hacer, la consola me tiene que decir algo como...
Código:
 ‘Elija el formato de descarga’
… y yo escribir el código elegido (por ejemplo… 43)
d) Y una vez que escriba ese número, y de al ENTER, se debe ejecutar otra orden (u otro sencillo script) con la instrucción siguiente
Código:
youtube-dl -f 43 -a youtubeLinks.txt

que me empezará a descargar, en el ‘formato 43’ (o en el que haya elegido) los videos de youtube cuyos links tenía indicados en el archivo ‘toutubeLinks.txt’

Y ya está. (luego, si el programita es un script, ya tengo claro crear un Lanzador en el escritorio, para ejecutarlo con un simple doble clic del ratón… y así podré descargarme muy fácil, y rápidamente, por consola, uno (o más) videos de Youtube para verlos ‘offline’
Y es que el complemento (extensión) de Firefox ‘Video DownloadHelper’, que siempre usaba, cada vez se complica más, en mi Debian, con el Firefox Quantum, y he perdido mi confianza en ella.

Venga, a ver si hay algún experto que me eche una manita en programación.
Gracias.

 Perfil WWW  

Desconectado
Forista Legendario
Forista Legendario
Avatar de Usuario

Registrado: Dom Oct 10, 2004 7:00 am
Mensajes: 1799

Nota Publicado: Vie Feb 23, 2018 8:55 pm 
Arriba  
Ante todo, ejecuta el comando youtube-dl --list-formats `cat tuarchivo`

Más que nada, para que veas la respuesta cuando hay muchos videos. No se me ocurre manera, suponiendo el peor de los casos: que cada video tuviera distintas opciones disponibles y no hubiera dos iguales. Es decir: no se me ocurre manera de seleccionar sólo un código y aplicarlo a todos los videos.

Lo que dices que no sabes hacer, se hace con case.
Podría hacerse pidiendo uno por uno el código, pero entonces supongo que no tendría mucha gracia el script.
Saldría algo así:
Citar:
Elija el formato para el video 1
opción 1
opción 2
opción 3 etc

Elijes y empieza a descargar en segundo plano mientras sale el mensaje: elija el formato para el video 2...

Personalmente, un programa que me hace tantas preguntas me parece un infierno. Se puede hacer, si es lo que quieres.


Pero también dale una leída rápida al readme de youtube-dl. Sobre todo esta parte: format selection.

Ahí hay otras opciones, en lugar de códigos de formato, que además permiten listarlas por prioridad. A partir de ahí sí, es trivial hacer un script. Lo que veo complicado y poco práctico es la primera parte.


En cambio, algo más sensato me parece ordenarlo por prioridad:

1) si está disponible en mpg
2) si no, en mp4
3) si no, en flv...

Eso sí es posible, y se aplicaría a la totalidad de los videos. Eso es la segunda parte de tu script.


######################

Otra posibilidad es listar los códigos disponibles para uno o dos videos, y elegir entre ellos para toda la lista. El problema es que corres el riesgo de encontrarte con un video que no tenga ese formato.

########################

La tercera posibilidad:

Que se presente un menú para elegir por calidad o incluso por formato, ignorando los realmente disponibles. En el caso de que la elección sea por calidad, salvas el problema del formato inexistente para algún video.


Todo esto, suponiendo que las opciones que te ofrece el readme no te sirvan.

#########################

Finalmente, la segunda parte del script probablemente ya sepas hacerla. Si no, avisas.

Pero te recomiendo aclararte con lo expuesto arriba. O al menos aclarármelo a mí, porque no veo una manera de efectuar una elección global y segura sobre una lista de archivos (tampoco sé qué característica tendrá esa lista). Yo suelo bajar listas de videos utilizando youtube-dl, pero salvo un simple for i in `cat lista`; do youtube-dl $i; done, no necesito mucho más.

 Perfil  

Desconectado
Forista Ancestral
Forista Ancestral
Avatar de Usuario

Registrado: Mié Ago 11, 2010 10:32 am
Mensajes: 3234
Ubicación: Oviedo-es_ES

Nota Publicado: Vie Feb 23, 2018 9:55 pm 
Arriba  
OK, gracias, como siempre, neurus.
Pero sospecho que mi objetivo es mucho más sencillo, verás, en realidad me funcionaría perfectamente este simple script
Código:
#!/bin/sh
youtube-dl -f 43 -a youtubeLinks.txt

# guardar este archivo con el nombre 'script_descargarVideos'
# crear el archivo 'youtubeLinks.txt con las direcciones web de los videos a descargar
# y esta sería la orden por consola para descargar esos links:
# doc@debian:~$ sh script_descargarVideos
# que se puede indicar en un Lanzador creado en el Escritorio

que lo ejecutaría desde un Lanzador del Escritorio. Porque por lo que he visto el 'código de formato: 43' es el que mejor me va (al menos el que me es suficiente)... si no fuese porque he visto que en algunos videos NO se ofrece ese formato.

De aquí surge, por tanto, la primera parte del 'programilla':
a) quería ver (con la orden 'youtube-dl --list...' qué códigos se ofrecen
b) quería elegir 'manualmente', uno de los que se ofrece en cada caso (que sería, a lo mejor, el 18, si no aparece el 43. O el 171, si es un clip musical y solo quiero descargarme el audio), de manera que, al escribirlo, en el segundo script apareciese automáticamente un '18' (o, por seguir el ejemplo, un 171) en vez del '43' que sería su valor por defecto.
Pero insisto, elegido e introducido 'a mano', con la información que me da la consola tras esa orden 'youtube-dl --list...'
(Me suena que solo se trata de introducir una variable, eso de $CODIGO, o algo así que, como no programo, no conozco bien cómo ha de hacerse)

Venga, gracias de nuevo por tu paciencia con los 'newies'

 Perfil WWW  

Desconectado
Forista Legendario
Forista Legendario
Avatar de Usuario

Registrado: Dom Oct 10, 2004 7:00 am
Mensajes: 1799

Nota Publicado: Sab Feb 24, 2018 1:57 am 
Arriba  
Creo que no nos estamos entendiendo.
El script, tal como lo tienes pensado, debería mostrarte los formatos disponibles de una lista de videos.
El problema es que youtube-dl --list-formats -a lista; te muestra todos los formatos de todos los videos, sin pausa (que no es lo mismo que sin demora). Supongamos que pasaste una lista de 100 videos, y quieres el formato 32 (invento) para el primer video, el 43 para el segundo, el 54 para el tercero... todo eso deberías tenerlo guardado en tu memoria, porque de la memoria de la máquina ya se fue. Al menos es lo que ocurre con el comando youtube-dl.

Tal vez lo entiendas con un ejemplo práctico. Asi sería un script funcional, pero incómodo:
Código:
#!/bin/bash
lista=$1
echo $lista
for i in `cat $1`
    do
        youtube-dl -F $i 
        read -p "Escriba el codigo: " COD
        youtube-dl -f $COD  $i &&
    done

(edit: olvidé decirlo. Se usa así: script lista)

¿Dónde está lo incómodo? En que debes escoger el formato para cada uno de los videos de la lista. Lo que quiero saber es cómo resuelves (porque las computadoras automatizan, no piensan. La solución del problema debe entenderla antes el humano) la cuestión de darle de una vez el código que quieres para toda la lista de archivos.

Suponiendo una lista X, una vez que sabes los códigos disponibles para cada uno de los videos, ¿cómo eliges un código global? O eliges un código y si ese no existe eliges otro... El script no sería complejo. Lo complejo es resolver tu problema, y no termino de entender desde dónde partes y adónde quieres llegar,

 Perfil  

Desconectado
Forista Ancestral
Forista Ancestral
Avatar de Usuario

Registrado: Mié Ago 11, 2010 10:32 am
Mensajes: 3234
Ubicación: Oviedo-es_ES

Nota Publicado: Sab Feb 24, 2018 2:17 am 
Arriba  
no, verás, es mucho más sencillo: parto de, digamos, una lista de 1, 2, 3 o a lo sumo 4 links de videos de youtube, que en un momento dado, me interese descargar, y que paso al archivo 'youtubeLinks.txt' (que ya tengo creado), sustituyendo a los links que ya tuviese ese archivo, de alguna sesión anterior.
El 'programita' se iniciaría, en consola, ejecutando el comando
Código:
youtube-dl --list-formats -a youtubeLinks.txt

para, asi, poder ver las alternativas de formatos de descarga que me da cada uno de los 2, 3 o 4 videos. Normalmente me bastará ver si en todos existe el formato 43, o alguno similar, llamémosle 'X', que sea común, y que es el que usaré, como formato único, en
Código:
('elija el formato de descarga'...)

para, tras escribirlo y dar al ENTER, se aplique a todos los videos de la lista en el próximo comando que se tiene que activar, que será el consabido...
Código:
youtube-dl -f 'X' -a youtubeLinks.txt

y ya está, a partir dq aquí tiene que empezar la descarga de todos esos videos en el formato 'X' elegido.

(ya ves que es muy sencillo, en realidad lo único que pretendo es montarme un sistema que me automatice la introducción de los comandos que digo (y la introducción del formato de descarga elegido). Nada complicado, vamos, que si lo tengo que hacer 'a mano', no pasa nada, en el fondo lo que quiero es aprender un poco más).

 Perfil WWW  

Desconectado
Forista Legendario
Forista Legendario
Avatar de Usuario

Registrado: Dom Oct 10, 2004 7:00 am
Mensajes: 1799

Nota Publicado: Sab Feb 24, 2018 4:05 am 
Arriba  
Algo así, se podría hacer prácticamente con el mismo script de arriba, levemente modificado. Dime si esto es lo que quieres:

Código:
#!/bin/bash
lista=$1
youtube-dl --list-formats -a $lista
read -p "Escriba el codigo: " COD

youtube-dl -f $COD  -a $lista
       


Editado -- Vie Feb 23, 2018 10:43 pm --

Se me acaba de ocurrir una idea.
Supongamos que son unos cuantos archivos. Tú me dices que serán pocos, pero cuando te entusiasmes con la automatización, serán más. Tal vez funcione, si combinamos los códigos disponibles de todos los videos, y luego los ordenamos por el primer campo y según los que aparezcan más. Luego, el usuario escogería de ahí.
El script no tiene comprobación de errores. Es fácil pero tedioso de hacer.

Si quieres que aparezcan más líneas, cambia el "head -n 20" por el número de líneas que prefieras. O lo quitas, incluyendo el |, y aparece la lista completa.

Código:
#!/bin/bash
lista=$1
codigos=`tempfile`

youtube-dl --list-formats -a $lista > $codigos
cat $codigos|sort -t : -k1,1 -nr|head -n 20

read -p "Elija un codigo: " COD
 youtube-dl -f $COD  -a $lista     

 Perfil  

Desconectado
Forista Ancestral
Forista Ancestral
Avatar de Usuario

Registrado: Mié Ago 11, 2010 10:32 am
Mensajes: 3234
Ubicación: Oviedo-es_ES

Nota Publicado: Sab Feb 24, 2018 1:02 pm 
Arriba  
neurus, amigo, el primero... perfecto, justo lo que quería.
El segundo script es interesante, pero queda un poco 'lioso', solo aparecían los códigos comunes, y por triplicado, cuadruplicado... en función del número de videos que contuviese la 'lista'
Pero como yo (en contra de lo que opinabas) nunca llegaré a querer descargar 'montones de videos', gracias a tus ideas he aprendido algo y, como normalmente descargaré un video que me apetezca, me he creado este script, que es definitivamente, perfecto para descargar... de uno en uno:
Código:
#!/bin/bash
read -p "introduzca la dirección web de un video: " VIDEO
youtube-dl --list-formats $VIDEO

read -p "Elija un codigo: " COD
youtube-dl -f $COD  $VIDEO

que le llamo 'script_neurus2' y que ejecuto desde un lanzador en el Escritorio con el comando
sh script_neurus2
Imagen

¡MIL GRACIAS, CAMPEÓN:::!!!

(asi que, ejecutado el script, me basta copiar y pegar la dirección web del video que quiero descargar, luego elegir e introducir el código del formato que me apetezca... y ya está, dos comandos de consola introducidos sin apenar tener que tipear nada... y en muy poco tiempo, el video descargado) ::lol:: ::lol:: :wink: :drinks:

 Perfil WWW  

Desconectado
Forista Legendario
Forista Legendario
Avatar de Usuario

Registrado: Dom Oct 10, 2004 7:00 am
Mensajes: 1799

Nota Publicado: Sab Feb 24, 2018 8:30 pm 
Arriba  
Me alegra que te haya servido.

Con respecto a tu último script, sólo para rizar el rizo: ¿oíste hablar de zenity?
Código:
#!/bin/bash
codigos=`tempfile`

VIDEO=$(zenity --entry --title="Dirección de video" --text "Ingrese dirección de descarga")
youtube-dl --list-formats  $VIDEO> $codigos
zenity --width=800 --height=400  --text-info --filename=$codigos
COD=$(zenity --entry --title="Código" --text "Ingrese elcódigo")
youtube-dl -f $COD $VIDEO 2>&1|zenity --text-info="Progreso de descarga"


Faltaría hacerle una barra de progreso, pero me parece que demoraría demasiado la ejecución (hay que consultar el tamaño final del video y luego hacer consultas periódicas al tamaño del archivo temporal que se está descargando).

Y a este script habría que hacerlo con condicionales, para que funcione correctamente la opción cancelar. Otro día, quizá.

Otras aplicaciones similares son dialog (para consola) y Xdialog.

 Perfil  

Desconectado
Forista Ancestral
Forista Ancestral
Avatar de Usuario

Registrado: Mié Ago 11, 2010 10:32 am
Mensajes: 3234
Ubicación: Oviedo-es_ES

Nota Publicado: Sab Feb 24, 2018 9:02 pm 
Arriba  
Caramba con Zenity...
me dejas boquiabierto... y ojiplático 8-O

Ya tengo material de estudio, para el fin de semana, que veo bastante info, en Google, sobre este invento, 'de Champions Ligue', que es Zenity.
Otra vez muchas gracias
:drinks: :drinks:

 Perfil WWW  

Desconectado
Forista Legendario
Forista Legendario
Avatar de Usuario

Registrado: Dom Oct 10, 2004 7:00 am
Mensajes: 1799

Nota Publicado: Mar Feb 27, 2018 6:08 am 
Arriba  
Básicamente lo mismo, pero bien armado. Ahora funciona cancelar, y si bien no hay una barra de progreso, hay algo parecido.
Creo que funciona, no lo probé demasiado.

Código:
#!/bin/bash
codigos=`tempfile`

VIDEO=$(zenity --entry --title="Dirección de video" --text "Ingrese dirección de descarga")
case $? in
    0)
        youtube-dl --list-formats  $VIDEO> $codigos
        ;;
    1) exit
        ;;
    -1) echo "error"
    exit
        ;;
esac


zenity --width=800 --height=400  --text-info --filename=$codigos
case $? in
0)
    COD=$(zenity --entry --title="Código" --text "Ingrese elcódigo")
        case $? in
            0) case $? in
                0)
                    youtube-dl -f $COD $VIDEO 2>&1|zenity --progress --pulsate
                    ;;
                1)
                    exit
                    ;;
                esac
                ;;
            1)
                exit
                ;;
                esac
                ;;
1)
exit
;;
esac

 Perfil  

Desconectado
Forista Ancestral
Forista Ancestral
Avatar de Usuario

Registrado: Mié Ago 11, 2010 10:32 am
Mensajes: 3234
Ubicación: Oviedo-es_ES

Nota Publicado: Mar Feb 27, 2018 1:39 pm 
Arriba  
muchas gracias, sigo 'investigando' sobre zenity, y dando forma a una serie de entradas a mi Blog, que quiero hacer sobre todo esto del 'scripting' y zenity.
Pero te tengo que a hacer una pregunta sobre zenity. Bueno, abro otro hilo, para no mezclar cosas.

 Perfil WWW  
Mostrar mensajes previos:  Ordenar por  
 [ 11 mensajes ] 
Nuevo tema Responder al tema

Saltar a:  


 Temas relacionados   Autor   Respuestas   Vistas   Último mensaje 
Ayuda con programa: Estructuras (Lenguaje c) (SOLUCIONADO)

en Programación

franco_94

4

885

Vie Abr 01, 2011 1:43 am

mcun Ver último mensaje

Programa en bash-Solucionado

en Programación

riquelme

12

2663

Mar Feb 07, 2012 8:20 pm

doc Ver último mensaje

Programa para FTP - solucionado

en Software

Pizpireta

9

982

Dom Oct 02, 2011 8:52 pm

Pizpireta Ver último mensaje

Un programa que bloquee paginas[SOLUCIONADO]

en Software

yek33

5

623

Dom Ene 09, 2011 6:51 pm

yek33 Ver último mensaje

forzar la instalacion programa (SOLUCIONADO)

en Sistema

polo3

1

1432

Sab Nov 27, 2010 11:39 pm

mcun Ver último mensaje



¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 4 invitados

No puede abrir nuevos temas en este Foro
No puede responder a temas en este Foro
No puede editar sus mensajes en este Foro
No puede borrar sus mensajes en este Foro
No puede enviar adjuntos en este Foro

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group :: Style based on FI Subice by phpBBservice.nl :: Todos los horarios son UTC + 1 hora [ DST ]
Traducción al español por Huan Manwë
phpBB SEO