在 Google Ads API 中,某些訊息欄位定義為空白的訊息物件 (例如 campaign.manual_cpm
),或者可能只有不需要設定的選填欄位,例如 campaign.manual_cpc
。設定這些欄位相當重要,才能讓 API 瞭解特定廣告活動要使用哪種出價策略,但訊息為空白時,直覺上並不容易理解。
更新 campaign.name
欄位 (為字串) 時,我們會直接更新這個欄位,就和使用一般 Python 物件屬性時一樣:
campaign.name = "Test campaign value"
campaign.manual_cpc
是巢狀欄位,也就是說,其中包含其他 protobuf 訊息,而非字串等原始類型。您也可以直接更新欄位:
campaign.manual_cpc.enhanced_cpc_enabled = True
這樣就能讓 API 知道已啟用「成本效益管理系統」的出價策略為 manual_cpc
。
不過,如要使用 manual_cpm
,那裡面是空白的?或者卻沒有啟用「成本效益管理系統」?manual_cpc
方法很簡單,只要將類別中的空白例項複製到廣告活動中,例如:
client = GoogleAdsClient.load_from_storage()
empty_cpm = client.get_type('ManualCpm')
client.copy_from(campaign.manual_cpm, empty_cpm)
請注意,如何為 campaign
物件指定 manual_cpm
:
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")