如何在单个查询 + Facebook 营销中获取所有活动的见解 api
how to get insights for all campaigns in single query + Facebook marketing api
我想在 Python 中编写查询,我希望在单个请求中包含所有广告系列效果详细信息。
如何在 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()" 来发送请求。
更新
我也尝试直接获取见解,下面的代码 returns 只有 1 个活动详细信息,而我有 1 个活动活动和 87 个未投放活动,还更新了 level=campaign
参数
for insight in self.my_account.get_insights(fields=fields, params=params):
print insight
查询: 通过使用更新后的代码,如何使用单个查询获取所有已投放和未投放的广告系列?
我一直在做类似的事情。我将级别设置为广告 - 请参阅此处的示例代码: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])
为了在单个请求中获取所有广告 link,我使用以下代码解决了我的问题。
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)
一些 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
它将 return 印象、覆盖面、频率和按操作类型分隔的操作值列表。
"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....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
希望这有助于帮助某人上路。
不知道你还需要吗
主要的解决方案在于调用广告级别的见解。这限制了 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)
看看 https://developers.facebook.com/docs/graph-api/using-graph-api 部分 "Making Nested Requests"。
您可以通过调用以下 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}' 您可以 select 节点级别的字段。
编辑:从 URL 中删除了 level=campaign,因为数据已经根据端点 /campaigns
按活动分组
我想在 Python 中编写查询,我希望在单个请求中包含所有广告系列效果详细信息。
如何在 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()" 来发送请求。
更新
我也尝试直接获取见解,下面的代码 returns 只有 1 个活动详细信息,而我有 1 个活动活动和 87 个未投放活动,还更新了 level=campaign
参数
for insight in self.my_account.get_insights(fields=fields, params=params):
print insight
查询: 通过使用更新后的代码,如何使用单个查询获取所有已投放和未投放的广告系列?
我一直在做类似的事情。我将级别设置为广告 - 请参阅此处的示例代码: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])
为了在单个请求中获取所有广告 link,我使用以下代码解决了我的问题。
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)
一些 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
它将 return 印象、覆盖面、频率和按操作类型分隔的操作值列表。
"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....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
希望这有助于帮助某人上路。
不知道你还需要吗
主要的解决方案在于调用广告级别的见解。这限制了 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)
看看 https://developers.facebook.com/docs/graph-api/using-graph-api 部分 "Making Nested Requests"。
您可以通过调用以下 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}' 您可以 select 节点级别的字段。
编辑:从 URL 中删除了 level=campaign,因为数据已经根据端点 /campaigns
按活动分组