为什么使用Ruby客户端时,谷歌自定义搜索API会提示缺少访问令牌?

4
我正在尝试使用Google自定义搜索API,使用Google API Ruby客户端。我已经通过Google API控制台设置了我的API密钥,并创建了我的CSE。根据文档,只要我提供API密钥(我正在这样做),就不需要OAuth2身份验证令牌来调用列表方法。但是,当我尝试执行下面的代码时,我收到以下错误:

参数错误:缺少访问令牌。

我错过了什么?这是我的代码:

# create client
client = Google::APIClient.new

# Fetch discovery doc
search = client.discovered_api('custom search')

# Call list method
response = client.execute(
  search.cse.list, 'key' => '<my API key>', 'cx' => '<my CSE id>', 'alt' => 'json', 'q' => 'hello world'
)
4个回答

2

我认为这实际上是客户端中的一个错误(它还处于 alpha 版本)。经过进一步的尝试,我找到了一个解决方法:

在创建客户端对象后,只需分配一个“虚拟”的访问令牌即可:

client.authorization.access_token = '123'

那么您可以调用search.cse.list方法,而不会出现“ArgumentError:Missing access token.”的错误。


1
你也可以直接使用 client.authorization = nil。这将告诉 Google 依赖 API 密钥而不是凭据。http://stackoverflow.com/a/10825773/838874 - Agent47DarkSoul

0

在当前版本的 gem(0.7.1)中,除了设置密钥以外,您还需要将授权设置为 nil

require 'google/api_client'

client = Google::APIClient.new
client.key = ENV['GOOGLE_API_KEY']
client.authorization = nil

client.execute ...

0

我发现在我的代码中添加client.retries=3可以解决这个问题。


0

如果你只是想使用Ruby来使用Google CSE,请尝试google-cse。我刚刚构建了这个gem,虽然我已经私下使用它一段时间了。比alpha客户端更容易使用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接