6

私はPythonでクエリを書きたいので、すべてのキャンペーンのパフォーマンスの詳細を1回のリクエストで欲しいです。単一のクエリ+ FacebookマーケティングAPIのすべてのキャンペーンの洞察を得る方法

どのようにPythonクエリでグラフのAPIの要求を変換するには?

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

私は以下のクエリを使用しようとしましたが、Facebookへのリクエストを送信するために複数回送信し、Facebookは30分間ユーザーをブロックします。

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) 

悪いことは、キャンペーンごとに「get_insights()」を呼び出してリクエストを送信しています。

UPDATE

私はキャンペーンが届かない1つのアクティブなキャンペーンと87をした一方で、コードは1つだけのキャンペーンの詳細を返します下にも、直接洞察を取得しようとしたものparams

for insight in self.my_account.get_insights(fields=fields, params=params): 
    print insight 
level=campaignを更新

クエリ:更新されたコードを使用すると、配信されたすべてのキャンペーンと配信されなかったキャンペーンを単一クエリで取得するにはどうすればよいですか?

+2

なぜだけではなく、アカウントオブジェクトの '/ insights'を求める、と指定レベル=キャンペーンをキャンペーン結果をキャンペーン別に表示するには – Igy

+0

@Igyと広告で同じですが、私はレベル=広告を使用していますが、今では目的地のURLも欲しいです、どうすれば/洞察力を得ることができますか? –

+0

提案していただきありがとうございます。現在はリンク先URL(オブジェクトURL)に問題がありますが、ad_creativesとの洞察はできません。私もここでお手伝いできますか? –

答えて

3

は、単一の要求内のすべての広告リンクを取得するには、私は私の問題を解決してきましたが以下のコードで。

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

私は何か似たようなことをしています。私は広告であるようにレベルを設定する - ここでのコード例を参照してください。http://www.samk3nny.com/getting-ad-insights-from-facebook-and-avoiding-error-17/

し、各広告のクリエイティブを取得:

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

最初の回答は正しい私たちが50以上の広告を持っていて、あなたの答えがFacebookに複数のリクエストを送信すると、私たちは複数回答を送ることができません。回答は –

+0

BTW +1です。私はすでに早くそれを解決しましたが、間違いなく他の人に役立つでしょう:) –

0

ビジネスマネージャを掘り下げながら見つけたFacebookのグラフのAPIコードです。その後、追加

?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 

Facebookのグラフ接頭このコードに続いて、広告ID(ノート広告IDと広告クリエイティブIDが異なる)

続く

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

を追加します。あなたの&access_token=WDVW##$Y#%[email protected]$f

インプレッション、リーチ、フリークを返しますアクションタイプごとに区切られたアクション値のリストが含まれています。

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

しかし、あなたはまた、あなたのAd Acct IDを使用して、一回1アカウンティングIDの下でいくつかの広告を表示するためにAd IDによってフィルタリングするフィルタリングを使用することができます。

たとえば、上記のhttps://graph.facebook.com/v2.8/YOURADACCOUNTID?fields....etc、次にコードを入力します。

_ENTERADIDHERE_を広告IDに置き換えて、一度に複数をプルします。

&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 

これは、途中で誰かを取得するのに役立ちます。

0

あなたがまだ必要かどうかわかりません。

主な解決策は、広告レベルでインサイトを呼び出すことです。これにより、API呼び出しの数が制限されます。ちょうどあなたのコードに行を追加しました:

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

は、「ネストされた要求を行う」https://developers.facebook.com/docs/graph-api/using-graph-apiセクションを見てみましょう。

次のAPIを呼び出すことにより、フィールド展開を使用してアカウントのための単一のクエリ内のすべてのキャンペーンのための洞察を得ることができます。

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

フィールド展開あなたはノードにを要求フィールドを設定することができます。上記の例では、アカウント単位のすべてのキャンペーンについてキャンペーン別に分析し、'insights {reach、impressions、clicks}'と表示しています。ノードレベルのフィールドを選択できます。

EDIT:?削除。レベル=既にデータがあるため、エンドポイントのキャンペーンによってグループ化されるので、URLからキャンペーン/

関連する問題