Le YouTubeVideoUploadService
vous permet d'importer des vidéos directement sur YouTube via l'API Google Ads. Vous pouvez ensuite utiliser ces
vidéos pour créer des assets vidéo dans différents types d'annonces, comme
les campagnes Performance Max ou
Demand Gen.
Ce service simplifie le processus de création d'annonces vidéo en gérant la procédure d'importation sur YouTube et en veillant à ce que les vidéos soient correctement associées à votre compte.
Concepts clés
Avant de commencer, il est important de comprendre comment les importations de vidéos sont gérées et les différents états qu'elles peuvent traverser.
Propriété de la chaîne
Lorsque vous importez une vidéo, vous pouvez spécifier la chaîne YouTube de destination à l'aide de
le champ channel_id dans la ressource YouTubeVideoUpload
:
- Chaîne appartenant à l'annonceur (marque) : fournissez le
channel_idd'une chaîne YouTube existante appartenant à l'annonceur. Cette option n'est compatible qu'avec le flux d'authentification des utilisateurs . Elle ne peut pas être utilisée avec des comptes de service. - Chaîne gérée par Google : si
channel_idest omis, la vidéo est importée sur une chaîne YouTube gérée par Google et associée au compte Google Ads.
États d'importation
Le cycle de vie d'une importation de vidéo YouTube est suivi par le champ state.
L'YouTubeVideoUploadState
enum définit les états suivants :
| État | Description |
|---|---|
PENDING |
La vidéo est en cours d'importation. |
UPLOADED |
La vidéo a été importée et est en cours de traitement par YouTube. |
PROCESSED |
La vidéo a été traitée et est prête à être utilisée. |
FAILED |
L'importation ou le traitement a échoué et ne peut pas être terminé. |
REJECTED |
La vidéo a été refusée pour des raisons de validation ou de non-respect des règles. |
UNAVAILABLE |
L'état de la vidéo n'est pas disponible. Elle a peut-être été supprimée de YouTube. |
Paramètres de confidentialité
Le champ video_privacy permet de contrôler qui peut voir la vidéo importée. L'
YouTubeVideoPrivacy
enum est compatible avec les options suivantes :
PUBLIC: la vidéo est disponible pour tous les utilisateurs sur YouTube. (Autorisé uniquement pour les chaînes de marque)UNLISTED: la vidéo n'est pas visible dans les résultats de recherche, mais peut être visionnée par toute personne disposant du lien. Il s'agit de l'option par défaut et de la seule option disponible pour les chaînes gérées par Google.
Mettre en ligne une vidéo
Pour importer une vidéo, vous devez utiliser une requête en plusieurs parties pour la méthode CreateYouTubeVideoUpload. La requête contient à la fois les métadonnées de l'importation et le fichier vidéo lui-même.
1. Lancer l'importation
Créez une CreateYouTubeVideoUploadRequest
en spécifiant les éléments suivants :
customer_id: votre numéro client Google Ads.you_tube_video_upload: un objetYouTubeVideoUploadavecvideo_title,video_descriptionet, éventuellement,channel_idetvideo_privacy.
Si vous utilisez une bibliothèque cliente, appelez la
CreateYouTubeVideoUpload
méthode, en transmettant votre fichier vidéo. L'importation de la vidéo sera gérée
en interne.
Java
This example is not yet available in Java; you can take a look at the other languages.
C#
This example is not yet available in C#; you can take a look at the other languages.
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')
Si vous utilisez REST, la section suivante explique comment gérer l'importation de la vidéo.
2. Importer la vidéo
Lorsque vous envoyez une requête REST à la
CreateYouTubeVideoUpload
méthode, la réponse contient l'URL à utiliser pour importer les octets de la vidéo
dans l'en-tête de réponse HTTP x-goog-upload-url, ainsi que d'autres métadonnées telles
que la taille attendue de chaque bloc pour les importations segmentées.
Vous pouvez également déclarer la taille de la vidéo que vous allez importer au début du processus, avec l'en-tête de requête HTTP x-goog-upload-header-content-length.
Pour obtenir une description complète des en-têtes HTTP utilisés dans le protocole d'importation de vidéos, consultez l'exemple de code suivant :
# 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. Récupérer l'état de l'importation de la vidéo
Une fois que vous avez lancé l'importation d'une vidéo, vous pouvez récupérer son état en interrogeant la
you_tube_video_upload ressource avec GAQL :
Java
This example is not yet available in Java; you can take a look at the other languages.
C#
This example is not yet available in C#; you can take a look at the other languages.
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
Gérer les importations
Une fois la mise en ligne d'une vidéo terminée, vous pouvez l'utiliser comme composant Vidéo.
Utiliser la vidéo importée
Une fois qu'une vidéo atteint l'état PROCESSED, vous pouvez trouver son ID vidéo YouTube dans le champ video_id de la ressource YouTubeVideoUpload.
Utilisez ce video_id pour créer un YoutubeVideoAsset avec
MutateAssets ou associez-le directement aux types d'annonces compatibles avec les vidéos YouTube
en référençant l'ID vidéo.
Mettre à jour les métadonnées
Vous pouvez mettre à jour les métadonnées d'une vidéo importée via cette API à l'aide de la méthode UpdateYouTubeVideoUpload. Seuls les champs video_title, video_description et video_privacy peuvent être mis à jour.
Supprimer les importations
Si vous devez supprimer des vidéos importées avec l'API Google Ads, utilisez la méthode RemoveYouTubeVideoUpload. La vidéo sera supprimée de la bibliothèque de composants Google Ads et de YouTube.