首页 文章

如何在单个查询Facebook营销API中获取所有广告系列的见解

提问于
浏览
6

我想用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()”来发送请求 .

UPDATE

我还试图直接获取洞察力,下面的代码只返回1个广告系列详细信息,而我有1个有效广告系列和87个未投放广告系列,也更新了 level=campaign 参数

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

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

5 回答

  • 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)
    
  • 4

    要在一个请求中获取所有广告链接,我已使用以下代码解决了我的问题 .

    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

    看看https://developers.facebook.com/docs/graph-api/using-graph-api section "Making Nested Requests" .

    您可以通过调用以下API来使用 field expansions 获取帐户单个查询中的所有广告系列的数据分析:

    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}'您可以选择节点级别的字段 .

    编辑:从网址中删除了level =广告系列,因为由于 endpoints /广告系列,数据已按广告系列进行了分组

  • 0

    我一直在做类似的事情 . 我将关卡设置为广告 - 请参阅示例代码: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

    我在挖掘业务经理时发现了一些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 进行过滤,以便在一个Acct 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
    

    希望这有助于让某人继续前进 .

相关问题