API di dati di YouTube per ActionScript 3.0: primi passi

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.

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 questo
  • next(): recupera il record successivo disponibile
  • last(): recupera l'ultimo record e posiziona il puntatore del mouse su di esso
  • previous(): recupera il record precedente nel feed
  • getAt(): restituisce un risultato in una posizione specifica
  • count(): il numero di risultati disponibili per questo feed, diverso da totalResults

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


AUTHORNAME

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.

Licenza Creative Commons
Questo lavoro è concesso in licenza ai sensi di una licenza Creative Commons Attribution 3.0 degli Stati Uniti.