Пример #1
0
    def create_creative(self, accountid, name, imagehash, message, appinfo):
        """
        Step 4: create ad creative with call to action type to be
        'USE_MOBILE_APP'. See
        [Ad Creative](https://developers.facebook.com/docs/marketing-api/adcreative)
        for further details on the API used here.
        """
        link_data = LinkData()
        link_data[LinkData.Field.link] = appinfo['appstore_link']
        link_data[LinkData.Field.message] = message
        link_data[LinkData.Field.image_hash] = imagehash
        call_to_action = {'type': 'USE_MOBILE_APP'}
        call_to_action['value'] = {
            'link': appinfo['appstore_link'],
            'app_link': appinfo['app_deep_link'],
            'application': appinfo['fbapplication_id'],
            'link_title': appinfo['app_name']
        }
        link_data[LinkData.Field.call_to_action] = call_to_action

        object_story_spec = ObjectStorySpec()
        object_story_spec[ObjectStorySpec.Field.page_id] = appinfo['fbpage_id']
        object_story_spec[ObjectStorySpec.Field.link_data] = link_data

        creative = AdCreative(parent_id=accountid)
        creative[AdCreative.Field.name] = name
        creative[AdCreative.Field.object_story_spec] = object_story_spec
        creative.remote_create()

        return creative[AdCreative.Field.id]
    def create_creative(self, account_id, name, image_hash, message, page_id,
                        app_name, app_store_link, deferred_app_link):
        """
        Step 4: create ad creative with call to action type to be
        'INSTALL_MOBILE_APP'. See [Ad Creative][1] for further details on the
        API used here.
        [1]: https://developers.facebook.com/docs/marketing-api/adcreative
        """
        link_data = LinkData()
        link_data[LinkData.Field.link] = app_store_link
        link_data[LinkData.Field.message] = message
        link_data[LinkData.Field.image_hash] = image_hash
        call_to_action = {'type': 'INSTALL_MOBILE_APP'}
        call_to_action['value'] = {
            'link': app_store_link,
            'link_title': app_name
        }
        if deferred_app_link:
            call_to_action['value']['app_link'] = deferred_app_link

        link_data[LinkData.Field.call_to_action] = call_to_action

        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[AdCreative.Field.object_story_spec] = object_story_spec
        creative.remote_create()

        return creative[AdCreative.Field.id]
	def build_video_creative(self, fb_account_id, promotion_url, video_id, video_image_url, title, body, fb_page_id, logger, instagram_actor_id=0):
		""" create facebook/instagram video creative"""
		try:
			video_data = VideoData()
			video_data[VideoData.Field.video_id] = video_id
			video_data[VideoData.Field.image_url] = video_image_url
			video_data[VideoData.Field.description] = body
			video_data[VideoData.Field.call_to_action] = {
				'type': 'INSTALL_MOBILE_APP',
				'value': {
					'link_title': title,
					'link': promotion_url,
				}
			}

			object_story_spec = ObjectStorySpec()
			object_story_spec[ObjectStorySpec.Field.page_id] = fb_page_id
			object_story_spec[ObjectStorySpec.Field.video_data] = video_data
			if instagram_actor_id:
				object_story_spec[ObjectStorySpec.Field.instagram_actor_id] = instagram_actor_id

			fb_creative = AdCreative(parent_id='act_' + str(fb_account_id))
			fb_creative.update({
				AdCreative.Field.object_story_spec : object_story_spec
			})
			fb_creative.remote_create()

			return fb_creative[AdCreative.Field.id]

		except Exception as e:
			logger.exception(e)
	def build_image_creative(self, fb_account_id, promotion_url, fb_image_id, title, body, fb_page_id, logger, instagram_actor_id=0):
		""" create facebook / instagram single-image creative"""
		try:
			object_story_spec = ObjectStorySpec()

			# build Link-Ad
			call_to_action = {
				'type': 'INSTALL_MOBILE_APP',
				'value': {
					'link': promotion_url,
				}
			}
			link_data = LinkData()
			link_data[LinkData.Field.link] = promotion_url
			link_data[LinkData.Field.call_to_action] = call_to_action
			link_data[LinkData.Field.message] = body
			link_data[LinkData.Field.image_hash] = fb_image_id

			# add to object_story_spec
			object_story_spec[ObjectStorySpec.Field.link_data] = link_data
			object_story_spec[ObjectStorySpec.Field.page_id] = fb_page_id
			if instagram_actor_id:
				object_story_spec[ObjectStorySpec.Field.instagram_actor_id] = instagram_actor_id

			# creative creation
			fb_creative = AdCreative(parent_id='act_' + str(fb_account_id))
			fb_creative.update({
				AdCreative.Field.object_story_spec : object_story_spec
			})
			fb_creative.remote_create()

			return fb_creative[AdCreative.Field.id]

		except Exception as e:
			logger.exception(e)
Пример #5
0
def create_creative_from_object_story_id(object_story_id):
    creative = AdCreative(parent_id=test_config.account_id)
    creative[AdCreative.Field.object_story_id] = object_story_id
    creative[AdCreative.Field.name] = 'AdCreative from object story ID'

    creative.remote_create()
    atexit.register(remote_delete, creative)

    return creative
Пример #6
0
    def s4_create_creative(
        self,
        accountid,
        name,
        imagehashes,
        linktitles,
        deeplinks,
        message,
        appinfo
    ):
        """
        Step 4: create ad creative with call to action type to be
        'INSTALL_MOBILE_APP'. See
        [Ad Creative](
        https://developers.facebook.com/docs/marketing-api/adcreative)
        for further details on the API used here.
        """
        attachments = []
        for index, imagehash in enumerate(imagehashes):
            attachment = AttachmentData()
            attachment[AttachmentData.Field.link] = appinfo['appstore_link']
            attachment[AttachmentData.Field.image_hash] = imagehash
            call_to_action = {
                'type': 'INSTALL_MOBILE_APP',
                'value': {
                    'link_title': linktitles[index],
                },
            }
            if deeplinks and index in deeplinks:
                call_to_action['value']['app_link'] = deeplinks[index]

            attachment[AttachmentData.Field.call_to_action] = call_to_action
            attachments.append(attachment)

        link_data = LinkData()
        link_data[LinkData.Field.link] = appinfo['appstore_link']
        link_data[LinkData.Field.message] = message
        link_data[LinkData.Field.child_attachments] = attachments

        object_story_spec = ObjectStorySpec()
        object_story_spec[ObjectStorySpec.Field.page_id] = appinfo['fbpage_id']
        object_story_spec[ObjectStorySpec.Field.link_data] = link_data

        creative = AdCreative(parent_id=accountid)
        creative[AdCreative.Field.name] = name
        creative[AdCreative.Field.object_story_spec] = object_story_spec
        creative.remote_create()

        return creative[AdCreative.Field.id]
	def build_carousel_creative(self, fb_account_id, promotion_url, title, sub_title, body, fb_image_ids, fb_page_id, logger, instagram_actor_id=0):
		""" create facebook/instagram carousel creative"""
		try:
			# build Link-Ad
			call_to_action = {
				'type': 'INSTALL_MOBILE_APP',
				'value': {
					'link_title': sub_title,
					'link': promotion_url,
				}
			}
			child_attachments = []
			for i in range(len(fb_image_ids)):
				attachment_data = AttachmentData()
				attachment_data[AttachmentData.Field.call_to_action] = call_to_action
				attachment_data[AttachmentData.Field.name] = 'name %d' % i
				attachment_data[AttachmentData.Field.description] = 'description %d' % i
				attachment_data[AttachmentData.Field.image_hash] = fb_image_ids[i]
				attachment_data[AttachmentData.Field.link] = promotion_url

				child_attachments.append(attachment_data)

			link_data = LinkData()
			link_data[LinkData.Field.link] = promotion_url
			link_data[LinkData.Field.child_attachments] = child_attachments
			link_data[LinkData.Field.multi_share_optimized] = True
			link_data[LinkData.Field.call_to_action] = call_to_action
			link_data[LinkData.Field.message] = body

			object_story_spec = ObjectStorySpec()
			object_story_spec[ObjectStorySpec.Field.page_id] = fb_page_id
			object_story_spec[ObjectStorySpec.Field.link_data] = link_data

			fb_creative = AdCreative(parent_id='act_' + str(fb_account_id))
			fb_creative.update({
				AdCreative.Field.object_story_spec : object_story_spec
			})
			fb_creative.remote_create()

			return fb_creative[AdCreative.Field.id]

		except Exception as e:
			logger.exception(e)
Пример #8
0
def create_creative(image=create_image()):
    image_hash = image.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] = test_config.page_id
    object_story_spec[ObjectStorySpec.Field.link_data] = link_data

    creative = AdCreative(parent_id=test_config.account_id)
    creative[AdCreative.Field.name] = unique_name('Test Creative')
    creative[AdCreative.Field.object_story_spec] = object_story_spec
    creative.remote_create()

    atexit.register(remote_delete, creative)

    return creative
Пример #9
0
def create_creative(image=None):
    if image is None:
        image = create_image()

    image_hash = image.get_hash()

    link_data = LinkData()
    link_data[LinkData.Field.message] = 'try it out'
    link_data[LinkData.Field.link] = test_config.app_url
    link_data[LinkData.Field.caption] = 'Caption'
    link_data[LinkData.Field.image_hash] = image_hash

    object_story_spec = ObjectStorySpec()
    object_story_spec[ObjectStorySpec.Field.page_id] = test_config.page_id
    object_story_spec[ObjectStorySpec.Field.link_data] = link_data

    creative = AdCreative(parent_id=test_config.account_id)
    creative[AdCreative.Field.name] = unique_name('Test Creative')
    creative[AdCreative.Field.object_story_spec] = object_story_spec
    creative.remote_create()

    atexit.register(remote_delete, creative)

    return creative
Пример #10
0
    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'],
        }
from facebookads.objects import AdCreative
from facebookads.specs import ObjectStorySpec, LinkData

link_data = LinkData()
link_data[LinkData.Field.message] = 'My message'
link_data[LinkData.Field.link] = url
link_data[LinkData.Field.caption] = 'www.domain.com'

call_to_action = {
    'type': 'SIGN_UP',
    'value': {
        'link': url,
        'link_caption': 'Sign up!',
    }
}

link_data[LinkData.Field.call_to_action] = call_to_action

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)
creative[AdCreative.Field.name] = 'AdCreative for Link Ad with CTA'
creative[AdCreative.Field.object_story_spec] = object_story_spec
creative.remote_create()
print(creative)
# _DOC close [ADCREATIVE_CREATE_LINK_AD_CALL_TO_ACTION]

creative.remote_delete()
Пример #12
0
    ### 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:")
    pp.pprint(creative)

    ### Get excited, we are finally creating an ad!!!
    ad = AdGroup(parent_id=my_account.get_id_assured())
    ad.update({
        AdGroup.Field.name: 'Puget Sound impression ad',
        AdGroup.Field.campaign_id: ad_set.get_id_assured(),
        AdGroup.Field.creative: {
            AdGroup.Field.Creative.creative_id: creative.get_id_assured(),
        },
    })
    ad.remote_create()
    print("**** DONE: Ad created:")
    pp.pprint(ad)
Пример #13
0
    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
Пример #14
0
    def different_os_copy(self, campaign, adset, adgroups):
        parent_id = config['act_id'][self.param['account']]
        link_url = config['link_url'][self.param['account']][self.param['os']]

        account = AdAccount(parent_id)
        custom_audiences = account.get_custom_audiences(
            fields=[
                CustomAudience.Field.name,
            ],
            params={'limit': 100}
        )

        copy_custom_audience = []
        copy_excluded_audience = []
        for i in range(0, len(custom_audiences)):
            custom_audience = custom_audiences[i]
            if custom_audience['id'] in self.param.getlist('custom_audiences'):
                audience = {
                    'id': custom_audience['id'],
                    'name': custom_audience['name']
                }
                copy_custom_audience.append(audience)
            if custom_audience['id'] in self.param.getlist('excluded_custom_audiences'):
                excluded_audience = {
                    'id': custom_audience['id'],
                    'name': custom_audience['name']
                }
                copy_excluded_audience.append(excluded_audience)

        copy_promoted_object = copy.deepcopy(adset['promoted_object'])
        copy_promoted_object['object_store_url'] = link_url

        copy_targeting = copy.deepcopy(adset['targeting'])
        copy_targeting['user_os'] = [config['user_os'][self.param['os']]]
        copy_targeting['age_max'] = self.param['age_max']
        copy_targeting['age_min'] = self.param['age_min']
        copy_targeting['geo_locations']['countries'] = self.param.getlist('countries')
        copy_targeting['custom_audiences'] = copy_custom_audience
        copy_targeting['excluded_custom_audiences'] = copy_excluded_audience

        # Default to all.
        if 'user_device' in copy_targeting:
            del copy_targeting['user_device']

        # Defaults to all. Do not specify 0.
        if(self.param['gender']):
            copy_targeting['genders'] = [self.param['gender']]
        else:
            copy_targeting['genders'] = [1, 2]

        copy_adset = AdSet(parent_id=parent_id)
        copy_adset.update({
            AdSet.Field.name: self.param['adset_name'],
            AdSet.Field.daily_budget: adset['daily_budget'],
            AdSet.Field.promoted_object: copy_promoted_object,
            AdSet.Field.is_autobid: adset['is_autobid'],
            AdSet.Field.targeting: copy_targeting,
            AdSet.Field.status: self.param['status'],
            AdSet.Field.campaign_group_id: self.param['campaign_id'],
            AdSet.Field.billing_event: adset['billing_event'],
            AdSet.Field.optimization_goal: adset['optimization_goal'],
            AdSet.Field.rtb_flag: adset['rtb_flag']
        })

        if 'bid_amount' in adset:
            copy_adset.update({
                AdSet.Field.bid_amount: adset['bid_amount']
            })
        copy_adset.remote_create()
        print("*** DONE: Copy AdSet ***")
        pp.pprint(copy_adset)

        creatives = adset.get_ad_creatives(
            fields=[
                AdCreative.Field.name,
                AdCreative.Field.object_story_spec
            ],
            params={
                'limit': 50
            }
        )

        for i in range(0, len(adgroups)):
            adgroup = adgroups[i]

            creative = {}
            for j in range(0, len(creatives)):
                if (adgroup['creative']['id'] == creatives[j]['id']):
                    creative = creatives[j]
                    break

            object_story_spec = creative['object_story_spec']
            if 'link_data' in object_story_spec:
                copy_object_story_spec = self.get_object_story_spec_for_image(
                    object_story_spec,
                    link_url
                )
            elif 'video_data' in object_story_spec:
                copy_object_story_spec = self.get_object_story_spec_for_video(
                    object_story_spec,
                    link_url
                )
            else:
                break

            copy_creative = AdCreative(parent_id=parent_id)
            copy_creative[AdCreative.Field.name] = creative['name'],
            copy_creative[AdCreative.Field.object_story_spec] = copy_object_story_spec
            copy_creative.remote_create()
            print("*** DONE: Copy Creative ***")
            pp.pprint(copy_creative)

            copy_adgroup = AdGroup(parent_id=parent_id)
            copy_adgroup.update({
                AdGroup.Field.name: adgroup['name'],
                AdGroup.Field.campaign_id: copy_adset['id'],
                AdGroup.Field.status: adgroup['adgroup_status'],
                AdGroup.Field.creative: {
                    AdGroup.Field.Creative.creative_id: copy_creative['id']
                },
                AdGroup.Field.tracking_specs: adgroup['tracking_specs']
            })
            copy_adgroup.remote_create()
            print("*** DONE: Copy AdGroup ***")
            pp.pprint(copy_adgroup)

        result = {
            'adset': copy_adset,
            'campaign': campaign,
            'adgroups': adgroups
        }

        return result