使用循环迭代Facebook get_insights的日期



我是Python新手,正在尝试建立与Facebook的API连接,以获取广告活动数据。我想一次提取6-12个月,而Facebook API似乎无法处理这一问题,所以我试图编写一个脚本,使用循环一天一天地提取我需要的数据。

我正在尝试下面的代码,但这只会持续一天——范围内的最后一天。有人能纠正我哪里错了吗?

today = datetime.now().date()
yesterday = today - timedelta(days=1)
start_date = date(2020, 8, 10)
end_date = today
day_count = (end_date - start_date).days
day = timedelta(days=1)
date = start_date
for i in range(day_count):
date += day
fields = [
'campaign_name',
'reach',
'impressions',
'frequency',
'clicks',
'spend', ]
params = {
'level': 'campaign',
'filtering': [],
'breakdowns': [],
'time_range': {'since': str(date),
'until': str(date)},
'time_increment': '1',
"limit": 1000}
results = my_account.get_insights(fields=fields,
params=params)

从缩进中看,您似乎首先在执行for循环,完成后,您将调用get_insights函数。通过这样做,for循环将获得从start_date到今天的天数,最后,结果将只调用get_insights for today。

对此的解决方案是正确地缩进它,这样结果就会在for循环的内部

另一件需要注意的事情是,你把结果=。。。get_insights(…(,当然它将一次又一次地覆盖for循环中的结果,最后保留今天的见解。

为了解决这个问题,您可以在for循环之前制作一个空列表,并在获得见解时将其附加到该列表中。

代码应该是这样的:

today = datetime.now().date()
yesterday = today - timedelta(days=1)
start_date = date(2020, 8, 10)
end_date = today
day_count = (end_date - start_date).days
day = timedelta(days=1)
date = start_date
results = []
for i in range(day_count):
date += day

fields = [
'campaign_name',
'reach',
'impressions',
'frequency',
'clicks',
'spend',]
params = {
'level': 'campaign',
'filtering': [],
'breakdowns': [],
'time_range': {'since': str(date),
'until': str(date)},
'time_increment': '1',
'limit': 1000}
results.append(my_account.get_insights(fields=fields,
params=params))

最后,结果将是给定范围内所有日子的见解列表。

最新更新