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.
- Die von mir entwickelte AS3-Bibliothek zur Nutzung dieser Webdienste
- Offizielle Dokumentation zur YouTube Data API
- FlashDevelop-IDE für AS3
- Eine Liste der Ereignisse, die durch den Anfrageaufruf für YouTubeClient ausgelöst werden
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 verweisennext()
: den nächsten verfügbaren Eintrag abrufenlast()
: Ruft den letzten Datensatz ab und verweist daraufprevious()
: den vorherigen Eintrag im Feed abrufengetAt()
: Ergebnis an einer bestimmten Position abrufencount()
: die Anzahl der für diesen Feed verfügbaren Ergebnisse, nicht mittotalResults
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
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.
Dieses Werk unterliegt der Creative-Commons-Lizenz „Namensnennung 3.0“.