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'