def __init__(self, clientid, appsecret, token):
     session = FacebookSession(
             clientid,
             appsecret,
             token
     )
     self.api = FacebookAdsApi(session)
     self.object_queue = queue.Queue()
     self.batch = self.api.new_batch()
Example #2
0
 def get_by_ids(cls, ids, params=None, fields=None, api=None):
     api = api or FacebookAdsApi.get_default_api()
     params = dict(params or {})
     cls._assign_fields_to_params(fields, params)
     params['ids'] = ','.join(map(str, ids))
     response = api.call(
         'GET',
         ['/'],
         params=params,
     )
     result = []
     for fbid, data in response.json().items():
         obj = cls(fbid, api=api)
         obj._set_data(data)
         result.append(obj)
     return result
Example #3
0
    def __init__(self, fbid=None, parent_id=None, api=None):
        """Initializes a CRUD object.
        Args:
            fbid (optional): The id of the object ont the Graph.
            parent_id (optional): The id of the object's parent.
            api (optional): An api object which all calls will go through. If
                an api object is not specified, api calls will revert to going
                through the default api.
        """
        super(AbstractCrudObject, self).__init__()

        self._api = api or FacebookAdsApi.get_default_api()
        self._changes = {}
        if (parent_id is not None):
            warning_message = "parent_id as a parameter of constructor is " \
                  "being deprecated."
            logging.warning(warning_message)
        self._parent_id = parent_id
        self._data['id'] = fbid
        self._include_summary = True
    def remote_create_from_zip(cls, filename, parent_id, api=None):
        api = api or FacebookAdsApi.get_default_api()
        open_file = open(filename, 'rb')
        response = api.call(
            'POST',
            (parent_id, cls.get_endpoint()),
            files={filename: open_file},
        )
        open_file.close()

        data = response.json()

        objs = []
        for image_filename in data['images']:
            image = cls(parent_id=parent_id)
            image.update(data['images'][image_filename])
            image[cls.Field.id] = '%s:%s' % (
                parent_id[4:],
                data['images'][image_filename][cls.Field.hash],
            )
            objs.append(image)

        return objs
    def search(cls, params=None, api=None):
        api = api or FacebookAdsApi.get_default_api()
        if not api:
            raise FacebookBadObjectError(
                "An Api instance must be provided as an argument or set as "
                "the default Api in FacebookAdsApi.",
            )

        params = {} if not params else params.copy()
        response = api.call(
            FacebookAdsApi.HTTP_METHOD_GET,
            "/".join((
                FacebookSession.GRAPH,
                FacebookAdsApi.API_VERSION,
                'search'
            )),
            params,
        ).json()

        ret_val = []
        if response:
            keys = response['data']
            # The response object can be either a dictionary of dictionaries
            # or a dictionary of lists.
            if isinstance(keys, list):
                for item in keys:
                    search_obj = TargetingSearch()
                    search_obj.update(item)
                    ret_val.append(search_obj)
            elif isinstance(keys, dict):
                for item in keys:
                    search_obj = TargetingSearch()
                    search_obj.update(keys[item])
                    if keys[item]:
                        ret_val.append(search_obj)
        return ret_val
# 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,
)
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.
class API:

    api = None
    object_queue = None

    batch = None

    class request_bundle:
        element = None
        success_callback = None
        failure_callback = None
        mode = None
        def __init__(self, target, m, success = None, failure = None):
            self.element = target
            self.mode = m
            self.success_callback = success
            self.failure_callback = failure

    def __init__(self, clientid, appsecret, token):
        session = FacebookSession(
                clientid,
                appsecret,
                token
        )
        self.api = FacebookAdsApi(session)
        self.object_queue = queue.Queue()
        self.batch = self.api.new_batch()

    class RemoteMode:
        CREATE = 0
        UPDATE = 1
        DELETE = 2
        
    def remote_create(self, target, success_event = None, failure_event = None):
        obj = API.request_bundle(target, API.RemoteMode.CREATE, success_event, failure_event)
        self.object_queue.put(obj)

    def remote_update(self, target, success_event = None, failure_event = None):
        obj = API.request_bundle(target, API.RemoteMode.UPDATE, success_event, failure_event)
        self.object_queue.put(obj)

    def remote_delete(self, target, success_event = None, failure_event = None):
        obj = API.request_bundle(target, API.RemoteMode.DELETE, success_event, failure_event)
        self.object_queue.put(obj)

    def execute(self):
        #time.sleep(300)
        totalcount = self.object_queue.qsize()
        currentcount = 0
        finished = False

        while not finished:
            for i in range(0, 30):
                if self.object_queue.qsize() == 0:
                    break;
                
                obj = self.object_queue.get()
                item = obj.element
                mode = obj.mode
                success_event = obj.success_callback
                fail_event = obj.failure_callback

                if mode == API.RemoteMode.CREATE:
                    item.remote_create(batch = self.batch, success=success_event ,failure= fail_event)
                elif mode == API.RemoteMode.UPDATE:
                    item.remote_update(batch = self.batch, success=success_event, failure = fail_event)
                elif mode == API.RemoteMode.DELETE:
                    item.remote_delete(batch = self.batch, success = success_event, failure = fail_event)
                currentcount = currentcount+1

            print 'Processing... : '+str(currentcount)+'/'+str(totalcount)
            self.batch.execute()
            self.batch = self.api.new_batch()
            if self.object_queue.qsize() == 0:
                print 'Finish work'
                finished = True
            else:
                print 'Wait 5min for next work'
                time.sleep(600)
Example #9
0
 def get_parent_id(self):
     """Returns the object's parent's id."""
     return self._parent_id or FacebookAdsApi.get_default_account_id()
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
from facebook_business.api import FacebookAdsApi
from facebook_business.adobjects.adaccount import AdAccount
from facebook_business.adobjects.adset import AdSet
import csv 
from matplotlib import pyplot as plt 
import json
import os
import calendar
import time
import numpy as np
plt.rcParams.update({'figure.max_open_warning': 0})

my_app_id = '2725706687661342'
my_app_secret = '259338521f39f49cacef7db0aae1ae5d'
my_access_token = 'EAAmvBArhRR4BADniGjZCgCluOLCRF7TolKU5UriWVmrBH6OUlBypAQgnx0nyPf2wimk3R4bRRQuuLzCbsR82a3DWtYnFMp8ndYTJbdLZBZBHgQQesfC1WjPYeLAYc4T4WoLZBL70olMwpOZBtH7gU7DWclHfDa2xGaMDZAhFOlw4D1SQZCl43F0'
FacebookAdsApi.init(my_app_id, my_app_secret, my_access_token)
my_account = AdAccount('act_2408768415887341')

ts = calendar.timegm(time.gmtime())
time = time.ctime(ts)

params = {
    'level': 'campaign',
    'date_preset': 'last_week_sun_sat'
    # 'date_preset': 'this_week_sun_today'
    
}
fields = [
    'campaign_id',
    'campaign_name',
    'impressions',
# 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 facebook_business.adobjects.adspixel import AdsPixel
from facebook_business.api import FacebookAdsApi

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

fields = [
]
params = {
  'data': [{'event_name':'PageView','event_time':1610578702,'user_data':{'fbc':'fb.1.1554763741205.AbCdEfGhIjKlMnOpQrStUvWxYz1234567890','fbp':'fb.1.1558571054389.1098115397','em':'309a0a5c3e211326ae75ca18196d301a9bdbd1a882a4d2569511033da23f0abd'}}],
}
print AdsPixel(id).create_event(
  fields=fields,
  params=params,
)
from facebook_business.adobjects.adaccount import AdAccount
from facebook_business.adobjects.adsinsights import AdsInsights
from facebook_business.api import FacebookAdsApi
from datetime import datetime, timedelta
from dateutil.relativedelta import relativedelta
import csv
import time

# Initialize the access_token
access_token = 
ad_account_id = 
app_secret = 
app_id = 

FacebookAdsApi.init(access_token = access_token)

# Insight API中的fields資料(控制需要的欄位資料)
fields = [
    'spend',
    'campaign_name',
    'adset_name',
    'campaign_id',
    'actions',
    'objective',
    'action_values',  
    'conversions',
    'conversion_values',
]

week_add = relativedelta(weeks = 1)
day_add = relativedelta(days = 1)
Example #14
0
def get_api(env, token: str) -> FacebookAdsApi:
    session = FacebookSession(env("FACEBOOK_APP_ID"),
                              env("FACEBOOK_APP_SECRET"), token)
    api = FacebookAdsApi(session)
    return api
Example #15
0
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.adobjects.productcatalog import ProductCatalog
from facebook_business.adobjects.productitem import ProductItem

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 = [
        ProductItem.Field.id,
        ProductItem.Field.name,
        ProductItem.Field.price,
        ProductItem.Field.url,
        ProductItem.Field.availability
    ]
    """
        get products cost more than $99.99.
from facebook_business.adobjects.adset import AdSet
from facebook_business.adobjects.adsinsights import AdsInsights
from facebook_business.api import FacebookAdsApi

access_token = 'token'
app_secret = 'secret'
ad_account_id = 'act_123456'
api = FacebookAdsApi.init(access_token=access_token, app_secret=app_secret)
output_json = ''
start_date = '1970-01-01'

########################
## build output here
########################
fields = [
    'date_start', 'date_stop', 'campaign_id', 'campaign_name', 'ad_name',
    'impressions', 'inline_link_clicks', 'spend'
]
params = {
    'export_columns': ['CSV'],
    'time_range': {
        'since': '2020-05-09',
        'until': '2020-05-09'
    },
    'fields': [
        AdsInsights.Field.campaign_id, AdsInsights.Field.campaign_name,
        AdsInsights.Field.adset_name, AdsInsights.Field.ad_name,
        AdsInsights.Field.spend, AdsInsights.Field.impressions,
        AdsInsights.Field.clicks, AdsInsights.Field.buying_type,
        AdsInsights.Field.objective, AdsInsights.Field.actions
    ],