← 返回目录
来源:Google Ads API 官方文档 · 中文版 · 本地归档

上传视频

YouTubeVideoUploadService 可让您通过 Google Ads API 将视频直接上传到 YouTube。然后,您可以使用这些 视频在各种广告类型(例如 效果最大化广告系列或 需求开发广告系列)中创建视频素材资源。

此服务通过处理 YouTube 上传流程来简化视频广告的创建工作流程,确保视频与您的账号正确关联。

主要概念

在开始之前,请务必了解如何管理视频上传以及视频可能经历的不同状态。

频道所有权

上传视频时,您可以使用 channel_id字段指定目标 YouTube 频道:YouTubeVideoUpload

  • 广告客户拥有的(品牌)频道 :提供广告客户拥有的现有 YouTube 频道的 channel_id。此方法仅支持 与 用户身份验证 流程搭配使用, 不能与服务账号搭配使用。
  • Google 管理的频道 :如果省略 channel_id,视频将上传到与 Google Ads 账号关联的 Google 管理的 YouTube 频道。

上传状态

state 字段用于跟踪 YouTube 视频上传的生命周期。The YouTubeVideoUploadState 枚举定义了以下状态:

状态 说明
PENDING 正在上传视频。
UPLOADED 视频已成功上传,YouTube 正在处理该视频。
PROCESSED 视频已成功处理,可以开始使用。
FAILED 上传或处理失败,无法完成。
REJECTED 由于验证或政策原因,视频被拒绝。
UNAVAILABLE 视频状态不可用;视频可能已从 YouTube 中移除。

隐私设置

video_privacy 字段用于控制哪些人可以观看上传的视频。 YouTubeVideoPrivacy 枚举支持:

  • PUBLIC:YouTube 上的任何人都可以观看该视频。(仅允许品牌频道使用)。
  • UNLISTED:该视频无法搜索,但拥有链接的任何人都可以观看。这是 Google 管理的频道的默认选项,也是唯一选项。

上传视频

如需上传视频,您必须使用多部分请求向 CreateYouTubeVideoUpload 方法发送请求。该请求包含上传的元数据和视频文件本身。

1. 开始上传

构建 CreateYouTubeVideoUploadRequest ,并指定以下内容:

  • customer_id:您的 Google Ads 客户 ID。
  • 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,
        )
    )
    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')
在接这个接口时卡住了?
Stuck wiring this API into production? We build ad-delivery tooling on these platforms — campaign automation, reporting pipelines, error-handling and migration between API versions.
联系我们 · Talk to us 每日平台更新简报 →