API YouTube Data pour ActionScript 3.0 : premiers pas

Cet article a été rédigé et envoyé par un développeur externe. L'équipe API et outils YouTube remercie Martin Legris pour le temps qu'il nous a consacré et l'expérience dont il nous a fait profiter.


Martin Legris
Mars 2008

Introduction

Dans ce tutoriel, je vais vous montrer comment, avec moins de 10 lignes de code AS3 réel, vous pouvez récupérer les vidéos les plus populaires sur YouTube pour les day, les week, les month ou les all_time derniers jours. Vous pouvez obtenir les flux standards suivants :

  • Vidéos les plus regardées
  • Les plus récentes
  • Le plus de commentaires écrits
  • Le plus de liens
  • Le plus de commentaires vidéo
  • Sélections récentes
  • Les mieux notés
  • Les plus ajoutées aux favoris
  • Vidéos pour téléphones mobiles

La bibliothèque utilisée dans cet exemple est codée en dur, ce qui signifie qu'une fois que vous avez reçu les données, vous pouvez utiliser la fonctionnalité de saisie semi-automatique dans les IDE tels que FlashDevelop, Flex IDE, Eclipse w/FDT et IntelliJ Idea.

Ressources importantes

Avant de commencer, voici la liste des ressources à votre disposition, à savoir le développeur AS3 qui souhaite utiliser les données de l'API YouTube.

Exploration

Envoyer votre première requête

Le code qui suit est assez bien commenté. Toutefois, je vais la décrire un peu avant d'aller plus loin. Le point de départ de toutes les requêtes est une classe appelée YouTubeClient. Cette classe est un singleton auquel vous avez accès en effectuant les opérations suivantes:

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

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

Nous sommes maintenant prêts à envoyer une requête:

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

Je viens de demander les vidéos les mieux notées au cours du mois dernier. Résultats 1 à 10 (50 résultats par appel au maximum). Rien de plus simple !

Gérer les résultats

Comment puis-je accéder à ces résultats ? Étant donné que le paradigme de service Web de type REST est asynchrone, il est plus facile d'utiliser des événements pour gérer les résultats au lieu d'interrompre le code pendant leur récupération. Dans ce cas, nous devons déclarer un écouteur d'événement pour l'événement StandardVideoFeedEvent.STANDARD_VIDEO_DATA_RECEIVED. Notre fonction est appelée chaque fois que YouTubeClient reçoit une réponse pour un flux standard.

client.addEventListener(StandardVideoFeedEvent.STANDARD_VIDEO_DATA_RECEIVED, 
                        doVideosReceived);

La fonction à appeler sera doVideosReceived. Il prendra un paramètre, une variable de type StandardVideoFeedEvent. Cette méthode est conforme à la norme AS3. Déclarons-le et retracez quelques éléments concernant les vidéos que nous avons reçues. Nous allons tracer la sortie standard:

  • le titre de la vidéo,
  • l'URL du fichier SWF pour intégrer la vidéo ;
  • le nombre de vues,
  • le nombre de commentaires,
  • la durée de la vidéo,
  • et le nom de l'auteur.
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);
	}
}

Quelques remarques concernant la bibliothèque et les flux

Presque tous les événements ont une propriété .feed. ProfileEvent est la seule exception, car il a une propriété .profile à la place, car un seul enregistrement est renvoyé par cet appel.

Il existe de nombreux types de flux, qui utilisent tous les méthodes suivantes:

  • first() : récupère le premier enregistrement et pointe dessus
  • next() : récupère le prochain enregistrement disponible
  • last() : récupérer le dernier enregistrement et pointer vers celui-ci
  • previous() : récupère l'enregistrement précédent sur le flux
  • getAt() : obtenir un résultat à une position spécifique
  • count() : nombre de résultats disponibles pour ce flux, différent de totalResults

Lorsque vous arrivez à la fin des résultats, next() renvoie la valeur "null". De même, une fois que vous obtenez le premier résultat, l'appel suivant à previous() renvoie null.

Notez que les données contenues dans les flux (par exemple, les catégories) sont encapsulées dans Iterators. Vous pouvez donc utiliser les mêmes fonctions pour parcourir les catégories disponibles.

Code source complet

Voici le code source complet de cet exemple. Vous pouvez télécharger un fichier ZIP contenant tout ce dont vous avez besoin pour exécuter l'exemple dans Flash CS3. Cependant, il est préférable de mettre à jour la bibliothèque au cas où nous aurions corrigé des bugs ou mis à jour des fonctionnalités. Pour télécharger la bibliothèque, cliquez ici.

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);
             }

        }

    }

}

Conclusion

Bien que cet article couvre à peine l'extrémité de l'iceberg, il vous donnera une idée de la simplicité d'interroger l'API de données YouTube à l'aide de cette bibliothèque. J'ai pris le temps de tout saisir en dur, ce qui m'aide à explorer les données disponibles pour chaque réponse de flux. Elle n'est pas encore compatible avec la nouvelle fonctionnalité d'écriture et d'importation. Toutefois, si vous souhaitez contribuer à la bibliothèque, consultez la page du projet.

Biographie de l'auteur


AUTHORNAME

Martin Legris compte 12 ans de développement logiciel actif. Aujourd'hui, il se concentre principalement sur la recherche sur l'interface utilisateur et son outil préféré est Flash avec ActionScript. Consultez son blog à l'adresse blog.martinlegris.com et son site Web (qui peut être obsolète) à l'adresse www.newcommerce.ca.

Licence Creative Commons
Ce contenu est concédé sous licence Creative Commons Attribution 3.0 États-Unis.