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 की ओर से मैनेज किए जाने वाले चैनलों के लिए, यह डिफ़ॉल्ट और एकमात्र विकल्प है.
टाइटल और ब्यौरे से जुड़ी ज़रूरी शर्तें
वीडियो अपलोड करते समय, YouTubeVideoUpload संसाधन में video_title और video_description फ़ील्ड का इस्तेमाल करके, मेटाडेटा तय किया जा सकता है:
video_title: ज़रूरी है. टाइटल में 100 से ज़्यादा वर्ण नहीं होने चाहिए. साथ ही, इसमें कोई भी अमान्य वर्ण नहीं होना चाहिए, जैसे कि ऐंगल ब्रैकेट<या>. इसे सिर्फ़ वीडियो अपलोड करते समय सेट किया जा सकता है. इसके बाद, इसमें बदलाव नहीं किया जा सकता.video_description: ज़रूरी नहीं. ब्यौरे में 5,000 से ज़्यादा वर्ण नहीं होने चाहिए. साथ ही, इसमें अमान्य वर्ण (ऐंगल ब्रैकेट<या>) नहीं होने चाहिए. इसे सिर्फ़ वीडियो अपलोड करते समय सेट किया जा सकता है. इसके बाद, इसमें बदलाव नहीं किया जा सकता.
दोनों फ़ील्ड बनाने के बाद, उनमें बदलाव नहीं किया जा सकता. UpdateYouTubeVideoUpload अनुरोध के अपडेट मास्क में video_title या video_description को शामिल करने पर, FieldError.IMMUTABLE_FIELD गड़बड़ी होती है.
YouTube पर वीडियो के टाइटल और ब्यौरे को फ़ॉर्मैट करने और अमान्य वर्णों के बारे में ज़्यादा जानने के लिए, YouTube सहायता केंद्र पर जाएं.
जनरेटिव कॉन्टेंट के बारे में जानकारी देना
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) |
वर्शन 26 से उपलब्ध: 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-command: upload, finalizeके साथx-goog-upload-urlएंडपॉइंट पर भेजें. अपलोड पूरा होने पर, रिस्पॉन्स में बनाया गया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' न हो जाए (INPUT_ONLY फ़ील्ड को GAQL में नहीं चुना जा सकता):
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 वर्णों वाला आईडी मिल सकता है.
इस video_id का इस्तेमाल करके, MutateAssets के साथ YoutubeVideoAsset बनाएं. इसके बाद, इससे बनने वाले ऐसेट के रिसॉर्स नेम (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 में बदलाव नहीं किया जा सकता. अपडेट मास्क में video_title या video_description को शामिल करने पर, FieldError.IMMUTABLE_FIELD गड़बड़ी होती है.
अपलोड किए गए वीडियो हटाना
अगर आपको Google Ads API की मदद से अपलोड किए गए वीडियो मिटाने हैं, तो RemoveYouTubeVideoUpload तरीके के resource_names फ़ील्ड में उनके customers/{customer_id}/youTubeVideoUploads/{video_upload_id} संसाधन के नाम डालें. इससे वीडियो को Google Ads की ऐसेट लाइब्रेरी और YouTube, दोनों से हटा दिया जाएगा.