获取来自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超时,因为查询异步运行,并且只有在完成时才检查作业状态并加载数据。
你说得对 - 与last_30_days完美合作! 你知道我是否可以将广告系列的状态视为字段吗? (如:Insights.Field.status)我能够筛选活动,删除...但我不知道如何获得作为一个字段的状态 – RandomDude
不,据我所知,见解边缘只包含统计(数字)值 – David
@RandomDude请问您如何按状态过滤广告系列? (ACTIVE,PAUSED等) –