I am trying to update keyword text value via google ads api python sdk.
Here is my sample code
import argparse
import sys
from google.api_core import protobuf_helpers
from google.ads.google_ads.client import GoogleAdsClient
from google.ads.google_ads.util import ResourceName
def main(client, customer_id, ad_group_id, criterion_id):
agc_service = client.get_service('AdGroupCriterionService', version='v3')
ad_group_criterion_operation = client.get_type(
'AdGroupCriterionOperation',
version='v3')
ad_group_criterion = ad_group_criterion_operation.update
ad_group_criterion.resource_name = agc_service.ad_group_criteria_path(
customer_id, ResourceName.format_composite(ad_group_id,
criterion_id))
// update here
ad_group_criterion.keyword.text.value = 'test-keyword'
fm = protobuf_helpers.field_mask(None, ad_group_criterion)
ad_group_criterion_operation.update_mask.CopyFrom(fm)
try:
agc_response = agc_service.mutate_ad_group_criteria(
customer_id, [ad_group_criterion_operation])
except google.ads.google_ads.errors.GoogleAdsException as ex:
print('Request with ID "%s" failed with status "%s" and includes the
'
'following errors:' % (ex.request_id, ex.error.code().name))
for error in ex.failure.errors:
print('\tError with message "%s".' % error.message)
if error.location:
for field_path_element in error.location.field_path_elements:
print('\t\tOn field: %s' % field_path_element.field_name)
sys.exit(1)
print('Updated keyword %s.' % agc_response.results[0].resource_name)
if __name__ == '__main__':
# GoogleAdsClient will read the google-ads.yaml configuration file in the
# home directory if none is specified.
google_ads_client = GoogleAdsClient.load_from_storage()
parser = argparse.ArgumentParser(
description=('Pauses an ad in the specified customer\'s ad group.'))
# The following argument(s) should be provided to run the example.
parser.add_argument('-c', '--customer_id', type=str,
required=True, help='The Google Ads customer ID.')
parser.add_argument('-a', '--ad_group_id', type=str,
required=True, help='The ad group ID.')
parser.add_argument('-k', '--criterion_id', type=str,
required=True, help='The criterion ID, or keyword
ID.')
args = parser.parse_args()
main(google_ads_client, args.customer_id, args.ad_group_id,
args.criterion_id)
But I got an error like this:
error_code {
request_error: IMMUTABLE_FIELD
}
message: "Field \'keyword.text\' cannot be modified by \'UPDATE\'
operation."
location {
field_path_elements {
field_name: "operations"
index {
}
}
field_path_elements {
field_name: "update"
}
field_path_elements {
field_name: "keyword"
}
field_path_elements {
field_name: "text"
}
}
}
, 'OEhB_4KnhzMQaXAX0pvB2Q')
I found that update expanded text ads will need to use AdService to update
rather than AdGroupAdService.
Is that keyword need to use another service to update text value rather
than AdGroupCriterionService?
--
--
=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~
Also find us on our blog:
https://googleadsdeveloper.blogspot.com/
=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~
You received this message because you are subscribed to the Google
Groups "AdWords API and Google Ads API Forum" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/adwords-api?hl=en
---
You received this message because you are subscribed to the Google Groups
"AdWords API and Google Ads API Forum" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/adwords-api/a160a664-be0a-46b4-9ab5-be262e765b89%40googlegroups.com.