API данных YouTube для ActionScript 3.0: первые шаги

Эта статья была написана и представлена ​​внешним разработчиком. Команда API и инструментов YouTube благодарит Мартина Легриса за его время и опыт.


Мартин Легрис
март 2008 г.

Введение

В этом уроке я покажу вам, как с помощью менее чем 10 строк реального кода AS3 вы можете получить самые популярные видео на YouTube за последний day , week , month или all_time . Вы можете получить любой из стандартных каналов :

  • Самые просматриваемые
  • Самый последний
  • Самые обсуждаемые
  • Самые связанные
  • Больше всего откликнувшихся
  • Недавно добавленные
  • Самый рейтинговый
  • Топ избранных
  • Видео для мобильных телефонов

Библиотека, используемая в этом примере, жестко типизирована. Это означает, что после получения данных вы можете использовать функцию автозаполнения в таких IDE, как FlashDevelop, Flex IDE, Eclipse w/FDT, IntelliJ Idea и других.

Важные ресурсы

Прежде чем мы начнем, вот список доступных вам ресурсов — разработчик AS3, заинтересованный в использовании данных из API YouTube.

Копаем

Оформление вашего первого запроса

Следующий код довольно хорошо прокомментирован. Однако прежде чем углубиться в подробности, я немного опишу функциональность. Отправной точкой для всех запросов является класс 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
Эта работа доступна под лицензией Creative Commons Attribution 3.0 United States License .