从Facebook Insights API获取scheduled_total指标:数据不符问题求助
问题
我正在开展一个项目,需要从Facebook Insights API获取scheduled_total指标用于统计分析,但发现API返回的结果与Facebook Business界面显示的数据不一致。目前我使用Python编写代码调用该API,获取到的scheduled_total结果为0,但实际情况并非如此。请问是否有人遇到过类似问题并找到了解决方案?另外,这种数据差异是否是因为Facebook App需要额外配置相关权限或设置导致的?
当前使用的代码如下:
import time from facebook_business.api import FacebookAdsApi from facebook_business.adobjects.adaccount import AdAccount from facebook_business.adobjects.adreportrun import AdReportRun def get_async_insights(ad_account, fields, params): async_job = ad_account.get_insights(fields=fields, params=params, is_async=True) async_job.api_get() # Wait for the async job to complete while async_job[AdReportRun.Field.async_status] != "Job Completed": time.sleep(1) print("> Running extraction...") async_job.api_get() return async_job.get_result() def cast_variable(variable, type): if type == "int": return int(variable) elif type == "float": return float(variable) def get_ad_action(ad, action_name, val_type): if "actions" in ad: result = 0 for action in ad["actions"]: if action["action_type"] == action_name: result += cast_variable(action["value"], val_type) return result else: return 0 if __name__ == "__main__": # Credentials access_token = "REDACTED" app_id = "REDACTED" app_secret = "REDACTED" ad_account_id = "REDACTED" # Perform request date = "2024-01-01" FacebookAdsApi.init(app_id, app_secret, access_token, api_version="v20.0") fields = [ "date_start", "date_stop", "ad_id", "ad_name", "campaign_id", "campaign_name", "impressions", "clicks", "actions", "action_values" ] params = { "level": "ad", "time_range": {"since": date, "until": date}, "breakdowns": ["device_platform"], "limit": 1000, "action_attribution_windows": ['1d_click', "7d_click", "1d_view"] } # Data extraction ad_account = AdAccount(ad_account_id) data = get_async_insights(ad_account=ad_account, fields=fields, params=params) # Process the data # See https://developers.facebook.com/docs/marketing-api/reference/ads-insights # Actions and Action values should be a list<AdsActionStats>: # See https://developers.facebook.com/docs/marketing-api/reference/ads-action-stats data_list = [] for ad in data: row = { "date": ad["date_start"], "ad_id": ad["ad_id"], "ad_name": ad["ad_name"], "campaign_id": ad["campaign_id"], "campaign_name": ad["campaign_name"], "device": ad["device_platform"], "impressions": int(ad.get("impressions", 0)), "clicks": int(ad.get("clicks", 0)), "scheduled_appointments": get_ad_action(ad, "schedule_total", "int") } data_list.append(row) print(data_list)
可能的原因及解决办法
- 对齐归因窗口:Facebook Business界面默认的归因窗口可能和你API请求里的
action_attribution_windows设置不一致。比如界面可能使用28d_click或其他组合,而你只指定了1d_click、7d_click、1d_view。可以调整参数,加入界面使用的归因窗口,或者直接用['default']匹配界面默认值。 - 核对动作类型名称:部分场景下
scheduled_total可能对应别名(比如schedule),建议先打印所有actions数组里的action_type值,确认实际返回的类型名称,再调整匹配逻辑。 - 检查权限与应用状态:确保你的Facebook应用已获得
ads_read权限,且访问令牌覆盖目标广告账户。如果应用处于开发模式,仅能访问测试数据,需切换到公开模式并通过审核才能获取真实数据。 - 匹配细分维度:API请求中使用了
breakdowns: ["device_platform"],要确认Facebook Business界面是否做了相同的设备细分,若界面是汇总数据,需检查API数据的汇总逻辑是否正确。 - 直接请求目标字段:尝试在
fields列表中直接添加scheduled_total字段,部分动作指标可作为独立字段返回,避免遍历数组时的匹配错误。 - 等待数据延迟更新:Facebook Insights数据存在延迟,尤其是当日数据,可等待数小时后重试,查看数据是否同步。
内容的提问来源于stack exchange,提问作者Alex Baena
相关产品推荐
相关产品推荐

