def load_multiple(): partners = get_rows( project.task['auth_sheets'], { 'sheets': { 'sheet': project.task['sheet'], 'tab': 'Partners', 'range': 'A2:A' } }) for partner in partners: yield from API_DV360( project.task['auth_dv'], iterate=True).partners().channels().list( partnerId=lookup_id(partner[0])).execute() advertisers = get_rows( project.task['auth_sheets'], { 'sheets': { 'sheet': project.task['sheet'], 'tab': 'Advertisers', 'range': 'A2:A' } }) for advertiser in advertisers: yield from API_DV360( project.task['auth_dv'], iterate=True).advertisers().channels().list( advertiserId=lookup_id(advertiser[0])).execute()
def sdf_download(auth, version, partner_id, file_types, filter_type, filter_ids_obj): #Read Filter Ids filter_ids = list(get_rows(auth, filter_ids_obj)) body = { 'version': version, 'partnerId': partner_id, 'parentEntityFilter': { 'fileType': file_types, 'filterType': filter_type, 'filterIds': filter_ids }, 'idFilter': None } operation = API_DV360(auth).sdfdownloadtasks().create(body=body).execute() if operation and 'name' in operation: request = API_DV360(auth).sdfdownloadtasks().operations().get( name=operation['name']) # This is the eng recommended way of getting the operation while True: response = request.execute() if 'done' in response and response['done']: break time.sleep(30) else: print('error') if 'error' in response: raise Exception(response['error']['message']) return download_media('user', response['response']['resourceName'])
def line_item_commit(patches): for patch in patches: if not patch.get("line_item"): continue print("API LINE ITEM:", patch["action"], patch["line_item"]) try: if patch["action"] == "DELETE": response = API_DV360( project.task["auth_dv"]).advertisers().lineItems().delete( **patch["parameters"]).execute() patch["success"] = response elif patch["action"] == "PATCH": response = API_DV360( project.task["auth_dv"]).advertisers().lineItems().patch( **patch["parameters"]).execute() patch["success"] = response["lineItemId"] elif patch["action"] == "INSERT": response = API_DV360( project.task["auth_dv"]).advertisers().lineItems().create( **patch["parameters"]).execute() patch["success"] = response["lineItemId"] elif patch["action"] == "TARGETING": response = API_DV360(project.task["auth_dv"]).advertisers( ).lineItems().bulkEditAdvertiserAssignedTargetingOptions( **patch["parameters"]).execute() patch["success"] = len( response["createdAssignedTargetingOptions"]) except Exception as e: patch["error"] = str(e) finally: patch_log(patch) patch_log()
def get_assigned_list(self, targeting_type): if targeting_type not in self.assigneds_cache: if self.lineitem: self.assigneds_cache[targeting_type] = list(API_DV360( self.auth, iterate=True ).advertisers().lineItems().targetingTypes().assignedTargetingOptions().list( lineItemId=str(self.lineitem), advertiserId=str(self.advertiser), targetingType=targeting_type ).execute()) elif self.partner: self.assigneds_cache[targeting_type] = list(API_DV360( self.auth, iterate=True ).partners().targetingTypes().assignedTargetingOptions().list( partnerId=str(self.partner), targetingType=targeting_type ).execute()) elif self.advertiser: self.assigneds_cache[targeting_type] = list(API_DV360( self.auth, iterate=True ).advertisers().targetingTypes().assignedTargetingOptions().list( advertiserId=str(self.advertiser), targetingType=targeting_type ).execute()) return self.assigneds_cache[targeting_type]
def insertion_order_commit(config, task, patches): for patch in patches: if not patch.get("insertion_order"): continue print("API INSERTION ORDER:", patch["action"], patch["insertion_order"]) try: if patch["action"] == "DELETE": response = API_DV360( config, task["auth_dv"] ).advertisers().insertionOrders().delete( **patch["parameters"] ).execute() patch["success"] = response elif patch["action"] == "PATCH": response = API_DV360( config, task["auth_dv"] ).advertisers().insertionOrders().patch( **patch["parameters"] ).execute() patch["success"] = response["insertionOrderId"] elif patch["action"] == "INSERT": response = API_DV360( config, task["auth_dv"] ).advertisers().insertionOrders().create( **patch["parameters"] ).execute() patch["success"] = response["insertionOrderId"] except Exception as e: patch["error"] = str(e) finally: patch_log(config, task, patch) patch_log(config, task)
def advertiser_commit(patches): for patch in patches: if not patch.get('advertiser'): continue print('API ADVERTISER:', patch['action'], patch['advertiser']) try: if patch['action'] == 'DELETE': response = API_DV360( project.task['auth_dv']).advertisers().delete( **patch['parameters']).execute() patch['success'] = response elif patch['action'] == 'PATCH': response = API_DV360( project.task['auth_dv']).advertisers().patch( **patch['parameters']).execute() patch['success'] = response['advertiserId'] elif patch["action"] == "TARGETING": response = API_DV360(project.task["auth_dv"]).advertisers( ).bulkEditAdvertiserAssignedTargetingOptions( **patch["parameters"]).execute() patch["success"] = len( response["createdAssignedTargetingOptions"]) except Exception as e: patch['error'] = str(e) finally: patch_log(patch) patch_log()
def load_multiple(): partners = get_rows( config, task['auth_sheets'], { 'sheets': { 'sheet': task['sheet'], 'tab': 'Partners', 'header': False, 'range': 'A2:A' } }) for partner in partners: yield from API_DV360( config, task['auth_dv'], iterate=True).inventorySources().list( partnerId=lookup_id(partner[0])).execute() advertisers = get_rows( config, task['auth_sheets'], { 'sheets': { 'sheet': task['sheet'], 'tab': 'Advertisers', 'header': False, 'range': 'A2:A' } }) for advertiser in advertisers: yield from API_DV360( config, task['auth_dv'], iterate=True).inventorySources().list( advertiserId=lookup_id(advertiser[0])).execute()
def targeting_commit(edits): for edit in edits: try: if edit.get("line_item"): print("API LINE ITEM:", edit["line_item"]) response = API_DV360(project.task["auth_dv"]).advertisers( ).lineItems().bulkEditLineItemAssignedTargetingOptions( **edit["parameters"]).execute() edit["success"] = len( response["createdAssignedTargetingOptions"]) elif edit.get("advertiser"): print("API ADVERTISER:", edit["advertiser"]) response = API_DV360(project.task["auth_dv"]).advertisers( ).bulkEditAdvertiserAssignedTargetingOptions( **edit["parameters"]).execute() edit["success"] = len( response["createdAssignedTargetingOptions"]) elif edit.get("partners"): print("API PARTNER:", edit["partner"]) response = API_DV360(project.task["auth_dv"]).partners( ).bulkEditPartnerAssignedTargetingOptions( **edit["parameters"]).execute() edit["success"] = len( response["createdAssignedTargetingOptions"]) except Exception as e: edit["error"] = str(e) finally: edit_log(edit) edit_log()
def load_bulk(): # TODO: incorporate filters into line item fetch line_items = [ lookup_id(p[0]) for p in get_rows( project.task['auth_sheets'], { 'sheets': { 'sheet': project.task['sheet'], 'tab': 'Line Items', 'range': 'A2:A' } }) ] parameters = get_rows(project.task["auth_bigquery"], { "bigquery": { "dataset": project.task["dataset"], "query": "SELECT advertiserId, lineItemId FROM `{dataset}.DV_LineItems`" .format(**project.task) } }, as_object=True) for parameter in parameters: yield from API_DV360( project.task["auth_dv"], iterate=True).advertisers().lineItems( ).bulkListLineItemAssignedTargetingOptions( advertiserId=str(parameter['advertiserId']), lineItemId=str(parameter['lineItemId']), ).execute()
def dv_insertion_order_load_multiple(): campaigns = set([ lookup_id(row[0]) for row in get_rows( config, task["auth_sheets"], { "sheets": { "sheet": task["sheet"], "tab": "DV Campaigns", "header": False, "range": "A2:A" } }) ]) rows = get_rows( config, task["auth_sheets"], { "sheets": { "sheet": task["sheet"], "tab": "DV Advertisers", "header": False, "range": "A2:A" } }) # String for filtering which entityStatus enums we want to see in the sheet for row in rows: for record in API_DV360( config, task["auth_dv"], iterate=True ).advertisers().insertionOrders( ).list(advertiserId=lookup_id(row[0]), filter= 'entityStatus="ENTITY_STATUS_PAUSED" OR entityStatus="ENTITY_STATUS_ACTIVE" OR entityStatus="ENTITY_STATUS_DRAFT"' ).execute(): if not campaigns or record['campaignId'] in campaigns: yield record
def load_multiple(): #partners = get_rows( # project.task['auth_sheets'], # { 'sheets': { # 'sheet': project.task['sheet'], # 'tab': 'Partners', # 'range': 'A2:A' # }} #) #for partner in partners: # yield from API_DV360( # project.task['auth_dv'], # iterate=True # ).firstAndThirdPartyAudiences().list( # partnerId=lookup_id(partner[0]) # ).execute() advertisers = get_rows( project.task['auth_sheets'], { 'sheets': { 'sheet': project.task['sheet'], 'tab': 'Advertisers', 'range': 'A2:A' } }) for advertiser in advertisers: yield from API_DV360( project.task['auth_dv'], iterate=True).firstAndThirdPartyAudiences().list( advertiserId=lookup_id(advertiser[0])).execute()
def line_item_load_multiple(): campaigns = set([ lookup_id(row[0]) for row in get_rows( project.task["auth_sheets"], { "sheets": { "sheet": project.task["sheet"], "tab": "Campaigns", "range": "A2:A" } }) ]) rows = get_rows( project.task["auth_sheets"], { "sheets": { "sheet": project.task["sheet"], "tab": "Advertisers", "range": "A2:A" } }) # String for filtering which entityStatus enums we want to see in the sheet for row in rows: for record in API_DV360( project.task["auth_dv"], iterate=True ).advertisers().lineItems( ).list(advertiserId=lookup_id(row[0]), filter= 'entityStatus = "ENTITY_STATUS_ARCHIVED" OR entityStatus="ENTITY_STATUS_PAUSED" OR entityStatus="ENTITY_STATUS_ACTIVE" OR entityStatus="ENTITY_STATUS_DRAFT"' ).execute(): if not campaigns or record['campaignId'] in campaigns: yield record
def get_option_list(self, targeting_type): if targeting_type not in self.options_cache: self.options_cache[targeting_type] = list( API_DV360( self.auth, iterate=True).targetingTypes().targetingOptions().list( advertiserId=str(self.advertiser), targetingType=targeting_type).execute()) return self.options_cache[targeting_type]
def execute(self): body = self.get_body() if body: if self.lineitem: return API_DV360(self.auth, ).advertisers().lineItems( ).bulkEditLineItemAssignedTargetingOptions( lineItemId=str(self.lineitem), advertiserId=str(self.advertiser), ).execute() elif self.advertiser: return API_DV360( self.auth, ).advertisers().bulkEditAdvertiserAssignedTargetingOptions( advertiserId=str(self.advertiser), ).execute() elif self.partner: return API_DV360(self.auth).partners( ).bulkEditPartnerAssignedTargetingOptions(partnerId=str( self.partner), ).execute()
def campaign_commit(patches): for patch in patches: if not patch.get('campaign'): continue print('API CALL', patch['action'], patch['advertiser'], patch['campaign']) try: if patch['action'] == 'DELETE': response = API_DV360( project.task['auth_dv']).advertisers().campaigns().delete( **patch['parameters']).execute() patch['success'] = response elif patch['action'] == 'PATCH': response = API_DV360(project.task['auth_dv']).advertisers().campaigns().patch( **patch['parameters']).execute() patch['success'] = response['campaignId'] except Exception as e: patch['error'] = str(e) finally: patch_log(patch) patch_log()
def lineitem_get_v1(auth, advertiser_id, lineitem_id): """Gets a DV360 Line Item Args: auth: StarThinker authentication scheme advertiser_id: ID of the advertiser of the line item lineitem_id: ID of the line item Returns: Line Item from the DV360 API """ return API_DV360(auth).advertisers().lineItems().get( advertiserId=advertiser_id, lineItemId=lineitem_id).execute()
def lineitem_patch_v1(auth, patch, li): """Patches a DV360 Line Item Args: auth: StarThinker authentication scheme patch: List of field names to patch li: Line item with updates to push Returns: Updated Line Item """ return API_DV360(auth).advertisers().lineItems().patch( advertiserId=li['advertiserId'], lineItemId=li['lineItemId'], updateMask=patch, body=li).execute()
def load_multiple(): for row in get_rows( project.task['auth_sheets'], { 'sheets': { 'sheet': project.task['sheet'], 'tab': 'Partners', 'header': False, 'range': 'A2:A' } }): if row: yield from API_DV360( project.task['auth_dv'], iterate=True).advertisers().list( partnerId=lookup_id(row[0])).execute()
def campaign_load_multiple(): rows = get_rows( project.task['auth_sheets'], { 'sheets': { 'sheet': project.task['sheet'], 'tab': 'Advertisers', 'range': 'A2:A' } }) for row in rows: yield from API_DV360(project.task['auth_dv'], iterate=True).advertisers().campaigns().list( advertiserId=lookup_id(row[0])).execute()
def creative_load_multiple(): rows = get_rows( project.task["auth_sheets"], { "sheets": { "sheet": project.task["sheet"], "tab": "Advertisers", "range": "A2:A" } }) for row in rows: yield from API_DV360(project.task["auth_dv"], iterate=True).advertisers().creatives().list( advertiserId=lookup_id(row[0])).execute()
def load_multiple(): advertisers = get_rows( project.task['auth_sheets'], { 'sheets': { 'sheet': project.task['sheet'], 'tab': 'Advertisers', 'range': 'A2:A' } }) for advertiser in advertisers: yield from API_DV360( project.task['auth_dv'], iterate=True).advertisers().negativeKeywordLists().list( advertiserId=lookup_id(advertiser[0])).execute()
def insertion_order_load_multiple(): for row in get_rows( project.task["auth_sheets"], { "sheets": { "sheet": project.task["sheet"], "tab": "Advertisers", "header": False, "range": "A2:A" } }): if row: yield from API_DV360( project.task["auth_dv"], iterate=True).advertisers().insertionOrders().list( advertiserId=lookup_id(row[0])).execute()
def load_multiple(): for row in get_rows( config, task['auth_sheets'], { 'sheets': { 'sheet': task['sheet'], 'tab': 'DV Partners', 'header': False, 'range': 'A2:A' } }): if row: yield from API_DV360( config, task['auth_dv'], iterate=True).customBiddingAlgorithms().list( partnerId=lookup_id(row[0])).execute()
def load_multiple(): advertisers = get_rows( project.task['auth_sheets'], { 'sheets': { 'sheet': project.task['sheet'], 'tab': 'Advertisers', 'header': False, 'range': 'A2:A' } }) for advertiser in advertisers: yield from API_DV360( project.task['auth_dv'], iterate=True).combinedAudiences().list( advertiserId=lookup_id(advertiser[0])).execute()
def load_multiple(): for row in get_rows( config, task['auth_sheets'], { 'sheets': { 'sheet': task['sheet'], 'tab': 'DV Partners', 'header': False, 'range': 'A2:A' } }): if row: yield from API_DV360( config, task['auth_dv'], iterate=True).advertisers().list( partnerId=lookup_id(row[0]), filter='entityStatus="ENTITY_STATUS_ACTIVE"').execute( )
def load_multiple(): advertisers = get_rows( config, task['auth_sheets'], { 'sheets': { 'sheet': task['sheet'], 'tab': 'Advertisers', 'header': False, 'range': 'A2:A' } }) for advertiser in advertisers: yield from API_DV360( config, task['auth_dv'], iterate=True).firstAndThirdPartyAudiences().list( advertiserId=lookup_id(advertiser[0])).execute()
def line_item_load_multiple(): rows = get_rows( project.task["auth_sheets"], { "sheets": { "sheet": project.task["sheet"], "tab": "Advertisers", "range": "A2:A" } }) # String for filtering which entityStatus enums we want to see in the sheet filter_string = 'entityStatus = "ENTITY_STATUS_ARCHIVED" OR entityStatus="ENTITY_STATUS_PAUSED" OR entityStatus="ENTITY_STATUS_ACTIVE" OR entityStatus="ENTITY_STATUS_DRAFT"' for row in rows: yield from API_DV360( project.task["auth_dv"], iterate=True).advertisers().lineItems().list( advertiserId=lookup_id(row[0]), filter=filter_string).execute()
def load_multiple(): advertisers = get_rows( project.task['auth_sheets'], { 'sheets': { 'sheet': project.task['sheet'], 'tab': 'Advertisers', 'range': 'A1:A' } }) for advertiser in advertisers: for targeting_type in TARGETING_TYPES: yield from API_DV360( project.task['auth_dv'], iterate=True).targetingTypes().targetingOptions().list( advertiserId=lookup_id(advertiser[0]), targetingType=targeting_type).execute()
def load_bulk(): advertisers = [ lookup_id(p[0]) for p in get_rows( project.task['auth_sheets'], { 'sheets': { 'sheet': project.task['sheet'], 'tab': 'Advertisers', 'range': 'A2:A' } }) ] for advertiser in advertisers: yield from API_DV360(project.task["auth_dv"], iterate=True).advertisers( ).bulkListAdvertiserAssignedTargetingOptions( advertiserId=str(advertiser)).execute()
def insertion_order_load_multiple(): for row in get_rows( config, task["auth_sheets"], { "sheets": { "sheet": task["sheet"], "tab": "Advertisers", "header": False, "range": "A2:A" } }): if row: yield from API_DV360( config, task["auth_dv"], iterate=True ).advertisers().insertionOrders().list( advertiserId=lookup_id(row[0]), filter= 'entityStatus="ENTITY_STATUS_PAUSED" OR entityStatus="ENTITY_STATUS_ACTIVE" OR entityStatus="ENTITY_STATUS_DRAFT"' ).execute()