Избранное | Русский | Войти

Руководство разработчика: Java

API данных YouTube позволяет клиентским приложениям просматривать содержание YouTube в виде каналов API данных Google. Клиентское приложение может использовать каналы API данных Google для получения каналов видео, комментариев, ответов, плейлистов, а также в качестве запроса для поиска видео, отвечающих определенным критериям. API можно использовать для создания аутентифицированных запросов для изменения информации и добавления на сайт новых видео.

Помимо некоторых сведений о возможностях API данных YouTube, в этом документе можно найти примеры взаимодействия с API с помощью клиентской библиотеки Java. О настройке клиентской библиотеки Java см. в Руководстве по началу работы.

Подробнее о протоколе, используемом клиентской библиотекой Java для взаимодействия с YouTube, см. в Руководстве по протоколу.

Содержание

  1. Обновление и удаление видео
    1. Обновление информации о видео
    2. Удаление видео
  2. Использование функций сообществ
    1. Добавление оценок
    2. Комментарии
      1. Получение комментариев к видео
      2. Добавление комментария
    3. Видеоответы
      1. Получение видеоответов на 
видео
      2. Добавление видеоответов
      3. Удаление видеоответов
    4. Отметка видео как неприемлемого
  3. Сохранение и сбор видео
    1. Избранное видео
      1. Получение избранного видео пользователя
      2. Добавление избранного
      3. Удаление избранного
    2. Плейлисты
      1. Получение плейлистов пользователя
      2. Получение информации плейлиста
      3. Добавление плейлиста
      4. Обновление плейлиста
        1. Добавление видео в плейлист
        2. Изменение информации о видео в плейлисте
        3. Удаление видео из плейлиста
      5. Удаление плейлиста
    3. Подписки
      1. Получение подписок пользователя
      2. Добавление подписки
      3. Удаление подписки
  4. Взаимодействие пользователей
    1. Профили пользователей
      1. Получение профиля пользователя
    2. Контакты
      1. Получение контактов пользователя
      2. Добавление контакта
      3. Принятие и отклонение контакта
      4. Удаление контакта
    3. Сообщения
      1. Получение сообщений пользователя
      2. Отправка сообщения пользователю
      3. Удаление сообщения

Об этом документе

Аудитория

Этот документ рассчитан на программистов, которые планируют писать клиентские приложения, взаимодействующие с YouTube с помощью клиентской библиотеки Java.
 Здесь приведены примеры основных взаимодействий API данных.

Справочную информацию по API данных YouTube можно найти в справочном руководстве.

Подразумевается, что вы понимаете основные принципы протокола API данных Google и знаете Java.

Справочную информацию о классах и методах Java можно найти в справочном руководстве Javadoc клиентской библиотеки.

Структура документа

Этот документ содержит следующие разделы:

  • Раздел Аутентификация описывает два различных способа аутентификации, которые можно применять для связи операций API с аккаунтом определенного пользователя. В этом разделе также упоминается о разнице между аутентификацией для API данных YouTube и другими API GData. В объяснениях для каждой функции API будет четко сказано, требует ли функция аутентификации пользователя.

  • Раздел Видео каналы и записи содержит пример ответа API и рассказывает, как извлекать информацию об одном видео из списка видео или набора результатов поиска. Из этого раздела также можно узнать, как получить метаданные об определенном видео.

  • Раздел Поиск и получение видео объясняет, как получить список видео. API данных YouTube определяет несколько типов стандартных каналов, например, видео с лучшими оценками или лидеры просмотров. Этот раздел рассказывает также о том, как получить список видео, добавленных определенным пользователем или список похожего видео. Наконец, этот раздел описывает, как использовать API для того, чтобы пользователи могли искать в библиотеке YouTube видео, соответствующие определенным ключевым словам или категориям.

  • Раздел Загрузка видео кратко рассматривает два способа, которыми пользователи могут загружать видео на YouTube из вашего приложения. Этот раздел также рассказывает, как дать пользователям возможность удалять видео из своего приложения. Эти решения более подробно описаны в Руководстве по протоколу. Для использования некоторых функций API может быть необходимо позволить пользователям загружать видео. Например, API обеспечивает функцию добавления видеоответа к видео. Однако, если пользователь добавляет новое видео в качестве видеоответа, ваш клиент должен следовать руководству по добавлению видео и добавить видео на YouTube, прежде чем определить его как ответ на уже существующее видео.

  • Раздел Обновление и удаление видео описывает, как использовать API для обновления информации о видео YouTube. Он также расскажет, как удалить видео с помощью API.

  • Раздел Использование функций сообществ описывает функции API, позволяющие вашим пользователям взаимодействовать с видео на YouTube. Эти функции поясняют запросы для размещения оценки, комментария, видеоответа или жалобы на существующее видео. API можно также использовать для получения списков комментариев к видео или видеоответов, или для удаления видеоответа.

  • Раздел Сохранение и сбор видео расскажет об использовании API для доступа, создания и обновления избранного видео, плейлистов и подписок на каналы YouTube.

  • В разделе Взаимодействие пользователей объясняется, как, пользуясь API, получать и обновлять профили пользователей. Этот раздел также рассказывает, как получать, добавлять, обновлять и удалять контакты пользователя, а также как получать, отправлять и удалять сообщения.

Начало работы

О настройке клиентской библиотеки Java можно см. в Руководстве по началу работы. Для использования клиентской библиотеки Java необходимо использовать Java 1.5. Загрузив клиентскую библиотеку, вы найдете необходимые для начала классы в файлах java/lib/gdata-client-1.0.jar и java/lib/gdata-youtube-1.0.jar.

Полностью рабочая копия примера кода доступна в дистрибутиве по адресу gdata/java/sample/youtube/YouTubeClient.java. Инструкции по сборке и выполнению находятся в том же каталоге в файле README.txt. Этот пример выполняет некоторое количество операций на каналах API данных YouTube, иллюстрируя использование API. Список выполняемых операций см. в методе main примера клиентского приложения.

Для компиляции примеров из этого документа в свой код, нужно импортировать следующие модули:

import com.google.gdata.client.*;
import com.google.gdata.client.youtube.*;
import com.google.gdata.data.*;
import com.google.gdata.data.geo.impl.*;
import com.google.gdata.data.media.*;
import com.google.gdata.data.media.mediarss.*;
import com.google.gdata.data.youtube.*;
import com.google.gdata.data.extensions.*;
import com.google.gdata.util.*;
import java.io.IOException;
import java.io.File;
import java.net.URL;

Аутентификация

Клиентская библиотека Java может использоваться для работы как с публичными, так и с частными каналами. Публичные каналы доступны только для чтения и не требуют аутентификации. Некоторые каналы YouTube доступны без аутентификации, но для всех изменений канала требуется аутентификация. Аутентификация возможна через прокси AuthSub или с помощью имени пользователя и пароля ClientLogin.

Для того, чтобы выполнять любые операции записи и загрузки с помощью API YouTube, нужно создать экземпляр объекта YouTubeService с идентификатором клиента и ключом разработчика, следующим образом:

YouTubeService service = new YouTubeService(clientID, developer_key);

Если у вас нет ключа разработчика, вы можете подать заявку на его получение. На этой странице также можно получить идентификатор клиента.

Подробнее о AuthSub и ClientLogin см. в документации по аутентификации.

AuthSub для веб-приложений

Для получения идентификатора AuthSub для данного пользователя и данной службы, приложение должно перенаправить пользователя на URL AuthSubRequest, который предложит ему зайти в свой аккаунт Google.

Подробнее о URL AuthSubRequest см. в документации AuthSub.

Для создания URL AuthSubRequest для своего приложения, сделайте вызов к клиентской библиотеке Java следующим образом:

String requestUrl =
AuthSubUtil.getRequestUrl("http://www.example.com/RetrieveToken",
                        "http://gdata.youtube.com",
                        false,
                        true);

Метод getRequestUrl принимает несколько параметров (соответствующих параметрам запросов, использующихся обработчиком AuthSubRequest): URL "next" (это URL, на который Google перенаправит пользователя после входа в аккаунт и получения доступа); диапазон (определенный в предыдущем разделе); и две логических переменных, одна, означающая, будет ли идентификатор использоваться в регистрированном режиме или нет, и вторая, означающая, будет ли идентификатор впоследствии обмениваться на идентификатор сеанса. Пример выше иллюстрирует вызов в незарегистрированном режиме (первая переменная – false), для получения идентификатора, который будет позже обмениваться на идентификатор сеанса (вторая переменная – true); измените переменные соответственно вашему приложению.

После создания URL "next", ваше приложение со стороны сервера может его использовать несколькими способами для отправки пользователя к обработчику AuthSubRequest. Самый распространенный подход – отображать страницу, сообщающую пользователю, что ему нужно перейти по ссылке, чтобы дать вашему приложению доступ к его аккаунту Google, а затем привязать к ссылке URL запроса. Например, на странице можно отобразить следующую строку:

String suggestAuthorization = "<p>MyApp needs access to your
YouTube account. To authorize
MyApp to access your account, <a href=\"" + requestUrl + "\">log in
to your account</a>.</p>";

Пользователь переходит по ссылке на страницу AuthSub на Google и входит в систему. Система AuthSub перенапрвляет пользователя обратно к вашему приложению, используя указанный вами URL "next".

При перенаправлении от Google к вашему приложению идентификатор присоединяется к URL "next" как параметр запроса. Поэтому, в случае приведенного выше URL "next", после входа пользователя Google перенаправит его на такой URL http://www.example.com/RetrieveToken?token=DQAADKEDE.

Браузер пользователя перенаправляется на этот URL. Сервлет, обрабатывающий этот URL, должен изучить параметры запроса в URL запроса, чтобы получить идентификатор, выставленный Google. Например, сервлет может получить идентификатор из URL, используя вспомогательную функцию getTokenFromReply из клиентской библиотеки Java:

String onetimeUseToken = 
AuthSubUtil.getTokenFromReply(httpServletRequest.getQueryString());

Ваше приложение может определить, какой пользователь аутентифицировался на серверах Google с помощью AuthSub, установив файл cookie, прежде чем он нажмет ссылку AuthSub, а затем прочитать этот файл cookie после того, как пользователь аутентифицировался и вернулся на вашу страницу.

Полученный идентификатор с getTokenFromReply всегда одноразовый. Его можно обменять на идентификатор сеанса с помощью URL AuthSubSessionToken, согласно документации AuthSub. Приложение может осуществить этот обмен с помощью клиентской библиотеки Java следующим образом:

String sessionToken = AuthSubUtil.exchangeForSessionToken(onetimeUseToken,
                                                      null);

Вы передаете одноразовый идентификатор методу exchangeForSessionToken, вместе с null (для незарегистрированного режима) или личный ключ (для зарегистрированного режима), а интерфейс AuthSub возвращает идентификатор сеанса. Дополнительную информацию о зарегистрированных приложениях и частных ключах можно найти в документации AuthSub.

Идентификатор сеанса можно использовать для аутентификации запросов серверу, поместив идентификатор в заголовок Authorization, см. документацию AuthSub. Для того, чтобы клиентская библиотека Java автоматически отправила с каждым запросом заголовок Authorization (содержащий идентификатор сеанса), нужно вызвать метод setAuthSubToken объекта YouTubeService:

YouTubeService service = new YouTubeService(clientID, developer_key);
service.setAuthSubToken(sessionToken, null);

Если вы используете зарегистрированный режим, вместо null нужно добавить свой личный ключ. Заметьте, что конструктору YouTubeService необходимо передать идентификатор клиента и ключ разработчика.

Вызвав setAuthSubToken, можно воспользоваться стандартными вызовами клиентской библиотеки GData для взаимодействия со службой, не задумываясь более об идентификаторе.

Если вы хотите получить информацию о параметрах идентификатора, его можно передать методу getTokenInfo, возвращающему набор пар имя-значение, содержащий сведения об идентификаторе. Например:

Map<String, String> info = AuthSubUtil.getTokenInfo(sessionToken, null);  

Идентификаторы сеанса AuthSub не имеют срока действия; ваш клиент может хранить идентификатор сеанса сколько угодно.

Когда клиент закончил его использовать, он может отозвать идентификатор, используя обработчик AuthSubRevokeToken, согласно документации AuthSub.

Например, если вы хотите управлять идентификаторами обычным способом, как, например, сеансами, ваш клиент может получать идентификатор в начале сеанса пользователя и отзывать его в конце сеанса.

Для отзыва идентификатора с помощью клиентской библиотеки Java, вызовите revokeToken. Для зарегистрированного режима включите свой личный ключ, либо null в противном случае. Например:

AuthSubUtil.revokeToken(sessionToken, null);

ClientLogin для установленных приложений

Для использования ClientLogin (также называемого "Аутентификация для установленных приложений"), вызовите метод setUserCredentials YouTubeService, указав идентификатор и пароль пользователя, от имени которого клиент отправляет запрос. Например:

YouTubeService service = new YouTubeService(clientID, developer_key);
service.setUserCredentials("jo@gmail.com", "password");

Заметьте, что объекту YouTubeService необходимо также предоставить идентификатор клиента и ключ разработчика, чтобы выполнять операции записи и получать частные каналы, используя API YouTube. Если у вас нет ключа разработчика, можно подать заявку на его получение.

Более подробные сведения о системах аутентификации можно найти в документации Аутентификация аккаунта Google.

Видео каналы и записи

API данных YouTube предоставляет несколько каналов видео, таких как стандартные каналы, загрузки, подписки и избранные. URL всех каналов приведены в справочном руководстве.

Отображение канала видео

Многие каналы в API YouTube состоят из видео. Эти каналы проще всего смоделировать как объекты VideoFeed, каждый из которых содержит несколько объектов VideoEntry. Каждая запись видео соответствует строго одному видео на YouTube и содержит информацию о видео.

Основная схема получения списка видео – собрать URL на канал видео и обработать записи по одной, как в этом коде:

VideoFeed videoFeed = service.getFeed(new URL(feedUrl), VideoFeed.class);
for(VideoEntry entry : videoFeed.getEntries() ) {
  System.out.println("Title: " + entry.getTitle().getPlainText());
  System.out.println(entry.getMediaGroup().getDescription().getPlainTextContent());
}

В разделе Поиск и получение видео приведены URL многих обычных каналов и сведения о том, как получать различные каналы видео.

Получение определенного видео

Получить сведения об определенном видео можно, если вы знаете его собственную ссылку, которая является элементом link с записью Atom, описывающей видео, при этом атрибут rel имеет значение self. Собственная ссылка – это URL, основанный на идентификаторе видео.

http://gdata.youtube.com/feeds/api/videos/videoID

Собственная ссылка видео совпадает с идентификатором записи в элементе id.

Следующий код получает VideoEntry, соответствующее видео на YouTube:

String videoEntryUrl = "http://gdata.youtube.com/feeds/api/videos/ADos_xW4_J0";
VideoEntry videoEntry = service.getEntry(new URL(videoEntryUrl), VideoEntry.class);
System.out.println("Title: " + videoEntry.getTitle().getPlainText());
System.out.println(videoEntry.getMediaGroup().getDescription().getPlainTextContent());

Содержание видео

Из объекта VideoEntry можно получить массу метаданных, например, эскизы изображений, URL проигрывателя и длительность видео. Следующий код показывает, как получить часть этой информации. Полный список возможных элементов XML можно найти в справочном руководстве.

System.out.println("Title: " + videoEntry.getTitle().getPlainText());
      
YouTubeMediaGroup mediaGroup = videoEntry.getMediaGroup();

System.out.println("Description: " + mediaGroup.getDescription().getPlainTextContent());

MediaPlayer mediaPlayer = mediaGroup.getPlayer();
System.out.println("Web Player URL: " + mediaPlayer.getUrl());
MediaKeywords keywords = mediaGroup.getKeywords();
System.out.print("Keywords: ");
for(String keyword : keywords.getKeywords()) {
  System.out.print(keyword + ",");
}
GeoRssWhere location = videoEntry.getLocation();
if(location != null) {
  System.out.println("Latitude: " + location.getLatitude());
  System.out.println("Longitude: " + location.getLongitude());
}
Rating rating = videoEntry.getRating();
if(rating != null) {
  System.out.println("Average rating: " + rating.getAverage());
}
YtStatistics stats = videoEntry.getStatistics();
if(stats != null ) {
  System.out.println("View count: " + stats.getViewCount());
}
System.out.println();
System.out.println("\tThumbnails:");
for(MediaThumbnail mediaThumbnail : mediaGroup.getThumbnails()) {
  System.out.println("\t\tThumbnail URL: " + mediaThumbnail.getUrl());
  System.out.println("\t\tThumbnail Time Index: " +
      mediaThumbnail.getTime());
  System.out.println();
}
System.out.println("\tMedia:");
for(YouTubeMediaContent mediaContent : mediaGroup.getYouTubeContents()) {
  System.out.println("\t\tMedia Location: "+ mediaContent.getUrl());
  System.out.println("\t\tMedia Type: "+ mediaContent.getType());
  System.out.println("\t\tDuration: " + mediaContent.getDuration());
  System.out.println();
}

Поиск и получение видео

Получение стандартных каналов

API данных YouTube создает стандартные каналы видео на основании разных критериев. Это каналы в масштабах сайта, они не относятся к определенным пользователям. URL всех стандартных каналов начинаются с http://gdata.youtube.com/feeds/api/standardfeeds/, а затем идет идентификатор канала. Вот таблица доступных каналов:

Название каналаИдентификатор канала
Лидеры просмотровmost_viewed
Лучшие оценкиtop_rated
В центре вниманияrecently_featured
Смотреть на телефонеwatch_on_mobile
Лидеры обсужденийmost_discussed
Лидеры в избранномtop_favorites
Лидеры по ссылкамmost_linked
Лидеры по ответамmost_responded
Последние добавленияmost_recent

Указав в формате localeID, можно получать стандартные каналы для определенного места: http://gdata.youtube.com/feeds/api/standardfeeds/localeID/feedID. Например, лидеры просмотров в Японии выглядят так: http://gdata.youtube.com/feeds/api/standardfeeds/JP/most_viewed.

Пример ниже выводит названия и описания самых просматриваемых видео на сайте:

String feedUrl = "http://gdata.youtube.com/feeds/api/standardfeeds/most_viewed";
VideoFeed videoFeed = service.getFeed(new URL(feedUrl), VideoFeed.class);

for(VideoEntry entry : videoFeed.getEntries() ) {
  System.out.println("Title: " + entry.getTitle().getPlainText());
  System.out.println(entry.getMediaGroup().getDescription().getPlainTextContent());
}

Видео, добавленное определенным пользователем

Каждый пользователь YouTube имеет связанный с ним канал видео, соответствующий видео, которые он загрузил, по адресу /feeds/api/users/userID/uploads. Следующий код выводит названия и описания видео, добавленных пользователем "GoogleDevelopers".

String feedUrl = "http://gdata.youtube.com/feeds/api/users/GoogleDevelopers/uploads";

VideoFeed videoFeed = service.getFeed(new URL(feedUrl), VideoFeed.class);
for(VideoEntry entry : videoFeed.getEntries() ) {
  System.out.println("Title: " + entry.getTitle().getPlainText());
  System.out.println(entry.getMediaGroup().getDescription().getPlainTextContent());
}

Для аутентифицированного в настоящий момент пользователя можно использовать имя пользователя "default". Для получения видео аутентифицированного пользователя, таким образом, следует использовать URL http://gdata.youtube.com/feeds/api/users/default/uploads.

Получение похожего видео

Каждое видео в канале видео имеет ссылку на другой канал видео, содержащий все похожее видео, по определению YouTube. Следующий код показывает, как получить и вывести сведения о похожем видео определенной VideoEntry.

if (videoEntry.getRelatedVideosLink() != null) {
  String feedUrl = videoEntry.getRelatedVideosLink().getHref();
  
  VideoFeed videoFeed = service.getFeed(new URL(feedUrl), VideoFeed.class);
  for(VideoEntry entry : videoFeed.getEntries() ) {
    System.out.println("Title: " + entry.getTitle().getPlainText());
    System.out.println(entry.getMediaGroup().getDescription().getPlainTextContent());
  }
}

Поиск видео

API данных YouTube позволяет запрашивать набор записей, соответствующих определенным критериям, например, видео, опубликованные каким-либо автором или содержащие некоторое ключевое слово. Для этого создайте объект YouTubeQuery и передайте его методу YouTubeService.query().

Например, для выполнения поиска по ключевому слову, с сортировкой результатов по числу просмотров, в том числе видео с ограниченным доступом, используйте методы setVideoQuery, setOrderBy и setIncludeRacy объекта YouTubeQuery. Следующий фрагмент кода выводит названия и описания всех видео, соответствующих ключевому слову "puppy", отсортированные по количеству просмотров и включающие видео с ограниченным доступом:

YouTubeQuery query = new YouTubeQuery(new URL("http://gdata.youtube.com/feeds/api/videos"));
// order results by the number of views (most viewed first)
query.setOrderBy(YouTubeQuery.OrderBy.VIEW_COUNT);

// do not exclude restricted content from the search results
query.setIncludeRacy(true);

//search for puppies!
query.setVideoQuery("puppy");

VideoFeed videoFeed = service.query(query, VideoFeed.class);

for(VideoEntry entry : videoFeed.getEntries() ) {
  System.out.println("Title: " + entry.getTitle().getPlainText());
  System.out.println(entry.getMediaGroup().getDescription().getPlainTextContent());
}

Класс Query и подклассы подобные YouTubeQuery отвечают за создание URL каналов. YouTubeQuery выше создает URL, эквивалентный следующему:

http://gdata.youtube.com/feeds/api/videos?vq=keyword&racy=include&orderby=viewCount

Вот наиболее часто встречающиеся методы YouTubeQuery для установки параметров поиска:

setAuthor
Устанавливает автора записи.
setMaxResults
Устанавливает максимальное число одновременно возвращаемых записей.
setStartIndex
Устанавливает индекс первого получаемого результата для перелистывания страниц (начиная с 1).
setVideoQuery
Устанавливает критерий поиска. Ищет указанную строку во всех метаданных видео, таких, как названия, теги и описания.
setIncludeRacy
Определяет, должно ли включаться в результаты содержимое с ограниченным доступом.
setFormat
Указывает формат видео.
setOrderBy
Устанавливает порядок перечисления записей, например, RELEVANCE, VIEW_COUNT, UPDATED или RATING.
setTime
Устанавливает период времени, ограничивающий результаты стандартных каналов: TODAY, THIS_WEEK, THIS_MONTH или ALL_TIME.

Более подробные сведения о параметрах запросов можно найти в Справочном руководстве API данных YouTube и Справочном руководстве API данных Google.

Поиск видео с помощью категорий и ключевых слов

Результаты поиска можно ограничить только тем видео, которое соответствуют определенному набору категорий и ключевых слов. Справочное руководство рассказывает, как указать существующие категории YouTube и определяемые пользователем ключевые слова, которые также называют тегами.

Следующий код показывает, как искать с помощью ключевых слов, что соответствует использованию категоризации KEYWORD_SCHEME, и как искать с помощью категорий YouTube, что соответствует категоризации CATEGORY_SCHEME. Помните, что каждое видео может иметь несколько ключевых слов, но только одну категорию.

YouTubeQuery query = new YouTubeQuery(new URL("http://gdata.youtube.com/feeds/api/videos"));

// a category filter holds a collection of categories to limit the search
Query.CategoryFilter categoryFilter1 = new Query.CategoryFilter();
Query.CategoryFilter categoryFilter2 = new Query.CategoryFilter();

//this restricts to videos tagged with the keyword "puppy".
categoryFilter1.addCategory(new Category(YouTubeNamespace.KEYWORD_SCHEME, "puppy"));
//this restricts to videos in the category of "Comedy".
categoryFilter2.addCategory(new Category(YouTubeNamespace.CATEGORY_SCHEME, "Comedy"));

// multiple filters mean "AND" in a category query
query.addCategoryFilter(categoryFilter1);
query.addCategoryFilter(categoryFilter2);

VideoFeed videoFeed = service.query(query, VideoFeed.class);

for(VideoEntry entry : videoFeed.getEntries() ) {
  System.out.println("Title: " + entry.getTitle().getPlainText());
  System.out.println(entry.getMediaGroup().getDescription().getPlainTextContent());
}

Код выше получает все видео в категории Comedy ("Комедия") и имеют ключевое слово "puppy". Если вы хотите получать видео, относящиеся к категории "Comedy" либо имеющие ключевое слово "puppy", можно просто использовать один CategoryFilter, содержащий оба объекта Category.

Список используемых категорий можно найти здесь: http://gdata.youtube.com/schemas/2007/categories.cat.

Поиск видео с помощью тегов разработчика

Теги разработчика – это дополнительные, скрытые ключевые слова, которые разработчик может использовать для отметки добавленного им содержимого. Эти ключевые слова не видны пользователям, но их можно использовать для получения видео. Следующий код получает канал всех видео с тегом разработчика "xyzzy":

YouTubeQuery query = new YouTubeQuery(new URL("http://gdata.youtube.com/feeds/api/videos"));
Query.CategoryFilter categoryFilter = new Query.CategoryFilter();
categoryFilter.addCategory(new Category(YouTubeNamespace.DEVELOPER_TAG_SCHEME, "xyzzy"));
      
query.addCategoryFilter(categoryFilter);

VideoFeed videoFeed = service.query(query, VideoFeed.class);

for(VideoEntry entry : videoFeed.getEntries() ) {
  System.out.println("Title: " + entry.getTitle().getPlainText());
  System.out.println(entry.getMediaGroup().getDescription().getPlainTextContent());
}

Для получения видео с тегом разработчика, необходимо использовать ключ разработчика, использованный для добавления видео с этим тегом. Запрос не нужно аутентифицировать, нужно только обеспечить ключ разработчика.

Загрузка видео

Загружать видео можно одним из двух способов: напрямую или отправляя только метаданные видео (пользователь при этом добавляет видео через HTML-форму).

Загруженное видео некоторое время обрабатывается и индексируется на YouTube. При большой нагрузке это может занять почти целый день. Но эти видео будут сразу же видны в канале загрузки аутентифицированного пользователя. Более подробные сведения можно найти в разделе Проверка состояния загрузки.

Прямая загрузка

Для загрузки видео нужно собрать новый объект VideoEntry и указать некоторые обязательные элементы. Следующий пример иллюстрирует загрузку видео в формате Quickitime "file.mov" на YouTube со следующими свойствами:

СвойствоЗначение
Названиеtesting
КатегорияAutos (автомобили)
Ключевые словаfoo
Описаниеmy description
Имя файлаfile.mov
Тип MIME файлаvideo/quicktime
Видео только для избранных?false
Где снято видео37,-122 (lat,long) (широта, долгота)
Тег разработчикаxyzzy

При загрузке видео следующие поля обязательны: название, описание, категория и ключевые слова.

VideoEntry newEntry = new VideoEntry();
newEntry.setGeoCoordinates(new GeoRssWhere(37.0,-122.0));
//alternatively, one could specify just a descriptive string
newEntry.setLocation("Mountain View, CA");

YouTubeMediaGroup mg = newEntry.getOrCreateMediaGroup();

mg.addCategory(new MediaCategory(YouTubeNamespace.CATEGORY_SCHEME, "Autos"));
mg.addCategory(new MediaCategory(YouTubeNamespace.DEVELOPER_TAG_SCHEME, "xyzzy"));
mg.setPrivate(false);
mg.setTitle(new MediaTitle());
mg.getTitle().setPlainTextContent("testing");
mg.setKeywords(new MediaKeywords());
mg.getKeywords().addKeyword("foo");
mg.setDescription(new MediaDescription());
mg.getDescription().setPlainTextContent("my description");
MediaFileSource ms = new MediaFileSource(new File("file.mov"), "video/quicktime");
newEntry.setMediaSource(ms);

String uploadUrl = "http://uploads.gdata.youtube.com/feeds/api/users/default/uploads";

VideoEntry createdEntry = service.insert(new URL(uploadUrl), newEntry);

Загрузка через браузер

Загрузка через браузер позволяет сайту добавлять видео на YouTube прямо через браузер пользователя. Этот метод добавления использует специальный URL вместо URL загрузки аутентифицированного пользователя:

http://gdata.youtube.com/action/GetUploadToken

Хотя пользователь будет добавлять видеофайл напрямую, код должен сначала отправить метаданные видео на YouTube, практически так же, как и при прямом добавлении. Единственная разница, помимо специального URL, это то, что вы не присоединяете объект MediaFileSource к собираемому VideoEntry.

При загрузке видео следующие поля обязательны: название, описание, категория и ключевые слова.

VideoEntry newEntry = new VideoEntry();
newEntry.setGeoCoordinates(new GeoRssWhere(37.0,-122.0));
//alternatively, one could specify just a descriptive string
newEntry.setLocation("Mountain View, CA");
YouTubeMediaGroup mg = newEntry.getOrCreateMediaGroup();

mg.addCategory(new MediaCategory(YouTubeNamespace.CATEGORY_SCHEME, "Autos"));
mg.addCategory(new MediaCategory(YouTubeNamespace.DEVELOPER_TAG_SCHEME, "xyzzy"));
mg.setTitle(new MediaTitle());
mg.setPrivate(false);
mg.getTitle().setPlainTextContent("testing");
mg.setKeywords(new MediaKeywords());
mg.getKeywords().addKeyword("foo");
mg.setDescription(new MediaDescription());
mg.getDescription().setPlainTextContent("my description");


URL uploadUrl = new URL("http://gdata.youtube.com/action/GetUploadToken");
FormUploadToken token = service.getFormUploadToken(uploadUrl, newEntry);

System.out.println(token.getUrl());
System.out.println(token.getToken());

Код выше выводит ссылку и идентификатор, которые используются для создания HTML формы, отображаемой в браузере пользователя. Простой пример формы приведен ниже; post_url представляет значение token.getUrl(), а token_value – значение token.getToken().

<form action="post_url" method ="post" enctype="multipart/form-data">
<input type="file" name="file"/>
<input type="hidden" name="token" value="token_value"/>
<input type="submit" value="go" />
</form>

Для того, чтобы пользователь был перенаправлен на ваш веб-сайт после подачи формы, добавьте кpost_url (выше) параметр next, который работает так же, как параметр next ссылки AuthSub.

Проверка состояния загрузки

После загрузки видео сразу станет доступно в канале загрузки аутентифицированного пользователя:

http://gdata.youtube.com/feeds/api/users/default/uploads

Однако оно будет опубликовано на сайте только после обработки. Видео, которые были отклонены или не добавлены, тоже будут присутствовать только в канале загрузки аутнетифицированного пользователя. Следующий код проверяет состояние VideoEntry, контролируя, опубликовано ли оно или было отклонено.

if(entry.isDraft()) {
  System.out.println("Video is not live");
  YtPublicationState pubState = entry.getPublicationState();
  if(pubState.getState() == YtPublicationState.State.PROCESSING) {
    System.out.println("Video is still being processed.");
  }
  else if(pubState.getState() == YtPublicationState.State.REJECTED) {
    System.out.print("Video has been rejected because: ");
    System.out.println(pubState.getDescription());
    System.out.print("For help visit: ");
    System.out.println(pubState.getHelpUrl());
  }
  else if(pubState.getState() == YtPublicationState.State.FAILED) {
    System.out.print("Video failed uploading because: ");
    System.out.println(pubState.getDescription());
    System.out.print("For help visit: ");
    System.out.println(pubState.getHelpUrl());
  }
}

Обновление и удаление видео

Обновление информации о видео

Для обновления метаданных видео просто обновите объект VideoEntry и затем используйте метод update. Следующий пример обновляет описание видео:

entry.getMediaGroup().getDescription().setPlainTextContent("new description");
entry.update();

Удаление видео

Для удаления видео надо просто получить канал загрузки для аутентифицированного пользователя, вызвать метод delete на объекте VideoEntry этого видео.

videoEntry.delete();

Использование функций сообществ

Добавление оценок

Для добавления оценки к видео, просто добавьте объект Rating к VideoEntry и отправьте его как POST на ссылку оценки этого VideoEntry.

String ratingUrl = entry.getRatingLink().getHref();
Rating myRating = new Rating();
myRating.setValue(5);
myRating.setMax(5);
myRating.setMin(1);
entry.setRating(myRating);
service.insert(new URL(ratingUrl), entry);

Комментарии

Получение комментариев к видео

Имея объект VideoEntry, вы можете получать и выводить канал, содержащий комментарии к видео с помощью следующего кода:

String commentUrl = videoEntry.getComments().getFeedLink().getHref();
       
CommentFeed commentFeed = service.getFeed(new URL(commentUrl), CommentFeed.class);
for(CommentEntry comment : commentFeed.getEntries()) {
  System.out.println(comment.getPlainTextContent());
}

Добавление комментария

Получив URL комментария (как описано в предыдущем разделе), можно разместить новый комментарий.

CommentEntry newComment = new CommentEntry();
newComment.setContent(new PlainTextConstruct("my pithy comment"));
service.insert(new URL(commentUrl), newComment);

Видеоответы

Получение видеоответов на видео

Каждое видео в канале может иметь связанный канал видеоответов, который сам является каналом видео. Этот код показывает, как получить и вывести информацию о видеоответах на данное VideoEntry.

if (videoEntry.getVideoResponsesLink() != null) {
  String feedUrl = videoEntry.getVideoResponsesLink().getHref();
  
  VideoFeed videoFeed = service.getFeed(new URL(feedUrl), VideoFeed.class);
  for(VideoEntry entry : videoFeed.getEntries() ) {
    System.out.println("Title: " + entry.getTitle().getPlainText());
    System.out.println(entry.getMediaGroup().getDescription().getPlainTextContent());
  }
}

Подробнее о получении каналов из различных объектов см. в разделе Переход между каналами справочного руководства.

Добавление видеоответов

После получения ссылки видеоответа (как описано в предыдущем разделе), можно отправить через POST VideoEntry, соответствующее видео, которое вы бы хотели отметить как видеоответ на исходное видео.

service.insert(new URL(responseVideosLink), videoResponseEntry);

Если вы получили видеоответы как канал, добавлять можно прямо в объект VideoFeed.

videoFeed.insert(videoResponseEntry);

Помните, что все видеоответы должны быть одобрены владельцем видео, на которое дан ответ, прежде чем они появятся в канале видеоответов.

Удаление видеоответов

Если одно из ваших видео в объекте VideoFeed получено с использованием ссылки видеоответов, удалить его из категории видеоответов можно вызовом на этой записи delete.

videoResponseEntry.delete();

Отметка видео как неприемлемого

Добавление жалобы на видео осуществляется через отправку с помощью POST записи Atom на ссылку жалоб объекта VideoEntry. Код ниже – пример отметки видео как неприемлемого.

String complaintUrl = badVideoEntry.getComplaintsLink().getHref();
ComplaintEntry complaintEntry = new ComplaintEntry();
complaintEntry.setComment("This video offends my sensibilities.");
service.insert(new URL(complaintUrl), complaintEntry);

Сохранение и сбор видео

Избранное видео

Получение избранного видео пользователя

Каждый пользователь YouTube может иметь избранное видео. Канал, соответствующий этому избранному видео, является, по сути, просто плейлистом без названия. Канал избранного пользователем можно получить со следующего URL:

http://gdata.youtube.com/feeds/api/users/userID/favorites

Код ниже выводит список избранного пользователем:

String feedUrl = "http://gdata.youtube.com/feeds/api/users/YTDebates/favorites";
    
VideoFeed videoFeed = service.getFeed(new URL(feedUrl), VideoFeed.class);
for(VideoEntry entry : videoFeed.getEntries() ) {
  System.out.println("Title: " + entry.getTitle().getPlainText());
  System.out.println(entry.getMediaGroup().getDescription().getPlainTextContent());
}

Заметьте, что вместо имени пользователя можно использовать строку default, то есть "аутентифицированный сейчас пользователь".

Добавление избранного

Для добавления избранного, просто вставьте VideoEntry этого видео в канал избранного аутентифицированного пользователя.

String videoEntryUrl = "http://gdata.youtube.com/feeds/api/videos/ADos_xW4_J0";
VideoEntry videoEntry = service.getEntry(new URL(videoEntryUrl), VideoEntry.class);

service.insert(new URL(feedUrl), videoEntry);

Удаление избранного

Для удаления избранного видео, просто используйте метол delete на VideoEntry в канале избранного аутентифицированного пользователя.

entry.delete();

Плейлисты

Каждый пользователь YouTube имеет связанный с ним канал плейлистов, который является списком ссылок на канал, содержащий видео в каждом плейлисте.

Получение плейлистов пользователя

Для получения канала плейлистов определенного пользователя, воспользуйтесь следующим URL:

http://gdata.youtube.com/feeds/api/users/userID/playlists

В следующем коде показано, как получить и вывести канал плейлистов, используя этот URL:

String feedUrl = "http://gdata.youtube.com/feeds/api/users/YTdebates/playlists";

PlaylistLinkFeed feed = service.getFeed(new URL(feedUrl), PlaylistLinkFeed.class);

for(PlaylistLinkEntry entry : feed.getEntries()) {
  System.out.println("Title: " + entry.getTitle().getPlainText());
  System.out.println("Description: " + entry.getDescription());
}

Заметьте, что вместо имени пользователя можно использовать строку default, то есть "аутентифицированный сейчас пользователь".

Получение информации плейлиста

Имея PlaylistLinkEntry, полученный из предыдущего примера, можно получить и вывести плейлист с помощью следующего кода:

String playlistUrl = entry.getFeedLink().getHref();

PlaylistFeed playlistFeed = service.getFeed(new URL(playlistUrl), PlaylistFeed.class);

for(PlaylistEntry playlistEntry : playlistFeed.getEntries()) {
  System.out.println("Title: " + playlistEntry.getTitle().getPlainText());
  System.out.println("Description: " + playlistEntry.getDescription());
  System.out.println("Position: " + playlistEntry.getPosition());
  System.out.println("Video URL: " + playlistEntry.getHtmlLink().getHref());
}

Помните, что PlaylistEntry наследует VideoEntry. Подробнее о том, что можно получить из объекта VideoEntry, см. в разделе Содержание видео.

Добавление плейлиста

Создать новый плейлист можно, вставив PlaylistLinkEntry в канал плейлистов аутентифицированного пользователя.

String feedUrl = "http://gdata.youtube.com/feeds/api/users/default/playlists";

PlaylistLinkEntry newEntry = new PlaylistLinkEntry();
newEntry.setTitle(new PlainTextConstruct("new playlist"));
newEntry.setDescription("this is my new playlist.");

PlaylistLinkEntry createdEntry = service.insert(new URL(feedUrl), newEntry);

Обновление плейлиста

Для обновления таких данных плейлиста, как название или описание, просто измените объект PlaylistLinkEntry и вызовите его метод update. Код ниже обновляет описание плейлиста.

entry.setDescription("updated description");
entry.update();

Добавление видео в плейлист

Добавить видео в плейлист можно, используя объект VideoEntry. Код ниже получает VideoEntry с известным идентификатором записи, а затем добавляет его в плейлист, соответствующий PlaylistLinkEntry. Так как положение не указано, новое видео добавляется в конец плейлиста.

String playlistUrl = playlistLinkEntry.getFeedLink().getHref();
String videoEntryUrl = "http://gdata.youtube.com/feeds/api/videos/ADos_xW4_J0";
VideoEntry videoEntry = service.getEntry(new URL(videoEntryUrl), VideoEntry.class);

PlaylistEntry playlistEntry = new PlaylistEntry(videoEntry);
playlistEntry.setTitle(new PlainTextConstruct("Custom title"));
playlistEntry.setDescription("Custom description");
service.insert(new URL(playlistUrl), playlistEntry);

Заметьте, что код выше указывает пользовательское название и описание видео. Это не обязательно, и если они не указаны, то будут использоваться фактические название и описание видео.

Изменение информации о видео в плейлисте

Изменить пользовательские название и описания для каждого видео в плейлисте можно, обновив объект PlaylistEntry и вызвав его метод update.

playlistEntry.setDescription("updated description");
//move this entry to the top of the playlist
playlistEntry.setPosition(0);
playlistEntry.update();

Если вы хотите изменить описание и название видео в плейлисте обратно на оригинальные, это можно сделать с помощью следующего кода:

playlistEntry.setDescription(null);
playlistEntry.setTitle(null);
playlistEntry.update();

Удаление видео из плейлиста

Для удаления видео из плейлиста, используйте метод delete PlaylistEntry:

playlistEntry.delete();

Удаление плейлиста

Для удаления плейлиста, просто вызовите метод delete соответствующего объекта PlaylistLinkEntry.

entry.delete();

Подписки

Получение подписок пользователя

Для получения списка каналов, результатов поиска и избранных видео, на которые подписался определенный пользователь, используйте этот URL:

http://gdata.youtube.com/feeds/api/users/userID/subscriptions

Следующий код показывает, как получить и вывести список подписок данного пользователя, используя такой URL:


String feedUrl = "http://gdata.youtube.com/feeds/api/users/GoogleDevelopers/subscriptions";
    
SubscriptionFeed feed = service.getFeed(new URL(feedUrl), SubscriptionFeed.class);

for(SubscriptionEntry entry : feed.getEntries()) {
  System.out.println("Title: " + entry.getTitle().getPlainText());
  System.out.println("Feed Link: " + entry.getFeedLink().getHref());
}

Заметьте, что вместо имени пользователя можно использовать строку default, то есть "аутентифицированный сейчас пользователь".

Добавление подписки

Создать новую подписку можно, вставив новый SubscriptionEntry в канал подписок аутентифицированного пользователя. Следующий код подписывает аутентифицированного пользователя на канал "GoogleDevelopers".

SubscriptionEntry newSubscription = new SubscriptionEntry();
newSubscription.addSubscriptionType(SubscriptionEntry.Type.CHANNEL);
newSubscription.setUsername("GoogleDevelopers");
service.insert(new URL(feedUrl), newSubscription);

Можно также подписаться на избранное пользователя "GoogleDevelopers":

SubscriptionEntry newSubscription = new SubscriptionEntry();
newSubscription.addSubscriptionType(SubscriptionEntry.Type.FAVORITES);
newSubscription.setUsername("GoogleDevelopers");
service.insert(new URL(feedUrl), newSubscription);

Наконец, можно подписаться на результаты поиска по определенным критериям:

SubscriptionEntry newSubscription = new SubscriptionEntry();
newSubscription.addSubscriptionType(SubscriptionEntry.Type.QUERY);
newSubscription.setQueryString("puppy");
service.insert(new URL(feedUrl), newSubscription);

Удаление подписки

Для удаления подписки, вызовите метод delete на соответствующем объекте SubscriptionEntry.

entry.delete();

Взаимодействие пользователей

Профили

Получение профиля пользователя

Профиль пользователя YouTube можно получить как запись Atom, со следующего URL:

http://gdata.youtube.com/feeds/api/users/userID

Следующий код выводит на печать различные атрибуты из профиля пользователя:

String profileUrl = "http://gdata.youtube.com/feeds/api/users/YTdebates";
UserProfileEntry profileEntry = service.getEntry(new URL(
    profileUrl), UserProfileEntry.class);
System.out.println("Username: " + profileEntry.getUsername());
System.out.println("Age     : " + profileEntry.getAge());
System.out.println("Gender  : " + profileEntry.getGender());
System.out.println("Single? : " + profileEntry.getRelationship());
System.out.println("Books   : " + profileEntry.getBooks());
System.out.println("Company : " + profileEntry.getCompany());
System.out.println("Describe: " + profileEntry.getDescription());
System.out.println("Hobbies : " + profileEntry.getHobbies());
System.out.println("Hometown: " + profileEntry.getHometown());
System.out.println("Location: " + profileEntry.getLocation());
System.out.println("Movies  : " + profileEntry.getMovies());
System.out.println("Music   : " + profileEntry.getMusic());
System.out.println("Job     : " + profileEntry.getOccupation());
System.out.println("School  : " + profileEntry.getSchool());

YtUserProfileStatistics stats = profileEntry.getStatistics();
    
if(stats != null) {
  System.out.println("Subscriber count: " + stats.getSubscriberCount());
  System.out.println("Last web access: " + stats.getLastWebAccess().toUiString());
}

Заметьте, что вместо имени пользователя можно использовать строку default, то есть "аутентифицированный сейчас пользователь".

Контакты

Получение контактов пользователя

Для получения канала контактов пользователя, воспользуйтесь следующим URL:

http://gdata.youtube.com/feeds/api/users/userID/contacts

Следующий код выводит список всех друзей определенного пользователя:

String feedUrl = "http://gdata.youtube.com/feeds/api/users/GoogleDevelopers/contacts";

FriendFeed friendFeed = service.getFeed(new URL(feedUrl), FriendFeed.class);

for(FriendEntry friendEntry : friendFeed.getEntries()) {
  System.out.print("Friend: " + friendEntry.getUsername());
  System.out.println("Status:" + friendEntry.getStatus().toString());
}

Добавление контакта

Создать новый контакт можно, вставив FriendEntry в канал контактов аутентифицированного пользователя. При необходимости категория используется для контроля того, в какую группу попадает контакт. Код ниже добавляет пользователя "GoogleDevelopers" в контакты.

FriendEntry newFriend = new FriendEntry();
newFriend.getCategories().add(new Category(YouTubeNamespace.CONTACT_LIST_SCHEME, "Friends"));
newFriend.setUsername("GoogleDevelopers");

service.insert(new URL(feedUrl), newFriend);

Принятие и отклонение контакта

Можно принять или отклонить контакт, обновив состояние соответствующего FriendEntry.

Для принятия запроса:

friendEntry.setStatus(YtStatus.Value.ACCEPTED);
friendEntry.update();

Для отклонения запроса:

friendEntry.setStatus(YtStatus.Value.REJECTED);
friendEntry.update();

Удаление контакта

Для удаления контакта вызовите метод delete на FriendEntry.

friendEntry.delete();

Сообщения

Пользователи YouTube могут обмениваться сообщениями, которые могут также включать видео.

Получение сообщений пользователя

Для получения содержимого раздела Входящие пользователя, создайте аутентифицированный запрос на следующий URL:

http://gdata.youtube.com/feeds/api/users/userID/inbox

Пример ниже выводит на печать содержание раздела Входящие аутентифицированного пользователя:

String feedUrl = "http://gdata.youtube.com/feeds/api/users/default/inbox";

VideoMessageFeed feed = service.getFeed(new URL(feedUrl), VideoMessageFeed.class);

for(VideoMessageEntry entry : feed.getEntries()) {
  System.out.println("Message from: " + entry.getAuthors().get(0).getName());
  System.out.println("Subject: " + entry.getTitle().getPlainText());
  System.out.println(entry.getDescription());
}

Отправка сообщения пользователю

Для отправки сообщения пользователю, соберите объект VideoMessageEntry и вставьте его в канал Входящие пользователя. Все сообщения, отправляемые через API, должны включать объект VideoEntry.

Следующий код отправляет сообщение, содержащее видео, пользователю, определенному переменной receivingUser:

String msgUrl = "http://gdata.youtube.com/feeds/api/users/"+receivingUser+"/inbox";
String videoEntryUrl = "http://gdata.youtube.com/feeds/api/videos/Wegp-JOae0g";
VideoEntry videoEntry = service.getEntry(new URL(videoEntryUrl), VideoEntry.class);
VideoMessageEntry newMessage = new VideoMessageEntry(videoEntry);
newMessage.setTitle(new PlainTextConstruct("my subject"));
newMessage.setDescription("This is the message body.");
service.insert(new URL(msgUrl), newMessage);

Получатель сообщения должен входить в список контактов отправителя сообщения.

Удаление сообщения

Для удаления знакомого, вызовите метод delete объекта VideoMessageEntry:

entry.delete();

Наверх