در Google Ads API برخی از فیلدهای پیام به عنوان اشیاء پیام خالی تعریف می شوند، مانند campaign.manual_cpm
، یا ممکن است فقط دارای فیلدهای اختیاری باشند که نیازی به تنظیم ندارند، به عنوان مثال campaign.manual_cpc
. تنظیم این فیلدها برای اینکه به API بگویید از کدام استراتژی پیشنهاد قیمت برای کمپین معین استفاده کند، مهم است، اما زمانی که پیامها خالی هستند، شهودی نیست.
هنگام به روز رسانی فیلد campaign.name
که یک رشته است، فیلد را با به روز رسانی مستقیم آن طوری تنظیم می کنیم که گویی یک ویژگی شی معمولی پایتون است:
campaign.name = "Test campaign value"
campaign.manual_cpc
یک فیلد تودرتو است، به این معنی که حاوی پیام پروتوباف دیگری است و نه یک نوع اولیه، مانند یک رشته. همچنین می توانید فیلدهای آن را مستقیماً به روز کنید:
campaign.manual_cpc.enhanced_cpc_enabled = True
این به API میگوید که این کمپین دارای یک استراتژی پیشنهاد قیمت manual_cpc
با فعال کردن CPC بهبودیافته است.
اما اگر بخواهید از manual_cpm
استفاده کنید که خالی است چه؟ یا manual_cpc
بدون فعال کردن cpc پیشرفته؟ برای انجام این کار باید یک نمونه خالی جداگانه از کلاس را در کمپین کپی کنید، به عنوان مثال:
client = GoogleAdsClient.load_from_storage()
empty_cpm = client.get_type('ManualCpm')
client.copy_from(campaign.manual_cpm, empty_cpm)
توجه داشته باشید که manual_cpm
چگونه برای شی campaign
مشخص شده است:
name {
value: "Test campaign value"
}
manual_cpm {
}
فیلد manual_cpm
تنظیم شده است، اما هیچ کدام از فیلدهای آن مقداری ندارند. هنگام ارسال درخواست به APIهایی که از این الگو استفاده میکنند، میتوانید تأیید کنید که شیء پیام خالی را به درستی تنظیم کردهاید، با فعال کردن ورود به سیستم و بررسی بار درخواست.
در نهایت، باید این فیلد را به صورت دستی به update_mask
شی درخواست اضافه کنید. کمک کننده فیلد ماسک مکانیزمی برای تعیین تفاوت بین فیلدی که به صراحت روی یک شی خالی تنظیم شده است و فیلدی که تنظیم نشده است ندارد.
from google.api_core.protobuf_helpers import field_mask
campaign_operation.create = campaign
campaign_operation.update_mask = field_mask(None, campaign)
# Here we manually add the "manual_cpm" field
campaign_operation.update_mask.append("manual_cpm")