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()
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
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)
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)
def get_api(env, token: str) -> FacebookAdsApi: session = FacebookSession(env("FACEBOOK_APP_ID"), env("FACEBOOK_APP_SECRET"), token) api = FacebookAdsApi(session) return api
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 ],