-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathAdManager_Add_Key_Value_To_Existing_CustomTargeting.py
More file actions
69 lines (52 loc) · 2.57 KB
/
AdManager_Add_Key_Value_To_Existing_CustomTargeting.py
File metadata and controls
69 lines (52 loc) · 2.57 KB
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
#!/usr/bin/env python
# This script will add key-value targeting to existing targeting.
# This is probably most useful for publishers which have pushed Prebid (or Header Bidding) line items to AdManager and at a later date need to globally add or exclude key-values.
from googleads import ad_manager
ORDER_ID = 'ORDER_ID'
KEY_ID = 'KEY_ID
VALUE_ID = 'VALUE_ID'
OPERATOR = 'IS_NOT' # API values should be "AND", "OR, "IS", "IS_NOT", similar to => https://support.google.com/admanager/answer/177381?hl=en
def main(client, order_id, key_id, value_id, operator):
line_item_service = client.GetService('LineItemService', version='v201808')
statement = (ad_manager.StatementBuilder()
.Where(('orderId = :orderId'))
.WithBindVariable('orderId', long(order_id))
.Limit(500))
response = line_item_service.getLineItemsByStatement(statement.ToStatement())
if 'results' in response and len(response['results']):
for line_item in response['results']:
line_item_service = client.GetService('LineItemService', version='v201808')
custom_criteria = {
'xsi_type': 'CustomCriteria',
'keyId': key_id,
'valueIds': [value_id],
'operator': operator
}
sub_set = {
'xsi_type': 'CustomCriteriaSet',
'logicalOperator': 'AND',
'children': [custom_criteria]
}
statement = (ad_manager.StatementBuilder()
.Where('id = :lineItemId')
.WithBindVariable('lineItemId', long(line_item['id']))
.Limit(1))
line_item = line_item_service.getLineItemsByStatement(
statement.ToStatement())['results'][0]
top_set = {
'xsi_type': 'CustomCriteriaSet',
'logicalOperator': 'AND',
'children': [line_item['targeting']['customTargeting'], sub_set]
}
line_item['targeting']['customTargeting'] = top_set
line_item = line_item_service.updateLineItems([line_item])[0]
if line_item:
print ('Line item with id "%s" updated with custom criteria targeting.'
% line_item['id'])
else:
print ('No line items were updated.')
else:
print('No line items found.')
if __name__ == '__main__':
ad_manager_client = ad_manager.AdManagerClient.LoadFromStorage()
main(ad_manager_client, ORDER_ID, KEY_ID, VALUE_ID, OPERATOR)