9

我想用 Python 编写查询,我希望在单个请求中包含所有广告系列的性能详细信息。

如何在 Python Query 中转换下面的图形 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 个活动详细信息,而我有 1 个活动活动和 87 个未交付活动,也在level=campaign参数中更新

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

查询: 通过使用我更新的代码,如何使用单个查询获取所有已交付和未交付的广告系列?

4

5 回答 5

6

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

字段扩展允许您将字段请求设置为节点。在上面的示例中,我获得了按广告系列分组的帐户中所有广告系列的见解,然后使用“见解 {reach,impressions,clicks}”您可以选择节点级别的字段。

编辑:从 URL 中删除了 level=campaign,因为由于端点/campaigns数据已经按活动分组

于 2017-08-22T13:36:17.940 回答
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)
于 2016-01-15T07:35:43.000 回答
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])
于 2016-01-14T16:14:31.627 回答
1

我在挖掘 Business Manager 时发现了一些 facebook 图形 API 编码。

添加 Facebook 图形前缀

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

后跟一个 Ad ID(注意 Ad ID 和 Ad Creative 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以便在一个帐户 ID 下一次显示多个广告。

例如:https ://graph.facebook.com/v2.8/YOURADACCOUNTID?fields....等,然后是下面的代码。

替换_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

希望这有助于让某人上路。

于 2017-03-15T23:21:01.530 回答
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)
于 2017-06-15T12:01:20.340 回答