Cómo recibir datos de los vídeos de Youtube a través de su API y las funciones de PHP para procesar archivos XML.
Los XML con los que trabajaremos tendrán un aspecto como este. Aunque a primera vista parece muy extenso y complicado, nos servirá para trabajar cómodamente en PHP con sus datos.
Entendiendo cómo funciona esta API
Como he dicho antes, básicamente se trata de llamar a una URL de la API, a la que le pasaremos unos parámetros que nos proporciona Google. Al hacerlo, veremos un archivo XML que se genera como respuesta, el cual está estructurado mediante etiquetas como ENTRY, ID, TITLE, etc.El XML que recibiremos es en realidad un "feed Atom" donde encontraremos un conjunto de resultados, en el que se representará distinto tipo de información. Por ejemplo, el tag ENTRY encapsulará una entidad como un vídeo, playlist, suscripción, contacto o cualquier otro elemento. A su vez tendrá dentro otras etiquetas para contener detalle de las informaciones de esa entrada.
En la documentación de la API de Youtube nos muestran un ejemplo de respuesta en XML que nos sirve para entender el formato de los datos que obtendremos a la hora de consultar la API.
Generando el archivo que necesitemos
Básicamente, hay tres tipos de URL a las que podemos pasar los parámetros que necesitemos.1.- La primera es https://gdata.youtube.com/feeds/api/videos que va a la lista de vídeos de Youtube. A ésta le podremos pasar parámetros de búsqueda, longitud de búsqueda, etc.
En el siguiente ejemplo buscamos "Desarrolloweb" le pedimos 20 vídeos, los ordenamos por título y solicitamos los resultados a partir del quinto (por lo tanto, los 4 primeros ni los veremos).
Veamos las variables importantes que usa por GET esta API, con las cuales podremos trabajar para generar nuestro XML personalizado:
v: le decimos qué versión de la API queremos consultar
- Versión 2.0 de la API: v=2
Este enlace no usa la versión 2 y su búsqueda no se completa: https://gdata.youtube.com/feeds/api/videos?license=cc
Este enlace sí usa esta versión y su búsqueda se completa: https://gdata.youtube.com/feeds/api/videos?license=cc&v=2
caption: Para buscar vídeos que tengan o no subtítulos.
- Con subtítulos: caption=true o caption
- Sin subtítulos: caption=false
- Forma de uso: category=Nombrecategoria
- Vídeos de menos de 4 minutos: duration=short
- Vídeos entre 4 y 20 minutos: duration=medium
- Vídeos de más de 20 minutos: duration=long
- Licencia Creative Commons: license=cc
- Licencia estándar de youtube: license=youtube
- Orden por relevancia: orderby=relevance
- Orden por orden cronológico: orderby=published
- Orden de los más a los menos vistos: orderby=viewCount
- Orden de los mejores a los peores puntuados: orderby=rating
- Vídeos de hoy: time=today
- Vídeos de esta semana: time=this_week
- Vídeos de esta semana: time=this_week
- Vídeos de esta semana: time=this_week
- Una palabra: q=desarrolloweb
- Más palabras: q=desarrolloweb+programar+banner
- Búsqueda en español: lang=es
- Búsqueda en España: región=ES
https://gdata.youtube.com/feeds/api/videos?q=web&lang=es&license=cc&duration=medium&v=2
Ahora el mismo ejemplo sin el parámetro v=2, donde podemos observar que deja de funcionar y nos dice exactamente qué parámetro falla.
https://gdata.youtube.com/feeds/api/videos?q=web &license=cc&duration=medium
2.- La siguiente es https://gdata.youtube.com/feeds/api/videos/ID_VIDEO que nos da información sobre un vídeo en concreto, donde el ID del vídeo es aquel lque encontramos en http://youtube.com?v=ID_VIDEO
Este sería un ejemplo de URL para obtener la información de un vídeo.
https://gdata.youtube.com/feeds/api/videos/kEogJacjLTE
3.- La tercera que considero imprescindible es https://gdata.youtube.com/feeds/api/videos/ID_VIDEO/comments en esta accederemos a los comentarios del vídeo elegido.
Por ejemplo, así accedemos a los comentarios de un vídeo
https://gdata.youtube.com/feeds/api/videos/kEogJacjLTE/comments
Recogiendo mediante PHP la información necesaria
Una vez que hemos entendido cómo funciona la API y qué tipos de URL podemos generar para obtener información de Youtube, nos queda ponernos manos a la obra para procesar esos datos por medio de PHP.Afortunadamente, PHP tiene funciones para interpretar un XML de una manera sencilla. Una buena opción para recoger toda esta información y trabajar con ella es usar la función simplexml_load_file(), a la que le pasamos el nombre de un archivo en formato XML para procesar.
La función PHP simplexml_load_file() devolverá un objeto de clase SimpleXMLElement que nos permitirá acceder a los datos del XML por medio de sus propiedades.
Por ejemplo, de una estructura así:
<entry>
<comment>
<author> Webmaster </author>
</comment>
</entry>
Podríamos tratarla de esta manera:
$datos = simplexml_load_file("http://gdata.youtube.com/feeds/api/videos/ kEogJacjLTE /comments");
$autor = $datos->entry->comment->author
Dado el XML anterior, la variable $autor nos almacenará la cadena "Webmaster".
Por otro lado nos podemos encontrar una estructura así:
<entry>
<media:group>
<media:description> Bonita descripción </ media:description >
</ media:group >
</entry>
En ese caso lo trataremos igual con un ligero cambio:
$datos->entry->children("media",true)->group->description
Ejemplo práctico
En este ejemplo práctico vamos a coger el título de un vídeo e imprimiremos todos sus comentarios.
//Primero de todo cogemos el título del vídeo.
$id = "kEogJacjLTE";
$datos = simplexml_load_file("http://gdata.youtube.com/feeds/api/videos/".$id);
echo "Video: <a href='http://www.youtube.com/watch?v=".$id."' target='_blank'>".$datos->title."</a>";
//Ahora los comentarios
$datos = simplexml_load_file("http://gdata.youtube.com/feeds/api/videos/".$id."/comments"); foreach($datos->entry as $comment){
echo "<div><h3>".$comment->author->name."</h3><span>".$comment->content."</span><br><br></div>";
}
Ejemplo práctico 2
En este ejemplo hacemos una búsqueda con y mostramos resultadosenlace a ejemplo API_ytb_PHP2.php
//Este documento es propiedad de Desarrolloweb.com
$xml = "https://gdata.youtube.com/feeds/api/videos?q=web&license=cc&duration=medium&v=2"; //url de la api a consultar
$datos = simplexml_load_file($xml); //lo cargo como archivo xml
//mostramos de cada video diferentes datos
foreach($datos->entry as $video){
echo "<div><h3>".$video->author->name."</h3>
<span>Publicado el: ".$video->published."</span><br>
<span>Titulo: ".$video->title."</span><br>
<span>Palabras clave: ".$video->children("media",true)->group->keywords."</span><br>
<span>Descripcion: ".$video->children("media",true)->group->description."</span><br>
<br><br></div>";
}
Ambos ejemplos PHP para el acceso al API de Youtube se pueden descargar en este archivo.
Enrique Fernandez Guerra
Desarrollador web Frontend, especializado en Javascript y TypeScript. Trabaja ac...