Ten artykuł został napisany i przesłany przez zewnętrznego dewelopera. Zespół YouTube ds. interfejsów API i narzędzi dziękuje Martinowi Legrisowi za poświęcony czas i umiejętność.
Martin Legris
Marzec 2008
Wprowadzenie
W tym samouczku pokażę, jak za pomocą zaledwie 10 wierszy kodu AS3 pobrać najpopularniejsze filmy w YouTube z ostatnich day, week, month lub all_time. Możesz korzystać ze standardowych plików 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 telefony komórkowe
Biblioteka użyta w tym przykładzie jest ściśle typowana, co oznacza, że po otrzymaniu danych możesz korzystać z funkcji autouzupełniania w IDE, takich jak FlashDevelop, Flex IDE, Eclipse w/FDT, IntelliJ Idea i inne.
Ważne informacje
Zanim zaczniemy, oto lista zasobów dostępnych dla Ciebie – dewelopera AS3 zainteresowanego korzystaniem z danych z interfejsu YouTube API.
- Opracowana przeze mnie biblioteka AS3, aby korzystać z tych usług internetowych
- Oficjalna dokumentacja YouTube Data API
- IDE FlashDevelop dla AS3
- Lista zdarzeń wywoływanych przez żądania wykonywane w YouTubeClient
Więcej informacji
Przesyłanie pierwszej prośby
Poniższy kod jest dość dobrze skomentowany. Zanim jednak zagłębię się w jej funkcję, opiszę ją nieco. Punktem początkowym wszystkich żądań jest klasa o nazwie YouTubeClient. Te zajęcia to pojedyncze zajęcia, do których możesz uzyskać dostęp, wykonując te czynności:
// 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 wysłać prośbę:
client.getStandardFeed(YouTubeClient.STD_TOP_RATED,
YouTubeClient.TIME_MONTH,
1,
10);Pytałem o najwyżej oceniane filmy z ostatniego miesiąca. Wyniki od 1 do 10 (pamiętaj, że na jedno połączenie może przypadać maksymalnie 50 wyników). To proste.
Obsługa wyników
Jak mogę uzyskać dostęp do tych wyników? Model usług internetowych typu REST jest asynchroniczny, dlatego do obsługi wyników łatwiej jest używać zdarzeń, zamiast wstrzymywać kod podczas pobierania wyników. W takim przypadku musimy zadeklarować detektor zdarzeń StandardVideoFeedEvent.STANDARD_VIDEO_DATA_RECEIVED. Nasza funkcja będzie wywoływana za każdym razem, gdy YouTubeClient otrzyma odpowiedź dotyczącą standardowego pliku danych.
client.addEventListener(StandardVideoFeedEvent.STANDARD_VIDEO_DATA_RECEIVED,
doVideosReceived);
Funkcja, która zostanie wywołana, to doVideosReceived. Będzie potrzebować 1 parametru, zmiennej typu StandardVideoFeedEvent. Jest to zgodne ze standardem AS3. Z przyjemnością to zrobimy i sprawdzimy kilka kwestii dotyczących otrzymanych filmów. Śledzenie do standardowego wyjścia:
- tytuł filmu,
- adres URL pliku SWF, w którym chcesz umieścić film;
- 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 o bibliotece i plikach danych
Niemal wszystkie zdarzenia mają właściwość .feed. ProfileEvent to jedyna usługa, która zamiast właściwości .profile ma właściwość .profile, ponieważ zwracany jest tylko 1 rekord.
Istnieje wiele typów plików danych. Wszystkie implementują te metody:
first()– pobierz pierwszy rekord i wskaż gonext()– pobieranie następnego dostępnego rekordulast()– pobieranie ostatniego rekordu i wskazanie goprevious()– pobierz poprzedni rekord z kanału.getAt()– uzyskanie wyniku w określonej pozycjicount()– liczba wyników dostępnych dla tego pliku danych, która nie jest taka sama jaktotalResults
Gdy dotrzesz do końca wyników, next() zwraca wartość null. To samo dotyczy poprzedniego. Gdy dojdziesz do pierwszego wyniku, następne wywołanie funkcji previous() zwróci null.
Pamiętaj, że dane w plikach danych (np. kategorie) są umieszczane w elemencie Iterators, więc możesz używać tych samych funkcji do przeglądania dostępnych kategorii.
Pełny kod źródłowy
Poniżej znajdziesz pełny kod źródłowy tego przykładu. Możesz pobrać plik ZIP zawierający wszystko, czego potrzebujesz do uruchomienia przykładu w Flash CS3. Najlepiej jednak zaktualizować bibliotekę, ponieważ mogły zostać w niej poprawione błędy lub dodane nowe funkcje. Bibliotekę możesz pobrać 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
Ten artykuł to zaledwie wierzchołek góry lodowej, ale pozwoli Ci się zorientować, jak łatwo można wysyłać zapytania do interfejsu YouTube Data API za pomocą tej biblioteki. Ponieważ poświęciłem czas na wpisanie wszystkich danych, łatwo jest sprawdzić, jakie informacje są dostępne w każdej odpowiedzi w pliku danych. Nie obsługuje jeszcze nowej funkcji zapisywania i przesyłania, ale jeśli chcesz dodać coś do biblioteki, odwiedź stronę projektu.
Biogram autora
Martin Legris ma 12-letnie doświadczenie w aktywnej pracy nad oprogramowaniem. Obecnie koncentruje się głównie na badaniu interfejsu użytkownika, a jego ulubionym narzędziem jest Flash z kodem Action. Zajrzyj na jego bloga blog.martinlegris.com i zapoznaj się ze stroną (może być nieaktualna) pod adresem www.newcommerce.ca.
Ten utwór jest dostępny na licencji Creative Commons Uznanie autorstwa 3.0 (USA).