为什么 Google 的自定义搜索 API 说我在使用 Ruby 客户端时缺少访问令牌?



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

ArgumentError: Missing access token.

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

# 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'
)

我相信这实际上是客户端的一个bug(它在alpha中)。在稍微摆弄了一下之后,我找到了一个解决方法:

在创建客户端对象之后,为其分配一个"虚拟"访问令牌:

client.authorization.access_token = '123'

则可以调用search.cse.list方法,而不会得到"ArgumentError: Missing access令牌"。"错误。

如果你只是想用ruby使用Google CSE,试试Google - CSE。我刚造了这个宝石,虽然我私下用了一段时间。比alpha客户端更容易使用

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

对于当前版本的gem(0.7.1),除了设置密钥之外,还需要将授权设置为nil:

require 'google/api_client'
client = Google::APIClient.new
client.key = ENV['GOOGLE_API_KEY']
client.authorization = nil
client.execute ...

相关内容

  • 没有找到相关文章

最新更新