PHP Youtube Downloader 2.1
- 30/10/2008
- 12:56 am
Ahora que nuevamente se han cambiado las rutas de los vídeos de Youtube, nuestros visitantes nos han pedido explicar la forma en que se pueden obtener los vídeos. Entonces les presentamos un nuevo método para realizar la descarga directa de los vídeos.
Nota: Esta información es para propósitos educativos, el autor no se responsabiliza de los usos que puedan hacer los usuarios de la presente información.
Como Funciona
Como ya hemos explicado en ocasiones anteriores, para acceder directamente a un vídeo, se puede acceder al siguiente URL donde: id es el identificador del vídeo, token es una variable para validar la descarga y fmt es el formato en el que se desea descargar el vídeo (5 para FLV, 18 para MP4 y 13 para 3GP).
-
http://www.youtube.com/get_video.php?video_id=id&t=token&fmt=fmt
Luego el problema se reduce a obtener el valor token que nos servirá para validar la descarga, luego de hacer un análisis se nota que para obtener los datos del vídeo entre ellos este valor token se puede hacer accediendo a:
-
http://www.youtube.com/get_video_info?video_id=id
En donde id es el identificador del vídeo, luego esto devolverá los datos del vídeo en formato URLEncoded y entre ellos se encuentra la variable que necesitamos.
Creando el Script PHP
Lo primero que necesitamos es una función que tome una ruta y devuelva el contenido de esta dirección, ello lo haremos con las funciones cURL que permiten acceso a contenido remoto. Entonces creamos la función getContent, que devuelve el contenido de una determinada URL.
-
function getContent($url) {
-
$ch = curl_init();
-
curl_setopt ($ch, CURLOPT_URL, $url);
-
curl_setopt ($ch, CURLOPT_HEADER, 0);
-
-
curl_exec ($ch);
-
curl_close ($ch);
-
return $string;
-
}
Ahora como el contenido devuelto esta el formato URLEncoded, creamos otra función que interprete el contenido devuelto por la función anterior y devuelva la variable token.
-
function getYoutubeToken($id) {
-
$path = "http://www.youtube.com/get_video_info?";
-
$cont = getContent($path."&video_id=".$id);
-
return $opts['token'];
-
}
Entonces ahora que tenemos la variable que nos hacia falta podemos crear el URL para la descarga directa de los vídeos, suponiendo que tenemos un formulario que envía las variables por GET, primero obtenemos la variable token, generamos el URL para la descarga del vídeo donde incluimos el formato en el cual deseamos la descarga y finalmente redireccionamos el script a la ruta recién creada.
Uniendo estos elementos, agregando el formulario para el ingreso del identificador del vídeo un una hoja de estilos para mejorar la apariencia de nuestro script, obtenemos nuestra aplicación para descargar vídeos de Youtube sin necesidad de instalaciones adicionales.
Posts Relacionados
- bajar-youtube.com
- Descargar Videos Youtube
- PHP Youtube Downloader 2.2
- PHP: Descargar videos YouTube
- Descargar Youtube en MP4
Total de Comentarios: 37
Hola, te dejo las gracias por tu aporte
unijimpe, existira alguna forma de hacer que se guarden con un titulo? , recuerdo antes se podia, pero ahora no encontre una forma
gracias unijimpemui wen aporte .. pero creo ke hai un problema man en la opcion descargar video en .flv nod escarga en mp4 y 3gp si pero en .flv nada.
depeus respeto a ese pedido si puedes acer para ke descargue con el nombre por ejemplo mira este http://adictoz.uni.cc/zx/Scripts/zegaxtube.php?id=
pones el ID del video y los descarga con el nombre
suena interezante descargar el archivo con el nombre. tambien me uno a la peticion. xP
Hola, en vez de utilizar cURL no se podria utilizar la funcion file_get_contents()??
Saludos y muchas gracias por este aporte que vienes actualizando, te lo agradezco mucho y sigue así :)
Muy bueno, el método me sirve mucho para un pequeño app en LUA en el que estoy trabajando.
La verdad que los tokens me solucionan la vida ya que ahora no necesito los headers :)
Muchas gracias!
Hola, efectivamente la descarga en FLV no funciona correctamente y es por que puse fmt=5, para resolver este problema en el caso de FLV no hace falta colocar el parámetro fmt, aunque esto hace que el archivo que se intenta descargar aparezca como get_video y sin extensión por lo cual hay que renombrarlo con extensión .flv luego de haberlo descargado. Les dejo el archivo con las modificaciones hechas.
http://blog.unijimpe.net/download/4/
Acerca del uso de cURL en lugar de file_get_contents es por que cURL es mucho mas rápida y consume menos recursos del servidor, esto por que esta especialmente preparada para comunicación sobre diferentes protocoles. Si desean pueden modificar el script y utilizar file_get_contents con lo cual obviamente se ahorrarían varias lineas de código.
Respecto a entregar el vídeo con el nombre aun no he llegado a encontrar un método para hacerlo, así que si encuentro la solución la estaré publicando.
[...] bueno si sabemos un poco de PHP veremos que la cosa no es muy complicada, puedes ver como aqui Otros, [...]
esta re bueno es un gran aporte para la comunidad te felicito.
¿el codigo se puede modificar para cargar el archivo a una carpeta en el servidor?????
si es asi es un muy buen codigo
hola a todos estaba leyendo el script y buscando en google un duda que tengo.. quisiera agregar para bajar en mp3 pero que $videoItem =”" <– ahi va un numero ya se 0 13 o 18 para flv 3gp o mp4 pero que numero seria para mp3??
Hola a todos:
Por si os interesa, he dejado un mensaje en:
http://blog.unijimpe.net/php-youtube-downloader-20
proponiendo crear un grupo de trabajo para investigar la descarga y acceso a Youtube y otras plataformas y compartir nuestros conocimientos. He dejado mi correo para quien se apunte a la idea.
Unijimpe, respecto a lo del nombre del vídeo, yo lo hago llamando al RSS del vídeo:
http://www.youtube.com/rss/tag/VIDEO_ID.rss
De ahí extraigo el título.
Luego le elimino los caracteres ilegales y lo guardo con el título como nombre, agregándole extensión FLV.
Ésto último lo hago en un segundo archivo (por razones prácticas de mi proyecto). Os lo dejo aquí por si os puede ser de ayuda:
http://www.siliconvega.com/public/ejemplo_descarga_con_nombre.zip
Saludos!!
Muchas gracias por este post, estuvo realmente bueno.
Por cierto a mi si me funcionó usando fmt con los valores 5, 18, 13… cuando quería bajar un video en FLV con el valor 0 me aparecía el error 404.
Gracias de nuevo.
a mi no me funciona solo, es mas no me funciona ni el que pones como demo :’( que sucede es mi navegador o algo asi?
Ya youtube cambio nuevamente el codigo. hay que arreglar el programa nuevamente.
la descarga no anda unijimpe
ya no funka el link arreglenlo porfavor
se ve bueno el script :)
unijimpe me podrias pasar el script de php-youtube-downloader-2.1/
lo que pasa es que lo intente bajar pero dice “post no encontrado”
Hola Carlos, por descuido al actualizar Wordpress, no hice la actualización del plugin que permite manejar las descargar, ya lo he actualizado y esta funcionando nuevamente.
unijimpe muchas gracias por el aporte y la contestacion tan rapida, ahora tengo una pequena duda baje un script en php para subir imagenes.
pero como hago para cuando suba una imagen hacerla mas chica, tengo una imagen de 1024 x 768 y quiero que cuando la suba php la reduzca a 800 x 600, es que son muchas imagenes y las tengo que hacer mas chicas en photoshop
unijimpe si quisiera bajar el video en otro tipo de formato como le puedo hacer cual es el valor que le tengo que colocar
si el de .flv es 5
el de .mp4 es 18
el de .3gp es 13
pero como puedo conseguir los demas valores para otro tipo de archivo
muchas gracias unijimpe
no existen mas valores q esos excepto el de Mp4 en Hight Definition q es “22″. si quieres descargar en otros formatos tendria q ser un convertidor de formatos.
Ummmm me pregunto q tengo q hacer para descargar mp3
si el de .flv es 5
el de .mp4 es 18
el de .3gp es 13
el de .mp3 es ????
ummmmmm tengo una duda
resulta que tengo un reproductor de flv, si quiero reproducir dicho archivo que manda youtube y tengo esta funciona vidlink que me da el video del link..
$vidlink = “http://pagina/video?vItem=”.$vcode.”;
si lo que quiero es incertar el codigo de youtube que ya tengo y esto me devulelva el flv..
¿Como seria?
intente ponerlo asi con el archivo que hisiste pero no devolvio nada
¿Como podria la funcio vItem para que no reciviera por get si no directo asi por el link?
Muchas gracias
perdon la sentencia es asi
$vidlink = “http://pagina.com/video.php?vItem=”.$vcode.”
bueno unijimpe eres el mejor en estos casos, estuve buscando la nueva version y recien me acorde de tu web, estaba utilizando otros servicios.
pero bueno ahora quisiera utilizar mi propio servicio implementando en mi web, pero hay un problema mi web esta alojada en un host gratuito y como te puedes imaginar no esta la variable cURL activa entonces Luciano dijo que se podia utilizar file_get_contents(), y lo q yo pediria es si pudieran hacer un cambio y reemplazar el cURL por el file_get_contents(), se los agradeceria. Espero una respuesta.
Unijimpe por que me da error la descarga si leí arriba que ya avías corregido el plugin de descargas pero aun así no puedo descargar la versión 2.1 ya que e bajado las anteriores pero no funcionan por los cambios en youtube.
Te pido por favor si no lo puedes revisar o decirme si lo as cambiado de hosting ya que lo quiero pero no lo encuentro ya sea aquí o en otra pagina.
Agradecido estaré esperando tu respuesta.
La descargas no anda!
unijimpe, youtube changed settings again.. your script is not working please release new update!
Hace como cuatro días que por fin pude bajar la última actualización y hoy dispuse a ponerla a mi página y me doy cuenta que ya no sirve la actualización y me da cólera que ni siquiera lo use pero ya sabíamos que algo así podría pasar en cualquier momento.
Ahora solo queda pedirle al maestro unijimpe que lo revise tal vez nos lo pueda dar ya activo como lo ah hecho anterior mente.
Youtube actualizo otra vez solo es cuestion de modificar el codigo y claro que el master unijimpe lo hara esperaremos con ansia la version 2.2 Gracias
[...] el articulo anterior PHP Youtube Downloader 2.1 habíamos explicado la forma de conseguir esta URL, pero ahora si utilizamos la URL directamente no [...]
[...] el articulo anterior PHP Youtube Downloader 2.1 habíamos explicado la forma de conseguir esta URL, pero ahora si utilizamos la URL directamente no [...]
El problema de la solución de izzukay y de la web *.uni.cc que publico enrico para modificar el titulo del video es que utilizan la función readfile, es decir que primero se descarga el video al server donde se encuentra el script, y luego se lo envía al usuario con el nombre modificado.
A diferencia de usar un redirect el uso de recursos es inmenso, por ejemplo si un usuario decide descargar un video de 5mb y se usa el redirect forzando la descarga desde youtube va a consumir en nuestro server unos 15kb, en cambio usando el método de readfile va a utilizar un trafico de más de 10mb, 5mb iniciales para descargar el video a al servidor y 5mb mas de la descarga del visitante desde el server a su PC.
Es un metodo que sirve en el caso de que el script no sea utilizado masivamente, de lo contrario es muy poco practico.
Saludos


