Эта статья была написана и представлена внешним разработчиком. Команда API и инструментов YouTube благодарит Мартина Легриса за его время и опыт.
Мартин Легрис
март 2008 г.
Введение
В этом уроке я покажу вам, как с помощью менее чем 10 строк реального кода AS3 вы можете получить самые популярные видео на YouTube за последний day , week , month или all_time . Вы можете получить любой из стандартных каналов :
- Самые просматриваемые
- Самый последний
- Самые обсуждаемые
- Самые связанные
- Больше всего откликнувшихся
- Недавно добавленные
- Самый рейтинговый
- Топ избранных
- Видео для мобильных телефонов
Библиотека, используемая в этом примере, жестко типизирована. Это означает, что после получения данных вы можете использовать функцию автозаполнения в таких IDE, как FlashDevelop, Flex IDE, Eclipse w/FDT, IntelliJ Idea и других.
Важные ресурсы
Прежде чем мы начнем, вот список доступных вам ресурсов — разработчик AS3, заинтересованный в использовании данных из API YouTube.
- Библиотека AS3, которую я разработал для использования этих веб-сервисов.
- Официальная документация по API данных YouTube
- FlashDevelop IDE для AS3
- Список событий, которые запускаются при вызове запроса на YouTubeClient.
Копаем
Оформление вашего первого запроса
Следующий код довольно хорошо прокомментирован. Однако прежде чем углубиться в подробности, я немного опишу функциональность. Отправной точкой для всех запросов является класс YouTubeClient . Этот класс представляет собой синглтон, доступ к которому вы можете получить, выполнив следующие действия:
// first you import it import ca.newcommerce.youtube.webservice.YouTubeClient; // then you get a reference to it var client:YouTubeClient = YouTubeClient.getInstance();
Теперь мы готовы сделать запрос:
client.getStandardFeed(YouTubeClient.STD_TOP_RATED,
YouTubeClient.TIME_MONTH,
1,
10);Я только что запросил видео с самым высоким рейтингом за последний месяц, результаты от 1 до 10 (обратите внимание, что на один звонок можно получить максимум 50 результатов). Легкий!
Обработка результатов
Как мне получить доступ к этим результатам? Поскольку парадигма веб-сервиса типа REST является асинхронной, для обработки результатов проще использовать события, а не останавливать код на время получения результатов. В этом случае нам нужно объявить прослушиватель событий StandardVideoFeedEvent.STANDARD_VIDEO_DATA_RECEIVED . Наша функция будет вызываться каждый раз, когда YouTubeClient получает ответ на стандартный фид.
client.addEventListener(StandardVideoFeedEvent.STANDARD_VIDEO_DATA_RECEIVED,
doVideosReceived);
Вызываемая функция будет doVideosReceived . Он будет принимать один параметр — переменную типа StandardVideoFeedEvent . Это соответствует стандарту AS3. Давайте объявим об этом и заставим его отслеживать некоторые моменты, касающиеся полученных нами видео. Мы будем отслеживать стандартный вывод:
- название видео,
- URL-адрес SWF-файла для вставки видео,
- количество просмотров,
- количество комментариев,
- продолжительность видео,
- и имя автора.
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);
}
}Несколько заметок о библиотеке и каналах
Почти все события имеют свойство .feed . ProfileEvent является единственным исключением: вместо него у него есть свойство .profile , поскольку этот вызов возвращает только одну запись.
Существует множество типов фидов — все они реализуют следующие методы:
-
first()— извлекает первую запись и указывает на нее -
next()— получить следующую доступную запись -
last()— извлекает последнюю запись и указывает на нее -
previous()— извлекает предыдущую запись в ленте -
getAt()— получить результат в определенной позиции -
count()– количество результатов, доступных для этого канала, а неtotalResults
Когда вы доберетесь до конца результатов, next() вернет значение null. То же самое и с предыдущим: как только вы получите первый результат, следующий вызов previous() вернет null .
Обратите внимание, что данные внутри каналов (например, категории) заключены в Iterators , поэтому вы можете использовать те же функции для перемещения по доступным категориям.
Полный исходный код
Ниже приведен полный исходный код этого примера. Вы можете скачать zip-архив , содержащий все необходимое для запуска примера внутри Flash CS3, однако лучше всего обновить библиотеку на случай, если мы исправим ошибки или обновим функции. Скачать библиотеку можно, нажав здесь .
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);
}
}
}
}
Заключение
Хотя эта статья лишь затрагивает верхушку айсберга, она даст вам хорошее представление о том, насколько просто выполнять запросы к API данных YouTube с помощью этой библиотеки. Поскольку я потратил время на то, чтобы все жестко напечатать, узнать, какие данные доступны по каждому ответу на фид, очень просто. Он пока не поддерживает новые функции записи и загрузки, но если вы хотите внести свой вклад в библиотеку, посетите страницу проекта .
Биография автора

Мартин Легрис может похвастаться 12-летним опытом активной разработки программного обеспечения. Сегодня он в основном концентрируется на исследовании пользовательского интерфейса, а его любимым инструментом является Flash с ActionScript. Посетите его блог blog.martinlegris.com и веб-сайт (может быть устаревший) www.newcommerce.ca .

Эта работа доступна под лицензией Creative Commons Attribution 3.0 United States License .