Search code examples
pythonfacebook-marketing-apifacebook-business-sdk

facebook-business | Update from 10->12


Does anyone know what could be causing this depreciation issue (act_******** technically is an actual number, but hiding it from the question)?

 Message: Call was not successful
  Method:  POST
  Path:    https://graph.facebook.com/v10.0/act_*********/insights
  Params:  {'date_preset': 'today', 'action_attribution_windows': '["1d_click"]', 'level': 'ad', 'limit': '1000', 'status': '["ACTIVE"]', 'fields': '["account_id","account_name","action_values","actions","ad_id","ad_name","adset_id","adset_name","campaign_id","campaign_name","clicks","cpc","cpm","ctr","date_start","date_stop","impressions","inline_link_clicks","reach","spend","website_purchase_roas"]'}

I'm running a script that makes requests every hour to FB Marketing API from an EC2 instance. I use the following packages:

from facebook_business.api import FacebookAdsApi

from facebook_business.adobjects.ad import Ad
from facebook_business.adobjects.adset import AdSet
from facebook_business.adobjects.user import User
from facebook_business.adobjects.campaign import Campaign
from facebook_business.adobjects.adaccount import AdAccount
from facebook_business.adobjects.adsinsights import AdsInsights
from facebook_business.adobjects.adreportrun import AdReportRun

And they have been updated to version 12.0:

facebook-business 12.0.0

This is the script that runs every hour:

    if str(kwargs['timeframe']) == 'hourly':
        # Looping through AdAccount ids:
        for account in KEYS['ACCOUNT_IDs']:
            print(f'Hourly calls - Loading account: {account}')

            # Fetching ad insights without async on:
            ads = AdAccount(account).get_insights(
                params=kwargs['params'],
                fields=kwargs['fields'],
                is_async=True)
            ads.api_get()

            # While loop to verify that async is done:
            while ads[AdReportRun.Field.async_status] != 'Job Completed':
                time.sleep(1)
                print(ads.api_get())
                if ads[AdReportRun.Field.async_status] == 'Job Failed':
                    break
                else:
                    continue

            counter += 1
            print(f'Daily active calls, counter: {counter}')

            insights = str(ads.get_result(
                params={"limit": 1000},
                fields=ad_fields))

            # Replacing extra string and converting into JSON:
            df_normalized = json.loads(insights.replace('<AdsInsights>', ''))
            print(f'Ad Insights: {df_normalized}')

            # Appending response to main df:
            df = df.append(df_normalized, ignore_index=True)

            time.sleep(.75)

Weirdly enough, if I run this locally in my laptop it runs normally after upgrading the package. I did update in my app under "Settings"->"Advanced" to use version 12.0 on both Upgrade All Calls and Upgrade Calls for App Roles.

I noticed that my Path is still calling an older version (10.0) maybe updating that will do the trick? If yes, how can I update that? However, why wouldn't this call it when running locally in my laptop?

Thanks in advance!!


Solution

  • My issue was that EC2 has python2.7 installed and I never updated the default, so when updating facebook-business using pip, it was defaulting to 2.7 rather than using python 3.6.

    I also had to update the init class:

    FacebookAdsApi.init(access_token= KEYS['ACCESS_TOKEN'], api_version='v12.0')