تتيح لك YouTubeVideoUploadService
تحميل الفيديوهات مباشرةً إلى YouTube من خلال Google Ads API. ويمكن بعد ذلك استخدام هذه الفيديوهات لإنشاء مواد عرض فيديو في أنواع إعلانات مختلفة، مثل حملات الأداء الأفضل أو حملات زيادة الطلب.
تعمل هذه الخدمة على تبسيط سير عمل إنشاء إعلانات الفيديو من خلال معالجة عملية التحميل على YouTube، ما يضمن ربط الفيديوهات بشكل صحيح بحسابك.
المفاهيم الرئيسية
قبل البدء، من المهم فهم كيفية إدارة عمليات تحميل الفيديوهات والحالات المختلفة التي يمكن أن تمر بها.
سير العمل الشامل
يتطلّب تحميل ملف فيديو وعرضه في إعلان أربع خطوات متتالية:
| الخطوة | الخدمة والطريقة | ملخّص |
|---|---|---|
| 1. بدء تحميل وحدات بايت الفيديو وتحميلها | CreateYouTubeVideoUpload على YouTubeVideoUploadService |
حمِّل البيانات الوصفية للفيديو والملف الثنائي لإنشاء مرجع YouTubeVideoUpload (customers/{customer_id}/youTubeVideoUploads/{video_upload_id}). |
| 2. حالة معالجة الاستطلاع | SearchStream على GoogleAdsService |
يجب البحث عن you_tube_video_upload حتى state = 'PROCESSED'، وسيتم ملء video_id المكوّن من 11 حرفًا على YouTube. |
| 3. إنشاء مادة عرض فيديو قابلة لإعادة الاستخدام | MutateAssets على AssetService |
أنشئ YoutubeVideoAsset (youtube_video_id = video_id) للحصول على اسم مورد مادة عرض (customers/{customer_id}/assets/{asset_id}). |
| 4. ربط مادة العرض بحملات أو إعلانات | MutateAssetGroupAssets على AssetGroupAssetService أو MutateAdGroupAds على AdGroupAdService |
اربط مادة العرض AssetGroupAsset (field_type = YOUTUBE_VIDEO) بـ "حملة أداء أفضل" أو DemandGenVideoResponsiveAdInfo (videos[].asset) بـ "حملة زيادة طلب". |
ملكية القناة
عند تحميل فيديو، يمكنك تحديد قناة على YouTube الوجهة باستخدام
الحقل channel_id في عنصر YouTubeVideoUpload:
- قناة مملوكة للمعلِن (علامة تجارية): قدِّم
channel_idلقناة حالية على YouTube يملكها المعلِن. لا تتوفّر هذه الميزة إلا في مسار مصادقة المستخدم، ولا يمكن استخدامها مع حسابات الخدمة. - قناة تديرها Google: في حال حذف
channel_id، يتم تحميل الفيديو إلى قناة على YouTube تديرها Google ومرتبطة بحساب "إعلانات Google".
حالات التحميل
يتم تتبُّع مراحل نشاط تحميل فيديو على YouTube من خلال الحقل state.
يحدّد التعداد YouTubeVideoUploadState الحالات التالية:
| ولاية | الوصف |
|---|---|
PENDING |
جارٍ تحميل الفيديو. |
UPLOADED |
تم تحميل الفيديو بنجاح ويعالجه YouTube حاليًا. |
PROCESSED |
تمت معالجة الفيديو بنجاح وأصبح جاهزًا للاستخدام. |
FAILED |
تعذّر تحميل الملف أو معالجته ولا يمكن إكمال العملية. |
REJECTED |
تم رفض الفيديو لأسباب تتعلق بالتحقّق من الصحة أو السياسة. |
UNAVAILABLE |
حالة الفيديو غير متاحة، وقد يكون تمّت إزالته من YouTube. |
إعدادات الخصوصية
يحدّد الحقل video_privacy المستخدمين الذين يمكنهم مشاهدة الفيديو الذي تم تحميله. يتيح التعداد
YouTubeVideoPrivacy
ما يلي:
-
PUBLIC: الفيديو متاح لأي مستخدم على YouTube. (يُسمح بذلك فقط للقنوات التابعة لعلامات تجارية). -
UNLISTED: لا يمكن البحث عن الفيديو، ولكن يمكن لأي مستخدم لديه الرابط مشاهدته. هذا هو الخيار التلقائي والوحيد للقنوات التي تديرها Google.
الإفصاح عن المحتوى من إنشاء الذكاء الاصطناعي التوليدي
اعتبارًا من الإصدار 26، وبموجب لوائح مثل قانون الذكاء الاصطناعي الأوروبي، يمكن للمعلِنين الإفصاح عمّا إذا كان محتوى الفيديو الذي تم تحميله يتضمّن محتوًى من إنشاء الذكاء الاصطناعي أو وسائط اصطناعية.
يحتوي الحقل video_content_metadata في YouTubeVideoUpload على
VideoContentMetadata. اضبط حقل generative_content_disclosure المتداخل باستخدام تعداد YouTubeVideoUploadGenerativeContentDisclosure:
| القيمة | الوصف |
|---|---|
NON_GENERATIVE_CONTENT |
أفصح المعلِن عن أنّ الفيديو ليس من إنشاء الذكاء الاصطناعي. |
GENERATIVE_CONTENT |
أفصح المعلِن عن أنّ الفيديو من إنشاء الذكاء الاصطناعي. |
تحميل فيديو
لتحميل فيديو، يجب استخدام طلب متعدد الأجزاء إلى الطريقة CreateYouTubeVideoUpload. يحتوي الطلب على كل من البيانات الوصفية
للتحميل وملف الفيديو نفسه.
1. بدء التحميل
أنشئ CreateYouTubeVideoUploadRequest باستخدام الحقول التالية:
| الحقل | المتطلبات | الوصف والقيود |
|---|---|---|
customer_id |
مطلوب | رقم تعريف عميل "إعلانات Google" المكوّن من 10 أرقام (بدون واصلات) |
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) |
معرّف قناة على YouTube المقصودة المكوّن من 24 حرفًا (يبدأ بـ 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
، مع تمرير ملف الفيديو، وسيتم التعامل مع عملية تحميل الفيديو
داخليًا.
جافا
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 بروتوكول تحميل قابل للاستئناف من خطوتين:
- بدء جلسة التحميل: أرسِل طلب
POSTأوّلي إلى نقطة نهاية التحميلCreateYouTubeVideoUpload(/upload/v26/customers/{customer_id}/youTubeVideoUploads:create) معx-goog-upload-command: start(ويمكنك اختياريًا استخدامx-goog-upload-header-content-lengthلتحديد حجم الملف). تتضمّن الاستجابة عنوان URL لجلسة التحميل في عنوان الاستجابةx-goog-upload-urlHTTP، بالإضافة إلى بيانات وصفية مثل حجم الجزء المتوقّع. - بث وحدات بايت الفيديو وإكمالها: أرسِل حمولة الفيديو الثنائية إلى نقطة النهاية
x-goog-upload-urlباستخدامx-goog-upload-command: upload, finalize. عند انتهاء التحميل، يعرض الردّresource_name(customers/{customer_id}/youTubeVideoUploads/{video_upload_id}) الذي تم إنشاؤه.
للحصول على وصف كامل لرؤوس 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 (resource_name وvideo_upload_id وchannel_id وvideo_id وstate وvideo_privacy) باستخدام لغة طلب البحث في "إعلانات Google" (GAQL) إلى أن يتم عرض state = 'PROCESSED' (لا يمكن اختيار حقول INPUT_ONLY في لغة طلب البحث في "إعلانات Google" (GAQL)):
جافا
// 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، يمكنك العثور على معرّف الفيديو على YouTube المكوّن من 11 حرفًا في الحقل video_id من المورد YouTubeVideoUpload.
استخدِم هذا video_id لإنشاء YoutubeVideoAsset باستخدام
MutateAssets وربط اسم مورد مادة العرض الناتج
(customers/{customer_id}/assets/{asset_id}) بحملاتك أو إعلاناتك:
أنشِئ
YoutubeVideoAssetمن خلال تمريرyoutube_video_idإلىAssetService.MutateAssets:POST https://googleads.googleapis.com/v26/customers/{customer_id}/assets:mutate { "operations": [ { "create": { "name": "Product Launch Video", "youtubeVideoAsset": { "youtubeVideoId": "dQw4w9WgXcQ" } } } ] }ربط
AssetبـAssetGroupأوAdGroupAd:حملات الأداء الأفضل: أنشئ
AssetGroupAssetباستخدامAssetGroupAssetService.MutateAssetGroupAssetsمع ضبط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" } } ] }حملات زيادة الطلب: يمكنك الإشارة إلى
customers/{customer_id}/assets/{asset_id}في قائمةvideosلعنصرDemandGenVideoResponsiveAdInfoعند طلبAdGroupAdService.MutateAdGroupAds: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" } } } } } ] }
الاستعلام عن مواد عرض
YOUTUBE_VIDEOالحالية باستخدامGoogleAdsService.SearchStream: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، عليك تمرير
customers/{customer_id}/youTubeVideoUploads/{video_upload_id} أسماء الموارد
في حقل resource_names
للطريقة RemoveYouTubeVideoUpload. يؤدي ذلك إلى إزالة الفيديو من "مكتبة مواد العرض" في "إعلانات Google" ومن YouTube.