Questo articolo è stato scritto e inviato da uno sviluppatore esterno. Il team di API e strumenti di YouTube ringrazia Martin Legris per il tempo e le competenze che ci ha dedicato.
Martin Legris
Marzo 2008
Introduzione
In questo tutorial ti mostrerò come, con meno di 10 righe di codice AS3, puoi recuperare i video più popolari su YouTube nell'ultimo day, week, month o all_time. Puoi visualizzare uno qualsiasi dei feed standard:
- Più visti
- Più recenti
- I più commentati
- I più linkati
- Con più risposte
- In primo piano di recente
- I più votati
- I preferiti
- Video per cellulari
La libreria utilizzata in questo esempio è di tipo hard-coded, quindi dopo aver ricevuto i dati puoi utilizzare la funzione di completamento automatico negli IDE come FlashDevelop, Flex IDE, Eclipse w/FDT, IntelliJ Idea e altri ancora.
Risorse importanti
Prima di iniziare, ecco un elenco di risorse a tua disposizione: lo sviluppatore AS3 interessato a utilizzare i dati dell'API di YouTube.
- La libreria AS3 che ho sviluppato per utilizzare questi web service
- Documentazione ufficiale dell'API YouTube Data
- IDE FlashDevelop per AS3
- Un elenco di quali eventi vengono attivati dalla chiamata di richiesta effettuata su YouTubeClient
Approfondimento
Effettuare la prima richiesta
Il codice che segue è abbastanza ben commentato. Tuttavia, prima di entrare nel dettaglio, descrivo brevemente la funzionalità. Il punto di partenza per tutte le richieste è una classe chiamata YouTubeClient. Questo è un singleton a cui puoi accedere nel seguente modo:
// first you import it import ca.newcommerce.youtube.webservice.YouTubeClient; // then you get a reference to it var client:YouTubeClient = YouTubeClient.getInstance();
Ora siamo pronti per presentare una richiesta:
client.getStandardFeed(YouTubeClient.STD_TOP_RATED,
YouTubeClient.TIME_MONTH,
1,
10);Ho appena richiesto i video con il punteggio più alto dell'ultimo mese, risultati da 1 a 10 (tieni presente che sono disponibili un massimo di 50 risultati per chiamata). Facile!
Gestione dei risultati
Come si accede a questi risultati? Poiché il paradigma del web service di tipo REST è asincrono, è più facile utilizzare gli eventi per gestire i risultati anziché interrompere il codice durante il recupero dei risultati. In questo caso, dobbiamo dichiarare un listener di eventi per l'evento StandardVideoFeedEvent.STANDARD_VIDEO_DATA_RECEIVED. La nostra funzione verrà chiamata ogni volta che YouTubeClient riceve una risposta per un feed standard.
client.addEventListener(StandardVideoFeedEvent.STANDARD_VIDEO_DATA_RECEIVED,
doVideosReceived);
La funzione da chiamare sarà doVideosReceived. Utilizza un parametro, una variabile di tipo StandardVideoFeedEvent. Questa operazione segue lo standard di AS3. Dichiaralo e fai in modo che vengano tracciate alcune informazioni relative ai video che abbiamo ricevuto. Eseguiamo il tracciamento nell'output standard:
- il titolo del video.
- l'URL del file SWF per incorporare il video,
- il numero di visualizzazioni,
- il numero di commenti,
- la durata del video,
- e il nome dell'autore.
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);
}
}Alcune note sulla raccolta e sui feed
Quasi tutti gli eventi hanno una proprietà .feed. ProfileEvent è l'unica eccezione: ha invece una proprietà .profile, in quanto questa chiamata restituisce un solo record.
Esistono molti tipi di feed, che implementano tutti i seguenti metodi:
first(): recupera il primo record e fai riferimento a questonext(): recupera il record successivo disponibilelast(): recupera l'ultimo record e posiziona il puntatore del mouse su di essoprevious(): recupera il record precedente nel feedgetAt(): restituisce un risultato in una posizione specificacount(): il numero di risultati disponibili per questo feed, diverso datotalResults
Alla fine dei risultati, next() restituisce un valore nullo. Lo stesso vale per precedente: quando arrivi al primo risultato, la chiamata successiva a previous() restituirà null.
Tieni presente che i dati all'interno dei feed (ad es. le categorie) sono aggregati all'interno di Iterators, quindi puoi utilizzare le stesse funzioni per esaminare le categorie disponibili.
Codice sorgente completo
Di seguito è riportato il codice sorgente completo per questo esempio. Puoi scaricare un file ZIP contenente tutto ciò che ti serve per eseguire l'esempio in Flash CS3, ma è meglio aggiornare la libreria nel caso in cui avessimo corretto bug o aggiornato le funzionalità. Puoi scaricare la raccolta facendo clic qui.
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);
}
}
}
}
Conclusione
Anche se questo articolo non fa che sfiorare la punta dell'iceberg, ti darà una buona idea di quanto sia semplice eseguire query sull'API YouTube Data utilizzando questa libreria. Dato che ho dedicato del tempo a digitare tutto, è un gioco da ragazzi esplorare quali dati sono disponibili per ogni risposta del feed. Non supporta ancora la nuova funzionalità di scrittura e caricamento, ma se vuoi contribuire alla raccolta, visita la pagina del progetto.
Biografia dell'autore
Martin Legris vanta 12 anni di esperienza nello sviluppo software. Oggi si concentra principalmente sulla ricerca relativa all'interfaccia utente e il suo strumento preferito è Flash con JavaScript. Visita il suo blog all'indirizzo blog.martinlegris.com e il suo sito web (che potrebbe non essere aggiornato) all'indirizzo www.newcommerce.ca.
Questo lavoro è concesso in licenza ai sensi di una
licenza Creative Commons Attribution 3.0 degli Stati Uniti.