อัปโหลดวิดีโอ

YouTubeVideoUploadService ช่วยให้คุณอัปโหลดวิดีโอไปยัง YouTube ได้โดยตรงผ่าน Google Ads API จากนั้นคุณสามารถใช้วิดีโอเหล่านี้เป็นชิ้นงานในโฆษณาประเภทต่างๆ เช่น แคมเปญ 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 จะควบคุมว่าใครบ้างที่ดูวิดีโอที่อัปโหลดได้ Enum 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}")
      

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

หากคุณใช้ REST ส่วนต่อไปนี้จะอธิบายวิธีจัดการการอัปโหลดวิดีโอ

2. อัปโหลดวิดีโอ

เมื่อคุณส่งคำขอ REST ไปยังเมธอด CreateYouTubeVideoUpload การตอบกลับจะมี URL ที่ใช้สำหรับการอัปโหลดไบต์ของวิดีโอ ในส่วนหัวการตอบกลับ HTTP x-goog-upload-url พร้อมกับข้อมูลเมตาอื่นๆ เช่น ขนาดที่คาดไว้ของแต่ละก้อนสำหรับการอัปโหลดแบบเป็นก้อน

นอกจากนี้ คุณยังประกาศขนาดของวิดีโอที่จะอัปโหลดในตอนแรกได้ เมื่อเริ่มกระบวนการด้วยx-goog-upload-header-content-length ส่วนหัวของคำขอ HTTP

ดูคำอธิบายแบบเต็มของส่วนหัว 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}."
    )
      

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
      

จัดการการอัปโหลด

หลังจากอัปโหลดวิดีโอเสร็จแล้ว คุณจะใช้วิดีโอดังกล่าวเป็นชิ้นงานวิดีโอได้

ใช้วิดีโอที่อัปโหลด

หลังจากวิดีโอมีสถานะเป็น PROCESSED คุณจะดูรหัสวิดีโอ YouTube ได้ ในช่อง video_id ของแหล่งข้อมูล YouTubeVideoUpload

ใช้ video_id นี้เพื่อสร้าง VideoAsset หรือ ลิงก์โดยตรงกับประเภทโฆษณาที่รองรับวิดีโอ YouTube โดยอ้างอิง รหัสวิดีโอ

อัปเดตข้อมูลเมตา

คุณอัปเดตข้อมูลเมตาของวิดีโอที่อัปโหลดผ่าน API นี้ได้โดยใช้เมธอด UpdateYouTubeVideoUpload อัปเดตได้เฉพาะช่อง video_title, video_description และ video_privacy

นำการอัปโหลดออก

หากต้องการลบวิดีโอที่อัปโหลดด้วย Google Ads API ให้ใช้วิธีการ RemoveYouTubeVideoUpload การดำเนินการนี้จะนำวิดีโอออกจากทั้ง คลังชิ้นงานของ Google Ads และ YouTube