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

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

Помимо предоставления некоторой информации о возможностях API данных YouTube, в этом документе приведены примеры взаимодействия с API с использованием клиентской библиотеки Python . Чтобы использовать клиентскую библиотеку Python, вам понадобится Python 2.0+ и модули Element Tree, httplib и urllib. Дополнительные сведения см. в разделе «Модули зависимостей» .

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

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

Аудитория

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

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

В этом документе предполагается, что вы понимаете общие идеи протокола API данных Google и умеете программировать на Python.

Справочную информацию о классах и методах Python см. в документации pyDocs (для класса обслуживания и классов данных ), включенной в исходный код.

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

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

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

  • В разделе «Понимание видеоканалов и записей» представлен пример ответа API и объясняется, как извлечь информацию об одном видео из списка видео или набора результатов поиска. В этом разделе также объясняется, как получить доступ к метаданным о конкретной видеозаписи. Наконец, в этом разделе объясняется механизм обновления отдельной видеозаписи.

  • В разделе «Извлечение и поиск видео» объясняется, как получить определенные списки видео, например стандартный канал самых популярных видео YouTube. Другие списки видео включают видео, загруженные конкретным пользователем, и списки видео, связанные с конкретным видео. В этом разделе также объясняется, как использовать API, чтобы пользователи могли осуществлять поиск в видеотеке YouTube по определенным критериям поиска или категориям.

  • В разделе «Загрузка видео» кратко описаны два способа, с помощью которых вы можете разрешить пользователям загружать видео на YouTube из вашего приложения. Кроме того, в этом разделе также объясняется, как загружать видео в качестве ответов на другие видео.

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

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

  • В разделе «Сохранение и сбор видео» объясняется, как использовать API для доступа, создания и обновления избранных видео, списков воспроизведения видео и подписок на каналы YouTube. Здесь также показано, как изменять списки воспроизведения и избранное видео, добавляя и удаляя видео.

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

Начиная

Требования

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

Помимо предоставления некоторой информации о возможностях API данных YouTube, в этом документе приведены примеры взаимодействия с API с использованием клиентской библиотеки Python . Чтобы использовать клиентскую библиотеку Python, вам понадобится Python 2.2+ и модули Element Tree, httplib и urllib. Дополнительные сведения см. в разделе «Модули зависимостей» .

Дополнительную информацию о настройке среды см. в Руководстве по началу работы . Если вы хотите узнать больше о базовом протоколе, используемом клиентской библиотекой Python для взаимодействия с YouTube, см. страницу протокола в Руководстве разработчика .

Фрагменты примера кода, приведенные ниже, можно скопировать/вставить в ваш код и изменить в соответствии с вашими потребностями.

Прежде чем вы сможете выполнять какие-либо операции с API данных YouTube, вы должны инициализировать объект gdata.youtube.service.YouTubeService , как показано ниже. Операторы import , перечисленные ниже, будут автоматически выполнять дальнейший импорт из модулей gdata.media и gdata.geo . Обратите внимание, что все действия, кроме получения общедоступного контента, требуют аутентификации .

import gdata.youtube
import gdata.youtube.service

yt_service = gdata.youtube.service.YouTubeService()

# Turn on HTTPS/SSL access.
# Note: SSL is not available at this time for uploads.
yt_service.ssl = True

Большинство примеров методов в этом руководстве работают с экземпляром gdata.youtube.service.YouTubeService . Возможно, будет полезно протестировать неаутентифицированные запросы интерактивного интерпретатора Python.

Примечание . Клиентская библиотека Python должна быть правильно добавлена ​​в ваш путь. Убедитесь, что вы установили его, запустив предоставленный скрипт setup.py . Дополнительную информацию см. в Руководстве по началу работы .

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

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

Аутентификация может выполняться через аутентификацию ClientLogin (для настольных приложений) или через аутентификацию AuthSub (для веб-приложений).

Установка ключа разработчика и идентификатора клиента

Ключ разработчика идентифицирует разработчика YouTube, отправляющего запрос API. Идентификатор клиента идентифицирует ваше приложение для целей регистрации и отладки.

Когда вы делаете запрос API с использованием клиентской библиотеки Python, заголовок запроса X-GData-Key используется для указания вашего ключа разработчика, а заголовок X-GData-Client используется для указания вашего идентификатора клиента. Ключ разработчика и идентификатор клиента можно установить в объекте YouTubeService независимо от используемой схемы аутентификации:

yt_service.developer_key = 'ABCxyz123...'
yt_service.client_id = 'My-Client_id'

Вам нужно будет зарегистрировать ключ разработчика YouTube.

Аутентификация AuthSub для веб-приложений

Прокси-аутентификация AuthSub используется веб-приложениями, которым необходимо аутентифицировать своих пользователей в учетных записях YouTube/Google. Оператору не нужен доступ к логину и паролю пользователя YouTube — нужны только специальные токены AuthSub.

Когда пользователь впервые посещает ваше приложение, он еще не прошел аутентификацию в сервисах Google. В этом случае вам необходимо предоставить им ссылку, направляющую пользователя в Google для авторизации запроса ваших приложений на доступ к его аккаунту YouTube. Клиентская библиотека Python предоставляет функцию для создания этого URL-адреса. Код ниже устанавливает ссылку на страницу AuthSubRequest .

def GetAuthSubUrl():
  next = 'http://www.example.com/video_upload.pyc'
  scope = 'http://gdata.youtube.com'
  secure = False
  session = True

yt_service = gdata.youtube.service.YouTubeService()
return yt_service.GenerateAuthSubURL(next, scope, secure, session)

authSubUrl = GetAuthSubUrl()
print '<a href="%s">Login to your Google account</a>' % authSubUrl

Обратите внимание на параметры, передаваемые в метод GenerateAuthSubURL объектов службы:

  • next — URL страницы, на которую YouTube должен перенаправить пользователя после того, как он разрешил вашему приложению доступ к своей учетной записи.
  • область действия — указывает, что приложение будет иметь доступ только к каналам YouTube API.
  • Secure — указывает, что возвращенный токен не будет безопасным токеном.
  • сеанс — указывает, что этот токен можно обменять на многоразовый (сессионный) токен.

Возвращенный URL-адрес будет выглядеть примерно так:

https://www.google.com/accounts/AuthSubRequest?scope=http%3A%2F%2Fgdata.youtube.com&session=1&secure=0&next=http%3A%2F%2Fwww.example.com%2Fvideo_upload.pyc

Затем пользователь может перейти по ссылке для входа в свою учетную запись YouTube. После того как пользователь разрешит вашему приложению доступ к своей учетной записи, он будет перенаправлен обратно на next URL-адрес. К URL-адресу будет добавлено значение одноразового токена в качестве параметра запроса. URL-адрес выглядит примерно так:

http://www.example.com/video_upload.pyc?token=Abc123...

В следующем разделе будет показано, как обновить этот токен. Фрагмент ниже демонстрирует один из способов получения этого токена из URL-адреса:

import cgi
parameters = cgi.FieldStorage()
authsub_token = parameters[[]'token' ]

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

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

yt_service = gdata.youtube.service.YouTubeService()
yt_service.SetAuthSubToken(authsub_token)
yt_service.UpgradeToSessionToken()

Это значение токена представляет собой одноразовый токен AuthSub. Поскольку выше было указано session = True , этот токен можно обменять на токен сеанса AuthSub с помощью метода UpgradeToSessionToken , который вызывает службу AuthSubSessionToken .

Ваш объект YouTubeService теперь полностью аутентифицирован и может использоваться для выполнения всех дальнейших запросов с помощью API YouTube. Срок действия токенов сеанса AuthSub не истечет, если вы специально не отправите запрос на их отзыв или если пользователь не решит отозвать доступ, посетив страницу «Авторизованные сайты» в своей учетной записи YouTube.

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

Аутентификация ClientLogin используется в установленных приложениях, которые могут либо сохранять, либо запрашивать у вашего пользователя имя пользователя и пароль. Чтобы использовать эту форму аутентификации, вызовите метод ProgrammaticLogin YouTubeService унаследованный от класса gdata.service.GDataService , указав идентификатор и пароль пользователя, от имени которого ваш клиент отправляет запрос на аутентификацию.

yt_service = gdata.youtube.service.YouTubeService()
yt_service.email = 'jo@gmail.com'
yt_service.password = 'mypassword'
yt_service.source = 'my-example-application'
yt_service.ProgrammaticLogin()

После установки учетных данных объект YouTubeService можно использовать для обработки всех дальнейших запросов. Чтобы иметь возможность выполнять загрузку и любые запросы на запись (добавление комментариев и т. д.) в API YouTube, убедитесь, что вы также передаете свой ключ разработчика и идентификатор клиента объекту yt_service при выполнении аутентификации:

# A complete client login request
yt_service.email = 'jo@gmail.com'
yt_service.password = 'mypassword'
yt_service.source = 'my-example-application'
yt_service.developer_key = 'ABC123...'
yt_service.client_id = 'my-example-application'
yt_service.ProgrammaticLogin()

Объект YouTubeService автоматически устанавливает правильные заголовки X-GData-Key и X-GData-Client когда установлены атрибуты developer_key и client_id .

Примечание. Более подробную информацию о механизмах AuthSub и ClientLogin см. в документации по аутентификации API данных Google .

Понимание видеоканалов и записей

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

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

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

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

def GetAndPrintVideoFeed(uri):
  yt_service = gdata.youtube.service.YouTubeService()
  feed = yt_service.GetYouTubeVideoFeed(uri)
  for entry in feed.entry:
    PrintEntryDetails(entry) # full documentation for this function

В разделе «Извлечение и поиск видео» подробно описаны многие распространенные URL-адреса каналов и способы получения различных видеоканалов.

Получение определенной записи видео

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

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

Следующий код получает gdata.youtube.YouTubeVideoEntry соответствующий видео на YouTube:

entry = yt_service.GetYouTubeVideoEntry(video_id='the0KZLEacs')

Содержание видеозаписи

Из объекта gdata.youtube.YouTubeVideoEntry можно получить множество метаданных, например миниатюры, URL-адреса проигрывателя и продолжительность видео. Следующий код демонстрирует, как получить часть этой информации. Клиентская библиотека Python абстрагирует большую часть этой функциональности, отображая элементы XML в классы. Большую часть важной информации о записи YouTubeVideoEntry можно получить из дочерних элементов атрибута media (содержащего объект gdata.media.Group ) внутри записи (представляющей XML-элемент media:group ). Ниже приведен пример получения метаданных видео:

def PrintEntryDetails(entry):
  print 'Video title: %s' % entry.media.title.text
  print 'Video published on: %s ' % entry.published.text
  print 'Video description: %s' % entry.media.description.text
  print 'Video category: %s' % entry.media.category[[]0].text
  print 'Video tags: %s' % entry.media.keywords.text
  print 'Video watch page: %s' % entry.media.player.url
  print 'Video flash player URL: %s' % entry.GetSwfUrl()
  print 'Video duration: %s' % entry.media.duration.seconds

  # non entry.media attributes
  print 'Video geo location: %s' % entry.geo.location()
  print 'Video view count: %s' % entry.statistics.view_count
  print 'Video rating: %s' % entry.rating.average

  # show alternate formats
  for alternate_format in entry.media.content:
    if 'isDefault' not in alternate_format.extension_attributes:
      print 'Alternate format: %s | url: %s ' % (alternate_format.type,
                                                 alternate_format.url)

  # show thumbnails
  for thumbnail in entry.media.thumbnail:
    print 'Thumbnail url: %s' % thumbnail.url

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

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

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

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

URL-адрес канала самых популярных видео YouTube имеет следующий формат:

http://gdata.youtube.com/feeds/api/standardfeeds/most_popular

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

def PrintVideoFeed(feed):
  for entry in feed.entry:
    PrintEntryDetails(entry)

def GetAndPrintFeedByUrl:
  yt_service = gdata.youtube.service.YouTubeService()

  # You can retrieve a YouTubeVideoFeed by passing in the URI
  uri = 'http://gdata.youtube.com/feeds/api/standardfeeds/JP/most_popular'
  PrintVideoFeed(yt_service.GetYouTubeVideoFeed(uri))

Получение видео, загруженных конкретным пользователем

У каждого пользователя YouTube есть связанный видеоканал, соответствующий загруженным им видео, по адресу http://gdata.youtube.com/feeds/api/users/ username /uploads . Следующий код демонстрирует, как получить и отобразить канал загрузок пользователя:

def GetAndPrintUserUploads(username):
  yt_service = gdata.youtube.service.YouTubeService()
  uri = 'http://gdata.youtube.com/feeds/api/users/%s/uploads' % username
  PrintVideoFeed(yt_service.GetYouTubeVideoFeed(uri))

Примечание. Вы также можете использовать строку «default» вместо username , чтобы получить видео для текущего аутентифицированного пользователя.

Чтобы получить похожие видео, передайте идентификатор видео объекта gdata.youtube.YouTubeVideoEntry методу GetYouTubeRelatedVideoFeed объекта gdata.youtube.service.YouTubeService . При этом извлекается объект YouTubeVideoFeed содержащий связанные записи.

related_feed = yt_service.GetYouTubeRelatedVideoFeed(video_id='abc123')

Поиск видео

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

В приведенном ниже примере показано, как выполнить поисковый запрос с результатами, упорядоченными по количеству просмотров, включая видео с ограниченным доступом (называемые API «Racy»):

def SearchAndPrint(search_terms):
  yt_service = gdata.youtube.service.YouTubeService()
  query = gdata.youtube.service.YouTubeVideoQuery()
  query.vq = search_terms
  query.orderby = 'viewCount'
  query.racy = 'include'
  feed = yt_service.YouTubeQuery(query)
  PrintVideoFeed(feed)

Класс gdata.service.Query и его подклассы, такие как YouTubeVideoQuery , отвечают за создание URL-адресов каналов. Показанный выше VideoQuery создает URL-адрес, эквивалентный следующему:

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

Вот некоторые из наиболее распространенных свойств YouTubeVideoQuery для настройки параметров поиска :

author
Устанавливает автора записи. Автор является синонимом имени пользователя YouTube.
format
Определяет формат видео. Принимает числовые параметры для указания одного из двух типов URL-адресов потоковой передачи RTSP для воспроизведения мобильного видео или URL-адреса HTTP для встраиваемого проигрывателя Flash.
racy
Указывает, следует ли включать в результаты ограниченный контент. Принимает только два параметра: «включить» или «исключить».
max_results
Устанавливает максимальное количество записей, возвращаемых одновременно.
start_index
Устанавливает индекс первого извлекаемого результата (для разбиения по страницам), отсчитываемый от 1.
orderby
Устанавливает порядок перечисления записей, например по relevance , viewCount , published или rating .
time
Устанавливает период времени для ограничения стандартных результатов ленты: today , this_week , this_month или all_time .
vq
Устанавливает условие поискового запроса. Ищет указанную строку во всех метаданных видео, таких как заголовки, теги и описания.

Примечание. Дополнительную информацию о параметрах запроса см. в Справочном руководстве по API данных YouTube и Справочном руководстве по API данных Google .

Поиск по категориям и ключевым словам

Вы можете ограничить результаты поиска, чтобы показывать только видео, соответствующие заданному набору категорий и ключевых слов. В справочном руководстве описывается, как указать как предварительно определенные категории YouTube (например, «Музыка», «Люди и блоги» и т. д.), так и определяемые пользователем ключевые слова (теги).

Следующий код демонстрирует, как выполнять поиск с использованием ключевых слов (тегов), изменяя условия поиска на нижний регистр . Примечание. Поскольку некоторые слова (например, «комедия») могут относиться как к категории YouTube, так и к ключевым словам, в запросах по категориям и ключевым словам используется соглашение, согласно которому слово с заглавной буквы («комедия») обозначает категорию YouTube, а слово со строчной буквы («комедия»). ") обозначает ключевое слово.

def SearchAndPrintVideosByKeywords(list_of_search_terms):
  yt_service = gdata.youtube.service.YouTubeService()
  query = gdata.youtube.service.YouTubeVideoQuery()
  query.orderby = 'viewCount'
  query.racy = 'include'
  for search_term in list_of_search_terms:
    new_term = search_term.lower()
    query.categories.append('/%s' % new_term)
  feed = yt_service.YouTubeQuery(query)
  PrintVideoFeed(feed)

Поиск по тегам разработчика

Теги разработчика — это дополнительные скрытые ключевые слова, которые разработчик может использовать для пометки контента, загружаемого конечными пользователями через его приложение. Теги разработчика соответствуют ключу разработчика, указанному в заголовках во время загрузки. Эти ключевые слова не будут видны публике и могут использоваться для поиска видео. Чтобы выполнить поиск видео по определенному тегу разработчика, отправьте общий поисковый запрос API данных YouTube, используя свой ключ разработчика. Обязательно укажите схему категорий и тег разработчика, которым должны соответствовать видео. Вы можете получить канал видео, соответствующий вашему тегу разработчика (в нашем примере «your_tag_here»), по URL-адресу ниже:

developer_tag_uri = 'http://gdata.youtube.com/feeds/videos/-/%7Bhttp%3A%2F%2Fgdata.youtube.com%2Fschemas%2F2007%2Fdevelopertags.cat%7Dyour_tag_here'
yt_service = gdata.youtube.service.YouTubeService()
PrintVideoFeed(yt_service.GetYouTubeVideoFeed(developer_tag_uri))

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

Обязательно ознакомьтесь с диаграммами в руководстве по протоколу, чтобы получить общее представление о процессе загрузки. Загрузить видео можно одним из двух способов:

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

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

Чтобы загрузить видео, сначала необходимо создать новый объект gdata.youtube.YouTubeVideoEntry , передав ему объект gdata.media.Group содержащий необходимые метаданные. В следующем примере показана загрузка видео Quicktime «mytestmovie.mov» на YouTube со следующими свойствами:

Свойство Ценить
Заголовок Мой тестовый фильм
Категория Автомобили
Ключевые слова машины, смешно
Описание Мое описание
Имя файла mytestmovie.mov
MIME-тип файла видео/быстрое время
Видео личное? ЛОЖЬ
Местоположение видео 37,-122 (широта,долгота)
Теги разработчика мой тег разработчика, другой тег разработчика

Приведенный ниже код создает пустую запись YouTubeVideoEntry для загрузки. Метод InsertVideoEntry в YouTubeService требует следующих параметров:

  • video_entry — объект gdata.youtube.VideoEntry , содержащий метаданные.
  • filename_or_handle — Файлоподобный объект или имя файла, из которого будет считываться видео.
  • youtube_username — необязательная строка, определяющая имя пользователя, в учетную запись которого должно быть загружено это видео. Разумеется, вашей учетной записи потребуются соответствующие разрешения. По умолчанию это учетная запись текущего аутентифицированного пользователя.
  • content_type — необязательная строка, определяющая MIME-тип загружаемого видео.
Обратите внимание: в этих примерах предполагается, что переменная yt_service относится к полностью аутентифицированному объекту YouTubeService .

# prepare a media group object to hold our video's meta-data
my_media_group = gdata.media.Group(
  title=gdata.media.Title(text='My Test Movie'),
  description=gdata.media.Description(description_type='plain',
                                      text='My description'),
  keywords=gdata.media.Keywords(text='cars, funny'),
  category=[[]gdata.media.Category(
      text='Autos',
      scheme='http://gdata.youtube.com/schemas/2007/categories.cat',
      label='Autos')],
  player=None
)


# prepare a geo.where object to hold the geographical location
# of where the video was recorded
where = gdata.geo.Where()
where.set_location((37.0,-122.0))

# create the gdata.youtube.YouTubeVideoEntry to be uploaded
video_entry = gdata.youtube.YouTubeVideoEntry(media=my_media_group,
                                              geo=where)

# set the path for the video file binary
video_file_location = '/path/to/my/file.mov'

new_entry = yt_service.InsertVideoEntry(video_entry, video_file_location)

Если бы мы хотели пометить наше видео дополнительными тегами разработчика (более подробную информацию см. в разделе «Поиск по тегам разработчика» ), мы могли бы использовать метод AddDeveloperTags перед выполнением вызова InsertVideoEntry :

developer_tags = [[]'some_tag_01', 'another_tag']
video_entry.AddDeveloperTags(developer_tags)

Примечание. Чтобы загрузить видео как личное, в gdata.media.Group необходимо передать атрибут Private:

my_media_group = gdata.media.Group(
  title=gdata.media.Title(text='My Test Movie'),
  description=gdata.media.Description(description_type='plain',
                                      text='My description'),
  keywords=gdata.media.Keywords(text='cars, funny'),
  category=[[]gdata.media.Category(
      text='Autos',
      scheme='http://gdata.youtube.com/schemas/2007/categories.cat',
      label='Autos')],
  player=None,
  private=gdata.media.Private()
)

video_entry = gdata.youtube.YouTubeVideoEntry(media=my_media_group)

# assuming that video_file_location points to a valid path
new_entry = yt_service.InsertVideoEntry(video_entry, video_file_location)

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

Загрузка через браузер выполняется почти идентично прямой загрузке, за исключением того, что вы не загружаете двоичный файл в том же запросе, который вы используете для отправки метаданных видео. Вместо этого вы просто создаете запись YouTubeVideoEntry , содержащую только метаданные. Затем эта видеозапись публикуется по специальной ссылке на сервере API YouTube. Ответ XML содержит token и url , который затем можно использовать для загрузки двоичного файла с использованием стандартной формы HTML.

# create media group as usual
my_media_group = gdata.media.Group(
  title=gdata.media.Title(text='My Test Movie'),
  description=gdata.media.Description(description_type='plain',
                                      text='My description'),
  keywords=gdata.media.Keywords(text='cars, funny'),
  category=[[]gdata.media.Category(
      text='Autos',
      scheme='http://gdata.youtube.com/schemas/2007/categories.cat',
      label='Autos')],
  player=None
)

# create video entry as usual
video_entry = gdata.youtube.YouTubeVideoEntry(media=my_media_group)

# upload meta data only
response = yt_service.GetFormUploadToken(video_entry)

# parse response tuple and use the variables to build a form (see next code snippet)
post_url = response[[]0]
youtube_token = response[[]1]

Приведенный выше код выводит ссылку и токен, которые используются для создания HTML-формы для отображения в браузере пользователя. Ниже показан простой пример формы, где youtube_token представляет содержимое возвращенного элемента токена, как показано выше, полученного из YouTubeVideoEntry . Чтобы пользователь был перенаправлен на ваш веб-сайт после отправки формы, обязательно добавьте параметр next к post_url (как показано ниже), который будет работать так же, как next параметр ссылки AuthSub. Единственное отличие состоит в том, что здесь вместо одноразового токена в качестве параметров URL возвращаются status и переменная id .

next = 'http://example.com/post_video_upload.pyc'

form = """<form action="%s?nexturl=%s" method="post" enctype="multipart/form-data">
          <input name="file" type="file"/>
          <input name="token" type="hidden" value="%s"/>
          <input value="Upload Video File" type="submit" />
          </form>""" % (post_url, next, youtube_token)

Ответ на успешную загрузку будет выглядеть так:

http://example.com/post_video_upload.pyc?status=200&id=ABC123

Параметр status возвращает статус HTTP-транзакции транзакции загрузки. Параметр id возвращает идентификатор видео YouTube, назначенный загруженному видео.

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

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

upload_status = yt_service.CheckUploadStatus(new_entry)

if upload_status is not None:
  video_upload_state = upload_status[[]0]
  detailed_message = upload_status[[]1]

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

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

Чтобы обновить метаданные видео, просто обновите объект YouTubeVideoEntry , а затем используйте метод UpdateVideoEntry объектов YouTubeService . Этот метод принимает в качестве параметра YouTubeVideoEntry , содержащий обновленные метаданные.

# assuming we have a video entry that was just posted in our 'new_entry' variable
new_entry.media.title.text = 'My Updated Video Title'
new_entry.media.description.text = 'Just updated'

updated_entry = yt_service.UpdateVideoEntry(new_entry)

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

Удаление видео очень простое и требует вызова метода DeleteVideoEntry объекта YouTubeService .

response = yt_service.DeleteVideoEntry(entry_to_be_deleted)

if response:
  print 'Video successfully deleted!'

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

Добавление рейтинга

Чтобы оценить видео, используйте метод AddRating объекта YouTubeService . Обратите внимание, что вы не можете оценивать собственные видео и что рейтинг должен быть от 1 до 5 (включительно):

video_id_to_rate = 'Ncakifd_16k'
video_entry = yt_service.GetYouTubeVideoEntry(video_id=video_id_to_rate)
response = yt_service.AddRating(3, video_entry)

Комментарии

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

Имея объект YouTubeVideoEntry или простой идентификатор видео, вы можете получить и распечатать канал, содержащий комментарии к видео, с помощью метода GetYouTubeVideoCommentFeed объекта YouTubeService . В результате получается фид gdata.youtube.YouTubeCommentFeed , состоящий из объектов gdata.youtube.YouTubeCommentEntry . Фид можно анализировать, как и любой другой фид:

video_id = 'ABC123...'
comment_feed = yt_service.GetYouTubeVideoCommentFeed(video_id=video_id)

for comment_entry in comment_feed.entry:
  print comment_entry.ToString()

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

Чтобы добавить новый комментарий, просто используйте метод AddComment объекта YouTubeService . Для этого метода требуется полный объект YouTubeVideoEntry , который необходимо прокомментировать, а также строка, представляющая комментарий:

my_comment = 'what a boring test video'
video_id = '9g6buYJTt_g'
video_entry = yt_service.GetYouTubeVideoEntry(video_id=video_id)
yt_service.AddComment(comment_text=my_comment, video_entry=video_entry)

Видеоответы

Видеоответ YouTube представлял собой видео, которое в качестве ответа было связано со вторым видео. Как описано в этом объявлении, функция видеоответов удалена. Хотя существующие видеоответы по-прежнему доступны, YouTube больше не поддерживает возможность получения списка видеоответов на видео, загрузки новых видеоответов или удаления видеоответов, хотя вы можете удалить видео, которое использовалось в видеоответе. . Следовательно, эти функции также больше не поддерживаются в API.

Запросы API для операций видеоответа теперь возвращают следующее:

  • Запрос на получение видеоответов для видео возвращает пустой список.
  • Запрос на добавление видеоответа возвращает код ответа HTTP 403.
  • Запрос на удаление видеоответа возвращает код ответа HTTP 403.

Пометка видео

Добавление жалобы на видео осуществляется с помощью метода AddComplaint объекта YouTubeService . Термин жалобы должен быть допустимой категорией. Дополнительную информацию см. в разделе «Добавление жалобы» руководства по протоколу.

video_id_to_flag = 'Ncakifd_16k'
complaint_term = 'VIOLENCE'
complaint_text = ('Please ignore this complaint. '
                  'I\'m testing a YouTube API and needed to issue '
                  'a complaint to test the add complaint function. ')

response = yt_service.AddComplaint(complaint_text, complaint_term, video_id_to_flag)

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

Любимые видео

Получение любимых видео пользователя

Пользователи YouTube могут пометить просматриваемые видео как избранные. Общее расположение любимого канала пользователя — следующий URL-адрес.

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

Чтобы получить избранные видео пользователя, используйте метод GetUserFavoritesFeed объекта YouTubeService . Метод принимает необязательную строку в качестве параметра, представляющего имя пользователя YouTube, чей любимый канал необходимо получить.

favorite_feed = yt_service.GetUserFavoritesFeed(username='gdpython')

Возвращенный канал представляет собой обычный видеоканал, содержащий объекты YouTubeVideoEntry .

Примечание. Альтернативно вы можете передать строку default , чтобы получить избранное для текущего аутентифицированного пользователя. Это поведение метода GetUserFavoritesFeed по умолчанию, если имя пользователя не указано.

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

Чтобы добавить избранное видео, используйте метод AddVideoEntryToFavorites объекта YouTubeService . Параметрами являются добавляемый элемент YouTubeVideoEntry и, при необходимости, имя пользователя, в избранное которого он должен быть добавлен (по умолчанию используется текущий аутентифицированный пользователь).

video_id = 'Ncakifd_16k'
video_entry = yt_service.GetYouTubeVideoEntry(video_id=video_id)
response = yt_service.AddVideoEntryToFavorites(video_entry)

# The response, if successfully posted is a YouTubeVideoEntry
if isinstance(response, gdata.youtube.YouTubeVideoEntry):
  print 'Video successfully added to favorites'

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

Чтобы удалить избранное, просто используйте метод DeleteVideoEntryFromFavorites объекта YouTubeService .

video_id = 'Ncakifd_16k'
response = yt_service.DeleteVideoEntryFromFavorites(video_id)
if response is True:
  print 'Video deleted from favorites'

Плейлисты

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

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

Чтобы получить список всех плейлистов пользователя вручную, вы должны использовать следующий URL-адрес:

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

Используя клиентскую библиотеку Python, вы можете использовать метод GetYouTubePlaylistFeed объекта YouTubeService :

playlist_feed = yt_service.GetYouTubePlaylistFeed(username='gdpython')

# instead of passing in a username, you can also pass the URI to the playlist feed:
playlist_feed = yt_service.GetYouTubePlaylistFeed(uri='http://gdata.youtube.com/feeds/api/users/default/playlists')

Примечание. Вместо передачи конкретного имени пользователя (например, «gdpython» в приведенном выше примере) вы также можете передать строку 'default' , чтобы обратиться к текущему аутентифицированному пользователю.

gdata.youtube.YouTubePlaylistFeed представляет канал объектов gdata.youtube.YouTubePlaylistEntry . Они относятся к отдельным спискам воспроизведения, которые может иметь пользователь. Записи видео в определенном плейлисте представлены как объекты gdata.youtube.YouTubePlaylistVideoEntry . Эти объекты очень похожи на обычные объекты gdata.youtube.YouTubeVideoEntry за некоторыми исключениями. К видео можно применять собственные заголовки и описания, а поле позиции указывает, где видео появляется в списке воспроизведения.

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

Имея YouTubePlaylistEntry (представляющий определенный список воспроизведения), вы можете получить YouTubePlaylist Video Feed , содержащий объекты YouTubePlaylistVideoEntry . Как объяснялось выше, эти объекты представляют собой отдельные видео в списке воспроизведения (с дополнительными настраиваемыми заголовками и описанием). Вы можете получить этот канал, передав URI вашего плейлиста методу GetYouTubePlaylistVideoFeed объекта YouTubeService :

# a typical playlist URI
playlist_uri = 'http://gdata.youtube.com/feeds/api/playlists/BCB3BB96DF51B505'

playlist_video_feed = yt_service.GetYouTubePlaylistVideoFeed(uri=playlist_uri)

# iterate through the feed as you would with any other
for playlist_video_entry in playlist_video_feed.entry:
  print playlist_video_entry.title.text

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

Чтобы добавить новый список воспроизведения, просто используйте метод AddPlaylist объекта YouTubeService . Этот метод принимает следующие параметры: playlist_title, playlist_description (обе строки) и необязательное логическое значение, для которого можно установить значение True , если список воспроизведения должен быть помечен как частный.

new_public_playlistentry = yt_service.AddPlaylist('my new playlist', 'a new playlist')

if isinstance(new_public_playlistentry, gdata.youtube.YouTubePlaylistEntry):
  print 'New playlist added'

# adding a private playlist
new_private_playlistentry = yt_service.AddPlaylist('new private playlist', 'a new private playlist', True)

if isinstance(new_private_playlistentry, gdata.youtube.YouTubePlaylistEntry):
  print 'New private playlist added'

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

Чтобы обновить список воспроизведения, используйте метод UpdatePlaylist объекта YouTubeService . Метод принимает следующие параметры: идентификатор обновляемого списка воспроизведения, новый заголовок, новое описание, необязательное логическое значение, позволяющее пометить список воспроизведения как частный, и необязательную строку, указывающую имя пользователя, которому принадлежит список воспроизведения. По умолчанию строка будет соответствовать текущему аутентифицированному пользователю.

# here we are updating a public playlist with a new title while also making it private

# we assume that playlist_to_be_updated here represents a YouTubePlaylistEntry object
playlist_entry_id = playlist_to_be_updated.id.text.split('/')[[]-1]

# we want to keep the original description for the playlist so we store it first
original_description = playlist_to_be_updated.description.text

updated_playlist = yt_service.UpdatePlaylist(playlist_entry_id,
                                             'a new updated title',
                                             original_playlist_description,
                                             playlist_private=True)

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

Вы можете добавить видео в список воспроизведения, используя метод AddPlaylistVideoEntryToPlaylist объекта YouTubeService . Код ниже добавляет видео в список воспроизведения с собственным названием и описанием.

custom_video_title = 'my test video on my test playlist'
custom_video_description = 'this is a test video on my test playlist'
video_id = 'Ncakifd_16k'
playlist_uri = 'http://gdata.youtube.com/feeds/api/playlists/BCB3BB96DF51B505'

playlist_video_entry = yt_service.AddPlaylistVideoEntryToPlaylist(
    playlist_uri, video_id, custom_video_title, custom_video_description)

if isinstance(playlist_video_entry, gdata.youtube.YouTubePlaylistVideoEntry):
  print 'Video added'

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

Редактировать информацию о видео в плейлисте

Используйте метод UpdatePlaylistVideoEntryMetaData объекта YouTubeService , чтобы изменить метаданные для YouTubePlaylistVideoEntry . В приведенном ниже примере мы решили дать нашему видео новый заголовок и переместить его на первую позицию (позицию 1) в нашем плейлисте.

playlist_uri = 'http://gdata.youtube.com/feeds/api/playlists/BCB3BB96DF51B505'
playlist_entry_id = 'B0F29389E537F888'

new_video_title = 'a useful video'
new_video_description = 'updated video description'

updated_playlist_video_entry = yt_service.UpdatePlaylistVideoEntryMetaData(
    playlist_uri, playlist_entry_id, new_video_title, new_video_description, 1)

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

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

Чтобы удалить видео из списка воспроизведения, используйте метод DeletePlaylistVideoEntry объекта YouTubeService . Для этого метода требуется URI списка воспроизведения, который содержит удаляемую запись, а также идентификатор записи:

playlist_uri = 'http://gdata.youtube.com/feeds/api/playlists/BCB3BB96DF51B505'
playlist_entry_id = 'B0F29389E537F888'
response = yt_service.DeletePlaylistVideoEntry(playlist_uri,
                                               playlist_entry_id)
if response is True:
  print 'Entry successfully deleted'

Удаление списка воспроизведения

Чтобы удалить список воспроизведения, просто используйте метод DeletePlaylist объекта YouTubeService , передав URI удаляемого списка воспроизведения:

playlist_uri = 'http://gdata.youtube.com/feeds/api/playlists/BCB3BB96DF51B505'
response = yt_service.DeletePlaylist(playlist_uri)

if response is True:
  print 'Playlist successfully deleted'

Подписки

Чтобы получить список каналов, поисковых запросов и избранного, на которые подписан данный пользователь, используйте следующий URI:

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

Примечание. Альтернативно вы можете передать строку default , чтобы получить избранное для текущего аутентифицированного пользователя.

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

Следующий код демонстрирует, как получить и распечатать список подписок для данного пользователя. Подписки представлены в виде gdata.youtube.YouTubeSubscriptionFeed , состоящего из объектов gdata.youtube.YouTubeSubscriptionEntry . Чтобы получить подписки, используйте метод GetYouTubeSubscriptionFeed объекта YouTubeService , передав либо URI канала подписки, либо имя пользователя, канал подписки которого необходимо получить. Параметр имени пользователя по умолчанию соответствует текущему аутентифицированному пользователю.

subscription_feed = yt_service.GetYouTubeSubscriptionFeed(username='gdpython')

if isinstance(subscription_feed, gdata.youtube.YouTubeSubscriptionFeed)):
  # given a YouTubeSubscriptionEntry we can determine it's type (channel, favorite, or query)
  for entry in subscription_feed.entry:
    print entry.GetSubscriptionType()

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

Вы можете создать новую подписку, вставив новую запись YouTubeSubsciptionEntry в фид подписок прошедшего проверку подлинности пользователя. Мы можем создать три типа подписок: подписка на канал пользователя (с помощью AddSubscriptionToChannel ), подписка на избранное пользователя (с помощью AddSubscriptionToFavorites ) или подписка на определенное ключевое слово (с помощью AddSubscriptionToQuery ). Следующий код подписывает аутентифицированного пользователя на « Канал GoogleDevelopers» .

new_subscription = yt_service.AddSubscriptionToChannel(
      username_to_subscribe_to='GoogleDevelopers')

if isinstance(new_subscription, gdata.youtube.YouTubeSubscriptionEntry):
  print 'New subscription added'

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

new_subscription = yt_service.AddSubscriptionToFavorites(
    username='GoogleDevelopers')
if isinstance(new_subscription, gdata.youtube.YouTubeSubscriptionEntry):
  print 'New subscription added'

Наконец, вы также можете подписаться на определенные поисковые запросы. Здесь мы подписываемся на запрос видео с тегом «python».

new_subscription = yt_service.AddSubscriptionToQuery(query='python')

if isinstance(new_subscription, gdata.youtube.YouTubeSubscriptionEntry):
  print 'New subscription added'

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

Чтобы удалить подписку пользователя, используйте метод DeleteSubscription объекта YouTubeService .

sample_subscription_uri = ('http://gdata.youtube.com/feeds/api/users/'
                           'gdpython/subscriptions/c0c77ca6102a7479')

response = yt_service.DeleteSubscription(sample_subscription_uri)

if response is True:
  print 'Subscription successfully deleted'

Включение взаимодействия с пользователем

Профили пользователей

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

Чтобы получить профиль пользователя YouTube вручную, вы должны использовать следующий URI:

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

Вы можете получить gdata.youtube.YouTubeUserEntry с помощью метода GetYouTubeUserEntry объекта YouTubeService .

user_entry = yt_service.GetYouTubeUserEntry(username='gdpython')

# we can then write a helper function to print out the user details
def PrintUserEntry(entry):
  # print required fields where we know there will be information
  print 'URI: %s\n' % entry.id.text
  print 'Age: %s\n' % entry.age.text
  print 'Gender: %s\n' % entry.gender.text
  print 'Location: %s\n' % entry.location.text

  # check if there is information in the other fields and if so print it
  if user.first_name: 
    print 'First Name: %s\n' % user.first_name.text
  if user.last_name:
    print 'Last Name: %s\n' % user.last_name.text
  if user.relationship:
    print 'Relationship: %s\n' % user.relationship.text
  if user.description:
    print 'About me: %s\n' % user.description.text
  for link in user.link:
    if link.rel == 'related':
      print 'Website: %s\n' % link.href
  if user.company:
    print 'Company: %s\n' % user.company.text
  if user.occupation:
    print 'Occupation: %s\n' % user.occupation.text
  if user.school:
    print 'School: %s\n' % user.school.text
  if user.hobbies:
    print 'Hobbies: %s\n' % user.hobbies.text
  if user.movies:
    print 'Movies: %s\n' % user.movies.text
  if user.music:
    print 'Music: %s\n' % user.music.text
  if user.books:
    print 'Books: %s\n' % user.books.text
  if user.hometown:
    print 'Hometown: %s\n' % user.hometown.text

Контакты

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

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

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

Метод GetYouTubeContactFeed объекта YouTubeService можно использовать для получения gdata.youtube.YouTubeContactFeed , состоящего из объектов gdata.youtube.YouTubeContactEntry .

contact_feed = yt_service.GetYouTubeContactFeed(username='GoogleDevelopers')
for entry in contact_feed.entry:
  print entry.title.text
  # find the apprpriate category element to find out the contact type
  for category in entry.category:
    if category.scheme == 'http://gdata.youtube.com/schemas/2007/contact.cat':
      print category.term

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

Чтобы добавить новый контакт в ленту контактов пользователя, используйте метод AddContact объекта YouTubeService .

new_contact = yt_service.AddContact(contact_username='GoogleDevelopers')

if isinstance(new_contact, gdata.youtube.YouTubeContactEntry)
  print 'New contact added'

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

Чтобы обновить контакт, используйте метод UpdateContact объекта YouTubeService . Этот метод можно использовать для принятия/отклонения запросов на установление контактов, а также для классификации контактов как «Друг» или «Семья». В приведенном ниже примере мы принимаем контакт, а затем устанавливаем для него категорию «Семья»:

# in this case user 'gdpython' has requested to be our contact
#so the original contact status is 'pending'
updated_contact = yt_service.UpdateContact('gdpython', 'accepted', 'Family')

if isinstance(updated_contact, gdata.youtube.YouTubeContactEntry)
  print 'New contact added'

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

Чтобы удалить контакт, используйте метод DeleteContact объекта YouTubeService , передав имя пользователя контакта, который вы хотите удалить.

response = yt_service.DeleteContact(contact_username='gdpython')

if response is True:
  print 'Contact deleted'

Вернуться наверх

,

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

Помимо предоставления некоторой информации о возможностях API данных YouTube, в этом документе приведены примеры взаимодействия с API с использованием клиентской библиотеки Python . Чтобы использовать клиентскую библиотеку Python, вам понадобится Python 2.0+ и модули Element Tree, httplib и urllib. Дополнительные сведения см. в разделе «Модули зависимостей» .

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

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

Аудитория

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

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

В этом документе предполагается, что вы понимаете общие идеи протокола API данных Google и умеете программировать на Python.

Справочную информацию о классах и методах Python см. в документации pyDocs (для класса обслуживания и классов данных ), включенной в исходный код.

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

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

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

  • В разделе «Понимание видеоканалов и записей» представлен пример ответа API и объясняется, как извлечь информацию об одном видео из списка видео или набора результатов поиска. В этом разделе также объясняется, как получить доступ к метаданным о конкретной видеозаписи. Наконец, в этом разделе объясняется механизм обновления отдельной видеозаписи.

  • В разделе «Извлечение и поиск видео» объясняется, как получить определенные списки видео, например стандартный канал самых популярных видео YouTube. Другие списки видео включают видео, загруженные конкретным пользователем, и списки видео, связанные с конкретным видео. В этом разделе также объясняется, как использовать API, чтобы пользователи могли осуществлять поиск в видеотеке YouTube по определенным критериям поиска или категориям.

  • В разделе «Загрузка видео» кратко описаны два способа, с помощью которых вы можете разрешить пользователям загружать видео на YouTube из вашего приложения. Кроме того, в этом разделе также объясняется, как загружать видео в качестве ответов на другие видео.

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

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

  • В разделе «Сохранение и сбор видео» объясняется, как использовать API для доступа, создания и обновления избранных видео, списков воспроизведения видео и подписок на каналы YouTube. Здесь также показано, как изменять списки воспроизведения и избранное видео, добавляя и удаляя видео.

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

Начиная

Требования

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

Помимо предоставления некоторой информации о возможностях API данных YouTube, в этом документе приведены примеры взаимодействия с API с использованием клиентской библиотеки Python . Чтобы использовать клиентскую библиотеку Python, вам понадобится Python 2.2+ и модули Element Tree, httplib и urllib. Дополнительные сведения см. в разделе «Модули зависимостей» .

Дополнительную информацию о настройке среды см. в Руководстве по началу работы . Если вы хотите узнать больше о базовом протоколе, используемом клиентской библиотекой Python для взаимодействия с YouTube, см. страницу протокола в Руководстве разработчика .

Фрагменты примера кода, приведенные ниже, можно скопировать/вставить в ваш код и изменить в соответствии с вашими потребностями.

Прежде чем вы сможете выполнять какие-либо операции с API данных YouTube, вы должны инициализировать объект gdata.youtube.service.YouTubeService , как показано ниже. Операторы import , перечисленные ниже, будут автоматически выполнять дальнейший импорт из модулей gdata.media и gdata.geo . Обратите внимание, что все действия, кроме получения общедоступного контента, требуют аутентификации .

import gdata.youtube
import gdata.youtube.service

yt_service = gdata.youtube.service.YouTubeService()

# Turn on HTTPS/SSL access.
# Note: SSL is not available at this time for uploads.
yt_service.ssl = True

Большинство примеров методов в этом руководстве работают с экземпляром gdata.youtube.service.YouTubeService . Возможно, будет полезно протестировать неаутентифицированные запросы интерактивного интерпретатора Python.

Примечание . Клиентская библиотека Python должна быть правильно добавлена ​​в ваш путь. Убедитесь, что вы установили его, запустив предоставленный скрипт setup.py . Дополнительную информацию см. в Руководстве по началу работы .

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

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

Аутентификация может выполняться через аутентификацию ClientLogin (для настольных приложений) или через аутентификацию AuthSub (для веб-приложений).

Установка ключа разработчика и идентификатора клиента

Ключ разработчика идентифицирует разработчика YouTube, отправляющего запрос API. Идентификатор клиента идентифицирует ваше приложение для целей регистрации и отладки.

Когда вы делаете запрос API с использованием клиентской библиотеки Python, заголовок запроса X-GData-Key используется для указания вашего ключа разработчика, а заголовок X-GData-Client используется для указания вашего идентификатора клиента. Ключ разработчика и идентификатор клиента можно установить в объекте YouTubeService независимо от используемой схемы аутентификации:

yt_service.developer_key = 'ABCxyz123...'
yt_service.client_id = 'My-Client_id'

Вам нужно будет зарегистрировать ключ разработчика YouTube.

Аутентификация AuthSub для веб-приложений

Прокси-аутентификация AuthSub используется веб-приложениями, которым необходимо аутентифицировать своих пользователей в учетных записях YouTube/Google. Оператору не нужен доступ к логину и паролю пользователя YouTube — нужны только специальные токены AuthSub.

Когда пользователь впервые посещает ваше приложение, он еще не прошел аутентификацию в сервисах Google. В этом случае вам необходимо предоставить им ссылку, направляющую пользователя в Google для авторизации запроса ваших приложений на доступ к его аккаунту YouTube. Клиентская библиотека Python предоставляет функцию для создания этого URL-адреса. Код ниже устанавливает ссылку на страницу AuthSubRequest .

def GetAuthSubUrl():
  next = 'http://www.example.com/video_upload.pyc'
  scope = 'http://gdata.youtube.com'
  secure = False
  session = True

yt_service = gdata.youtube.service.YouTubeService()
return yt_service.GenerateAuthSubURL(next, scope, secure, session)

authSubUrl = GetAuthSubUrl()
print '<a href="%s">Login to your Google account</a>' % authSubUrl

Обратите внимание на параметры, передаваемые в метод GenerateAuthSubURL объектов службы:

  • next — URL страницы, на которую YouTube должен перенаправить пользователя после того, как он разрешил вашему приложению доступ к своей учетной записи.
  • область действия — указывает, что приложение будет иметь доступ только к каналам YouTube API.
  • Secure — указывает, что возвращенный токен не будет безопасным токеном.
  • сеанс — указывает, что этот токен можно обменять на многоразовый (сессионный) токен.

Возвращенный URL-адрес будет выглядеть примерно так:

https://www.google.com/accounts/AuthSubRequest?scope=http%3A%2F%2Fgdata.youtube.com&session=1&secure=0&next=http%3A%2F%2Fwww.example.com%2Fvideo_upload.pyc

Затем пользователь может перейти по ссылке для входа в свою учетную запись YouTube. После того как пользователь разрешит вашему приложению доступ к своей учетной записи, он будет перенаправлен обратно на next URL-адрес. К URL-адресу будет добавлено значение одноразового токена в качестве параметра запроса. URL-адрес выглядит примерно так:

http://www.example.com/video_upload.pyc?token=Abc123...

В следующем разделе будет показано, как обновить этот токен. Фрагмент ниже демонстрирует один из способов получения этого токена из URL-адреса:

import cgi
parameters = cgi.FieldStorage()
authsub_token = parameters[[]'token' ]

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

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

yt_service = gdata.youtube.service.YouTubeService()
yt_service.SetAuthSubToken(authsub_token)
yt_service.UpgradeToSessionToken()

Это значение токена представляет собой одноразовый токен AuthSub. Поскольку выше было указано session = True , этот токен можно обменять на токен сеанса AuthSub с помощью метода UpgradeToSessionToken , который вызывает службу AuthSubSessionToken .

Ваш объект YouTubeService теперь полностью аутентифицирован и может использоваться для выполнения всех дальнейших запросов с помощью API YouTube. Срок действия токенов сеанса AuthSub не истечет, если вы специально не отправите запрос на их отзыв или если пользователь не решит отозвать доступ, посетив страницу «Авторизованные сайты» в своей учетной записи YouTube.

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

Аутентификация ClientLogin используется в установленных приложениях, которые могут либо сохранять, либо запрашивать у вашего пользователя имя пользователя и пароль. Чтобы использовать эту форму аутентификации, вызовите метод ProgrammaticLogin YouTubeService унаследованный от класса gdata.service.GDataService , указав идентификатор и пароль пользователя, от имени которого ваш клиент отправляет запрос на аутентификацию.

yt_service = gdata.youtube.service.YouTubeService()
yt_service.email = 'jo@gmail.com'
yt_service.password = 'mypassword'
yt_service.source = 'my-example-application'
yt_service.ProgrammaticLogin()

После установки учетных данных объект YouTubeService можно использовать для обработки всех дальнейших запросов. Чтобы иметь возможность выполнять загрузку и любые запросы на запись (добавление комментариев и т. д.) в API YouTube, убедитесь, что вы также передаете свой ключ разработчика и идентификатор клиента объекту yt_service при выполнении аутентификации:

# A complete client login request
yt_service.email = 'jo@gmail.com'
yt_service.password = 'mypassword'
yt_service.source = 'my-example-application'
yt_service.developer_key = 'ABC123...'
yt_service.client_id = 'my-example-application'
yt_service.ProgrammaticLogin()

Объект YouTubeService автоматически устанавливает правильные заголовки X-GData-Key и X-GData-Client когда установлены атрибуты developer_key и client_id .

Примечание. Более подробную информацию о механизмах AuthSub и ClientLogin см. в документации по аутентификации API данных Google .

Понимание видеоканалов и записей

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

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

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

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

def GetAndPrintVideoFeed(uri):
  yt_service = gdata.youtube.service.YouTubeService()
  feed = yt_service.GetYouTubeVideoFeed(uri)
  for entry in feed.entry:
    PrintEntryDetails(entry) # full documentation for this function

В разделе «Извлечение и поиск видео» подробно описаны многие распространенные URL-адреса каналов и способы получения различных видеоканалов.

Получение определенной записи видео

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

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

Следующий код получает gdata.youtube.YouTubeVideoEntry соответствующий видео на YouTube:

entry = yt_service.GetYouTubeVideoEntry(video_id='the0KZLEacs')

Содержание видеозаписи

Из объекта gdata.youtube.YouTubeVideoEntry можно получить множество метаданных, например миниатюры, URL-адреса проигрывателя и продолжительность видео. Следующий код демонстрирует, как получить часть этой информации. Клиентская библиотека Python абстрагирует большую часть этой функциональности, отображая элементы XML в классы. Большую часть важной информации о записи YouTubeVideoEntry можно получить из дочерних элементов атрибута media (содержащего объект gdata.media.Group ) внутри записи (представляющей XML-элемент media:group ). Ниже приведен пример получения метаданных видео:

def PrintEntryDetails(entry):
  print 'Video title: %s' % entry.media.title.text
  print 'Video published on: %s ' % entry.published.text
  print 'Video description: %s' % entry.media.description.text
  print 'Video category: %s' % entry.media.category[[]0].text
  print 'Video tags: %s' % entry.media.keywords.text
  print 'Video watch page: %s' % entry.media.player.url
  print 'Video flash player URL: %s' % entry.GetSwfUrl()
  print 'Video duration: %s' % entry.media.duration.seconds

  # non entry.media attributes
  print 'Video geo location: %s' % entry.geo.location()
  print 'Video view count: %s' % entry.statistics.view_count
  print 'Video rating: %s' % entry.rating.average

  # show alternate formats
  for alternate_format in entry.media.content:
    if 'isDefault' not in alternate_format.extension_attributes:
      print 'Alternate format: %s | url: %s ' % (alternate_format.type,
                                                 alternate_format.url)

  # show thumbnails
  for thumbnail in entry.media.thumbnail:
    print 'Thumbnail url: %s' % thumbnail.url

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

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

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

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

URL-адрес канала самых популярных видео YouTube имеет следующий формат:

http://gdata.youtube.com/feeds/api/standardfeeds/most_popular

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

def PrintVideoFeed(feed):
  for entry in feed.entry:
    PrintEntryDetails(entry)

def GetAndPrintFeedByUrl:
  yt_service = gdata.youtube.service.YouTubeService()

  # You can retrieve a YouTubeVideoFeed by passing in the URI
  uri = 'http://gdata.youtube.com/feeds/api/standardfeeds/JP/most_popular'
  PrintVideoFeed(yt_service.GetYouTubeVideoFeed(uri))

Получение видео, загруженных конкретным пользователем

У каждого пользователя YouTube есть связанный видеоканал, соответствующий загруженным им видео, по адресу http://gdata.youtube.com/feeds/api/users/ username /uploads . Следующий код демонстрирует, как получить и отобразить канал загрузок пользователя:

def GetAndPrintUserUploads(username):
  yt_service = gdata.youtube.service.YouTubeService()
  uri = 'http://gdata.youtube.com/feeds/api/users/%s/uploads' % username
  PrintVideoFeed(yt_service.GetYouTubeVideoFeed(uri))

Примечание. Вы также можете использовать строку «default» вместо username , чтобы получить видео для текущего аутентифицированного пользователя.

Чтобы получить похожие видео, передайте идентификатор видео объекта gdata.youtube.YouTubeVideoEntry методу GetYouTubeRelatedVideoFeed объекта gdata.youtube.service.YouTubeService . При этом извлекается объект YouTubeVideoFeed содержащий связанные записи.

related_feed = yt_service.GetYouTubeRelatedVideoFeed(video_id='abc123')

Поиск видео

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

В приведенном ниже примере показано, как выполнить поисковый запрос с результатами, упорядоченными по количеству просмотров, включая видео с ограниченным доступом (называемые API «Racy»):

def SearchAndPrint(search_terms):
  yt_service = gdata.youtube.service.YouTubeService()
  query = gdata.youtube.service.YouTubeVideoQuery()
  query.vq = search_terms
  query.orderby = 'viewCount'
  query.racy = 'include'
  feed = yt_service.YouTubeQuery(query)
  PrintVideoFeed(feed)

Класс gdata.service.Query и его подклассы, такие как YouTubeVideoQuery , отвечают за создание URL-адресов каналов. Показанный выше VideoQuery создает URL-адрес, эквивалентный следующему:

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

Вот некоторые из наиболее распространенных свойств YouTubeVideoQuery для настройки параметров поиска :

author
Устанавливает автора записи. Автор является синонимом имени пользователя YouTube.
format
Определяет формат видео. Принимает числовые параметры для указания одного из двух типов URL-адресов потоковой передачи RTSP для воспроизведения мобильного видео или URL-адреса HTTP для встраиваемого проигрывателя Flash.
racy
Указывает, следует ли включать в результаты ограниченный контент. Принимает только два параметра: «включить» или «исключить».
max_results
Устанавливает максимальное количество записей, возвращаемых одновременно.
start_index
Устанавливает индекс первого извлекаемого результата (для разбиения по страницам), отсчитываемый от 1.
orderby
Устанавливает порядок перечисления записей, например по relevance , viewCount , published или rating .
time
Устанавливает период времени для ограничения стандартных результатов ленты: today , this_week , this_month или all_time .
vq
Устанавливает условие поискового запроса. Ищет указанную строку во всех метаданных видео, таких как заголовки, теги и описания.

Примечание. Дополнительную информацию о параметрах запроса см. в Справочном руководстве по API данных YouTube и Справочном руководстве по API данных Google .

Поиск по категориям и ключевым словам

Вы можете ограничить результаты поиска, чтобы показывать только видео, соответствующие заданному набору категорий и ключевых слов. В справочном руководстве описывается, как указать как предварительно определенные категории YouTube (например, «Музыка», «Люди и блоги» и т. д.), так и определяемые пользователем ключевые слова (теги).

Следующий код демонстрирует, как выполнять поиск с использованием ключевых слов (тегов), изменяя условия поиска на нижний регистр . Примечание. Поскольку некоторые слова (например, «комедия») могут относиться как к категории YouTube, так и к ключевым словам, в запросах по категориям и ключевым словам используется соглашение, согласно которому слово с заглавной буквы («комедия») обозначает категорию YouTube, а слово со строчной буквы («комедия»). ") обозначает ключевое слово.

def SearchAndPrintVideosByKeywords(list_of_search_terms):
  yt_service = gdata.youtube.service.YouTubeService()
  query = gdata.youtube.service.YouTubeVideoQuery()
  query.orderby = 'viewCount'
  query.racy = 'include'
  for search_term in list_of_search_terms:
    new_term = search_term.lower()
    query.categories.append('/%s' % new_term)
  feed = yt_service.YouTubeQuery(query)
  PrintVideoFeed(feed)

Поиск по тегам разработчика

Теги разработчика — это дополнительные скрытые ключевые слова, которые разработчик может использовать для пометки контента, загружаемого конечными пользователями через его приложение. Теги разработчика соответствуют ключу разработчика, указанному в заголовках во время загрузки. Эти ключевые слова не будут видны публике и могут использоваться для поиска видео. Чтобы выполнить поиск видео по определенному тегу разработчика, отправьте общий поисковый запрос API данных YouTube, используя свой ключ разработчика. Обязательно укажите схему категорий и тег разработчика, которым должны соответствовать видео. Вы можете получить канал видео, соответствующий вашему тегу разработчика (в нашем примере «your_tag_here»), по URL-адресу ниже:

developer_tag_uri = 'http://gdata.youtube.com/feeds/videos/-/%7Bhttp%3A%2F%2Fgdata.youtube.com%2Fschemas%2F2007%2Fdevelopertags.cat%7Dyour_tag_here'
yt_service = gdata.youtube.service.YouTubeService()
PrintVideoFeed(yt_service.GetYouTubeVideoFeed(developer_tag_uri))

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

Обязательно ознакомьтесь с диаграммами в руководстве по протоколу, чтобы получить общее представление о процессе загрузки. Загрузить видео можно одним из двух способов:

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

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

Чтобы загрузить видео, сначала необходимо создать новый объект gdata.youtube.YouTubeVideoEntry , передав ему объект gdata.media.Group содержащий необходимые метаданные. В следующем примере показана загрузка видео Quicktime «mytestmovie.mov» на YouTube со следующими свойствами:

Свойство Ценить
Заголовок Мой тестовый фильм
Категория Автомобили
Ключевые слова машины, смешно
Описание Мое описание
Имя файла mytestmovie.mov
MIME-тип файла видео/быстрое время
Видео личное? ЛОЖЬ
Местоположение видео 37,-122 (широта,долгота)
Теги разработчика мой тег разработчика, другой тег разработчика

Приведенный ниже код создает пустую запись YouTubeVideoEntry для загрузки. Метод InsertVideoEntry в YouTubeService требует следующих параметров:

  • video_entry — объект gdata.youtube.VideoEntry , содержащий метаданные.
  • filename_or_handle — Файлоподобный объект или имя файла, из которого будет считываться видео.
  • youtube_username — необязательная строка, определяющая имя пользователя, в учетную запись которого должно быть загружено это видео. Разумеется, вашей учетной записи потребуются соответствующие разрешения. По умолчанию это учетная запись текущего аутентифицированного пользователя.
  • content_type — необязательная строка, определяющая MIME-тип загружаемого видео.
Обратите внимание: в этих примерах предполагается, что переменная yt_service относится к полностью аутентифицированному объекту YouTubeService .

# prepare a media group object to hold our video's meta-data
my_media_group = gdata.media.Group(
  title=gdata.media.Title(text='My Test Movie'),
  description=gdata.media.Description(description_type='plain',
                                      text='My description'),
  keywords=gdata.media.Keywords(text='cars, funny'),
  category=[[]gdata.media.Category(
      text='Autos',
      scheme='http://gdata.youtube.com/schemas/2007/categories.cat',
      label='Autos')],
  player=None
)


# prepare a geo.where object to hold the geographical location
# of where the video was recorded
where = gdata.geo.Where()
where.set_location((37.0,-122.0))

# create the gdata.youtube.YouTubeVideoEntry to be uploaded
video_entry = gdata.youtube.YouTubeVideoEntry(media=my_media_group,
                                              geo=where)

# set the path for the video file binary
video_file_location = '/path/to/my/file.mov'

new_entry = yt_service.InsertVideoEntry(video_entry, video_file_location)

Если бы мы хотели пометить наше видео дополнительными тегами разработчика (более подробную информацию см. в разделе «Поиск по тегам разработчика» ), мы могли бы использовать метод AddDeveloperTags перед выполнением вызова InsertVideoEntry :

developer_tags = [[]'some_tag_01', 'another_tag']
video_entry.AddDeveloperTags(developer_tags)

Примечание. Чтобы загрузить видео как личное, в gdata.media.Group необходимо передать атрибут Private:

my_media_group = gdata.media.Group(
  title=gdata.media.Title(text='My Test Movie'),
  description=gdata.media.Description(description_type='plain',
                                      text='My description'),
  keywords=gdata.media.Keywords(text='cars, funny'),
  category=[[]gdata.media.Category(
      text='Autos',
      scheme='http://gdata.youtube.com/schemas/2007/categories.cat',
      label='Autos')],
  player=None,
  private=gdata.media.Private()
)

video_entry = gdata.youtube.YouTubeVideoEntry(media=my_media_group)

# assuming that video_file_location points to a valid path
new_entry = yt_service.InsertVideoEntry(video_entry, video_file_location)

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

Загрузка через браузер выполняется почти идентично прямой загрузке, за исключением того, что вы не загружаете двоичный файл в том же запросе, который вы используете для отправки метаданных видео. Вместо этого вы просто создаете запись YouTubeVideoEntry , содержащую только метаданные. Затем эта видеозапись публикуется по специальной ссылке на сервере API YouTube. Ответ XML содержит token и url , который затем можно использовать для загрузки двоичного файла с использованием стандартной формы HTML.

# create media group as usual
my_media_group = gdata.media.Group(
  title=gdata.media.Title(text='My Test Movie'),
  description=gdata.media.Description(description_type='plain',
                                      text='My description'),
  keywords=gdata.media.Keywords(text='cars, funny'),
  category=[[]gdata.media.Category(
      text='Autos',
      scheme='http://gdata.youtube.com/schemas/2007/categories.cat',
      label='Autos')],
  player=None
)

# create video entry as usual
video_entry = gdata.youtube.YouTubeVideoEntry(media=my_media_group)

# upload meta data only
response = yt_service.GetFormUploadToken(video_entry)

# parse response tuple and use the variables to build a form (see next code snippet)
post_url = response[[]0]
youtube_token = response[[]1]

Приведенный выше код выводит ссылку и токен, которые используются для создания HTML-формы для отображения в браузере пользователя. Ниже показан простой пример формы, где youtube_token представляет содержимое возвращенного элемента токена, как показано выше, полученного из YouTubeVideoEntry . Чтобы пользователь был перенаправлен на ваш веб-сайт после отправки формы, обязательно добавьте параметр next к post_url (как показано ниже), который будет работать так же, как next параметр ссылки AuthSub. Единственное отличие состоит в том, что здесь вместо одноразового токена в качестве параметров URL возвращаются status и переменная id .

next = 'http://example.com/post_video_upload.pyc'

form = """<form action="%s?nexturl=%s" method="post" enctype="multipart/form-data">
          <input name="file" type="file"/>
          <input name="token" type="hidden" value="%s"/>
          <input value="Upload Video File" type="submit" />
          </form>""" % (post_url, next, youtube_token)

Ответ на успешную загрузку будет выглядеть так:

http://example.com/post_video_upload.pyc?status=200&id=ABC123

Параметр status возвращает статус HTTP-транзакции транзакции загрузки. Параметр id возвращает идентификатор видео YouTube, назначенный загруженному видео.

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

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

upload_status = yt_service.CheckUploadStatus(new_entry)

if upload_status is not None:
  video_upload_state = upload_status[[]0]
  detailed_message = upload_status[[]1]

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

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

Чтобы обновить метаданные видео, просто обновите объект YouTubeVideoEntry , а затем используйте метод UpdateVideoEntry объектов YouTubeService . Этот метод принимает в качестве параметра YouTubeVideoEntry , содержащий обновленные метаданные.

# assuming we have a video entry that was just posted in our 'new_entry' variable
new_entry.media.title.text = 'My Updated Video Title'
new_entry.media.description.text = 'Just updated'

updated_entry = yt_service.UpdateVideoEntry(new_entry)

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

Удаление видео очень простое и требует вызова метода DeleteVideoEntry объекта YouTubeService .

response = yt_service.DeleteVideoEntry(entry_to_be_deleted)

if response:
  print 'Video successfully deleted!'

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

Добавление рейтинга

Чтобы оценить видео, используйте метод AddRating объекта YouTubeService . Обратите внимание, что вы не можете оценивать собственные видео и что рейтинг должен быть от 1 до 5 (включительно):

video_id_to_rate = 'Ncakifd_16k'
video_entry = yt_service.GetYouTubeVideoEntry(video_id=video_id_to_rate)
response = yt_service.AddRating(3, video_entry)

Комментарии

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

Имея объект YouTubeVideoEntry или простой идентификатор видео, вы можете получить и распечатать канал, содержащий комментарии к видео, с помощью метода GetYouTubeVideoCommentFeed объекта YouTubeService . В результате получается фид gdata.youtube.YouTubeCommentFeed , состоящий из объектов gdata.youtube.YouTubeCommentEntry . Фид можно анализировать, как и любой другой фид:

video_id = 'ABC123...'
comment_feed = yt_service.GetYouTubeVideoCommentFeed(video_id=video_id)

for comment_entry in comment_feed.entry:
  print comment_entry.ToString()

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

Чтобы добавить новый комментарий, просто используйте метод AddComment объекта YouTubeService . Для этого метода требуется полный объект YouTubeVideoEntry , который необходимо прокомментировать, а также строка, представляющая комментарий:

my_comment = 'what a boring test video'
video_id = '9g6buYJTt_g'
video_entry = yt_service.GetYouTubeVideoEntry(video_id=video_id)
yt_service.AddComment(comment_text=my_comment, video_entry=video_entry)

Видеоответы

Видеоответ YouTube представлял собой видео, которое в качестве ответа было связано со вторым видео. Как описано в этом объявлении, функция видеоответов удалена. Хотя существующие видеоответы по-прежнему доступны, YouTube больше не поддерживает возможность получения списка видеоответов на видео, загрузки новых видеоответов или удаления видеоответов, хотя вы можете удалить видео, которое использовалось в видеоответе. . Следовательно, эти функции также больше не поддерживаются в API.

Запросы API для операций видеоответа теперь возвращают следующее:

  • Запрос на получение видеоответов для видео возвращает пустой список.
  • Запрос на добавление видеоответа возвращает код ответа HTTP 403.
  • Запрос на удаление видеоответа возвращает код ответа HTTP 403.

Пометка видео

Добавление жалобы на видео осуществляется с помощью метода AddComplaint объекта YouTubeService . Термин жалобы должен быть допустимой категорией. Дополнительную информацию см. в разделе «Добавление жалобы» руководства по протоколу.

video_id_to_flag = 'Ncakifd_16k'
complaint_term = 'VIOLENCE'
complaint_text = ('Please ignore this complaint. '
                  'I\'m testing a YouTube API and needed to issue '
                  'a complaint to test the add complaint function. ')

response = yt_service.AddComplaint(complaint_text, complaint_term, video_id_to_flag)

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

Любимые видео

Получение любимых видео пользователя

Пользователи YouTube могут пометить просматриваемые видео как избранные. Общее расположение любимого канала пользователя — следующий URL-адрес.

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

Чтобы получить избранные видео пользователя, используйте метод GetUserFavoritesFeed объекта YouTubeService . Метод принимает необязательную строку в качестве параметра, представляющего имя пользователя YouTube, чей любимый канал необходимо получить.

favorite_feed = yt_service.GetUserFavoritesFeed(username='gdpython')

Возвращенный канал представляет собой обычный видеоканал, содержащий объекты YouTubeVideoEntry .

Примечание. Альтернативно вы можете передать строку default , чтобы получить избранное для текущего аутентифицированного пользователя. Это поведение метода GetUserFavoritesFeed по умолчанию, если имя пользователя не указано.

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

Чтобы добавить избранное видео, используйте метод AddVideoEntryToFavorites объекта YouTubeService . Параметрами являются добавляемый элемент YouTubeVideoEntry и, при необходимости, имя пользователя, в избранное которого он должен быть добавлен (по умолчанию используется текущий аутентифицированный пользователь).

video_id = 'Ncakifd_16k'
video_entry = yt_service.GetYouTubeVideoEntry(video_id=video_id)
response = yt_service.AddVideoEntryToFavorites(video_entry)

# The response, if successfully posted is a YouTubeVideoEntry
if isinstance(response, gdata.youtube.YouTubeVideoEntry):
  print 'Video successfully added to favorites'

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

Чтобы удалить избранное, просто используйте метод DeleteVideoEntryFromFavorites объекта YouTubeService .

video_id = 'Ncakifd_16k'
response = yt_service.DeleteVideoEntryFromFavorites(video_id)
if response is True:
  print 'Video deleted from favorites'

Плейлисты

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

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

Чтобы получить список всех плейлистов пользователя вручную, вы должны использовать следующий URL-адрес:

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

Используя клиентскую библиотеку Python, вы можете использовать метод GetYouTubePlaylistFeed объекта YouTubeService :

playlist_feed = yt_service.GetYouTubePlaylistFeed(username='gdpython')

# instead of passing in a username, you can also pass the URI to the playlist feed:
playlist_feed = yt_service.GetYouTubePlaylistFeed(uri='http://gdata.youtube.com/feeds/api/users/default/playlists')

Примечание. Вместо передачи конкретного имени пользователя (например, «gdpython» в приведенном выше примере) вы также можете передать строку 'default' , чтобы обратиться к текущему аутентифицированному пользователю.

gdata.youtube.YouTubePlaylistFeed представляет канал объектов gdata.youtube.YouTubePlaylistEntry . Они относятся к отдельным спискам воспроизведения, которые может иметь пользователь. Записи видео в определенном плейлисте представлены как объекты gdata.youtube.YouTubePlaylistVideoEntry . Эти объекты очень похожи на обычные объекты gdata.youtube.YouTubeVideoEntry за некоторыми исключениями. К видео можно применять собственные заголовки и описания, а поле позиции указывает, где видео появляется в списке воспроизведения.

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

Имея YouTubePlaylistEntry (представляющий определенный список воспроизведения), вы можете получить YouTubePlaylist Video Feed , содержащий объекты YouTubePlaylistVideoEntry . Как объяснялось выше, эти объекты представляют собой отдельные видео в списке воспроизведения (с дополнительными настраиваемыми заголовками и описанием). Вы можете получить этот канал, передав URI вашего плейлиста методу GetYouTubePlaylistVideoFeed объекта YouTubeService :

# a typical playlist URI
playlist_uri = 'http://gdata.youtube.com/feeds/api/playlists/BCB3BB96DF51B505'

playlist_video_feed = yt_service.GetYouTubePlaylistVideoFeed(uri=playlist_uri)

# iterate through the feed as you would with any other
for playlist_video_entry in playlist_video_feed.entry:
  print playlist_video_entry.title.text

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

Чтобы добавить новый список воспроизведения, просто используйте метод AddPlaylist объекта YouTubeService . Этот метод принимает следующие параметры: playlist_title, playlist_description (обе строки) и необязательное логическое значение, для которого можно установить значение True , если список воспроизведения должен быть помечен как частный.

new_public_playlistentry = yt_service.AddPlaylist('my new playlist', 'a new playlist')

if isinstance(new_public_playlistentry, gdata.youtube.YouTubePlaylistEntry):
  print 'New playlist added'

# adding a private playlist
new_private_playlistentry = yt_service.AddPlaylist('new private playlist', 'a new private playlist', True)

if isinstance(new_private_playlistentry, gdata.youtube.YouTubePlaylistEntry):
  print 'New private playlist added'

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

Чтобы обновить список воспроизведения, используйте метод UpdatePlaylist объекта YouTubeService . Метод принимает следующие параметры: идентификатор обновляемого списка воспроизведения, новый заголовок, новое описание, необязательное логическое значение, позволяющее пометить список воспроизведения как частный, и необязательную строку, указывающую имя пользователя, которому принадлежит список воспроизведения. По умолчанию строка будет соответствовать текущему аутентифицированному пользователю.

# here we are updating a public playlist with a new title while also making it private

# we assume that playlist_to_be_updated here represents a YouTubePlaylistEntry object
playlist_entry_id = playlist_to_be_updated.id.text.split('/')[[]-1]

# we want to keep the original description for the playlist so we store it first
original_description = playlist_to_be_updated.description.text

updated_playlist = yt_service.UpdatePlaylist(playlist_entry_id,
                                             'a new updated title',
                                             original_playlist_description,
                                             playlist_private=True)

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

Вы можете добавить видео в список воспроизведения, используя метод AddPlaylistVideoEntryToPlaylist объекта YouTubeService . Код ниже добавляет видео в список воспроизведения с собственным названием и описанием.

custom_video_title = 'my test video on my test playlist'
custom_video_description = 'this is a test video on my test playlist'
video_id = 'Ncakifd_16k'
playlist_uri = 'http://gdata.youtube.com/feeds/api/playlists/BCB3BB96DF51B505'

playlist_video_entry = yt_service.AddPlaylistVideoEntryToPlaylist(
    playlist_uri, video_id, custom_video_title, custom_video_description)

if isinstance(playlist_video_entry, gdata.youtube.YouTubePlaylistVideoEntry):
  print 'Video added'

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

Редактировать информацию о видео в плейлисте

Используйте метод UpdatePlaylistVideoEntryMetaData объекта YouTubeService , чтобы изменить метаданные для YouTubePlaylistVideoEntry . В приведенном ниже примере мы решили дать нашему видео новый заголовок и переместить его на первую позицию (позицию 1) в нашем плейлисте.

playlist_uri = 'http://gdata.youtube.com/feeds/api/playlists/BCB3BB96DF51B505'
playlist_entry_id = 'B0F29389E537F888'

new_video_title = 'a useful video'
new_video_description = 'updated video description'

updated_playlist_video_entry = yt_service.UpdatePlaylistVideoEntryMetaData(
    playlist_uri, playlist_entry_id, new_video_title, new_video_description, 1)

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

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

Чтобы удалить видео из списка воспроизведения, используйте метод DeletePlaylistVideoEntry объекта YouTubeService . Для этого метода требуется URI списка воспроизведения, который содержит удаляемую запись, а также идентификатор записи:

playlist_uri = 'http://gdata.youtube.com/feeds/api/playlists/BCB3BB96DF51B505'
playlist_entry_id = 'B0F29389E537F888'
response = yt_service.DeletePlaylistVideoEntry(playlist_uri,
                                               playlist_entry_id)
if response is True:
  print 'Entry successfully deleted'

Удаление списка воспроизведения

Чтобы удалить список воспроизведения, просто используйте метод DeletePlaylist объекта YouTubeService , передав URI удаляемого списка воспроизведения:

playlist_uri = 'http://gdata.youtube.com/feeds/api/playlists/BCB3BB96DF51B505'
response = yt_service.DeletePlaylist(playlist_uri)

if response is True:
  print 'Playlist successfully deleted'

Подписки

Чтобы получить список каналов, поисковых запросов и избранного, на которые подписан данный пользователь, используйте следующий URI:

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

Примечание. Альтернативно вы можете передать строку default , чтобы получить избранное для текущего аутентифицированного пользователя.

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

Следующий код демонстрирует, как получить и распечатать список подписок для данного пользователя. Подписки представлены в виде gdata.youtube.YouTubeSubscriptionFeed , состоящего из объектов gdata.youtube.YouTubeSubscriptionEntry . Чтобы получить подписки, используйте метод GetYouTubeSubscriptionFeed объекта YouTubeService , передав либо URI канала подписки, либо имя пользователя, канал подписки которого необходимо получить. Параметр имени пользователя по умолчанию соответствует текущему аутентифицированному пользователю.

subscription_feed = yt_service.GetYouTubeSubscriptionFeed(username='gdpython')

if isinstance(subscription_feed, gdata.youtube.YouTubeSubscriptionFeed)):
  # given a YouTubeSubscriptionEntry we can determine it's type (channel, favorite, or query)
  for entry in subscription_feed.entry:
    print entry.GetSubscriptionType()

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

Вы можете создать новую подписку, вставив новую запись YouTubeSubsciptionEntry в фид подписок прошедшего проверку подлинности пользователя. Мы можем создать три типа подписок: подписка на канал пользователя (с помощью AddSubscriptionToChannel ), подписка на избранное пользователя (с помощью AddSubscriptionToFavorites ) или подписка на определенное ключевое слово (с помощью AddSubscriptionToQuery ). Следующий код подписывает аутентифицированного пользователя на « Канал GoogleDevelopers» .

new_subscription = yt_service.AddSubscriptionToChannel(
      username_to_subscribe_to='GoogleDevelopers')

if isinstance(new_subscription, gdata.youtube.YouTubeSubscriptionEntry):
  print 'New subscription added'

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

new_subscription = yt_service.AddSubscriptionToFavorites(
    username='GoogleDevelopers')
if isinstance(new_subscription, gdata.youtube.YouTubeSubscriptionEntry):
  print 'New subscription added'

Наконец, вы также можете подписаться на определенные поисковые запросы. Здесь мы подписываемся на запрос видео с тегом «python».

new_subscription = yt_service.AddSubscriptionToQuery(query='python')

if isinstance(new_subscription, gdata.youtube.YouTubeSubscriptionEntry):
  print 'New subscription added'

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

Чтобы удалить подписку пользователя, используйте метод DeleteSubscription объекта YouTubeService .

sample_subscription_uri = ('http://gdata.youtube.com/feeds/api/users/'
                           'gdpython/subscriptions/c0c77ca6102a7479')

response = yt_service.DeleteSubscription(sample_subscription_uri)

if response is True:
  print 'Subscription successfully deleted'

Включение взаимодействия с пользователем

Профили пользователей

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

Чтобы получить профиль пользователя YouTube вручную, вы должны использовать следующий URI:

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

Вы можете получить gdata.youtube.YouTubeUserEntry с помощью метода GetYouTubeUserEntry объекта YouTubeService .

user_entry = yt_service.GetYouTubeUserEntry(username='gdpython')

# we can then write a helper function to print out the user details
def PrintUserEntry(entry):
  # print required fields where we know there will be information
  print 'URI: %s\n' % entry.id.text
  print 'Age: %s\n' % entry.age.text
  print 'Gender: %s\n' % entry.gender.text
  print 'Location: %s\n' % entry.location.text

  # check if there is information in the other fields and if so print it
  if user.first_name: 
    print 'First Name: %s\n' % user.first_name.text
  if user.last_name:
    print 'Last Name: %s\n' % user.last_name.text
  if user.relationship:
    print 'Relationship: %s\n' % user.relationship.text
  if user.description:
    print 'About me: %s\n' % user.description.text
  for link in user.link:
    if link.rel == 'related':
      print 'Website: %s\n' % link.href
  if user.company:
    print 'Company: %s\n' % user.company.text
  if user.occupation:
    print 'Occupation: %s\n' % user.occupation.text
  if user.school:
    print 'School: %s\n' % user.school.text
  if user.hobbies:
    print 'Hobbies: %s\n' % user.hobbies.text
  if user.movies:
    print 'Movies: %s\n' % user.movies.text
  if user.music:
    print 'Music: %s\n' % user.music.text
  if user.books:
    print 'Books: %s\n' % user.books.text
  if user.hometown:
    print 'Hometown: %s\n' % user.hometown.text

Контакты

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

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

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

Метод GetYouTubeContactFeed объекта YouTubeService можно использовать для получения gdata.youtube.YouTubeContactFeed , состоящего из объектов gdata.youtube.YouTubeContactEntry .

contact_feed = yt_service.GetYouTubeContactFeed(username='GoogleDevelopers')
for entry in contact_feed.entry:
  print entry.title.text
  # find the apprpriate category element to find out the contact type
  for category in entry.category:
    if category.scheme == 'http://gdata.youtube.com/schemas/2007/contact.cat':
      print category.term

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

Чтобы добавить новый контакт в ленту контактов пользователя, используйте метод AddContact объекта YouTubeService .

new_contact = yt_service.AddContact(contact_username='GoogleDevelopers')

if isinstance(new_contact, gdata.youtube.YouTubeContactEntry)
  print 'New contact added'

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

Чтобы обновить контакт, используйте метод UpdateContact объекта YouTubeService . Этот метод можно использовать для принятия/отклонения запросов на установление контактов, а также для классификации контактов как «Друг» или «Семья». В приведенном ниже примере мы принимаем контакт, а затем устанавливаем для него категорию «Семья»:

# in this case user 'gdpython' has requested to be our contact
#so the original contact status is 'pending'
updated_contact = yt_service.UpdateContact('gdpython', 'accepted', 'Family')

if isinstance(updated_contact, gdata.youtube.YouTubeContactEntry)
  print 'New contact added'

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

Чтобы удалить контакт, используйте метод DeleteContact объекта YouTubeService , передав имя пользователя контакта, который вы хотите удалить.

response = yt_service.DeleteContact(contact_username='gdpython')

if response is True:
  print 'Contact deleted'

Вернуться наверх