Эта статья была написана и отправлена внешним разработчиком. Команда API и инструментов YouTube благодарит Мартина Легриса за его время и опыт.
Мартин Легрис
март 2008 г.
Введение
В этом уроке я покажу вам, как с помощью менее чем 10 строк фактического кода AS3 вы можете получить самые популярные видео на YouTube за последний day
, week
, month
или all_time
. Вы можете получить любой из стандартных каналов :
- Наиболее просматриваемые
- Самые последние
- Самые обсуждаемые
- Наиболее связанные
- Самые популярные
- Недавно добавленные
- Самые популярные
- Лучшие избранные
- Видео для мобильных телефонов
Библиотека, используемая в этом примере, жестко типизирована, что означает, что после получения данных вы можете использовать функцию автозаполнения в таких средах разработки, как FlashDevelop, Flex IDE, Eclipse с 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 .