我使用谷歌翻译API与C#代码通过"Google.Apis.Translate.v2“版本1.9.2.410与付费服务。
代码类似于:
var GoogleService = new Google.Apis.Translate.v2.TranslateService(
new BaseClientService.Initializer
{
ApiKey = Context.ConfigData.GoogleApiKey,
ApplicationName = "Translator"
});
...
var rqr = GoogleService.Translations.List(item, 'de');
rqr.Source = "cs";
var result = await rqr.ExecuteAsync();
此代码例外:
用户速率限制超过403个错误[ MessageUser速率限制超过位置- ReasonuserRateLimitExceeded DomainusageLimits ]
在那之前,从来没有。我的限制是:剩余总配额5万字/天
49 344 849字符/天98 69%
100个请求/第二个/用户
请求的数量肯定少于每秒100个请求,请问出了什么问题?
发布于 2015-11-27 11:36:04
有一个现有的无文档化的翻译API配额。此配额将每个用户每100秒的字符数限制为10,000个字符(也称为10,000个字符/100秒/用户)。
这意味着,即使您将大型文本分割成不同的请求,也无法在100秒的间隔内绕过10,000个字符。
简短的例子:
我建议的是总是捕获异常,并多次尝试做指数退避。这样做的想法是,如果服务器由于命中100秒间隔配额而暂时关闭,那么在返回之前,它不会被同时命中的请求所淹没(因此会连续返回403个错误)。您可以看到对此实践这里的简要解释(示例主要关注于Drive,但同样的概念适用于每个基于云的服务)。
或者,您可以捕获异常,每当您收到403错误时,请应用100秒的延迟,然后再试一次。这不是最有时间效率的解决方案,因为100秒间隔是连续的(不是在达到配额时启动),但它将确保您不会在相同的请求中达到两次。
https://stackoverflow.com/questions/33889673
复制相似问题