Фильтрация статистики из API Facebook facebook с использованием Python SDK

Я пытаюсь использовать ads-api Facebook, чтобы получать данные о рекламных аккаунтах / кампаниях и т. Д. В течение определенного периода времени.

До сих пор мне удавалось получать общую информацию (добавленную ниже), используя официальный Python SDK, но я не могу понять, как вставить условие фильтра времени.

Ответ, вероятно, здесь в разделе "Фильтрация результатов", но я не понимаю, как перевести то, что они там делают, в python... https://developers.facebook.com/docs/reference/ads-api/adstatistics/v2.2

Я был бы очень признателен за любую помощь, которую вы можете оказать,

Спасибо!


Это соответствующий модуль (я думаю) из официального проекта Python SDK: https://github.com/facebook/facebook-python-ads-sdk/blob/master/facebookads/objects.py

Мой текущий код:

from facebookads.session import FacebookSession
from facebookads.api import FacebookAdsApi
from facebookads import objects
from facebookads.objects import (
AdUser,
AdCampaign,
)

my_app_id = 'APP_ID'
my_app_secret = 'AP_SECRET'
my_access_token = 'ACCESS_TOKEN'
my_session = FacebookSession(my_app_id, my_app_secret, my_access_token)
my_api = FacebookAdsApi(my_session)
FacebookAdsApi.set_default_api(my_api)

me = objects.AdUser(fbid='me')
my_accounts = list(me.get_ad_accounts())


my_account=my_accounts[1]

print(">>> Campaign Stats")
for campaign in my_account.get_ad_campaigns(fields=[AdCampaign.Field.name]):
    for stat in campaign.get_stats(fields=[
        'impressions',
        'clicks',
        'spent',
        'unique_clicks',
        'actions',
    ]):
        print(campaign[campaign.Field.name])
    for statfield in stat:
        print("\t%s:\t\t%s" % (statfield, stat[statfield]))    

и вывод, который я получаю (все заглавные буквы и хххх мои):

Campaign Stats
CAMPAIGN_NAME1
    impressions:        xxxx
    unique_clicks:      xxxx
    clicks:     xxxx
    actions:        {u'mobile_app_install': xxxx, u'app_custom_event': xxxx,   u'app_custom_event.fb_mobile_activate_app': xxx}
    spent:      xxxx
CAMPAIGN_NAME2
    impressions:        xxxx
    unique_clicks:      xxxx
    clicks:     xxxx
    actions:        {XXXX}
    spent:      xxxx

2 ответа

Решение

get_stats() метод имеет дополнительный параметр с именем params где вы можете пройти в start_time и / или end_time,

params_data = {
    'start_time': 1415134405,
}

stats = campaign.get_stats(
    params=params_data,
    fields=[
        'impressions',
        'clicks',
        ...
    ]
)

for stat in stats:
    ...

API принимает ряд различных параметров, задокументированных здесь: https://developers.facebook.com/docs/reference/ads-api/adstatistics

Дополнительное чтение

Причиной как params параметр и fields Параметр требует небольшого пояснения. Не стесняйтесь игнорировать это, если вы не заинтересованы.:)

Реализация для params Параметр в основном просто строит строку запроса для вызова API:

params['start_time'] = 1415134405

создает:

?start_time=1415134405

Конечные точки API объявлений обычно принимают fields параметр, чтобы определить, какие данные вы хотите вернуть:

?fields=impressions,clicks&start_time=1415134405

который вы правильно определили, но потому что это просто fields в строке запроса вы также можете технически сделать это:

params['fields'] = 'impressions,clicks'

Параметр fields в get_stats() (и другие методы чтения) - это просто простой способ определить этот параметр поля. Реализация выглядит примерно так:

def remote_read(self, params=[], fields=[]):
    ...
    params['fields'] = fields
    ...

Метод "get_stats" устарел в версии API V2.4.

Вместо этого следует использовать метод get_insights. Параметры для этого метода перечислены на странице ниже: https://developers.facebook.com/docs/marketing-api/insights/v2.5

На странице выше замена "start_time" и "end_time" является атрибутом "time_ranges". Пример:

"time_ranges": {'since': '2015-01-01', 'until': '2015-01-31'}
Другие вопросы по тегам