Ir directamente al contenido de esta página
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…
…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:
$c = curl_init();.CURLOPT_RETURNTRANSFER a verdadero le indicamos a nuestro servidor que la conexión es bidireccional, y que debe esperar a recibir la respuesta del servidor de destino. A CURLOPT_HEADER le asignamos un valor de falso, puesto que para el proceso posterior del archivo recibido no necesitamos las cabeceras HTTP de respuesta. Por último, la opción CURLOPT_URL nos permite especificar la dirección del archivo que queremos obtener.$feed = curl_exec($c);.curl_close($c);.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.
Somos un pequeño estudio fundado en 2007 por tres amigos y que actualmente cuenta con un nutrido grupo de colaboradores, todos ellos profesionales con entre ocho y once años de experiencia en diversos aspectos del desarrollo y la programación web.
Además, Digital Icon, S.L. (N.I.F.: B84622927) es una empresa inscrita en el Registro Mercantil de Madrid, Tomo 22 436, Libro 0, Folio 20, Sección 8, Hoja M-400861, Inscripción 1, conforme a los artículos 18 del Código de Comercio y 6 del Reglamento del Registro Mercantil.
Si quiere conocer un poco mejor cómo trabajamos, puede descargar una copia del contrato que firmamos con nuestros clientes o seguirnos en Google+:
Cliente: La Fábrica
División: MovilizaWeb
Nuestro trabajo: PHP, HTML5, CSS
Cliente: Ana del Val
División: EidoWeb
Nuestro trabajo: PHP, XHTML, CSS, JavaScript
Cliente: Guiomar González
División: EidoWeb
Nuestro trabajo: PHP, HTML5, CSS, jQuery
© Digital Icon, S.L., 2007 – 2012
Comentarios
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
bodydel 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.Por cierto la linea 26 dice esto:
$id = array_pop(explode('/',$xpath->evaluate('string(atom:id)',$e)));@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í: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.
¿Algún comentario?