2

我正在尝试在没有 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"
   }
 )

我明白了

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

怎么了?

4

2 回答 2

1

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

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

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

您不需要做的一件事是将:key参数设置:parameters为 API 调用。如果你想在每个请求的基础上设置它,那只是作为另一个可选参数直接传递给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"
  }
)
于 2012-12-16T13:44:43.977 回答
0

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

于 2012-12-15T05:35:12.053 回答