def create_adcampaign(params={}): campaign = AdCampaign(parent_id=test_config.account_id) campaign[AdCampaign.Field.name] = unique_name('Test Campaign') campaign[AdCampaign.Field.buying_type] = AdCampaign.BuyingType.auction campaign[AdCampaign.Field.objective] = AdCampaign.Objective.none campaign[AdCampaign.Field.status] = AdCampaign.Status.paused campaign.update(params) campaign.remote_create() atexit.register(remote_delete, campaign) return campaign
print('\n\n\n********** Ad Creation example. **********\n') ### Setup user and read the object from the server me = AdUser(fbid='me') ### Get first account connected to the user my_account = me.get_ad_account() ### Create a Campaign campaign = AdCampaign(parent_id=my_account.get_id_assured()) campaign.update({ AdCampaign.Field.name: 'Seattle Ad Campaign', AdCampaign.Field.objective: AdCampaign.Objective.website_clicks, AdCampaign.Field.status: AdCampaign.Status.paused, }) campaign.remote_create() print("**** DONE: Campaign created:") pp.pprint(campaign) ### Create an Ad Set ad_set = AdSet(parent_id=my_account.get_id_assured()) ad_set.update({ AdSet.Field.name: 'Puget Sound AdSet', AdSet.Field.status: AdSet.Status.paused, AdSet.Field.bid_type: AdSet.BidType.cpm, # Bidding for impressions AdSet.Field.bid_info: { AdSet.Field.BidInfo.impressions: 500, # $5 per 1000 impression }, AdSet.Field.daily_budget: 3600, # $36.00 AdSet.Field.start_time: int(time.time()) + 15, # 15 seconds from now AdSet.Field.campaign_group_id: campaign.get_id_assured(),
def create_multiple_website_clicks_ads( account, name, country, titles, bodies, urls, image_paths, bid_type, bid_info, daily_budget=None, lifetime_budget=None, start_time=None, end_time=None, age_min=None, age_max=None, genders=None, campaign=None, paused=False, ): # Check for bad specs if daily_budget is None: if lifetime_budget is None: raise TypeError( 'One of daily_budget or lifetime_budget must be defined.') elif end_time is None: raise TypeError( 'If lifetime_budget is defined, end_time must be defined.') # Create campaign if not campaign: campaign = AdCampaign(parent_id=account.get_id_assured()) campaign[AdCampaign.Field.name] = name + ' Campaign' campaign[AdCampaign.Field.objective] = \ AdCampaign.Objective.website_clicks campaign[AdCampaign.Field.status] = \ AdCampaign.Status.active if not paused \ else AdCampaign.Status.paused campaign.remote_create() # Create ad set ad_set = AdSet(parent_id=account.get_id_assured()) ad_set[AdSet.Field.campaign_group_id] = campaign.get_id_assured() ad_set[AdSet.Field.name] = name + ' AdSet' ad_set[AdSet.Field.bid_type] = bid_type ad_set[AdSet.Field.bid_info] = bid_info if daily_budget: ad_set[AdSet.Field.daily_budget] = daily_budget else: ad_set[AdSet.Field.lifetime_budget] = lifetime_budget if end_time: ad_set[AdSet.Field.end_time] = end_time if start_time: ad_set[AdSet.Field.start_time] = start_time targeting = {} targeting[TargetingSpecsField.geo_locations] = {'countries': [country]} if age_max: targeting[TargetingSpecsField.age_max] = age_max if age_min: targeting[TargetingSpecsField.age_min] = age_min if genders: targeting[TargetingSpecsField.genders] = genders ad_set[AdSet.Field.targeting] = targeting ad_set.remote_create() # Upload the images first one by one image_hashes = [] for image_path in image_paths: img = AdImage(parent_id=account.get_id_assured()) img[AdImage.Field.filename] = image_path img.remote_create() image_hashes.append(img.get_hash()) ADGROUP_BATCH_CREATE_LIMIT = 10 ad_groups_created = [] def callback_failure(response): raise response.error() # For each creative permutation for creative_info_batch in generate_batches( itertools.product(titles, bodies, urls, image_hashes), ADGROUP_BATCH_CREATE_LIMIT): api_batch = account.get_api_assured().new_batch() for title, body, url, image_hash in creative_info_batch: # Create the ad ad = AdGroup(parent_id=account.get_id_assured()) ad[AdGroup.Field.name] = name + ' Ad' ad[AdGroup.Field.campaign_id] = ad_set.get_id_assured() ad[AdGroup.Field.creative] = { AdCreative.Field.title: title, AdCreative.Field.body: body, AdCreative.Field.object_url: url, AdCreative.Field.image_hash: image_hash, } ad.remote_create(batch=api_batch, failure=callback_failure) ad_groups_created.append(ad) api_batch.execute() return ad_groups_created
print('\n\n\n********** Ad Creation example. **********\n') ### Setup user and read the object from the server me = AdUser(fbid='me') ### Get first account connected to the user my_account = me.get_ad_account() ### Create a Campaign campaign = AdCampaign(parent_id=my_account.get_id_assured()) campaign.update({ AdCampaign.Field.name: 'Seattle Ad Campaign', AdCampaign.Field.objective: AdCampaign.Objective.website_clicks, AdCampaign.Field.status: AdCampaign.Status.paused, }) campaign.remote_create() print("**** DONE: Campaign created:") pp.pprint(campaign) ### Create an Ad Set ad_set = AdSet(parent_id=my_account.get_id_assured()) ad_set.update({ AdSet.Field.name: 'Puget Sound AdSet', AdSet.Field.status: AdSet.Status.paused, AdSet.Field.bid_type: AdSet.BidType.cpm, # Bidding for impressions AdSet.Field.bid_info: { AdSet.Field.BidInfo.impressions: 500, # $5 per 1000 impression }, AdSet.Field.daily_budget: 3600, # $36.00 AdSet.Field.start_time: int(time.time()) + 15, # 15 seconds from now AdSet.Field.campaign_group_id: campaign.get_id_assured(),
def create_multiple_website_clicks_ads( account, name, country, titles, bodies, urls, image_paths, bid_type, bid_info, daily_budget=None, lifetime_budget=None, start_time=None, end_time=None, age_min=None, age_max=None, genders=None, campaign=None, paused=False, ): # Check for bad specs if daily_budget is None: if lifetime_budget is None: raise TypeError( 'One of daily_budget or lifetime_budget must be defined.' ) elif end_time is None: raise TypeError( 'If lifetime_budget is defined, end_time must be defined.' ) # Create campaign if not campaign: campaign = AdCampaign(parent_id=account.get_id_assured()) campaign[AdCampaign.Field.name] = name + ' Campaign' campaign[AdCampaign.Field.objective] = \ AdCampaign.Objective.website_clicks campaign[AdCampaign.Field.status] = \ AdCampaign.Status.active if not paused \ else AdCampaign.Status.paused campaign.remote_create() # Create ad set ad_set = AdSet(parent_id=account.get_id_assured()) ad_set[AdSet.Field.campaign_group_id] = campaign.get_id_assured() ad_set[AdSet.Field.name] = name + ' AdSet' ad_set[AdSet.Field.bid_type] = bid_type ad_set[AdSet.Field.bid_info] = bid_info if daily_budget: ad_set[AdSet.Field.daily_budget] = daily_budget else: ad_set[AdSet.Field.lifetime_budget] = lifetime_budget if end_time: ad_set[AdSet.Field.end_time] = end_time if start_time: ad_set[AdSet.Field.start_time] = start_time targeting = {} targeting[TargetingSpecsField.geo_locations] = { 'countries': [country] } if age_max: targeting[TargetingSpecsField.age_max] = age_max if age_min: targeting[TargetingSpecsField.age_min] = age_min if genders: targeting[TargetingSpecsField.genders] = genders ad_set[AdSet.Field.targeting] = targeting ad_set.remote_create() # Upload the images first one by one image_hashes = [] for image_path in image_paths: img = AdImage(parent_id=account.get_id_assured()) img[AdImage.Field.filename] = image_path img.remote_create() image_hashes.append(img.get_hash()) ADGROUP_BATCH_CREATE_LIMIT = 10 ad_groups_created = [] def callback_failure(response): raise response.error() # For each creative permutation for creative_info_batch in generate_batches( itertools.product(titles, bodies, urls, image_hashes), ADGROUP_BATCH_CREATE_LIMIT ): api_batch = account.get_api_assured().new_batch() for title, body, url, image_hash in creative_info_batch: # Create the ad ad = AdGroup(parent_id=account.get_id_assured()) ad[AdGroup.Field.name] = name + ' Ad' ad[AdGroup.Field.campaign_id] = ad_set.get_id_assured() ad[AdGroup.Field.creative] = { AdCreative.Field.title: title, AdCreative.Field.body: body, AdCreative.Field.object_url: url, AdCreative.Field.image_hash: image_hash, } ad.remote_create(batch=api_batch, failure=callback_failure) ad_groups_created.append(ad) api_batch.execute() return ad_groups_created