O YouTubeVideoUploadService
permite fazer upload de vídeos diretamente para o YouTube pela API Google Ads. Esses
vídeos podem ser usados para criar recursos de vídeo em vários tipos de anúncios, como
campanhas Performance Max ou
Geração de Demanda.
Esse serviço simplifica o fluxo de trabalho de criação de anúncios em vídeo, processando o upload do YouTube e garantindo que os vídeos estejam associados corretamente à sua conta.
Principais conceitos
Antes de começar, é importante entender como os uploads de vídeo são gerenciados e os diferentes estados que eles podem passar.
Propriedade do canal
Ao fazer upload de um vídeo, você pode especificar o canal de destino do YouTube usando
o campo channel_id no YouTubeVideoUpload
recurso:
- Canal de propriedade do anunciante (marca):forneça o
channel_idde um canal do YouTube que pertence ao anunciante. Isso só é compatível com o fluxo de autenticação do usuário; não pode ser usado com contas de serviço. - Canal gerenciado pelo Google:se
channel_idfor omitido, o vídeo será enviado para um canal do YouTube gerenciado pelo Google associado à conta do Google Ads.
Estados de upload
O ciclo de vida de um upload de vídeo do YouTube é rastreado pelo campo state.
O YouTubeVideoUploadState
tipo enumerado define os seguintes estados:
| Estado | Descrição |
|---|---|
PENDING |
O vídeo está sendo enviado. |
UPLOADED |
O vídeo foi enviado e está sendo processado pelo YouTube. |
PROCESSED |
O vídeo foi processado e está pronto para uso. |
FAILED |
O upload ou o processamento falhou e não pode ser concluído. |
REJECTED |
O vídeo foi rejeitado devido a motivos de validação ou política. |
UNAVAILABLE |
O estado do vídeo não está disponível. Ele pode ter sido removido do YouTube. |
Configurações de privacidade
O campo video_privacy controla quem pode ver o vídeo enviado. O tipo enumerado
YouTubeVideoPrivacy
oferece suporte a:
PUBLIC: o vídeo está disponível para qualquer pessoa no YouTube. Permitido apenas para canais de marca.UNLISTED: o vídeo não pode ser pesquisado, mas pode ser assistido por qualquer pessoa com o link. Essa é a opção padrão e única para canais gerenciados pelo Google.
Enviar um vídeo
Para fazer upload de um vídeo, use uma solicitação de várias partes para o método CreateYouTubeVideoUpload. A solicitação contém os metadados do upload e o arquivo de vídeo.
1. Iniciar o upload
Crie um CreateYouTubeVideoUploadRequest
especificando o seguinte:
customer_id: seu ID de cliente do Google Ads.you_tube_video_upload: um objetoYouTubeVideoUploadcomvideo_title,video_descriptione, opcionalmente,channel_idevideo_privacy.
Se você estiver usando uma biblioteca de cliente, chame o
CreateYouTubeVideoUpload
método, transmitindo o arquivo de vídeo. O upload será processado
internamente.
Java
This example is not yet available in Java; you can take a look at the other languages.
C#
YouTubeVideoUploadServiceClient ytService = client.GetService( Services.V25.YouTubeVideoUploadService); CreateYouTubeVideoUploadRequest createUploadRequest = new CreateYouTubeVideoUploadRequest() { CustomerId = customerId.ToString(), YouTubeVideoUpload = new YouTubeVideoUpload() { VideoTitle = "Test Video", VideoDescription = "Test Video Description", VideoPrivacy = YouTubeVideoPrivacy.Unlisted } }; string videoUploadResourceName; using (FileStream stream = File.OpenRead(videoFilePath)) { ResumableUploadSession<CreateYouTubeVideoUploadRequest, CreateYouTubeVideoUploadResponse> session = ytService.CreateYouTubeVideoUpload(); CreateYouTubeVideoUploadResponse response = session.BeginUploadAsync(createUploadRequest, stream).Result; videoUploadResourceName = response.ResourceName; Console.WriteLine($"Created YouTube video upload: {videoUploadResourceName}"); }
PHP
This example is not yet available in PHP; you can take a look at the other languages.
Python
yt_service: YouTubeVideoUploadServiceClient = client.get_service( "YouTubeVideoUploadService" ) create_upload_request: CreateYouTubeVideoUploadRequest = ( youtube_video_upload_service.CreateYouTubeVideoUploadRequest() ) create_upload_request.customer_id = customer_id create_upload_request.you_tube_video_upload.video_title = "Test Video" create_upload_request.you_tube_video_upload.video_description = ( "Test Video Description" ) create_upload_request.you_tube_video_upload.video_privacy = ( client.enums.YouTubeVideoPrivacyEnum.UNLISTED ) video_upload_resource_name: str with open(video_file_path, "rb") as stream: response: CreateYouTubeVideoUploadResponse = ( yt_service.create_you_tube_video_upload( stream=stream, request=create_upload_request, retry=None, ) ) video_upload_resource_name = response.resource_name print(f"Created YouTube video upload: {video_upload_resource_name}")
Ruby
This example is not yet available in Ruby; you can take a look at the other languages.
Perl
This example is not yet available in Perl; you can take a look at the other languages.
curl
# # Use the --i curl parameter to capture response headers in the $RESPONSE # variable. FILE_SIZE=$(wc -c < "${VIDEO_FILE_NAME}" | tr -d '\r') RESPONSE=$(curl -i -f -v -s --request POST \ "https://googleads.googleapis.com/resumable/upload/v${API_VERSION}/customers/${CUSTOMER_ID}/youTubeVideoUploads:create" \ --header "Content-Type: application/json" \ --header "developer-token: ${DEVELOPER_TOKEN}" \ --header "login-customer-id: ${MANAGER_CUSTOMER_ID}" \ --header "Authorization: Bearer ${OAUTH2_ACCESS_TOKEN}" \ --header "X-Goog-Upload-Protocol: resumable" \ --header "X-Goog-Upload-Command: start" \ --header "X-Goog-Upload-Header-Content-Length: ${FILE_SIZE}" \ --data @- <<EOF { "customer_id": "${CUSTOMER_ID}", "you_tube_video_upload": { "video_title": "${VIDEO_TITLE}", "video_description": "${VIDEO_DESCRIPTION}", "video_privacy": "UNLISTED" } } EOF ) # Extract the value of the "x-goog-upload-url" header from the HTTP response. UPLOAD_URL=$(echo "${RESPONSE}" \ | grep -i '^x-goog-upload-url' \ | awk '{print $2}' \ | tr -d '\r') CHUNK_SIZE=$(echo "${RESPONSE}" \ | grep -i '^x-goog-upload-chunk-granularity' \ | awk '{print $2}' \ | tr -d '\r')
Se você estiver usando REST, a seção a seguir descreve como gerenciar o upload de vídeo.
2. Fazer upload do vídeo
Quando você envia uma solicitação REST para o
CreateYouTubeVideoUpload
método, a resposta contém o URL a ser usado para fazer upload dos bytes de vídeo
no x-goog-upload-url cabeçalho de resposta HTTP, além de outros metadados, como
o tamanho esperado de cada parte para uploads em partes.
Você também pode declarar o tamanho do vídeo que será enviado inicialmente, ao iniciar o processo, com o cabeçalho da solicitação HTTP x-goog-upload-header-content-length.
Para uma descrição completa dos cabeçalhos HTTP usados no protocolo de upload de vídeo, consulte o exemplo de código a seguir:
# Take the first ${CHUNK_SIZE} bytes of the video file and upload them. head -c ${CHUNK_SIZE} ${VIDEO_FILE_NAME} | curl -i -v -X PUT "${UPLOAD_URL}" \ --header "Authorization: Bearer ${OAUTH2_ACCESS_TOKEN}" \ --header "X-Goog-Upload-Offset: 0" \ --header "X-Goog-Upload-Command: upload" \ --header "Content-Length: ${CHUNK_SIZE}" \ --data-binary @- # Query the status of the upload. QUERY_RESPONSE=$(curl -i -s -X POST "${UPLOAD_URL}" \ --header "Authorization: Bearer ${OAUTH2_ACCESS_TOKEN}" \ --header "X-Goog-Upload-Command: query") # Extract the value of the "x-goog-upload-size-received" header from the HTTP # response. UPLOADED_BYTES=$(echo "${QUERY_RESPONSE}" \ | grep -i '^x-goog-upload-size-received' \ | awk '{print $2}' \ | tr -d '\r') echo "Uploaded ${UPLOADED_BYTES} bytes." REMAINING_BYTES=$((FILE_SIZE - UPLOADED_BYTES)) echo "${REMAINING_BYTES} bytes remaining to upload." FINALIZE_RESPONSE=$(tail -c ${REMAINING_BYTES} ${VIDEO_FILE_NAME} | curl -v -X PUT "${UPLOAD_URL}" \ --header "Authorization: Bearer ${OAUTH2_ACCESS_TOKEN}" \ --header "X-Goog-Upload-Offset: ${UPLOADED_BYTES}" \ --header "X-Goog-Upload-Command: upload, finalize" \ --data-binary @-) UPLOADED_VIDEO_RESOURCE_NAME=$(echo $FINALIZE_RESPONSE | jq -r '.resourceName')
3. Recuperar o estado do upload de vídeo
Depois de iniciar um upload de vídeo, você pode recuperar o estado dele consultando o
you_tube_video_upload recurso com GAQL:
Java
This example is not yet available in Java; you can take a look at the other languages.
C#
// Retrieve the metadata of the newly uploaded video. string query = $@" SELECT you_tube_video_upload.resource_name, you_tube_video_upload.video_id, you_tube_video_upload.state FROM you_tube_video_upload WHERE you_tube_video_upload.resource_name = '{videoUploadResourceName}'"; GoogleAdsServiceClient gaService = client.GetService( Services.V25.GoogleAdsService); gaService.SearchStream(customerId.ToString(), query, delegate (SearchGoogleAdsStreamResponse resp) { foreach (GoogleAdsRow row in resp.Results) { Console.WriteLine( $"Video with ID {row.YouTubeVideoUpload.VideoId} was found in " + $"state {row.YouTubeVideoUpload.State}."); } } );
PHP
This example is not yet available in PHP; you can take a look at the other languages.
Python
# Retrieve the metadata of the newly uploaded video. query: str = f""" SELECT you_tube_video_upload.resource_name, you_tube_video_upload.video_id, you_tube_video_upload.state FROM you_tube_video_upload WHERE you_tube_video_upload.resource_name = '{video_upload_resource_name}'""" ga_service: GoogleAdsServiceClient = client.get_service("GoogleAdsService") stream: Iterator[SearchGoogleAdsStreamResponse] = ga_service.search_stream( customer_id=customer_id, query=query ) for row in itertools.chain.from_iterable(batch.results for batch in stream): video = row.you_tube_video_upload print( f"Video with ID {row.you_tube_video_upload.video_id} was found in state {row.you_tube_video_upload.state}." )
Ruby
This example is not yet available in Ruby; you can take a look at the other languages.
Perl
This example is not yet available in Perl; you can take a look at the other languages.
curl
curl -i -v -X POST \ "https://qa-prod-googleads.sandbox.googleapis.com/v${API_VERSION}/customers/${CUSTOMER_ID}/googleAds:search" \ --header "Content-Type: application/json" \ --header "Developer-Token: ${DEVELOPER_TOKEN}" \ --header "login-customer-id: ${MANAGER_CUSTOMER_ID}" \ --header "Authorization: Bearer ${OAUTH2_ACCESS_TOKEN}" \ --data @- <<EOF { "query": "SELECT you_tube_video_upload.resource_name, you_tube_video_upload.video_id, you_tube_video_upload.state FROM you_tube_video_upload WHERE you_tube_video_upload.resource_name = '$UPLOADED_VIDEO_RESOURCE_NAME'" } EOF
Gerenciar uploads
Depois que um upload de vídeo é concluído, você pode usá-lo como um recurso de vídeo.
Usar o vídeo enviado
Depois que um vídeo atinge o estado PROCESSED, você pode encontrar o ID do vídeo do YouTube no campo video_id do recurso YouTubeVideoUpload.
Use este video_id para criar um YoutubeVideoAsset com
MutateAssets ou vincule-o diretamente a tipos de anúncios que oferecem suporte a vídeos do YouTube
referenciando o ID do vídeo.
Atualizar metadados
Você pode atualizar os metadados de um vídeo enviado por essa API usando o método UpdateYouTubeVideoUpload. Somente os campos video_title, video_description e video_privacy podem ser atualizados.
Remover uploads
Se você precisar excluir vídeos enviados com a API Google Ads, use o método RemoveYouTubeVideoUpload. Isso vai remover o vídeo da biblioteca de recursos do Google Ads e do YouTube.