2012-09-19 93 views
4

我正在嘗試編寫一個將Google文檔寫入Google雲端硬盤的AppEngine應用,並將其放入一組特定的文件夾並設置訪問權限。我已經與舊的DocsList API一起工作,但由於剛剛被棄用,我決定更新我的代碼(並且我還有一些額外的功能可以添加)。Google雲端硬盤服務帳戶返回403使用限制

我正面臨的問題是:當我使用服務帳戶並嘗試模擬特定用戶時,即使我沒有用完我的任何配額,但仍會使用usageLimits。

這裏是我使用的代碼:

GoogleCredential credentials = new GoogleCredential.Builder() 
       .setTransport(HTTP_TRANSPORT) 
       .setJsonFactory(JSON_FACTORY) 
       .setServiceAccountId("xxxxxxxxxxgserviceaccount.com") 
       .setServiceAccountScopes(DriveScopes.DRIVE) 
       .setServiceAccountPrivateKeyFromP12File(
            new java.io.File("xxxx-privatekey.p12")) 
       .setServiceAccountUser("[email protected]").build(); 

我不是使用這些憑據來啓動我的Drive對象:

Drive d = Drive.builder(httpTransport, jsonFactory) 
       .setHttpRequestInitializer(credentials) 
       .setJsonHttpRequestInitializer(new JsonHttpRequestInitializer() { 
       @Override 
       public void initialize(JsonHttpRequest request) { 
        DriveRequest driveRequest = (DriveRequest) request; 
        driveRequest.setPrettyPrint(true); 
       } 
      }).setApplicationName("MYAPPNAME").build(); 

BTW:我一直在使用新的驅動器試圖(.. ..),但不管我嘗試什麼都不行。保持拋出內部方法沒有找到的錯誤!

回到這個問題:。 當我不是使用 'D' 調用類似.files()獲得( 「SOMEFILEID」)執行()我得到一個403

{ "code" : 403, 
"errors" : [ { 
    "domain" : "usageLimits", 
    "message" : "Daily Limit Exceeded. Please sign up", 
    "reason" : "dailyLimitExceededUnreg", 
    "extendedHelp" : "https://code.google.com/apis/console" 
    } ], 
    "message" : "Daily Limit Exceeded. Please sign up" 
} 

我可以」弄清楚爲什麼這不起作用。我整天都在網上看,但找不到合適的答案。非常感謝一些幫助。

+0

可能的重複:http://stackoverflow.com/questions/10323579/google-drive-sdk-java-sample-not-working –

+0

我檢查了...這是一個客戶端應用程序。我遇到了服務帳戶,服務器端的問題。但是再次經歷這些問題......誰知道,這可能會奏效。 –

回答

1

當API調用缺少授權http頭時,我通常會得到403。跟蹤http並查看標題。 「配額」消息的基本原理是沒有Auth標頭,您是匿名的,匿名使用的配額爲零。

您可能還會檢查您的應用是否已註冊了兩個雲端硬盤API,因爲我聽說可能會導致同樣的問題。

在內部方法問題上,這聽起來像你使用不兼容的庫版本。最適合我的是刪除我用示例代碼下載的所有庫,然後使用Google Eclipse插件「Google/Add Google API ...」下載所有最新版本。

+0

我刪除了所有其他庫,並通過eclipse插件添加它。我最初有同樣的想法:必須是舊的庫。但不幸的是沒有。我查看了標題位,但因爲要將標題設置爲包含持票人而陷入困境,所以我需要標記,但自從使用服務帳戶後,我沒有可用標記(或者是我錯誤的部分?) 。 –

+0

好的...我今天一直在瘋狂調試,發現沒有令牌集。所以這些請求沒有一個可信的標記。現在我需要弄清楚的是如何從我的服務帳戶獲取令牌。 –

+0

好吧...所以我解決了它! –

2

所以pinoyyid的答案確實有幫助,雖然這不是確定的答案。

我最終解決這樣的:

我把我的AppID(xxxxx.apps.googleusercontent.com),並將其添加到我的cPanel https://www.google.com/a/cpanel/ [ [YOURDOMAIN]]/ManageOauthClients 與這些範圍:

之後,我可以對Drive環境進行身份驗證請求。現在遇到了一堆不同的問題,但403解決了。

+0

我有同樣的問題,但我沒有谷歌應用程序。我只有一個foo.appspot.com域名。任何幫助? –

+0

你正在開發這個GMail嗎?因爲我不認爲GMail的服務帳戶有這樣的事情。如果您可以提供更多信息,我可能會提供幫助。 –

+0

不是Gmail。我只需要使用Drive API。我使用的是https:// www.googleapis.com/drive/v2/files' API。我在這裏發佈了一個問題,如果您願意幫助我,我將不勝感激:http://stackoverflow.com/questions/12691677/google-drive-api-through-google-app-engine –

相關問題