it-swarm.com.ru

как получить представление обо всех кампаниях в одном запросе + маркетинговый API Facebook

Я хочу написать запрос в Python, я хочу, чтобы все детали эффективности кампаний были в одном запросе.

как конвертировать ниже граф API-запрос в Python Query?

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

Запрос: Используя мой обновленный код, Как я могу получить все доставленные и недоставленные кампании, используя один запрос?

6
Mitul Shah

Чтобы получить ссылку на все объявления в одном запросе, я решил свои проблемы с помощью приведенного ниже кода.

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 {достичь, показов, кликов}' вы можете выбрать поля для уровня узла.

Правка: Удален уровень = кампания из URL, потому что данные уже сгруппированы по кампании из-за конечной точки /кампании

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

Некоторое API-кодирование графиков Facebook я обнаружил, копаясь в Business Manager.

Добавьте префикс графа Facebook

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

За ним следует идентификатор объявления (обратите внимание, что идентификатор объявления и идентификатор объявления отличаются)

Затем следует этот код:

?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#%[email protected]$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_ своим идентификатором объявления, чтобы получить несколько одновременно.

&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. Просто добавили строку в ваш код:

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