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 }
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'])