def upload_ad_image(self, account_id, image_path): """ upload an ad image """ image = AdImage(parent_id=account_id) image[AdImage.Field.filename] = image_path image.remote_create() return image[AdImage.Field.hash]
def create_image(): image = AdImage(parent_id=test_config.account_id) image[AdImage.Field.filename] = test_config.image_path image.remote_create() # FIXLATER: properly delete images with dependencies return image
def upload_ad_image(self, account_id, image_path): """ Step 1: upload an ad image. See [Ad Image](https://developers.facebook.com/docs/marketing-api/adimage) for further details on the API used here. """ image = AdImage(parent_id=account_id) image[AdImage.Field.filename] = image_path image.remote_create() return image[AdImage.Field.hash]
def s1_upload_ad_images(self, accountid, imagefilepaths): """ Step 1: upload an images for the carousel. See [Ad Image](https://developers.facebook.com/docs/marketing-api/adimage) for further details on the API used here. """ result = [] for imagefilepath in imagefilepaths: image = AdImage(parent_id=accountid) image[AdImage.Field.filename] = imagefilepath image.remote_create() result.append(image[AdImage.Field.hash]) return result
AdSet.Field.start_time: int(time.time()) + 15, # 15 seconds from now AdSet.Field.campaign_group_id: campaign.get_id_assured(), AdSet.Field.targeting: { TargetingSpecsField.geo_locations: { 'countries': [ 'US', ], }, }, }) ad_set.remote_create() print("**** DONE: Ad Set created:") pp.pprint(ad_set) ### Upload an image to an account. img = AdImage(parent_id=my_account.get_id_assured()) img[AdImage.Field.filename] = os.path.join( os.path.dirname(__file__), os.pardir, 'facebookads/test/misc/image.png' ) img.remote_create() print("**** DONE: Image uploaded:") pp.pprint(img) # The image hash can be found using img[AdImage.Field.hash] ### Create a creative. creative = AdCreative(parent_id=my_account.get_id_assured()) creative.update({ AdCreative.Field.title: 'Visit Seattle', AdCreative.Field.body: 'Beautiful Puget Sound!', AdCreative.Field.object_url: 'http://www.seattle.gov/visiting/',
def delete_image(image): image_hash = image[AdImage.Field.hash] image_id = image[AdImage.Field.id] image = AdImage(image_id, test_config.account_id) image.remote_delete(params={AdImage.Field.hash: image_hash()})
from facebookads import test_config from facebookads.objects import AdImage ad_account_id = test_config.account_id image_path = test_config.image_path image_zip_path = test_config.images_zip_path image = fixtures.create_image() image_id = image[AdImage.Field.id] image_hash = image[AdImage.Field.hash] # _DOC open [ADIMAGE_CREATE] # _DOC vars [ad_account_id:s, image_path:s] from facebookads.objects import AdImage image = AdImage(parent_id=ad_account_id) image[AdImage.Field.filename] = image_path image.remote_create() # Output image Hash print(image[AdImage.Field.hash]) # _DOC close [ADIMAGE_CREATE] # _DOC open [ADIMAGE_CREATE_ZIP] # _DOC vars [image_zip_path:s, ad_account_id:s] from facebookads.objects import AdImage images = AdImage.remote_create_from_zip(filename=image_zip_path, parent_id=ad_account_id) # Output image hashes.
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
# As with any software that integrates with the Facebook platform, your use # of this software is subject to the Facebook Developer Principles and # Policies [http://developers.facebook.com/policy/]. This copyright notice # shall be included in all copies or substantial portions of the software. # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL # THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER # DEALINGS IN THE SOFTWARE. from facebookads import test_config ad_account_id = test_config.account_id image_path = test_config.image_path # _DOC open [ADIMAGE_CREATE] # _DOC vars [ad_account_id:s, image_path:s] from facebookads.objects import AdImage image = AdImage(parent_id=ad_account_id) image[AdImage.Field.filename] = image_path image.remote_create() # Output image Hash print(image[AdImage.Field.hash]) # _DOC close [ADIMAGE_CREATE]
campaign = AdCampaign(parent_id=ad_account_id) campaign[AdCampaign.Field.name] = 'Foo' campaign.remote_create() adset = AdSet(parent_id=ad_account_id) adset[AdSet.Field.name] = 'Foo 2' adset[AdSet.Field.campaign_group_id] = campaign.get_id() adset[AdSet.Field.targeting] = {'geo_locations': {'countries': ['US']}} adset[AdSet.Field.bid_info] = {'CLICKS': 500} adset[AdSet.Field.bid_type] = AdSet.BidType.cpc adset[AdSet.Field.daily_budget] = 1000 adset.remote_create() ad_set_id = adset.get_id_assured() img = AdImage(parent_id=ad_account_id) img[AdImage.Field.filename] = image_path img.remote_create() image_hash = img.get_hash() link_data = LinkData() link_data[LinkData.Field.message] = 'try it out' link_data[LinkData.Field.link] = 'http://example.com' link_data[LinkData.Field.caption] = 'www.example.com' link_data[LinkData.Field.image_hash] = image_hash object_story_spec = ObjectStorySpec() object_story_spec[ObjectStorySpec.Field.page_id] = page_id object_story_spec[ObjectStorySpec.Field.link_data] = link_data creative = AdCreative(parent_id=ad_account_id)
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
def create_multiple_link_clicks_ads( self, accountid, pageid, name, titles, bodies, urls, image_paths, targeting, optimization_goal, billing_event, bid_amount, daily_budget=None, lifetime_budget=None, start_time=None, end_time=None, ): """ There are 7 steps in this sample: 1. Create a campaign 2. Create an ad set 3. Upload images 4. Make combinations of specified creative elements 5. Prepare an API batch 6. For each creative combination, add a call to the batch to create a new ad 7. Execute API batch Params: * `accountid` is your Facebook AdAccount id * `name` is a string of basename of your ads. * `page` is the Facebook page used to publish the ads * `titles` array of strings of what user will see as ad title * `bodies` array of strings of what user will see as ad body * `image_paths` array of image file paths * `targeting` is a JSON string specifying targeting info of your ad See [Targeting Specs](https://developers.facebook.com/docs/marketing-api/targeting-specs) for details. * `optimization_goal` the optimization goal for the adsets * `billing_event` what you want to pay for * `bid_amount` how much you want to pay per billing event * `daily_budget` is integer number in your currency. E.g., if your currency is USD, dailybudget=1000 says your budget is 1000 USD * `lifetime_budget` lifetime budget for created ads * `start_time` when the campaign should start * `end_time` when the campaign should end """ my_account = AdAccount(fbid=accountid) """ Take different title body url and image paths, create a batch of ads based on the permutation of these elements """ # 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.') """ Step 1: Create new campaign with WEBSITE_CLICKS objective See [Campaign Group](https://developers.facebook.com/docs/marketing-api/reference/ad-campaign-group) for further details on the API used here. """ campaign = Campaign(parent_id=accountid) campaign[Campaign.Field.name] = name + ' Campaign' campaign[Campaign.Field.objective] = \ Campaign.Objective.link_clicks campaign.remote_create(params={ 'status': Campaign.Status.paused, }) """ Step 2: Create AdSet using specified optimization goal, billing event and bid. See [AdSet](https://developers.facebook.com/docs/marketing-api/reference/ad-campaign) for further details on the API used here. """ # Create ad set ad_set = AdSet(parent_id=accountid) ad_set[AdSet.Field.campaign_id] = campaign.get_id_assured() ad_set[AdSet.Field.name] = name + ' AdSet' ad_set[AdSet.Field.optimization_goal] = optimization_goal 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: 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 ad_set[AdSet.Field.targeting] = targeting ad_set.remote_create() """ Step 3: Upload images and get image hashes for use in ad creative. See [Ad Image](https://developers.facebook.com/docs/marketing-api/reference/ad-image#Creating) for further details on the API used here. """ # Upload the images first one by one image_hashes = [] for image_path in image_paths: img = AdImage(parent_id=accountid) img[AdImage.Field.filename] = image_path img.remote_create() image_hashes.append(img.get_hash()) ADGROUP_BATCH_CREATE_LIMIT = 10 ads_created = [] def callback_failure(response): raise response.error() """ Step 4: Using itertools.product get combinations of creative elements. """ for creative_info_batch in generate_batches( itertools.product(titles, bodies, urls, image_hashes), ADGROUP_BATCH_CREATE_LIMIT): """ Step 5: Create an API batch so we can create all ad creatives with one HTTP request. See [Batch Requests](https://developers.facebook.com/docs/graph-api/making-multiple-requests#simple) for further details on batching API calls. """ api_batch = my_account.get_api_assured().new_batch() for title, body, url, image_hash in creative_info_batch: # Create the ad """ Step 6: For each combination of creative elements, add to the batch an API call to create a new Ad and specify the creative inline. See [AdGroup](https://developers.facebook.com/docs/marketing-api/adgroup/) for further details on creating Ads. """ ad = Ad(parent_id=accountid) ad[Ad.Field.name] = name + ' Ad' ad[Ad.Field.adset_id] = ad_set.get_id_assured() ad[Ad.Field.creative] = { AdCreative.Field.object_story_spec: { "page_id": pageid, "link_data": { "message": body, "link": url, "caption": title, "image_hash": image_hash } }, } ad.remote_create(batch=api_batch, failure=callback_failure) ads_created.append(ad) """ Step 7: Execute the batched API calls See [Batch Requests](https://developers.facebook.com/docs/graph-api/making-multiple-requests#simple) for further details on batching API calls. """ api_batch.execute() return [campaign, ad_set, ads_created]
def create_carousel_ad( self, accountid, page_id, site_link, caption, message, optimization_goal, billing_event, bid_amount, name, targeting, products, call_to_action_type=None, ): """ There are 5 steps in this sample: 1. Create a campaign 2. Create an ad set 3. For each product: a. Upload the product's image and get an image hash b. Create a story attachment using the product's creative elements 4. Prepare the ad creative 5. Create the ad using the ad creative """ daily_budget = 10000 """ Step 1: Create new campaign with WEBSITE_CLICKS objective See [Campaign Group](https://developers.facebook.com/docs/marketing-api/reference/ad-campaign-group) for further details on the API used here. """ campaign = Campaign(parent_id=accountid) campaign[Campaign.Field.name] = name + ' Campaign' campaign[Campaign.Field.objective] = \ Campaign.Objective.link_clicks campaign.remote_create(params={'status': Campaign.Status.paused}) """ Step 2: Create AdSet using specified optimization goal, billing event and bid. See [AdSet](https://developers.facebook.com/docs/marketing-api/reference/ad-campaign) for further details on the API used here. """ ad_set = AdSet(parent_id=accountid) ad_set[AdSet.Field.campaign_id] = campaign.get_id_assured() ad_set[AdSet.Field.name] = name + ' AdSet' ad_set[AdSet.Field.optimization_goal] = optimization_goal ad_set[AdSet.Field.billing_event] = billing_event ad_set[AdSet.Field.bid_amount] = bid_amount ad_set[AdSet.Field.daily_budget] = daily_budget ad_set[AdSet.Field.targeting] = targeting ad_set.remote_create() story_attachments = [] """ Step 3: Upload images and get image hashes for use in ad creative. See [Ad Image](https://developers.facebook.com/docs/marketing-api/reference/ad-image#Creating) for further details on the API used here. Then create a new attachment with the product's creative """ call_to_action = { 'type': call_to_action_type, 'value': { 'link': site_link, 'link_caption': call_to_action_type, } } if call_to_action_type else None for product in products: img = AdImage(parent_id=accountid) img[AdImage.Field.filename] = product['image_path'] img.remote_create() image_hash = img.get_hash() attachment = AttachmentData() attachment[AttachmentData.Field.link] = product['link'] attachment[AttachmentData.Field.name] = product['name'] attachment[ AttachmentData.Field.description] = product['description'] attachment[AttachmentData.Field.image_hash] = image_hash if call_to_action: attachment[ AttachmentData.Field.call_to_action] = call_to_action story_attachments.append(attachment) """ Step 4: Prepare the ad creative including link information Note that here we specify multi_share_optimized = True this means you can add up to 10 products and Facebook will automatically select the best performing 5 to show in the ad. Facebook will also select the best ordering of those products. """ link = LinkData() link[link.Field.link] = site_link link[link.Field.caption] = caption link[link.Field.child_attachments] = story_attachments link[link.Field.multi_share_optimized] = True link[link.Field.call_to_action] = call_to_action story = ObjectStorySpec() story[story.Field.page_id] = page_id story[story.Field.link_data] = link creative = AdCreative() creative[AdCreative.Field.name] = name + ' Creative' creative[AdCreative.Field.object_story_spec] = story """ Step 5: Create the ad using the above creative """ ad = Ad(parent_id=accountid) ad[Ad.Field.name] = name + ' Ad' ad[Ad.Field.adset_id] = ad_set.get_id_assured() ad[Ad.Field.creative] = creative ad.remote_create(params={'status': Ad.Status.paused}) return (campaign, ad_set, ad)
def create_ad_creative(self): parent_id = config['act_id'][self.param['account']] page_id = config['page_id'][self.param['account']] link_url = config['link_url'][self.param['account']][self.param['os']] # Upload an image to an account. img = AdImage(parent_id=parent_id) img[AdImage.Field.filename] = os.path.join( this_dir, '../../../upload/' + self.filename ) img.remote_create() print("**** DONE: Image uploaded:") pp.pprint(img) # The image hash can be found using img[AdImage.Field.hash] # Create link data link_data = LinkData() link_data[LinkData.Field.link] = link_url link_data[LinkData.Field.message] = self.param['message'] link_data[LinkData.Field.image_hash] = img.get_hash() call_to_action = {'type': self.param['call_to_action']} call_to_action['value'] = { 'link': link_url, 'link_title': self.param['title'], 'application': config['app_id'][self.param['account']], } if self.param['deeplink_text']: call_to_action['value']['app_link'] = self.param['deeplink_text'] link_data[LinkData.Field.call_to_action] = call_to_action # Create object story spec object_story_spec = ObjectStorySpec() object_story_spec[ObjectStorySpec.Field.page_id] = page_id object_story_spec[ObjectStorySpec.Field.link_data] = link_data # Create a creative creative = AdCreative(parent_id=parent_id) creative[AdCreative.Field.name] = self.param['creative_name'] creative[AdCreative.Field.object_story_spec] = object_story_spec creative.remote_create() print("**** DONE: Creative created:") pp.pprint(creative) # Get excited, we are finally creating an ad!!! adset_ids = self.param.getlist('adset_ids') ads = [] for adset_id in adset_ids: ad = AdGroup(parent_id=parent_id) ad.update({ AdGroup.Field.name: self.param['creative_name'], AdGroup.Field.campaign_id: adset_id, AdGroup.Field.status: self.param['status'], AdGroup.Field.creative: { AdGroup.Field.Creative.creative_id: creative['id'], }, AdGroup.Field.tracking_specs: [ { 'action.type': ['mobile_app_install'], 'application': config['app_id'][self.param['account']], }, ], }) ad.remote_create() ads.append(ad) print("**** DONE: Ad created:") pp.pprint(ads) return ads
campaign = AdCampaign(parent_id=ad_account_id) campaign[AdCampaign.Field.name] = "Foo" campaign.remote_create() adset = AdSet(parent_id=ad_account_id) adset[AdSet.Field.name] = "Foo 2" adset[AdSet.Field.campaign_group_id] = campaign.get_id() adset[AdSet.Field.targeting] = {"geo_locations": {"countries": ["US"]}} adset[AdSet.Field.bid_info] = {"CLICKS": 500} adset[AdSet.Field.bid_type] = AdSet.BidType.cpc adset[AdSet.Field.daily_budget] = 1000 adset.remote_create() ad_set_id = adset.get_id_assured() img = AdImage(parent_id=ad_account_id) img[AdImage.Field.filename] = image_path img.remote_create() image_hash = img.get_hash() link_data = LinkData() link_data[LinkData.Field.message] = "try it out" link_data[LinkData.Field.link] = "http://example.com" link_data[LinkData.Field.caption] = "www.example.com" link_data[LinkData.Field.image_hash] = image_hash object_story_spec = ObjectStorySpec() object_story_spec[ObjectStorySpec.Field.page_id] = page_id object_story_spec[ObjectStorySpec.Field.link_data] = link_data creative = AdCreative(parent_id=ad_account_id)
# shall be included in all copies or substantial portions of the software. # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL # THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER # DEALINGS IN THE SOFTWARE. from examples.docs import fixtures from facebookads import test_config from facebookads.objects import AdImage ad_account_id = test_config.account_id image = fixtures.create_image() image_id = image[AdImage.Field.id] image_hash = image[AdImage.Field.hash] # Failed to delete account image: Image with hash # 7aa4a47d513acd589f968c833f2757b1 is still being used! exit(0) # _DOC open [ADIMAGE_DELETE] # _DOC vars [image_id, ad_account_id:s, image_hash:s] from facebookads.objects import AdImage image = AdImage(image_id, ad_account_id) image.remote_delete(params={AdImage.Field.hash: image_hash}) # _DOC close [ADIMAGE_DELETE]
config_file.close() ad_account_id = config['account_id'] access_token = config['access_token'] image_path = config['image_jpg'] image_zip_path = config['image_zip'] app_id = config['app_id'] app_secret = config['app_secret'] FacebookAdsApi.init(app_id, app_secret, access_token) # _DOC open [ADIMAGE_CREATE] # _DOC vars [ad_account_id:s, image_path:s] from facebookads.objects import AdImage image = AdImage(parent_id=ad_account_id) image[AdImage.Field.filename] = image_path image.remote_create() # Output image Hash print(image[AdImage.Field.hash]) # _DOC close [ADIMAGE_CREATE] image_id = image[AdImage.Field.id] image_hash = image[AdImage.Field.hash] # _DOC open [ADIMAGE_DELETE] # _DOC vars [image_id, ad_account_id:s, image_hash:s] from facebookads.objects import AdImage image = AdImage(image_id, ad_account_id)
# Facebook. # As with any software that integrates with the Facebook platform, your use # of this software is subject to the Facebook Developer Principles and # Policies [http://developers.facebook.com/policy/]. This copyright notice # shall be included in all copies or substantial portions of the software. # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL # THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER # DEALINGS IN THE SOFTWARE. from facebookads import test_config ad_account_id = test_config.account_id image_zip_path = test_config.images_zip_path # _DOC open [ADIMAGE_CREATE_ZIP] # _DOC vars [image_zip_path:s, ad_account_id:s] from facebookads.objects import AdImage images = AdImage.remote_create_from_zip(filename=image_zip_path, parent_id=ad_account_id) # Output image hashes. for image in images: print(image[AdImage.Field.hash]) # _DOC close [ADIMAGE_CREATE_ZIP]
AdSet.Field.start_time: int(time.time()) + 15, # 15 seconds from now AdSet.Field.campaign_group_id: campaign.get_id_assured(), AdSet.Field.targeting: { TargetingSpecsField.geo_locations: { 'countries': [ 'US', ], }, }, }) ad_set.remote_create() print("**** DONE: Ad Set created:") pp.pprint(ad_set) ### Upload an image to an account. img = AdImage(parent_id=my_account.get_id_assured()) img.remote_create_from_filename(os.path.join(this_dir, 'puget_sound.jpg')) print("**** DONE: Image uploaded:") pp.pprint(img) # The image hash can be found using img[AdImage.Field.hash] ### Create a creative. creative = AdCreative(parent_id=my_account.get_id_assured()) creative.update({ AdCreative.Field.title: 'Visit Seattle', AdCreative.Field.body: 'Beautiful Puget Sound!', AdCreative.Field.object_url: 'http://www.seattle.gov/visiting/', AdCreative.Field.image_hash: img.get_hash(), }) creative.remote_create() print("**** DONE: Creative created:") pp.pprint(creative)
AdSet.Field.start_time: int(time.time()) + 15, # 15 seconds from now AdSet.Field.campaign_group_id: campaign.get_id_assured(), AdSet.Field.targeting: { TargetingSpecsField.geo_locations: { 'countries': [ 'US', ], }, }, }) ad_set.remote_create() print("**** DONE: Ad Set created:") pp.pprint(ad_set) ### Upload an image to an account. img = AdImage(parent_id=my_account.get_id_assured()) img[AdImage.Field.filename] = os.path.join(this_dir, 'test.png') img.remote_create() print("**** DONE: Image uploaded:") pp.pprint(img) # The image hash can be found using img[AdImage.Field.hash] ### Create a creative. creative = AdCreative(parent_id=my_account.get_id_assured()) creative.update({ AdCreative.Field.title: 'Visit Seattle', AdCreative.Field.body: 'Beautiful Puget Sound!', AdCreative.Field.object_url: 'http://www.seattle.gov/visiting/', AdCreative.Field.image_hash: img.get_hash(), }) creative.remote_create() print("**** DONE: Creative created:")
def createAdImage(self, filepath): image = AdImage() return image.api_create(parent_id=self.get_id_assured(), params={AdImage.Field.filename: filepath})
def create_lead_ad( self, account_id, name, page_id, form_id, optimization_goal, billing_event, bid_amount, daily_budget, targeting, image_path, message, link, caption, description, cta_type='SIGN_UP', ): """ Create Campaign """ campaign = Campaign(parent_id=account_id) campaign[Campaign.Field.name] = name + ' Campaign' campaign[Campaign.Field.objective] = \ Campaign.Objective.lead_generation campaign[Campaign.Field.buying_type] = \ Campaign.BuyingType.auction campaign.remote_create(params={'status': Campaign.Status.paused}) """ Create AdSet """ adset = AdSet(parent_id=account_id) adset[AdSet.Field.campaign_id] = campaign.get_id_assured() adset[AdSet.Field.name] = name + ' AdSet' adset[AdSet.Field.promoted_object] = { 'page_id': page_id, } adset[AdSet.Field.optimization_goal] = optimization_goal adset[AdSet.Field.billing_event] = billing_event adset[AdSet.Field.bid_amount] = bid_amount adset[AdSet.Field.daily_budget] = daily_budget adset[AdSet.Field.targeting] = targeting adset.remote_create() """ Image """ image = AdImage(parent_id=account_id) image[AdImage.Field.filename] = image_path image.remote_create() image_hash = image[AdImage.Field.hash] """ Create Creative """ link_data = LinkData() link_data[LinkData.Field.message] = message link_data[LinkData.Field.link] = link link_data[LinkData.Field.image_hash] = image_hash link_data[LinkData.Field.caption] = caption link_data[LinkData.Field.description] = description link_data[LinkData.Field.call_to_action] = { 'type': cta_type, 'value': { 'lead_gen_form_id': form_id, }, } object_story_spec = ObjectStorySpec() object_story_spec[ObjectStorySpec.Field.page_id] = page_id object_story_spec[ObjectStorySpec.Field.link_data] = link_data creative = AdCreative(parent_id=account_id) creative[AdCreative.Field.name] = name + ' Creative' creative[AdCreative.Field.object_story_spec] = object_story_spec creative.remote_create() """ Create Ad """ ad = Ad(parent_id=account_id) ad[Ad.Field.name] = name ad[Ad.Field.adset_id] = adset.get_id_assured() ad[Ad.Field.creative] = {'creative_id': str(creative.get_id_assured())} ad.remote_create() return { 'image_hash': image_hash, 'campaign_id': campaign['id'], 'adset_id': adset['id'], 'creative_id': creative['id'], 'ad_id': ad['id'], }
def create_lookalike_ads( self, account_id, name, tiered_lookalikes, optimization_goal, billing_event, tiered_bid_amounts, title, body, url, image_path, daily_budget=None, lifetime_budget=None, start_time=None, end_time=None, campaign=None, ): """ Take the tiered lookalike audiences and create the ads """ results = { 'adsets': [], 'ads': [], } tiers = len(tiered_lookalikes) if tiers != len(tiered_bid_amounts): raise TypeError('Audience and bid amount number mismatch.') # Create campaign if not campaign: campaign = Campaign(parent_id=account_id) campaign[Campaign.Field.name] = '{} Campaign'.format(name) campaign[Campaign.Field.objective] = \ Campaign.Objective.link_clicks campaign.remote_create(params={ 'status': Campaign.Status.paused, }) # Upload image img = AdImage(parent_id=account_id) img[AdImage.Field.filename] = image_path img.remote_create() image_hash = img.get_hash() # Inline creative for ads inline_creative = { AdCreative.Field.title: title, AdCreative.Field.body: body, AdCreative.Field.object_url: url, AdCreative.Field.image_hash: image_hash, } for tier in range(1, tiers + 1): # Create ad set ad_set = AdSet(parent_id=account_id) ad_set[AdSet.Field.campaign_id] = campaign.get_id_assured() ad_set[AdSet.Field.name] = '{0} AdSet tier {1}'.format(name, tier) ad_set[AdSet.Field.optimization_goal] = optimization_goal ad_set[AdSet.Field.billing_event] = billing_event ad_set[AdSet.Field.bid_amount] = tiered_bid_amounts[tier - 1] 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 audience = tiered_lookalikes[tier - 1] targeting = { TargetingSpecsField.custom_audiences: [{ 'id': audience[CustomAudience.Field.id], 'name': audience[CustomAudience.Field.name], }] } ad_set[AdSet.Field.targeting] = targeting ad_set.remote_create(params={ 'status': AdSet.Status.paused, }) # Create ad ad = Ad(parent_id=account_id) ad[Ad.Field.name] = '{0} Ad tier {1}'.format(name, tier) ad[Ad.Field.adset_id] = ad_set['id'] ad[Ad.Field.creative] = inline_creative ad.remote_create(params={ 'status': Ad.Status.paused, }) results['adsets'].append(ad_set) results['ads'].append(ad) return results