/
get_account_budgets.py
executable file
·143 lines (127 loc) · 5.71 KB
/
get_account_budgets.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
#!/usr/bin/env python
# Copyright 2018 Google LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
"""This illustrates how to get all account budgets for a Google Ads customer."""
import argparse
import sys
from google.ads.google_ads.client import GoogleAdsClient
from google.ads.google_ads.errors import GoogleAdsException
def main(client, customer_id):
ga_service = client.get_service("GoogleAdsService", version="v6")
query = """
SELECT
account_budget.status,
account_budget.billing_setup,
account_budget.approved_spending_limit_micros,
account_budget.approved_spending_limit_type,
account_budget.proposed_spending_limit_micros,
account_budget.proposed_spending_limit_type,
account_budget.adjusted_spending_limit_micros,
account_budget.adjusted_spending_limit_type,
account_budget.approved_start_date_time,
account_budget.proposed_start_date_time,
account_budget.approved_end_date_time,
account_budget.approved_end_time_type,
account_budget.proposed_end_date_time,
account_budget.proposed_end_time_type
FROM account_budget"""
response = ga_service.search_stream(customer_id, query=query)
try:
# Use the enum type to determine the enum names from the values.
budget_status_enum = client.get_type(
"AccountBudgetStatusEnum", version="v6"
).AccountBudgetStatus
spending_limit_type_enum = client.get_type(
"SpendingLimitTypeEnum", version="v6"
).SpendingLimitType
for batch in response:
for row in batch.results:
budget = row.account_budget
approved_spending_limit = (
_micros_to_currency(budget.approved_spending_limit_micros)
if budget.approved_spending_limit_micros
else spending_limit_type_enum.Name(
budget.approved_spending_limit_type
)
)
proposed_spending_limit = (
_micros_to_currency(budget.proposed_spending_limit_micros)
if budget.proposed_spending_limit_micros
else budget_status_enum.Name(
budget.proposed_spending_limit_type
)
)
adjusted_spending_limit = (
_micros_to_currency(budget.adjusted_spending_limit_micros)
if budget.adjusted_spending_limit_micros
else budget_status_enum.Name(
budget.adjusted_spending_limit_type
)
)
approved_end_date_time = (
budget.approved_end_date_time
if budget.approved_end_date_time
else budget.approved_end_time_type
)
proposed_end_date_time = (
budget.proposed_end_date_time
if budget.proposed_end_date_time
else budget.proposed_end_time_type
)
print(
f'Account budget "{budget.resource_name}", '
f'with status "{budget_status_enum.Name(budget.status)}" ',
f'billing setup "{budget.billing_setup}", '
f"amount served {_micros_to_currency(budget.amount_served_micros):.2f}, "
f"total adjustments {_micros_to_currency(budget.total_adjustments_micros):.2f}, "
f'approved spending limit "{approved_spending_limit}" '
f'(proposed "{proposed_spending_limit}" -- '
f'adjusted "{adjusted_spending_limit}"), '
f'approved start time "{budget.approved_start_date_time}" '
f'(proposed "{budget.proposed_start_date_time}"), '
f'approved end time "{approved_end_date_time}" '
f'(proposed "{proposed_end_date_time}").',
)
except GoogleAdsException as ex:
print(
f'Request with ID "{ex.request_id}" failed with status '
f'"{ex.error.code().name}" and includes the following errors:'
)
for error in ex.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)
def _micros_to_currency(micros):
return micros / 1000000.0
if __name__ == "__main__":
# GoogleAdsClient will read the google-ads.yaml configuration file in the
# home directory if none is specified.
google_ads_client = GoogleAdsClient.load_from_storage()
parser = argparse.ArgumentParser(
description=(
"Lists all account budgets for given Google Ads customer " "ID."
)
)
# 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.",
)
args = parser.parse_args()
main(google_ads_client, args.customer_id)