2016-09-29 28 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に次の行を追加しようとしました:

このエラーMSGになり
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は言う:

クエリが失敗したときのために明示的な制限はありません。タイムアウトになると、日付範囲のようなフィルタを入れてクエリを小さなクエリに分解してみてください。問題が最も可能性が高い(プリセット日付間隔が速く返されるべきである)私は例date_preset=last_30_daysのために使用することをお勧め手始めに2015年の初めからデータをフェッチによって引き起こされると多分あなたの洞察力を分割することによって、そこから続行されるクエリでは

ロジックをより多くの間隔でロードする。

もう1つの方法は、ページサイズ(limit)を減らすことで、この問題の原因ともなります。

または究極の解決策 - 洞察を読み込むためにasync jobsを使用してください。これにより、クエリが非同期に実行され、ジョブの状態をチェックし、完了したときにのみデータをロードするため、FBがタイムアウトするのを防ぎます。

+0

あなたは正しく、last_30_daysで完璧に動作しました! フィールドとしてキャンペーンのステータスを取得できるかどうか考えていますか? (like:Insights.Field.status)私は、削除されたアクティブなフィルタリングすることができます...しかし、私はフィールドとしてステータスを取得する方法を見つけることができません – RandomDude

+1

いいえ、私の知覚エッジは統計情報数値)値 – David

+0

@RandomDudeあなたはどのようにキャンペーンをステータス別にフィルタリングしたか教えていただけますか? (ACTIVE、PAUSEDなど) –

関連する問題