6

Ich möchte Abfrage in Python schreiben, möchte ich alle Kampagnen Leistungsdetails in Einzelanfrage.So erhalten Sie Erkenntnisse für alle Kampagnen in Einzelabfrage + Facebook marketing api

Wie konvertiert man unter Graph API-Anfrage in Python-Abfrage?

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

ich versucht hatte, unter Abfragen verwenden, aber es ist falsch Idee mehrfach zu senden Anfrage an Facebook zu senden, und auch Benutzer Facebook Blöcke für 30 Minuten.

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) 

Schlimme ist, schicke ich Anfragen von „get_insights()“ für jede Kampagne aufrufen.

UPDATE

Ich versuchte auch direkt Einsichten zu holen, Below Code gibt nur 1 Kampagne Detail, während ich 1 aktive Kampagnen haben und 87 Nicht-Kampagne Liefern, aktualisieren auch level=campaign in params

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

Abfrage: Mit meinem aktualisierten Code, wie kann ich alle ausgelieferten und nicht ausgelieferten Kampagnen mit einer einzigen Abfrage erhalten?

+2

Warum fragen Sie einfach nicht für das '/ insights' auf dem Kontoobjekt, und geben Sie level = Kampagne? um die Ergebnisse nach Kampagnen aufgeschlüsselt zu bekommen? – Igy

+0

@Igy und das gleiche für Anzeigen, habe ich level = ad und jetzt möchte ich auch Ziel-URL, wie kann ich mit/Einblick? –

+0

@Igy Danke für den Vorschlag, es funktioniert, jetzt nur Problem mit Ziel-URL (Objekt-URL), kann ich nicht Einsicht mit ad_creatives verwenden. Kannst du mir bitte auch hier helfen? –

Antwort

3

, um alle Anzeigen Link in einer einzigen Anfrage zu bekommen, ich habe meine Probleme gelöst mit unterem Code.

class FB(object): 
    def __init__(self): 
     me = AdUser(fbid='me') 
     self.my_account = me.get_ad_accounts()[0] 

    def fb_creativies(self, since, until): 
     """ 
     This function is used to get destination url 
     for each creative object 
     """ 
     fields = [AdCreative.Field.object_story_spec] 
     params = { 
      'time_range': { 
       'since': since, 
       'until': until, 
      }, 
     } 

     return self.my_account.get_ad_creatives(fields=fields, params=params) 
1

Ich habe etwas ähnliches getan. Ich habe das Niveau Anzeige zu sein - siehe hier Beispielcode: http://www.samk3nny.com/getting-ad-insights-from-facebook-and-avoiding-error-17/

Und dann für jede Anzeige, die Kreativen erhalten:

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

Ihre erste Antwort ist korrekt, die gleiche beantwortet wird von @igy im Kommentar, Ihre zweite Lösung ist nicht zufrieden, da wir mehr als 50 Anzeigen haben und Ihre Antwort wird mehrere Anfrage an Facebook senden, können wir nicht mehrere Anfragen senden, wie Sie –

+0

BTW +1 für eine gute Antwort. Ich habe es schon früher gelöst, aber es wird definitiv anderen helfen :) –

0

Einige Facebook-Grafik-API-Codierung fand ich beim Durchsuchen von Business-Manager.

Fügen Sie die Facebook Graph Präfix

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

Gefolgt von einer Ad-ID (Hinweis Ad-ID und Anzeigen-Creative-ID sind unterschiedlich)

durch diesen Code Gefolgt:

?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 

Dann fügen Ihre &access_token=WDVW##$Y#%[email protected]$f

Es gibt Eindrücke, Reichweite, Freq zurück und eine Liste von Aktionswerten, die nach Aktionstyp getrennt sind.

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

Sie können aber auch verwenden, um Ihre Ad Acct ID und dann Filterung von Ad ID zu filtern verwenden mehrere Anzeigen auf einmal unter dem einen Acct Id zu zeigen.

Zum Beispiel: https://graph.facebook.com/v2.8/YOURADACCOUNTID?fields....etc von oben dann der Code unten.

Ersetzen Sie _ENTERADIDHERE_ mit Ihrer Anzeigen-ID, um mehrere gleichzeitig zu ziehen.

&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 

Hoffe das hilft jemanden auf ihrem Weg zu bekommen.

0

Ich weiß nicht, ob Sie es noch brauchen.

Die Hauptlösung besteht darin, die Erkenntnisse auf Anzeigenebene aufzurufen. Dies beschränkt die Anzahl der API-Aufrufe. Gerade hinzugefügt, um Ihren Code eine Zeile:

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

einen Blick auf https://developers.facebook.com/docs/graph-api/using-graph-api Abschnitt Nehmen "Making Nested Requests".

können Sie Einblicke erhalten für alle Kampagnen in einzelnen Abfrage für Konto mit Felderweiterungen von api folgenden Aufruf:

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

Felderweiterungen Sie Feld Knoten fordert festlegen können. Im obigen Beispiel erhalte ich Einsichten für alle Kampagnen in einem Konto gruppiert nach Kampagne und dann mit 'insights {reach, impressions, clicks}' können Sie Felder für die Knotenebene auswählen.

EDIT: Entfernte level = Kampagne von URL, da die Daten bereits durch Kampagne wegen Endpunkt gruppiert /Kampagnen