как получить информацию для всех кампаний в одном запросе + Facebook marketing api
Я хочу написать запрос в Python, я хочу, чтобы все кампании данные в одном запросе.
как преобразовать ниже запроса api графика в запрос Python?
/<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
in params
for insight in self.my_account.get_insights(fields=fields, params=params):
print insight
запрос: используя мой обновленный код, как я могу получить все доставленные и не доставленные кампании с помощью одного запроса?
5 ответов
взгляните на 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, впечатления, клики}' вы можете выбрать поля для уровня узла.
EDIT: Removed level=campaign from URL, потому что данные уже сгруппированы по campaign из-за endpoint /кампании
чтобы получить все объявления ссылку в одном запросе, я решил свои проблемы с ниже кода.
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)
Я делал что-то подобное. Я установил уровень ad-см. Пример кода здесь: 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])
некоторые Facebook graph API кодирования я нашел, копаясь вокруг бизнес-менеджера.
добавить префикс графика Facebook
https://graph.facebook.com/v2.8/
с последующим идентификатором объявления (Примечание 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
показать несколько объявлений сразу под одним идентификатором Acct.
например:https://graph.facebook.com/v2.8/YOURADACCOUNTID?fields....etc сверху, затем код ниже.
заменить _ENTERADIDHERE_
С вашим идентификатором объявления, чтобы вытащить несколько одновременно.
&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
надеюсь, это поможет кому-то на их пути.
Не знаю, если вам все же понадобится.
основное решение заключается в вызове insights на уровне рекламы. Это ограничивает количество вызовов 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)