Skip to content

Commit 2d36b74

Browse files
authored
Add annotations to examples/targeting (#954)
1 parent 862a074 commit 2d36b74

File tree

4 files changed

+155
-53
lines changed

4 files changed

+155
-53
lines changed

examples/targeting/add_campaign_targeting_criteria.py

Lines changed: 66 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -16,24 +16,52 @@
1616

1717

1818
import argparse
19+
from typing import List
1920
import sys
2021

2122
from google.ads.googleads.client import GoogleAdsClient
2223
from google.ads.googleads.errors import GoogleAdsException
24+
from google.ads.googleads.v20.common.types.criteria import (
25+
KeywordInfo,
26+
)
27+
from google.ads.googleads.v20.resources.types.campaign_criterion import (
28+
CampaignCriterion,
29+
)
30+
from google.ads.googleads.v20.services.services.campaign_service import (
31+
CampaignServiceClient,
32+
)
33+
from google.ads.googleads.v20.services.services.campaign_criterion_service import (
34+
CampaignCriterionServiceClient,
35+
)
36+
from google.ads.googleads.v20.services.services.geo_target_constant_service import (
37+
GeoTargetConstantServiceClient,
38+
)
39+
from google.ads.googleads.v20.services.types.campaign_criterion_service import (
40+
CampaignCriterionOperation,
41+
MutateCampaignCriteriaResponse
42+
)
43+
44+
45+
def main(
46+
client: GoogleAdsClient,
47+
customer_id: str,
48+
campaign_id: str,
49+
keyword_text: str,
50+
location_id: str,
51+
) -> None:
52+
campaign_criterion_service: CampaignCriterionServiceClient = client.get_service(
53+
"CampaignCriterionService"
54+
)
2355

24-
25-
def main(client, customer_id, campaign_id, keyword_text, location_id):
26-
campaign_criterion_service = client.get_service("CampaignCriterionService")
27-
28-
operations = [
56+
operations: List[CampaignCriterionOperation] = [
2957
create_location_op(client, customer_id, campaign_id, location_id),
3058
create_negative_keyword_op(
3159
client, customer_id, campaign_id, keyword_text
3260
),
3361
create_proximity_op(client, customer_id, campaign_id),
3462
]
3563

36-
campaign_criterion_response = (
64+
campaign_criterion_response: MutateCampaignCriteriaResponse = (
3765
campaign_criterion_service.mutate_campaign_criteria(
3866
customer_id=customer_id, operations=operations
3967
)
@@ -44,13 +72,19 @@ def main(client, customer_id, campaign_id, keyword_text, location_id):
4472

4573

4674
# [START add_campaign_targeting_criteria]
47-
def create_location_op(client, customer_id, campaign_id, location_id):
48-
campaign_service = client.get_service("CampaignService")
49-
geo_target_constant_service = client.get_service("GeoTargetConstantService")
75+
def create_location_op(
76+
client: GoogleAdsClient, customer_id: str, campaign_id: str, location_id: str
77+
) -> CampaignCriterionOperation:
78+
campaign_service: CampaignServiceClient = client.get_service("CampaignService")
79+
geo_target_constant_service: GeoTargetConstantServiceClient = client.get_service(
80+
"GeoTargetConstantService"
81+
)
5082

5183
# Create the campaign criterion.
52-
campaign_criterion_operation = client.get_type("CampaignCriterionOperation")
53-
campaign_criterion = campaign_criterion_operation.create
84+
campaign_criterion_operation: CampaignCriterionOperation = client.get_type(
85+
"CampaignCriterionOperation"
86+
)
87+
campaign_criterion: CampaignCriterion = campaign_criterion_operation.create
5488
campaign_criterion.campaign = campaign_service.campaign_path(
5589
customer_id, campaign_id
5690
)
@@ -67,30 +101,38 @@ def create_location_op(client, customer_id, campaign_id, location_id):
67101
# [END add_campaign_targeting_criteria]
68102

69103

70-
def create_negative_keyword_op(client, customer_id, campaign_id, keyword_text):
71-
campaign_service = client.get_service("CampaignService")
104+
def create_negative_keyword_op(
105+
client: GoogleAdsClient, customer_id: str, campaign_id: str, keyword_text: str
106+
) -> CampaignCriterionOperation:
107+
campaign_service: CampaignServiceClient = client.get_service("CampaignService")
72108

73109
# Create the campaign criterion.
74-
campaign_criterion_operation = client.get_type("CampaignCriterionOperation")
75-
campaign_criterion = campaign_criterion_operation.create
110+
campaign_criterion_operation: CampaignCriterionOperation = client.get_type(
111+
"CampaignCriterionOperation"
112+
)
113+
campaign_criterion: CampaignCriterion = campaign_criterion_operation.create
76114
campaign_criterion.campaign = campaign_service.campaign_path(
77115
customer_id, campaign_id
78116
)
79117
campaign_criterion.negative = True
80-
criterion_keyword = campaign_criterion.keyword
118+
criterion_keyword: KeywordInfo = campaign_criterion.keyword
81119
criterion_keyword.text = keyword_text
82120
criterion_keyword.match_type = client.enums.KeywordMatchTypeEnum.BROAD
83121

84122
return campaign_criterion_operation
85123

86124

87125
# [START add_campaign_targeting_criteria_1]
88-
def create_proximity_op(client, customer_id, campaign_id):
89-
campaign_service = client.get_service("CampaignService")
126+
def create_proximity_op(
127+
client: GoogleAdsClient, customer_id: str, campaign_id: str
128+
) -> CampaignCriterionOperation:
129+
campaign_service: CampaignServiceClient = client.get_service("CampaignService")
90130

91131
# Create the campaign criterion.
92-
campaign_criterion_operation = client.get_type("CampaignCriterionOperation")
93-
campaign_criterion = campaign_criterion_operation.create
132+
campaign_criterion_operation: CampaignCriterionOperation = client.get_type(
133+
"CampaignCriterionOperation"
134+
)
135+
campaign_criterion: CampaignCriterion = campaign_criterion_operation.create
94136
campaign_criterion.campaign = campaign_service.campaign_path(
95137
customer_id, campaign_id
96138
)
@@ -146,11 +188,13 @@ def create_proximity_op(client, customer_id, campaign_id):
146188
"https://developers.google.com/google-ads/api/reference/data/geotargets"
147189
),
148190
)
149-
args = parser.parse_args()
191+
args: argparse.Namespace = parser.parse_args()
150192

151193
# GoogleAdsClient will read the google-ads.yaml configuration file in the
152194
# home directory if none is specified.
153-
googleads_client = GoogleAdsClient.load_from_storage(version="v20")
195+
googleads_client: GoogleAdsClient = GoogleAdsClient.load_from_storage(
196+
version="v20"
197+
)
154198

155199
try:
156200
main(

examples/targeting/add_customer_negative_criteria.py

Lines changed: 24 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -23,42 +23,54 @@
2323

2424
from google.ads.googleads.client import GoogleAdsClient
2525
from google.ads.googleads.errors import GoogleAdsException
26+
from google.ads.googleads.v20.resources.types.customer_negative_criterion import (
27+
CustomerNegativeCriterion,
28+
)
29+
from google.ads.googleads.v20.services.services.customer_negative_criterion_service import (
30+
CustomerNegativeCriterionServiceClient,
31+
)
32+
from google.ads.googleads.v20.services.types.customer_negative_criterion_service import (
33+
CustomerNegativeCriterionOperation,
34+
MutateCustomerNegativeCriteriaResponse
35+
)
2636

27-
28-
def main(client, customer_id):
37+
def main(client: GoogleAdsClient, customer_id: str) -> None:
2938
"""The main method that creates all necessary entities for the example.
3039
3140
Args:
3241
client: an initialized GoogleAdsClient instance.
3342
customer_id: a client customer ID.
3443
"""
35-
tragedy_criterion_op = client.get_type("CustomerNegativeCriterionOperation")
36-
tragedy_criterion = tragedy_criterion_op.create
44+
tragedy_criterion_op: CustomerNegativeCriterionOperation = client.get_type(
45+
"CustomerNegativeCriterionOperation"
46+
)
47+
tragedy_criterion: CustomerNegativeCriterion = tragedy_criterion_op.create
3748
# Creates a negative customer criterion excluding the content label type
3849
# of 'TRAGEDY'.
3950
tragedy_criterion.content_label.type_ = (
4051
client.enums.ContentLabelTypeEnum.TRAGEDY
4152
)
4253

43-
placement_criterion_op = client.get_type(
54+
placement_criterion_op: CustomerNegativeCriterionOperation = client.get_type(
4455
"CustomerNegativeCriterionOperation"
4556
)
46-
placement_criterion = placement_criterion_op.create
57+
placement_criterion: CustomerNegativeCriterion = placement_criterion_op.create
4758
# Creates a negative customer criterion excluding the placement with URL
4859
# 'http://www.example.com'.
4960
placement_criterion.placement.url = "http://www.example.com"
5061

51-
customer_negative_criterion_service = client.get_service(
62+
customer_negative_criterion_service: CustomerNegativeCriterionServiceClient = client.get_service(
5263
"CustomerNegativeCriterionService"
5364
)
5465

5566
# Issues a mutate request to add the negative customer criteria.
56-
response = (
67+
response: MutateCustomerNegativeCriteriaResponse = (
5768
customer_negative_criterion_service.mutate_customer_negative_criteria(
5869
customer_id=customer_id,
5970
operations=[tragedy_criterion_op, placement_criterion_op],
6071
)
6172
)
73+
6274
print(f"Added {len(response.results)} negative customer criteria:")
6375
for negative_criterion in response.results:
6476
print(f"Resource name: '{negative_criterion.resource_name}'")
@@ -80,11 +92,13 @@ def main(client, customer_id):
8092
required=True,
8193
help="The Google Ads customer ID.",
8294
)
83-
args = parser.parse_args()
95+
args: argparse.Namespace = parser.parse_args()
8496

8597
# GoogleAdsClient will read the google-ads.yaml configuration file in the
8698
# home directory if none is specified.
87-
googleads_client = GoogleAdsClient.load_from_storage(version="v20")
99+
googleads_client: GoogleAdsClient = GoogleAdsClient.load_from_storage(
100+
version="v20"
101+
)
88102

89103
try:
90104
main(

examples/targeting/add_demographic_targeting_criteria.py

Lines changed: 35 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -22,36 +22,57 @@
2222

2323
from google.ads.googleads.client import GoogleAdsClient
2424
from google.ads.googleads.errors import GoogleAdsException
25+
from google.ads.googleads.v20.resources.types.ad_group_criterion import (
26+
AdGroupCriterion,
27+
)
28+
from google.ads.googleads.v20.services.services.ad_group_criterion_service import (
29+
AdGroupCriterionServiceClient,
30+
)
31+
from google.ads.googleads.v20.services.services.ad_group_service import (
32+
AdGroupServiceClient,
33+
)
34+
from google.ads.googleads.v20.services.types.ad_group_criterion_service import (
35+
AdGroupCriterionOperation,
36+
MutateAdGroupCriteriaResponse,
37+
)
2538

2639

27-
def main(client, customer_id, ad_group_id):
28-
ad_group_service = client.get_service("AdGroupService")
29-
ad_group_criterion_service = client.get_service("AdGroupCriterionService")
40+
def main(
41+
client: GoogleAdsClient, customer_id: str, ad_group_id: str
42+
) -> None:
43+
ad_group_service: AdGroupServiceClient = client.get_service("AdGroupService")
44+
ad_group_criterion_service: AdGroupCriterionServiceClient = client.get_service(
45+
"AdGroupCriterionService"
46+
)
3047

31-
ad_group_resource_name = ad_group_service.ad_group_path(
48+
ad_group_resource_name: str = ad_group_service.ad_group_path(
3249
customer_id, ad_group_id
3350
)
3451
# Create a positive ad group criterion for the gender MALE.
35-
gender_ad_group_criterion_operation = client.get_type(
52+
gender_ad_group_criterion_operation: AdGroupCriterionOperation = client.get_type(
3653
"AdGroupCriterionOperation"
3754
)
38-
gender_ad_group_criterion = gender_ad_group_criterion_operation.create
55+
gender_ad_group_criterion: AdGroupCriterion = (
56+
gender_ad_group_criterion_operation.create
57+
)
3958
gender_ad_group_criterion.ad_group = ad_group_resource_name
4059
gender_ad_group_criterion.gender.type_ = client.enums.GenderTypeEnum.MALE
4160

4261
# Create a negative ad group criterion for age range of 18 to 24.
43-
age_range_ad_group_criterion_operation = client.get_type(
62+
age_range_ad_group_criterion_operation: AdGroupCriterionOperation = client.get_type(
4463
"AdGroupCriterionOperation"
4564
)
46-
age_range_ad_group_criterion = age_range_ad_group_criterion_operation.create
65+
age_range_ad_group_criterion: AdGroupCriterion = (
66+
age_range_ad_group_criterion_operation.create
67+
)
4768
age_range_ad_group_criterion.ad_group = ad_group_resource_name
4869
age_range_ad_group_criterion.negative = True
4970
age_range_ad_group_criterion.age_range.type_ = (
5071
client.enums.AgeRangeTypeEnum.AGE_RANGE_18_24
5172
)
5273

5374
# Add two ad group criteria
54-
ad_group_criterion_response = (
75+
ad_group_criterion_response: MutateAdGroupCriteriaResponse = (
5576
ad_group_criterion_service.mutate_ad_group_criteria(
5677
customer_id=customer_id,
5778
operations=[
@@ -62,7 +83,7 @@ def main(client, customer_id, ad_group_id):
6283
)
6384

6485
for result in ad_group_criterion_response.results:
65-
print("Created keyword {}.".format(result.resource_name))
86+
print(f"Created ad group criterion '{result.resource_name}'.")
6687

6788

6889
if __name__ == "__main__":
@@ -83,11 +104,13 @@ def main(client, customer_id, ad_group_id):
83104
parser.add_argument(
84105
"-a", "--ad_group_id", type=str, required=True, help="The ad group ID."
85106
)
86-
args = parser.parse_args()
107+
args: argparse.Namespace = parser.parse_args()
87108

88109
# GoogleAdsClient will read the google-ads.yaml configuration file in the
89110
# home directory if none is specified.
90-
googleads_client = GoogleAdsClient.load_from_storage(version="v20")
111+
googleads_client: GoogleAdsClient = GoogleAdsClient.load_from_storage(
112+
version="v20"
113+
)
91114

92115
try:
93116
main(googleads_client, args.customer_id, args.ad_group_id)

examples/targeting/get_geo_target_constants_by_names.py

Lines changed: 30 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -19,34 +19,53 @@
1919

2020
from google.ads.googleads.client import GoogleAdsClient
2121
from google.ads.googleads.errors import GoogleAdsException
22+
from google.ads.googleads.v20.resources.types.geo_target_constant import (
23+
GeoTargetConstant,
24+
)
25+
from google.ads.googleads.v20.services.services.geo_target_constant_service import (
26+
GeoTargetConstantServiceClient,
27+
)
28+
from google.ads.googleads.v20.services.types.geo_target_constant_service import (
29+
GeoTargetConstantSuggestion,
30+
SuggestGeoTargetConstantsRequest,
31+
SuggestGeoTargetConstantsResponse,
32+
)
2233

2334
# Locale is using ISO 639-1 format. If an invalid locale is given,
2435
# 'en' is used by default.
25-
LOCALE = "en"
36+
LOCALE: str = "en"
2637

2738
# A list of country codes can be referenced here:
2839
# https://developers.google.com/google-ads/api/reference/data/geotargets
29-
COUNTRY_CODE = "FR"
40+
COUNTRY_CODE: str = "FR"
3041

3142

3243
# [START get_geo_target_constants_by_names]
33-
def main(client):
34-
gtc_service = client.get_service("GeoTargetConstantService")
35-
36-
gtc_request = client.get_type("SuggestGeoTargetConstantsRequest")
44+
def main(client: GoogleAdsClient) -> None:
45+
gtc_service: GeoTargetConstantServiceClient = client.get_service(
46+
"GeoTargetConstantService"
47+
)
3748

49+
gtc_request: SuggestGeoTargetConstantsRequest = client.get_type(
50+
"SuggestGeoTargetConstantsRequest"
51+
)
3852
gtc_request.locale = LOCALE
3953
gtc_request.country_code = COUNTRY_CODE
4054

4155
# The location names to get suggested geo target constants.
56+
# Type hint for gtc_request.location_names.names is not straightforward
57+
# as it's part of a complex protobuf object.
4258
gtc_request.location_names.names.extend(
4359
["Paris", "Quebec", "Spain", "Deutschland"]
4460
)
4561

46-
results = gtc_service.suggest_geo_target_constants(gtc_request)
62+
results: SuggestGeoTargetConstantsResponse = (
63+
gtc_service.suggest_geo_target_constants(gtc_request)
64+
)
4765

66+
suggestion: GeoTargetConstantSuggestion
4867
for suggestion in results.geo_target_constant_suggestions:
49-
geo_target_constant = suggestion.geo_target_constant
68+
geo_target_constant: GeoTargetConstant = suggestion.geo_target_constant
5069
print(
5170
f"{geo_target_constant.resource_name} "
5271
f"({geo_target_constant.name}, "
@@ -63,7 +82,9 @@ def main(client):
6382
if __name__ == "__main__":
6483
# GoogleAdsClient will read the google-ads.yaml configuration file in the
6584
# home directory if none is specified.
66-
googleads_client = GoogleAdsClient.load_from_storage(version="v20")
85+
googleads_client: GoogleAdsClient = GoogleAdsClient.load_from_storage(
86+
version="v20"
87+
)
6788

6889
try:
6990
main(googleads_client)

0 commit comments

Comments
 (0)