YouTube Data API für ActionScript 3.0 : Erste Schritte

Dieser Artikel wurde von einem externen Entwickler verfasst. Das YouTube APIs- und YouTube-Team dankt Martin Legris für seine Zeit und seine Fachkenntnisse.


Martin Legris
März 2008

Einführung

In diesem Tutorial zeige ich Ihnen, wie Sie mit weniger als 10 Zeilen mit tatsächlichem AS3-Code die beliebtesten Videos auf YouTube für die letzten day, week, month oder all_time abrufen können. Sie können alle Standardfeeds abrufen:

  • Nach Aufrufzahl
  • Neu
  • Heiß diskutiert
  • Meist verlinkt
  • Meist beantwortet
  • Kürzlich empfohlen
  • Beste Bewertung
  • Favoriten
  • Videos für Smartphones

Die in diesem Beispiel verwendete Bibliothek ist durchgehend typisiert, d. h., sobald Sie die Daten erhalten haben, können Sie die Funktion für die automatische Vervollständigung in IDEs wie FlashDevelop, Flex IDE, Eclipse mit FDT und IntelliJ Idea verwenden.

Wichtige Ressourcen

Bevor wir beginnen, hier ist eine Liste der Ressourcen, die dir zur Verfügung stehen – der AS3-Entwickler, der Daten der YouTube API verwenden möchte.

Ausgereift

Erste Anfrage stellen

Der folgende Code ist ziemlich gut kommentiert. Ich werde die Funktion jedoch kurz beschreiben. Der Ausgangspunkt für alle Anfragen ist eine Klasse namens YouTubeClient. Diese Klasse ist ein Singleton, für das Sie Folgendes tun:

// first you import it
import ca.newcommerce.youtube.webservice.YouTubeClient;

// then you get a reference to it
var client:YouTubeClient = YouTubeClient.getInstance();

Jetzt können wir eine Anfrage stellen:

client.getStandardFeed(YouTubeClient.STD_TOP_RATED, 
                                 YouTubeClient.TIME_MONTH,
                                 1, 
                                 10);

Ich habe gerade im letzten Monat die am besten bewerteten Videos angefordert. Die Ergebnisse liegen zwischen 1 und 10 (maximal 50 Ergebnisse pro Aufruf). Ganz einfach!

Ergebnisse verarbeiten

Wie greife ich jetzt auf diese Ergebnisse zu? Da das Webservice-Paradigma des REST-Typs asynchron ist, ist es einfacher, Ereignisse zur Verarbeitung der Ergebnisse zu verwenden, anstatt den Code anzuhalten, während die Ergebnisse abgerufen werden. In diesem Fall müssen wir einen Ereignis-Listener für das StandardVideoFeedEvent.STANDARD_VIDEO_DATA_RECEIVED-Ereignis deklarieren. Unsere Funktion wird jedes Mal aufgerufen, wenn YouTubeClient eine Antwort für einen Standardfeed erhält.

client.addEventListener(StandardVideoFeedEvent.STANDARD_VIDEO_DATA_RECEIVED, 
                        doVideosReceived);

Die aufzurufende Funktion ist doVideosReceived. Es wird ein Parameter vom Typ StandardVideoFeedEvent verwendet. Dies entspricht dem Standard in AS3. Wir erklären es dir jetzt und machen ein paar Angaben zu den Videos, die wir erhalten haben. Wir werden die Standardausgabe verfolgen:

  • den Titel des Videos
  • die URL der SWF-Datei zum Einbetten des Videos
  • die Anzahl der Aufrufe
  • Anzahl der Kommentare
  • die Videodauer
  • und den Namen des Autors.
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);
	}
}

Hinweise zur Bibliothek und zu den Feeds

Fast alle Ereignisse haben die Property .feed. ProfileEvent ist die einzige Ausnahme. Sie hat stattdessen die Property .profile, da von diesem Aufruf nur ein Datensatz zurückgegeben wird.

Es gibt viele Arten von Feeds, die alle die folgenden Methoden implementieren:

  • first() – den ersten Datensatz abrufen und darauf verweisen
  • next(): den nächsten verfügbaren Eintrag abrufen
  • last(): Ruft den letzten Datensatz ab und verweist darauf
  • previous(): den vorherigen Eintrag im Feed abrufen
  • getAt(): Ergebnis an einer bestimmten Position abrufen
  • count(): die Anzahl der für diesen Feed verfügbaren Ergebnisse, nicht mit totalResults

Wenn Sie am Ende der Ergebnisse angelangt sind, gibt next() null zurück. Dasselbe gilt für vorherige Ergebnisse: Wenn du zum ersten Ergebnis gelangst, wird für den nächsten previous()-Aufruf null zurückgegeben.

Daten in Feeds (z. B. Kategorien) sind in Iterators eingeschlossen. Sie können also dieselben Funktionen verwenden, um sich durch die verfügbaren Kategorien zu bewegen.

Vollständiger Quellcode

Im Folgenden finden Sie den vollständigen Quellcode für dieses Beispiel. Sie können eine ZIP-Datei herunterladen, die alles enthält, was Sie zum Ausführen des Beispiels in Flash CS3 benötigen. Wir empfehlen jedoch, die Bibliothek zu aktualisieren, falls wir Fehler behoben oder Funktionen aktualisiert haben. Sie können die Bibliothek hier herunterladen.

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);
             }

        }

    }

}

Fazit

Auch wenn dieser Artikel die Spitze des Eisbergs kaum berührt, wird er Ihnen eine gute Vorstellung davon vermitteln, wie einfach die YouTube Data API mit dieser Bibliothek abgefragt werden kann. Da ich mir die Zeit genommen habe, alles fest einzugeben, ist es ein Kinderspiel, herauszufinden, welche Daten in den einzelnen Feedantworten verfügbar sind. Die neue Schreib- und Uploadfunktion wird noch nicht unterstützt. Wenn Sie jedoch zur Bibliothek beitragen möchten, rufen Sie die Projektseite auf.

Biografie des Autors


AUTORNAME

Martin Legris blickt auf 12 Jahre aktive Softwareentwicklung zurück. Heute konzentriert er sich auf die Forschung auf der Benutzeroberfläche und sein Lieblingstool ist Flash mit ActionScript. Werfen Sie einen Blick auf seinen Blog unter blog.martinlegris.com und die Website (kann veraltet sein) unter www.newcommerce.ca.

Creative-Commons-Lizenz
Dieses Werk unterliegt der Creative-Commons-Lizenz „Namensnennung 3.0“.