Hey Team, I am creating a listing group where I only want to Include certain ItemID from all products and Exclude "EVERYTHING ELSE". I used the API Documentation but could not figure out how to exclude them.
def next_id():
global last_criterion_id
last_criterion_id -= 1
return str(last_criterion_id)
def main(client, customer_id, ad_group_id, replace_existing_tree):
ad_group_criterion_service = client.get_service("AdGroupCriterionService")
if replace_existing_tree:
remove_listing_group_tree(client, customer_id, ad_group_id)
operations = []
condition_dimension_info = client.get_type("ListingDimensionInfo")
client.copy_from(
condition_dimension_info.product_condition,
client.get_type("ProductConditionInfo"),
)
ad_group_criterion_other_operation = create_listing_group_subdivision(
client,
customer_id,
ad_group_id,
condition_dimension_info,
)
ad_group_criterion_other_resource_name = (
ad_group_criterion_other_operation.create.resource_name
)
operations.append(ad_group_criterion_other_operation)
item_dimension_info = client.get_type("ListingDimensionInfo")
item_ids = ["n12288755v", "n12648292v", "n12673786v"]
for item_id in item_ids:
item_dimension_info = client.get_type("ListingDimensionInfo")
item_dimension_info.product_item_id.value = item_id
operations.append(
create_listing_group_unit_biddable(
client,
customer_id,
ad_group_id,
ad_group_criterion_other_resource_name,
item_dimension_info,
900_000,
)
)
##Other item ids
client.copy_from(
item_dimension_info.product_item_id, client.get_type("ProductItemIdInfo"),
)
operations.append(
create_listing_group_unit_biddable(
client,
customer_id,
ad_group_id,
ad_group_criterion_other_resource_name,
item_dimension_info,
50_000,
)
)
# Add the ad group criteria.
mutate_ad_group_criteria_response = ad_group_criterion_service.mutate_ad_group_criteria(
customer_id=customer_id, operations=operations
)
# Print the results of the successful mutates.
print(
"Added ad group criteria for the listing group tree with the "
"following resource names:"
)
for result in mutate_ad_group_criteria_response.results:
print(f"\t{result.resource_name}")
print(f"{len(mutate_ad_group_criteria_response.results)} criteria added.")
# [END add_shopping_product_listing_group_tree]
def remove_listing_group_tree(client, customer_id, ad_group_id):
googleads_service = client.get_service("GoogleAdsService")
print("Removing existing listing group tree...")
query = f"""
SELECT ad_group_criterion.resource_name
FROM ad_group_criterion
WHERE
ad_group_criterion.type = LISTING_GROUP
AND ad_group_criterion.listing_group.parent_ad_group_criterion IS NULL
results = googleads_service.search(customer_id=customer_id, query=query)
ad_group_criterion_operations = []
for row in results:
criterion = row.ad_group_criterion
print(
"Found an ad group criterion with resource name: "
f"'{criterion.resource_name}'."
)
ad_group_criterion_operation = client.get_type(
"AdGroupCriterionOperation"
)
ad_group_criterion_operation.remove = criterion.resource_name
ad_group_criterion_operations.append(ad_group_criterion_operation)
if ad_group_criterion_operations:
ad_group_criterion_service = client.get_service(
"AdGroupCriterionService"
)
response = ad_group_criterion_service.mutate_ad_group_criteria(
customer_id=customer_id, operations=ad_group_criterion_operations
)
print(f"Removed {len(response.results)} ad group criteria.")
def create_listing_group_subdivision(
client,
customer_id,
ad_group_id,
parent_ad_group_criterion_resource_name=None,
listing_dimension_info=None,
):
operation = client.get_type("AdGroupCriterionOperation")
ad_group_criterion = operation.create
ad_group_criterion.resource_name = client.get_service(
"AdGroupCriterionService"
).ad_group_criterion_path(customer_id, ad_group_id, next_id())
ad_group_criterion.status = client.enums.AdGroupCriterionStatusEnum.ENABLED
listing_group_info = ad_group_criterion.listing_group
listing_group_info.type_ = client.enums.ListingGroupTypeEnum.SUBDIVISION
if (
parent_ad_group_criterion_resource_name
and listing_dimension_info != None
):
listing_group_info.parent_ad_group_criterion = (
parent_ad_group_criterion_resource_name
)
client.copy_from(listing_group_info.case_value, listing_dimension_info)
return operation
def create_listing_group_unit_biddable(
client,
customer_id,
ad_group_id,
parent_ad_group_criterion_resource_name,
listing_dimension_info,
cpc_bid_micros=None,
):
operation = client.get_type("AdGroupCriterionOperation")
criterion = operation.create
criterion.ad_group = client.get_service("AdGroupService").ad_group_path(
customer_id, ad_group_id
)
criterion.status = client.enums.AdGroupCriterionStatusEnum.ENABLED
if cpc_bid_micros:
criterion.cpc_bid_micros = cpc_bid_micros
listing_group = criterion.listing_group
listing_group.type_ = client.enums.ListingGroupTypeEnum.UNIT
listing_group.parent_ad_group_criterion = (
parent_ad_group_criterion_resource_name
)
if listing_dimension_info != None:
client.copy_from(listing_group.case_value, listing_dimension_info)
return operation