Diseccionando youtube con php y flash

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://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]
“;
?>
[/HTML]
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]
!U”;
preg_match_all($exp_info,$query,$titulo);

$exp_info = “!(.+)!U”;
preg_match_all($exp_info,$query,$descripcion);

$exp_info = “!(.+)
!U”;
preg_match_all($exp_info,$query,$fecha);

$exp_info = “!!U”;
preg_match_all($exp_info,$query,$tags);

$exp_info = “!“;
$salida[“propietario”] = $propietario[1][0];
$salida[“title”] = $titulo;
$salida[“descripcion”] = $descripcion;
$salida[“fecha”] = $fecha;
$salida[“tags”] = $tags;

return $salida;
}
?>
[/PHP]

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:
[AS]
//Declaración de elementos
createEmptyMovieClip (“mc”, getNextHighestDepth ());
var _mcl:MovieClipLoader = new MovieClipLoader ();
_mclListener = new Object ();
_mcl.addListener (_mclListener);
_mcl.loadClip (“http://www.youtube.com/v/3IcwG0jUFxU”, mc);

_mclListener.onLoadStart = function (target:MovieClip){
trace (“flv url: ” + constructFLVURL (target));
salida = “oeeeoeoeoeoe: ” + constructFLVURL (target);
_mcl.unloadClip (target);
};

//función de composición de la URL
function constructFLVURL (dir):String {
var _lv:LoadVars = new LoadVars ();
_lv.decode (dir._url.split (“?”)[1]);
trace (“The URL is: ” + target._url);
trace (“t param: ” + _lv.t);
trace (“video_id: ” + _lv.video_id);
trace (“thumbnail: ” + _lv.iurl);
var str:String = “http://www.youtube.com/get_video.php?” + “video_id=” + _lv.videoId + “&t=” + _lv.t;
return str;
}

[/AS]
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.

Función php: Extractor de carátulas y Querí­as decir

Elefante y logotipos de Google Imagenes, Amazon y LastFm.esíšltimamente ando intentando crear un par de aplicaciones que me están comiendo todo el tiempo libre y por eso no suelo postear mucho la verdad pero como recompensa os dejare un cachito de mi código.

Las funciones que os dejo son 2. Una que saca una imagen a partir de un texto. Como inspiración utilicé la de el gran Daniel Mota, alias IceBeat el cual termino una función que da como resultado la url, y el titulo de imágenes buscadas en amazon, cosa q me sobraba y me faltaban alternativas de búsqueda. Así­ que por orden decidí­ hacer la mí­a propia… así­ que en la mí­a tenemos 3 motores. Google Imágenes, Amazon y LastFm.es a partir de los cuales podremos obtener las direcciones de las imágenes. (Para que la las direcciones se interpreten correctamente hay que añadirles http:// delante). Ademas podemos cambiar el tamaño de las imágenes en los motores lastFm y en Amazon poniendo la talla que queremos con XS, S, M o L.
En el caso de amazon ademas podemos buscar por los siguientes Tag:
All, Apparel, Automotive, Baby, Beauty, Blended, Books, Classical, DVD, DigitalMusic, Electronics, GourmetFood, HealthPersonalCare, Jewelry, Kitchen, Magazines, Marketplace, Merchants, Miscellaneous, Music, MusicTracks, MusicalInstruments, OfficeProducts, OutdoorLiving, PCHardware, PetSupplies, Photo, Restaurants, Software, SportingGoods, Tools, Toys, VHS, Video, VideoGames, Wireless y WirelessAccessories. Por defecto busca con el Tag de “All”.
Os dejo un ejemplo:
[PHP]

$caratula){
echo ‘‘.’‘;
}
?>
[/PHP]

La segunda función que os dejo es una sencilla y útil. El famoso Quiso decir de google.
Si google tiene casi toda la información del planeta las palabras con mayor numero de ranking en google suelen ser las que mas se utilizan en un tema concreto y esa es la utilizad del Quiso decir. No dice solo si esta bien una palabra ortográficamente, si no que también lo aplica a nombres tí­tulos sustantivos o cualquier otra cosa dentro de su contexto, lo que proporciona mayor numero de aciertos.
utilizar esta función es tan sencillo como insertar un texto, y si google cree que no esta bien escribirá la palabra que cree que está mal en negrita, pero corregida. Si google cree que esta bien lo dejará escrito como esté.

Ejemplo:
[PHP]

[/PHP]

Visto lo que hay ahora si a alguien le interesan, aquí­ os las dejo:
FUNCIí“N CARíTULAS:
[PHP]
(.+)

!U’;

switch ( $size ) {
case ‘XS’: $size = ‘SCTHUMBZZZ’; break;
case ‘S’: $size = ‘SCTZZZZZZZ’; break;
case ‘M’: $size = ‘SCMZZZZZZZ’; break;
case ‘L’: $size = ‘SCLZZZZZZZ’; break;
default: $size = ‘SCTZZZZZZZ’; break;
}
$query = str_replace(“MZZZZZZZ”, $size, @file_get_contents($url));
preg_match_all($exp_info,$query,$info);
$salida = $info[3];
break;

case “amazon”:
$url = ‘http://webservices.amazon.com/onca/xml?’;
$url .= ‘Service=AWSECommerceService&’;
$url .= ‘AWSAccessKeyId=0NK019CD48HNEDK3PBG2&’;
$url .= ‘Operation=ItemSearch&’;
$url .= ‘SearchIndex=’.$type.’&’;
$url .= ‘ResponseGroup=Large,Images&’;
$url .= ‘Keywords=’.urlencode($query);

switch ( $size ) {
case ‘XS’: $size = ‘Small’; break;
case ‘S’: $size = ‘Swatch’; break;
case ‘M’: $size = ‘Medium’; break;
case ‘L’: $size = ‘Large’; break;
default: $size = ‘Large’; break;
}

$exp_info = ‘!http://(.+)!U’;

$query = @file_get_contents($url);
preg_match_all($exp_info,$query,$info);
$salida = $info[1];
break;
}
return $salida;
}
?>
[/PHP]

FUNCIí“N QUISO DECIR:
[PHP]
(.+)!U’;
$exp_info = ‘! decir: (.+)class=p>(.+)
[/PHP]