c# - 翻译 API 用户速率限制无故超出 [403]

标签 c# google-translate

我通过“Google.Apis.Translate.v2”版本 1.9.2.410 和付费服务使用带有 C# 代码的谷歌翻译 API。

代码有点像:

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 个字符/天 剩余
49 344 849 个字符/天 占总数的 98.69% 每用户限制
100 个请求/秒/用户

请求数肯定小于每秒100个请求 请问这是怎么回事?

最佳答案

翻译 API 存在现有的未记录配额。此配额将每个用户每 100 秒的字符数限制为 10,000 个(也称为 10,000 个字符/100 秒/用户)。

这意味着,即使您将大文本拆分为不同的请求,您也无法在 100 秒间隔内绕过 10,000 个字符。

简要示例:

  • 如果您在前 5 秒内绕过 10k 个字符,则需要等待 95 秒才能继续分析字符。
  • 如果您在 50 秒后达到此配额,则需要再等待 50 秒。
  • 如果您在第二个 99 号命中,则需要等待 1 秒才能继续工作。

我的建议是始终捕获异常,并重试多次进行指数退避。这个想法是,如果服务器由于达到 100 秒间隔配额而暂时关闭,它不会因同时命中的请求而不堪重负,直到它恢复为止(因此会连续返回 403 错误)。这个做法可以看简单说明here (该示例重点关注 Drive API,但相同的概念适用于每个基于云的服务)。

或者,您可以捕获异常,每当收到 403 错误时,应用 100 秒的延迟并重试。这不是最省时的解决方案,因为 100 秒间隔是连续的(达到配额时不会开始),但它将确保您不会因同一请求而两次达到限制。

关于c# - 翻译 API 用户速率限制无故超出 [403],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33889673/

相关文章:

c# - POP-Before-SMTP

C#,如何使重载方法共享 <summary> 标记

c# - 使用图像将 Gridview 导出到 Excel

c# - 我可以将剪贴板作为命令参数发送吗?

javascript - 如何翻译网站中的特定内容

javascript - 谷歌翻译 - 禁止翻译我的部分文字

node.js - Google Translate API 总是返回 "Required parameter: q"作为错误

google-translate - 我可以使用Google翻译翻译我的网站吗?

javascript - 使用 javascript,是否可以通过 Google Translate 提取并列出所有可用语言?

C# 多选列表框所选项目文本