翻译 API 无故超出用户速率限制 [403]
Translate API User Rate Limit Exceeded [403] without reason
我使用 google 翻译 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();
此代码采取异常:
User Rate Limit Exceeded [403] Errors [ Message[User Rate Limit
Exceeded] Location[ - ] Reason[userRateLimitExceeded]
Domain[usageLimits] ]
在那之前,从来没有。我的极限是:
总配额
50 000 000 characters/day
剩余
49 344 849 characters/day
98,69 % 的总数
每用户限制
100 requests/second/user
请求数肯定小于100请求/秒
请问怎么了?
存在未记录的翻译配额 API。此配额将每个用户每 100 秒的字符数限制为 10,000(又名 10,000 chars/100seconds/user)。
这意味着,即使您将大文本拆分成不同的请求,您也无法在 100 秒的间隔内绕过 10,000 个字符。
简要示例:
- 如果在前 5 秒内绕过 10k 个字符,则需要等待 95 秒才能继续分析字符。
- 如果您在 50 秒后达到此配额,您将需要再等待 50 秒。
- 如果在第二个99号命中,需要等待1秒才能继续工作。
我建议的是始终捕获异常,并重试多次以进行指数退避。这个想法是,如果服务器由于达到 100 秒间隔配额而暂时关闭,它不会被同时命中的请求淹没,直到它恢复(因此连续返回 403 错误)。您可以查看此做法的简要说明 here(示例主要针对 Drive API,但相同的概念适用于每个基于云的服务)。
或者,您可以捕获异常,每当您收到 403 错误时,应用 100 秒的延迟并重试。这不是最省时的解决方案,因为 100 秒的间隔是连续的(达到配额时不会开始),但它会确保您不会在同一请求中两次达到限制。
我使用 google 翻译 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();
此代码采取异常:
User Rate Limit Exceeded [403] Errors [ Message[User Rate Limit Exceeded] Location[ - ] Reason[userRateLimitExceeded] Domain[usageLimits] ]
在那之前,从来没有。我的极限是:
总配额
50 000 000 characters/day
剩余
49 344 849 characters/day
98,69 % 的总数
每用户限制
100 requests/second/user
请求数肯定小于100请求/秒 请问怎么了?
存在未记录的翻译配额 API。此配额将每个用户每 100 秒的字符数限制为 10,000(又名 10,000 chars/100seconds/user)。
这意味着,即使您将大文本拆分成不同的请求,您也无法在 100 秒的间隔内绕过 10,000 个字符。
简要示例:
- 如果在前 5 秒内绕过 10k 个字符,则需要等待 95 秒才能继续分析字符。
- 如果您在 50 秒后达到此配额,您将需要再等待 50 秒。
- 如果在第二个99号命中,需要等待1秒才能继续工作。
我建议的是始终捕获异常,并重试多次以进行指数退避。这个想法是,如果服务器由于达到 100 秒间隔配额而暂时关闭,它不会被同时命中的请求淹没,直到它恢复(因此连续返回 403 错误)。您可以查看此做法的简要说明 here(示例主要针对 Drive API,但相同的概念适用于每个基于云的服务)。
或者,您可以捕获异常,每当您收到 403 错误时,应用 100 秒的延迟并重试。这不是最省时的解决方案,因为 100 秒的间隔是连续的(达到配额时不会开始),但它会确保您不会在同一请求中两次达到限制。