我们在项目中使用Google Shortener,似乎Google有两个限制:
在上午11点,我们有一个运行代码的cron作业,需要缩短约15,000个网址,
昨天我们只使用了一个密钥,但是今天我们添加了6个密钥来绕过这个限制,每分钟使用其中一个密码使用以下代码
$googleAPIKeys = [
'KEY1CODE',
'KEY2CODE',
'KEY3CODE',
'KEY4CODE',
'KEY5CODE',
'KEY6CODE'
];
$roundRobinKey = date('i') % count($googleAPIKeys);
try {
$req = $client->post('https://www.googleapis.com/urlshortener/v1/url?key=' . $googleAPIKeys[$roundRobinKey], [
'json' => [
'longUrl' => $url
]
]);
} catch (ClientException $e) {
return $url;
}
$result = json_decode($req->getBody()->getContents());
看起来很奇怪,为什么会这样?缩短谷歌服务的真正限制是什么? 如何绕过此限制?
另一个注意事项:如果您的限制超过(每100秒100次),如果您在5分钟后再次尝试使用该密钥仍然面临403限制超出问题!!! 似乎谷歌的限制并不像他们说的那样!!!
更新
阅读Standard Query Parameters和Capping API usage后 我已将请求更改为以下
$req = $client->post('https://www.googleapis.com/urlshortener/v1/url?quotaUser=' . $userID . '&key=' . $myKey, [
'json' => [
'longUrl' => $url
]
]);
哪个userID
是每个请求的唯一用户ID(因为我们为每个用户生成每个网址)。但仍面临着403 !!!
任何想法?
答案 0 :(得分:1)
限制将基于项目和用户。但它也可以基于ip。
解决方法
请注意,您被锁定的时间应该是一个小时左右。
quotaUser userIp的替代方案。允许您强制执行每个用户的配额 即使在用户的IP的情况下,从服务器端应用程序 地址不详。例如,这可以通过应用程序发生 代表用户在App Engine上运行cron作业。你可以选择 任何唯一标识用户的任意字符串,但它是 限制为40个字符。如果提供了两者,则覆盖userIp。学习 有关封顶API使用的更多信息。
您可以在请求中将其添加为额外的parm
quotaUser=xxxx