通过 Rails Google API 客户端的图像搜索示例

Image Search Example via Rails Google API Client

我需要在我的 rails 应用中复制“Search Google for this Image”,其中对应用中的图像执行图像搜索。我正在使用 google-api-ruby-client gem。为了测试 api,我从一个简单的查询搜索开始:

正在为常规搜索词尝试此操作,但收到 invalid_scope 错误。

client               = Google::APIClient.new application_name: 'xxx', application_version: '1.0'
keypath              = Rails.root.join('config', 'privatekey.p12').to_s
key                  = Google::APIClient::PKCS12.load_key(keypath, 'notasecret')

client.authorization = Signet::OAuth2::Client.new(
    :token_credential_uri => 'https://accounts.google.com/o/oauth2/token',
    :audience             => 'https://accounts.google.com/o/oauth2/token',
    :scope                => 'https://www.googleapis.com/customsearch/v1',
    :issuer               => 'xxx@developer.gserviceaccount.com',
    :signing_key          => key
).tap { |auth| auth.fetch_access_token! }


api_method = client.discovered_api('customsearch', 'v1')

result = client.execute(:api_method => api_method, :parameters => {
    'q'          => 'Hello+World'
})
return result.data

想法?

不幸的是,我没有使用自定义搜索引擎的经验,但我确实找到了 link 我认为可以帮助您找到正确答案。 Google 开发文档似乎非常适合为您的站点设置自定义搜索引擎。

Google Developers - Creating a Custom Search Engine

您的 API 调用似乎缺少所需的自定义搜索引擎 ID。您需要使用 cx 或 cref 来指定要使用的自定义搜索引擎。如果您还没有 CSE ID,可以在这里获取:https://www.google.com/cse

获得 CSE ID 后,您需要将其包含在参数中。一种可能的方法是将它添加到您已有的哈希中...

result = client.execute(:api_method => api_method, :parameters => {'cx' => 'YOUR_CSE_ID', 'q'=> 'Hello+World'}

您的实际 URI 结构应如下所示:

https://www.googleapis.com/customsearch/v1?key=YOUR_API_KEY&cx=YOUR_CSE_ID&q=Hello+World

这是另一个很好的参考:https://developers.google.com/custom-search/docs/api