def list_custom_audiences():
    FacebookAdsApi.init(my_app_id, my_app_secret, my_access_token)
    my_account = AdAccount(f'act_{ad_account}')
    fields = ['account_id'
    ,'approximate_count'
    ,'customer_file_source'
    ,'data_source'
    ,'delivery_status'
    ,'description'
    ,'household_audience'
    ,'id'
    ,'is_household'
    ,'is_snapshot'
    ,'is_value_based'
    ,'name'
    ,'operation_status'
    ,'permission_for_actions'
    ,'retention_days'
    ,'seed_audience'
    ,'sharing_status'
    ,'subtype'
    ,'time_content_updated'
    ,'time_created'
    ,'time_updated'
    ]
    audiences = my_account.get_custom_audiences(fields=fields)
    return audiences
Example #2
0
def main():
    db = Db(dbconfig)
    FacebookAdsApi.init(my_app_id, my_app_secret, my_access_token)
    for account in accounts:
        my_account = AdAccount(fbid=account)
        adcampaigns = fetch_campaigns(my_account)
        adsets = fetch_adsets(my_account)
        ads = fetch_ads(my_account)
        delete_from_db(db, 'ams_ad_compaign_stat_h',
                       'stat_dt="{}"'.format(yesterday))
        delete_from_db(db, 'ams_ad_set_stat_h',
                       'stat_dt="{}"'.format(yesterday))
        delete_from_db(db, 'ams_ad_stat_h', 'stat_dt="{}"'.format(yesterday))
        '''
        for adcampaign in adcampaigns:
            print(adcampaign)
            replace_into_db(db, 'ams_ad_compaign', adcampaign)
            campaign_stats = fetch_campaign_data(adcampaign['facebook_ad_campaign_id'])
            
            for campaign_stat in campaign_stats:
                insert_into_db(db, 'ams_ad_compaign_stat_h', campaign_stat)
        '''
        for adset in adsets:
            # 如果广告组数据为当天创建或更新,则插入
            print(adset)
            replace_into_db(db, 'ams_ad_set', adset)
            adset_stats = fetch_adset_data(adset['facebook_adset_id'])

            for adset_stat in adset_stats:
                print(adset_stat)
                insert_into_db(db, 'ams_ad_set_stat_h', adset_stat)
Example #3
0
 def input_config(self, config):
     logging.info('Loading Facebook config file: {}'.format(config))
     self.configfile = os.path.join(config_path, config)
     self.load_config()
     self.check_config()
     FacebookAdsApi.init(self.app_id, self.app_secret, self.access_token)
     self.account = AdAccount(self.config['act_id'])
Example #4
0
def init_api(access_token):
    '''
        initiates the facebook api
        args:
            access_token    :   long-lived access token (provided from backend) <STRING>
    '''
    FacebookAdsApi.init(access_token=access_token)
def view_ad(request):
    FacebookAdsApi.init(access_token=access_token,
                        app_id=app_id,
                        app_secret=app_secret)
    my_account = AdAccount('act_' + user_id)
    adsets = my_account.get_ad_sets()
    adset_id = []
    for i in range(len(adsets)):
        adset_id.append(adsets[i]["id"])

    for adset in adset_id:
        ad_set = AdSet(adset)
        fields = [
            Ad.Field.name,
            Ad.Field.id,
        ]
        ad_iter = ad_set.get_ads(fields=fields)
    ad_data = []
    for ad in ad_iter:
        result = {}
        result["id"] = ad[Ad.Field.id]
        result["name"] = ad[Ad.Field.name]
        ad_data.append(result)
    context = {'ads': ad_data}

    return render(request, 'fbapp/view_ad.html', context)
def view_adset(request):
    FacebookAdsApi.init(access_token=access_token,
                        app_id=app_id,
                        app_secret=app_secret)

    my_account = AdAccount('act_' + user_id)

    adsets = my_account.get_ad_sets()
    adset_id = []
    for i in range(len(adsets)):
        adset_id.append(adsets[i]["id"])

    adset_data = []
    for id in adset_id:
        adset = AdSet(fbid=id)
        fields = [
            AdSet.Field.name,
            AdSet.Field.effective_status,
            AdSet.Field.campaign_id,
            AdSet.Field.status,
        ]
        adset.remote_read(fields=fields)

        result = {}
        result["id"] = id
        result["name"] = adset[AdSet.Field.name]
        result["campid"] = adset[AdSet.Field.campaign_id]
        result["status"] = adset[AdSet.Field.status]
        result["data_1"] = "ACTIVE"
        result["data_2"] = "PAUSED"
        adset_data.append(result)

    context = {'adsets': adset_data}

    return render(request, 'fbapp/view_adset.html', context)
Example #7
0
def get_location():
    location_query = request.form['location_query']

    # reference: https://developers.facebook.com/docs/marketing-api/targeting-search#geo
    params = {
        'q': location_query,
        'type': 'adgeolocation',
        'location_types': ['city'],  # only city results
        'limit': 5,
        "country_code": "US",  # only search results from US
    }
    FacebookAdsApi.init(access_token=g.user['access_token'],
                        api_version='v3.3')
    data = TargetingSearch.search(params=params)

    list = []
    for i in range(len(data)):
        #{'name':"Charleston, SC, United States", 'type': 'city'}
        str = data[i]["name"] + ", " + data[i]["region"] + ", " + data[i][
            "country_code"]
        list.append({
            'name': str,
            'type': data[i]["type"],
            'key': data[i]["key"]
        })

    return jsonify(list)
def list_ad_set():
    FacebookAdsApi.init(access_token=my_access_token)
    fields = [
        'account_id',
        'attribution_spec',
        'bid_strategy',
        'billing_event',
        'budget_remaining',
        'campaign',
        'campaign_id',
        'configured_status',
        'created_time',
        'creative_sequence',
        'daily_budget',
        'destination_type',
        'effective_status',
        'id',
        'lifetime_budget',
        'lifetime_imps',
        'name',
        'optimization_goal',
        'pacing_type',
        'recommendations',
        'recurring_budget_semantics',
        'source_adset_id',
        'start_time',
        'status',
        'targeting',
        'updated_time',
        'use_new_app_click',
    ]

    return Campaign(f'act_{ad_account}').get_ad_sets(fields=fields)
def view_campaign(request):
    FacebookAdsApi.init(access_token=access_token,
                        app_id=app_id,
                        app_secret=app_secret)

    my_account = AdAccount('act_' + user_id)

    campaigns = my_account.get_campaigns()
    camp_id = []
    for i in range(len(campaigns)):
        camp_id.append(campaigns[i]["id"])
    campaign_data = []
    for id in camp_id:
        campaign = Campaign(fbid=id)
        fields = [
            Campaign.Field.id,
            Campaign.Field.name,
            Campaign.Field.status,
        ]
        campaign.remote_read(fields=fields)

        result = {}
        result["id"] = campaign[Campaign.Field.id]
        result["name"] = campaign[Campaign.Field.name]
        result["status"] = campaign[Campaign.Field.status]
        result["data_1"] = "ACTIVE"
        result["data_2"] = "PAUSED"
        campaign_data.append(result)

    context = {'campaigns': campaign_data}

    return render(request, 'fbapp/view_campaign.html', context)
Example #10
0
def manager(adaccount):

    FacebookAdsApi.init(cfg.my_app_id, cfg.my_app_secret, cfg.my_access_token, proxies=proxies)
    my_account = AdAccount(adaccount)
    db_model = GetFacebook(cfg.dbconfig)
    print('asss')

    # ad_campaign_object = GetCampaigns(my_account, db_model)
    # ad_set_object = GetAdsets(my_account, db_model)
    # ad_object = GetAds(my_account, db_model)
    creative_object = GetCreative(my_account, db_model)
    print('fghhh')
    # adcampaigns = ad_campaign_object.fetch_campaigns()

    # worker_basic(ad_campaign_object.handle_campaign, adcampaigns)
    # active_campaigns = db_model.get_active_campaigns()
    # active_campaigns = [active_campaign[0] for active_campaign in active_campaigns]
    # print(active_campaigns)
    # worker_stat(ad_campaign_object.handle_campaign_data, active_campaigns)

    # adsets = ad_set_object.fetch_ad_sets()
    # worker_basic(ad_set_object.handle_ad_sets, adsets)
    # active_adsets = db_model.get_active_adsets()
    # active_adsets = ['23842905693710040']
    # active_campaigns = [active_adset[0] for adset in adsets]
    # worker_stat(ad_set_object.handle_adset_data, active_adsets)

    # ads = ad_object.fetch_ads()
    # worker_basic(ad_object.handle_ads, ads)
    creative_object = GetCreative(my_account, db_model)
    creatives = creative_object.fetch_adcreative()
    worker_basic(creative_object.handle_creatives, creatives)
Example #11
0
def create_adset(request):
	if request.method == 'GET':
		access_token=request.headers['token']
		campaignId = request.GET.get('campignId')

		app_secret = 'db4b3037cd105cfd23b6032aecd2c3ff'
		app_id = '263805807945856'
		id = 'act_2770121319724389'
		CAMPAIGN_ID = campaignId
		FacebookAdsApi.init(access_token=access_token)
		fields = []
		params = {
		  'name': 'My Reach Ad Set',
		  'optimization_goal': 'REACH',
		  'billing_event': 'IMPRESSIONS',
		  'end_time': '2020-5-19T23:43:36-0800',
		  'bid_amount': '2',
		  'daily_budget': 20979,
		  'campaign_id': '23844605998330207',
		  'status': 'PAUSED',
		  'targeting': {'facebook_positions':['feed'],'geo_locations':{'countries':['IN']},'user_os':['iOS']},
		}
		adsets= AdAccount(id).create_ad_set(
		  fields=fields,
		  params=params,
		)
		return Response(adsets)
	else:
		return HttpResponse('not found')
Example #12
0
def list_campaigns():
    FacebookAdsApi.init(my_app_id, my_app_secret, my_access_token)
    my_account = AdAccount(f'act_{ad_account}')
    fields = [
        'account_id',
        'budget_rebalance_flag',
        'budget_remaining',
        'buying_type',
        'can_create_brand_lift_study',
        'can_use_spend_cap',
        'configured_status',
        'created_time',
        'effective_status',
        'id',
        'name',
        'objective',
        'recommendations',
        'source_campaign',
        'source_campaign_id',
        'spend_cap',
        'start_time',
        'status',
        'updated_time',
    ]
    return my_account.get_campaigns(fields=fields)
Example #13
0
def removebg(request):
	if request.method=='GET':
		# access_token='bb8bbe1bee5159f369d60e626700ed747d9468ad'
		access_token=request.headers['token']
		adds=[]
		app_secret = 'db4b3037cd105cfd23b6032aecd2c3ff'
		app_id = '263805807945856'
		# id = 'act_2770121319724389'
		id = request.GET.get('userId')
		FacebookAdsApi.init(access_token=access_token)

		fields = [
		  'name',
		  'objective',
		]
		params = {
		  'effective_status': ['ACTIVE','PAUSED'],
		}
		add=AdAccount(id).get_campaigns(
		  fields=fields,
		  params=params)
		data1=[]
		for i in add:
			data={
			'id':i['id'],
			'name':i['name']
			}
			data1.append(data)
		print(data1)

		return JsonResponse(data1, safe=False)
	else:
		return HttpResponse('not found')
def create_adset(request, camid):
    FacebookAdsApi.init(access_token=access_token,
                        app_id=app_id,
                        app_secret=app_secret)

    my_account = AdAccount('act_' + user_id)

    adset = AdSet(parent_id=my_account.get_id_assured())
    adset[AdSet.Field.name] = 'Ad Set created by afnan -' + str(
        random.randint(1, 10))
    adset[AdSet.Field.promoted_object] = {
        'application_id': app_id,
    }
    adset[AdSet.Field.campaign_id] = camid
    adset[AdSet.Field.daily_budget] = 10000
    adset[AdSet.Field.billing_event] = AdSet.BillingEvent.impressions
    adset[AdSet.Field.bid_amount] = 2
    adset[AdSet.Field.status] = 'PAUSED'
    adset[AdSet.Field.targeting] = {
        Targeting.Field.geo_locations: {
            'countries': ['US'],
        },
        Targeting.Field.publisher_platforms: ['facebook', 'audience_network'],
        Targeting.Field.device_platforms: ['mobile'],
        Targeting.Field.user_os: [
            'IOS',
        ],
    }

    adset.remote_create()

    result = {"id": adset.get_id()}

    return redirect('view-adset')
Example #15
0
    def auth(cls):
        """
            Prepare for Ads API calls and return a tuple with act_id
            and page_id. page_id can be None but act_id is always set.
        """
        config = cls.load_config()

        if cls._is_authenticated:
            return config['act_id'], config.get('page_id', None)

        if config['app_id'] and config['app_secret'] \
           and config['act_id'] and config['access_token']:

            FacebookAdsApi.init(
                config['app_id'],
                config['app_secret'],
                config['access_token'],
                config['act_id'],
            )

            cls._is_authenticated = True

            return config['act_id'], config.get('page_id', None)

        else:
            required_fields = set(
                ('app_id', 'app_secret', 'act_id', 'access_token'))

            missing_fields = required_fields - set(config.keys())
            raise FacebookError(
                '\n\tFile config.json needs to have the following fields: {}\n'
                '\tMissing fields: {}\n'.format(
                    ', '.join(required_fields),
                    ', '.join(missing_fields),
                ))
Example #16
0
def update_ad_set_targeting(request):
	if request.method == 'POST':
		print('----------------------------------')
		access_token=request.headers['token']
		received_json_data = json.loads(request.body)
		latitude = received_json_data['lati']
		latitude = float(latitude)
		print(latitude)
		longitude = received_json_data['long']
		longitude = float(longitude)
		print(longitude)
		adsetId = request.GET.get('adsetId')
		app_secret = 'db4b3037cd105cfd23b6032aecd2c3ff'
		app_id = '263805807945856'
		ADSET_ID = adsetId
		FacebookAdsApi.init(access_token=access_token)
		fields = ['targeting']
		print(fields)
		params = {
		'targeting': {'geo_locations':{'custom_locations':[
          {
            "radius":30,
            "latitude":latitude,
            "longitude":longitude
         }]},},
		}
		updateadset= AdSet(ADSET_ID).api_update(
				fields=fields,
				params=params,
				)
		print(updateadset)
		return Response(updateadset)
	else:
		return HttpResponse('not found')
def image_upload(image_path):
    files = list()
    image_path = unidecode(image_path)
    print(image_path)
    if not os.path.isfile(f'samples/images/{image_path}.png'):
        for file in os.listdir('samples/images/'):
            if file.startswith(image_path.split('_')[0]):
                files.append(file)
        for file in os.listdir('samples/images/'):
            if file.startswith(image_path[0:3]):
                files.append(file)
        if not files:
            for file in os.listdir('samples/images/'):
                if file.startswith(image_path[0]):
                    files.append(file)
        # pprint(files)
        # image_path = input('Set valid path: ')
        image_path = files[0]

    FacebookAdsApi.init(access_token=my_access_token)
    image = AdImage(parent_id=f'act_{ad_account}')
    if image_path.endswith('.png'):
        image[AdImage.Field.filename] = f'samples/images/{image_path}'
    else:
        image[AdImage.Field.filename] = f'samples/images/{image_path}.png'
    image.remote_create()
    image_hash = image[AdImage.Field.hash]
    return image_hash
def create_ad_set(campaign_id, audience_id, audience_name):
    try:
        FacebookAdsApi.init(access_token=my_access_token)
        fields = []
        params = {
            AdSet.Field.name: audience_name,
            AdSet.Field.campaign_id: campaign_id,
            AdSet.Field.daily_budget: 5000,
            AdSet.Field.start_time: int(time.time()),
            AdSet.Field.end_time: int(time.time() + 100000),
            AdSet.Field.optimization_goal: AdSet.OptimizationGoal.video_views,
            AdSet.Field.billing_event: AdSet.BillingEvent.video_views,
            AdSet.Field.bid_amount: 100,
            AdSet.Field.targeting: {
                "geo_locations": {
                    "countries": ["UA"],
                },
                "age_min": 18,
                "age_max": 65,
                "publisher_platforms": ['facebook'],
                "custom_audiences": [{
                    "id": audience_id
                }]
            },
            Targeting.Field.device_platforms: ['mobile', 'desktop'],
        }
        return AdAccount(f'act_{ad_account}').create_ad_set(fields=fields,
                                                            params=params)
    except Exception as e:
        print(type(e))
def update_campaign(campaign_id, params):
    """
    Update a campaign

    :param campaign_id: a string or int representing the campaign id
    :param params: a dict containing parameters and values to update
    :return: the exit status of the process if operation is successful
             -1 otherwise
    """
    FacebookAdsApi.init(access_token=FacebookConstants.access_token)
    cmd = "curl -X POST \\\n"
    for k, v in params.items():
        cmd += "    -F '{}={}' \\\n".format(k, v)
    cmd += "    -F 'access_token={}' \\\n".format(
        FacebookConstants.access_token)
    cmd += "    https://graph.facebook.com/v3.3/{}".format(campaign_id)

    try:
        # TODO: use subprocess module instead of os.system
        res = os.system(cmd)
    except Exception as e:
        print(e)
        return -1

    return res
def delete_campaigns(delete_strategy, before_date=None, object_count=None):
    """
    Delete campaigns according to params
    NOTE: Not very useful for now; use `delete_campaign_by_id` instead

    :param delete_strategy: a string representing delete strategy
    :param before_date: a datetime, only delete campaigns before this date
    :param object_count: a int representing the object count
    :return: an object containing list of deleted ids and objects left to delete count if operation is successful
             None otherwise
    """
    FacebookAdsApi.init(access_token=FacebookConstants.access_token)
    fields = []
    params = {
        'before_date': before_date,
        'delete_strategy': delete_strategy,
        'object_count': object_count
    }

    try:
        res = AdAccount(FacebookConstants.account_id).delete_campaigns(
            fields=fields, params=params)
    except Exception as e:
        print(e)
        return None

    return res
Example #21
0
def update_ad_set_date(request):
	if request.method == 'POST':
		print('----------------------------------')
		access_token=request.headers['token']

		received_json_data = json.loads(request.body)
		endDate = received_json_data['end_time']
		startDate = received_json_data['start_time']
		print('-----------' + endDate)
		adsetId = request.GET.get('adsetId')
		app_secret = 'db4b3037cd105cfd23b6032aecd2c3ff'
		app_id = '263805807945856'
		ADSET_ID = adsetId
		FacebookAdsApi.init(access_token=access_token)
		fields = ['start_time','end_time']
		print('><><>>',fields)
		params = {
			'start_time':startDate,
			'end_time':endDate,
		}
		updateadset= AdSet(ADSET_ID).api_update(
				fields=fields,
				params=params,
				)
		print(updateadset)
		return Response(updateadset)
	else:
		return HttpResponse('not found')
Example #22
0
    def __init__(self):
        self.accs_fields = ["name", "id", "timezone_id"]
        self.camps_fields = [
            "name",
            "account_id",
            "objective",
        ]

        self.insights_fields = [
            "impressions",
            "reach",
            "spend",
            "cpm",
            "clicks",
            "cpc",
            "ctr",
            "actions",
            "cost_per_action_type",
        ]

        self.insights_params = dict(
            time_increment=7,
            time_range=dict(
                since=self.year_n_week_start,
                until=today,
            ),
        )

        self.access_token = json.load(open("../access/facebook.json", "r"))
        FacebookAdsApi.init(access_token=self.access_token)
Example #23
0
    def ewah_execute(self, context):
        time_range = {
            "since": self.data_from.strftime("%Y-%m-%d"),
            "until": self.data_until.strftime("%Y-%m-%d"),
        }

        FacebookAdsApi.init(**self.credentials)
        params = {
            "time_range": time_range,
            "time_increment": self.time_increment,
            "level": self.level,
            "limit": self.pagination_limit,
        }
        if self.breakdowns:
            params.update({"breakdowns": ",".join(self.breakdowns)})

        for account_id in self.account_ids:
            if self.execution_waittime_seconds:
                self.log.info("Delaying execution by {0} seconds...".format(
                    str(self.execution_waittime_seconds), ))
                now = datetime_utcnow_with_tz()
                while datetime_utcnow_with_tz() < (now + timedelta(
                        seconds=self.execution_waittime_seconds)):
                    time.sleep(1)

            account_object = AdAccount("act_{0}".format(str(account_id)))
            self.log.info(
                ("Requesting data for account_id={0} between {1} and {2}."
                 ).format(
                     str(account_id),
                     time_range["since"],
                     time_range["until"],
                 ))

            async_job = account_object.get_insights_async(
                fields=self.insight_fields,
                params=params,
            )
            job_remote_read = async_job.api_get()
            done_status = [
                "Job Completed",
                "Job Failed",
                "Job Skipped",
            ]
            while not (job_remote_read.get("async_status") in done_status):
                self.log.info(
                    "Asnyc job completion: {0}% (status: {1})".format(
                        str(job_remote_read.get("async_percent_completion")),
                        str(job_remote_read.get("async_status")),
                    ))
                time.sleep(self.async_job_read_frequency_seconds)
                job_remote_read = async_job.api_get()

            time.sleep(1)
            assert job_remote_read.get("async_status") == "Job Completed"
            data = self._clean_response_data(
                async_job.get_result(params={"limit":
                                             self.pagination_limit}, ))
            self.upload_data(data)
def delete_ad(request, adid):
    FacebookAdsApi.init(access_token=access_token,
                        app_id=app_id,
                        app_secret=app_secret)

    ad = Ad(adid)
    ad.remote_delete()

    return redirect('view_ad')
def delete_campaign(request, camid):
    FacebookAdsApi.init(access_token=access_token,
                        app_id=app_id,
                        app_secret=app_secret)

    campaign = Campaign(camid)
    campaign.remote_delete()

    return redirect('view-campaign')
def video_upload(file_path):
    FacebookAdsApi.init(access_token=my_access_token)
    video = AdVideo(parent_id=f'act_{ad_account}')
    video[AdVideo.Field.filepath] = file_path
    video[AdVideo.Field.name] = 'my_new_vid'
    video.remote_create()
    video.waitUntilEncodingReady()
    time.sleep(10)
    return video['id']
def update_campaign(request, campid, status):
    FacebookAdsApi.init(access_token=access_token,
                        app_id=app_id,
                        app_secret=app_secret)

    campaign = Campaign(campid)
    campaign[Campaign.Field.status] = status
    campaign.remote_update()

    return redirect('view-campaign')
Example #28
0
def add_users_mk(ca_id, users):
    FacebookAdsApi.init(my_app_id, my_app_secret, my_access_token)
    audience = CustomAudience(ca_id)

    schema = [
        CustomAudience.Schema.MultiKeySchema.email,
    ]

    audience.add_users(schema, users, is_raw=True)
    return audience.get_id()
Example #29
0
def get_page_insight(request):
    my_app_id = SocialApp.client_id
    my_app_secret = '0e51c739872e518f388fbf1439b6d7e7'
    my_access_token = 'EAAt6AfVaOUABAJZBOoHMic2IZAADP3QpJyRwev57FUJIvkSUtAo5ZATcmYLb7EgqOLZB0RAhHKYupyxnbmRlDzjRJDtSKKjCnR6KaVw0n3HnHM6FsKf4We9ynZBVjrBs9GfDdSm4y94bZCcJjLHv56npCfrHWn3WBRePPs6mD4WwZDZD'
    FacebookAdsApi.init(my_app_id, my_app_secret, my_access_token)
    me = AdUser(fbid='me')
    my_pages = me.get_pages(fields=[Page.Field.name, Page.Field.id])
    my_ad_account = me.get_ad_accounts(
        fields=[AdAccount.Field.name, AdAccount.Field.id])
    pass
Example #30
0
    def _add_batch_to_custom_audience(app_id, app_secret, access_token, audience_id, schema,
                                      batch, added_so_far, total_rows):
        # Since this method runs in parallel, we need to re-initialize the Facebook API each time
        # to avoid SSL-related errors. Basically, the FacebookAdsApi python framework isn't
        # built to run in parallel.
        FacebookAdsApi.init(app_id, app_secret, access_token)

        # Note that the FB SDK handles basic normalization and hashing of the data
        CustomAudience(audience_id).add_users(schema, batch, is_raw=True)
        logger.info(f"Added {added_so_far+len(batch)}/{total_rows} users to custom audience...")
# 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 facebook_business.adobjects.adaccount import AdAccount
from facebook_business.adobjects.campaign import Campaign
from facebook_business.api import FacebookAdsApi

access_token = '<ACCESS_TOKEN>'
app_secret = '<APP_SECRET>'
app_id = '<APP_ID>'
id = '<AD_ACCOUNT_ID>'
FacebookAdsApi.init(access_token=access_token)

fields = [
]
params = {
  'name': 'Video Views campaign',
  'objective': 'VIDEO_VIEWS',
  'status': 'PAUSED',
}
print AdAccount(id).create_campaign(
  fields=fields,
  params=params,
)
repo_dir = os.path.join(this_dir, os.pardir)
sys.path.insert(1, repo_dir)

from facebook_business.objects import AdAccount, AsyncJob
from facebook_business.api import FacebookAdsApi
import time
import os
import json

this_dir = os.path.dirname(__file__)
config_filename = os.path.join(this_dir, 'config.json')
config_file = open(config_filename)
config = json.load(config_file)
config_file.close()

api = FacebookAdsApi.init(access_token=config['access_token'])
account_id = config['act_id']

account = AdAccount(account_id)

# Both Insights and Reportstats
i_async_job = account.get_insights(params={'level': 'ad'}, is_async=True)

# Insights
while True:
    job = i_async_job.remote_read()
    print("Percent done: " + str(job[AsyncJob.Field.async_percent_completion]))
    time.sleep(1)
    if job:
        print("Done!")
        break
this_dir = os.path.dirname(__file__)
config_filename = os.path.join(this_dir, os.pardir, os.pardir, 'config.json')

import sys
sys.path.insert(1, os.path.join(this_dir, os.pardir, os.pardir))

config_file = open(config_filename)
config = json.load(config_file)
config_file.close()

from facebook_business.api import FacebookAdsApi
from facebook_business.objects import ProductCatalog, Product

FacebookAdsApi.init(
    config['app_id'],
    config['app_secret'],
    config['access_token'],
)

if __name__ == '__main__':
    catalog_id = '<INSERT_YOUR_CATALOG_ID_HERE>'
    catalog = ProductCatalog(catalog_id)
    fields = [
        Product.Field.id,
        Product.Field.name,
        Product.Field.price,
        Product.Field.url,
        Product.Field.availability
    ]
    """
        get products cost more than $99.99.