Hello I've got an error while I tried with the following command lines : python remove_negative_kw_list_shared_set.py -c 27*****24 -n "API_Negative_keyword_list_ 27*****24 " -k test3
It returned me an error as below: Request made: ClientCustomerId: 27*****24 , Host: googleads.googleapis.com, Method: /google.ads.googleads.v13.services.GoogleAdsService/Search, RequestId: 1JhvDHTQAhL sF6ehrmg7UQ, IsFault: True, FaultMessage: Error in shared_set.id IN (''): invalid number . Request with ID "1JhvDHTQAhLsF6ehrmg7UQ" failed with status "INVALID_ARGUMENT" and includes the following errors: Error with message "Error in shared_set.id IN (''): invalid number .". Here is my script, what's the problem pls ? import argparse import sys from google.ads.googleads.client import GoogleAdsClient from google.ads.googleads.errors import GoogleAdsException _DEFAULT_PAGE_SIZE = 10000 def main(client, customer_id, shared_set_names, keywords): ga_service = client.get_service("GoogleAdsService") shared_criterion_service = client.get_service("SharedCriterionService") # First, retrieve all shared sets associated with the campaign. shared_sets_query = (f"SELECT\n" f"shared_set.id,\n" f"shared_set.name\n" f"FROM shared_set\n" f"WHERE shared_set.name = '{shared_set_names}'") try: shared_set_search_request = client.get_type("SearchGoogleAdsRequest") shared_set_search_request.customer_id = customer_id shared_set_search_request.query = shared_sets_query shared_set_search_request.page_size = _DEFAULT_PAGE_SIZE shared_set_response = ga_service.search( request=shared_set_search_request ) shared_set_ids = [] for row in shared_set_response: shared_set = row.shared_set shared_set_ids.append(str(shared_set.id)) print( f'Campaign shared set ID "{shared_set.id}" and name ' f'"{shared_set.name}" was found.' ) except GoogleAdsException as ex: handle_googleads_exception(ex) ids = "','".join(shared_set_ids) kws = "','".join(keywords) shared_criteria_query = (f"SELECT\n" f"shared_criterion.type,\n" f"shared_criterion.keyword.text,\n" f"shared_criterion.keyword.match_type,\n" f"shared_set.id\n" f"FROM shared_criterion\n" f"WHERE shared_set.id IN ('{ids}')\n" f"AND shared_criterion.keyword.text IN ('{kws}')\n") try: shared_criteria_search_request = client.get_type( "SearchGoogleAdsRequest" ) shared_criteria_search_request.customer_id = customer_id shared_criteria_search_request.query = shared_criteria_query shared_criteria_search_request.page_size = _DEFAULT_PAGE_SIZE shared_criteria_response = ga_service.search( request=shared_criteria_search_request ) except GoogleAdsException as ex: handle_googleads_exception(ex) criterion_type_enum = client.enums.CriterionTypeEnum criterion_ids = [] for row in shared_criteria_response: shared_criterion = row.shared_criterion shared_criterion_resource_name = shared_criterion.resource_name if shared_criterion.type_ == criterion_type_enum.KEYWORD: keyword = shared_criterion.keyword print( "Shared criterion with resource name " f'"{shared_criterion_resource_name}" for negative keyword ' f'with text "{keyword.text}" and match type ' f'"{keyword.match_type.name}" was found.' ) criterion_ids.append(shared_criterion_resource_name) # Finally, remove the criteria. operations = [] for criteria_id in criterion_ids: shared_criterion_operation = client.get_type("SharedCriterionOperation") shared_criterion_operation.remove = criteria_id operations.append(shared_criterion_operation) try: response = shared_criterion_service.mutate_shared_criteria( customer_id=customer_id, operations=operations ) for result in response.results: print(f'Removed shared criterion "{result.resource_name}".') except GoogleAdsException as ex: handle_googleads_exception(ex) def handle_googleads_exception(exception): print( f'Request with ID "{exception.request_id}" failed with status ' f'"{exception.error.code().name}" and includes the following errors:' ) for error in exception.failure.errors: print(f'\tError with message "{error.message}".') if error.location: for field_path_element in error.location.field_path_elements: print(f"\t\tOn field: {field_path_element.field_name}") sys.exit(1) class StringWithSpace(argparse.Action): def __call__(self, parser, namespace, values, option_string=None): setattr(namespace, self.dest, ' '.join(values)) if __name__ == "__main__": # GoogleAdsClient will read the google-ads.yaml configuration file in the # home directory if none is specified. AUTH_PATH = "lib/google-ads.yaml" googleads_client = GoogleAdsClient.load_from_storage(AUTH_PATH, version= "v13") parser = argparse.ArgumentParser( description=( "Finds shared sets, then finds and removes shared set " "criteria under them." ) ) # 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( "-n", "--shared_set_name", action=StringWithSpace, type=str, required=True, help="The negative keyword shared set name." ) parser.add_argument( "-k", "--keywords", nargs='+', type=str, required=True, help="The Keywords to be exclueded from list." ) args = parser.parse_args() main( googleads_client, args.customer_id, args.shared_set_name, args.keywords ) -- -- =~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~ 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 adwords-api@googlegroups.com To unsubscribe from this group, send email to adwords-api+unsubscr...@googlegroups.com 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 "Google Ads API and AdWords API Forum" group. To unsubscribe from this group and stop receiving emails from it, send an email to adwords-api+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/adwords-api/3646fd22-889a-4b85-b675-2edad9f87992n%40googlegroups.com.