如何用Python按日拉取Facebook广告多维度数据及排查语法错误
问题解决步骤
1. 修复语法错误
报错核心原因是你混用了旧版facebookads和新版facebook_business库,旧版库的方法使用Python关键字async作为参数名,直接触发语法冲突;同时参数格式也存在错误。修复方案:
- 删除所有
facebookads相关导入语句,仅使用官方维护的facebook_business库 - 将
params中的'time_increment': {'1'}改为'time_increment': 1(该参数要求整数类型,1代表按日拆分数据) - 移除重复的
FacebookAdsApi.init()调用,仅保留一次初始化
2. 获取placement和device维度数据
要获取投放位置(placement)和设备(device)数据,只需在breakdowns参数中添加对应字段:
'placement':返回具体广告投放位置(如Facebook Feed、Instagram Stories等)'device_platform':返回设备平台类型(如mobile、desktop、tablet);若需更细分信息,可添加'device_os'(操作系统)或'device_type'(设备类型)
修正后的完整代码
from facebook_business.adobjects.adaccount import AdAccount from facebook_business.adobjects.adsinsights import AdsInsights from facebook_business.api import FacebookAdsApi import pandas as pd # 配置API参数 access_token = 'your_access_token' ad_account_id = 'act_123456789' api_version = 'v15.0' # 初始化API客户端(仅需一次) FacebookAdsApi.init(access_token=access_token, api_version=api_version) my_account = AdAccount(ad_account_id) # 定义需要获取的字段 fields = [ 'campaign_name', 'adset_name', 'ad_name', 'attribution_setting', 'reach', 'impressions', 'frequency', 'spend', 'clicks', 'inline_link_clicks', 'objective', 'cpm', 'date_start', 'date_stop', ] # 定义API请求参数,包含age、gender、placement、device维度 params = { 'time_increment': 1, # 按日拆分数据 'filtering': [], 'level': 'ad', 'breakdowns': ['age', 'gender', 'placement', 'device_platform'], 'date_preset': 'last_90d' } # 获取广告洞察数据 ads_insights = my_account.get_insights(fields=fields, params=params) # 转换为DataFrame并打印 fb_ad = pd.DataFrame(ads_insights) print(fb_ad)
额外说明
- 若需更细分的设备数据,可将
device_platform替换为或添加device_os(返回iOS、Android等)、device_type(返回smartphone、tablet等) - 确保API令牌拥有
ads_read权限,否则无法获取广告洞察数据 - 若出现数据缺失,可检查广告账户对应时间段是否有投放数据,或调整
level参数(如改为'adset'或'campaign')
内容的提问来源于stack exchange,提问作者user20350073
相关产品推荐
相关产品推荐

