Guia do desenvolvedor: Python

A API Data do YouTube permite que os aplicativos clientes recuperem e atualizem o conteúdo do YouTube no formato de feeds da API Data do Google. O aplicativo cliente pode usar os feeds da API Data do YouTube para buscar, pesquisar e atualizar vídeos, comentários, respostas, playlists, perfis e contatos de usuários, além de consultar vídeos que correspondem a critérios específicos.

Além de fornecer alguns antecedentes sobre os recursos da API Data do YouTube, este documento apresenta exemplos de como interagir com a API usando a biblioteca de cliente Python. Para usar a biblioteca de cliente Python, você vai precisar do Python 2.0 ou mais recente e dos módulos Element Tree, httplib e urllib. Consulte Módulos de dependência para mais detalhes.

Se precisar de ajuda para configurar a biblioteca de cliente Python, consulte o Guia para iniciantes. Se você quiser saber mais sobre o protocolo usado pela biblioteca de cliente Python para interagir com o YouTube, consulte a página de protocolo do guia para desenvolvedores.

Sobre este documento

Público-alvo

Este documento é destinado a programadores que querem criar aplicativos clientes que possam interagir com o YouTube usando a biblioteca de cliente Python. Ele oferece uma série de exemplos de interações básicas com a API de dados.

Para informações de referência da API Data do YouTube, consulte o guia de referência.

Este documento pressupõe que você entenda as ideias gerais por trás do protocolo das APIs de dados do Google e saiba programar em Python.

Para informações de referência sobre as classes e os métodos do Python, consulte os pyDocs (para a classe de serviço e as classes de dados) incluídos no código-fonte.

Estrutura do documento

Este documento contém as seguintes seções:

  • A seção Autenticação descreve os dois métodos de autenticação disponíveis para associar operações de API a uma conta de usuário específica. Essa seção também descreve as diferenças entre a autenticação para a API de dados do YouTube e para outras APIs de dados do Google. Ao longo deste documento, as explicações de funções específicas da API indicam claramente se a função exige a autenticação do usuário. Em geral, todas as solicitações que modificam dados de vídeo ou feed precisam ser autenticadas. As solicitações de acesso somente leitura a vídeos públicos não exigem autenticação.

  • A seção Como entender os feeds e as entradas de vídeo mostra um exemplo de resposta da API e explica como extrair informações sobre um único vídeo de uma lista de vídeos ou de um conjunto de resultados de pesquisa. Esta seção também explica como acessar metadados sobre uma entrada de vídeo específica. Por fim, esta seção explica o mecanismo para atualizar uma entrada de vídeo individual.

  • A seção Como buscar e pesquisar vídeos explica como buscar listas específicas de vídeos, como um feed padrão dos vídeos mais populares do YouTube. Outras listas de vídeos incluem conteúdo enviado por um usuário específico e listas de vídeos relacionados a um conteúdo específico. Esta seção também explica como usar a API para permitir que os usuários pesquisem na biblioteca de vídeos do YouTube por termos ou categorias de pesquisa específicos.

  • A seção Enviar vídeos explica brevemente duas maneiras de permitir que os usuários enviem vídeos para o YouTube pelo seu aplicativo. Além disso, esta seção também explica como fazer upload de vídeos como respostas a outros vídeos.

  • A seção Atualização e exclusão de vídeos descreve como usar a API para atualizar informações sobre um vídeo do YouTube. Ela também descreve como um vídeo pode ser removido usando a API.

  • A seção Como usar os recursos da comunidade descreve as funções da API que permitem que os usuários interajam com os vídeos do YouTube. Essas funções explicam solicitações para postar uma avaliação, um comentário ou uma denúncia em um vídeo. Também é possível usar a API para recuperar listas de comentários de vídeo.

  • A seção Salvar e coletar vídeos explica como usar a API para acessar, criar e atualizar vídeos favoritos, playlists de vídeo e inscrições em canais do YouTube. Também mostra como modificar playlists de vídeos e favoritos adicionando e removendo vídeos.

  • A seção Ativar a interação do usuário explica como usar a API para recuperar e atualizar perfis de usuários. Essa seção também explica como recuperar, adicionar, atualizar e excluir contatos dos usuários.

Primeiros passos

Requisitos

O aplicativo cliente pode usar os feeds da API Data do YouTube para pesquisar, recuperar e atualizar vídeos, comentários, respostas, playlists, inscrições, perfis de usuários e muito mais.

Além de fornecer alguns antecedentes sobre os recursos da API Data do YouTube, este documento apresenta exemplos de interação com a API usando a biblioteca de cliente Python. Para usar a biblioteca de cliente Python, você vai precisar do Python 2.2 ou mais recente e dos módulos Element Tree, httplib e urllib. Consulte Módulos de dependência para mais detalhes.

Consulte o Guia de início para mais informações sobre como configurar seu ambiente. Se você quiser saber mais sobre o protocolo usado pela biblioteca de cliente Python para interagir com o YouTube, consulte a página de protocolo do guia para desenvolvedores.

Os snippets de código de exemplo abaixo podem ser copiados/colados no seu código e modificados para atender às suas necessidades.

Antes de realizar qualquer operação com a API Data do YouTube, é necessário inicializar um objeto gdata.youtube.service.YouTubeService, conforme mostrado abaixo. As instruções import listadas abaixo vão realizar automaticamente outras importações dos módulos gdata.media e gdata.geo. Todas as ações, exceto a recuperação de conteúdo público, vão exigir autenticação.

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

A maioria dos exemplos de método neste guia opera em uma instância de gdata.youtube.service.YouTubeService. Pode ser útil testar as solicitações não autenticadas do interpretador Python interativo.

Observação: a biblioteca de cliente do Python precisa ser adicionada corretamente no caminho. Instale-o executando o script setup.py fornecido. Consulte o guia de início para mais informações.

Autenticação

A biblioteca de cliente Python pode ser usada para trabalhar com feeds públicos ou privados. Os feeds públicos são somente leitura e não exigem autenticação. Os feeds particulares exigem que você faça a autenticação nos servidores do YouTube.

A autenticação pode ser feita por ClientLogin (para apps para computador) ou AuthSub (para aplicativos da Web).

Como definir a chave de desenvolvedor e o ID do cliente

Uma chave de desenvolvedor identifica o desenvolvedor do YouTube que está enviando uma solicitação à API. Um ID de cliente identifica o seu aplicativo para fins de login e depuração.

Ao fazer uma solicitação de API usando a biblioteca de cliente do Python, o cabeçalho de solicitação X-GData-Key é usado para especificar a chave de desenvolvedor, e o cabeçalho X-GData-Client é usado para especificar o ID do cliente. A chave do desenvolvedor e o ID do cliente podem ser definidos no objeto YouTubeService, independente do esquema de autenticação que está sendo usado:

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

É necessário fazer a inscrição para receber uma chave de desenvolvedor do YouTube.

Autenticação AuthSub para aplicativos da Web

A autenticação de proxy AuthSub é usada por aplicativos da Web que precisam autenticar os usuários nas contas do YouTube/Google. O operador não precisa ter acesso ao nome de usuário e à senha do usuário do YouTube. Apenas tokens especiais do AuthSub são necessários.

Quando o usuário acessa seu aplicativo pela primeira vez, ele ainda não foi autenticado com os serviços do Google. Nesse caso, você precisa fornecer um link que direcione o usuário ao Google para autorizar a solicitação de acesso dos seus apps à conta do YouTube. A biblioteca de cliente do Python fornece uma função para gerar esse URL. O código abaixo configura um link para a página 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

Observe os parâmetros enviados para o método GenerateAuthSubURL dos objetos de serviço:

  • next: o URL da página para onde o YouTube vai redirecionar o usuário depois que ele autorizar seu app a acessar a conta.
  • escopo: indica que o aplicativo só vai acessar feeds da API YouTube.
  • secure: indica que o token retornado não será um token seguro.
  • sessão: indica que esse token pode ser trocado por um token de uso múltiplo (sessão).

O URL retornado será parecido com este:

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

O usuário pode clicar no link para fazer login na conta do YouTube. Depois que o usuário autorizar o aplicativo a acessar a conta, ele será redirecionado de volta para o URL next. O URL terá um valor de token de uso único anexado como um parâmetro de consulta. O URL será semelhante a este:

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

A próxima seção vai mostrar como fazer upgrade desse token. O snippet abaixo demonstra uma das maneiras de recuperar esse token do URL:

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

Fazer upgrade para um token de sessão

Por motivos de segurança, esse token é de uso único. Portanto, você precisa trocar esse token de uso único por um token de sessão. Esse processo é descrito na documentação do AuthSub. O snippet de código abaixo mostra como fazer upgrade do token.

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

Esse valor de token representa um token AuthSub de um único uso. Como session = True foi especificado acima, esse token pode ser trocado por um token de sessão do AuthSub usando o método UpgradeToSessionToken, que chama o serviço AuthSubSessionToken.

Agora, seu objeto YouTubeService está totalmente autenticado e pode ser usado para realizar todas as solicitações com a API do YouTube. Os tokens de sessão do AuthSub não expiram, a menos que você emita uma solicitação específica para revogar ou que o usuário decida revogar o acesso acessando a página Sites autorizados na conta do YouTube.

Autenticação do ClientLogin para aplicativos instalados

A autenticação do ClientLogin é usada em aplicativos instalados que podem armazenar ou consultar o nome de usuário e a senha do usuário. Para usar esse tipo de autenticação, invoque o método ProgrammaticLogin de YouTubeService herdado da classe gdata.service.GDataService, especificando o ID e a senha do usuário em nome de quem o cliente está enviando a solicitação para autenticação.

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()

Depois que as credenciais forem definidas, o objeto YouTubeService poderá ser usado para processar todas as solicitações. Para fazer uploads e qualquer tipo de solicitação de gravação (adicionar comentários etc.) na API do YouTube, transmita também a chave de desenvolvedor e o ID do cliente para o objeto yt_service ao realizar a autenticação:

# 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()

O objeto YouTubeService define automaticamente os cabeçalhos X-GData-Key e X-GData-Client corretos quando os atributos developer_key e client_id são definidos.

Observação:consulte a documentação de autenticação das APIs Data do Google para mais detalhes sobre os mecanismos AuthSub e ClientLogin.

Noções básicas dos feeds e entradas de vídeo

A API YouTube Data oferece vários feeds de vídeo que representam listas de vídeos, como feeds padrão, envios, inscrições e favoritos. O URL de cada feed está documentado no guia de referência.

Como mostrar um feed de vídeos

Muitos feeds na API do YouTube consistem em entradas de vídeo. Esses feeds podem ser modelados de forma mais simples como objetos gdata.youtube.YouTubeVideoFeed, cada um contendo vários objetos gdata.youtube.YouTubeVideoEntry. Cada entrada de vídeo corresponde a exatamente um vídeo no YouTube e contém informações sobre ele.

A estrutura básica para recuperar uma lista de vídeos é criar um URL para um feed de vídeo e processar as entradas uma por vez, semelhante ao código abaixo:

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

A seção Como recuperar e pesquisar vídeos detalha muitos URLs de feeds comuns e como recuperar vários feeds de vídeo.

Como recuperar uma entrada de vídeo específica

Você pode extrair apenas as informações de uma entrada de vídeo específica se souber o ID do vídeo. O URL de entrada é baseado no ID do vídeo:

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

O código abaixo recupera um gdata.youtube.YouTubeVideoEntry correspondente a um vídeo no YouTube:

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

Conteúdo da entrada de vídeo

Há muitos metadados que podem ser recuperados de um objeto gdata.youtube.YouTubeVideoEntry, como miniaturas, URLs de players e duração do vídeo. O código a seguir demonstra como acessar algumas dessas informações. A biblioteca de cliente do Python abstrai a maior parte dessa funcionalidade mapeando elementos XML em classes. A maioria das informações importantes sobre uma entrada YouTubeVideoEntry está disponível nos filhos do atributo media (que contém um objeto gdata.media.Group) na entrada (que representa o elemento media:group XML). Confira abaixo um exemplo de como recuperar metadados de vídeo:

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

Observação:para mais informações sobre como gerar as informações necessárias para incorporar um vídeo com um player na sua página, consulte o guia de protocolo.

Como recuperar e pesquisar por vídeos

Como recuperar feeds padrão

A API Data do YouTube oferece um feed padrão dos vídeos mais populares do YouTube. A API já ofereceu suporte a outros feeds padrão, que foram descontinuados. Consulte o Guia para desenvolvedores para mais informações.

O URL do feed dos vídeos mais populares do YouTube tem o seguinte formato:

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

Observação: também é possível recuperar feeds padrão específicos da localidade especificando um ID de localidade no formato http://gdata.youtube.com/feeds/api/standardfeeds/localeID/feedID. Por exemplo, os vídeos mais populares no Japão seriam: http://gdata.youtube.com/feeds/api/standardfeeds/JP/most_popular. Para uma lista completa de possíveis localeIDs, consulte o guia de referência .

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))

Como recuperar vídeos enviados por um usuário específico

Cada usuário do YouTube tem um feed de vídeo associado aos vídeos enviados por ele em http://gdata.youtube.com/feeds/api/users/username/uploads. O código abaixo demonstra como buscar e mostrar um feed de envios do usuário:

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))

Observação:também é possível usar a string "default" no lugar de username para recuperar vídeos do usuário autenticado.

Para recuperar vídeos relacionados, transmita o ID do vídeo do objeto gdata.youtube.YouTubeVideoEntry para o método GetYouTubeRelatedVideoFeed do objeto gdata.youtube.service.YouTubeService. Isso recupera um objeto YouTubeVideoFeed que contém entradas relacionadas.

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

Pesquisar vídeos

A API Data do YouTube permite solicitar um conjunto de entradas que correspondem a critérios especificados, como solicitar entradas de vídeo publicadas por um autor específico, por formato de vídeo ou que contenham uma palavra-chave específica. Para fazer isso, crie um objeto gdata.service.YouTubeVideoQuery com seus critérios de pesquisa específicos e transmita-o para o método YouTubeQuery do gdata.youtube.service.YouTubeService.

O exemplo abaixo mostra como realizar uma consulta de pesquisa, com resultados ordenados por contagem de visualizações, incluindo vídeos restritos (chamados de "Racy" pela API):

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)

A classe gdata.service.Query e subclasses como YouTubeVideoQuery são responsáveis por criar URLs de feed. O VideoQuery mostrado acima cria um URL equivalente ao seguinte:

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

Confira algumas das propriedades mais comuns da YouTubeVideoQuery para definir parâmetros de pesquisa:

author
Define o autor da entrada. Autor é sinônimo de nome de usuário do YouTube.
format
Especifica um formato de vídeo. Aceita parâmetros numéricos para especificar um dos dois tipos de URLs de streaming RTSP para reprodução de vídeo em dispositivos móveis ou um URL HTTP para o player Flash incorporável.
racy
Indica se o conteúdo restrito precisa ser incluído nos resultados. Aceita apenas dois parâmetros: "include" ou "exclude".
max_results
Define o número máximo de entradas a serem retornadas de uma só vez.
start_index
Define o índice com base em 1 do primeiro resultado a ser recuperado (para paginação).
orderby
Define a ordem em que as entradas são listadas, como por relevance, viewCount, published ou rating.
time
Define um período para limitar os resultados do feed padrão a: today, this_week, this_month ou all_time.
vq
Define um termo de consulta de pesquisa. Procura a string especificada em todos os metadados do vídeo, como títulos, tags e descrições.

Observação:para mais informações sobre parâmetros de consulta, consulte o Guia de referência da API Data do YouTube e o Guia de referência das APIs Data do Google.

Pesquisar com categorias e palavras-chave

Você pode restringir os resultados da pesquisa para mostrar apenas vídeos que correspondem a um determinado conjunto de categorias e palavras-chave. O guia de referência descreve como especificar as categorias predefinidas do YouTube (como Música, Pessoas e Blogs etc.) e as palavras-chave definidas pelo usuário (tags).

O código abaixo demonstra como pesquisar usando palavras-chave (tags) mudando os termos de pesquisa para letras minúsculas. Observação: como algumas palavras (como "comédia") podem ser uma categoria do YouTube e uma palavra-chave, as consultas de categoria e de palavra-chave usam a convenção de que uma palavra em maiúsculas ("Comédia") indica uma categoria do YouTube, enquanto uma palavra em letras minúsculas ("comédia") indica uma palavra-chave.

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)

Pesquisar por tags de desenvolvedor

As tags do desenvolvedor são outras palavras-chave ocultas que um desenvolvedor pode usar para marcar o conteúdo enviado pelos usuários finais pelo app. As tags de desenvolvedor são associadas à chave de desenvolvedor definida nos cabeçalhos durante o upload. Essas palavras-chave não vão ficar visíveis para o público e podem ser usadas para recuperar vídeos. Para pesquisar vídeos por uma tag de desenvolvedor específica, envie uma solicitação de pesquisa geral da API Data do YouTube usando sua chave de desenvolvedor. Especifique o esquema de categoria e a tag do desenvolvedor que os vídeos precisam corresponder. É possível recuperar um feed de vídeos que correspondem à sua tag de desenvolvedor ("your_tag_here" no nosso exemplo) no URL abaixo:

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))

Como enviar vídeos

Consulte os diagramas no guia do protocolo para ter uma visão geral do processo de upload. É possível fazer upload de vídeos de duas maneiras:

  • fazendo upload do vídeo diretamente dos seus servidores usando o método de upload direto
  • ou enviando primeiro os metadados e depois permitindo que o usuário envie o vídeo diretamente para o YouTube usando o método de envio baseado em navegador

Upload direto

Para fazer upload de um vídeo, primeiro é necessário criar um novo objeto gdata.youtube.YouTubeVideoEntry e transmitir a ele um objeto gdata.media.Group com os metadados necessários. O exemplo a seguir mostra o upload do vídeo Quicktime "mytestmovie.mov" para o YouTube com as seguintes propriedades:

PropriedadeValue
TitleMy Test Movie
CategoriasCarros
Keywordscarros, engraçado
DescriçãoMinha descrição
Nome do arquivomytestmovie.mov
Tipo MIME do arquivovideo/quicktime
Vídeo privado?falso
Local do vídeo37,-122 (lat,long)
Tags para desenvolvedoresmydevelopertag, anotherdevelopertag

O código abaixo cria um YouTubeVideoEntry em branco para ser enviado. O método InsertVideoEntry no YouTubeService requer os seguintes parâmetros:

  • video_entry: o objeto gdata.youtube.VideoEntry que contém metadados.
  • filename_or_handle: um objeto semelhante a um arquivo ou o nome de arquivo de onde o vídeo será lido.
  • youtube_username: uma string opcional que especifica o nome de usuário da conta para a qual o vídeo será enviado. Sua conta precisa das permissões adequadas. O padrão é a conta do usuário autenticado.
  • content_type: uma string opcional que especifica o tipo MIME do vídeo a ser enviado.
Esses exemplos pressupõem que a variável yt_service se refira a um objeto YouTubeService totalmente autenticado.

# 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)

Se quiséssemos marcar nosso vídeo com tags opcionais para desenvolvedores (consulte Pesquisar por tags para desenvolvedores para mais detalhes), poderíamos usar o método AddDeveloperTags antes de realizar a chamada para InsertVideoEntry:

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

Observação: para enviar vídeos como privados, um atributo privado precisa ser transmitido para o gdata.media.Group:

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)

Envio com base no navegador

O upload baseado em navegador é quase idêntico ao upload direto, exceto que você não envia o arquivo binário na mesma solicitação que usa para enviar os metadados do vídeo. Em vez disso, basta criar um YouTubeVideoEntry que contenha apenas metadados. Essa entrada de vídeo é publicada em um link especial no servidor da API do YouTube. A resposta em XML contém um token e um url, que podem ser usados para fazer upload do arquivo binário usando um formulário HTML padrão.

# 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]

O código acima imprime um link e um token que é usado para criar um formulário HTML a ser exibido no navegador do usuário. Um exemplo simples de formulário é mostrado abaixo com youtube_token representando o conteúdo do elemento de token retornado, como mostrado sendo extraído de YouTubeVideoEntry acima. Para que o usuário seja redirecionado ao seu site após enviar o formulário, anexe um parâmetro next ao post_url (conforme mostrado abaixo), que funcionará da mesma forma que o parâmetro next de um link AuthSub. A única diferença é que, em vez de um token de uso único, uma variável status e id são retornadas como parâmetros de URL.

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)

Uma resposta para um upload bem-sucedido seria semelhante a esta:

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

O parâmetro status retorna o status da transação HTTP da transação de upload. O parâmetro id retorna o ID do vídeo do YouTube atribuído ao vídeo enviado.

Como verificar o status do upload

Depois de fazer o upload de um vídeo, ele vai aparecer imediatamente no feed de envios de um usuário autenticado. No entanto, ele não será público no site até ser processado. Os vídeos rejeitados ou que não foram enviados também vão aparecer apenas no feed de envios do usuário autenticado. O código a seguir verifica o status de um YouTubeVideoEntry para saber se ele ainda não está ativo ou se foi rejeitado.

upload_status = yt_service.CheckUploadStatus(new_entry)

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

Como atualizar e excluir vídeos

Como atualizar as informações do vídeo

Para atualizar os metadados do vídeo, basta atualizar o objeto YouTubeVideoEntry e usar o método UpdateVideoEntry dos objetos YouTubeService. Esse método usa como parâmetro um YouTubeVideoEntry que contém metadados atualizados.

# 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)

Como excluir um vídeo

A exclusão de um vídeo é muito simples e envolve apenas uma chamada para o DeleteVideoEntry do objeto YouTubeService.

response = yt_service.DeleteVideoEntry(entry_to_be_deleted)

if response:
  print 'Video successfully deleted!'

Como usar recursos de comunidade

Como adicionar uma avaliação

Para avaliar um vídeo, use o método AddRating do objeto YouTubeService. Não é possível classificar seus próprios vídeos, e as classificações precisam estar entre 1 e 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)

Comentários

Como recuperar comentários para um vídeo

Com um objeto YouTubeVideoEntry ou um ID de vídeo simples, é possível recuperar e imprimir um feed contendo os comentários do vídeo usando o método GetYouTubeVideoCommentFeed do objeto YouTubeService. O feed resultante é um gdata.youtube.YouTubeCommentFeed, que consiste em objetos gdata.youtube.YouTubeCommentEntry. O feed pode ser analisado como qualquer outro:

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

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

Adicionando um comentário

Para adicionar um novo comentário, use o método AddComment do objeto YouTubeService. O método requer um objeto YouTubeVideoEntry completo que será comentado, além de uma string que represente o comentário:

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)

Respostas ao vídeo

Uma resposta em vídeo do YouTube é um vídeo associado, como uma resposta, a um segundo vídeo. O recurso de respostas em vídeo foi desativado, conforme explicado neste comunicado. As respostas em vídeo ainda estão disponíveis, mas o YouTube não oferece mais a opção de recuperar uma lista de respostas em vídeo para um vídeo, enviar novas respostas em vídeo ou excluir respostas em vídeo. No entanto, é possível excluir o vídeo que foi usado em uma resposta em vídeo. Consequentemente, essas funções também não são mais compatíveis com a API.

As solicitações de API para operações de resposta de vídeo agora retornam o seguinte:

  • Uma solicitação para recuperar respostas em vídeo para um vídeo retorna uma lista vazia.
  • Uma solicitação para adicionar uma resposta em vídeo retorna um código de resposta HTTP 403.
  • Uma solicitação para excluir uma resposta em vídeo retorna um código de resposta HTTP 403.

Como sinalizar um vídeo

A adição de uma denúncia sobre um vídeo é feita com o método AddComplaint no objeto YouTubeService. O termo da reclamação precisa ser uma categoria válida. Consulte a seção Adicionar uma denúncia no guia do protocolo para mais informações.

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)

Como salvar e colecionar vídeos

Vídeos favoritos

Como recuperar os vídeos favoritos de um usuário

Os usuários do YouTube podem marcar os vídeos que assistem como favoritos. O local geral do feed favorito de um usuário é o seguinte URL.

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

Para recuperar os vídeos favoritos de um usuário, use o método GetUserFavoritesFeed do objeto YouTubeService. O método usa uma string opcional como parâmetro que representa o nome de usuário do YouTube do usuário cujo feed favorito será recuperado.

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

O feed retornado é um feed de vídeo normal, que contém objetos YouTubeVideoEntry.

Observação:também é possível transmitir a string default para recuperar os favoritos do usuário autenticado. Esse é o comportamento padrão do método GetUserFavoritesFeed se nenhum nome de usuário for fornecido.

Adicionar um favorito

Para adicionar um vídeo aos favoritos, use o método AddVideoEntryToFavorites do objeto YouTubeService. Os parâmetros são o YouTubeVideoEntry que será adicionado e, opcionalmente, o nome de usuário dos favoritos em que ele será adicionado (o padrão é o usuário autenticado no momento).

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'

Como excluir um favorito

Para excluir um favorito, basta usar o método DeleteVideoEntryFromFavorites do objeto YouTubeService.

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

Playlists

Cada usuário do YouTube tem um feed de playlists que contém todas as playlists criadas por ele. Cada playlist tem um feed com todos os vídeos dela.

Como recuperar playlists do usuário

Para buscar uma lista de todas as playlists de um usuário manualmente, use o seguinte URL:

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

Com a biblioteca de cliente do Python, é possível usar o método GetYouTubePlaylistFeed do objeto 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')

Observação:em vez de transmitir um nome de usuário específico (como "gdpython" no exemplo acima), também é possível transmitir a string 'default' para se referir ao usuário autenticado.

Um gdata.youtube.YouTubePlaylistFeed representa um feed de objetos gdata.youtube.YouTubePlaylistEntry. Eles se referem às playlists individuais que um usuário pode ter. As entradas de vídeo em uma playlist específica são representadas como objetos gdata.youtube.YouTubePlaylistVideoEntry. Esses objetos são muito semelhantes aos objetos gdata.youtube.YouTubeVideoEntry normais, com algumas exceções. É possível adicionar títulos e descrições personalizados aos vídeos, e um campo de posição indica onde o vídeo aparece na playlist.

Recuperar informações da reprodução

Com um YouTubePlaylistEntry (que representa uma playlist específica), é possível receber um YouTubePlaylistVideoFeed que contém objetos YouTubePlaylistVideoEntry. Como explicado acima, esses objetos representam vídeos individuais em uma playlist (com títulos e descrições personalizados opcionais). Para acessar esse feed, transmita o URI da playlist para o método GetYouTubePlaylistVideoFeed do objeto 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

Como adicionar uma lista de reprodução

Para adicionar uma nova playlist, basta usar o método AddPlaylist do objeto YouTubeService. Esse método usa os seguintes parâmetros: playlist_title, playlist_description (ambas strings) e um valor booleano opcional que pode ser definido como True se a playlist for marcada como privada.

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'

Como atualizar uma lista de reprodução

Para atualizar uma playlist, use o método UpdatePlaylist do objeto YouTubeService. O método recebe os seguintes parâmetros: o ID da playlist a ser atualizada, um novo título, uma nova descrição, um booleano opcional para marcar a playlist como privada e uma string opcional indicando o nome de usuário proprietário da playlist. A string será definida como o usuário autenticado no momento.

# 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)

Adicionar vídeo à playlist

Para adicionar um vídeo a uma playlist, use o método AddPlaylistVideoEntryToPlaylist do objeto YouTubeService. O código abaixo adiciona um vídeo a uma playlist com um título e uma descrição personalizados.

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'

Observação:não é necessário incluir um título e uma descrição personalizados. Se eles não forem especificados, o título e a descrição reais do vídeo serão usados.

Editar informações do vídeo na playlist

Use o método UpdatePlaylistVideoEntryMetaData do objeto YouTubeService para mudar os metadados de um YouTubePlaylistVideoEntry. No exemplo abaixo, decidimos dar um novo título personalizado ao vídeo e movê-lo para a primeira posição (posição 1) na playlist.

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)

Observação:se você quiser reverter a descrição e o título de um vídeo em uma playlist para os metadados originais, basta informar NULL para o título e a descrição.

Remover vídeo da playlist

Para remover um vídeo de uma playlist, use o método DeletePlaylistVideoEntry do objeto YouTubeService. O método exige o URI da playlist que contém a entrada a ser excluída, bem como o ID da entrada:

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'

Como excluir uma lista de reprodução

Para excluir uma playlist, basta usar o método DeletePlaylist do objeto YouTubeService, transmitindo o URI da playlist a ser excluída:

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

if response is True:
  print 'Playlist successfully deleted'

Inscrições

Para buscar uma lista dos canais, pesquisas e favoritos de um determinado usuário, use o seguinte URI:

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

Observação:também é possível transmitir a string default para recuperar os favoritos do usuário autenticado.

Como recuperar assinaturas do usuário

O código abaixo demonstra como recuperar e mostrar a lista de assinaturas de um determinado usuário. As assinaturas são representadas como um gdata.youtube.YouTubeSubscriptionFeed composto por objetos gdata.youtube.YouTubeSubscriptionEntry. Para recuperar assinaturas, use o método GetYouTubeSubscriptionFeed do objeto YouTubeService, transmitindo o URI de um feed de assinaturas ou o nome de usuário cujo feed de assinaturas será recuperado. O parâmetro de nome de usuário é definido como o usuário autenticado.

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()

Como adicionar uma inscrição

Para criar uma nova assinatura, insira um novo YouTubeSubsciptionEntry no feed de assinaturas do usuário autenticado. Podemos criar três tipos de assinaturas: uma assinatura do canal de um usuário (usando AddSubscriptionToChannel), uma assinatura dos favoritos de um usuário (usando AddSubscriptionToFavorites) ou uma assinatura de uma palavra-chave específica (usando AddSubscriptionToQuery). O código a seguir inscreve o usuário autenticado no canal "GoogleDevelopers".

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

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

Você também pode se inscrever nos favoritos do usuário "GoogleDevelopers":

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

Por fim, você também pode se inscrever em termos de pesquisa específicos. Aqui estamos nos inscrevendo em uma consulta para vídeos com a tag "python".

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

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

Como excluir uma inscrição

Para excluir uma assinatura do usuário, use o método DeleteSubscription do objeto 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'

Como ativar a interação do usuário

Perfis de usuário

Como recuperar o perfil de um usuário

Para buscar o perfil do YouTube de um usuário manualmente, use o seguinte URI:

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

É possível recuperar um gdata.youtube.YouTubeUserEntry com o método GetYouTubeUserEntry do objeto 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

Contatos

A lista de contatos de um determinado usuário pode ser recuperada no seguinte URL:

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

Como recuperar os contatos do usuário

O método GetYouTubeContactFeed do objeto YouTubeService pode ser usado para extrair um gdata.youtube.YouTubeContactFeed, que consiste em objetos 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

Como adicionar um contato

Para adicionar um novo contato ao feed de contatos de um usuário, use o método AddContact do objeto YouTubeService.

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

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

Aceitar/rejeitar um contato

Para atualizar um contato, use o método UpdateContact do objeto YouTubeService. Esse método pode ser usado para aceitar/rejeitar solicitações de contato e também para categorizar contatos como "Amigo" ou "Família". No exemplo abaixo, aceitamos um contato e definimos a categoria como "Família":

# 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'

Como excluir um contato

Para excluir um contato, use o método DeleteContact do objeto YouTubeService, transmitindo o nome de usuário do contato que você quer excluir.

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

if response is True:
  print 'Contact deleted'

Voltar ao início