从facebook ads api获取所有有效的广告系列 - 如何设置过滤器

时间:2016-09-29 13:21:44

标签: python facebook-graph-api facebook-ads-api

我想深入了解在Facebook广告上投放的所有有效广告系列。我设法在我的帐户上使用FacebookAdsApi获取所有广告系列,但我无法使用过滤器,因此我只能获得具有“ACTIVE”状态的广告系列。

到目前为止,这是我的代码:

from facebookads.api import FacebookAdsApi
from facebookads.objects import AdAccount, Ad, Insights, AdUser
import datetime

my_app_id = 'xxx'
my_app_secret = 'xxx'
my_access_token = 'xxx'
FacebookAdsApi.init(my_app_id, my_app_secret, my_access_token)

me = AdUser(fbid='me')
my_accounts = list(me.get_ad_accounts())
my_account = my_accounts[0]

fields = [
    Insights.Field.campaign_name,
    Insights.Field.spend
]

params = {
    'time_range': {'since': str(datetime.date(2015, 1, 1)), 'until': str(datetime.date.today())},
    'level': 'campaign',
    'limit': 1000
}

insights = my_account.get_insights(fields=fields, params=params)
print len(insights)
>>> 115

我尝试将以下行添加到params

filtering': [{'field': 'campaign.effective_status','operator':'IN','value':['ACTIVE']}]

导致此错误消息:

"error_user_msg": "The reporting data you are trying to fetch has too many rows. Please use asynchronous query or restrict amount of ad IDs or time ranges to fetch the data."

我可以从我的帐户(115)获取所有广告系列而没有任何问题,目前只有10个有效的广告系列,所以我猜我的过滤器是错误的?

1 个答案:

答案 0 :(得分:2)

这是洞察力查询的常见问题。处理大量数据(很多活动,很多天或两者)时,您很容易遇到所描述的错误。

FB docs说:

  

查询失败的时间没有明确的限制。当它超时时,尝试通过添加日期范围等过滤器将查询细分为较小的查询。

在您的查询中,问题很可能是从2015年初开始提取数据引起的。对于初学者,我建议使用例如date_preset=last_30_days(预设日期间隔应该更快地返回)并从那里开始,可能是通过拆分你的洞察力将逻辑加载到更多的区间。

另一种选择是减少页面大小(limit),这也可能导致此问题。

或最终解决方案 - 使用async jobs加载洞察力。这可以防止FB超时,因为查询是异步运行的,只有在完成后才会检查作业状态并加载数据。