Фильтрация рекламных кампаний Facebook, чтобы получить те с доставкой в Python

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

Вот мой текущий код:

FacebookAdsApi.init(my_app_id, my_app_secret, my_access_token)

my_account = objects.AdAccount('act_XXXXXXXXXXXXX')
print my_account


today = datetime.date.today()
threeDaysAgo = today - timedelta(days=3)


#get list of campaigns from FB
cparams = {
    #'effective_status':['ACTIVE'],
    'time_range': {
        'since': threeDaysAgo.__str__(),
        'until': today.__str__()
    }
}
clist = my_account.get_campaigns(params=cparams)

Это дает мне все кампании в течение диапазона времени. Однако, мне нужно получить только те, которые имели доставку. Как это сделать?

1 ответ

  1. Я придумал один способ сделать это-использовать Insight edge.

    Вот как:

    fields = [
        Insights.Field.campaign_id,
        Insights.Field.campaign_name,
        Insights.Field.spend,
    ]
    
    today = datetime.date.today()
    threeDaysAgo = today - timedelta(days=3)
    params = {
        'time_range': {'since': threeDaysAgo.__str__(), 'until': today.__str__()},
        'level': 'campaign',
        'limit': 100
    }
    
    insights = my_account.get_insights(fields=fields, params=params)
    

    Затем мы можем сделать цикл над insights — чтобы получить идентификатор кампании:

    for i in insights:
        print "Processing ..." + i['campaign_id']
        cid = i['campaign_id']
    

    а потом обрабатываем кампанию и данные и так, как нам хочется …

     campaign = Campaign(cid + "")
    

    и…

    campaign.remote_read(fields=[
                Campaign.Field.name,
                Campaign.Field.effective_status,
                Campaign.Field.objective,
            ])
    

    Надеюсь, это поможет.