Cet article a été rédigé et envoyé par un développeur externe. L'équipe YouTube chargée des API et des outils remercie Martin Legris pour son temps et son expertise.
Martin Legris
Mars 2008
Introduction
Dans ce tutoriel, je vais vous montrer comment récupérer les vidéos les plus populaires sur YouTube au cours des dernières 10 lignes de code AS3 (day, week, month ou all_time). Vous pouvez obtenir l'un des flux standards :
- Les plus regardés
- Les plus récents
- 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 les téléphones mobiles
La bibliothèque utilisée dans cet exemple est entièrement typée. Cela signifie qu'une fois que vous avez reçu les données, vous pouvez utiliser la fonctionnalité de saisie semi-automatique dans des IDE tels que FlashDevelop, Flex IDE, Eclipse avec FDT, IntelliJ Idea, etc.
Ressources importantes
Avant de commencer, voici la liste des ressources à votre disposition. Vous êtes 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 consommer ces services Web
- Documentation officielle de l'API YouTube Data
- IDE FlashDevelop pour AS3
- Liste des événements déclenchés par l'appel de requête effectué sur YouTubeClient
Dig in
Effectuer votre première demande
Le code suivant est assez bien commenté. Je vais toutefois vous les 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 (notez qu'il y a un maximum de 50 résultats par appel). Rien de plus simple !
Gérer les résultats
Comment 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'arrêter le code pendant l'extraction des résultats. Dans ce cas, nous devons déclarer un écouteur d'événements pour l'événement StandardVideoFeedEvent.STANDARD_VIDEO_DATA_RECEIVED. La 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. Elle accepte un paramètre, une variable de type StandardVideoFeedEvent. Ceci est conforme à la norme AS3. Déclarez-le et faites en sorte qu'il trace quelques éléments concernant les vidéos que nous avons reçues. Nous allons effectuer un traçage sur la sortie standard :
- le titre de la vidéo ;
- l'URL du fichier SWF à 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);
}
}Remarques concernant la bibliothèque et les flux
Presque tous les événements disposent d'une propriété .feed. ProfileEvent est la seule exception. Il possède plutôt une propriété .profile, car cet appel ne renvoie qu'un seul enregistrement.
Il existe de nombreux types de flux. Ils utilisent tous les méthodes suivantes:
first(): récupérez le premier enregistrement et pointez-ynext(): récupère le prochain enregistrement disponiblelast(): récupère le dernier enregistrement et pointe vers celui-ciprevious(): récupère l'enregistrement précédent dans 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. Même chose pour "previous". Une fois que vous avez atteint le premier résultat, l'appel suivant de previous() renvoie null.
Notez que les données des 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. Toutefois, il est préférable de mettre à jour la bibliothèque au cas où nous aurions corrigé des bugs ou mis à jour les fonctionnalités. Vous pouvez télécharger la bibliothèque en cliquant 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 ne soit qu'un aperçu, il vous donnera une bonne idée de la simplicité avec laquelle vous pouvez interroger l'API YouTube Data à l'aide de cette bibliothèque. Comme j'ai pris le temps de tout taper en dur, c'est un jeu d'enfant de découvrir quelles données sont disponibles pour chaque réponse de flux. Elle n'est pas encore compatible avec la nouvelle fonctionnalité d'écriture et d'importation, mais si vous souhaitez contribuer à la bibliothèque, consultez la page du projet.
Biographie de l'auteur
Martin Legris peut se vanter d'être actif depuis 12 ans dans le domaine du développement logiciel. Aujourd'hui, il se concentre principalement sur la recherche sur l'interface utilisateur, et son outil préféré est Flash avec JavaScript. Consultez son blog à l'adresse blog.martinlegris.com et son site Web (peut être obsolète) à l'adresse www.newcommerce.ca.
Ce contenu est concédé sous licence Creative Commons Attribution 3.0 États-Unis.