我试图在没有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"
}
)
我得到了
“超出未经身份验证的使用的每日限制。继续使用需要注册”
有什么问题?
答案 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的资源),那么限制也可能很低。