YouTubeVideoUploadService আপনাকে Google Ads API-এর মাধ্যমে সরাসরি YouTube-এ ভিডিও আপলোড করার সুযোগ দেয়। এরপর এই ভিডিওগুলো Performance Max ক্যাম্পেইন বা Demand Gen ক্যাম্পেইনের মতো বিভিন্ন ধরনের বিজ্ঞাপনে ভিডিও অ্যাসেট তৈরি করতে ব্যবহার করা যায়।
এই পরিষেবাটি ইউটিউবে আপলোড প্রক্রিয়াটি পরিচালনা করে ভিডিও বিজ্ঞাপন তৈরির কার্যপ্রবাহকে সহজ করে তোলে এবং ভিডিওগুলো আপনার অ্যাকাউন্টের সাথে সঠিকভাবে সংযুক্ত করা নিশ্চিত করে।
মূল ধারণা
শুরু করার আগে, ভিডিও আপলোডগুলো কীভাবে পরিচালিত হয় এবং সেগুলো কোন কোন পর্যায়ের মধ্য দিয়ে যেতে পারে, তা বোঝা জরুরি।
চ্যানেলের মালিকানা
ভিডিও আপলোড করার সময়, আপনি YouTubeVideoUpload রিসোর্সের channel_id ফিল্ড ব্যবহার করে গন্তব্য ইউটিউব চ্যানেল নির্দিষ্ট করতে পারেন:
- বিজ্ঞাপনদাতার নিজস্ব (ব্র্যান্ড) চ্যানেল: বিজ্ঞাপনদাতার মালিকানাধীন একটি ইউটিউব চ্যানেলের
channel_idপ্রদান করুন। ব্র্যান্ড চ্যানেলে ভিডিও আপলোড করলে সেটির গোপনীয়তা এবং দৃশ্যমানতার উপর আরও বেশি নিয়ন্ত্রণ রাখা যায়। - গুগল-পরিচালিত চ্যানেল: যদি
channel_idউল্লেখ না করা হয়, তাহলে ভিডিওটি গুগল অ্যাডস অ্যাকাউন্টের সাথে যুক্ত একটি গুগল-পরিচালিত ইউটিউব চ্যানেলে আপলোড করা হয়।
আপলোড অবস্থা
একটি ইউটিউব ভিডিও আপলোডের জীবনচক্র ' state ফিল্ড দ্বারা ট্র্যাক করা হয়। YouTubeVideoUploadState enum-টি নিম্নলিখিত স্টেটগুলো সংজ্ঞায়িত করে:
| রাজ্য | বর্ণনা |
|---|---|
PENDING | ভিডিওটি আপলোড করা হচ্ছে। |
UPLOADED | ভিডিওটি সফলভাবে আপলোড করা হয়েছে এবং ইউটিউব এটি প্রক্রিয়া করছে। |
PROCESSED | ভিডিওটি সফলভাবে প্রক্রিয়াজাত করা হয়েছে এবং ব্যবহারের জন্য প্রস্তুত। |
FAILED | আপলোড বা প্রক্রিয়াকরণ ব্যর্থ হয়েছে এবং এটি সম্পন্ন করা যাবে না। |
REJECTED | যাচাইকরণ বা নীতিগত কারণে ভিডিওটি প্রত্যাখ্যান করা হয়েছে। |
UNAVAILABLE | ভিডিওটি অনুপলব্ধ; এটি ইউটিউব থেকে সরিয়ে ফেলা হয়ে থাকতে পারে। |
গোপনীয়তা সেটিংস
video_privacy ফিল্ডটি নিয়ন্ত্রণ করে যে আপলোড করা ভিডিওটি কে দেখতে পারবে। ` YouTubeVideoPrivacy enum নিম্নলিখিত বিষয়গুলো সমর্থন করে:
-
PUBLIC: ভিডিওটি ইউটিউবে যে কেউ দেখতে পারবেন। (শুধুমাত্র ব্র্যান্ড চ্যানেলগুলোর জন্য অনুমোদিত)। -
UNLISTED: ভিডিওটি অনুসন্ধানযোগ্য নয়, তবে লিঙ্কের মাধ্যমে যে কেউ এটি দেখতে পারেন। গুগল-পরিচালিত চ্যানেলগুলোর জন্য এটিই ডিফল্ট এবং একমাত্র বিকল্প।
একটি ভিডিও আপলোড করুন
ভিডিও আপলোড করতে হলে, আপনাকে অবশ্যই CreateYouTubeVideoUpload মেথডে একটি মাল্টি-পার্ট রিকোয়েস্ট ব্যবহার করতে হবে। এই রিকোয়েস্টে আপলোডের মেটাডেটা এবং ভিডিও ফাইলটি উভয়ই থাকে।
১. আপলোড শুরু করুন
নিম্নলিখিত বিষয়গুলো উল্লেখ করে একটি CreateYouTubeVideoUploadRequest তৈরি করুন:
-
customer_id: আপনার গুগল অ্যাডস কাস্টমার আইডি। -
you_tube_video_upload: একটিYouTubeVideoUploadঅবজেক্ট, যাতেvideo_title,video_descriptionএবং ঐচ্ছিকভাবেchannel_idওvideo_privacyঅন্তর্ভুক্ত থাকে।
আপনি যদি কোনো ক্লায়েন্ট লাইব্রেরি ব্যবহার করেন, তাহলে আপনার ভিডিও ফাইলটি পাস করে CreateYouTubeVideoUpload মেথডটি কল করুন, এবং ভিডিও আপলোডের কাজটি অভ্যন্তরীণভাবে সম্পন্ন হবে।
জাভা
This example is not yet available in Java; you can take a look at the other languages.
সি#
This example is not yet available in C#; you can take a look at the other languages.
পিএইচপি
This example is not yet available in PHP; you can take a look at the other languages.
পাইথন
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}")
রুবি
This example is not yet available in Ruby; you can take a look at the other languages.
পার্ল
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 ব্যবহার করেন, তাহলে ভিডিও আপলোড কীভাবে পরিচালনা করতে হয় তা নিম্নলিখিত বিভাগে বর্ণনা করা হয়েছে।
২. ভিডিওটি আপলোড করুন
যখন আপনি CreateYouTubeVideoUpload মেথডে একটি REST রিকোয়েস্ট পাঠান, তখন রেসপন্সটিতে x-goog-upload-url HTTP রেসপন্স হেডারে ভিডিও বাইট আপলোড করার জন্য ব্যবহৃত 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')
৩. ভিডিও আপলোডের অবস্থা পুনরুদ্ধার করুন
ভিডিও আপলোড শুরু করার পরে, আপনি GAQL ব্যবহার করে you_tube_video_upload রিসোর্সটি কোয়েরি করার মাধ্যমে এর অবস্থা জানতে পারবেন:
জাভা
This example is not yet available in Java; you can take a look at the other languages.
সি#
This example is not yet available in C#; you can take a look at the other languages.
পিএইচপি
This example is not yet available in PHP; you can take a look at the other languages.
পাইথন
# 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.
পার্ল
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 অবস্থায় পৌঁছানোর পর, আপনি YouTubeVideoUpload রিসোর্সের video_id ফিল্ডে এর ইউটিউব ভিডিও আইডি খুঁজে পেতে পারেন।
MutateAssets ব্যবহার করে একটি YoutubeVideoAsset তৈরি করতে এই video_id ব্যবহার করুন অথবা ভিডিও আইডিটি উল্লেখ করে এটিকে সরাসরি ইউটিউব ভিডিও সমর্থনকারী বিজ্ঞাপনের প্রকারের সাথে লিঙ্ক করুন।
মেটাডেটা আপডেট করুন
এই API-এর মাধ্যমে আপলোড করা একটি ভিডিওর মেটাডেটা আপনি UpdateYouTubeVideoUpload মেথডটি ব্যবহার করে আপডেট করতে পারেন। শুধুমাত্র video_title , video_description এবং video_privacy ফিল্ডগুলোই আপডেট করা যাবে।
আপলোডগুলি সরান
গুগল অ্যাডস এপিআই (Google Ads API) দিয়ে আপলোড করা ভিডিও মুছে ফেলার প্রয়োজন হলে, RemoveYouTubeVideoUpload মেথডটি ব্যবহার করুন। এটি গুগল অ্যাডস অ্যাসেট লাইব্রেরি এবং ইউটিউব উভয় জায়গা থেকেই ভিডিওটি সরিয়ে দেবে।