API de datos de YouTube para ActionScript 3.0 : Primeros pasos

Un desarrollador externo escribió y envió este artículo. El equipo de APIs 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 de YouTube de los últimos day, week, month o all_time. Puedes 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 calificados
  • Favoritos
  • Videos para teléfonos celulares

La biblioteca que se usa en este ejemplo tiene un tipo fijo en todo el código, lo que significa que, una vez que hayas recibido los datos, puedes usar la función de autocompletado en IDEs como FlashDevelop, Flex IDE, Eclipse con FDT, IntelliJ Idea y muchos más.

Recursos importantes

Antes de comenzar, aquí tienes una lista de los recursos disponibles para ti, el desarrollador de AS3 interesado en usar datos de la API de YouTube.

Buen provecho

Cómo realizar tu primera solicitud

El siguiente código está bastante bien comentado. Sin embargo, describiré la funcionalidad un poco antes de profundizar. El punto de partida de todas las solicitudes es una clase llamada YouTubeClient. Esta clase es un singleton al que obtienes acceso de la siguiente manera:

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

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

Ahora tenemos todo listo para realizar una solicitud:

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

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

Cómo controlar los resultados

Ahora bien, ¿cómo puedo acceder a estos resultados? Dado que el paradigma de servicio web de tipo REST es asíncrono, es más fácil usar eventos para controlar los resultados en lugar de 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 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 en AS3. Debemos declararlo y hacer un seguimiento de algunos aspectos relacionados con los videos que recibimos. Haremos un seguimiento del resultado estándar:

  • el título del video,
  • la URL del SWF para incorporar el video
  • el recuento de vistas
  • la cantidad 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, tiene una propiedad .profile en su lugar, ya que esta llamada solo muestra un registro.

Existen muchos tipos de feeds, y 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 dirígete a él.
  • previous(): Recupera el registro anterior del feed.
  • getAt(): Obtén un resultado en una posición específica.
  • count(): La cantidad de resultados disponibles para este feed, no la misma que la de totalResults

Cuando llegas al final de los resultados, next() muestra un valor nulo. Lo mismo sucede con el anterior. Una vez que llegues al 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 recorrer las categorías disponibles.

Código fuente completo

El siguiente es el código fuente completo de este ejemplo. Puedes descargar un archivo ZIP que contiene todo lo que necesitas para ejecutar el ejemplo en Flash CS3. Sin embargo, es mejor actualizar la biblioteca en caso de que hayamos corregido errores o actualizado 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 este artículo apenas toca la punta del iceberg, te dará una idea de lo simple que es realizar consultas en la API de YouTube Data usando esta biblioteca. Como me tomé el tiempo de escribir todo, es muy fácil explorar qué datos están disponibles en cada respuesta del feed. Aún no admite la nueva función de escritura y carga, pero si quieres contribuir a la biblioteca, visita la página del proyecto.

Biografía del autor


AUTHORNAME

Martin Legris cuenta con 12 años de experiencia activa en el desarrollo de software. Actualmente, se enfoca principalmente en la investigación de la interfaz de usuario y su herramienta favorita es Flash con ActionScript. Consulta su blog en blog.martinlegris.com y su sitio web (puede estar desactualizado) en www.newcommerce.ca.

Licencia de Creative Commons
Esta obra se ofrece bajo la Licencia de Atribución 3.0 de Estados Unidos de Creative Commons.