facebook Api Exception:(#17) User request limit reached

Facebook Api Exception:(#17) User request limit reached

当使用facebook Marketing API 出现 Exception:(#17) User request limit reached 时的思路处理

1,去官网查看Exception:(#17) User request limit reached原因:

API Level Rate Limiting

  • Rate limiting is at the ad account level.
  • Rate limitation happens real time on a sliding window.
  • Each Marketing API call is assigned a score. Your score is the sum of your API calls.
  • Updates are 10~100 more expensive than creates.
  • There’s a max score, and when it’s is reached, the throttling error is thrown.
  • Error, Code: 17, Message: User request limit reached

Recommendations:

  • Verify the error code (17) and api end point to confirm the throttling type.
  • The call will be blocked for a minute.
  • During this time the max score will decay, being dropped to 0 after a maximum of 5 minutes.
  • Switch to the other ad accounts and come back to this account later.
  • It is better to create a new ad than to change the existing ones.

刚开始没细看,以为是ip受限,但各种尝试后不得不来啃这些英文;

受限原因是每个广告账号有一个初始分数,每次访问api接口都会减去一定分数,当我们要获取广告账号下的数据而轮训接口时很快就会受限;

我以我这边数据场景说下优化:

开发语言:php + crontab

广告账号:12个

轮训数据要求:每小时轮训一次,获取详细消费数据(AD账户、广告系列、广告组、广告)、今天的数据、昨天的数据、最后7天的数据、最后14天的数据;

为什么需要这么多数据,使用这些数据进行比对,然后根据规则调整广告组的预算或终止广告;

我使用db做了一个任务表(x_cron),主要字段如下:

Field Type Comment
id int(11) NOT NULL
path varchar(100) NULL 接口路径
ac_id varchar(50) NULL ad账号id
param varchar(255) NULL POST/GET数据
method varchar(10) NULL POST/GET
header varchar(255) NULL 请求 header
status tinyint(1) NULL 状态 -1失败,0新的,2已执行
retry tinyint(1) NULL 重试次数
addtime int(10) NULL 添加时间
runtime int(10) NULL 运行时间
message varchar(5000) NULL 错误信息
crontime int(10) NULL 定时任务
hash char(32) NULL 避免重复添加任务,md5(path+param)
priority tinyint(1) NULL 优先级

优化前:crontab 每4秒执行一次一条任务,任务积累严重,无法保证任务执行

优化后: crontab 每15秒执行一次30条任务,任务25分钟左右全部执行完成,受限的任务将持续执行10次

优化思路:

区分白天任务和夜间任务:

白天(8:00-20:00)只拉取今日数据,并创建傍晚定时任务(昨天、7day,14day);

 傍晚(24:00-6:00)执行夜间任务;

受限后的策略,记录受限的ac_id,5分钟之内不再执行此ac_id的任务(官方说5分钟会回复账户分数,建议切换其它ad账户)

尝试次数,任务每执行一次,retry字段+1,执行结果出错就将  priority(优先级)-1,获取任务时按优先级排序,可以保证不被任务卡住;

尝试10次后,依然错误,将status置为-1,不再执行;

 

上线项目 Marketing Advertising Budget Rules

 

 

 

打赏
暂无评论

请到【后台 - 用户 - 我的个人资料】中填写个人说明。

发表评论