Pierwsze kroki w interfejsie YouTube Data API dla języka Action 3.0

Ten artykuł został napisany i przesłany przez zewnętrznego dewelopera. Zespół YouTube ds. interfejsów API i narzędzi podziękował Martinowi Legrisowi za czas i doświadczenie.


Martin Legris
Marzec 2008 r.

Wprowadzenie

W tym samouczku dowiesz się, jak możesz wykorzystać najpopularniejsze filmy w YouTube z maksymalnie 10 wierszami. Znajdziesz w nich ostatnie day, week, month lub all_time. Możesz pobrać dowolny standardowy plik danych:

  • Najczęściej oglądane
  • Najnowsze
  • Najczęściej komentowane
  • Z największą liczbą linków
  • Najwięcej odpowiedzi
  • Ostatnio polecane
  • Najwyżej oceniane
  • Najpopularniejsze zakładki
  • Filmy na komórki

Biblioteka używana w tym przykładzie ma typowy tekst wpisany w całości, co oznacza, że gdy otrzymasz dane, możesz korzystać z funkcji autouzupełniania w IDE, takich jak FlashDevelop, Flex IDE, Eclipse w/FDT czy IntelliJ Idea.

Ważne zasoby

Zanim zaczniemy, zapoznaj się z listą dostępnych dla Ciebie zasobów – dla deweloperów AS3 zainteresowanych użyciem danych z interfejsu YouTube API.

Więcej informacji

Pierwsze żądanie

Poniższy kod jest dość dobrze skomentowany. ale najpierw szczegółowo omówię poszczególne funkcje. Punktem początkowym wszystkich żądań jest klasa YouTubeClient. Ta sesja jest jednorazowa, do której masz dostęp w ten sposób:

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

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

Teraz możemy poprosić o:

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

Moje ulubione filmy w zeszłym miesiącu to wyniki od 1 do 10 (pamiętaj, że maksymalnie 50 wyników na jedno połączenie). To proste.

Obsługa wyników

Jak uzyskać dostęp do tych wyników? Model usług internetowych typu REST jest asynchroniczny, więc łatwiej jest używać wyników do obsługi wyników zamiast zatrzymywania kodu podczas pobierania wyników. W tym przypadku musisz zadeklarować odbiornik zdarzenia StandardVideoFeedEvent.STANDARD_VIDEO_DATA_RECEIVED. Funkcja będzie wywoływana za każdym razem, gdy YouTubeClient otrzyma odpowiedź na standardowy plik danych.

client.addEventListener(StandardVideoFeedEvent.STANDARD_VIDEO_DATA_RECEIVED, 
                        doVideosReceived);

Wybrana funkcja to doVideosReceived. Będzie on przyjmować 1 parametr – zmienną typu StandardVideoFeedEvent. Jest to zgodne ze standardem AS3. Zadeklaruj ją i postaraj się śledzić kilka rzeczy dotyczących filmów, które otrzymaliśmy. Przeprowadzimy analizę na podstawie danych wyjściowych standardowych:

  • tytuł filmu,
  • adres URL pliku SWF zawartego w filmie,
  • liczbę wyświetleń,
  • liczbę komentarzy,
  • czas trwania filmu,
  • i nazwisko autora.
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);
	}
}

Kilka uwag na temat biblioteki i kanałów

Prawie wszystkie zdarzenia mają właściwość .feed. Jedyny wyjątek to ProfileEvent, tylko ma właściwość .profile, bo wywołanie zawiera tylko jeden rekord.

Jest wiele rodzajów plików danych – wszystkie korzystają z tych metod:

  • first() – pobierz pierwszy rekord i wskaż go
  • next() – pobranie następnego dostępnego rekordu
  • last() – pobierz ostatni rekord i wskaż go
  • previous() – pobranie poprzedniego rekordu w pliku danych
  • getAt() – uzyskiwanie wyniku na konkretnej pozycji
  • count() – liczba wyników dostępnych dla tego kanału, nie różna od liczby totalResults

Gdy dotrzesz do końca wyników, next() zwraca wartość null. To samo dotyczy poprzedniej czynności: gdy dojdziesz do pierwszego wyniku, kolejne wywołanie, czyli previous(), zwróci null.

Dane w plikach danych (np. kategorie) są opakowane w ramach funkcji Iterators, więc możesz poruszać się po dostępnych kategoriach, korzystając z tych samych funkcji.

Pełny kod źródłowy

Poniżej znajduje się pełny kod źródłowy tego przykładu. Możesz pobrać plik ZIP zawierający wszystko, co jest potrzebne do uruchomienia przykładowego elementu w formacie Flash CS3, ale najlepiej jest zaktualizować bibliotekę w razie wystąpienia błędów lub aktualizacji funkcji. Możesz pobrać bibliotekę, klikając tutaj.

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

        }

    }

}

Podsumowanie

Chociaż ten artykuł prawie dotyka czubka góry lodowej, to pozwoli Ci zorientować się, jak proste jest wysyłanie zapytań do interfejsu YouTube Data API za pomocą tej biblioteki. Ponieważ poświęcam mnóstwo czasu na wpisywanie wszystkich danych, szukanie danych dostępnych w odpowiedzi na plik danych może być łatwe. Nowe funkcje zapisu i przesyłania nie są jeszcze obsługiwane, ale jeśli chcesz współtworzyć bibliotekę, odwiedź stronę projektu.

Biogram autora


AUTHORNAME

Martin Legris może pochwalić się 12-letnim aktywnym rozwojem oprogramowania. Obecnie koncentruje się przede wszystkim na badaniach dotyczących interfejsu użytkownika, a jego ulubionym narzędziem jest Flash w języku WebGL. Odwiedź jego bloga pod adresem blog.martinlegris.com i w witrynie (która może być nieaktualna) na stronie www.newcommerce.ca.

Licencja Creative Commons
Ten utwór jest objęty licencją Creative Commons Attribution 3.0