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.
- Die AS3-Bibliothek, die ich zum Abrufen dieser Webdienste entwickelt habe
- Offizielle YouTube Data API-Dokumentation
- FlashDevelop IDE für AS3
- Eine Liste der Ereignisse, die durch welchen Anfrageaufruf auf YouTubeClient ausgelöst werden
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 verweisennext()– ruft den nächsten verfügbaren Datensatz ablast(): ruft den letzten Datensatz ab und verweist daraufprevious()– ruft den vorherigen Datensatz im Feed abgetAt(): liefert ein Ergebnis an einer bestimmten Positioncount(): die Anzahl der für diesen Feed verfügbaren Ergebnisse, nicht identisch mittotalResults
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
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.
Dieses Werk unterliegt der Creative Commons Attribution 3.0 United States License.