Facebook is complaining that my GET requests on the insights API are too large and I need to implement POST request logic via their async functionality.
Here's my working code for that:
from facebook_business.api import FacebookAdsApi
fb_api = FacebookAdsApi.init(access_token=os.getenv('USER_API_TOKEN'))
from facebook_business.adobjects.adaccount import AdAccount
account = AdAccount('act_{}'.format(os.getenv('ADS_ACCT_ID')))
from facebook_business.adobjects.adreportrun import AdReportRun
date_start = "2021-03-15"
date_end = "2021-03-21"
from facebook_business.adobjects.adsinsights import AdsInsights
args = dict(
fields=[
AdsInsights.Field.campaign_name,
AdsInsights.Field.ad_name,
AdsInsights.Field.clicks,
],
params={
'time_range': {
'since': date_start,
'until': date_end,
},
'level': 'ad',
'time_increment': 1
},
is_async=True,
)
async_job = account.get_insights(**args)
async_job.api_get()
while async_job[AdReportRun.Field.async_status] != "Job Completed":
time.sleep(10)
async_job.api_get()
time.sleep(10)
resp_data = async_job.get_result(params={"limit": 1000})
The problem is this only returns 1000 rows. How can I paginate over the full result set?