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.
- La libreria AS3 che ho sviluppato per consumare questi servizi web
- Documentazione ufficiale dell'API YouTube Data
- IDE Sviluppo Flash per AS3
- Un elenco degli eventi attivati dalla richiesta di chiamata effettuata su YouTubeClient
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 indirizzalonext()
: recupera il record disponibile successivolast()
: recupera l'ultimo record e indirizzaloprevious()
: recupera il record precedente nel feedgetAt()
: trova un risultato in una posizione specificacount()
: il numero di risultati disponibili per questo feed, non uguale atotalResults
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
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.
Questo lavoro è concesso in licenza in base alla licenza Creative Commons Attribution 3.0 degli Stati Uniti.