Libreria PHP para youtube
Hace tiempo que utilizo Youtube como mi sistema de ví­deos, y es mas que nada por comodidad. Se que hay otros servicios que tienen mayor calidad, mejor resolución, mejor diseño y opciones, pero como la variedad que tiene youtube no hay en ningún sistema. Y por esto el otro dí­a me di cuenta que, no me habí­a puesto a pensar como funciona.... y no digo el sistema de usuario o el de subir ví­deos, si no el de publicar los ví­deos en la web.
Básicamente y a simple vista todos podemos ver que utiliza flash para reproducir los ví­deos a través de la conversión de ví­deos de cualquier clase a FLV. Pero, ¿como selecciona el ví­deo a reproducir? ¿que hace el cuando nosotros hacemos algo?

Mirando las direcciones parece que cada ví­deo tiene una "ví­deo_id" que es un código de números y letras que determinan el ví­deo a reproducir. Como ejemplo podéis ver uno de los publicados aquí­.

Al pinchar al articulo de Verdades en la vida, podemos ver que la dirección se divide en unos cuantos elementos:

http://www.youtube.com/watch?
v=YDRId6QmNTA
&eurl=http://www.tierra0.com/

La "carpeta" mira dentro del servidor de youtube.com vale para entrar a la pagina del ví­deo, "v" es el "video_id" que identifica que ví­deo veremos y eurl indica a google de que web viene la visita.

Estas no son todas las variables que youtube toma, también hay otras que genera para mostrarnos información como "t" o "iurl". Las podemos ver entrando en la carpeta "v" de "youtube.com" y dentro de esta poniendo la "id_video" del ví­deo que queremos ver. Como ejemplo: http://www.youtube.com/v/YDRId6QmNTA
Esta dirección es la que se insertará al poner un ví­deo de youtube en nuestra web, generando un reproductor flash con el ví­deo echo. Por eso utiliza los parámetros anteriormente comentados. Al entrar a, "http://www.youtube.com/v/YDRId6QmNTA", se &t=OEgsToPDskImpHgdkq8u8g6Aka7NXFnM">convertirá en "http://www.youtube.com/p.swf? ví­deo_id=YDRId6QmNTA &eurl= &iurl=http%3A//sjl-static10.sjl.youtube.com/vi/YDRId6QmNTA/2.jpg &t=OEgsToPDskImpHgdkq8u8g6Aka7NXFnM" dándonos los datos anteriormente citados de:
id_video: Identificador del ví­deo
eurl: Direccion de origen del video
iurl: Imagen previa del ví­deo. Estas imágenes se toman cada 10 segundos y se numeran con .jpg. Por defecto youtube pone la imagen tomada a los 10 segundos (la imagen 2.jpg).
t: código generado por youtube para verificar que no se accede ilegalmente.

Estos datos insertados en p.swf darán como resultado el reproductor flash.

Para automatizare estas direcciones y poder usarlas en aplicaciones web he creado una sencilla ´funcion que da como resultado un Array de todas las variables y direcciones completas de los datos de un ví­deo de youtube a partir de su id_video.
Para utilizarlo solo tenis que poner youtube("ID_VIDEO"); y poner el elemento del array que se quiera.
Por ejemplo. Si queremos obtener la imagen de un ví­deo:

HTML:
  1. <?php
  2. echo "<img src=\"".$youtube["iurl"]."\">";
  3. ?>

Las etiquetas del array que podemos obtener de un video son: id, t, url, iurl, reproductor, video, html, propietario, title, descripcion, fecha, tags

Como siempre la funcion que tenemos que poner antes del ejemplo para que funcione serí­a:

PHP:
  1. <?php
  2. function youtube($id) {
  3.     $url = 'http://www.youtube.com/watch?v='.$id;
  4.     $query = @file_get_contents($url);
  5.  
  6.     $exp_info = '!&t=(.+)&sk=!U';
  7.     preg_match_all($exp_info,$query,$t);
  8.  
  9.     $exp_info = "!<meta name=\"title\" content=\"(.+)\">!U";
  10.     preg_match_all($exp_info,$query,$titulo);
  11.  
  12.     $exp_info = "!<span id=\"vidDescRemain\">(.+)</span>!U";
  13.     preg_match_all($exp_info,$query,$descripcion);
  14.  
  15.     $exp_info = "!<b class=\"smallText\">(.+)</b><br>!U";
  16.     preg_match_all($exp_info,$query,$fecha);
  17.  
  18.     $exp_info = "!<meta name=\"keywords\" content=\"(.+)\">!U";
  19.     preg_match_all($exp_info,$query,$tags);
  20.  
  21.     $exp_info = "!<b><a href=\"/user/(.+)\" onclick=\"!U";
  22.     preg_match_all($exp_info,$query,$propietario);
  23.  
  24.     $t = $t[1][0];
  25.     $titulo = $titulo[1][0];
  26.     $descripcion = $descripcion[1][0];
  27.     $fecha = $fecha[1][0];
  28.     $tags = $tags[1][0];
  29.  
  30.     $salida["id"] = $id;
  31.     $salida["t"] = $t;
  32.     $salida["url"] = $url;
  33.     $salida["iurl"] = "http://img.youtube.com/vi/".$id."/2.jpg";
  34.     $salida["reproductor"] = "http://www.youtube.com/p.swf?video_id=".$id."&iurl=http://img.youtube.com/vi/".$id."/2.jpg&t=".$t;
  35.     $salida["video"] = "http://youtube.com/get_video.php?video_id=".$id."&t=".$t;
  36.     $salida["html"] = "<object width=\"425\" height=\"350\"><param name=\"movie\" value=\"http://www.youtube.com/v/".$id."\"></param><param name=\"wmode\" value=\"transparent\"></param><embed src=\"http://www.youtube.com/v/".$id."\" type=\"application/x-shockwave-flash\" wmode=\"transparent\" width=\"425\" height=\"350\"></embed></object>";
  37.     $salida["propietario"] = $propietario[1][0];
  38.     $salida["title"] = $titulo;
  39.     $salida["descripcion"] = $descripcion;
  40.     $salida["fecha"] = $fecha;
  41.     $salida["tags"] = $tags;
  42.  
  43.     return $salida;
  44. }
  45. ?>

Si queremos hacerlo directamente con Flash podemos encontrar la clave en el blog de Abdul Qabiz el cual tiene un extenso post en el que podemos ver una demostración de como obtener los ví­deos FLV directamente con flash en AS3 y AS2, y además obtener el archivo editable .fla que extrae los ví­deos.

Por si alguien le interesa os dejo el código de AS2 que modifique para la extracción del ví­deo en flash:

Actionscript:
  1. //Declaración de elementos
  2. createEmptyMovieClip ("mc", getNextHighestDepth ());
  3. var _mcl:MovieClipLoader = new MovieClipLoader ();
  4. _mclListener = new Object ();
  5. _mcl.addListener (_mclListener);
  6. _mcl.loadClip ("http://www.youtube.com/v/3IcwG0jUFxU", mc);
  7.  
  8. _mclListener.onLoadStart = function (target:MovieClip){
  9.    trace ("flv url: " + constructFLVURL (target));
  10.    salida = "oeeeoeoeoeoe: " + constructFLVURL (target);
  11.    _mcl.unloadClip (target);
  12. };
  13.  
  14. //función de composición de la URL
  15. function constructFLVURL (dir):String {
  16.    var _lv:LoadVars = new LoadVars ();
  17.    _lv.decode (dir._url.split ("?")[1]);
  18.    trace ("The URL is: " + target._url);
  19.    trace ("t param: " + _lv.t);
  20.    trace ("video_id: " + _lv.video_id);
  21.    trace ("thumbnail: " + _lv.iurl);
  22.    var str:String = "http://www.youtube.com/get_video.php?" + "video_id=" + _lv.videoId + "&t=" + _lv.t;
  23.    return str;
  24. }

Para ejecutar este código solo tenéis que pegarlo en un clip en el que haya una caja de texto con nombre "salida" en la que se mostrará la dirección de salida del código. La caja de texto debe tener una propiedad de Texto Dinámico.

actualizado:La función de extracción de datos del youtube tenia un pequeño fallo en los datos de propietario y tags que ya esta solucionado, gacias @Lisandro.