Google 広告 API では、一部のメッセージ フィールドを使用して、
入札戦略の選択を示しますCampaign。
たとえば、次のようなものがあります。
- 完全に空のメッセージ: たとえば、
campaign.manual_cpmには サブフィールドが定義されていません。 - オプション フィールドを含むメッセージ: たとえば、
campaign.manual_cpcには省略可のサブフィールドenhanced_cpc_enabledがあります。
Campaign の入札戦略フィールドは、
bidding_strategy oneof グループに属します。manual_cpm や manual_cpc などの新しい入札戦略を設定すると、その oneof グループで以前に構成された入札戦略は暗黙的にクリアされます。
campaign.name などのプリミティブ フィールドを更新するには、直接設定します。
campaign.name = "Test campaign value"
拡張クリック単価を有効にする際に、設定可能なサブフィールドを持つネストされたメッセージ(campaign.manual_cpc など)を更新するには、次のように設定します。
campaign.manual_cpc.enhanced_cpc_enabled = True
完全に空のメッセージを設定する
manual_cpm などの空の
メッセージである入札戦略を使用するには:
- メッセージ タイプ(
ManualCpm)の空のインスタンスを取得します。 client.copy_fromを使用して、この空のインスタンスをキャンペーンのフィールドに割り当てます。-
CampaignOperationのupdate_maskにフィールド名(manual_cpm)を手動で追加します。 フィールド マスク ヘルパーは、 空のメッセージが明示的に設定されていることを自動的に検出できません。
from google.ads.googleads import util
from google.ads.googleads.client import GoogleAdsClient
from google.api_core.protobuf_helpers import field_mask
client = GoogleAdsClient.load_from_storage()
# Assume 'campaign' is an existing Campaign object you are updating.
# 1. Get an empty ManualCpm type.
empty_cpm = client.get_type("ManualCpm")
# 2. Copy it to the campaign's manual_cpm field.
client.copy_from(campaign.manual_cpm, empty_cpm)
# 3. Create the operation and manually add "manual_cpm" to the update_mask.
campaign_operation = client.get_type("CampaignOperation")
client.copy_from(campaign_operation.update, campaign)
client.copy_from(
campaign_operation.update_mask,
field_mask(None, util.convert_proto_plus_to_protobuf(campaign)),
)
campaign_operation.update_mask.paths.append("manual_cpm")
# The resulting proto sent to the API will include:
# manual_cpm {
# }
省略可のサブフィールドを含むメッセージを設定する
enhanced_cpc_enabled を有効にせずに manual_cpc を入札戦略として使用するには、
ManualCpm と同様の方法を試すことができます。ただし、ManualCpc には
サブフィールドがあるため、manual_cpc を update_mask に追加すると、
FieldMaskError.FIELD_HAS_SUBFIELDS エラーが発生します。マスク内のメッセージにサブフィールドがある場合、API にはより具体的な指定が必要です。
enhanced_cpc_enabled を設定しないまま campaign.manual_cpc を正しく設定するには:
- 空の
ManualCpcオブジェクトをインスタンス化し、campaign.manual_cpcを使用してclient.copy_fromにコピーします。 -
update_maskのCampaignOperationに、ManualCpcの変更可能な各サブフィールドへのパスを手動で追加します。この場合、関連するサブフィールドはenhanced_cpc_enabledです。
from google.ads.googleads import util
from google.ads.googleads.client import GoogleAdsClient
from google.api_core.protobuf_helpers import field_mask
client = GoogleAdsClient.load_from_storage()
# Assume 'campaign' is an existing Campaign object you are updating.
# 1. Copy an empty ManualCpc object into campaign.manual_cpc.
client.copy_from(campaign.manual_cpc, client.get_type("ManualCpc"))
# 2. Manually add the subfield path to the update_mask.
campaign_operation = client.get_type("CampaignOperation")
client.copy_from(campaign_operation.update, campaign)
client.copy_from(
campaign_operation.update_mask,
field_mask(None, util.convert_proto_plus_to_protobuf(campaign)),
)
# For ManualCpc, because it has subfields, you must specify the subfield
# path in the update_mask. This tells the API you are updating something
# within manual_cpc. By not setting enhanced_cpc_enabled on the campaign
# object, it defaults to false.
campaign_operation.update_mask.paths.append("manual_cpc.enhanced_cpc_enabled")
# The update_mask paths will include: ['manual_cpc.enhanced_cpc_enabled']
# This correctly signals to the API that ManualCpc is the chosen strategy,
# with enhanced_cpc_enabled in its default state.
これらのパターンを使用してリクエストを送信する場合は、 ロギングを有効にしてリクエストを検査することで、ペイロードを確認できます。