6

Voglio scrivere query in Python, voglio tutti i dettagli delle prestazioni delle campagne in singola richiesta.come ottenere approfondimenti per tutte le campagne in singola query + Facebook marketing API

come convertire sotto la richiesta API grafico in Python Query?

/<version>/act_<ACT_ID>/campaigns?fields=insights.fields(actions_results) 

avevo provato ad utilizzare al di sotto di query, ma è un'idea sbagliata di inviare più volte di inviare richiesta a Facebook, e anche Facebook blocchi utente per 30 minuti.

fields = [Insights.Field.cpm, 
      Insights.Field.cpp] 

class Fb_insights(object): 

    def __init__(self, app_id, app_secret, access_token): 
     FacebookAdsApi.init(app_id, app_secret, access_token) 

     # Add after FacebookAdsApi.init 
     me = AdUser(fbid='me') 
     self.my_account = me.get_ad_accounts()[0] 

    def campaign_reports(self, since, until): 
     params = { 
      'level': Insights.Level.campaign, 
      'time_range': { 
       'since': since, 
       'until': until, 
      }, 
     } 

     for campaign in self.my_account.get_campaigns(): 
      for stat in campaign.get_insights(fields=fields, 
                params=params): 
       print(stat) 

La cosa cattiva è che sto inviando richieste chiamando "get_insights()" per ogni campagna.

UPDATE

Ho anche provato a prendere direttamente intuizioni, Sotto codice restituisce dettaglio solo 1 campagna, mentre io ho 1 campagne attive e 87 non espressi campagna, aggiornare anche level=campaign in params

for insight in self.my_account.get_insights(fields=fields, params=params): 
    print insight 

Richiesta: Utilizzando il mio codice aggiornato, Come posso ottenere tutte le campagne consegnate e non consegnate utilizzando una singola query?

+2

Perché non basta chiedere la '/ insights' sull'oggetto conto, e specificare il livello = campagna? per ottenere i risultati suddivisi per campagna? – Igy

+0

@Igy e lo stesso per gli annunci, ho usato level = ad e ora voglio anche l'URL di destinazione, come posso usare/insight? –

+0

@Igy grazie per il suggerimento, funziona, ora ha solo un problema con l'URL di destinazione (URL dell'oggetto), non riesco a utilizzare l'intuizione con ad_creatives. puoi per favore aiutarmi anche qui? –

risposta

3

Per ottenere tutti gli annunci link in una singola richiesta, ho risolto i miei problemi con il codice sottostante.

1

Ho fatto qualcosa di simile. Ho impostato il livello di essere annuncio - vedi esempio di codice qui: http://www.samk3nny.com/getting-ad-insights-from-facebook-and-avoiding-error-17/

E poi per ogni annuncio ottenere i creativi:

ad = Ad(fbid=ad_id) 
creatives = ad.get_ad_creatives(fields=[AdCreative.Field.id, 
             AdCreative.Field.object_story_spec,    
             AdCreative.Field.object_story_id]) 
+0

la tua prima risposta è corretta, che è la stessa risposta by @igy nel commento, la tua seconda soluzione non è soddisfatta, poiché abbiamo più di 50 annunci e la tua risposta invierà più richieste a Facebook, non possiamo inviare più richieste come hai fatto –

+0

BTW +1 per una buona risposta. L'ho già risolto in precedenza, ma sicuramente aiuterà gli altri :) –

0

Alcuni codici API di Facebook che ho trovato mentre scavano in giro per Business Manager.

Aggiungere il grafico del prefisso Facebook

https://graph.facebook.com/v2.8/ 

Seguito da un ID annuncio (ID nota annuncio e Ad ID creatività sono diverse)

Seguito da questo codice:

?fields=%5B%22insights.date_preset(lifetime).action_attribution_windows(%5B%5C%22default%5C%22%5D).default_summary(false).fields(%5B%5C%22impressions%5C%22%2C%5C%22reach%5C%22%2C%5C%22frequency%5C%22%2C%5C%22actions%5C%22%5D).limit(5000).summary_action_breakdowns(%5B%5C%22action_type%5C%22%5D)%22%5D 

Quindi aggiungere il tuo &access_token=WDVW##$Y#%[email protected]$f

restituirà impressioni, raggiungere, freq uenza e un elenco di valori di azione separati dal tipo di azione.

"insights": {"data": [ 
{ 
"impressions": "963986", 
"reach": "335872", 
"frequency": "2.870099", 
    "actions": [ 
     {"action_type": "comment", "value": "133"}, 
     {"action_type": "like","value": "60"}, 
     {"action_type": "link_click","value": "4652"}, 
     {"action_type": "post","value": "76"}, 
     {"action_type": "post_reaction","value": "516"}, 
     {"action_type": "unlike","value": "1"}, 
     {"action_type": "page_engagement","value": "5437"}, 
     {"action_type": "post_engagement","value": "5377"} 
], 

"date_start": "2016-05-31", 
"date_stop": "2016-06-30" 

ma si può anche usare il vostro Ad Acct ID e quindi utilizzare il filtro per filtrare per Ad ID per mostrare diversi annunci in una volta sotto l'unico Acct Id.

Ad esempio: https://graph.facebook.com/v2.8/YOURADACCOUNTID?fields....etc dall'alto, quindi il codice seguente.

Sostituisci _ENTERADIDHERE_ con il tuo ID annuncio per estrarre più elementi alla volta.

&filtering=%5B%7B%22field%22%3A%22ad.id%22%2C%22operator%22%3A%22IN%22%2C%22value%22%3A%5B%22_ENTERADIDHERE_%22%2C%22_ENTERADIDHERE_%22%2C%22_ENTERADIDHERE_%22%2C%22_ENTERADIDHERE_%22%2C%22_ENTERADIDHERE_%22%2C%22_ENTERADIDHERE_%22%2C%22_ENTERADIDHERE_%22%2C%22_ENTERADIDHERE_%22%2C%22_ENTERADIDHERE_%22%2C%22_ENTERADIDHERE_%22%5D%7D%5D 

Spero che questo aiuti a portare qualcuno in viaggio.

0

Non so se ne hai ancora bisogno.

La soluzione principale consiste nel chiamare gli approfondimenti a livello di annuncio. Ciò limita il numero di chiamate API. Appena aggiunto una riga di codice:

class Fb_insights(object): 

    def __init__(self, app_id, app_secret, access_token): 
     FacebookAdsApi.init(app_id, app_secret, access_token) 

     # Add after FacebookAdsApi.init 
     me = AdUser(fbid='me') 
     self.my_account = me.get_ad_accounts()[0] 

    def campaign_reports(self, since, until): 
     params = { 
      'level': 'ad', 
      'date_preset': 'lifetime', 
      'fields': ['account_id', 
       'account_name', 
       'actions', 
       'ad_id', 
       'ad_name', 
       'adset_id', 
       'adset_name', 

             ] 
     } 
     insights = account.get_insights(params=params) 
3

Date un'occhiata a https://developers.facebook.com/docs/graph-api/using-graph-api sezione "Fare Richieste nidificati".

È possibile ottenere spunti per tutte le campagne in un'unica query per conto utilizzando espansioni campo chiamando API seguente:

https://graph.facebook.com/v2.10/YOUR_ACCOUNT_ID/campaigns?fields=name,status,insights{reach,impressions,clicks}&access_token=YOUR_TOKEN 

espansioni campo consente di impostare campo richiede al nodo. Nell'esempio sopra, ricevo informazioni approfondite su tutte le campagne nell'account raggruppate per campagna e, quindi, con "insights {reach, impressions, clicks}" puoi selezionare i campi per il livello del nodo.

EDIT: livello Rimosso = campagna dal URL poiché i dati sono già raggruppati per campagna a causa di endpoint /Campagne

Problemi correlati