> Manuales > Taller de PHP

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.

En este artículo veremos cómo trabajar con el API de Youtube, concretamente con YouTube API v2.0 - API Query Parameters. Realizaremos consultas a la API mediante URLs con parámetros por GET, cuya respuesta generará un archivo 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).

https://gdata.youtube.com/feeds/api/videos?q=desarrolloweb&max-results=10&orderby=title&start-index=5

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

Nota: Esto nos sirve para parámetros como "license" que necesitan la versión 2 de la API. Se recomienda siempre usar la última versión.

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.

category: Buscar vídeos de una categoría en concreto. duration: Filtra la búsqueda según la duración de los vídeos. license: Podemos filtrar según la licencia del vídeo. orderby: Para ordenar la búsqueda de alguna manera. time: Filtra según fueron publicados. q: Palabras clave de la búsqueda. lang: Filtrar por lenguaje, utiliza la norma ISO_639-1 region: Filtrar por país, utiliza la norma ISO_3166 Veamos un ejemplo con varios de estos parámetros:

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

Nota: Los parámetros señalados son aquellos que tienen mayor importancia. Puedes encontrarlos todos con sus descripciones en la documentación.

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.

Nota: Por supuesto, el archivo XML que tenemos que enviar para porcesarse debe tener una estructura bien definida de etiquetas (tags), pero de eso se encarga el API de Yotube.

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 resultados

enlace 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...

Manual