如何用Python通过Facebook API获取Lead广告的线索信息?
解决Facebook Lead广告线索获取的请求限流问题
你遇到的API请求频次超限问题,根源是循环遍历每个广告单独调用get_leads导致请求量过高。直接从广告账户层级批量拉取线索是更高效的解决方案,无需逐个广告发起请求。
优化后的代码
import json from facebook_business.api import FacebookAdsApi from facebook_business.adobjects.adaccount import AdAccount from facebook_business.adobjects.lead import Lead # 配置参数 access_token = '<你的令牌>' ad_account_id = 'act_你的广告账户ID' FacebookAdsApi.init(access_token=access_token) # 直接从广告账户批量拉取线索,指定所需字段 ad_account = AdAccount(ad_account_id) leads = ad_account.get_leads( fields=[ Lead.Field.id, Lead.Field.field_data, Lead.Field.created_time, Lead.Field.ad_id # 可选:关联对应的广告ID,便于溯源 ], # 可选:添加时间过滤,仅拉取指定时段的线索,减少数据量和请求压力 params={'time_range': {'since': '2024-01-01', 'until': '2024-01-07'}} ) # 解析并输出用户提交的具体信息 for lead in leads: print(f"线索ID: {lead[Lead.Field.id]}") print("用户提交内容:") for field in lead[Lead.Field.field_data]: print(f" {field['name']}: {field['values'][0]}") print("---")
核心优化说明
- 批量拉取逻辑:直接调用广告账户的
get_leads方法,一次性获取账户下所有符合条件的线索,彻底避免循环请求每个广告带来的高频调用问题。 - 时间范围过滤:通过
time_range参数限定线索的时间范围,既减少返回的数据量,也降低触发限流的概率。 - 精简请求字段:仅请求必要的字段(
field_data是存储用户姓名、电话等提交信息的核心字段),减少不必要的数据传输。
额外注意事项
- 若账户线索量极大,单次拉取仍可能触发限流,可通过
next_page()方法实现分页拉取,分批次获取数据。 - 确保你的access_token拥有
ads_read和leads_retrieval权限,否则会出现权限错误。 - 若仍遇限流,可在分页请求间添加短暂间隔(如
time.sleep(1)),但优先通过批量拉取从根源减少请求数。
内容的提问来源于stack exchange,提问作者user3347814
相关产品推荐
相关产品推荐

