如何在没有 Oauth 的情况下访问 Google 客户端 API(仅 API 密钥)

Posted

技术标签:

【中文标题】如何在没有 Oauth 的情况下访问 Google 客户端 API(仅 API 密钥)【英文标题】:How to access Google client api without Oauth (just API key) 【发布时间】:2012-12-15 05:26:32 【问题描述】:

我正在尝试在没有 Oauth 的情况下访问 Google api 客户端 (Ruby).. 我找到了这个信息:

http://thecodeabode.blogspot.com.au/2012/07/google-api-ruby-client-authorizing-with.html

但不幸的是,如果我按照说明进行操作(这就是我所做的):

 require 'google/api_client'
 client = Google::APIClient.new(:key => "MYKEY",:authorization => nil)    
 yt = client.discovered_api("youtube", "v3")
 result = client.execute(
   :api_method => yt.search.list,
   :parameters => 
     :key => "MYKEY",
     :q => "dogs",
     :part => "topicDetails"
   
 )

我明白了

“已超出未经验证使用的每日限制。继续使用需要注册”

怎么了?

【问题讨论】:

【参考方案1】:

简而言之,所有基于发现的 API 都需要识别您的调用。当 Google API 无法识别您的应用时,我通常会看到您遇到的错误。您通常可以拨打一些身份不明的电话,但您几乎可以肯定很快就会遇到低得多的“身份不明”配额。您可以使用 OAuth(标识您的应用)进行身份验证,也可以指定 API 密钥(标识您的应用),或者两者都可以。

这是通过设置client.key = "<your api key>" 或将其传递给客户端构造函数来完成的(就像您所做的那样)。您可能还应该设置 client.user_ip = request.remote_ip(或在您选择的框架中获取客户端 IP 地址的任何内容),特别是如果您没有使用 OAuth 进行身份验证。

您似乎已经在示例中设置了 API 密钥,但您可能有拼写错误或来自错误 API 项目的密钥,或者您遇到了每个用户的限制,这设置了 @ 987654323@ 将解决。另一件重要的事情是,配额可以根据每天的查询来指定,然后每分钟或每小时或在其他时间段内强制执行。因此,您可能有 10k QPD 配额,但这只是 415 QPH 或 7 QPM。我不知道 YouTube 配额是如何执行的,但请记住这一点。

您不需要做的一件事是在 API 调用的 :parameters 参数中设置 :key。如果您想根据每个请求进行设置,只需将其作为另一个可选参数直接传递给execute。在您的情况下,这应该由客户自动处理。可能最好从代码中删除它,因为您已经在构造函数中设置了它。

最终结果应该是:

require 'google/api_client'
client = Google::APIClient.new(:key => "MYKEY", :authorization => nil)    
yt = client.discovered_api("youtube", "v3")
result = client.execute(
  :api_method => yt.search.list,
  :authenticated => false,
  :user_ip => request.remote_ip,
  :parameters => 
    :q => "dogs",
    :part => "topicDetails"
  
)

【讨论】:

【参考方案2】:

API 控制台中有一个Quotas Pane,它将告诉您该实用 API 密钥的每日限制。你在重复使用别人的密钥吗?如果您没有提供帐单信息(或者它可能是仅适用于 oAuth 的资源),该限制也可能很低

【讨论】:

不,这是新鲜的 API,配额很好。它还说“未经身份验证”的使用,这表明基于密钥的登录没有发生。但是我如何在没有 oauth 的情况下登录>

以上是关于如何在没有 Oauth 的情况下访问 Google 客户端 API(仅 API 密钥)的主要内容,如果未能解决你的问题,请参考以下文章

如何在没有 oAuth 身份验证的情况下连接到 Google Calendar API?

Gmail插件可在没有oAuth的情况下连接到非Google服务

如何在没有用户身份验证的情况下列出 Google 日历活动

Android - 如何获取 google plus 访问令牌?

是否可以在没有 OAuth2 身份验证对话框的情况下从 Google App-Engine (python) 连接和查询 BigQuery 表?

如何在不访问身份验证服务器的情况下验证 OAuth2 访问令牌 (JWT)