Error for removing keywords from negative keywords shared set

69 views
Skip to first unread message

Qihuai Duan

unread,
May 12, 2023, 4:50:14 AM5/12/23
to Google Ads API and AdWords API Forum
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
)

Google Ads API Forum Advisor

unread,
May 12, 2023, 9:41:58 AM5/12/23
to qih...@primelis.com, adwor...@googlegroups.com

Hello,

Thanks for reaching out to the Google Ads API Team.

I understand that you are experiencing an INVALID_ARGUMENT error while using the Search method on your python client library. Can you please confirm if this operation is referring to the python client library find_and_remove_criteria_from_shared_set.py file?

Additionally, can you please provide us with the complete request and response logs with request ID generated on your end so our team can investigate further and provide recommendations?

You can provide it via Reply privately to the author option. If this option is not available, then send it instead on this email address googleadsa...@google.com.

Regards,

Google Logo Google Ads API Team


ref:_00D1U1174p._5004Q2lHEzt:ref

Qihuai Duan

unread,
May 12, 2023, 9:47:15 AM5/12/23
to Google Ads API and AdWords API Forum
Hello,

Issue solved, it lacked of one line of argument in the add_argument

Thx 

Google Ads API Forum Advisor

unread,
May 12, 2023, 10:58:37 AM5/12/23
to qih...@primelis.com, adwor...@googlegroups.com

Hi,

We are glad to know that issue is resolved. Feel free to open new forum thread for any new concern and we assist you better.

Regards,

Reply all
Reply to author
Forward
0 new messages