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