A continuación os presento un programa en Perl que, en conjunto con youtube-dl y una extensión para Chrome, nos permitirán descargar vídeos (por el momento de Youtube) usando todo el poder de youtube-dl http://rg3.github.io/youtube-dl/
Primeramente, el programa en Perl (muy básico dado que me inicio en Perl ;D ):
Using perl Syntax Highlighting
- use Win32::Clipboard;
- ### Simple Documentation ###
- #
- #
- # RainVid is a simple script which works with "Copy all urls" https://chrome.google.com/webstore/deta ... nanaolmbfk extension
- # and youtube-dl to let downloading videos from youtube (right now) with only a click
- # You must remember that Chrome Store doesnt allow extensions to download videos from youtube so for that reason is this script
- #
- # '$clip_obj' variable is used to call the object Win32::Clipboard so this variable also accepts all the methods of Win32::Clipboard object
- # '$clip_txt' variable stores the current content of the clipboard
- # '$command' defines the path to be executed after reading the clipboard
- #
- ### End Simple Documentation ###
- $command = 'c:\Users\Cibertron\Documents\youtube-dl.exe'; #Path to command to be exexuted
- $clip_obj = Win32::Clipboard(); # Create the object
- $clip_obj->Empty(); # Clean the clipboard before the first run
- do { # Create a do loop to avoid terminating the program after the video is downloaded
- $clip_obj->WaitForChange(); #Wait to change the clipboard
- $clip_txt = $clip_obj->GetText(); #Obtain only text type clipboard
- if (($clip_txt =~ /https:\/\/www.youtube.com/)||($clip_txt =~ /http:\/\/www.youtube.com/)) { # Check if the clipboard contents a youtube url
- system("$command $clip_txt");
- $clip_obj->Empty(); # Clean clipboard after downloading the video
- }else{
- #do nothing;
- }
- }while(1!=0) # Condition always true, so the "do" loop never finish and by the way, the program doesnt exists when the video is downloaded and waits for more urls
Coloreado en 0.005 segundos, usando GeSHi 1.0.8.4
Ok, procuraré siempre que escriba código documentarlo bien para que sea fácil para otros (odio no entender el código de otros, me hace sentir muy :huh: :huh: :huh: ) así que cualquier duda, preguntad
El código es para funcionar bajo Windows, así pues necesitaremos Perl http://www.activestate.com/activeperl; una vez descargado e instalado nos vamos a Perl Package Manager y buscamos el módulo Win32-Clipboard y lo instalamos tal y como muestra la imagen:
Una vez instalado el módulo, y teniendo el programa, solo nos falta configurar el Chrome y youtube-dl.
Ok, instalamos la extensión de Chrome, Copy all Urls que hará lo prometido de "solo un clic" https://chrome.google.com/webstore/detail/copy-all-urls/djdmadneanknadilpjiknlnanaolmbfk.
Una vez instalada vamos a descargar youtube-dl http://rg3.github.io/youtube-dl/download.html y lo guardaremos donde deseemos, habrá que recordar el lugar de donde lo guardamos puesto que habrá que sustituir el PATH de la variable command del programa por el lugar en el que guardamos a youtube-dl en nuestro PC. Así por ejemplo, si lo guardamos en "Mis Documentos" en Windows 7, la ruta sería c:\Users\User\Documents\youtube-dl.exe
Llegados a este punto nos falta configurar algo muy importante, lo primero es ffmpeg que es el conversor con el que youtube-dl trabaja para convertir los vídeos a los distintos formatos que se permite tal como avi, mp4, flv, etc. ( EN CUESTIÓN DE CODECS Y RELACIONADOS SOY UNA CACA :-X ¡ja,ja,ja!).
Descargamos ffmpeg http://ffmpeg.zeranoe.com/builds/win32/static/ffmpeg-20150306-git-c089e72-win32-static.7z
Una vez descargado lo descomprimimos, por ejemplo en C:\ para que sea más fácil y MUY IMPORTANTE, pues debemos incluir a ffmpeg en la variable PATH de Windows para que cuando youtube-dl lo llame lo pueda encontrar. Para hacer esto nos vamos a Mi PC --> Configuración avanzada del sistema--> Variables de entorno y editamos la variable PATH en la cual añadimos al final (en caso de haber descomprimido en C:\) C:\ffmpeg\bin, recordad escribir un punto y coma antes de añadir la línea.
¡¡Ya vamos terminando!! ;D
Si hemos hecho todo bien, ahora solo nos falta tocar a Chrome y darle el poder mágico, si os habéis fijado la extensión Copy all Urls nos ha dejado una bonita sombrilla:
Ahora solo nos falta configurar la sombrilla, para ello abrimos las preferencias de la extensión y marcamos la casilla Copy highlighted tabs only (activamos esta opción para solo copiar la URL en el portapapeles de la pestaña que estamos viendo) y todas las demás casillas las desactivamos (en la pestaña Default Action seleccionamos Copy para que al pulsar en la sombrilla no nos pregunte la acción qué queremos realizar y automáticamente copié la URL en el portapapeles).
Por último y para finalizar, en la sección Format de la extensión es donde tendremos la oportunidad de escoger si deseamos que descargue vídeos o los convierta a mp3 o al formato que queramos. Para hacer esto tenemos que conocer un poco a youtube-dl...
Si queremos que descargue el vídeo y lo pase a mp3, seleccionaremos la opción Custom en Format y escribimos la siguiente línea: -x --audio-format mp3 --audio-quality 192 $url y si queremos un simple mp4 sencillamente escribimos $url.
¿Cómo funciona todo esto? Sencillo: la extensión de Chrome nos permite copiar contenido al portapapeles, y nuestro programa analiza lo copiado en el portapapeles y si encuentra en este caso una URL de Youtube (¡el programa no analiza si es válida o no la URL!) se la pasa como argumento al programa youtube-dl.
youtube-dl recibe sus parámetros gracias a la sección Custom de la extensión de Chrome donde le decimos qué queremos que haga con la URL que se representa con $url, así pues si queremos decirle que haga por cosa a youtube-dl con la URL simplemente escribiremos los parámetros en la sección Custom.
FIJAOS QUE NO ESCRIBO youtube-dl en la sección Custom, sino que hago directamente el paso de los parámetros.
Ahora para probar que funciona y si habéis hecho todos los pasos, es tan sencillo como ejecutar el programa y abrimos Chrome, nos vamos a Youtube y vemos cualquier vídeo, y le damos clic a la sombrilla y veréis cómo empieza a descargar ;D
Vale, cosas que pueden pasar. Has de esperar a que descargue el primer vídeo para que puedas descargar el segundo, si intentas dar clic a la sombrilla mientras haya un vídeo descárgandose no se descargará el segundo vídeo dado que el primero no ha terminado. Para hacer eso estoy estudiando fork() que es lo que permitirá hacerlo... si es que os animáis a probarlo la segunda vez, ¡je,je,je! :rolleyes:
Así que ya sabéis, esperar a que el primero termine y adelante con el siguiente...
Bueno, mi primer mensaje con algo de aporte Se me ha hecho extenso y demasiado :¬¬ y no sé mucho de buena presentación pero iré aprendiendo, ¡je,je,je! Espero que opinéis y me digáis que tal os parece y si es útil...
Saludos, chicos.
ostpul♪e►