예제 #1
0
def get_request(account_id, table, params, fields):
    """account_id: unique id for ad account in format act_<ID>
    table: The table object found in the models module
    params: dictionary of parameters for request
    fields: list of fields for request
    --> returns requested data from Facebook Marketing API
    """
    my_account = AdAccount(account_id)
    if table == 'accounts':
        cursor = my_account.api_get(params=params, fields=fields)
        return dict(cursor)
    if table == 'campaigns':
        cursor = my_account.get_campaigns(params=params, fields=fields)
        request = [campaign for campaign in cursor]
        return request
    if table == 'adsets':
        request = my_account.get_ad_sets(params=params, fields=fields)
        return request
    if table == 'ads_insights':
        cursor = my_account.get_insights_async(params=params, fields=fields)
        cursor.api_get()
        while cursor[AdReportRun.Field.async_status] != "Job Completed":
            time.sleep(1)
            cursor.api_get()
            time.sleep(1)
        request = cursor.get_result(params={"limit": 1000})
        return request
    if table == 'ads_insights_age_and_gender':
        cursor = my_account.get_insights_async(params=params, fields=fields)
        cursor.api_get()
        while cursor[AdReportRun.Field.async_status] != "Job Completed":
            time.sleep(1)
            cursor.api_get()
            time.sleep(1)
        request = cursor.get_result(params={"limit": 1000})
        return request
    if table == 'ads_insights_region':
        cursor = my_account.get_insights_async(params=params, fields=fields)
        cursor.api_get()
        while cursor[AdReportRun.Field.async_status] != "Job Completed":
            time.sleep(1)
            cursor.api_get()
            time.sleep(1)
        request = cursor.get_result(params={"limit": 1000})
        return request
def get_account(account):
    account_ad = AdAccount(account)
    params = {
        'fields': [
            Campaign.Field.id, Campaign.Field.name,
            AdAccount.Field.timezone_id, AdAccount.Field.timezone_name,
            AdAccount.Field.timezone_offset_hours_utc
        ]
    }
    accounts = account_ad.api_get(fields=params.get('fields'), params=params)
    account_name = accounts.get('name')
    account_id = accounts.get('id')
    account_time_zone_id = accounts.get('timezone_id')
    account_time_zone_name = accounts.get('timezone_name')
    account_time_zone_offset_hours_utc = accounts.get(
        'timezone_offset_hours_utc')
    return {
        'account_id': account_id,
        'account_name': account_name,
        'account_time_zone_id': account_time_zone_id,
        'account_time_zone_name': account_time_zone_name,
        'account_time_zone_offset_hours_utc':
        account_time_zone_offset_hours_utc
    }
예제 #3
0
def create_facebook_ad(access_token, business_id, start_date, end_date,
                       campaign_budget, campaign_objective, geo_locations,
                       creative_id, status):
    '''
        creates an a/b testing study
    
        args:
            access_token        :   long-lived access token             (provided from backend) <STRING>
            business_id         :   business account id of client       (provided from backend) <STRING>
            start_date          :   start date of the campaign          (provided from backend) <STRING> [d-m-y,H:M]
            end_date            :   end date of the campaign            (provided from backend) <STRING> [d-m-y,H:M]
            campaign_budget     :   the facebook campaign budget        (provided from backend) <STRING>
            campaign_objective  :   the objective chosen at UI          (provided from backend) <STRING>
            geo_locations       :   location to serve the ad            (provided from backend) <DICTIONARY>
            creative_id         :   ad creative id                      (provided from backend) <STRING>
            status              :   for running the campaign            (PASSED FROM CONNECTOR) <STRING>     
    '''
    # api init
    init_api(access_token)

    # budget
    #campaign_budget=campaign_budget*100
    account = AdAccount(f'act_{business_id}')
    currency = account.api_get(fields=["currency"])["currency"]
    print("Currency:", currency)
    Q_WORD = f"USD_{currency}"
    URL = f"{CURRENCY_BASE_URL}/convert?q={Q_WORD}&compact=ultra&apiKey={CURRENCY_API_KEY}"
    rate = float(requests.get(URL).json()[Q_WORD])
    campaign_budget = int(rate * campaign_budget) * 100
    print("Budget:", campaign_budget / 100, currency)

    # create campaign
    campaign_id = create_campaign(business_id=business_id,
                                  campaign_objective=campaign_objective,
                                  start_date=start_date,
                                  end_date=end_date,
                                  status=status,
                                  campaign_budget=campaign_budget)

    print("LOG:Campaign Created:", campaign_id)
    # PRESET
    PRESET = create_preset(campaign_objective)

    # adset
    adset_name = "creative"
    # get targeting
    targeting = create_targeting(geo_locations=geo_locations,
                                 ad_type=adset_name,
                                 ab_test=False)
    # create adset
    adset_id = create_adset(business_id=business_id,
                            campaign_id=campaign_id,
                            adset_name=adset_name,
                            PRESET=PRESET,
                            targeting=targeting,
                            status=status,
                            start_date=start_date,
                            end_date=end_date)

    print("LOG:Adset Created:", adset_id)

    # create ad
    ad_id = create_ad(business_id=business_id,
                      creative_id=creative_id,
                      ad_type=adset_name,
                      adset_id=adset_id,
                      status=status)

    print("LOG:Ad Created:", ad_id['id'])