Ir directamente al contenido de esta página

Integrar contenido de YouTube por medio de PHP

Después de que hemos explicado cómo incluir contenidos de los feeds de WordPress, Flickr y Twitter, le toca el turno a YouTube.

La mecánica que hemos seguido es la misma que empleamos con el Atom de Twitter: cargar el feed —definido en la guía para desarrolladores de la API de datos de YouTube— como un nuevo DomDocument y extraer la información pertinente —el título del vídeo, su identificador y la descripción— por medio de XPath, por lo que no vamos a repetir aquí la explicación; sólo nos vamos a centrar en un elemento adicional que hemos incluido.

Pero antes, la demo

El contenido son los últimos diez vídeos del canal de YouTube de Capcom Europa

…y el código:


$lista= array();
$xml = new DomDocument();
$c = curl_init();
curl_setopt($c,CURLOPT_RETURNTRANSFER,1); 
curl_setopt($c,CURLOPT_HEADER,0);
curl_setopt($c,CURLOPT_URL,'http://gdata.youtube.com/feeds/api/videos?max-results=10&orderby=published&author=CapcomEuro'); 
$feed = curl_exec($c);
curl_close($c);
$xml->loadXML($feed);
$xpath = new DOMXPath($xml);
$xpath->registerNamespace('atom','http://www.w3.org/2005/Atom');
$xpath->registerNameSpace('media','http://www.w3.org/2005/Atom');
$entradas = $xpath->evaluate('//atom:entry');
foreach($entradas as $e){
  $titulo = $xpath->evaluate('string(atom:title)',$e);
  $id = array_pop(explode('/',$xpath->evaluate('string(atom:id)',$e)));
  $descripcion = $xpath->evaluate('string(media:group/media:description)',$e);
  $lista[] = array($titulo,$id,$descripcion); 
}
 

La diferencia con los códigos arriba mencionados es la forma en la que cargamos el feed. Mientras que en los casos anteriores hacíamos una carga directa del archivo —por ejemplo, para el RSS de Flickr incluíamos la línea $xml->load('http://api.flickr.com/services/feeds/photoset.gne?set=número_del_set&nsid=id_del_usuario&lang=es-us&format=rss2');—, en el código actual obtenemos el archivo por medio de la librería cURL de PHP.

La cURL es una herramienta que nos permite transferir archivos por medio de la sintaxis de URL. En términos simples, lo que hacemos aquí es simular el acceso de un agente de usuario al feed, y guardar en una variable —$feed— el código del mismo.

¿Por qué empleamos cURL? Pues porque es posible que por motivos de seguridad nuestro proveedor de hosting haya inhabilitado la importación directa de archivos desde otro servidor.

Cargar un contenido público por medio de esta librería es sencillo:

En este punto ya tenemos nuestra variable $feed poblada con los contenidos del archivo. Lo único que queda es cargarla en nuestro DomDocument inicial como un archivo XML$xml->loadXML($feed);— y comenzar a procesarlo.

Esta entrada se publicó el 14 de junio de 2011, se archivó en , y fue etiquetada como , . Autor: Saúl González Fernández. Hay 7 comentarios ›.

Comentarios

  1. xema dice:

    Hola qué tal, estupendo el resultado del tutorial, aunque no me funciona. Despues de habilitar la libreria curl instalada en xamp descomentando en php.ini la entrada correspondiente y reiniciando Apache me encuentro que me encuentro con el siguiente error:

    Strict Standards: Only variables should be passed by reference in C:xampphtdocssubir_imagenes2videos.php on line 26

    He copiado al pie de la letra el codigo en el body del documento y por supuesto abriendo la etiqueta del codigo php y cerrandola con todo dentro. Ya que no estoy muy puesto en PHP, ¿podrías por favor detallar más este tutorial para ver porque me da ese problema? Y ya de paso con el efecto del scroll que has puesto en la demo. Gracias.

  2. xema dice:

    Por cierto la linea 26 dice esto:

    $id = array_pop(explode('/',$xpath->evaluate('string(atom:id)',$e)));

  3. @xema: Es curiosos lo que comentas porque probándolo en nuestra propia instalación no nos aparece la advertencia… Investigando un poco he llegado a este artículo que igual puede arrojar un poco de luz. Si lo he entendido correctamente, bastaría con que modificaras la línea discordante asignando el resultado de explode() a una variable temporal, así:

    
    $id = array_pop($vTemp=explode('/',$xpath->evaluate('string(atom:id)',$e)));
     

    Nosotros no podemos saber si funciona o no porque como te he dicho no recibimos el error de respuesta, pero prueba y nos comentas.

    Y sobre el efecto de scroll, no es más que una pequeña modificación del script que empleamos para crear un carrusel con desplazamiento horizontal, sólo que con desplazamiento vertical.

  4. carlos dice:

    Hola llevo varias horas intentado hacer lo que dicen que es «Lo único que queda es cargarla en nuestro DomDocument inicial como un archivo XML —$xml->loadXML($feed);— y comenzar a procesarlo».

    He probado usando el ejemplo que hay en esta liga http://digitalicon.es/blog/contenidos-rss-wordpress-php/, pero no logro nada.

    Si pongo echo $feed sí veo que feed esta poblado y me muestra el contenido del feed, pero lo que quiero cargar es el media:content y cada nodo por separarlo para darle estilo.

    ¿Me podrían ayudar?

    Muchas gracias.

  5. Saúl González Fernández dice:

    @Carlos: Prueba un print_r($lista) para asegurarte de que la matriz cuenta con todos los datos que debería haber extraído del feed. Si es así, sólo tienes que recorrerla para crear el marcado, por ejemplo:

    
    <ul id="lista">
    <?php foreach($lista as $l): ?>
      <li>
        <h2><?php echo $l[0]; ?></h2>
        <p><?php echo $l[2]; ?></p>
      </li>
    <?php endforeach; ?>
    </ul>
    
    
  6. carlos dice:

    Hola Saúl, muchísimas gracias por responder.

    Mira, he probado esto (tampoco soy muy letrado en PHP) y no he logrado nada:

    Al hacer print_r($lista) sólo me devuelve array(), por lo que entiendo que si hago el foreach que me indicas no obtendré nada, ¿es correcto?

    ¿Cómo puedo ver en dónde está el fallo?

    Gracias nuevamente.

  7. Saúl González Fernández dice:

    @Carlos: ¿Me puedes decir cuál es el ID del usuario de YouTube del que estás intentando obtener los vídeos?

¿Algún comentario?

* Los campos con un asterisco son necesarios

Últimos proyectos

© Digital Icon, S.L., 2007 – 2017