コード例 #1
0
def associate_with_creative(lineitem, creative):
    dfp_association_service = DfpService("LineItemCreativeAssociationService")

    lineitem_id = lineitem["id"]
    creative_id = creative["id"]

    values = [{
        "key": "lineItemId",
        "value": {
            "xsi_type": "NumberValue",
            "value": lineitem_id,
        },
    }, {
        "key": "creativeId",
        "value": {
            "xsi_type": "NumberValue",
            "value": creative_id,
        },
    }]
    query = "WHERE lineItemId = :lineItemId AND creativeId = :creativeId"
    statement = dfp.FilterStatement(query, values, 1)

    response = dfp_association_service.execute(
        "getLineItemCreativeAssociationsByStatement", statement.ToStatement())

    if ("results" in response and len(response["results"])):
        association = response["results"][0]
    else:
        associations = dfp_association_service.execute(
            "createLineItemCreativeAssociations", [{
                "lineItemId": lineitem_id,
                "creativeId": creative_id,
            }])

        return associations[0]
コード例 #2
0
def get_order(user):
    dfp_order_service = DfpService("OrderService")
    advertiser = advertisers_service.upsert_advertiser(user)
    advertiser_id = advertiser.id

    if not advertiser_id:
        return None

    values = [{
        "key": "advertiserId",
        "value": {
            "xsi_type": "NumberValue",
            "value": advertiser_id,
        },
    }, {
        "key": "traffickerId",
        "value": {
            "xsi_type": "NumberValue",
            "value": g.dfp_selfserve_trafficker_id,
        },
    }]

    query = "WHERE advertiserId = :advertiserId AND traffickerId = :traffickerId"
    statement = dfp.FilterStatement(query, values, 1)

    response = dfp_order_service.execute(
                "getOrdersByStatement",
                statement.ToStatement())

    if ("results" in response and len(response["results"])):
        return response["results"][0]
    else:
        return None
コード例 #3
0
def get_order(user):
    dfp_order_service = DfpService("OrderService")
    advertiser = advertisers_service.upsert_advertiser(user)
    advertiser_id = advertiser.id

    if not advertiser_id:
        return None

    values = [{
        "key": "advertiserId",
        "value": {
            "xsi_type": "NumberValue",
            "value": advertiser_id,
        },
    }, {
        "key": "traffickerId",
        "value": {
            "xsi_type": "NumberValue",
            "value": g.dfp_selfserve_trafficker_id,
        },
    }]

    query = "WHERE advertiserId = :advertiserId AND traffickerId = :traffickerId"
    statement = dfp.FilterStatement(query, values, 1)

    response = dfp_order_service.execute("getOrdersByStatement",
                                         statement.ToStatement())

    if ("results" in response and len(response["results"])):
        return response["results"][0]
    else:
        return None
コード例 #4
0
def _perform_lineitem_action(action, query):
    dfp_lineitem_service = DfpService("LineItemService")
    statement = dfp.FilterStatement(query)
    response = dfp_lineitem_service.execute("performLineItemAction",
                                            {"xsi_type": action},
                                            statement.ToStatement())

    return response
コード例 #5
0
def _perform_lineitem_action(action, query):
    dfp_lineitem_service = DfpService("LineItemService")
    statement = dfp.FilterStatement(query)
    response = dfp_lineitem_service.execute(
        "performLineItemAction",
        {"xsi_type": action},
        statement.ToStatement())

    return response
コード例 #6
0
def create_lineitem(user, campaign):
    dfp_lineitem_service = DfpService("LineItemService")
    order = orders_service.upsert_order(user)

    try:
        lineitem = _campaign_to_lineitem(campaign, order=order)
    except ValueError as e:
        g.log.debug("unable to convert campaign to valid line item for campaign %s" % campaign._fullname)
        raise e
    lineitems = dfp_lineitem_service.execute("createLineItems", [lineitem])

    return lineitems[0]
コード例 #7
0
def create_lineitem(user, campaign):
    dfp_lineitem_service = DfpService("LineItemService")
    order = orders_service.upsert_order(user)

    try:
        lineitem = _campaign_to_lineitem(campaign, order=order)
    except ValueError as e:
        g.log.debug(
            "unable to convert campaign to valid line item for campaign %s" %
            campaign._fullname)
        raise e
    lineitems = dfp_lineitem_service.execute("createLineItems", [lineitem])

    return lineitems[0]
コード例 #8
0
def get_placement_by_name(name):
    dfp_placement_service = DfpService("PlacementService")

    values = [{"key": "name", "value": {"xsi_type": "TextValue", "value": name}}]

    query = "WHERE name = :name"
    statement = dfp.FilterStatement(query, values, 1)

    response = dfp_placement_service.execute("getPlacementsByStatement", statement.ToStatement())

    if "results" in response and len(response["results"]):
        return response["results"][0]
    else:
        return None
コード例 #9
0
def create_advertiser(user):
    dfp_company_service = DfpService("CompanyService")
    companies = dfp_company_service.execute("createCompanies", [{
        "name": user.name,
        "type": "ADVERTISER",
        "externalId": user._fullname,
    }])

    advertiser = companies[0]

    user.dfp_advertiser_id = advertiser["id"]
    user._commit()

    return advertiser
コード例 #10
0
def create_creative(user, link):
    dfp_creative_service = DfpService("CreativeService")
    advertiser = advertisers_service.upsert_advertiser(user)
    creative = _link_to_creative(link, advertiser=advertiser)

    response = dfp_creative_service.execute("createCreatives", [creative])

    if (response and len(response)):
        creative = response[0]
        link.dfp_creative_id = creative.id
        link._commit()

        return creative
    else:
        return None
コード例 #11
0
def create_creative(user, link):
    dfp_creative_service = DfpService("CreativeService")
    advertiser = advertisers_service.upsert_advertiser(user)
    creative = _link_to_creative(link, advertiser=advertiser)

    response = dfp_creative_service.execute("createCreatives", [creative])

    if (response and len(response)):
        creative = response[0]
        link.dfp_creative_id = creative.id
        link._commit()

        return creative
    else:
        return None
コード例 #12
0
def upsert_lineitem(user, campaign):
    dfp_lineitem_service = DfpService("LineItemService")
    lineitem = get_lineitem(campaign)

    if not lineitem:
        return create_lineitem(user, campaign)

    if lineitem["isArchived"]:
        raise ValueError("cannot update archived lineitem (lid: %s, cid: %s)" %
                (lineitem["id"], campaign._id))

    updated = _campaign_to_lineitem(campaign, existing=lineitem)
    lineitems = dfp_lineitem_service.execute("updateLineItems", [updated])

    return lineitems[0]
コード例 #13
0
def create_advertiser(user):
    dfp_company_service = DfpService("CompanyService")
    companies = dfp_company_service.execute("createCompanies",
                                            [{
                                                "name": user.name,
                                                "type": "ADVERTISER",
                                                "externalId": user._fullname,
                                            }])

    advertiser = companies[0]

    user.dfp_advertiser_id = advertiser["id"]
    user._commit()

    return advertiser
コード例 #14
0
def upsert_lineitem(user, campaign):
    dfp_lineitem_service = DfpService("LineItemService")
    lineitem = get_lineitem(campaign)

    if not lineitem:
        return create_lineitem(user, campaign)

    if lineitem["isArchived"]:
        raise ValueError("cannot update archived lineitem (lid: %s, cid: %s)" %
                         (lineitem["id"], campaign._id))

    updated = _campaign_to_lineitem(campaign, existing=lineitem)
    lineitems = dfp_lineitem_service.execute("updateLineItems", [updated])

    return lineitems[0]
コード例 #15
0
def bulk_upsert(users):
    inserts = filter(
        lambda user: not getattr(user, "dfp_advertiser_id", False), users)
    existing = filter(lambda user: getattr(user, "dfp_advertiser_id", False),
                      users)

    dfp_company_service = DfpService("CompanyService")
    companies = []

    if inserts:
        companies += dfp_company_service.execute(
            "createCompanies", [{
                "name": user.name,
                "type": "ADVERTISER",
                "externalId": user._fullname,
            } for user in inserts])

    if existing:
        statement = dfp.FilterStatement(
            "WHERE externalId IN (%s)" %
            ", ".join(["'" + user._fullname + "'" for user in existing]))
        while True:
            response = dfp_company_service.execute(
                "getCompaniesByStatement",
                statement.ToStatement(),
            )

            if "results" in response:
                companies += response["results"]

                statement.offset += dfp.SUGGESTED_PAGE_LIMIT
            else:
                break

    companies_by_fullname = {
        company.externalId: company
        for company in companies
    }

    for user in users:
        company = companies_by_fullname[user._fullname]
        user.dfp_advertiser_id = company.id
        user._commit()

    return companies
コード例 #16
0
def create_order(user):
    dfp_order_service = DfpService("OrderService")
    advertiser_id = getattr(user, "dfp_advertiser_id", None)

    if not advertiser_id:
        raise ValueError("user doesn't have a dfp advertiser account: %s" % user._id)

    orders = [{
        "name": "%s-selfserve" % user.name,
        "advertiserId": advertiser_id,
        "salespersonId": g.dfp_selfserve_salesperson_id,
        "traffickerId": g.dfp_selfserve_trafficker_id,
        "externalOrderId": user._id,
    }]

    orders = dfp_order_service.execute("createOrders", orders)

    return orders[0]
コード例 #17
0
def get_lineitem(campaign):
    dfp_lineitem_service = DfpService("LineItemService")

    values = [{
        "key": "externalId",
        "value": {
            "xsi_type": "TextValue",
            "value": campaign._fullname,
        },
    }]
    query = "WHERE externalId = :externalId"
    statement = dfp.FilterStatement(query, values, 1)
    response = dfp_lineitem_service.execute("getLineItemsByStatement",
                                            statement.ToStatement())

    if ("results" in response and len(response["results"])):
        return response["results"][0]
    else:
        return None
コード例 #18
0
def create_order(user):
    dfp_order_service = DfpService("OrderService")
    advertiser_id = getattr(user, "dfp_advertiser_id", None)

    if not advertiser_id:
        raise ValueError("user doesn't have a dfp advertiser account: %s" %
                         user._id)

    orders = [{
        "name": "%s-selfserve" % user.name,
        "advertiserId": advertiser_id,
        "salespersonId": g.dfp_selfserve_salesperson_id,
        "traffickerId": g.dfp_selfserve_trafficker_id,
        "externalOrderId": user._id,
    }]

    orders = dfp_order_service.execute("createOrders", orders)

    return orders[0]
コード例 #19
0
def by_id(creative_id):
    dfp_creative_service = DfpService("CreativeService")

    values = [{
        "key": "id",
        "value": {
            "xsi_type": "NumberValue",
            "value": creative_id,
        },
    }]

    query = "WHERE id = :id"
    statement = dfp.FilterStatement(query, values, 1).ToStatement()
    response = dfp_creative_service.execute("getCreativesByStatement", statement)

    if ("results" in response and len(response["results"])):
        return response["results"][0]
    else:
        return None
コード例 #20
0
def get_lineitem(campaign):
    dfp_lineitem_service = DfpService("LineItemService")

    values = [{
        "key": "externalId",
        "value": {
            "xsi_type": "TextValue",
            "value": campaign._fullname,
        },
    }]
    query = "WHERE externalId = :externalId"
    statement = dfp.FilterStatement(query, values, 1)
    response = dfp_lineitem_service.execute(
                    "getLineItemsByStatement",
                    statement.ToStatement())

    if ("results" in response and len(response["results"])):
        return response["results"][0]
    else:
        return None
コード例 #21
0
def by_id(creative_id):
    dfp_creative_service = DfpService("CreativeService")

    values = [{
        "key": "id",
        "value": {
            "xsi_type": "NumberValue",
            "value": creative_id,
        },
    }]

    query = "WHERE id = :id"
    statement = dfp.FilterStatement(query, values, 1).ToStatement()
    response = dfp_creative_service.execute("getCreativesByStatement",
                                            statement)

    if ("results" in response and len(response["results"])):
        return response["results"][0]
    else:
        return None
コード例 #22
0
def bulk_upsert(users):
    inserts = filter(lambda user: not getattr(user, "dfp_advertiser_id", False), users)
    existing = filter(lambda user: getattr(user, "dfp_advertiser_id", False), users)

    dfp_company_service = DfpService("CompanyService")
    companies = []

    if inserts:
        companies += dfp_company_service.execute("createCompanies", [{
            "name": user.name,
            "type": "ADVERTISER",
            "externalId": user._fullname,
        } for user in inserts])

    if existing:
        statement = dfp.FilterStatement(
            "WHERE externalId IN (%s)" % 
                ", ".join(["'" + user._fullname + "'" for user in existing]))
        while True:
            response = dfp_company_service.execute(
                "getCompaniesByStatement",
                statement.ToStatement(),
            )

            if "results" in response:
                companies += response["results"]

                statement.offset += dfp.SUGGESTED_PAGE_LIMIT
            else:
                break

    companies_by_fullname = {
        company.externalId: company
    for company in companies}

    for user in users:
        company = companies_by_fullname[user._fullname]
        user.dfp_advertiser_id = company.id
        user._commit()

    return companies
コード例 #23
0
def get_placement_by_name(name):
    dfp_placement_service = DfpService("PlacementService")

    values = [{
        "key": "name",
        "value": {
            "xsi_type": "TextValue",
            "value": name,
        },
    }]

    query = "WHERE name = :name"
    statement = dfp.FilterStatement(query, values, 1)

    response = dfp_placement_service.execute("getPlacementsByStatement",
                                             statement.ToStatement())

    if ("results" in response and len(response["results"])):
        return response["results"][0]
    else:
        return None
コード例 #24
0
def get_template_by_name(name):
    dfp_template_service = DfpService("CreativeTemplateService")

    values = [{
        "key": "name",
        "value": {
            "xsi_type": "TextValue",
            "value": name,
        },
    }]

    query = "WHERE name = :name"
    statement = dfp.FilterStatement(query, values, 1)

    response = dfp_template_service.execute(
                "getCreativeTemplatesByStatement",
                statement.ToStatement())

    if ("results" in response and len(response["results"])):
        return response["results"][0]
    else:
        return None
コード例 #25
0
def get_advertiser(user):
    advertiser_id = getattr(user, "dfp_advertiser_id", None)

    if not advertiser_id:
        return None

    values = [{
        "key": "id",
        "value": {
            "xsi_type": "NumberValue",
            "value": advertiser_id,
        },
    }]

    dfp_company_service = DfpService("CompanyService")
    statement = dfp.FilterStatement("WHERE id = :id", values, 1).ToStatement()
    response = dfp_company_service.execute("getCompaniesByStatement", statement)

    if "results" in response and len(response["results"]):
        return response["results"][0]
    else:
        return None
コード例 #26
0
def get_advertiser(user):
    advertiser_id = getattr(user, "dfp_advertiser_id", None)

    if not advertiser_id:
        return None

    values = [{
        "key": "id",
        "value": {
            "xsi_type": "NumberValue",
            "value": advertiser_id,
        },
    }]

    dfp_company_service = DfpService("CompanyService")
    statement = dfp.FilterStatement("WHERE id = :id", values, 1).ToStatement()
    response = dfp_company_service.execute("getCompaniesByStatement",
                                           statement)

    if "results" in response and len(response["results"]):
        return response["results"][0]
    else:
        return None
コード例 #27
0
def associate_with_creative(lineitem, creative):
    dfp_association_service = DfpService("LineItemCreativeAssociationService")

    lineitem_id = lineitem["id"]
    creative_id = creative["id"]

    values = [{
        "key": "lineItemId",
        "value": {
            "xsi_type": "NumberValue",
            "value": lineitem_id,
        },
    }, {
        "key": "creativeId",
        "value": {
            "xsi_type": "NumberValue",
            "value": creative_id,
        },
    }]
    query = "WHERE lineItemId = :lineItemId AND creativeId = :creativeId"
    statement = dfp.FilterStatement(query, values, 1)

    response = dfp_association_service.execute(
                    "getLineItemCreativeAssociationsByStatement",
                    statement.ToStatement())

    if ("results" in response and len(response["results"])):
        association = response["results"][0]
    else:
        associations = dfp_association_service.execute(
            "createLineItemCreativeAssociations",
            [{
                "lineItemId": lineitem_id,
                "creativeId": creative_id,
            }])

        return associations[0]
コード例 #28
0
def update_creative(link, creative):
    dfp_creative_service = DfpService("CreativeService")
    updated = _link_to_creative(link, existing=creative)
    creatives = dfp_creative_service.execute("updateCreatives", [updated])

    return creatives[0]
コード例 #29
0
def update_creative(link, creative):
    dfp_creative_service = DfpService("CreativeService")
    updated = _link_to_creative(link, existing=creative)
    creatives = dfp_creative_service.execute("updateCreatives", [updated])

    return creatives[0]
コード例 #30
0
def bulk_upsert(links):
    updates = filter(lambda user: getattr(user, "dfp_creative_id", False), links)
    inserts = filter(lambda user: not getattr(user, "dfp_creative_id", False), links)

    dfp_creative_service = DfpService("CreativeService")
    creatives = []

    if updates:
        existing_creatives = {}
        statement = dfp.FilterStatement(
            "WHERE id IN (%s)" % 
                ", ".join([str(link.dfp_creative_id) for link in updates]))

        while True:
            response = dfp_creative_service.execute(
                "getCreativesByStatement",
                statement.ToStatement(),
            )

            if "results" in response:
                for creative in response["results"]:
                    existing_creatives[creative.id] = creative
                statement.offset += dfp.SUGGESTED_PAGE_LIMIT
            else:
                break


        updated = dfp_creative_service.execute("updateCreatives", [
            _link_to_creative(
                link=link,
                existing=existing_creatives[link.dfp_creative_id],
            )
        for link in updates])

        creatives += updated

    if inserts:
        authors = Account._byID([link.author_id for link in inserts], return_dict=False)
        advertisers = advertisers_service.bulk_upsert(authors)
        advertisers_by_author = {
            advertiser.externalId: advertiser
        for advertiser in advertisers}

        inserted = dfp_creative_service.execute("createCreatives", [
            _link_to_creative(
                link=link,
                advertiser=advertisers_by_author[
                    Account._fullname_from_id36(to36(link.author_id))
                ],
            )
        for link in inserts])

        creatives += inserted

    creatives_by_fullname = {
        utils.get_template_variable(creative, "link_id"): creative
    for creative in creatives}

    for link in links:
        creative = creatives_by_fullname[link._fullname]
        link.dfp_creative_id = creative.id
        link._commit()

    return creatives
コード例 #31
0
def bulk_upsert(links):
    updates = filter(lambda user: getattr(user, "dfp_creative_id", False),
                     links)
    inserts = filter(lambda user: not getattr(user, "dfp_creative_id", False),
                     links)

    dfp_creative_service = DfpService("CreativeService")
    creatives = []

    if updates:
        existing_creatives = {}
        statement = dfp.FilterStatement(
            "WHERE id IN (%s)" %
            ", ".join([str(link.dfp_creative_id) for link in updates]))

        while True:
            response = dfp_creative_service.execute(
                "getCreativesByStatement",
                statement.ToStatement(),
            )

            if "results" in response:
                for creative in response["results"]:
                    existing_creatives[creative.id] = creative
                statement.offset += dfp.SUGGESTED_PAGE_LIMIT
            else:
                break

        updated = dfp_creative_service.execute("updateCreatives", [
            _link_to_creative(
                link=link,
                existing=existing_creatives[link.dfp_creative_id],
            ) for link in updates
        ])

        creatives += updated

    if inserts:
        authors = Account._byID([link.author_id for link in inserts],
                                return_dict=False)
        advertisers = advertisers_service.bulk_upsert(authors)
        advertisers_by_author = {
            advertiser.externalId: advertiser
            for advertiser in advertisers
        }

        inserted = dfp_creative_service.execute("createCreatives", [
            _link_to_creative(
                link=link,
                advertiser=advertisers_by_author[Account._fullname_from_id36(
                    to36(link.author_id))],
            ) for link in inserts
        ])

        creatives += inserted

    creatives_by_fullname = {
        utils.get_template_variable(creative, "link_id"): creative
        for creative in creatives
    }

    for link in links:
        creative = creatives_by_fullname[link._fullname]
        link.dfp_creative_id = creative.id
        link._commit()

    return creatives