API de datos de YouTube para ActionScript 3.0 : Primeros pasos

Este artículo fue escrito y enviado por un programador externo. El equipo de API y herramientas de YouTube agradece a Martin Legris por su tiempo y experiencia.


Martin Legris
Marzo de 2008

Introducción

En este instructivo te mostraré cómo, con menos de 10 líneas de código AS3 real, puedes recuperar los videos más populares en YouTube para los últimos day, week, month o all_time. Puede obtener cualquiera de los feeds estándar:

  • Más vistos
  • Más recientes
  • Más comentados
  • Más enlazados
  • Con más respuestas
  • Destacados recientemente
  • Mejor calificadas
  • Los Favoritos
  • Videos para teléfonos celulares

La biblioteca que se utiliza en este ejemplo está mal escrita, por lo que, una vez que recibas los datos, podrás usar la función de autocompletar en IDE, como FlashDevelop, Flex IDE, Eclipse w/FDT y IntelliJ Idea, entre otros.

Recursos importantes

Antes de comenzar, te presentamos una lista de los recursos disponibles para ti: el desarrollador de AS3 interesado en utilizar datos de la API de YouTube.

Información detallada

Cómo realizar tu primera solicitud

El código siguiente es bastante bien comentado. Sin embargo, describiré la funcionalidad un poco antes de comenzar. El punto de partida para todas las solicitudes es una clase llamada YouTubeClient. Esta clase es un singleton al que puedes acceder haciendo lo siguiente:

// first you import it
import ca.newcommerce.youtube.webservice.YouTubeClient;

// then you get a reference to it
var client:YouTubeClient = YouTubeClient.getInstance();

Ya estamos listos para realizar una solicitud:

client.getStandardFeed(YouTubeClient.STD_TOP_RATED, 
                                 YouTubeClient.TIME_MONTH,
                                 1, 
                                 10);

Acabo de solicitar los videos mejor calificados durante los resultados del mes pasado, del 1 al 10 (ten en cuenta que hay un máximo de 50 resultados por llamada). ¡Fácil!

Cómo manejar los resultados

¿Cómo accedo a estos resultados? Dado que el paradigma de servicio web de tipo REST es asíncrono, es más fácil usar los eventos para controlar los resultados que para detener el código mientras se recuperan los resultados. En este caso, debemos declarar un objeto de escucha de eventos para el evento StandardVideoFeedEvent.STANDARD_VIDEO_DATA_RECEIVED. Se llamará a nuestra función cada vez que el YouTubeClient reciba una respuesta para un feed estándar.

client.addEventListener(StandardVideoFeedEvent.STANDARD_VIDEO_DATA_RECEIVED, 
                        doVideosReceived);

La función a la que se llamará será doVideosReceived. Tomará un parámetro, una variable de tipo StandardVideoFeedEvent. Esto sigue el estándar de AS3. Declarámoslo y haremos un seguimiento de algunas cuestiones relacionadas con los videos que recibimos. Haremos un seguimiento hasta la salida estándar:

  • el título del video,
  • la URL del SWF para insertar el video,
  • el recuento de vistas,
  • el recuento de comentarios,
  • la duración del video,
  • y el nombre del autor.
function doVideosReceived(evt:StandardVideoFeedEvent):void
{
	// get a reference to the feed containing the videos
	var feed:VideoFeed = evt.feed;
	
	// variable to hold each video retreived on the feed
	var video:VideoData;
	
	// iterate through the availabe results
	while(video = feed.next())
	{
		  // trace a newline followed by the video title
		  trace("\nvideo title:"+video.title);
		  
		  // trace the url to use to embed the flash player with this video playing in it..
		  trace("player url:"+video.swfUrl);
		  
		  // the view count
		  trace("viewCount:"+video.viewCount);
		  
		  // the comment count
		  trace("commentCount:"+video.commentCount);
		  
		  // the duration
		  trace("duration:"+video.duration);
		  
		  // the author
		  trace("author:"+video.authors.first().name);
	}
}

Algunas notas sobre la biblioteca y los feeds

Casi todos los eventos tienen una propiedad .feed. ProfileEvent es la única excepción, pero tiene una propiedad .profile, ya que esta llamada muestra solo un registro.

Existen muchos tipos de feeds; todos implementan los siguientes métodos:

  • first(): Recupera el primer registro y apunta a él.
  • next(): Recupera el siguiente registro disponible.
  • last(): Recupera el último registro y apunta a él.
  • previous(): Recupera el registro anterior en el feed.
  • getAt(): Obtiene un resultado en una posición específica.
  • count(): La cantidad de resultados disponibles para este feed, no es la misma que la de totalResults

Cuando llegas al final de los resultados, next() muestra un valor nulo. Lo mismo que en el caso anterior, una vez que obtengas el primer resultado, la siguiente llamada a previous() mostrará null.

Ten en cuenta que los datos dentro de los feeds (p.ej., las categorías) se unen dentro de Iterators, por lo que puedes usar las mismas funciones para analizar las categorías disponibles.

Código fuente completo

A continuación, se muestra el código fuente completo para este ejemplo. Puedes descargar un archivo zip que contenga todo lo que necesitas para ejecutar el ejemplo dentro de Flash CS3; sin embargo, es mejor actualizar la biblioteca en caso de que hayamos corregido errores o actualizaciones de funciones. Para descargar la biblioteca, haz clic aquí.

package
{
    // first import dependencies (You can be more specific than this if you want)
    import ca.newcommerce.youtube.data.*;
    import ca.newcommerce.youtube.events.*;
    import ca.newcommerce.youtube.feeds.*;
    import ca.newcommerce.youtube.iterators.*;
    import ca.newcommerce.youtube.webservice.YouTubeClient;

    public class ytTest()
    {
        // some class variables
        protected var _ws:YouTubeClient;
        protected var _requestId:Number;

        public function ytTest()
        {
            // now inside of an init function
            _ws = YouTubeClient.getInstance();

            // register to list to the events you are interested in
            _ws.addEventListener(StandardVideoFeedEvent.STANDARD_VIDEO_DATA_RECEIVED, doVideosReceived);

            // do your call.. get the Top Rated videos for the last month
            // results 1 to 10; it returns a requestId
            _requestId = _ws.getStandardFeed(YouTubeClient.STD_TOP_RATED,
                                                YouTubeClient.TIME_MONTH, 
                                                1,
                                                10);
        }

        protected function doVideosReceived(evt:StandardVideoFeedEvent):void
        {

            // get a reference to the feed containing the videos
            var feed:VideoFeed = evt.feed;

            // variable to hold each video retrieved on the feed
            var video:VideoData;

            while(video = feed.next())
            {
                // trace a newline followed by the video title
                trace("\nvideo title:"+video.title);

                // trace the swf URL (used for embedding)
                trace("player url:"+video.swfUrl);

                // the view count
                trace("viewCount:"+video.viewCount);

                // the comment count
                trace("commentCount:"+video.commentCount);

                // the duration
                trace("duration:"+video.duration);

                // the author
                trace("author:"+video.authors.first().name);
             }

        }

    }

}

Conclusión

Aunque en este artículo apenas se toca la punta del iceberg, se te dará una idea de lo sencillo que es consultar la API de datos de YouTube con esta biblioteca. Dado que me he tomado el tiempo para escribir todo de forma exhaustiva, es muy fácil explorar qué datos están disponibles en cada respuesta de feed. Todavía no es compatible con la nueva función de escritura y carga, pero si deseas colaborar con la biblioteca, visita la página del proyecto.

Biografía del autor


AUTHORNAME

Martin Legris cuenta con 12 años de desarrollo de software activo. En la actualidad, se enfoca principalmente en la investigación sobre interfaces de usuario y su herramienta favorita es Flash w/ ActionScript. Visite su blog en blog.martinlegris.com y en el sitio web (puede estar desactualizado) en www.newcommerce.ca.

Licencia Creative Commons
Esta obra está sujeta a una licencia Creative Commons Atribución 3.0 de Estados Unidos.