我正在使用translate API翻译页面中的一些文本,这些文本是大型html格式的文本,因此我必须开发一个函数,将这些文本拆分为小于4500个字符的小块(包括html标记),以避免每次请求5000个字符的限制,我还必须修改Google PHP API,以允许通过POST发送请求。
我在谷歌开发者控制台中启用了付费版的api,并将总配额更改为每天50M个字符和每秒500个请求/user。
现在我正在用脚本翻译整个文本数据库,它工作得很好,但在某些随机点上,我会恢复错误"(403)超过用户速率限制",我必须等待几分钟才能重新运行脚本,因为当遇到错误时,api会一次又一次地返回相同的错误,直到我等待一段时间。
我不知道如果我不传递请求的数量,它为什么会不断返回错误,就像每个时间间隔都有某种最大字符一样。。。
您可能超过了之前设置的配额限制:这要么是每日计费,要么是每秒请求字符的限制。
要更改使用限制或请求增加配额,请执行以下操作:1.转到谷歌开发者控制台"https://console.developers.google.com/"。2.选择一个项目。3.在左侧边栏上,展开API&授权。4.单击API。5.点击您感兴趣的激活API的名称"即翻译API"。6.在API的信息页面顶部附近,单击配额。
-
如果您启用了计费,只需单击"配额",它将带您进入配额页面,您可以在其中查看和更改与配额相关的设置。
-
如果不是,单击配额将显示有关适用于翻译API的任何免费配额和限制的信息。
Google开发者控制台的速率限制为每秒10个请求,无论您更改了什么设置或限制。
你可能超过了这个限制。
我找不到任何关于这方面的文档,但我可以通过各种API请求自己进行验证。
您可以控制字符限制,但不能控制并发
您要么每秒发出500个以上的并发请求,要么使用另一个达到这种并发限制的Google API。
默认情况下不会设置referer标头,但可以将标头添加到请求中,如下所示:
$result = $t->translate('Hola Mundo', [
'restOptions' => [
'headers' => [
'referer' => 'https://your-uri.com'
]
]
]);
如果在客户端级别设置referer更有意义(这样流经客户端的所有请求都会收到标头),那么这也是可能的:
$client = new TranslateClient([
'key' => 'my-api-key',
'restOptions' => [
'headers' => [
'referer' => 'https://your-uri.com'
]
]
]);
这对我有用!
参考
在我的案例中,此错误是由我的无效付款信息引起的。转到计费区域,确保一切正常。
在谷歌云设置中徘徊了几个小时后,我发现这是无效的支付信息,正如Federico Schiocchet所提到的,请确保您的账单信息是正确的。