Descargar un archivo de video flv de youtube.com con ActionScript2 (AS2)

photo credit: PIAZZA del POPOLO
Actualización 18/11/2008:
Me pasa, y no soy el único, que solo funciona el script en local, y no cuando el swf está colgado online. No se cual es la razón, aunque tampoco he buscado muy a fondo. Podría ser alguna directiva de seguridad del flashplayer quizás.
—
A falta de recurrir al API de Youtube también hay otras maneras de obtener los enlaces directos a sus videos, en formato flv, alojados en cualquiera de sus diferentes servidores.
Lo mejor sería usar su propia API por que así se evita que cualquier cambio en su sistema invalide nuestros anteriores scripts, como ya me ha pasado.
El caso es que sigo tropezando con la misma piedra, así que aquí está el nuevo código para poder descargar un flv y visionarlo en tu propio mediaplayer.
var my_lv:LoadVars = new LoadVars();
my_lv.onData = function(vars_str:String) {
if (vars_str == undefined) {
trace("Error al cargar datos");
return;
}
var i:Number = 0;
while (vars_str.split("&")[i] != undefined) {
var token_str = vars_str.split(”&”)[i];
if(token_str.split(”=”)[0] == “token”) {
var t = token_str.split(”=”)[1];
_root.videoplayer_mc.contentPath = “http://www.youtube.com/get_video.php?video_id=”+idvideo+”&t=”+t+”&fmt=5″;
break;
}
i ++;
}
};
idvideo = “2OBZHB5I89A”;
my_lv.load(”http://www.youtube.com/get_video_info?video_id=”+idvideo, my_lv, “GET”);
Y un ejemplo en formato .fla que se puede descargar desde aquí.
Pulsa aquí para abrir otra ventana con el swf. Si no funciona es que Youtube ha cambiado de nuevo su sistema.
Explicación:
Los enlaces a los videos en las propias páginas de youtube son del tipo:
http://www.youtube.com/watch?v=2OBZHB5I89A
Donde el valor de la variable “v”, en este caso “2OBZHB5I89A”, indica el id único del archivo de video.
Para acceder al archivo de video, y no al player que lo carga, son necesarias otras variables que completarían el enlace directo.
Este enlace tiene el siguiente formato:
http://www.youtube.com/get_video.php?video_id=valorid&t=valortoken&fmt=5
valorid se tiene que sustituir con el valor de la variable “v” mencionada antes, y valortoken con otro valor que se obtiene mediante el script.
El código solicita a una URL específica la información relativa a un video determinado
http://www.youtube.com/get_video_info?video_id=valorid“
y esta URL le devuelve una cadena de variables, entre las cuales se encuentra una llamada “token”, cuyo valor es el que necesitamos.
Finalmente la línea
_root.videoplayer_mc.contentPath = 'http://www.youtube.com/get_video.php?video_id='+idvideo+'&t='+t+'&fmt=5';
monta el enlace al video, y lo asigna a la variable del player de video, definida para guardar la ruta hacia el flv.
Algunas dudas se solucionaron en los comentarios del post anterior sobre este tema.
[...] 30/Oct/2008: Solucionado ¡¡¡ Visita el post “Descargar un archivo de video flv de youtube.com con ActionScript2 (AS2)” con el nuevo script, que funcionará mientras Youtube no modifique de nuevo su [...]
Muchas gracias por el post, es realmente interesante y sobre todo útil en mi caso que estoy montando algo medianamente parecido en Adobe AIR. La explicación del id y del token son muy claras y el ejemplo muy bueno. Nuevamente gracias.
Saludos!!!
Gracias a tí, Luis, por tu visita, y por los tutos que hay en tu web.
Los especiales de JSFL me encantan. Arriba Subflash y el Rock&Roll¡¡¡
Primero de nada gracias por el código. Sólo comentar una cosa curiosa: Me funciona perfectamente en local, pero no online, lo que me hace suponer que Youtube puede estar capando ips. El anterior script lo utilicé bastante antes de dejar de funcionar y no me parece descabellado pensar eso, sobretodo por lo que comentabais de su modelo de negocio. Vamos, que yo lo haría si tuviera que proteger mis intereses, ¿no?.
Efectivamente. Ahora solo me funciona en local, y no desde internet.
Si a alguien no le pasa que lo reporte, please.
No tiene mucho sentido que funcione en local y no online, al fin y al cabo en local tambien tiene que acceder a youtube para cogerlo.
Nadie sabe una manera de apañarlo?
Gracias de todas formas por todo lo que poneis es magnifico y ayuda a los torpes como yo.