In der Google Ads API sind einige Nachrichtenfelder als leere Nachrichtenobjekte definiert.
wie campaign.manual_cpm
,
oder nur optionale Felder enthalten, die nicht festgelegt werden müssen, z. B.
campaign.manual_cpc
Festlegen
ist wichtig, um der API mitzuteilen, welche Gebotsstrategie
Kampagne. Es ist jedoch nicht intuitiv, wenn die Nachrichten leer sind.
Beim Aktualisieren des Felds campaign.name
, bei dem es sich um einen String handelt, wird das Feld
indem Sie es direkt aktualisieren, als wäre es ein normales Python-Objektattribut:
campaign.name = "Test campaign value"
campaign.manual_cpc
ist ein verschachteltes Feld, das heißt, es enthält
eine andere protobuf-Nachricht
und keinen primitiven Typ wie einen String. Ich
kann auch seine Felder direkt aktualisieren:
campaign.manual_cpc.enhanced_cpc_enabled = True
Dadurch wird der API mitgeteilt, dass für diese Kampagne die Gebotsstrategie „manual_cpc
“ festgelegt ist
bei aktiviertem auto-optimiertem CPC.
Aber was ist, wenn Sie das Feld manual_cpm
verwenden möchten, das leer ist? oder manual_cpc
ohne den auto-optimierten CPC zu aktivieren? Dazu müssen Sie eine separate
leere Instanz der Klasse in die Kampagne ein. Beispiel:
client = GoogleAdsClient.load_from_storage()
empty_cpm = client.get_type('ManualCpm')
client.copy_from(campaign.manual_cpm, empty_cpm)
Beachten Sie, wie manual_cpm
für das campaign
-Objekt angegeben wird:
name {
value: "Test campaign value"
}
manual_cpm {
}
Das Feld manual_cpm
ist festgelegt, aber keines der Felder enthält Werte. Beim Senden
-Anfrage an die API senden, die dieses Muster verwenden, können Sie überprüfen, ob Sie den Parameter
leeres Nachrichtenobjekt korrekt, indem Sie logging aktivieren und die
Nutzlast der Anfrage.
Schließlich müssen Sie dieses Feld manuell zum
update_mask
Das Hilfsprogramm für die Feldmaske hat keinen Mechanismus zur Bestimmung der
einem Feld, das explizit auf ein leeres Objekt festgelegt wurde, und einem
das nicht festgelegt wurde.
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")