PHP Youtube Downloader 2.0

A solicitud de nuestros visitantes les presentamos PHP Youtube Downloader 2.0 la cual es la nueva versión del script PHP que permite descargar vídeos de Youtube utilizando PHP. Esta nueva versión esta adaptada a la nueva estructura de datos de Youtube.

phpyoutube20.jpg

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?
Para una explicación detallada de como funciona las rutas de Youtube pueden leer: Constructing YouTube FLV URL on client-side without any server-side script. Pero resumiendo cuando se desea acceder a un vídeo de Youtube, primero se genera un identificador de sesión que se devuelve al usuario y posteriormente se hace el llamado al vídeo con el identificador del vídeo y el identificador de sesión de la forma:

  1. http://www.youtube.com/get_video.php?video_id=idvideo&t=idsesion

Entonces para obtener los vídeos, nuestro objetivo es obtener el idsesion para construir la ruta final del descarga.

Implementando
Lo primero que hacemos es construir una función que se conecte a Youtube y obtenga los headers de respuesta a la petición inicial del vídeo, entre estos headers estará el identificador que necesitamos. Nótese que esta función recibe como parámetro el identificador del vídeo.

  1. function getHeaders($varurl) {
  2.     $host = "www.youtube.com";
  3.     $url = "/v/".$varurl;
  4.     $session = "";
  5.     $fp = fsockopen ($host, 80, $errno, $errstr, 45);
  6.     if ($fp) {
  7.         fputs ($fp, "GET $url HTTP/1.0\r\n\r\n");
  8.         while (!feof($fp)) {
  9.             $char = fgetc($fp);
  10.             if($char === "\n") {
  11.                 if (ord($header) === 13) {
  12.                     return($session);
  13.                 } else {
  14.                     $arrValue = split(": ", trim($header));
  15.                     if ($arrValue[0] == "Location") {
  16.                         parse_str($arrValue[1], $getvars);
  17.                         $session = $getvars['t'];
  18.                     }
  19.                 }
  20.                 unset($header);
  21.             } else {
  22.                 $header = $header.$char;
  23.             }
  24.         }
  25.         fclose ($fp);
  26.     }
  27. }

El siguiente paso es crear la URL con la ruta final del vídeo que deseamos acceder, en nuestro caso estamos recibiendo el identificador del vídeo por método GET de un formulario y estamos construyendo el URL mostrado al inicio en donde obtenemos el identificador de sesión haciendo uso de la función getHeaders.

  1. if ($_GET['v'] != "") {
  2.     $videoIds = $_GET['v'];
  3.     $videoUrl = "http://www.youtube.com/get_video.php";
  4.     header("Location: ".$videoUrl."?video_id=".$videoIds."&t=".getHeaders($videoIds));
  5.     exit();
  6. }

Uniendo el código, agregando un formulario en el cual el usuario ingresa el id del vídeo obtenemos la nueva versión de nuestra herramienta para descargar vídeos de Youtube solo utilizando PHP. Pueden ver el ejemplo funcionando en: http://samples.unijimpe.net/phpyoutube.php

Finalmente les dejo los archivos fuente de este ejemplo para que lo puedan revisar y mejorar.

Posts Relacionados

Comentarios Total 58 comentarios


jesusvld
Publicado: 14/12/2007 11:43 am

Interesante tutorial. Y gracias por compartir el código.

Saludos desde Trujillo-Peru. :)

Marco
Publicado: 14/12/2007 7:23 pm

NOo anda, que pasoo Amigo, tu eras grande, ya no nos quieres dar los codigos como antes, esta bien que lo hagas tu, pero eso fue lo que te hizo ser grande, y ya no eres como antes.

Si volverias a hacer la descarga de videos propios de youtube como el que hiciste antes para que cada uno pueda tener nuestro propio buscador con descarga seria distinto, pero ya no eres el mismo

es una lastima

selasi
Publicado: 15/12/2007 1:57 pm

Muchas gracias por publicar el código!
Pero el problema es que el archivo que colgaste para descargar es exactamente el mismo al de la version “obsoleta” 1.0 de tu PHP YouTube Downloader no? Entonces sigue dando el mismo problema o por lo menos ami no me funciona.
Respecto a los códigos que has puesto en el post dónde se deben incluir? Sería posible que colgases el archivo actualizado para descargar?

Un saludo y muchas gracias por tu trabajo y tu contribución!

unijimpe
Publicado: 15/12/2007 6:16 pm

Hola, debido a un pequeño problema me equivoque y no puse el archivo correcto para la descarga. He corregido el enlace y ya pueden descargar el archivo correcto.

http://www.box.net/shared/rcdpgblmz0

Gracias por su interés y también por sus sugerencias.

Marco
Publicado: 16/12/2007 3:58 pm

Ahora vuelves a estar en lo alto amigo,

Ten en cuenta que mucha gente te visita porque explicas muchas cosas que la mayoria no entiende, y si se interesan en tu blog es por eso, porque logran hacer cosas que quizas de otra manera no lograrian.

A ti te conoci por querer poner un buscador de videos propios y nunca deje de visitarte por eso,

Espero nos sigas brindando tutoriales como los de siempre.

Silva
Publicado: 17/12/2007 10:48 am

Unijimpe!!!

Nuevamente Gracias por tu aportacion, seguiremos en contacto.

Feliz Año Nuevo.

Silva
Publicado: 17/12/2007 12:14 pm

Probado y Funcionando Correctamente!!!

Gracias unijimpe.

Danny
Publicado: 18/12/2007 4:08 pm

Vaya Chevere aporte justamente lo estaba buscando esta perfecto como el primero!! – Gracias

Me preguntaba si se podría modificar o cambiar el nombre del archivo en este caso es get_video.flv no? pues me gustaría cambiarlo por otro se podría hacer eso, es que mi profe de computo no puede y yo le sorprendería si me enseñan ok bueno salu2 a todos

Bye Amigos espero su respuesta con ansias y vendré a ver todo los días la respuesta después del cole… Bye

DjMiki
Publicado: 21/12/2007 8:09 pm

Bien Mano eres lo maximo, funcional totalmente y lo mejor de todo q no utiliza las variables curl q utiliza adriansoft en el otro post, el me lo paso y pues, no funcionaba en host gratis, ahor ami incognita, es , q no puedo utilizarla tampoco en gratishost, peor eh hehco mi pc server y si puedo, y la cosa es q me restringen la funcion fsockopen()
alguien qme recomiende algun host donde pueda utilizarla.
Seria d emucha ayuda gracias.

Mi msn es webmikito@mikito.tk para cualquier cosa
Gracias

Barduck
Publicado: 21/12/2007 11:04 pm

Ahora sí… este es el unijimpe que me gusta, código libre para todos como tiene que ser!

DUQUE
Publicado: 23/12/2007 5:03 am

gracias por el esfuerzo que resulta para vosotros el realizar estos códigos y compartirlos, la verdad es que es fantástico el altruismo que demostrais por vuestra parte.

Un Saludo y seguir en la línea sois los mejores. :-P

Luciano
Publicado: 29/12/2007 9:02 pm

Muchas gracias amigo, yo tambien llegué aca buscando un buscador de YouTube, despues youtube cambio la cosa y se me complicó, me volviste a salar :D

Te felicito


[...] por la pagina de unijimpe me encontré con un tuto en php para descargar video de youtube simplemente indicando el valor de id del video, me pareció una excelente idea más si dicha idea [...]

Patricia
Publicado: 31/12/2007 10:36 am

No me funciona, me baje el la url directa (http://www.box.net/shared/rcdpgblmz0)y solo hice un cambio, el siguiente..
Cambié: <form action=”" method=”get”>
por:
Y cuando lo pongo se actualiza la página pero no hace la descarga, ¿a que se debe? Besos.

Patricia
Publicado: 31/12/2007 10:37 am

phpyoutube.php es lo que puse en form action, que no salió, perdón y saludos de nuevo!

Joel Crux
Publicado: 10/01/2008 4:20 pm

Hola como estas mis respetos para este es el mejor blog que he visitado .

Me poedes resolver una duda como le ago para traferir la url

a una varialbe ejemplo

$Urldescarga

doy a entender ?

header(“Location: “.$videoUrl.”?video_id=”.$videoIds.”&t=”.getHeaders($videoIds));

pasar esto a una variable enves de que se descargue quiero saber la direccion y mostrar:
un link algo asi

http://www.youtube.com/get_video.php?video_id=idvideo&t=idsesion

y luego que le den click para descargar en ves que se descargue automatico lo que yo quiero es extraer la direccion del video y ponerla en una variable.

No se si me doy a entender

Daniel
Publicado: 10/01/2008 11:09 pm

Muy claro y funcional el código. Se me ocurre que quizá la función en lugar de recibir el identificador del video podria recibir directamente la URL del video y obtener este identificador de allí. Es algo que resulta sencillo de hacer y su principal ventaja es no andar explicandole al usuario que cosa es y como conseguir el dichoso identificador.

Se agradece por el código.
Saludos y felicitaciones por el blog.

DarkMaster
Publicado: 22/01/2008 1:34 am

Joel, esto lo publique en el post: Actualizacion de Sprytube
………………………….
Encontre otro script que sirve para bajar videos de youtube.

Pueden ver el ejemplo en http://www.animexdeluxe.uni.cc/videos/

Es el “Youtube Downloader 2″

El cual genera la url directa del video, mas o menos asi

cache.googlevideo.com/get_video?video_id=rn8ULJGboOE&origin=ash-v215.ash.youtube.com

si le agregamos la extencion .flv se puede reproducir con cualquier reproductor flash.

Seria muy bueno que integraran de nuevo el otro reproductor y la opcion de descargar los videos directamente en la busqueda de los videos ^^

Aqui esta el codigo fuente:
http://video.qooqle.jp/dl/youtube_downloader.zip?070607

Txabi
Publicado: 24/01/2008 1:58 pm

Muchas muchas gracias unjimpe!!!
me has salvado la vida!!!

DHK
Publicado: 29/01/2008 8:30 am

Exelente entrada, yo no tenia idea de donde sacar el ID SESION, quisiera preguntar a ti o a los visitantes, si intentaron crear su propio reproductor de video youtube, yo logre crear uno pero la calidad de la imagen es muy baja, mas baja que en la misma pagina del youtube Haha, tal ves Uds me puedan ayudar mejorarlo.

huemulito
Publicado: 30/01/2008 6:15 pm

Gracias pero tengo una duda con firefox lo bajo normal y luego una vez bajado le agrego la extencion .FLV?? y conque se reproduce

unijimpe
Publicado: 30/01/2008 8:24 pm

Para visualizar archivos FLV puedes utilizar el Riva FLV Player el cual es un reproductor de videos FLV. Lo puedes descargar de manera gratuita en: http://www.rivavx.com/index.php?id=422&L=3

Istvan
Publicado: 31/01/2008 7:57 am

se puede utilizar el mismo codigo para bajar los videos de Dailymotion?

Jose
Publicado: 02/02/2008 8:48 pm

Hola, de donde me lo puedo bajar ya que el enlace no funiona?

Saludos

el observador
Publicado: 13/02/2008 8:10 am

hay gente que hace poco y para colmo son aduladores cuando les conviene como Marco,osea, se pasan esperando que los demas hagan las cosas.Si alguien publica un codigo mal no es por mala intencion, sino por equivocacion o simplemente por que a alguioen le habra dado resultado…
Quejarse menos y aprovechar mas la informacion de intenet.

andres
Publicado: 21/04/2008 12:19 pm

por que canbian esa ruta no la encuentro la nesesito y no se puede

Miguel
Publicado: 21/04/2008 5:46 pm

Hola amigos, me baje el codigo php lo puse en mi web, pero tengo problemas, no funciona o estoy haciendo algo mal, por favor si me pueden ayudar a solucionar este problemita. agradeciendo anticipadamente la atencion a la presente.
Saludos desde peru
MiguelDextre

Alca87
Publicado: 22/04/2008 6:35 pm

Hola! Deben de haber cambiado el método porque ya no funciona. Yo hice uno que parseaba el xml de goear.com, aquí os lo dejo:

extract($_POST);
$id = explode(‘=’, $url_goear);
$contenido = @file_get_contents(“http://www.goear.com/files/sst/secm” . $id[1] . “.xml”);
$contenido_separado = explode(‘”‘, $contenido);
header (“Location: “. $contenido_separado[5]);

Herman
Publicado: 10/08/2008 9:40 am

Cuando bajo el archivo me aparece con este nombre get_video.106&ipbits=16&expire=1218400513&key=yt1&sver=2 pero no se ejecuta con el flash player ni con quicktime, sera que no esta funcionando o hay algo mal en el script. Lo probe directamente con el que tienen de prueba aqui.

JedK_XP
Publicado: 14/08/2008 4:42 pm

Bueno me gusto mucho este script asi que lo expandi para que recibiera tanto identificadores como la Url completa… Espero comentarios…
URL del codigo fuente:
http://www.fileden.com/files/2006/9/15/218647/phpyoutube.zip
JedK_XP

pierblack
Publicado: 16/08/2008 5:44 pm

hola unijimpe quiera saber cual es la direccion que genera el PHP Youtube Downloader 2.0
al momento de descargar un video

enrique
Publicado: 16/08/2008 7:09 pm

px no ponen tambien para descargar de megavideo.com

therudyhck
Publicado: 06/10/2008 9:04 pm

hola buenas veran e subido el codigo aun servidor gratis que es usuarios lycos pero no da alguien me podria decir por que es

Non
Publicado: 24/10/2008 7:51 pm

Hola, el codigo y la pagina no funcionan, da en blanco. Puedes arreglarlo?

unijimpe
Publicado: 24/10/2008 11:07 pm

Hola, efectivamente este script ha dejado de funcionar, nuevamente Youtube ha cambiado las rutas de los vídeos, estamos trabajando para resolver este problema.

unijimpe
Publicado: 26/10/2008 3:37 am

Hola, despues de un poco de investigación ahora tenemos una nueva forma de descargar videos, ello lo hemos implementado y puesto en funcionamiento en:
http://sprytube.unijimpe.net

Marcelo
Publicado: 26/10/2008 10:44 am

Hola. ¿puedes publicar el código PHP?

Saludos

Luciano
Publicado: 26/10/2008 1:33 pm

Hola, podrías por favor publicar el codigo que usas ahora? Muchas gracias

Marcos
Publicado: 26/10/2008 2:18 pm

Hola,

Agradecería si pudieses compartir la nueva forma de obtener el “session”, dado que YouTube lo ha cambiado.

Por mi parte he encontrado una solución, pero me gustaría ver la tuya en caso que sea mas eficiente.

Saludos,

PD: Demo de mi fix aquí
http://www.infosec.cl/youtube/

unijimpe
Publicado: 26/10/2008 10:41 pm

Hola, como se explica en este post para descargar un vídeo se debe acceder mediante el siguiente URL:

http://www.youtube.com/get_video.php?video_id=idvideo&t=idsesion

El idvideo es el identificador del vídeo, pero idsesion es una variable que se genera como sesión. El problema consiste en conseguir esta segunda variable.

En el nuevo cambio que ha hecho Youtube, antes de acceder al vídeo se accede a:

http://www.youtube.com/get_video_info?video_id=idvideo

Este URL devuelve un texto en formato urlencoded con los datos del vídeo, entre ellos el idsesion en una variable llamada token.

Entonces para obtener el vídeo, primero hacemos la consulta a esta nueva URL, extraemos la variable token y con ello generamos la ruta directa al vídeo como el explicado en el post.

Marcos
Publicado: 26/10/2008 11:21 pm

Excelente.

Muchas gracias.
Por mi parte, la solucion que implemente es la siguiente:

Al ingresar a la url del video, ejemplo: http://www.youtube.com/watch?v=idvideo

Si observamos el HTML podremos encontrar un token valido en mas de una ocacion, siendo la mas identificable en la variable java “swfArgs”.

Ejemplo:
var swfArgs = {“usef”: 0, “fmt_map”: “6/720000/7/0/0″, “hl”: “en”, “iv_storage_server”: “http://www.google.com/reviews/y/”, “vq”: null, “video_id”: “idvideo”, “l”: 77, “sk”: “rLFnl453V34-T4vsNnk-AeAG_0lpg48C”, “t”: “OEgsTojFAypLc6iPOJtnHn1RO”, “plid”: “uQmxmAAACgAAUIQE”, “iv_module”: “http://s.ytimg.com/yt/swf/iv_module-vfl57703.swf”};

Siendo “t” el valor que nos interesa, en este caso: “OEgsTojFAypLc6iPOJtnHn1RO” que seria nuestro token.

Tu acercamiento es mejor, dado que es mas pequeño el codigo y la busqueda mas sencilla. Para mi caso, es mejor el mio dado que dicho HTML es solicitado de todas formas para obtener otros datos que utilizo.

Para quien quiera estraer entonces el token del HTML, puede utilizar este codigo.. siendo $html el HTML de http://www.youtube.com/watch?v=idvideo

Codigo:
[php]

[/php]

Saludos!

genaro
Publicado: 27/10/2008 4:02 pm

Hola amigo MArcos, podrias compartir el codigo??

Silva
Publicado: 28/10/2008 6:27 pm

Unijimpe !!! Auxilio, te pediria que me ayudaras con el código para descargar videos de Youtube.

Saludos!

Marcos
Publicado: 28/10/2008 9:54 pm

Hola,

Para quienes quieran, adjunto un PHP con una nueva funcion que devuelve el TOKEN a base de un identificador de youtube.

Aca:
http://www.infosec.cl/youtube/funcion_token.zip

Saludos!

kingdon
Publicado: 29/10/2008 8:47 am

hey, i cant speak spanish but we all know that we had problem with youtube and its nice to see that u guys have fixed it…i just checked http://samples.unijimpe.net/phpyoutube.php and it says PHP Youtube Downloader 2.1 so i was wondering when will we be able to download version 2.1??

unijimpe
Publicado: 30/10/2008 12:56 am

Hola, efectivamente estuve trabajando en la nueva versión y recién ahora la tengo lista así pueden ver la explicación completa y descargar los archivos fuente en:

http://blog.unijimpe.net/php-youtube-downloader-21/

Johnny
Publicado: 03/11/2008 1:55 pm

WOO…
UNIJIMPE Y GRACIAS POR SEGIR EXPLICANDO ESTOS TUTORIALES QUE SON MUY BUENOS SIGE A SI Y LLEGARAS MUY ALTO

izzukay
Publicado: 15/11/2008 5:04 pm

Hola a todos.

Me gustaría proponer la creación de un GRUPO DE TRABAJO de personas interesadas en investigar el acceso a los vídeos (y otros datos) de Youtube y otras plataformas.

UniJimpe hace una labor admirable, pero no podemos cargarle la responsabilidad de solucionarnos siempre la papeleta. Hay que currar y aportar un poquito, creo yo…

Yo no soy programador, pero empecé mirando su script y ya he accedido otras 7 plataformas por mi cuenta, lo que demuestra que no es tan difícil.

Creando este grupo podríamos trabajar, aportar y compartir nuestros conocimientos entre todos. También podríamos explorar formas alternativas de acceso para adelantarnos a los cambios y contar con scripts alternativos a los que echar mano rápidamente en caso de cambios.

Resumiendo: ¡¡¡juntos podemos hacer grandes cosas!!! Mucho mejor que tener a una persona pegándose la paliza para que luego nos beneficiemos todos de su trabajo.

Si os parece buena idea escribidme y vemos cómo podemos hacerlo:

c0nt4ct4r@gmail.com

Un abrazo!!!

carlos hernandez
Publicado: 22/12/2008 5:53 pm

intento descargar el video tal como dice ahi pero no puedo que hago?

tambien baje otro pero me da error haber si alguien lo puede checar

http://www.pinkynet.com.mx/bajar_youtube_2/

carlos hernandez
Publicado: 28/12/2008 4:48 pm

alguien me podria pasar el script de php-youtube-downloader-2.1/

lo que pasa es que lo intente bajar pero dice “post no encontrado”

http://blog.unijimpe.net/download/4/

alex
Publicado: 22/02/2009 3:28 am

alguien me puede dar el codigo de youtube download? es que cuando lo instalaba me pidio un codigo para poder instalarlo, y se lo agradeseria… les dejo my hotmail para que me lo envien ok grasia…

alex
Publicado: 22/02/2009 5:17 pm

hotmail es} alafunx@hotmail.com

Fulanito
Publicado: 02/03/2009 8:34 pm

me marca el siguiente error “Call to undefined function: curl_init()” me podrias decir por q??.

Ya le movi e investigue el funcionamiento de esa función pero no se por q me marca el error.

gracias!!

unijimpe
Publicado: 03/03/2009 11:54 pm

Fulanito, primero que estas viendo una versión antigua del script, la ultima versión la pueden encontrar en: http://blog.unijimpe.net/php-youtube-downloader-21/.

Respecto al error de curl_init, es por que en tu hosting esta deshabilitada la librería cURL, debes solicitar al administrador del servidor que habilite esta librería.

javier
Publicado: 06/04/2009 8:52 am

amigos, estoy probando la version 2.1 que ustedes tienen online y no funciona.Seguramente YOUTUBE hizo algun cambio. Gracias por su ayuda.

Richard
Publicado: 13/10/2009 6:43 pm

Oe man unijimpe ponte todos los archivos de tu demo http://samples.unijimpe.net/phpyoutube.php para bajar ps no seas malo soy un novato en estas cosas, a ver si te animas

chupete suazo
Publicado: 26/11/2009 6:51 pm

porque me aparece el url ke es error


[...] por la pagina de unijimpe me encontré con un tuto en php para descargar video de youtube simplemente indicando el valor de id del video, me pareció una excelente idea más si dicha idea [...]

 

Comentar

En este blog los comentarios están moderados, no aparecerán inmediatamente en la página al ser enviados. Por favor, evita los comentarios ofensivos u obscenos por que no serán aprobados.

(Requerido)

(Requerido, no será publicado)

(Requerido)

(Tags aceptados: <a> <em> <strong> <code> <ul> <li>)