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.
- La bibliothèque AS3 que j'ai développée pour utiliser ces services Web
- Documentation officielle de l'API YouTube Data
- IDE Développement Flash pour AS3
- Liste des événements déclenchés par l'appel de demande effectué sur YouTubeClient
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 dessusnext()
: récupère le prochain enregistrement disponiblelast()
: récupérer le dernier enregistrement et pointer vers celui-ciprevious()
: récupère l'enregistrement précédent sur le fluxgetAt()
: obtenir un résultat à une position spécifiquecount()
: nombre de résultats disponibles pour ce flux, différent detotalResults
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
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.
Ce contenu est concédé sous licence Creative Commons Attribution 3.0 États-Unis.