You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于Facebook Business API异步任务分页获取Insights API完整结果集?

如何实现Facebook Insights API异步请求的完整分页获取?

我懂你现在的困扰——用异步方式请求Insights数据时,get_result默认只能返回1000行,没法拿到全量的结果集。其实Facebook的API分页是通过**游标(cursor)**来实现的,我们只需要在循环里不断请求下一页数据,直到没有更多内容为止。

下面是修改后的完整代码,已经加入了分页逻辑:

import time
import os
from facebook_business.api import FacebookAdsApi
from facebook_business.adobjects.adaccount import AdAccount
from facebook_business.adobjects.adreportrun import AdReportRun
from facebook_business.adobjects.adsinsights import AdsInsights

# 初始化API
fb_api = FacebookAdsApi.init(access_token=os.getenv('USER_API_TOKEN'))
account = AdAccount('act_{}'.format(os.getenv('ADS_ACCT_ID')))

date_start = "2021-03-15"
date_end = "2021-03-21"

args = dict(
    fields=[
        AdsInsights.Field.campaign_name,
        AdsInsights.Field.ad_name,
        AdsInsights.Field.clicks,
    ],
    params={
        'time_range': {
            'since': date_start,
            'until': date_end,
        },
        'level': 'ad',
        'time_increment': 1
    },
    is_async=True,
)

# 启动异步任务并等待完成
async_job = account.get_insights(**args)
async_job.api_get()

while async_job[AdReportRun.Field.async_status] != "Job Completed":
    time.sleep(10)
    async_job.api_get()
time.sleep(10)

# 分页获取全量数据
all_data = []
# 第一次请求,获取第一页和分页信息
current_page = async_job.get_result(params={"limit": 1000})
all_data.extend(current_page)

# 循环获取下一页,直到没有更多数据
while 'paging' in current_page and 'cursors' in current_page['paging'] and 'after' in current_page['paging']['cursors']:
    after_cursor = current_page['paging']['cursors']['after']
    # 带上after游标请求下一页
    current_page = async_job.get_result(params={"limit": 1000, "after": after_cursor})
    all_data.extend(current_page)
    # 可选:添加延时避免触发API频率限制
    time.sleep(1)

# 现在all_data里就是完整的结果集
print(f"共获取到 {len(all_data)} 条数据")

关键逻辑说明:

  1. 初始化存储容器:用all_data列表来累积所有分页返回的数据
  2. 首次请求:拿到第一页数据和分页游标信息
  3. 循环分页请求:检查返回结果的paging.cursors.after字段,如果存在,就带着这个游标参数继续请求下一页,直到没有after游标为止
  4. 频率控制:添加短延时(比如1秒)可以降低触发Facebook API频率限制的风险

额外注意事项:

  • Facebook API的分页游标(after)有效期较短,建议在异步任务完成后立即处理分页请求
  • 单次请求的limit最大为1000,这是Facebook API的硬性限制,无法调整
  • 如果数据量极大,建议加入异常捕获逻辑,处理请求失败、超时等情况

内容的提问来源于stack exchange,提问作者Alex

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 14:32:46