0

以下是我想要实现的目标,即我希望每周投放广告系列/广告集/广告营销支出、覆盖面、展示次数,以便我们可以每周跟踪我们的指标。就像下面的代码片段一样。我试图从 6 月 1 日到 7 月 7 日获取数据,但为了响应我的请求,我只得到了与我从 facebook 广告管理器 UI 中看到的不同的活动活动。在下面的代码中,我没有收到任何错误,但我没有得到正确的数据。

有什么方法可以获取活动的历史数据?

from facebook_business.adobjects.adaccount import AdAccount
from facebook_business.adobjects.campaign import Campaign
from facebook_business.api import FacebookAdsApi
import sys,json,os,pandas as pd,numpy as np

CONF_FILE='../conf/'+os.path.basename(sys.argv[0]).split('.')[0]+'.conf'

with open(CONF_FILE,'r',encoding='utf-8') as read_conf_file:
   read_conf=json.load(read_conf_file)

access_token = read_conf['access_token']
app_id = read_conf['app_id']
id=read_conf['ad_account_id']
FacebookAdsApi.init(access_token=access_token)

adsets=AdAccount(id).get_campaigns(fields=["name"],params={'time_range': {'since': '2020-06-01', 'until' :'2020-06-07'}})

print(adsets)
4

1 回答 1

1

我认为你犯了一些错误。您正在尝试通过以下方式获取广告集

    account.get_campaigns()

方法,但您只会获得广告系列。为了获取广告集或广告,您应该使用以下方法:

    campaigns_list = account.get_campaigns()
    adsets_list = account.get_ad_sets()
    ads_list = account.get_ads()

通过这种方式,您将能够检索广告系列、广告集和广告的列表。此外,我建议您继续使用批处理方法,因为它确实可以帮助您缩短处理时间。

对于洞察指标的关注点,我建议通过批处理或异步方式获取它们,如下所示:

    async_job = account.get_insights(fields=["insights metrics"], 
            params={"level": node, "date_range": {'since': '2020-06-01', 'until' :'2020-06-07'}, is_async=True)
    async_job.api_get()
    while async_job[AdReportRun.Field.async_percent_completion] < 100 \
         or async_job[AdReportRun.Field.async_status] != "Job Completed":
         if async_job[AdReportRun.Field.async_status] == "Job Failed":
             return None
         time.sleep(1)
         async_job.api_get()
         time.sleep(1)
    insights_list = list(async_job.get_result())

哪里node可以campaignadsetad

这里也推荐使用date_preset参数代替date_range。

我希望我是有帮助的。

于 2021-07-21T22:52:43.963 回答