Google API客户端Rails

时间:2012-12-31 21:55:24

标签: json api google-api google-custom-search google-api-ruby-client

我正在使用google-api-client客户端gem for ruby​​并在我调用API时收到403 Access Not Configured错误。

  require 'google/api_client'
  client = Google::APIClient.new
  client.authorization = nil
  search = client.discovered_api('customsearch')
  response = client.execute( search.cse.list, 'key' => '<<MY KEY>>', 'cx' => '<<MY CX>>', 'alt' => 'json', 'q' => 'hello world')

我正在尝试不使用OAuth进行搜索,只使用API​​密钥。

任何帮助将不胜感激。谢谢!

2 个答案:

答案 0 :(得分:1)

我遇到了同样的问题,我解决了这个问题:

Google帐户设置:

  1. 转到Google Apis(https://code.google.com/apis/console/)。
  2. 在“服务”下启用您要使用的服务(例如,Analytics API)。
  3. 在“API访问”下,点击蓝色大按钮创建OAuth客户端ID。
  4. 在下一个屏幕上输入您的产品信息(名称,徽标,网址)。
  5. 在下一个屏幕上,由于通信将由服务器处理,我们检查“服务帐户”选项并单击“创建客户端ID”按钮。
  6. 下载刚刚生成的私钥并将其放入({Rails.root} /config/.p12)。
  7. 打开API Access页面,因为下一步需要一些参数值。
  8. 在新标签页中,转到https://developers.google.com/products/并选择您要使用的服务。在左侧菜单中,导航到Configuration&gt;管理API(v3)&gt;资源&gt;授权(https://developers.google.com/analytics/devguides/config/mgmt/v3/mgmtAuthorization)。在下表中,您将找到相应的“:scope”参数网址(例如https://www.googleapis.com/auth/analytics.readonly)。这就是您找到合适范围的方式。
  9. 请注意,“:issuer”参数是客户ID旁边显示的服务帐户的电子邮件地址(例如@ developer.gserviceaccount.com)。
  10. 检查网址(例如https://developers.google.com/youtube/analytics/v1/将是youtubeAnalytics,v1)。我通常会发现谷歌搜索的例子:)。
  11. 请注意,这是“公钥指纹”值。
  12. 检查返回的每个对象的https://github.com/google/google-api-ruby-client源代码。
  13. 也许您必须将发卡行的电子邮件地址添加到您的Google Analytics帐户。
  14. Ruby on Rails代码:

    # creating client instance
    client = Google::APIClient.new
    
    # authenticating
    key = Google::APIClient::PKCS12.load_key("#{Rails.root}/config/<STRANGE_LONG_FILENAME>.p12", '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 => '<SCOPE_URL>',
      :issuer => '<HASH>@developer.gserviceaccount.com',
      :signing_key => key)
    client.authorization.fetch_access_token!
    
    # API call
    # NOTE: Check the documentation for API methods and parameters). The method discovered_api returns a service object. We can use to_h.keys to get the list of available keys of that object. Keys represents API methods (e.g. "analytics.management.accounts.list" the API method path is "management.accounts.list").
    result = client.execute(
      :api_method => client.discovered_api('<SERVICE_NAME>', 'v3').management.accounts.list,
      :parameters => { accountId: '~all', webPropertyId: '~all'}
    )
    if result.success?
        result.data
    end
    

答案 1 :(得分:0)

未配置访问意味着它是一个API,要求您的项目在API控制台中注册,并从服务选项卡打开自定义搜索API。您的客户端由OAuth令牌或API密钥标识。必须提供一个或两个。我怀疑您刚刚在服务选项卡中打开API,因为您的示例包含API密钥参数。

您也可以尝试更明确地传递参数:

result = client.execute(
  :api_method => search.cse.list,
  :key => '<<MY KEY>>',
  :parameters => {
    'cx' => '<<MY CX>>',
    'alt' => 'json',
    'q' => 'hello world'
  }
)