[Perl] Integrando youtube-dl en Chrome y descargas de videos a un click

Iniciado por ostpulse, 6 Marzo 2015, 15:18 PM

0 Miembros y 1 Visitante están viendo este tema.

ostpulse

Hola a todos !

A continuacion os presento un script en perl que, en conjunto con youtube-dl y una extension para Chrome, nos permitiran descargar videos ( por el momento de youtube ) usando todo el poder de youtube-dl http://rg3.github.io/youtube-dl/

Primeramente el script de perl ( muy basico dado a que me inicio en perl  ;D ):

Código (perl) [Seleccionar]


use Win32::Clipboard;

### Simple Documentation ###
#
#
# RainVid is a simple script which works with "Copy all urls" https://chrome.google.com/webstore/detail/copy-all-urls/djdmadneanknadilpjiknlnanaolmbfk 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




Ok, procurare siempre que escriba code documentarlo bien para que sea facil para otros (odio no entender el codigo de otros, me hace sentir muy  :huh: :huh: :huh: ) asi que cualquier duda preguntad :D

El code es para funcionar bajo Windows asi pues necesitaremos Perl http://www.activestate.com/activeperl, una vez instalamos y descargamos nos vamos a Perl Package Manager y buscamos el modulo Win32-Clipboard e instalamos tal y como muestra la imagen:


Una vez instalado el modulo, y teniendo el script, solo nos falta configurar el Chrome y youtube-dl.

Ok, instalamos la extension de Chrome, Copy all Urls que hara lo prometido de "solo un click" 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, habra que recordar el lugar de donde lo guardamos puesto que habra que sustituir el PATH de la variable command del script por el lugar en el que guardamos a youtube-dl en nuestro PC. Asi por ejemplo si lo guardamos en "Mis Documentos" en Windows 7, el path seria 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 videos a los distintos formatos que se permite tal como avi, mp4, flv, etc... ( EN CUESTION DE CODECS Y RELACIONADOS SOY UNA KAKA  :-X jajaj ).


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 mas facil 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 --> Configuracion 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 linea.


Ya vamos terminando !! ;D

Si hemos echo todo bien, ahora solo nos falta tocar a Chrome y darle el poder magico, si os habeis fijado la extension Copy all Urls nos ha dejado una bonita sombrilla:


Ahora solo nos falta configurar la sombrilla, para ello abrimos las preferencias de la extension y marcamos la casilla Copy highlighted tabs only ( activamos esta opcion para solo copiar la url en el portapapeles de la pestaña que estamos viendo ) y todas las demas casillas las desactivamos ( en la pestaña Default Action seleccionamos Copy para que al clickar la sombrilla no nos pregunte la accion que queremos realizar y automaticamente copie la url en el portapapeles )

Por ultimo y para finalizar, en la sección Format de la extension es donde tendremos la oportunidad de escoger si deseamos que descargue videos 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 video y lo pase a mp3, seleccionaremos la opcion Custom en Format y escribimos la siguiente linea: -x --audio-format mp3 --audio-quality 192 $url y si queremos un simple mp4 sencillamente escribimos $url

¿Como funciona todo esto?, sencillo, la extension de Chrome nos permite copiar contenido al portapapeles, y nuestro script analiza lo copiado en el portapapeles y si encuentra en este caso una url de youtube ( el script no analiza si es valida o no la url! ) se la pasa como argumento al programa youtube-dl.


youtube-dl recibe sus parametros gracias a la sección Custom de la extension de Chrome donde le decimos que queremos que haga con la url que se representa con $url, asi pues si queremos decirle que haga x cosa a youtube-dl con la url simplemente escribiremos los parametros en la sección custom.
FIJAOS QUE NO ESCRIBO youtube-dl en la sección Custom, sino que hago directamente el paso de los parametros.

Ahora para probar que funciona y si habeis echo todos los pasos, es tan sencillo como ejecutar el script y abrimos Chrome, nos vamos a youtube y vemos cualquier video, y le damos click a la sombrilla y vereis como empieza a descargar  ;D

Vale, cosas que pueden pasar, has de esperar a que descargue el primer video para que puedas descargar el segundo, si intentas dar click a la sombrilla mientras haya un video descargandose no se descargara el segundo video dado que el primero no ha terminado...para hacer eso estoy  estudiando fork que es lo que permitira hacerlo...si es que os animais a probarlo la segunda vez jejej  :rolleyes:
Asi que ya sabeis, esperar a que el primero termine y adelante con el siguiente... :P



Bueno, mi primer post se me ha echo extenso y demasiado :¬¬ y no se mucho de buena presentacion pero ire aprendiendo jejej espero que opineis y me digais que tal os parece y si es util...

Saludos Chicos

ostpul♪e►