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.
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.
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.
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
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
//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>";
}
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.