当我把这个功能在我Laravel应用获取我的Facebook广告的性能故障报告,我经常得到这个错误(FacebookAds\Http\Exception\AuthorizationException, Code: 17: (#17) User request limit reached
)。
/**
* @param string $levelType
* @param string $id
* @param string $start (YYYY-MM-DD date)
* @param string $end (YYYY-MM-DD date)
* @param int $minImp
* @return array
*/
public function getFbBreakdown($levelType, $id, $start, $end, $minImp = 100) {
$cacheKey = 'fbBreakdown' . $levelType . $id . $start . $end . $minImp;
return Cache::remember($cacheKey, 60, function () use ($levelType, $id, $start, $end, $minImp) {
$fields = [
strtolower(self::SPEND),
AdsInsightsFields::IMPRESSIONS
];
$params = [
'breakdowns' => self::AD_ACCT_HOURLY_STATS,
];
$dateRanges = $this->fbTools->getDateRangeBrokenDownToDays($start, $end);
foreach ($dateRanges as $range) {
$params[AdReportRunFields::TIME_RANGE] = $range;
$endpoint = '/' . $id . '/insights?' . 'fields=' . implode(',', $fields);
$fbr = new FacebookRequest($this->fbApp, $this->fbConfig[self::ACCESS_TOKEN], \FacebookAds\Http\RequestInterface::METHOD_GET, $endpoint, $params, null, self::FB_GRAPH_VERSION);
$requests[] = $fbr;
}
$batches = array_chunk($requests, 50); //Facebook limits batch requests to 50 at a time
$chunkedFbResponses = [];
foreach ($batches as $batchOfRequests) {
$response = $this->fb->sendBatchRequest($batchOfRequests, $this->fbConfig[self::ACCESS_TOKEN]);
$chunkedFbResponses[] = $response->getResponses();
}
$responses = [];
foreach ($chunkedFbResponses as $chunkedFbResponse) {
$responses = array_merge($responses, $chunkedFbResponse);
}
return $responses;
});
}
在https://developers.facebook.com/apps/99999/dashboard/?business_id=99999我的Facebook开发者信息中心,我看到“广告客户限速”为被达到,但我看不到任何关于“用户请求限制”。是不是一回事?
我知道,极限似乎每5分钟复位。
有多少查询被允许每次5分钟?
有没有别的东西,我可以做批量查询更好,所以该功能使用了更少的API请求?
广告帐户级和用户级两个罚球错误代码17.查询允许每5分钟是基于广告账户的金额,Facebook并没有真正解释它是如何确定的,但我记得读书的地方,它可以被关联到广告花的帐户。它实际上是对他们的服务条款以编程方式找出自己的速度如何限制的工作原理。
配料将不利于在所有速率限制。你能做的最好的事情是拉头x-ad-account-usage
并置于睡眠一旦你打一个高的比例。
退房的最佳实践页面:https://developers.facebook.com/docs/marketing-api/best-practices