Google 起酥油 API 限制
Google Shortener API limitation
我们在项目中使用 Google 起酥油,看来 Google 有两个限制:
- 100 秒内每位用户 100 次请求
- 每天 1000000 个请求。
在 11:00 上午,我们有一个运行代码的 cron 作业,需要缩短大约 15,000 个 URL,
昨天我们只用了一把钥匙,但今天我们增加了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());
但仍然面临403(限制超出)
好像很奇怪,为什么会这样?缩短 google 服务的真正限制是什么?
如何绕过这个限制?
另一个注意事项: 在单键场景中如果您超过限制(每 100 秒 100 次)如果您在 5 分钟后尝试再次使用该键仍然面临 403 限制超过问题 !!!
看来google限制并不像他们说的那样!!!
更新
看完后Standard Query Parameters and Capping API usage
我已将我的请求更改为以下内容
$req = $client->post('https://www.googleapis.com/urlshortener/v1/url?quotaUser=' . $userID . '&key=' . $myKey, [
'json' => [
'longUrl' => $url
]
]);
其中 userID
是每个请求的唯一用户 ID(因为我们为每个用户生成每个 url)。但仍然面临 403!!!
有什么想法吗?
限制将基于项目和用户。但是它也可以基于 ip。
解决方法
- 在 Google 开发人员控制台上创建多个项目。每个都有一个 API 键。
- 使用随机变量随每个请求发送可选的 parm userid。
- 检查开发人员控制台中的配额选项卡,看看您是否可以增加配额,它会有一个铅笔图标。
请注意,您被锁定的时间应该在一个小时左右。
quotaUser Alternative to userIp. Lets you enforce per-user quotas
from a server-side application even in cases when the user's IP
address is unknown. This can occur, for example, with applications
that run cron jobs on App Engine on a user's behalf. You can choose
any arbitrary string that uniquely identifies a user, but it is
limited to 40 characters. Overrides userIp if both are provided. Learn
more about Capping API usage.
您将其添加为请求中的附加参数
quotaUser=xxxx
我们在项目中使用 Google 起酥油,看来 Google 有两个限制:
- 100 秒内每位用户 100 次请求
- 每天 1000000 个请求。
在 11:00 上午,我们有一个运行代码的 cron 作业,需要缩短大约 15,000 个 URL,
昨天我们只用了一把钥匙,但今天我们增加了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());
但仍然面临403(限制超出)
好像很奇怪,为什么会这样?缩短 google 服务的真正限制是什么? 如何绕过这个限制?
另一个注意事项: 在单键场景中如果您超过限制(每 100 秒 100 次)如果您在 5 分钟后尝试再次使用该键仍然面临 403 限制超过问题 !!! 看来google限制并不像他们说的那样!!!
更新
看完后Standard Query Parameters and Capping API usage 我已将我的请求更改为以下内容
$req = $client->post('https://www.googleapis.com/urlshortener/v1/url?quotaUser=' . $userID . '&key=' . $myKey, [
'json' => [
'longUrl' => $url
]
]);
其中 userID
是每个请求的唯一用户 ID(因为我们为每个用户生成每个 url)。但仍然面临 403!!!
有什么想法吗?
限制将基于项目和用户。但是它也可以基于 ip。
解决方法
- 在 Google 开发人员控制台上创建多个项目。每个都有一个 API 键。
- 使用随机变量随每个请求发送可选的 parm userid。
- 检查开发人员控制台中的配额选项卡,看看您是否可以增加配额,它会有一个铅笔图标。
请注意,您被锁定的时间应该在一个小时左右。
quotaUser Alternative to userIp. Lets you enforce per-user quotas from a server-side application even in cases when the user's IP address is unknown. This can occur, for example, with applications that run cron jobs on App Engine on a user's behalf. You can choose any arbitrary string that uniquely identifies a user, but it is limited to 40 characters. Overrides userIp if both are provided. Learn more about Capping API usage.
您将其添加为请求中的附加参数
quotaUser=xxxx