1

我使用google-api-client客戶端gem for ruby​​,並且每次調用API時都會出現403 Access Not Configured錯誤。Google API客戶端Rails

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密鑰。

任何幫助,將不勝感激。謝謝!

+0

沒有谷歌的API,需要SSL? – user749798

+0

排序,是的。 OAuth 2作品,但它需要谷歌方面。這不是你遇到的問題。 –

+0

謝謝。希望我能弄清楚我的問題是什麼。 – user749798

回答

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' 
    } 
) 
+0

謝謝,雖然關鍵的服務選項卡仍然打開。我還使用「簡單API訪問」Web瀏覽器密鑰。如果我使用其生成的引擎之一的代碼工作,但這不會因爲某種原因。 – user749798

+0

不知道...也許嘗試使用服務帳戶? –

1

我有同樣的問題,我解決了它這樣的:

谷歌帳戶設置:

  1. 轉到Google Apis(https://code.google.com/apis/console/)。
  2. 在「服務」下啓用您想要使用的服務(例如Google AnalyticsAPI)。
  3. 在「API訪問」下,通過單擊藍色大按鈕來創建OAuth客戶端ID。
  4. 在下一個屏幕上輸入您的產品信息(名稱,徽標,網址)。
  5. 在下一個屏幕上,由於通信將由服務器處理,因此我們選中「服務帳戶」選項並單擊創建客戶端ID按鈕。
  6. 下載剛剛生成的私鑰並將其放到({Rails.root} /config/.p12)。
  7. 使API訪問頁面保持打開狀態,因爲在下一步中需要一些參數值。
  8. 在新選項卡中,轉至https://developers.google.com/products/並選擇您想要使用的服務。在左側菜單中,導航到配置>管理API(v3)>資源>授權(https://developers.google.com/analytics/devguides/config/mgmt/v3/mgmtAuthorization)。在下表中您可以找到適當的「:scope」參數url(例如https://www.googleapis.com/auth/analytics.readonly)。這是你如何找到合適的範圍。
  9. 請注意,「:issuer」參數是顯示在客戶端ID旁邊的服務帳戶的電子郵件地址(例如@ developer.gserviceaccount.com)。
  10. 用於檢查URL(例如,https://developers.google.com/youtube/analytics/v1/將是youtubeAnalytics,v1)。我通常會發現谷歌搜索的例子:)。
  11. 請注意,這是「公鑰指紋」值。
  12. 請檢查返回的每個對象的源代碼https://github.com/google/google-api-ruby-client
  13. 也許您必須將發行人電子郵件地址添加到您的Google Analytics帳戶。

的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