2016-09-29 62 views
2

我想獲取我在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個有效廣告系列所以我想我的過濾器是錯的?

回答

2

這是洞察查詢的常見問題。在處理大量數據(大量的廣告系列,很多天或兩者)時,您可能會輕鬆遇到所描述的錯誤。

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等) –

相關問題