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.
- La biblioteca de AS3 que desarrollé para consumir estos servicios web
- Documentación oficial de la API de YouTube Data
- IDE de FlashDevelop para AS3
- Una lista de los eventos que se activan según la llamada de solicitud que se realiza en YouTubeClient
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 detotalResults
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

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.
Esta obra se ofrece bajo la Licencia de Atribución 3.0 de Estados Unidos de Creative Commons.