Exemplo n.º 1
0
def TempAnalyzePlacement(placement):
    isLMA = PlacementUtils.checkLMA(Api, placement)
    if isLMA:
        placement = PlacementUtils.getPlacement(Api, placement["id"])
        date = datetime.datetime(2019, 2, 1)
        placementStartDate = UtilUtils.placementDateToDatetime(
            placement["pricingSchedule"]["startDate"])
        if placementStartDate > date:
            try:
                if "enabledVideoFormats" not in placement["videoSettings"][
                        "transcodeSettings"]:
                    return True
                placement["videoSettings"]["transcodeSettings"][
                    "enabledVideoFormats"] = {
                        'kind': 'dfareporting#transcodeSetting',
                        'enabledVideoFormats': []
                    }
            except:
                try:
                    placement["videoSettings"]["transcodeSettings"] = {
                        'kind': 'dfareporting#transcodeSetting',
                        'enabledVideoFormats': []
                    }
                except:
                    placement["videoSettings"] = {}

            PlacementUtils.updatePlacement(
                Api, {"videoSettings": placement["videoSettings"]},
                placement["id"])
            return True
        else:
            return True
    return False
Exemplo n.º 2
0
def checkIfTrafficked(Api, placement,csdDict):
    def getCSDCreatives():
        print(placement["id"])
        creativeArray = csdDict.loc[csdDict["Id"] == numpy.int64(placement["id"])].iloc[0].values.tolist()
        creativeArray = creativeArray[9:len(creativeArray)]
        creativeArray = [x for x in creativeArray if isinstance(x,str)]
        return creativeArray
    from v3modules import AdUtils, CreativeUtils, UtilUtils
    print("checking ", placement["name"])
    import datetime
    import numpy
    isTrafficked = {"ad_Start_Time":"Not Trafficked","ad_End_Time":"Not Trafficked","creative_date":"Not Trafficked","DCM":"Not Trafficked","CSD":False,"placement_start_date":placement["pricingSchedule"]["startDate"],"placement_end_date":placement["pricingSchedule"]["endDate"]}
    placementAds = AdUtils.listAd(Api, {"placementIds":placement["id"]},True)
    try:
        if len(placementAds) == 0:
            return isTrafficked
        for ads in placementAds:
            try:
                creativeAssignments = ads["creativeRotation"]["creativeAssignments"]
            except:
                continue
            for creative in creativeAssignments:
                print(creative)
                creativeID = creative["creativeId"]
                creativeElement = CreativeUtils.getCreative(Api, creativeID)
                timestamp = int(creativeElement["lastModifiedInfo"]["time"]) / 1e3
                creativeName = creativeElement["name"]
                csdCreatives = getCSDCreatives()
                print(csdCreatives)
                creativeNameToTest = "»".join(creativeName.split("»")[:len(creativeName.split("»"))-3])
                creativeTestingString = None
                for element in csdCreatives:
                    creativeTestingString = "»".join(element.split("»")[:len(element.split("»"))-3])
                    print(creativeNameToTest, "|", creativeTestingString)
                    if creativeNameToTest == creativeTestingString:
                        isTrafficked = {"ad_Start_Time":UtilUtils.formatDateTime(ads["startTime"]),"ad_End_Time":UtilUtils.formatDateTime(ads["endTime"]),"creative_date":datetime.datetime.fromtimestamp(timestamp).strftime('%m/%d/%y %I:%M %p'),"DCM":creativeName,"CSD":True,"placement_start_date":placement["pricingSchedule"]["startDate"],"placement_end_date":placement["pricingSchedule"]["endDate"]}
                        return isTrafficked

                isTrafficked = {"ad_Start_Time":UtilUtils.formatDateTime(ads["startTime"]),"ad_End_Time":UtilUtils.formatDateTime(ads["endTime"]),"creative_date":datetime.datetime.fromtimestamp(timestamp).strftime('%m/%d/%y %I:%M %p'),"DCM":creativeName,"CSD":creativeTestingString,"placement_start_date":placement["pricingSchedule"]["startDate"],"placement_end_date":placement["pricingSchedule"]["endDate"]}
    except:
                isTrafficked = {"ad_Start_Time":"Could Not Find Please Check CSD","ad_End_Time":"Could Not Find Please Check CSD","creative_date":"Could Not Find Please Check CSD","DCM":"Could Not Find Please Check CSD","CSD":"Could Not Find Please Check CSD","placement_start_date":"Could Not Find Please Check CSD","placement_end_date":"Could Not Find Please Check CSD"}

    return isTrafficked
Exemplo n.º 3
0
 def getCSDCreatives(placementId, campaignSheet):
     if type(campaignSheet) == str:
         placementObject = {
             "campaignName":
             campaignName,
             "placementName":
             row["placement_name"],
             "placementId":
             placementId,
             "start_date":
             UtilUtils.TimestampToPlacementDate(row["start_date"]),
             "end_date":
             UtilUtils.TimestampToPlacementDate(row["end_date"]),
             "error":
             "Campaign Missing or Mispelled on CSD"
         }
         return placementObject
     try:
         creativeArray = campaignSheet.loc[
             campaignSheet["Id"] == numpy.int64(
                 placementId)].iloc[0].values.tolist()
     except:
         placementObject = {
             "campaignName":
             campaignName,
             "placementName":
             row["placement_name"],
             "placementId":
             placementId,
             "start_date":
             UtilUtils.TimestampToPlacementDate(row["start_date"]),
             "end_date":
             UtilUtils.TimestampToPlacementDate(row["end_date"]),
             "error":
             "Placement Not on CSD"
         }
         return placementObject
     creativeArray = creativeArray[9:len(creativeArray)]
     creativeArray = [x for x in creativeArray if isinstance(x, str)]
     if len(creativeArray) == 0:
         placementObject = {
             "campaignName":
             campaignName,
             "placementName":
             row["placement_name"],
             "placementId":
             placementId,
             "start_date":
             UtilUtils.TimestampToPlacementDate(row["start_date"]),
             "end_date":
             UtilUtils.TimestampToPlacementDate(row["end_date"]),
             "error":
             "No creative direction on CSD"
         }
         return placementObject
     return None
from v3modules import PlacementUtils, ChangeLogUtils, DCMAPI, CampaignUtils, UtilUtils
import pandas as pd
import datetime
import time

start = time.time()

Api = DCMAPI.DCMAPI()

FinalPlacementArray = []
CampaignObject = {}
delta = datetime.timedelta(minutes=20)
# sixMonthsAgo = datetime.datetime.today() - delta
twoHoursAgo = datetime.datetime.now() - delta
minChangeTime = UtilUtils.datetimeToString(twoHoursAgo)
firstListValues = {
    "action": "ACTION_UPDATE",
    "objectType": "OBJECT_PLACEMENT",
    "minChangeTime": minChangeTime
}
secondListValues = {
    "action": "ACTION_CREATE",
    "objectType": "OBJECT_PLACEMENT",
    "minChangeTime": minChangeTime
}

updateChangeLogs = [
    x for x in ChangeLogUtils.getChangeLog(Api, firstListValues)
    if x["fieldName"] == "Name"
]
createChangeLogs = ChangeLogUtils.getChangeLog(Api, secondListValues)
Exemplo n.º 5
0
def updateSheet(sheet, placementList):
    global RemovedPlacements
    try:
        sheet['Creative\n Rotation'] = sheet['Creative\n Rotation'].apply(
            floatToPercent)
    except:
        sheet['Creative Rotation'] = sheet['Creative Rotation'].apply(
            floatToPercent)
    sheet["Start Date"] = sheet["Start Date"].apply(datetimeToDate)
    sheet["End Date"] = sheet["End Date"].apply(datetimeToDate)
    DCMidList = set([int(x["id"]) for x in placementList])
    CSDidList = set(sheet["Id"].tolist())
    campaignName = sheet.iloc[0]["Campaign"]
    placementsToAdd = DCMidList.difference(CSDidList)
    # placementsToRemove = CSDidList.difference(DCMidList)
    for placement in CSDidList.copy():
        currentPlacement = PlacementUtils.getPlacement(Api, placement)
        print(currentPlacement["name"])
        CSDPlacement = sheet[sheet.Id == placement]
        if checkPlacementEndDate(
                currentPlacement["pricingSchedule"]["endDate"]):
            CSDPlacement["End Date"] = currentPlacement["pricingSchedule"][
                "endDate"]
            RemovedPlacements = RemovedPlacements.append(CSDPlacement)
            sheet = sheet[sheet.Id != placement]
    CSDidList = set(sheet["Id"].tolist())
    sheet = sheet.reset_index(drop=True)
    for placement in CSDidList.copy():
        CSDPlacement = sheet[sheet.Id == placement]
        currentPlacement = PlacementUtils.getPlacement(Api, placement)
        print(currentPlacement["name"])
        indexOfPlacement = sheet[sheet.Id == placement].index[0] + 2
        if placement in DCMidList:
            if checkPlacementEndDate(
                    currentPlacement["pricingSchedule"]["endDate"]):
                CSDPlacement["End Date"] = currentPlacement["pricingSchedule"][
                    "endDate"]
                RemovedPlacements = RemovedPlacements.append(CSDPlacement)
                sheet = sheet[sheet.Id != placement]
                sheet = sheet.reset_index(drop=True)
                continue
            DCMidList.remove(placement)
            CSDidList.remove(placement)
            CSDPlacementInfo = {
                "D": CSDPlacement["Name"].values[0],
                "E": CSDPlacement["Start Date"].values[0],
                "F": CSDPlacement["End Date"].values[0],
                "H": CSDPlacement["Dimensions"].values[0]
            }
            DCMPlacementInfo = {
                "D":
                currentPlacement["name"],
                "E":
                UtilUtils.formatPlacementDate(
                    currentPlacement["pricingSchedule"]["startDate"]),
                "F":
                UtilUtils.formatPlacementDate(
                    currentPlacement["pricingSchedule"]["endDate"]),
                "H":
                determineDimensions(currentPlacement)
            }
            for column in CSDPlacementInfo:
                #Sometimes Placement dates can come in as strings, or Datetimes, so we have to convert them just in case.
                if type(CSDPlacementInfo[column]) == datetime.datetime:
                    CSDPlacementInfo[column] = datetime.datetime.strftime(
                        CSDPlacementInfo[column], "%m/%d/%Y")
                if type(CSDPlacementInfo[column]) == np.datetime64 or (
                        type(CSDPlacementInfo[column]) == str and
                    (column == "E" or column == "F")):
                    CSDPlacementInfo[column] = pd.to_datetime(
                        str(CSDPlacementInfo[column])).strftime("%m/%d/%Y")
                if CSDPlacementInfo[column] != DCMPlacementInfo[column]:
                    if column == "D" and "Carat" in DCMPlacementInfo[column]:
                        continue
                    rowColumn = "{column}{indexOfPlacement}".format(
                        column=column, indexOfPlacement=indexOfPlacement)
                    ChangesArray.append({
                        "column": rowColumn,
                        "data": DCMPlacementInfo[column],
                        "format": yellow
                    })
                print(column, CSDPlacementInfo[column])
                print(column, DCMPlacementInfo[column])
    if placementsToAdd:
        #RowNum accounts for the fact that the Dataframe is 0-indexed, and the Headers are removed.
        rowNum = len(sheet) + 2
        for placement in placementsToAdd:
            currentPlacement = PlacementUtils.getPlacement(Api, placement)
            if checkPlacementEndDate(
                    currentPlacement["pricingSchedule"]["endDate"]):
                continue
            DCMPlacementInfo = {
                "A":
                campaignName,
                "B":
                PlacementUtils.getAndFormatSite(Api, currentPlacement),
                "C":
                placement,
                "D":
                currentPlacement["name"],
                "E":
                UtilUtils.formatPlacementDate(
                    currentPlacement["pricingSchedule"]["startDate"]),
                "F":
                UtilUtils.formatPlacementDate(
                    currentPlacement["pricingSchedule"]["endDate"]),
                "G":
                currentPlacement["compatibility"].capitalize(),
                "H":
                determineDimensions(currentPlacement)
            }
            for column in DCMPlacementInfo:
                rowColumn = "{column}{indexOfPlacement}".format(
                    column=column, indexOfPlacement=rowNum)
                ChangesArray.append({
                    "column": rowColumn,
                    "data": DCMPlacementInfo[column],
                    "format": yellow
                })
            rowNum += 1
    # if placementsToRemove:
    #     for placement in placementsToRemove:
    #         #the two functions in the same way as the RowNum in the previous "if" statement
    #         indexOfPlacement = sheet[sheet.Id == placement].index[0] + 2
    #         CSDPlacement = sheet[sheet.Id == placement]
    #         CSDPlacementInfo = {"A":CSDPlacement["Campaign"].values[0],"B":CSDPlacement["Site"].values[0],"C":CSDPlacement["Id"].values[0],"D":CSDPlacement["Name"].values[0], "E":CSDPlacement["Start Date"].values[0], "F":CSDPlacement["End Date"].values[0],"G":CSDPlacement["Compatibility"].values[0], "H":CSDPlacement["Dimensions"].values[0]}
    #         for column in CSDPlacementInfo:
    #             rowColumn = "{column}{indexOfPlacement}".format(column=column,indexOfPlacement=indexOfPlacement)
    #             ChangesArray.append({"column":rowColumn,"data":CSDPlacementInfo[column],"format":red})

    return sheet
Exemplo n.º 6
0
    adList = [
        x for x in adList
        if ("11:59" in x["endTime"] or "3:59" in x["endTime"])
        and "Brand-neutral" not in x['name'] and "TRACKING" not in x["name"]
        and "AD_SERVING_DEFAULT_AD" not in x["type"]
        and "AD_SERVING_TRACKING" not in x["type"]
    ]
    adList = [
        x for x in adList if compareAdDates(x) and checkCampaignEndDate(x)
    ]
    adList = [{
        "name": x["name"],
        "type": x["type"],
        "id": x["id"],
        "advertiser": advertiserSet[currentAdvertiser],
        "start_time": UtilUtils.formatDateTime(x["startTime"]),
        "end_time": UtilUtils.formatDateTime(x["endTime"])
    } for x in adList if x["deliverySchedule"]['hardCutoff'] == False]
    if len(adList) > 0:
        finalAdList.extend(adList)

if len(finalAdList) > 0:
    import pandas
    df = pandas.DataFrame(data=finalAdList)
    df = df[["advertiser", "id", "name", "start_time", "end_time", "type"]]
    writer = pandas.ExcelWriter('Hard Cut Off Report.xlsx',
                                engine='xlsxwriter')
    workbook = writer.book
    df.to_excel(writer, sheet_name="Info", index=False)
    worksheet = writer.sheets['Info']
    writer.save()
from v3modules import PlacementUtils, ChangeLogUtils, DCMAPI, CampaignUtils, UtilUtils
import pandas as pd
import datetime, re
import time

start = time.time()

Api = DCMAPI.DCMAPI()

delta = datetime.timedelta(minutes = 30)
twoHoursAgo = datetime.datetime.now() - delta
minChangeTime = UtilUtils.datetimeToString(twoHoursAgo)
maxChangeTime = UtilUtils.datetimeToString(datetime.datetime.now())
print(minChangeTime)
print(maxChangeTime)
counter = 1
while True:
    correctionTime = UtilUtils.datetimeToString(datetime.datetime.now())
    firstListValues = {"action":"ACTION_UPDATE","objectType":"OBJECT_PLACEMENT","minChangeTime":minChangeTime}
    secondListValues = {"action":"ACTION_CREATE","objectType":"OBJECT_PLACEMENT","minChangeTime":minChangeTime}    
    updateChangeLogs = [x for x in ChangeLogUtils.getChangeLog(Api, firstListValues) if x["fieldName"] == "Name"]
    createChangeLogs = ChangeLogUtils.getChangeLog(Api, secondListValues)

    print(len(updateChangeLogs))
    print(len(createChangeLogs))
    def fitPlacement(changeLog, action):
        finalObject = {}
        placement = PlacementUtils.getPlacement(Api, changeLog["objectId"])
        def getCampaignName(campaignID):
            global CampaignObject
            try:
Exemplo n.º 8
0
        LMACampaignObj[campaign["id"]] = campaign["name"]
        return True
    else:
        NotLMAObj[campaign["id"]] = campaign["name"]
        return False


placementList = PlacementUtils.listPlacement(Api, listValues)
placementList = [
    {
        "Placement Name":
        x["name"],
        "Placement Id":
        x["id"],
        "Placement Start Date":
        UtilUtils.formatPlacementDate(x["pricingSchedule"]["startDate"]),
        "Placement End Date":
        UtilUtils.formatPlacementDate(x["pricingSchedule"]["endDate"]),
        "Campaign ID":
        x["campaignId"],
        "Campaign Name":
        LMACampaignObj[x["campaignId"]]
    } for x in placementList
    if lmaCampaignCheck(x) and ("_TPS_" in x["name"] or "»TP»" in x["name"])
]

import pandas as pd

df = pd.DataFrame(data=placementList)
df = df[[
    "Campaign Name",
        adsToUse = englishAds
    for code in videocodes:
        if code in name:
            if "Hispanic" in campaignName:
                adsToUse = videoHispAds
                break
            else:
                adsToUse = videoAds
                break
    if len(campaignAdList) == 0:
        adsToUse = getModifiedAds(adsToUse, campaignAdList)
    for ads in adsToUse:
        copy = AdUtils.copy(Api, ads, campaignId)
        AdUtils.insertAd(copy, Api)

listValues = {"action": "ACTION_CREATE", "objectType":"OBJECT_PLACEMENT", "minChangeTime":UtilUtils.getYesterday()}
Createlogs = ChangeLogUtils.getChangeLog(Api, listValues)
Createlogs = [x for x in Createlogs if "»SS»" in x["newValue"]]
listValues = {"action": "ACTION_UPDATE", "objectType":"OBJECT_PLACEMENT", "minChangeTime":UtilUtils.getYesterday()}
UpdateLogs = ChangeLogUtils.getChangeLog(Api, listValues)
UpdateLogs = [x for x in UpdateLogs if x["fieldName"] == "Name" and "»TP»" in x["oldValue"] and "»SS»" in x["newValue"]]
finalLogs = Createlogs + UpdateLogs
length = str(len(finalLogs))
print(length + " checking each placement Now")
finalLogs = [checkCampaign(x) for x in finalLogs if checkSubAccount(x)]
finalLogs = [x for x in finalLogs if x != None]
length = str(len(finalLogs))
print(length)

finalPlacementArray = []
for placement in finalLogs:
Exemplo n.º 10
0
from v3modules import DCMAPI, ChangeLogUtils, AdUtils, UtilUtils, CampaignUtils
import pandas

Api = DCMAPI.DCMAPI()
listValues = {
    "action": "ACTION_UPDATE",
    "objectType": "OBJECT_AD",
    "minChangeTime": UtilUtils.getBeginningofYear()
}
logs = ChangeLogUtils.getChangeLog(Api, listValues)
deletedLogs = [
    x for x in logs
    if x["fieldName"] == "Active status" and x["newValue"] == "false"
]
changeLogArray = []
for log in deletedLogs:
    changeLog = [x for x in logs if x["objectId"] == log["objectId"]]
    commentChange = (len(
        [x for x in changeLog if "inactivity" in x["newValue"]]) > 0)
    if commentChange:
        changeLogArray.extend(
            [x for x in changeLog if x["fieldName"] == "Active status"])

for log in changeLogArray:
    obj = {}
    currentAd = AdUtils.getAd(Api, log["objectId"])
    adEndDate = UtilUtils.stringToDateTimeObject(currentAd['endTime'])
    changeTime = UtilUtils.stringToDateTimeObject(log['changeTime'])
    if changeTime < adEndDate:
        test = 0
from v3modules import DCMAPI, ChangeLogUtils, UtilUtils, PlacementUtils, CampaignUtils
import re,pandas
Api = DCMAPI.DCMAPI()
listValues = {"objectType":"OBJECT_AD", "minChangeTime":UtilUtils.getBeginningofWeek()}
logs = ChangeLogUtils.getChangeLog(Api, listValues)
logs = [re.sub(", active: true|id: ","",x["newValue"]) for x in logs if x["fieldName"] == 'Placement assignment']
logs = [x for x in logs if x != ""]
logs = list(set(logs))

def analyzePlacements(placementId):
    placement = PlacementUtils.getPlacement(Api, placementId)
    if "»SS»" not in placement["name"]:
        return None
    campaignId = placement["campaignId"]
    campaign = CampaignUtils.getCampaign(Api, campaignId)
    regex = re.compile("[1-5]L(M|G)")
    if regex.search(campaign["name"]): 
        return {"Campaign Name":campaign["name"], "Placement Id": placement["id"], "Placement Name":placement["name"]}
    else:
        return None

logs = [analyzePlacements(x) for x in logs]
logs = [x for x in logs if x != None]

df = pandas.DataFrame(data=logs)
df = df[["Campaign Name","Placement Id","Placement Name"]]
writer = pandas.ExcelWriter('Placement Report.xlsx',engine='xlsxwriter')
df.to_excel(writer, sheet_name ="Info", index = False)
writer.save()