YouTube Data API für ActionScript 3.0: Erste Schritte

Dieser Artikel wurde von einem externen Entwickler verfasst und eingereicht. Das YouTube-Team für APIs und Tools dankt Martin Legris für seine Zeit und sein Know-how.


Martin Legris
März 2008

Einführung

In dieser Anleitung zeige ich Ihnen, wie Sie mit weniger als zehn Zeilen AS3-Code die beliebtesten Videos der letzten day, week, month oder all_time auf YouTube abrufen können. Sie können jeden der Standardfeeds abrufen:

  • Nach Aufrufzahl
  • Am aktuellsten
  • Heiß diskutiert
  • Meistverlinkt
  • Meiste Antworten
  • Vor Kurzem vorgestellt
  • Mit Spitzenbewertung
  • Top-Favoriten
  • Videos für Smartphones

Die in diesem Beispiel verwendete Bibliothek ist durchgehend hartcodiert. Das bedeutet, dass Sie nach Erhalt der Daten die Funktion zur automatischen Vervollständigung in IDEs wie FlashDevelop, Flex IDE, Eclipse mit FDT und IntelliJ Idea verwenden können.

Wichtige Ressourcen

Bevor wir beginnen, findest du hier eine Liste mit Ressourcen, die dir als AS3-Entwickler zur Verfügung stehen, der Daten aus der YouTube API verwenden möchte.

Näher heranzoomen

Erste Anfrage stellen

Der folgende Code ist ziemlich gut kommentiert. Ich werde die Funktion jedoch kurz beschreiben, bevor ich loslege. Ausgangspunkt für alle Anfragen ist eine Klasse namens YouTubeClient. Diese Klasse ist ein Singleton, auf den Sie durch Folgendes zugreifen können:

// 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 die Videos mit den besten Bewertungen des letzten Monats, die Ergebnisse 1 bis 10, angefordert. Pro Aufruf sind maximal 50 Ergebnisse möglich. So einfach ist das.

Ergebnisse verarbeiten

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

client.addEventListener(StandardVideoFeedEvent.STANDARD_VIDEO_DATA_RECEIVED, 
                        doVideosReceived);

Die aufzurufende Funktion ist doVideosReceived. Dafür wird ein Parameter benötigt, eine Variable vom Typ StandardVideoFeedEvent. Dies entspricht dem Standard in AS3. Deklarieren wir sie und machen Sie einige Dinge im Zusammenhang mit den erhaltenen Videos deutlich. Wir gehen auf die Standardausgabe zurück:

  • den Titel des Videos,
  • die URL des SWF-Objekts, in das das Video eingebettet werden soll,
  • die Anzahl der Aufrufe,
  • die 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 Feeds

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

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

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

Wenn Sie am Ende der Ergebnisse angelangt sind, gibt next() „null“ zurück. Dasselbe gilt für „previous“. Sobald du das erste Ergebnis erreicht hast, gibt der nächste Aufruf von previous() null zurück.

Daten in Feeds (z. B. Kategorien) sind in Iterators eingehüllt. Sie können also dieselben Funktionen verwenden, um die verfügbaren Kategorien zu durchsuchen.

Vollständiger Quellcode

Im Folgenden finden Sie den vollständigen Quellcode für dieses Beispiel. Du kannst eine ZIP-Datei herunterladen, die alles enthält, was du zum Ausführen des Beispiels in Flash CS3 benötigst. Es ist jedoch am besten, 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

In diesem Artikel wird nur ein kleiner Teil der Möglichkeiten der YouTube Data API behandelt. Du erhältst aber einen guten Eindruck davon, wie einfach es ist, mit dieser Bibliothek Abfragen an die YouTube Data API zu stellen. Da ich mir die Zeit genommen habe, alles manuell einzugeben, ist es ganz einfach zu sehen, welche Daten in jeder Feedantwort verfügbar sind. Die neue Funktion zum Schreiben und Hochladen wird noch nicht unterstützt. Wenn Sie jedoch zur Bibliothek beitragen möchten, rufen Sie die Projektseite auf.

Biografie des Autors


AUTHORNAME

Martin Legris hat 12 Jahre Erfahrung in der Softwareentwicklung. Heute konzentriert er sich hauptsächlich auf die Recherche von Benutzeroberflächen. Sein Lieblingstool ist Flash mit Skript. Sehen Sie sich seinen Blog unter blog.martinlegris.com und seine Website (kann veraltet sein) unter www.newcommerce.ca an.

Creative-Commons-Lizenz
Dieses Werk unterliegt der Creative Commons Attribution 3.0 United States License.