W interfejsie Google Ads API niektóre pola wiadomości są zdefiniowane jako puste obiekty wiadomości, takie jak campaign.manual_cpm
, lub mogą zawierać tylko opcjonalne pola, których nie trzeba ustawiać, na przykład campaign.manual_cpc
. Ustawienie tych pól jest ważne, aby poinformować API, która strategia ustalania stawek ma zostać użyta w danej kampanii, ale nie jest intuicyjna, gdy wiadomości są puste.
Podczas aktualizowania pola campaign.name
, które jest ciągiem znaków, ustawiamy je, tak jakby to był normalny atrybut obiektu Pythona:
campaign.name = "Test campaign value"
campaign.manual_cpc
to pole zagnieżdżone, co oznacza, że zawiera inny komunikat protobuf, a nie typ podstawowy, taki jak ciąg znaków. Pola możesz też aktualizować bezpośrednio:
campaign.manual_cpc.enhanced_cpc_enabled = True
Informuje to interfejs API, że kampania ma strategię ustalania stawek manual_cpc
z włączonym Ulepszonym CPC.
A co jeśli chcesz użyć właściwości manual_cpm
, która jest pusta? A może
manual_cpc
bez włączania ulepszonego CPC? Aby to zrobić, musisz skopiować do kampanii osobne puste wystąpienie klasy, na przykład:
client = GoogleAdsClient.load_from_storage()
empty_cpm = client.get_type('ManualCpm')
client.copy_from(campaign.manual_cpm, empty_cpm)
Zwróć uwagę, jak określono manual_cpm
dla obiektu campaign
:
name {
value: "Test campaign value"
}
manual_cpm {
}
Pole manual_cpm
jest ustawione, ale żadne z jego pól nie ma wartości. Wysyłając żądanie do interfejsu API wykorzystującego ten wzorzec, możesz sprawdzić, czy prawidłowo ustawiasz pusty obiekt wiadomości, włączając rejestrowanie i sprawdzając ładunek żądania.
Na koniec musisz ręcznie dodać to pole do update_mask
obiektu żądania. Asystent maski pola nie ma mechanizmu umożliwiającego ustalenie różnicy między polem, które zostało ustawione jako puste, a polem, które nie zostało ustawione.
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")