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

时间:2012-12-15 05:26:32

标签: google-data-api google-api-client

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

我得到了

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

有什么问题?

2 个答案:

答案 0 :(得分: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"
  }
)

答案 1 :(得分:0)

在API控制台中有Quotas Pane,它会告诉您该特定API密钥的每日限制。你在重用别人的钥匙吗?如果您没有提供结算信息(或者它可能是仅适用于oAuth的资源),那么限制也可能很低。