Сервис YouTubeVideoUploadService позволяет загружать видео непосредственно на YouTube через API Google Ads. Затем эти видео можно использовать в качестве рекламных материалов в различных типах объявлений, таких как кампании Performance Max или кампании Demand Gen.
Этот сервис упрощает процесс создания видеорекламы, беря на себя загрузку видео на YouTube и обеспечивая их корректную привязку к вашему аккаунту.
Ключевые понятия
Прежде чем начать, важно понять, как осуществляется управление загрузкой видео и через какие различные этапы они могут пройти.
Владение каналом
При загрузке видео вы можете указать целевой канал YouTube, используя поле channel_id в ресурсе YouTubeVideoUpload :
- Канал, принадлежащий рекламодателю (бренду): Укажите
channel_idканала YouTube, принадлежащего рекламодателю. Загрузка видео на канал бренда позволяет лучше контролировать конфиденциальность и видимость видео. - Канал, управляемый Google: Если
channel_idне указан, видео загружается на канал YouTube, управляемый Google и связанный с аккаунтом Google Ads.
Загрузить состояния
Жизненный цикл загруженного на YouTube видео отслеживается с помощью поля state . Перечисление ` YouTubeVideoUploadState определяет следующие состояния:
| Состояние | Описание |
|---|---|
PENDING | Видео загружается. |
UPLOADED | Видео успешно загружено и обрабатывается YouTube. |
PROCESSED | Видео успешно обработано и готово к использованию. |
FAILED | Загрузка или обработка не удалась и не может быть завершена. |
REJECTED | Видео было отклонено по причинам, связанным с проверкой достоверности или соблюдением правил. |
UNAVAILABLE | Информация о состоянии видео недоступна; возможно, оно было удалено с YouTube. |
Настройки конфиденциальности
Поле video_privacy определяет, кто может просматривать загруженное видео. Перечисление YouTubeVideoPrivacy поддерживает:
-
PUBLIC: Видео доступно любому пользователю YouTube. (Разрешено только для каналов брендов). -
UNLISTED: Видео недоступно для поиска, но его может просмотреть любой, у кого есть ссылка. Это вариант по умолчанию и единственный для каналов, управляемых Google.
Загрузите видео
Для загрузки видео необходимо использовать многокомпонентный запрос к методу CreateYouTubeVideoUpload . Запрос содержит как метаданные для загрузки, так и сам видеофайл.
1. Начните загрузку.
Создайте запрос CreateYouTubeVideoUploadRequest , указав:
-
customer_id: Ваш идентификатор клиента Google Ads. -
you_tube_video_upload: ОбъектYouTubeVideoUploadсодержащийvideo_title,video_description, а также, при необходимости,channel_idиvideo_privacy.
Если вы используете клиентскую библиотеку, вызовите метод CreateYouTubeVideoUpload , передав ему ваш видеофайл, и загрузка видео будет обработана автоматически.
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, ) ) print(f"Created YouTube video upload: {response.resource_name}")
Руби
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.
локон
# # 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')
Если вы используете REST, в следующем разделе описано, как управлять загрузкой видео.
2. Загрузите видео.
При отправке REST-запроса методу CreateYouTubeVideoUpload ответ содержит URL-адрес, используемый для загрузки видеофайлов, в заголовке HTTP-ответа x-goog-upload-url , а также другие метаданные, такие как ожидаемый размер каждого фрагмента для загрузки по частям.
Также вы можете указать размер видео, которое собираетесь загрузить изначально, при запуске процесса, с помощью заголовка HTTP-запроса x-goog-upload-header-content-length .
Полное описание HTTP-заголовков, используемых в протоколе загрузки видео, см. в следующем примере кода:
# 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. Получить состояние загрузки видео.
После начала загрузки видео вы можете получить его состояние, выполнив запрос к ресурсу you_tube_video_upload с помощью 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}." )
Руби
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 -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
Управление загрузками
После завершения загрузки видео вы можете использовать его в качестве видеофайла.
Используйте загруженное видео.
После того, как видео перейдет в состояние PROCESSED , его идентификатор на YouTube можно найти в поле video_id ресурса YouTubeVideoUpload .
Используйте этот video_id для создания VideoAsset или для прямой привязки его к типам рекламы, поддерживающим видео YouTube, путем указания идентификатора видео.
Обновить метаданные
Вы можете обновить метаданные видео, загруженного через этот API, используя метод UpdateYouTubeVideoUpload . Обновить можно только поля video_title , video_description и video_privacy .
Удалить загруженные файлы
Если вам нужно удалить видео, загруженные с помощью API Google Ads, используйте метод RemoveYouTubeVideoUpload . Это удалит видео как из библиотеки ресурсов Google Ads, так и с YouTube.