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
Enum จะกำหนดสถานะต่อไปนี้
| สถานะ | คำอธิบาย |
|---|---|
PENDING |
กำลังอัปโหลดวิดีโอ |
UPLOADED |
อัปโหลดวิดีโอเรียบร้อยแล้วและ YouTube กำลังประมวลผลวิดีโอ |
PROCESSED |
ประมวลผลวิดีโอเรียบร้อยแล้วและพร้อมใช้งาน |
FAILED |
การอัปโหลดหรือการประมวลผลล้มเหลวและดำเนินการให้เสร็จสมบูรณ์ไม่ได้ |
REJECTED |
ระบบปฏิเสธวิดีโอเนื่องจากเหตุผลด้านการตรวจสอบหรือนโยบาย |
UNAVAILABLE |
สถานะวิดีโอไม่พร้อมใช้งาน ระบบอาจนำวิดีโอออกจาก YouTube แล้ว |
การตั้งค่าความเป็นส่วนตัว
ฟิลด์ video_privacy จะควบคุมผู้ที่ดูวิดีโอที่อัปโหลดได้ Enum
YouTubeVideoPrivacy
รองรับตัวเลือกต่อไปนี้
PUBLIC: ทุกคนใน YouTube ดูวิดีโอได้ (อนุญาตเฉพาะช่องของแบรนด์)UNLISTED: ระบบจะไม่แสดงวิดีโอในการค้นหา แต่ทุกคนที่มีลิงก์จะดูวิดีโอได้ ตัวเลือกนี้เป็นตัวเลือกเริ่มต้นและตัวเลือกเดียวสำหรับช่องที่ Google จัดการ
อัปโหลดวิดีโอ
หากต้องการอัปโหลดวิดีโอ คุณต้องใช้คำขอแบบหลายส่วนไปยังเมธอด CreateYouTubeVideoUpload คำขอจะมีทั้งข้อมูลเมตาสำหรับการอัปโหลดและไฟล์วิดีโอเอง
1. เริ่มการอัปโหลด
สร้าง CreateYouTubeVideoUploadRequest
โดยระบุข้อมูลต่อไปนี้
customer_id: รหัสลูกค้า Google Adsyou_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#
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')
หากคุณใช้ REST ส่วนต่อไปนี้จะอธิบายวิธีจัดการการอัปโหลดวิดีโอ
2. อัปโหลดวิดีโอ
เมื่อคุณส่งคำขอ REST ไปยัง
CreateYouTubeVideoUpload
เมธอด การตอบกลับจะมี URL ที่ใช้สำหรับอัปโหลดไบต์ของวิดีโอ
ในส่วนหัวการตอบกลับ HTTP x-goog-upload-url พร้อมกับข้อมูลเมตาอื่นๆ เช่น
ขนาดที่คาดไว้ของแต่ละ Chunk สำหรับการอัปโหลดแบบ Chunk
นอกจากนี้ คุณยังประกาศขนาดของวิดีโอที่จะอัปโหลดในตอนแรกเมื่อเริ่มกระบวนการได้ด้วยส่วนหัวของคำขอ 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#
// 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
จัดการการอัปโหลด
หลังจากอัปโหลดวิดีโอเสร็จแล้ว คุณสามารถใช้วิดีโอดังกล่าวเป็นชิ้นงานวิดีโอได้
ใช้วิดีโอที่อัปโหลด
หลังจากวิดีโอมีสถานะเป็น PROCESSED แล้ว คุณจะเห็นรหัสวิดีโอ YouTube ในฟิลด์ video_id ของทรัพยากร YouTubeVideoUpload
ใช้ video_id นี้เพื่อสร้าง YoutubeVideoAsset ด้วย
MutateAssets หรือลิงก์ไปยังประเภทโฆษณาที่รองรับวิดีโอ YouTube โดยตรง
ด้วยการอ้างอิงรหัสวิดีโอ
อัปเดตข้อมูลเมตา
คุณสามารถอัปเดตข้อมูลเมตาของวิดีโอที่อัปโหลดผ่าน API นี้ได้โดยใช้เมธอด UpdateYouTubeVideoUpload โดยจะอัปเดตได้เฉพาะฟิลด์ video_title, video_description และ video_privacy เท่านั้น
นำรายการที่อัปโหลดออก
หากต้องการลบวิดีโอที่อัปโหลดด้วย Google Ads API ให้ใช้เมธอด RemoveYouTubeVideoUpload ซึ่งจะนำวิดีโอออกจากทั้งคลังชิ้นงานของ Google Ads และ YouTube