4

肯定有人在使用 API,我查看并搜索过,在进行身份验证时,我似乎找不到正确的范围参数值:

我查看了所有这些范围列表,什么都没有,尝试了 OAuth 2.0 游乐场,没有翻译。

oauth 游乐场 v1

oauth 游乐场 v2

誓言支持范围

授权范围

欢迎任何线索,谢谢。

错误信息:

Error: invalid_request

Missing required parameter: scope

Learn more
Request Details

更新

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

我沿着这条路走上这条路:

我试图使这里的示例代码工作:

翻译api示例代码

并且没有 apiclient.discovery 模块

from apiclient.discovery import build

我开始寻找让我来到这个快速启动配置器的东西,它在这里 给了我一个自动生成的翻译 api 项目:

这个应该为翻译 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 代码,然后再次运行它,然后终于注意到我的密钥中有一个错字... donk

感谢您的回答!

.

谢谢

4

3 回答 3

5

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


OAuth 范围解释:

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

具体来说,一个 OAuth 请求,其范围参数为

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 解释:

要使用翻译 API,您不必让用户使用 OAuth 进行身份验证。您只需获取一个 API 密钥,并在您对服务的请求中提供该密钥。

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

正如Translate API 网站上所记录的那样,要翻译某些内容,您只需发出请求

https://www.googleapis.com/language/translate/v2?parameters

与适当的参数。

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

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

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

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

查看参数规范以了解您必须提供的内容。

该怎么办:

查看使用 Translate API 的 Python 示例的源代码或查找您要使用的语言的 API 库

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

可能存在需要范围的 API 调用,但 Translate 不是其中之一。


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

在以下情况下400

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

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

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

上面的响应表明密钥无效。您可以通过Google API 控制台请求新的(或查找旧的)。

概括:

  • OAuth 范围用于请求有关用户的信息。在对用户进行身份验证时,您必须确定范围,并且您将有权访问这些范围提供的所有信息。
  • Translate API 不需要范围。您在请求中提供 API 密钥(和其他一些信息),它会按照文档返回翻译。
  • 如果您希望翻译有关用户的信息,则必须分两步完成。首先,通过在适当范围内对用户进行身份验证来收集信息,其次通过将该信息提供给 Translate API。
  • 如果您收到400,则响应将包含一些可用于调试问题的信息。
于 2013-03-06T17:17:50.443 回答
1

根据Google 的文档,您必须查看特定 API 的文档。

根据此 Google Group question更新:

“Translate API(v1 和 v2)是未经身份验证的 API,因此您不需要使用 OAuth。相反,对于 v2,您应该使用 API 密钥,您可以在此处获取: http://code .google.com/apis/console "

于 2013-03-06T16:30:45.177 回答
0

对于错误信息

错误:invalid_request 缺少必需参数:范围

您需要在表单中添加范围

<input type="hidden" name="scope" value="https://www.googleapis.com/auth/userinfo.profile https://www.googleapis.com/auth/userinfo#email https://www.googleapis.com/auth/plus.me https://www.googleapis.com/auth/tasks https://www-opensocial.googleusercontent.com/api/people https://www.googleapis.com/auth/plus.login" />

请参考linkedin、facebook、twitter 和google 提供商的春季社交登录。

于 2016-05-25T19:42:25.637 回答