Эта статья была написана и представлена внешним разработчиком. Команда 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 .