In der Google Ads API werden Aktualisierungen mithilfe einer Feldmaske vorgenommen. Die Feldmaske listet alle Felder, die Sie mit der Aktualisierung ändern möchten, sowie alle angegebenen Felder die nicht in der Feldmaske enthalten sind, werden ignoriert, auch wenn sie an den Server gesendet werden.
FieldMaskUtil
Die empfohlene Methode zum Generieren von Feldmasken ist die Verwendung unserer integrierten Feldmaske das viele spezifische Details verbirgt und es Ihnen ermöglicht, Felder automatisch maskiert. Dabei werden die Änderungen überwacht, die Sie an den Feldern der Entität vornehmen.
So generieren Sie eine Feldmaske zum Aktualisieren einer Kampagne:
campaign = client.resource.campaign
campaign.resource_name = client.path.campaign(customer_id, campaign_id)
mask = client.field_mask.with campaign do
campaign.status = :PAUSED
campaign.network_settings = client.resource.network_settings do |ns|
ns.target_search_network = false
end
end
Der Code erstellt zuerst ein leeres Kampagnenobjekt und legt dann den Ressourcennamen fest, um die API über die aktualisierte Kampagne zu informieren.
In diesem Beispiel wird zu Beginn die Methode client.field_mask.with
für die Kampagne verwendet.
der die Updates umfasst. Am Ende dieses Blocks zeigt das Dienstprogramm
den aktuellen Status der Kampagne nach der Blockierung mit dem ersten
der Kampagne vor der Blockierung. Daraufhin wird automatisch ein Feld
Maske mit der Auflistung der geänderten Felder. Sie können diese Feldmaske
wenn sie für den mutate-Aufruf wie folgt erstellt werden:
operation = client.operation.campaign
operation.update = campaign
operation.update_mask = mask
Diese Methode wird empfohlen, wenn Sie eine komplizierte Operation Sie möchten jeden Schritt genau kontrollieren. In den meisten Fällen können Sie jedoch einfacheres Dienstprogramm der Ruby-Bibliothek:
operation = client.operation.update_resource.campaign do |c|
c.status = :PAUSED
c.network_settings = client.resource.network_settings do |ns|
ns.target_search_network = false
end
end
Mit dieser Methode wird automatisch eine neue leere Kampagnenressource erstellt.
die Feldmaske basierend auf den Änderungen, die Sie im Block vornehmen, erstellt das Update
und gibt den endgültigen Vorgang mit update
und update_mask
zurück.
bereits ausgefüllt sind. Sie können eine Kampagne auch an die Methode campaign
übergeben,
Startstatus der Kampagne angeben. Dieses Muster funktioniert für alle
die den Aktualisierungsvorgang unterstützen.
Maske manuell erstellen
Um eine neue Feldmaske ohne Verwendung von Bibliotheksdienstprogrammen zu erstellen,
würde zuerst ein Google::Protobuf::FieldMask
und dann ein Array erstellen
mit den Namen aller Felder gefüllt, die Sie ändern möchten.
Weisen Sie das Array dem Feld path
der Feldmaske zu.
mask = Google::Protobuf::FieldMask.new
mask.path = ["status", "name"]
Nachrichtenfelder und ihre untergeordneten Felder aktualisieren
MESSAGE
-Felder können Unterfelder enthalten (z. B.
MaximizeConversions
mit drei:
target_cpa_micros
, cpc_bid_ceiling_micros
und cpc_bid_floor_micros
) oder
und dürfen keines haben (z. B. ManualCpm
).
Nachrichtenfelder ohne definierte untergeordnete Felder
Wenn Sie ein MESSAGE
-Feld aktualisieren, das nicht mit einem Unterfeld definiert ist, verwenden Sie die Methode
FieldMaskUtil zum Generieren einer Feldmaske, wie zuvor dargestellt.
Nachrichtenfelder mit definierten untergeordneten Feldern
Beim Aktualisieren eines MESSAGE
-Felds, das mit Unterfeldern ohne
explizit eines der Unterfelder der Nachricht festlegen, müssen Sie
jedes der änderbaren MESSAGE
-Unterfelder den FieldMask
entspricht, ähnlich dem
Beispiel für ein vorheriges Beispiel, in dem eine komplett neue Feldmaske erstellt wurde.
Ein häufiges Beispiel ist die Aktualisierung der Gebotsstrategie einer Kampagne, ohne
eines der Felder in der neuen Gebotsstrategie. Im folgenden Beispiel
zeigt, wie Sie eine Kampagne aktualisieren, um
Gebotsstrategie MaximizeConversions
ohne Unterfelder der Gebotsstrategie festzulegen.
In diesem Beispiel ist die Verwendung des integrierten Vergleichs von FieldMaskUtil das beabsichtigte Ziel zu erreichen.
Der folgende Code generiert eine Feldmaske, die maximize_conversions
enthält.
Die Google Ads API lässt dies jedoch nicht zu, um zu verhindern,
Felder versehentlich gelöscht, und es wird eine
FieldMaskError.FIELD_HAS_SUBFIELDS
Fehler.
# Creates a campaign with the proper resource name.
campaign = client.resource.campaign do |c|
c.resource_name = client.path.campaign(customer_id, campaign_id)
end
# Update the maximize conversions field within the update block, so it's
# captured in the field mask
operation = client.operation.update_resource.campaign(campaign) do |c|
c.maximize_conversions = client.resource.maximize_conversions
end
# Sends the operation in a mutate request that will result in a
# FieldMaskError.FIELD_HAS_SUBFIELDS error because empty MESSAGE fields cannot
# be included in a field mask.
response = client.service.campaign.mutate_campaigns(
customer_id: customer_id,
operations: [operation],
)
Der folgende Code zeigt, wie eine Kampagne ordnungsgemäß für die Verwendung des
MaximizeConversions
-Gebotsstrategie, ohne eines ihrer untergeordneten Felder festzulegen.
# Create the operation directly from the campaign's resource name. Don't do
# anything in the block so that the field mask is empty. You could modify other
# fields in this block, just not the message field that is intended to have a
# blank subfield. We'll add that below.
campaign_resource_name = client.path.campaign(customer_id, campaign_id)
operation = client.operation.update_resource.campaign(campaign_resource_name) {}
# Manually add the maximize conversions subfield to the field mask so the API
# knows to clear it.
operation.update_mask.paths << "maximize_conversions.target_cpa_micros"
# This operation succeeds.
response = client.service.campaign.mutate_campaigns(
customer_id: customer_id,
operations: [operation],
)
Felder löschen
Einige Felder können explizit gelöscht werden. Ähnlich wie im vorherigen Beispiel müssen Sie
werden der Feldmaske explizit hinzugefügt. Angenommen, Sie haben eine
Kampagne mit der Gebotsstrategie „MaximizeConversions
“ verwendet,
Das Feld target_cpa_micros
enthält einen Wert, der größer als 0
ist.
Der folgende Code wird ausgeführt: Der maximize_conversions.target_cpa_micros
werden der Feldmaske nicht hinzugefügt und es werden keine Änderungen
Feld target_cpa_micros
:
# Create a campaign object representing the campaign you want to change.
campaign = client.resource.campaign do |c|
c.resource_name = client.path.campaign(customer_id, campaign_id)
end
# The field mask in this operation will include 'maximize_conversions',
# but not 'maximize_conversions.target_cpa_micros', so it will result in an
# error.
operation = client.operation.update_resource.campaign(campaign) do |c|
c.maximize_conversions = client.resource.maximize_conversions do |mc|
mc.target_cpa_micros = 0
end
end
# Operation will fail since field mask is incorrect.
response = client.service.campaign.mutate_campaigns(
customer_id: customer_id,
operations: [operation],
end
Im folgenden Code wird gezeigt, wie das Feld target_cpa_micros
in der Gebotsstrategie MaximizeConversions
richtig gelöscht wird.
# Create a campaign including the maximize conversions fields right away, since
# we're going to manually add them to the field mask.
campaign = client.resource.campaign do |c|
c.resource_name = client.path.campaign(customer_id, campaign_id)
c.maximize_conversions = client.resource.maximize_conversions do |mc|
mc.target_cpa_micros = 0
end
end
# Create the operation with an empty field mask. You may add a block here with
# other changes that will automatically get added to the field mask.
operation = client.operation.update_resource.campaign(campaign) {}
# Add the field to the field mask so the API knows to clear it.
operation.update_mask.paths << 'maximize_conversions.target_cpa_micros'
# Operation will succeed since we specified the correct field mask.
response = client.service.campaign.mutate_campaigns(
customer_id: customer_id,
operations: [operation],
end
Beachten Sie, dass das Feld wie vorgesehen funktioniert, wenn der Code
als optional
in der Google Ads API protocol buffers
. Aber da die
target_cpa_micros
ist
kein optional
-Feld vorhanden ist, damit die Gebotsstrategie nicht aktualisiert wird
um das Feld target_cpa
zu löschen.