google-app-engine - Google Translation API 的 OAuth 范围是什么?

标签 google-app-engine oauth-2.0 google-api-client oauth2-playground oauth2client

肯定是其他人在使用该 API,我查看并搜索过,我似乎无法在身份验证时为 scope 参数找到正确的值:

我查看了所有这些范围列表,一无所获,尝试了 OAuth 2.0 Playground ,但没有翻译。

oauth playground v1

oauth playground v2

oath supported scopes

auth scopes

欢迎提供任何线索,谢谢。

错误信息:

Error: invalid_request

Missing required parameter: scope

Learn more
Request Details

更新

用户 Ezra 解释说,翻译 API 不需要 OAuth2 身份验证。

我是通过这条路走上这条路的:

我试图让示例代码在这里工作:

translation api sample code

并且没有 apiclient.discovery 模块

from apiclient.discovery import build

我开始寻找让我着陆的东西 here to this quick-start configurator 这给了我一个自动生成的翻译 api 项目 here :

这个应该为 Translation API 量身定制的入门项目包括一大堆 OAuth 配置,所以我因为这里提到的错误而问了这个问题

 exception calling translation api: <HttpError 400 when requesting    https://www.googleapis.com/language/translate/v2?q=zebra&source=en&alt=json&target=fr&key=MYSECRETKEYWENTHERE returned "Bad Request">

我用来进行上述调用的代码是:

   service = build('translate', 'v2',
        developerKey='MYSECRETKEYWENTHERE')
result = service.translations().list(
  source='en',
  target=lang,
  q='zebra'
).execute()

如果我直接进行错误提示的相同调用,它工作正常

https://www.googleapis.com/language/translate/v2?key=MYSECRETKEYWENTHERE&q=zebra&target=fr&alt=json&source=en

再次更新

好吧,我从示例项目中删除了所有 OAuth 代码,然后再次运行它,然后终于注意到我的 key 中有一个拼写错误...donk

感谢您的回答!

.

谢谢

最佳答案

我认为您误解了 OAuth 范围的用途。您没有列出任何代码,所以我将解释一些概念,希望您能将它们应用到您的情况。


OAuth 作用域解释:

OAuth 范围的目的是访问有关经过身份验证的用户的信息。每个应用程序的范围都不同,并确定应用程序被授予访问权限的有关用户的哪些信息。

具体来说,一个OAuth请求,scope参数为

https://www.googleapis.com/auth/userinfo.email https://www.googleapis.com/auth/userinfo.profile

登录时会向用户显示类似如下的提示:

+ View basic information about your account
    * View your name, public profile URL, and photo
    * View your gender and birthdate
    * View your country, language, and timezone
+ View your email address
    * View the email address associated with your account

虽然只有 https://www.googleapis.com/auth/userinfo.email 会显示如下内容:

+ View your email address
    * View the email address associated with your account

翻译 API 解释:

要使用 Translate API,您不必让用户通过 OAuth 进行身份验证。您只需获得一个 API key ,并在您向服务提出的请求中提供该 key 。

Translate API 的使用与 OAuth 的使用完全正交。

Translate API site 中所述, 要翻译您只需向

提出请求的内容
https://www.googleapis.com/language/translate/v2?parameters

使用适当的参数。

如文档中所列,所需的参数是

  • API key 。使用关键查询参数来识别您的应用程序。
  • 目标语言。使用目标查询参数指定要翻译成的语言。
  • 源文本字符串。使用 q 查询参数来识别要翻译的字符串。

具体来说,将文本“hello world”翻译成德语的请求是:

https://www.googleapis.com/language/translate/v2?key=INSERT-YOUR-KEY&source=en&target=de&q=Hello%20world

查看parameters specification了解您必须提供什么。

做什么:

查看Python example using the Translate API的来源或查找 API library for the language you want to use .

您会在示例中看到没有提及 OAuth 范围,因为它不需要针对 Translate API 服务进行身份验证。您只需要提供您的 API key ,以及您向服务请求中要翻译的文本。

可能有一些 API 调用需要作用域,但 Translate 不是其中之一。


如果您需要一些关于用户的信息,您将必须查找访问该信息所需的 API 和范围。然后,您将根据需要向 Translate API 提供此信息。

如果是400:

如果您收到错误响应,那很好,因为对服务的调用正在运行,即使它没有按照您的要求进行。

400 的情况下,Translate API 的响应将为您提供有关其响应错误的线索。

{
 "error": {
  "errors": [
   {
    "domain": "usageLimits",
    "reason": "keyInvalid",
    "message": "Bad Request"
   }
  ],
  "code": 400,
  "message": "Bad Request"
 }
}

上面的响应表明 key 无效。您可以通过 Google API Console 请求一个新的(或找到您的旧的) .

总结:

  • OAuth 范围用于请求有关用户的信息。在对用户进行身份验证时,您必须确定范围,并且您将有权访问这些范围提供的所有信息。
  • Translate API 不需要作用域。您在请求中提供一个 API key (和一些其他信息),它返回翻译 as documented .
  • 如果您希望翻译有关用户的信息,则必须分两步完成。首先,通过在适当范围内对用户进行身份验证来收集信息,然后将该信息提供给 Translate API。
  • 如果您收到 400,响应将包含一些您可以用来调试问题的信息。

关于google-app-engine - Google Translation API 的 OAuth 范围是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15252760/

相关文章:

google-app-engine - 谷歌应用引擎 : reference property that references to 4 models or more

java - 如何读取 blob 的内容并将其写入 GAE 数据存储 (Java)

c# - 适用于 Windows Phone 8.1 的 Google Api 任务客户端库

c# - Google Drive api v3 响应为空

java - 在 Google App Engine 的 VFS 中编译 JSP 文件

python - 如何在 Python 中检查对 Google Appengine 的传入请求的 HTTP header ?

OAuth-2.0/JWT-关于何时使用作用域与角色的指南

php - 清理 Magento Google Api OAuth2 集成

java - 集中式 API 提供者 - oAuth 与否?

javascript - Chrome 上的 Google Auth API Javascript idpiframe 初始化错误