Dans l'API Google Ads, certains champs de message sont définis comme des objets de message vides,
comme campaign.manual_cpm
,
ou bien seulement des champs facultatifs qui n'ont pas besoin d'être définis, par exemple
campaign.manual_cpc
Définir ces
est important pour indiquer à l'API la stratégie d'enchères à utiliser pour
Campagne, mais cela n'est pas intuitif lorsque les messages sont vides.
Lors de la mise à jour du champ campaign.name
, qui est une chaîne, nous définissons le champ
en le mettant à jour directement comme s'il s'agissait d'un attribut d'objet Python normal:
campaign.name = "Test campaign value"
campaign.manual_cpc
est un champ imbriqué, ce qui signifie qu'il contient
un autre message protobuf et non un type primitif, comme une chaîne. Toi
peut également mettre à jour ses champs directement:
campaign.manual_cpc.enhanced_cpc_enabled = True
Cela indiquera à l'API que cette campagne a une stratégie d'enchères de manual_cpc
avec le CPC optimisé activé.
Mais que se passe-t-il si vous voulez utiliser manual_cpm
, qui est vide ? Ou manual_cpc
sans activer le CPC optimisé ? Pour ce faire, vous devez copier un fichier
une instance vide de la classe dans la campagne, par exemple:
client = GoogleAdsClient.load_from_storage()
empty_cpm = client.get_type('ManualCpm')
client.copy_from(campaign.manual_cpm, empty_cpm)
Notez comment manual_cpm
est spécifié pour l'objet campaign
:
name {
value: "Test campaign value"
}
manual_cpm {
}
Le champ "manual_cpm
" est défini, mais aucun de ses champs ne contient de valeur. Lors de l'envoi
à l'API qui utilise ce format, vérifiez que vous définissez bien
l'objet de message vide en activant la fonction logging et en inspectant
la charge utile de la requête.
Enfin, vous devez ajouter manuellement ce champ au fichier
update_mask
L'assistant de masque de champ ne dispose d'aucun mécanisme permettant de déterminer
entre un champ défini explicitement sur un objet vide et un objet
qui n'a pas été défini.
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")