Update two example files to API version 2.9 #346

Merged
merged 2 commits into from Jan 18, 2018
Jump to file or symbol
Failed to load files and symbols.
+76 −54
Split
@@ -18,17 +18,16 @@
# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
# DEALINGS IN THE SOFTWARE.
-from facebookads.objects import (
- AdCampaign,
- AdSet,
- AdGroup,
- AdImage,
- AdCreative,
- TargetingSpecsField,
-)
+from facebookads.adobjects.campaign import Campaign
+from facebookads.adobjects.adset import AdSet
+from facebookads.adobjects.targeting import Targeting
+from facebookads.adobjects.ad import Ad
+from facebookads.adobjects.adimage import AdImage
+from facebookads.adobjects.adcreative import AdCreative
+
import itertools
from batch_utils import generate_batches
-
+from simple_create import api
def create_multiple_website_clicks_ads(
account,
@@ -41,8 +40,10 @@ def create_multiple_website_clicks_ads(
urls,
image_paths,
- bid_type,
- bid_info,
+ optimization_goal,
+ pixel_id,
+ billing_event,
+ bid_amount,
daily_budget=None,
lifetime_budget=None,
start_time=None,
@@ -53,7 +54,7 @@ def create_multiple_website_clicks_ads(
genders=None,
campaign=None,
- paused=False,
+ status=AdSet.Status.paused,
):
# Check for bad specs
if daily_budget is None:
@@ -67,22 +68,32 @@ def create_multiple_website_clicks_ads(
)
# 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
+ if campaign:
+ campaign = Campaign(fbid=campaign)[Campaign.Field.id]
+ else:
+ campaign = Campaign(parent_id=account)
+ campaign[Campaign.Field.name] = name + ' Campaign'
+ campaign[Campaign.Field.objective] = \
+ Campaign.Objective.conversions
+ campaign[Campaign.Field.status] = \
+ Campaign.Status.active if not status \
+ else Campaign.Status.paused
campaign.remote_create()
+ campaign = campaign[AdSet.Field.id]
# 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(parent_id=account)
+ ad_set[AdSet.Field.campaign_id] = campaign
ad_set[AdSet.Field.name] = name + ' AdSet'
- ad_set[AdSet.Field.bid_type] = bid_type
- ad_set[AdSet.Field.bid_info] = bid_info
+ ad_set[AdSet.Field.optimization_goal] = optimization_goal
+ ad_set[AdSet.Field.promoted_object] = {
+ 'pixel_id': pixel_id,
+ 'custom_event_type': 'COMPLETE_REGISTRATION'
+
+ }
+ ad_set[AdSet.Field.billing_event] = billing_event
+ ad_set[AdSet.Field.bid_amount] = bid_amount
+
if daily_budget:
ad_set[AdSet.Field.daily_budget] = daily_budget
else:
@@ -92,22 +103,23 @@ def create_multiple_website_clicks_ads(
if start_time:
ad_set[AdSet.Field.start_time] = start_time
targeting = {}
- targeting[TargetingSpecsField.geo_locations] = {
+ targeting[Targeting.Field.geo_locations] = {
'countries': [country]
}
if age_max:
- targeting[TargetingSpecsField.age_max] = age_max
+ targeting[Targeting.Field.age_max] = age_max
if age_min:
- targeting[TargetingSpecsField.age_min] = age_min
+ targeting[Targeting.Field.age_min] = age_min
if genders:
- targeting[TargetingSpecsField.genders] = genders
+ targeting[Targeting.Field.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(parent_id=account)
img[AdImage.Field.filename] = image_path
img.remote_create()
image_hashes.append(img.get_hash())
@@ -123,19 +135,20 @@ def callback_failure(response):
itertools.product(titles, bodies, urls, image_hashes),
ADGROUP_BATCH_CREATE_LIMIT
):
- api_batch = account.get_api_assured().new_batch()
+ api_batch = api.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] = {
+ ad = Ad(parent_id=account)
+ ad[Ad.Field.name] = name + ' Ad'
+ ad[Ad.Field.adset_id] = ad_set[AdSet.Field.id]
+ ad[Ad.Field.creative] = {
AdCreative.Field.title: title,
AdCreative.Field.body: body,
AdCreative.Field.object_url: url,
AdCreative.Field.image_hash: image_hash,
}
+ ad[Ad.Field.status] = status
ad.remote_create(batch=api_batch, failure=callback_failure)
ad_groups_created.append(ad)
@@ -156,8 +169,10 @@ def create_website_clicks_ad(
url,
image_path,
- bid_type,
- bid_info,
+ optimization_goal,
+ pixel_id,
+ billing_event,
+ bid_amount,
daily_budget=None,
lifetime_budget=None,
start_time=None,
@@ -168,7 +183,7 @@ def create_website_clicks_ad(
genders=None,
campaign=None,
- paused=False,
+ status=AdSet.Status.paused,
):
for ad in create_multiple_website_clicks_ads(
account=account,
@@ -181,8 +196,10 @@ def create_website_clicks_ad(
urls=[url],
image_paths=[image_path],
- bid_type=bid_type,
- bid_info=bid_info,
+ optimization_goal=optimization_goal,
+ pixel_id=pixel_id,
+ billing_event=billing_event,
+ bid_amount=bid_amount,
daily_budget=daily_budget,
lifetime_budget=lifetime_budget,
start_time=start_time,
@@ -193,6 +210,6 @@ def create_website_clicks_ad(
genders=genders,
campaign=campaign,
- paused=paused,
+ status=Ad.Status.paused,
):
return ad
View
@@ -22,13 +22,13 @@
Creates an ad through a utility function.
"""
-from facebookads import FacebookSession
from facebookads import FacebookAdsApi
-from facebookads.objects import (
- AdAccount,
- AdPreview,
- AdSet,
-)
+from facebookads import FacebookSession
+from facebookads.adobjects.business import Business
+from facebookads.adobjects.adaccount import AdAccount
+from facebookads.adobjects.adpreview import AdPreview
+from facebookads.adobjects.adset import AdSet
+from facebookads.adobjects.adpromotedobject import AdPromotedObject
import ad_creation_utils
import json
@@ -54,13 +54,13 @@
# Get my account (first account associated with the user associated with the
# session of the default api)
- my_account = AdAccount.get_my_account()
+ my_account = AdAccount(fbid=config['act_id'])
print('**** Creating ad...')
# Create my ad
my_ad = ad_creation_utils.create_website_clicks_ad(
- account=my_account,
+ account=config['act_id'],
name="Visit Seattle",
country='US',
@@ -74,26 +74,31 @@
'facebookads/test/misc/image.png'
),
- bid_type=AdSet.BidType.cpm,
- bid_info={AdSet.Field.BidInfo.impressions: 53}, # $0.53 / thousand
+ optimization_goal=AdSet.OptimizationGoal.offsite_conversions,
+ pixel_id=config['pixel_id'],
+ billing_event=AdSet.BillingEvent.impressions,
+ bid_amount=53, # $0.53 / thousand
daily_budget=1000, # $10.00 per day
age_min=13,
age_max=65,
- paused=True, # Default is False but let's keep this test ad paused
+ campaign=config['campaign_id'],
+ status=AdSet.Status.paused,
+ # Default is False but let's keep this test ad paused
)
print('**** Done!')
# Get the preview and write an html file
- preview = my_ad.get_ad_preview(params={
- AdPreview.Field.ad_format: AdPreview.AdFormat.right_column_standard
+ preview = my_ad.get_previews(params={
+ 'ad_format': AdPreview.AdFormat.right_column_standard,
})
preview_filename = os.path.join(this_dir, 'preview_ad.html')
preview_file = open(preview_filename, 'w')
preview_file.write(
"<html><head><title>Facebook Ad Preview</title><body>%s</body></html>"
- % preview.get_html()
)
+ for each_ad in preview:
+ preview_file.write(each_ad.get_html())
preview_file.close()
print('**** %s has been created!' % preview_filename)