YouTubeVideoUploadService
की मदद से, Google Ads API के ज़रिए सीधे YouTube पर वीडियो अपलोड किए जा सकते हैं. इसके बाद, इन वीडियो का इस्तेमाल करके, अलग-अलग तरह के विज्ञापनों में वीडियो ऐसेट बनाई जा सकती हैं. जैसे, परफ़ॉर्मेंस मैक्स कैंपेन या मांग बढ़ाने में मदद करने वाले कैंपेन.
यह सेवा, YouTube पर वीडियो अपलोड करने की प्रोसेस को मैनेज करके, वीडियो विज्ञापन बनाने के वर्कफ़्लो को आसान बनाती है. इससे यह पक्का होता है कि वीडियो आपके खाते से सही तरीके से जुड़े हों.
मुख्य सिद्धांत
शुरू करने से पहले, यह समझना ज़रूरी है कि वीडियो अपलोड को कैसे मैनेज किया जाता है और वे किन-किन स्थितियों से गुज़र सकते हैं.
शुरू से आखिर तक का वर्कफ़्लो
किसी वीडियो फ़ाइल को अपलोड करके उसे विज्ञापन में दिखाने के लिए, आपको सिलसिलेवार तरीके से ये चार चरण पूरे करने होंगे:
| चरण | सेवा और तरीका | खास जानकारी |
|---|---|---|
| 1. वीडियो बाइट अपलोड करना और शुरू करना | YouTubeVideoUploadService पर CreateYouTubeVideoUpload |
YouTubeVideoUpload रिसॉर्स (customers/{customer_id}/youTubeVideoUploads/{video_upload_id}) बनाने के लिए, वीडियो का मेटाडेटा और बाइनरी फ़ाइल अपलोड करें. |
| 2. पोल प्रोसेस होने की स्थिति | GoogleAdsService पर SearchStream |
you_tube_video_upload से लेकर state = 'PROCESSED' तक क्वेरी करें. साथ ही, 11 वर्णों वाला YouTube video_id भरें. |
| 3. फिर से इस्तेमाल की जा सकने वाली वीडियो ऐसेट बनाना | AssetService पर MutateAssets |
ऐसेट के संसाधन का नाम (customers/{customer_id}/assets/{asset_id}) पाने के लिए, YoutubeVideoAsset (youtube_video_id = video_id) बनाएं. |
| 4. ऐसेट को कैंपेन या विज्ञापनों से लिंक करना | AssetGroupAssetService पर MutateAssetGroupAssets या AdGroupAdService पर MutateAdGroupAds |
ऐसेट को परफ़ॉर्मेंस मैक्स AssetGroupAsset (field_type = YOUTUBE_VIDEO) या मांग बढ़ाने में मदद करने वाले कैंपेन DemandGenVideoResponsiveAdInfo (videos[].asset) से लिंक करें. |
चैनल स्वामित्व
कोई वीडियो अपलोड करते समय, यह तय किया जा सकता है कि उसे किस YouTube चैनल पर अपलोड करना है. इसके लिए, YouTubeVideoUpload रिसॉर्स में मौजूद channel_id फ़ील्ड का इस्तेमाल करें:
- विज्ञापन देने वाले व्यक्ति या कंपनी के मालिकाना हक वाला (ब्रैंड) चैनल: विज्ञापन देने वाले व्यक्ति या कंपनी के मालिकाना हक वाले मौजूदा YouTube चैनल का
channel_idदें. यह सिर्फ़ उपयोगकर्ता की पुष्टि के फ़्लो के साथ काम करता है. इसका इस्तेमाल सेवा खातों के साथ नहीं किया जा सकता. - Google खाते से मैनेज किया जा रहा चैनल: अगर
channel_idको शामिल नहीं किया जाता है, तो वीडियो को Google खाते से मैनेज किए जा रहे उस YouTube चैनल पर अपलोड किया जाता है जो Google Ads खाते से जुड़ा है.
अपलोड की गई फ़ाइलों की स्थिति
YouTube पर अपलोड किए गए वीडियो की लाइफ़साइकल को state फ़ील्ड से ट्रैक किया जाता है.
YouTubeVideoUploadState
enum से इन स्थितियों के बारे में पता चलता है:
| राज्य | ब्यौरा |
|---|---|
PENDING |
वीडियो अपलोड किया जा रहा है. |
UPLOADED |
वीडियो अपलोड हो गया है और YouTube इसे प्रोसेस कर रहा है. |
PROCESSED |
वीडियो को प्रोसेस कर दिया गया है और अब इसका इस्तेमाल किया जा सकता है. |
FAILED |
अपलोड या प्रोसेस करने की प्रोसेस पूरी नहीं हो सकी. |
REJECTED |
पुष्टि न होने या नीति के उल्लंघन की वजह से, वीडियो को अस्वीकार कर दिया गया. |
UNAVAILABLE |
वीडियो की स्थिति उपलब्ध नहीं है. ऐसा हो सकता है कि उसे YouTube से हटा दिया गया हो. |
निजता सेटिंग
video_privacy फ़ील्ड से यह कंट्रोल किया जाता है कि अपलोड किया गया वीडियो किसे दिखे. YouTubeVideoPrivacy
ईनम में ये वैल्यू इस्तेमाल की जा सकती हैं:
PUBLIC: यह वीडियो YouTube पर सभी के लिए उपलब्ध है. (सिर्फ़ ब्रैंड चैनलों के लिए अनुमति है).UNLISTED: वीडियो को खोजा नहीं जा सकता. हालांकि, जिसके पास वीडियो का लिंक है वह इसे देख सकता है. Google की ओर से मैनेज किए जाने वाले चैनलों के लिए, यह डिफ़ॉल्ट और एकमात्र विकल्प है.
जनरेटिव कॉन्टेंट के बारे में जानकारी देना
विज्ञापन देने वाले लोग या कंपनियां, v26 से ईयू एआई ऐक्ट जैसे नियमों के तहत यह जानकारी दे सकती हैं कि अपलोड किए गए वीडियो कॉन्टेंट में, एआई से जनरेट किया गया या सिंथेटिक मीडिया शामिल है या नहीं.
YouTubeVideoUpload में मौजूद video_content_metadata फ़ील्ड में VideoContentMetadata शामिल है. YouTubeVideoUploadGenerativeContentDisclosure enum का इस्तेमाल करके, इसके नेस्ट किए गए generative_content_disclosure फ़ील्ड को सेट करें:
| वैल्यू | ब्यौरा |
|---|---|
NON_GENERATIVE_CONTENT |
विज्ञापन देने वाले व्यक्ति या कंपनी ने बताया कि वीडियो को एआई से नहीं बनाया गया है. |
GENERATIVE_CONTENT |
विज्ञापन देने वाले व्यक्ति या कंपनी ने बताया है कि वीडियो को एआई से बनाया गया है. |
वीडियो अपलोड करें
वीडियो अपलोड करने के लिए, आपको CreateYouTubeVideoUpload तरीके का इस्तेमाल करके, कई हिस्सों वाला अनुरोध करना होगा. अनुरोध में, अपलोड किए जाने वाले वीडियो का मेटाडेटा और वीडियो फ़ाइल, दोनों शामिल होती हैं.
1. अपलोड शुरू करना
इन फ़ील्ड के साथ CreateYouTubeVideoUploadRequest बनाएं:
| फ़ील्ड | आवश्यकता | ब्यौरा और सीमाएं |
|---|---|---|
customer_id |
ज़रूरी है | 10 अंकों का Google Ads ग्राहक आईडी (बिना हाइफ़न के). |
you_tube_video_upload.video_title |
ज़रूरी है (INPUT_ONLY, IMMUTABLE) |
YouTube पर अपलोड किए गए वीडियो का टाइटल. इसमें ज़्यादा से ज़्यादा 100 वर्ण हो सकते हैं. इसमें < या > शामिल नहीं किया जा सकता. |
you_tube_video_upload.video_description |
ज़रूरी नहीं (INPUT_ONLY, IMMUTABLE) |
YouTube पर वीडियो का ब्यौरा (ज़्यादा से ज़्यादा 5,000 वर्ण; इसमें < या > शामिल नहीं हो सकते). |
you_tube_video_upload.channel_id |
ज़रूरी नहीं (IMMUTABLE) |
विज्ञापन देने वाले व्यक्ति या कंपनी के ब्रैंड चैनल के लिए, 24 वर्णों वाला डेस्टिनेशन YouTube चैनल आईडी (UC से शुरू होने वाला). अगर इसे शामिल नहीं किया जाता है, तो वीडियो को Google खाते से मैनेज किए जा रहे चैनल पर अपलोड किया जाता है. |
you_tube_video_upload.video_privacy |
ज़रूरी नहीं (ब्रैंड चैनलों पर इसे बदला जा सकता है) | YouTubeVideoPrivacy सेटिंग (UNLISTED डिफ़ॉल्ट या विज्ञापन देने वाले व्यक्ति या कंपनी के मालिकाना हक वाले ब्रैंड चैनलों के लिए PUBLIC). |
you_tube_video_upload.video_content_metadata |
ज़रूरी नहीं (INPUT_ONLY, IMMUTABLE) |
Android 13 (API लेवल 33) और इससे ऊपर के वर्शन पर उपलब्ध है: VideoContentMetadata के साथ generative_content_disclosure को YouTubeVideoUploadGenerativeContentDisclosure वैल्यू (NON_GENERATIVE_CONTENT या GENERATIVE_CONTENT) पर सेट किया गया हो. |
अगर क्लाइंट लाइब्रेरी का इस्तेमाल किया जा रहा है, तो CreateYouTubeVideoUpload तरीके को कॉल करें. साथ ही, अपनी वीडियो फ़ाइल पास करें. इसके बाद, वीडियो अपलोड करने की प्रोसेस को इंटरनल तौर पर मैनेज किया जाएगा.
Java
String videoUploadResourceName; try (YouTubeVideoUploadServiceClient youTubeVideoUploadServiceClient = googleAdsClient.getLatestVersion().createYouTubeVideoUploadServiceClient()) { YouTubeVideoUpload youTubeVideoUpload = YouTubeVideoUpload.newBuilder() .setVideoTitle("Test Video") .setVideoDescription("Test Video Description") .setVideoPrivacy(YouTubeVideoPrivacy.UNLISTED) .build(); CreateYouTubeVideoUploadRequest createUploadRequest = CreateYouTubeVideoUploadRequest.newBuilder() .setCustomerId(Long.toString(customerId)) .setYouTubeVideoUpload(youTubeVideoUpload) .build(); CreateYouTubeVideoUploadResponse response = youTubeVideoUploadServiceClient.createYouTubeVideoUpload( createUploadRequest, () -> new FileInputStream(videoFile), null); videoUploadResourceName = response.getResourceName(); System.out.printf("Created YouTube video upload: %s%n", videoUploadResourceName); }
C#
YouTubeVideoUploadServiceClient ytService = client.GetService( Services.V26.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
$youTubeVideoUploadServiceClient = $googleAdsClient->getYouTubeVideoUploadServiceClient(); $youTubeVideoUpload = new YouTubeVideoUpload([ 'video_title' => 'Test Video', 'video_description' => 'Test Video Description', 'video_privacy' => YouTubeVideoPrivacy::UNLISTED ]); $createYouTubeVideoUploadRequest = CreateYouTubeVideoUploadRequest::build( $customerId, $youTubeVideoUpload ); /** @var ResumableUpload $resumableUpload */ $resumableUpload = $youTubeVideoUploadServiceClient->createYouTubeVideoUpload( $createYouTubeVideoUploadRequest ); $stream = Utils::streamFor(fopen($videoFilePath, 'rb')); /** @var CreateYouTubeVideoUploadResponse $response */ $response = $resumableUpload->startUpload($stream); $videoUploadResourceName = $response->getResourceName(); printf("Created YouTube video upload: '%s'%s", $videoUploadResourceName, PHP_EOL);
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
video_upload = client.resource.you_tube_video_upload do |v| v.video_title = "Test Video" v.video_description = "Test Video Description" v.video_privacy = :UNLISTED end upload = client.service.you_tube_video_upload.create_you_tube_video_upload( customer_id: customer_id, you_tube_video_upload: video_upload, ) video_upload_resource_name = nil File.open(video_file_path, "rb") do |stream| response = upload.start( stream: stream, content_type: "application/octet-stream", ) video_upload_resource_name = response.resource_name puts "Created YouTube video upload: #{video_upload_resource_name}" end
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 "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 दो चरणों वाले फिर से अपलोड किए जा सकने वाले प्रोटोकॉल का इस्तेमाल करता है:
- अपलोड सेशन शुरू करना:
CreateYouTubeVideoUploadअपलोड एंडपॉइंट (/upload/v26/customers/{customer_id}/youTubeVideoUploads:create) पर शुरुआतीPOSTअनुरोध भेजें. इसके साथ,x-goog-upload-command: startभेजें. फ़ाइल का साइज़ बताने के लिए,x-goog-upload-header-content-lengthभी भेजा जा सकता है. जवाब में, अपलोड सेशन का यूआरएलx-goog-upload-urlएचटीटीपी रिस्पॉन्स हेडर में दिखता है. साथ ही, इसमें मेटाडेटा भी होता है. जैसे, अनुमानित चंक साइज़. - वीडियो बाइट स्ट्रीम करें और उन्हें फ़ाइनल करें: बाइनरी वीडियो पेलोड को
x-goog-upload-urlएंडपॉइंट परx-goog-upload-command: upload, finalizeके साथ भेजें. अपलोड पूरा होने पर, रिस्पॉन्स में बनाया गयाresource_name(customers/{customer_id}/youTubeVideoUploads/{video_upload_id}) दिखता है.
वीडियो अपलोड करने के प्रोटोकॉल में इस्तेमाल किए गए एचटीटीपी हेडर के बारे में पूरी जानकारी के लिए, कोड का यह उदाहरण देखें:
# 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. वीडियो अपलोड होने की स्थिति का पता लगाना
वीडियो अपलोड करने के बाद, GAQL का इस्तेमाल करके you_tube_video_upload संसाधन के चुने जा सकने वाले फ़ील्ड (resource_name, video_upload_id, channel_id, video_id, state, और video_privacy) को क्वेरी करें. इससे वीडियो की प्रोसेसिंग की स्थिति का पता चलेगा. ऐसा तब तक करें, जब तक state = 'PROCESSED' (GAQL में INPUT_ONLY फ़ील्ड नहीं चुने जा सकते):
Java
// Retrieve the metadata of the newly uploaded video. String query = String.format( "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 = '%s'", videoUploadResourceName); try (GoogleAdsServiceClient googleAdsServiceClient = googleAdsClient.getLatestVersion().createGoogleAdsServiceClient()) { SearchGoogleAdsStreamRequest request = SearchGoogleAdsStreamRequest.newBuilder() .setCustomerId(Long.toString(customerId)) .setQuery(query) .build(); ServerStream<SearchGoogleAdsStreamResponse> stream = googleAdsServiceClient.searchStreamCallable().call(request); for (SearchGoogleAdsStreamResponse response : stream) { for (GoogleAdsRow googleAdsRow : response.getResultsList()) { YouTubeVideoUpload video = googleAdsRow.getYouTubeVideoUpload(); System.out.printf( "Video with ID %s was found in state %s.%n", video.getVideoId(), video.getState()); } } }
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.V26.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
// Retrieve the metadata of the newly uploaded video. $query = sprintf( "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 = '%s'", $videoUploadResourceName ); $googleAdsServiceClient = $googleAdsClient->getGoogleAdsServiceClient(); $stream = $googleAdsServiceClient->searchStream( SearchGoogleAdsStreamRequest::build($customerId, $query) ); foreach ($stream->iterateAllElements() as $googleAdsRow) { /** @var GoogleAdsRow $googleAdsRow */ printf( "Video with ID '%s' was found in state '%s'.%s", $googleAdsRow->getYouTubeVideoUpload()->getVideoId(), YouTubeVideoUploadState::name($googleAdsRow->getYouTubeVideoUpload()->getState()), PHP_EOL ); }
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
# Retrieve the metadata of the newly uploaded video. query = <<~EOQ 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}' EOQ responses = client.service.google_ads.search_stream( customer_id: customer_id, query: query, ) responses.each do |batch| batch.results.each do |row| puts "Video with ID #{row.you_tube_video_upload.video_id} was found in " \ "state #{row.you_tube_video_upload.state}." end end
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 स्थिति में पहुंच जाता है, तब आपको YouTubeVideoUpload संसाधन के video_id फ़ील्ड में, YouTube वीडियो का 11 वर्णों वाला आईडी मिल सकता है.
YoutubeVideoAsset बनाने के लिए, इस video_id का इस्तेमाल करें. साथ ही, MutateAssets जोड़ें और नतीजे में मिले ऐसेट रिसॉर्स के नाम (customers/{customer_id}/assets/{asset_id}) को अपने कैंपेन या विज्ञापनों से लिंक करें:
AssetService.MutateAssetsमेंyoutube_video_idको पास करके,YoutubeVideoAssetबनाएं:POST https://googleads.googleapis.com/v26/customers/{customer_id}/assets:mutate { "operations": [ { "create": { "name": "Product Launch Video", "youtubeVideoAsset": { "youtubeVideoId": "dQw4w9WgXcQ" } } } ] }AssetकोAssetGroupयाAdGroupAdसे लिंक करें:परफ़ॉर्मेंस मैक्स कैंपेन:
AssetGroupAssetService.MutateAssetGroupAssetsका इस्तेमाल करकेAssetGroupAssetबनाएं. इसमेंfield_typeकोYOUTUBE_VIDEOपर सेट किया गया हो:POST https://googleads.googleapis.com/v26/customers/{customer_id}/assetGroupAssets:mutate { "operations": [ { "create": { "assetGroup": "customers/{customer_id}/assetGroups/{asset_group_id}", "asset": "customers/{customer_id}/assets/{asset_id}", "fieldType": "YOUTUBE_VIDEO" } } ] }मांग बढ़ाने में मदद करने वाला कैंपेन:
AdGroupAdService.MutateAdGroupAdsको कॉल करते समय,DemandGenVideoResponsiveAdInfoऑब्जेक्ट कीvideosसूची मेंcustomers/{customer_id}/assets/{asset_id}को रेफ़र करें:POST https://googleads.googleapis.com/v26/customers/{customer_id}/adGroupAds:mutate { "operations": [ { "create": { "adGroup": "customers/{customer_id}/adGroups/{ad_group_id}", "status": "PAUSED", "ad": { "name": "Demand Gen Video Ad", "finalUrls": ["https://www.example.com"], "demandGenVideoResponsiveAd": { "videos": [ { "asset": "customers/{customer_id}/assets/{asset_id}" } ], "logoImages": [ { "asset": "customers/{customer_id}/assets/{logo_asset_id}" } ], "headlines": [ { "text": "Example Headline" } ], "longHeadlines": [ { "text": "Example Long Headline" } ], "descriptions": [ { "text": "Example Description" } ], "businessName": { "text": "Example Business" } } } } } ] }
GoogleAdsService.SearchStreamका इस्तेमाल करके, मौजूदाYOUTUBE_VIDEOऐसेट के बारे में क्वेरी करना:SELECT asset.id, asset.resource_name, asset.name, asset.type, asset.youtube_video_asset.youtube_video_id, asset.youtube_video_asset.youtube_video_title FROM asset WHERE asset.type = 'YOUTUBE_VIDEO' AND asset.youtube_video_asset.youtube_video_id = '{video_id}'
मेटाडेटा अपडेट करें
इस एपीआई के ज़रिए अपलोड किए गए वीडियो की निजता सेटिंग को अपडेट किया जा सकता है. इसके लिए, UpdateYouTubeVideoUpload तरीके का इस्तेमाल करें. इसमें update_mask को "video_privacy" पर सेट करें. विज्ञापन बनाने के बाद, सिर्फ़ video_privacy फ़ील्ड (विज्ञापन देने वाले व्यक्ति या कंपनी के मालिकाना हक वाले ब्रैंड चैनल पर अपलोड किए गए वीडियो के लिए, PUBLIC या UNLISTED) को अपडेट किया जा सकता है. video_title, video_description, channel_id, और video_content_metadata में बदलाव नहीं किया जा सकता.
अपलोड किए गए वीडियो हटाना
अगर आपको Google Ads API की मदद से अपलोड किए गए वीडियो मिटाने हैं, तो RemoveYouTubeVideoUpload तरीके के resource_names फ़ील्ड में उनके customers/{customer_id}/youTubeVideoUploads/{video_upload_id} संसाधन के नाम डालें. इससे वीडियो, Google Ads की ऐसेट लाइब्रेरी और YouTube, दोनों से हट जाता है.