API di dati di YouTube per Adobe 3.0 : primi passaggi

Questo articolo è stato scritto e inviato da uno sviluppatore esterno. Il team di API e strumenti di YouTube ringrazia Martin Legris per il suo tempo e le sue competenze.


Martin Legris
Marzo 2008

Introduzione

In questo tutorial ti mostrerò come, con meno di 10 righe di codice AS3 effettivo, puoi recuperare i video più popolari su YouTube per gli ultimi day, week, month o all_time. Puoi ricevere uno qualsiasi dei feed standard:

  • Più visti
  • I 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 è hard-coded, il che significa che una volta ricevuti i dati, puoi usare la funzionalità di completamento automatico negli IDE come FlashDevelop, Flex IDE, Eclipse w/FDT, IntelliJ Idea e altro ancora.

Risorse importanti

Prima di iniziare, ecco l'elenco delle risorse a tua disposizione, ovvero lo sviluppatore AS3 interessato a utilizzare i dati dell'API di YouTube.

Approfondimento

Effettuare la prima richiesta

Il codice che segue è abbastanza corretto. Tuttavia, descriverò la funzionalità un po' prima di approfondire l'argomento. Il punto di partenza per tutte le richieste è una classe chiamata YouTubeClient. Questo corso è un singleton a cui puoi accedere seguendo questi passaggi:

// 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 le valutazioni migliori nel corso dell'ultimo mese, risultati da 1 a 10 (tieni presente che è previsto un massimo di 50 risultati per chiamata). Non c'è problema!

Gestire i risultati

Come faccio ad accedere a questi risultati? Poiché il paradigma di servizi web di tipo REST è asincrono, è più semplice 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 riceverà una risposta per un feed standard.

client.addEventListener(StandardVideoFeedEvent.STANDARD_VIDEO_DATA_RECEIVED, 
                        doVideosReceived);

La funzione da chiamare sarà doVideosReceived. Verrà utilizzato un parametro, una variabile di tipo StandardVideoFeedEvent. Segue lo standard in AS3. Dichiariamola e segnaliamo alcuni contenuti relativi ai video che abbiamo ricevuto. Tracceremo l'output standard:

  • il titolo del video
  • l'URL del file SWF per incorporare il video,
  • il numero di visualizzazioni,
  • 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, poiché è presente un solo record restituito da questa chiamata.

Esistono molti tipi di feed, ognuno dei quali implementa i seguenti metodi:

  • first(): recupera il primo record e indirizzalo
  • next(): recupera il record disponibile successivo
  • last(): recupera l'ultimo record e indirizzalo
  • previous(): recupera il record precedente nel feed
  • getAt(): trova un risultato in una posizione specifica
  • count(): il numero di risultati disponibili per questo feed, non uguale a totalResults

Quando arrivi alla fine dei risultati, next() restituisce null. Come nel caso precedente, una volta raggiunto il primo risultato, la chiamata successiva al numero previous() restituirà null.

Tieni presente che i dati all'interno dei feed (ad es. le categorie) sono inseriti nel codice 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 all'interno di Flash CS3, ma è meglio aggiornare la libreria nel caso in cui siano stati corretti bug o aggiornato funzionalità. Per scaricare la raccolta, fai 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 tocca a malapena la punta dell'iceberg, ti darà un'idea di quanto sia semplice eseguire query sull'API di dati di YouTube utilizzando questa libreria. Dato che ho dedicato molto tempo a digitare tutto, è semplice scoprire quali dati sono disponibili in ogni risposta al 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


AUTORE

Martin Legris vanta 12 anni di sviluppo software attivo. Oggi si occupa principalmente della ricerca nell'interfaccia utente e il suo strumento preferito è Flash con JavaScript. Controlla il suo blog all'indirizzo blog.martinlegris.com e il sito web (può essere obsoleto) all'indirizzo www.newcommerce.ca.

Licenza Creative Commons
Questo lavoro è concesso in licenza in base alla licenza Creative Commons Attribution 3.0 degli Stati Uniti.