我正在尝试在没有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"
}
)
我得到
"超过未经验证使用的每日限额。继续使用需要注册">
怎么了?
简而言之,所有基于发现的API都需要识别您的调用。当谷歌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的配额是如何执行的,但这是需要记住的。
不需要做的一件事是将:parameters
参数中的:key
设置为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"
}
)
在API控制台中有一个配额窗格,它将告诉您该练习API密钥的每日限额。你在重复使用别人的钥匙吗?如果你没有提供账单信息(或者它可能是一个只在oAuth上工作的资源),的限制也可能很低