web-dev-qa-db-ja.com

単一のクエリ+ FacebookマーケティングAPIですべてのキャンペーンの洞察を得る方法

Pythonでクエリを記述したいのですが、すべてのキャンペーンのパフォーマンスの詳細を1つのリクエストで記述したいと思います。

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()」を呼び出してリクエストを送信しています。

[〜#〜]更新[〜#〜]

また、インサイトを直接取得しようとしました。以下のコードは、1つのアクティブなキャンペーンと87の配信されないキャンペーンがあるのに対し、1つのキャンペーンの詳細のみを返します。また、パラメータの_level=campaign_を更新します。

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

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

8
Mitul Shah

1回のリクエストですべての広告リンクを取得するために、以下のコードで問題を解決しました。

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)
3
Mitul Shah

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}'を使用して、ノードレベルのフィールドを選択できます。

編集:エンドポイント/ campaignsのためにデータがキャンペーンによってすでにグループ化されているため、URLからlevel = campaignを削除しました

4
Maleta

私は似たようなことをしています。レベルを広告に設定しました-ここのサンプルコードを参照してください: 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])
1
Sam Kenny

BusinessManagerを調べているときに見つけたFacebookグラフAPIコーディング。

Facebookグラフのプレフィックスを追加します

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

その後に広告IDが続きます(広告IDと広告クリエイティブIDは異なることに注意してください)

このコードが続く:

?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

次に、&access_token=WDVW##$Y#%G@$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を使用してから、フィルタリングを使用してAd IDでフィルタリングし、1つのアカウント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
MattMcL1988

あなたがまだそれを必要とするかどうかわからない。

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

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)
0
Nabeela tabu