Buscador Youtube con PHP

Youtube ha lanzado recientemente su nueva YouTube Data API que esta totalmente integrada con los servicios de Google, mediante la cual se puede acceder a la información de los vídeos alojados en este servicio. Aprovechando esta información implementaremos un buscador de vídeos Youtube utilizando PHP y SimplePie para mostrar la información.

YouTube Data API
La nueva API lanzada por YouTube es mucho mas potente y sencilla de utilizar, de acuerdo a la documentación se procede a envíar varios parámetro a cierta URL y nos devuelve un XML que puede ser Atom, RSS. En nuestro caso veremos la forma de obtener un listado de vídeos de acuerdo a un criterio de búsqueda. Para ello podemos acceder a la siguiente ruta:

http://gdata.youtube.com/feeds/videos

Este URL puede recibir varios parámetros por método GET, pero listamos los mas importantes y que vamos a utilizar.

  • alt: El formato del resultado del feed, puede ser atom, rss o json.
  • start-index: En el indice inicial para la lista de resultados de la busqueda.
  • max-results: Numero de resultados mostrados en la lista.
  • vq: criterio de búsqueda

Luego si deseamos buscar por ejemplo ‘Santana’ y mostrar los primero 10 resultados en RSS, deberíamos acceder a la siguiente ruta:

http://gdata.youtube.com/feeds/videos?vq=santana&alt=rss&start-index=1&max-results=10

Hasta el momento ya sabemos de donde extraer la información, lo siguiente es mostrarlo en nuestra página.

Mostrando la lista de vídeos
Como el resultado del API es un feed, podemos utilizar SimplePie, el cual es un parser de Feeds hecho en PHP del cual hemos comentado en SimplePie: Parser RSS o Atom.

Creamos un archivo llamado functions.php que contendrá las funciones necesarias para el funcionamiento de nuestro buscador. getVideoid, toma el URL y devuelve el Id del video, getVariable devuelve la variable pasada por método GET y si no existe esta variable devuelve un valor por defecto, feed2txt elimina todos los tags HTML de un texto.

function getVideoid($varurl) {
	$varid = str_replace("http://gdata.youtube.com/feeds/videos/", "", $varurl);
	return $varid;
}
function getVariable($vparam, $vdefault) {
	$result = $vdefault;
	if (isset($vparam)) {
  		$result = (get_magic_quotes_gpc()) ? $vparam : addslashes($vparam);
	}
	return $result;
}
function feed2txt($document){
	$search = array('@]*?>.*?@si',
				    '@]*?>.*?@siU',
				    '@<[\/\!]*?[^<>]*?>@si',
				    '@@'
	);
	$text = preg_replace($search, ' ', $document);
	
	$excerpt_length = 60;
	$words = explode(' ', $text, $excerpt_length + 1);
	if (count($words) > $excerpt_length) {
		array_pop($words);
		array_push($words, '[...]');
		$text = implode(' ', $words);
	}
	return trim($text);
}

Luego procedemos a crear nuestra página, donde en primer lugar incluimos simplepie.inc y functions.php, luego creamos las variables necesarias para crear el URL a consultar.

require("simplepie.inc");
require("functions.inc");
$pageUrl = "http://gdata.youtube.com/feeds/videos";
$pageSiz = 10;
$pageQue = getVariable($_GET["query"], "oasis");
$pageNum = getVariable($_GET["page"], 1);
$pageIni = $pageNum*$pageSiz-9;
$pageEnd = $pageUrl."?vq=".$pageQue."&start-index=".$pageIni."&max-results=".$pageSiz."&alt=rss";

Notese que hemos creado una función llamada getVariable, que devuelve la variable pasada por método GET y si no existe esta variable devuelve un valor por defecto. $pageUrl contiene el URL al cual debemos acceder para tener el resultado de la búsqueda. Continuando creamos una instancia de SimplePie para parsear el Feed recién creado.

$vfeed = new SimplePie();
$vfeed->feed_url($pageEnd);
$vfeed->init();
$vfeed->handle_content_type();
$vmax = $vfeed->get_item_quantity();

Lo siguiente es recorrer el listado e imprimirlo en nuestra página, para ello creamos un FOR para recorrer todo el listado y utilizamos get_item para obtener cada registro que luego mostramos.

<?php
for ($x = 0; $x < $vmax; $x++) { 
	$vitem = $vfeed->get_item($x);
	$video = getVideoid($vitem->get_id());
	$vurl = "http://www.youtube.com/watch?v=".$video;
	$vtitle = $vitem->get_title();
?>
<p>
<a href="<?php echo $vurl; ?>"><?php echo $vtitle; ?></a>
<br><em><?php echo $vitem->get_id(); ?></em>
<br><?php echo feed2txt($vitem->get_description()); ?><br>
<img src="http://img.youtube.com/vi/<?php echo $video; ?>/2.jpg">
</p>
<?php
}
?>

Uniendo estos bloques de código ya podemos mostrar el resultado de la búsqueda en nuestra página, el cual tiene la siguiente forma:

sprytube-demo.gif

Lo que sigue es agregar el campo de texto para ingresar la búsqueda, crear una hoja de estilos para mejorar la apariencia y los enlaces para la paginación de resultados, agregar el reproductor de vídeo y la opción para descargar videos. Luego de todos estos agregados obtenemos nuestro tan esperado Buscador Youtube con PHP.

sprytube-test.gif

Finalmente les dejo los archivos fuente de este ejemplo, por favor si lo utilizan pongan un enlace a este blog, es la única forma de colaborar para seguir trabajando en este tipo de proyectos.

Comentarios Total 61 comentarios

pablo
Publicado: 18/12/2009 11:15 pm

hola probe el buscador todo bien busca los videos pero no los reproduce eso no entiendo gracias

unijimpe
Publicado: 19/12/2009 12:27 am

Pablo, este ejemplo es antiguo y ahora he mejorado, agregado mas funcionalidades y lo he puesto en venta, puedes leer mas en:
http://sprytube.unijimpe.net

Cusco
Publicado: 25/01/2010 9:17 am

lo que queria para mi web gracias …..

Cusco
Publicado: 25/01/2010 9:22 am

gracias gentita esta bueno el ejemplo lo probe y funciona no necesita bd esta ok

Chichote
Publicado: 13/09/2010 11:38 am

Hola, paso a dejar mi grano de arena, hice un pequeño script para shadowbox, para seleccionar videos desde una pagina contenida con shadowbox y pasar el id de youtube a la pagina principal, algo similar a lo que hace facebook, y tome de ejemplo este script de youtube, por cierto deje sus creditos.

http://chichote.com/2010/pasar-variable-desde-shadowbox-a-ventana-padre-o-contenedora/

saludos.


[…] uno basico y un ejemplo con un buscador de youtube que saque como ejemplo de los chicos de unijimpe el cual adapte para que funcione con este […]

Raul
Publicado: 26/01/2012 10:20 am

Hola que tal, tengo una duda, como le hago para obtener SOLALEMTE los siguientes daTOS:

TOTAL DE VIDEOS
RATING del VIDEO
AUTOR DEL VIDEO

Gracias por la ayuda :)

Luisi
Publicado: 26/01/2012 2:19 pm

Buenas tardes, por favor alguien que me pueda ayudar, se lo agradesco de antemano, no se como puedo obtener en variables separadas lo de:

Rating,
Cantidad total de videos encontrados

Gracias por la ayuda

fido-strike
Publicado: 22/02/2012 11:35 am

El uso de la memoria es muy elevado, pero el script es muy bueno, de hecho, lo estuve usando en un proyecto por mucho tiempo, hasta que por cuestiones de SEO tuve que quitarlo. ejemplo de uso de memoria:
1856.5 KB de 2560 KB

rikardo
Publicado: 05/05/2012 2:43 am

unijimpe ayudame porafavor yo tengo este buscador pero no c como hacer para q este en horizontal y no en vertical como sale por defecto haver si me puedes ayudar estoy haciendo una web y esto es lo ultimo q me falta ayudenme porfavor

heis
Publicado: 15/08/2012 6:50 am

Gracias por tus aportes…

 

Comentar

En este blog los comentarios están moderados, serán mostrados cuando el administrador los apruebe. Por favor, evita comentarios ofensivos u obscenos por que no serán aprobados.
Si deseas publicar código fuente debes hacerlo entre las etiquedas <code> y </code>, además debes reemplazar los carácteres < por &lt; y > por &gt;.

(Requerido)

(Requerido, no será publicado)

(Requerido)

(Tags aceptados: <a> <em> <strong> <code> <ul> <li>)