2929
3030import argparse
3131import sys
32+ from typing import Any , List
3233
3334from google .ads .googleads .client import GoogleAdsClient
3435from google .ads .googleads .errors import GoogleAdsException
35-
36-
37- def main (client , customer_id , campaign_id ):
38- campaign_service = client .get_service ("CampaignService" )
39- campaign_criterion_operation = client .get_type ("CampaignCriterionOperation" )
40- campaign_criterion = campaign_criterion_operation .create
36+ from google .ads .googleads .v17 .common .types .criteria import (
37+ ListingDimensionInfo ,
38+ )
39+ from google .ads .googleads .v17 .enums .types .product_custom_attribute_index import (
40+ ProductCustomAttributeIndexEnum ,
41+ )
42+ from google .ads .googleads .v17 .enums .types .product_type_level import (
43+ ProductTypeLevelEnum ,
44+ )
45+ from google .ads .googleads .v17 .resources .types .campaign_criterion import (
46+ CampaignCriterion ,
47+ )
48+ from google .ads .googleads .v17 .services .services .campaign_criterion_service import (
49+ CampaignCriterionServiceClient ,
50+ )
51+ from google .ads .googleads .v17 .services .services .campaign_service import (
52+ CampaignServiceClient ,
53+ )
54+ from google .ads .googleads .v17 .services .types .campaign_criterion_operation import (
55+ CampaignCriterionOperation ,
56+ )
57+
58+
59+ def main (
60+ client : GoogleAdsClient , customer_id : str , campaign_id : str
61+ ) -> None :
62+ campaign_service : CampaignServiceClient = client .get_service (
63+ "CampaignService"
64+ )
65+ campaign_criterion_operation : CampaignCriterionOperation = client .get_type (
66+ "CampaignCriterionOperation"
67+ )
68+ campaign_criterion : CampaignCriterion = campaign_criterion_operation .create
4169 campaign_criterion .campaign = campaign_service .campaign_path (
4270 customer_id , campaign_id
4371 )
@@ -47,39 +75,53 @@ def main(client, customer_id, campaign_id):
4775 # must be met for a product to be included in a campaign.
4876 # A typical listing scope might only have a few dimensions. This example
4977 # demonstrates a range of different dimensions you could use.
50- dimensions = campaign_criterion .listing_scope .dimensions
78+ dimensions : List [ListingDimensionInfo ] = (
79+ campaign_criterion .listing_scope .dimensions
80+ )
5181
52- product_brand_dimension = client .get_type ("ListingDimensionInfo" )
82+ product_brand_dimension : ListingDimensionInfo = client .get_type (
83+ "ListingDimensionInfo"
84+ )
5385 product_brand_dimension .product_brand .value = "google"
5486 dimensions .append (product_brand_dimension )
5587
56- product_custom_attribute_index_enum = (
88+ product_custom_attribute_index_enum : ProductCustomAttributeIndexEnum = (
5789 client .enums .ProductCustomAttributeIndexEnum
5890 )
59- product_custom_attribute_dimension = client .get_type ("ListingDimensionInfo" )
91+ product_custom_attribute_dimension : ListingDimensionInfo = client .get_type (
92+ "ListingDimensionInfo"
93+ )
6094 product_custom_attribute = (
6195 product_custom_attribute_dimension .product_custom_attribute
6296 )
6397 product_custom_attribute .index = product_custom_attribute_index_enum .INDEX0
6498 product_custom_attribute .value = "top_selling_products"
6599 dimensions .append (product_custom_attribute_dimension )
66100
67- product_type_level_enum = client .enums .ProductTypeLevelEnum
68- product_type_dimension_1 = client .get_type ("ListingDimensionInfo" )
101+ product_type_level_enum : ProductTypeLevelEnum = (
102+ client .enums .ProductTypeLevelEnum
103+ )
104+ product_type_dimension_1 : ListingDimensionInfo = client .get_type (
105+ "ListingDimensionInfo"
106+ )
69107 product_type = product_type_dimension_1 .product_type
70108 product_type .level = product_type_level_enum .LEVEL1
71109 product_type .value = "electronics"
72110 dimensions .append (product_type_dimension_1 )
73111
74- product_type_dimension_2 = client .get_type ("ListingDimensionInfo" )
112+ product_type_dimension_2 : ListingDimensionInfo = client .get_type (
113+ "ListingDimensionInfo"
114+ )
75115 product_type = product_type_dimension_2 .product_type
76116 product_type .level = product_type_level_enum .LEVEL2
77117 product_type .value = "smartphones"
78118 dimensions .append (product_type_dimension_2 )
79119
80- campaign_criterion_service = client .get_service ("CampaignCriterionService" )
120+ campaign_criterion_service : CampaignCriterionServiceClient = (
121+ client .get_service ("CampaignCriterionService" )
122+ )
81123
82- campaign_criterion_response = (
124+ campaign_criterion_response : Any = (
83125 campaign_criterion_service .mutate_campaign_criteria (
84126 customer_id = customer_id , operations = [campaign_criterion_operation ]
85127 )
@@ -89,8 +131,8 @@ def main(client, customer_id, campaign_id):
89131 f"Added { len (campaign_criterion_response .results )} campaign "
90132 "criteria:"
91133 )
92- for campaign_criterion in campaign_criterion_response .results :
93- print (campaign_criterion .resource_name )
134+ for criterion in campaign_criterion_response .results :
135+ print (criterion .resource_name )
94136
95137
96138if __name__ == "__main__" :
@@ -108,11 +150,13 @@ def main(client, customer_id, campaign_id):
108150 parser .add_argument (
109151 "-i" , "--campaign_id" , type = str , required = True , help = "The campaign ID."
110152 )
111- args = parser .parse_args ()
153+ args : argparse . Namespace = parser .parse_args ()
112154
113155 # GoogleAdsClient will read the google-ads.yaml configuration file in the
114156 # home directory if none is specified.
115- googleads_client = GoogleAdsClient .load_from_storage (version = "v20" )
157+ googleads_client : GoogleAdsClient = GoogleAdsClient .load_from_storage (
158+ version = "v20"
159+ )
116160
117161 try :
118162 main (googleads_client , args .customer_id , args .campaign_id )
0 commit comments