Funcion de extraccion de datos Youtube() en PHP version2
Hace un tiempo que me interese en los servicios de datos de YouTube y me decidà ha realizar una función que me ayudara a comprender los sistemas que utilizaba YouTube para organizarse y mantener una seguridad interna, y de aquello nació la función youtube(). Como ya comente en el anterior articulo, la fucnion youtube() se puede utilizar para extraer todos los datos de un vÃdeo en formad en forma de array de manera que podamos utilizarlo para lo que queramos.
Segun comenta Txabi en un comentario de la web parece que la duncion ha dejado de funcionar dando un error al no encontrar el parametro "t". Para solucionar esto solo tenéis que ir a la 6º linea donde pone $exp_info = '!&t=(.+)&sk=!U'; y quitar el sk= dejándolo asÃ, $exp_info = '!&t=(.+)&!U';. De esta manera encontrará el dato correctamente y volverá a funcionar.
Si a demás queremos recuperar la opción de ver la fecha en la que se ha subido el vÃdeo a youtube es mejor que utilicéis la nueva versión.
Para futuros problemas he decidido insertarle un parámetro de debug que permite diagnosticar diversos problemas para poder darles solución mas rápidamente. Para activar esta opción solo tenéis que poner true en la 2º variable y dará como resultado el diagnostico.
-
function youtube($id, $debug = false) {
-
$url = 'http://es.youtube.com/watch?v='.$id;
-
-
$exp_info = '!&t=(.+)&!U';
-
-
$exp_info = "!<meta name=\"title\" content=\"(.+)\">!U";
-
-
$exp_info = "!<meta name=\"description\" content=\"(.+)\">!U";
-
-
$exp_info = "!<span class=\"smallText\">(.+) de (.+) de (.+)</span>!U";
-
-
$exp_info = "<meta name=\"keywords\" content=\"(.+)\">";
-
-
$t = $t[1][0];
-
$titulo = $titulo[1][0];
-
$descripcion = $descripcion[1][0];
-
$fecha = $fecha[1][0].' de '.$fecha[2][0].' de '.$fecha[3][0];
-
$tags = $tags[1][0];
-
-
$salida["id"] = $id;
-
$salida["t"] = $t;
-
$salida["url"] = $url;
-
$salida["iurl"] = "http://img.youtube.com/vi/".$id."/2.jpg";
-
$salida["reproductor"] = "http://www.youtube.com/p.swf?video_id=".$id."&iurl=http://img.youtube.com/vi/".$id."/2.jpg&t=".$t;
-
$salida["video"] = "http://youtube.com/get_video.php?video_id=".$id."&t=".$t;
-
$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>";
-
$salida["title"] = $titulo;
-
$salida["descripcion"] = $descripcion;
-
$salida["fecha"] = $fecha;
-
$salida["tags"] = $tags;
-
-
if($debug){ //sistema de diagnostico
-
$salida['debug'] = $query;
-
$s['la url de lectura es'] = $url;
-
$s['lectura de video'] = ($query ) ? ’si' : 'no' ;
-
$s['t encontrado'] = ($t ) ? ’si' : 'no' ;
-
$s['titulo encontrado'] = ($titulo ) ? ’si' : 'no' ;
-
$s['descripcion encontrada'] = ($descripcion ) ? ’si' : 'no' ;
-
$s['fecha encontrada'] = ($fecha ) ? ’si' : 'no' ;
-
$s['tags encontrados'] = ($tags ) ? ’si' : 'no' ;
-
$s['contenido para debug'] = $salida;
-
return $s;
-
}
-
if($t == ""){ //Error de conexion
-
return false;
-
} else { // todo OK
-
return $salida;
-
}
-
}
mm interesante seria bueno que subieras un ejemplo y eso de $id en la funcion es la id del video de youtube cierto?
hola diabolik, el ejemplo seria el mismo que en el anterior POST, solo tienes que echarle un ojo.
Sobre la variable $id, si, es la ID de youtube, la puedes conseguir en cualquier vÃdeo desde el link que viene a la derecha. Si necesitas algo de información mas concreta solo tienes que escribir, un saludo.
!Gracias!
Importante, en el comando
$s['lectura de video'] = ($query ) ? ´si' : 'no' ;
Por alguna razón cuando se copia y se pega el caracter de COMILLA inicial del 'SI' se convierte en una tilde lo que ocasiona un error del compilador de php, recuerden cambiarla en caso que ocurra eso.
Cierto Lisandro.. algunas ' se convierten en ´ y algunos ” en "… es un problema del Wordpress que en esta versión no he podido solucionar…
Sera que puedes hacer el script, comprimirlo en un *.zip y subirlo por rapidshare¿? Me gustaria el de flash y el de PHP…
Lo siento "Anonimo" pero me parece que un Nick en internet es suficiente anónimo como para q pongas como datos de contacto "Anonimo" y como mail "email@falso.com". No ayudo a gente anónima..
[…] ejemplo y imitando a mi función de Youtube() he creado vimeo() que a partir del numero de ID que todos los vÃdeos tienen como prefijo en su […]
solo quiero subir un video al youtube por favor ayudenme
hola Danny, tendrÃas que especificar más… ¿quieres subir un video desde tu propia pagina web? ¿quieres subir un video a partir de PHP? ¿o solo quieres subir un video a youtube y no sabes utilizar Google?
Te respondo si la cuestión es la última.
Si solo quieres subir UN video tienes que hacerte una cuenta de usuario (busca en la parte de arriba, la primera de las 5 palabras que aparecer!) y una vez tengas la cuenta y entres en youtube arriba a la derecha pone en un botón SUBIR (por dios el único botón amarillo!).
Si era otra cosa lo que preguntabas x favor.. sácame de dudas.
Saludos, pueden ayudarme con esto.
Si aplico la funcion a este enlace
http://es.youtube.com/watch?v=FhIdXSM8BCw
No funciona, es decir no RETORNA los valores del arreglo, pero si lo hago a este otro
http://www.youtube.com/watch?v=091tJBMiALA&feature=related
Funciona perfectamente.
Gracias
Hola Lisandro, la función no fue creada para utilizar direcciones URL completas. Solo utiliza las ID.
De las direcciones anteriores de tu mano queda el realizar un código que identifique las ID dentro de las URL para que de las direcciones anteriores solo aparezcan respectivamente "FhIdXSM8BCw" y "091tJBMiALA".
A partir de estas 2 ID seguro que funciona correctamente todo.
Aviso a navegantes… me temo que han vuelto a cambiar la manera de acceder a la variable "t". Si alguien tiene alguna sugerencia lo agradeceré en el alma. Yo voy a investigar, si consigo dilucidar cómo hacerlo lo volcaré aquà asap.
Saludos!!!
Tx
Pido mil perdones. Ya está resuelto. No ha cambiado nada en la detección de la variable t, la función funciona a las mil maravillas.
Muchas gracias y perdón por el despiste… esto de despertarse a las 5 de la mañana tiene sus desventajas jejeje.
Saludos!!!
Tx
Puede ser mucho pedir, pero no tienen alguna función similar en as3?
Otra pregunta: la información sale de la URL o del contenido del swf que se obtiene ??
gracias
Hola Juan, pues no, la verdad es que el CS3 y el FLEX lo tengo un poco oxidado.. pero puedes importar los valores que necesites de la función directamente..
La función no usa nada de flash para funcionar. Obtiene el contenido de la web del vÃdeo y extrae a partir de expresiones regulares los datos necesarios, por eso es tan simple y rápida de actualizar…
Hey muchas gracias, ya implementé la función y trabaja muy bien, eso si me tocó desempolvar el manual de PHP para entender lo que se buscaba con las expresiones regulares.
Gracias
y por si a alguien le sirve este es el código la función en AS3 que SOLO devuelve la URL para obtener el video FLV
public function getFLV(id:String):Object
{
var result:Object = new Object();
var loader:URLLoader = new URLLoader();
var request:URLRequest = new URLRequest("http://www.youtube.com/watch?v=" + id);
loader.load(request);
loader.addEventListener(Event.COMPLETE, function(event:Event):void {
var loadFile:URLLoader = event.target as URLLoader;
if (loadFile != null){
var t:Array = loadFile.data.match(new RegExp("&t=.*?&"));
result["FLV"] = "http://www.youtube.com/get_video.php?video_id=" + videoID + "&t=" + t[0].substring(3, t[0].length-1);
}else{
trace("No se han podido cargar el archivo del video!");
}
});
return result;
}
vaya muchas gracias por la función Juan! un saludo y espero volver a leerte