2016-09-29 2 views
2

Je souhaite obtenir des informations sur toutes mes campagnes actives diffusées sur des publicités Facebook. Je parviens à obtenir toutes les campagnes avec FacebookAdsApi sur mon compte mais je ne suis pas en mesure d'utiliser un filtre, donc je ne reçois que des campagnes avec le statut "ACTIVE".Obtenez toutes les campagnes actives à partir d'annonces facebook api - comment définir le filtre

Voici mon code à ce jour:

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 

J'ai essayé d'ajouter la ligne suivante à params:

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

qui se traduit par cette erreur-msg:

"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." 

Je peux obtenir toutes les campagnes de mon compte (115) sans aucun problème et il y a seulement 10 campagnes actives en ce moment donc je suppose que mon filtre est faux?

Répondre

2

Il s'agit d'un problème courant avec les requêtes Insights. Lorsque vous travaillez avec beaucoup de données (beaucoup de campagnes, beaucoup de jours ou les deux), vous pouvez facilement rencontrer des erreurs décrites.

FB docs disent:

Il n'y a pas de limite explicite lorsqu'une requête échouera. Quand il expire, essayez de décomposer la requête en plus petites requêtes en mettant des filtres comme la plage de dates.

Dans votre requête le problème est probablement causé par l'extraction de données à partir de début 2015. Pour commencer, je vous suggérons d'utiliser par exemple date_preset=last_30_days (intervalles de date prédéfinie doivent être renvoyés plus rapidement) et procéder à partir de là, peut-être en divisant vos idées chargement de la logique dans plus d'intervalles.

Une autre option consiste à réduire la taille de la page (limit), ce qui peut également provoquer ce problème.

Ou la solution ultime - utilisez async jobs pour le chargement des idées. Cela empêche le FB d'expirer, car la requête s'exécute de manière asynchrone et vous vérifiez l'état du travail et chargez les données uniquement lorsque c'est fait.

+0

Vous aviez raison - fonctionne parfaitement avec last_30_days! Avez-vous une idée si je peux obtenir le statut d'une campagne en tant que domaine? (comme: Insights.Field.status) Je suis capable de filtrer pour actif, supprimé ... mais je ne peux pas comprendre comment obtenir le statut d'un champ – RandomDude

+1

Non, pour autant que je sache, Edge ne contient que des statistiques (valeur numérique) – David

+0

@RandomDude pouvez-vous me dire comment vous avez filtré les campagnes par statut? (ACTIF, PAUSED etc.) –