W interfejsie Google Ads API niektóre pola wiadomości są zdefiniowane jako puste obiekty wiadomości, np. campaign.manual_cpm
, lub mogą zawierać tylko pola opcjonalne, których nie trzeba ustawiać, np. campaign.manual_cpc
.
Ustawienie tych pól jest ważne, aby poinformować interfejs API, której strategii ustalania stawek ma używać w przypadku danej kampanii, ale gdy komunikaty są puste, nie jest to intuicyjne.
Podczas aktualizowania pola campaign.name
, które jest ciągiem znaków, ustawiamy pole, aktualizując je bezpośrednio, tak jakby było zwykłym atrybutem 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 prosty, taki jak ciąg znaków. Możesz też bezpośrednio zaktualizować jego pola:
campaign.manual_cpc.enhanced_cpc_enabled = True
Poinformuje to interfejs API, że ta kampania ma strategię ustalania stawek manual_cpc
z włączonym ulepszonym CPC.
A co, jeśli chcesz użyć pustego znaku manual_cpm
? lub manual_cpc
bez włączania ulepszonego CPC? Aby to zrobić, musisz skopiować do kampanii osobną pustą instancję klasy, np.:
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. Gdy wysyłasz do interfejsu API żądanie, które korzysta z tego wzorca, możesz sprawdzić, czy prawidłowo ustawiasz pusty obiekt wiadomości, włączając logowanie i sprawdzając ładunek żądania.
Na koniec musisz ręcznie dodać to pole do obiektu żądaniaupdate_mask
. Narzędzie do tworzenia maski pola nie ma mechanizmu, który pozwala określić różnicę między polem, które zostało jawnie ustawione na pusty obiekt, 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")