获取来自Facebook广告api的所有活动广告系列 - 如何设置过滤器

问题描述:

我想获取我在Facebook广告上运行的所有活动广告系列的信息。我设法在我的帐户中使用FacebookAdsApi获取所有广告系列,但我无法使用过滤器,因此我只获得具有“活动”状态的广告系列。获取来自Facebook广告api的所有活动广告系列 - 如何设置过滤器

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

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个有效广告系列所以我想我的过滤器是错的?

这是洞察查询的常见问题。在处理大量数据(大量的广告系列,很多天或两者)时,您可能会轻松遇到所描述的错误。

FB docs说:

没有为当一个查询将失败没有明确限制。当它超时时,尝试通过放入日期范围等过滤器将查询分解为更小的查询。

在您的查询的问题是最有可能获取从2015年开始的数据对于初学者我建议使用例如date_preset=last_30_days(预设日期的时间间隔应该会更快返回)造成的,并从那里出发,也许通过拆分您的见解将逻辑加载到更多的区间。

另一个选择是减小页面大小(limit),这也会导致此问题。

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

+0

你说得对 - 与last_30_days完美合作! 你知道我是否可以将广告系列的状态视为字段吗? (如:Insights.Field.status)我能够筛选活动,删除...但我不知道如何获得作为一个字段的状态 – RandomDude

+1

不,据我所知,见解边缘只包含统计(数字)值 – David

+0

@RandomDude请问您如何按状态过滤广告系列? (ACTIVE,PAUSED等) –