Comunidad PHPeros
Lenguajes => PHP => Tutoriales PHP => Mensaje iniciado por: GuayAngel12 en 05 de Septiembre de 2011, 13:54:18 pm
-
Buenas a todos, llevo mucho tiempo sin aportar nada a la Comunidad, por lo que ahora me decido y voy a aportar una función que nos permite validar un video de YouTube.
function youtube_validator($dir){
$explode = explode('watch?v=',$dir); //Este explode separa la URL.
$explode2 = explode('&',$explode[1]); // Este explode separa la URL. Quedando solo la ID del video.
$id = $explode2[0]; // ID del video
if(strlen($id) == 11){ // Si la longitud del video es de 11 carácteres...
$url = 'http://i2.ytimg.com/vi/'.$id.'/default.jpg'; // Dirección de la imagen principal del video.
if($conex= @fopen($url,"rt")){ // Si se puede abrir y leer la imagen...
return true; // Devolver TRUE
} else { // Si no...
return false; // Devolver FALSE
} // Cerramos el IF
} else { // Si no...
return false; // Devolver FALSE
} // Cerramos el IF
} // Cerramos el IF
¿Cómo lo implementamos en nuestro código? - Pues de la siguiente manera:
if(youtube_validator(URL)){
echo 'El video existe';
} else {
echo 'El video NO existe';
}
NOTA: Éste sistema solo funciona con aquellos hostings que tengan activada la funcion fopen().
Espero que les haya gustado el aporte.
Saludos,
Ángel Q.
-
Hola Ángel,
Aunque yo ya sabía como hacerlo es interesante siempre tener información a mano.
Por mi parte tienes un K+ ;-)
Un saludo,
Siquillote.
-
Muchas gracias Siquillote.
Si por casualidad encontráis algun error en el código, comunicádmelo y lo modifico. ;)
Saludos,
Ángel Q.
EDITO: ¿A nadie más le interesa? o ¿Soys unos vaguillos que os cuesta comentar? :D
-
Muchas gracias Siquillote.
Si por casualidad encontráis algun error en el código, comunicádmelo y lo modifico. ;)
Saludos,
Ángel Q.
EDITO: ¿A nadie más le interesa? o ¿Soys unos vaguillos que os cuesta comentar? :D
No es que no me interesaba, recién lo veo B:
En fín, me servirá, tienes +1 ;)
-
Muchas gracias ThomasThomas.
Espero que te sirva ;)
Saludos,
Ángel Q.
-
No se si sea yo pero, ¿No es mas fácil, corto y efectivo hacerlo usando expresiones regulares?
Saludos.
-
No se si sea yo pero, ¿No es mas fácil, corto y efectivo hacerlo usando expresiones regulares?
Saludos.
Él está validando que el video exista
-
Él está validando que el video exista
Ahh, ya.
Pensé que estaba validando la dirección.
-
Es lo que pasa por pasarse por alto el título del Tema. xD
Saludos,
Ángel Q.
-
Noooooooooo lo andaba buscando! K+!
PD: Si le cambias el nombre de la función a "video_exists" (para que sea un "clon" de "file_exists") quedará mejor en un if :P
<?php
if(video_exists('http://youtube.com/watch?v=soyunvideoguay'))
echo 'Existe :P';
else
echo 'No existe D:';
?>
:D
Queda mejor, ¿no? :D (es una sugerencia, no una crítica ^^)
EDIT:
No funciona, siempre devuelve TRUE, para eso debes obtener los headers y buscar si hay error 404... entonces devuelves true o false ;) luego intento hacerlo y lo dejo aquí :D
-
Ah, pues ami desde LOCALHOST me funcionaba perfectamente. :confused:
Saludos,
Ángel Q.
-
Ah, pues ami desde LOCALHOST me funcionaba perfectamente. :confused:
Saludos,
Ángel Q.
Claro, pero es porque aunque metas un ID que no existe saldra la imagen de youtube por defecto y muestra true, pero si miras los headers de un ID que no existe comprobaras que si da error 404 ;)
-
Ah, pues no lo sabía...
Siento mostrar una funcion que no sirve...
Saludos,
Ángel Q.
-
Ah, pues no lo sabía...
Siento mostrar una funcion que no sirve...
???... Claro, porque es mucho mejor lamentar el hecho que buscarle una solución.
Bravo.
-
Ah, pues no lo sabía...
Siento mostrar una funcion que no sirve...
Saludos,
Ángel Q.
¿No será mas fácil coger y verificar si la imgaen que obtienes es la de default si no existe el video y devolver false y en caso contrario saber si existe o no existe?...
Un saludo,
Siquillote.
-
Aunque ponga ésta dirección: http://i2.ytimg.com/vi/cacacacacac/default.jpg La imagen de default existe. Pero el video no existe.
Saludos,
Ángel Q.
-
Ah, pues no lo sabía...
Siento mostrar una funcion que no sirve...
Saludos,
Ángel Q.
No pasa nada, todos nos equivocamos ???... Claro, porque es mucho mejor lamentar el hecho que buscarle una solución.
Bravo.
Si, tu ayuda...
La solución sería obtener los headers:
<?php
$headers = get_headers($url);
?>
Y aquí la función:
<?php
function video_exists($id){
$d = get_headers('http://i2.ytimg.com/vi/'.$id.'/default.jpg'); //obtener cabeceras
//$d es un array, el ['0'] es el status (404 = not found, 403 = forbidden, 200 = OK)
if(stristr($d['0'], '404 Not Found') === true){ //si es 404
return false; //no existe
}elseif(stristr($d['0'], '200 OK')){ //y si es 200
return true; //si existe
}
return false; //si no es ninguno de los dos de antes, no existe
}
?>
¿Qué hago?
1.- Obtengo los headers en la variable $d, pero sólo necesito el index 0 ($d['0']) que es el status de la petición. Devuelve HTTP/1.(version) (codigo) (estado texto). Ejemplo: HTTP/1.1 200 OK
2.- Compruebo si en el status está el código del error (404 / 200) y devuelvo false en caso de 404 y true en caso de 200 :D
Espero haber ayudado,
saludos :)
-
Aunque ponga ésta dirección: http://i2.ytimg.com/vi/cacacacacac/default.jpg La imagen de default existe. Pero el video no existe.
Saludos,
Ángel Q.
Y justo por eso, siempre devuelve true.
-
???... Claro, porque es mucho mejor lamentar el hecho que buscarle una solución.
Bravo.
Si, tu ayuda...
Su respuesta a la problemática no me motivó para nada a brindarle apoyo.
<?php
function video_exists($id){
$d = get_headers('http://i2.ytimg.com/vi/'.$id.'/default.jpg'); //obtener cabeceras
//$d es un array, el ['0'] es el status (404 = not found, 403 = forbidden, 200 = OK)
if(stristr($d['0'], '404 Not Found') === true){ //si es 404
return false; //no existe
}elseif(stristr($d['0'], '200 OK')){ //y si es 200
return true; //si existe
}
return false; //si no es ninguno de los dos de antes, no existe
}
?>
Pienso que puedes ir directo al grano, porque el único caso en que la respuesta es verdadera es cuando trae el código 200.
function video_exists($id){
$d = get_headers('http://i2.ytimg.com/vi/'.$id.'/default.jpg');
if(stristr($d['0'], '200 OK'))
return true;
else
return false;
}
-
Bueno, muchísimas gracias tanto a nmartin021 como a Physlet.
Saludos,
Ángel Q.
-
Si, tu ayuda...
Su respuesta a la problemática no me motivó para nada a brindarle apoyo.
Pienso que puedes ir directo al grano, porque el único caso en que la respuesta es verdadera es cuando trae el código 200.
function video_exists($id){
$d = get_headers('http://i2.ytimg.com/vi/'.$id.'/default.jpg');
if(stristr($d['0'], '200 OK'))
return true;
else
return false;
}
K+ por la función