肯定是其他人在使用该 API,我查看并搜索过,我似乎无法在身份验证时为 scope 参数找到正确的值:
我查看了所有这些范围列表,一无所获,尝试了 OAuth 2.0 Playground ,但没有翻译。
欢迎提供任何线索,谢谢。
错误信息:
Error: invalid_request
Missing required parameter: scope
Learn more
Request Details
更新
用户 Ezra 解释说,翻译 API 不需要 OAuth2 身份验证。
我是通过这条路走上这条路的:
我试图让示例代码在这里工作:
并且没有 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/