0

我想從appengine中讀取特定的Google Drive電子表格。電子表格正在使用來自Web客戶端的Google picker進行挑選。我試圖通過標題查詢來訪問電子表格。標題傳遞給我的appengine servlet,然後使用Gdata Java Client Lib進行查詢。來自appengine問題的Google電子表格

AppEngine上我有這樣的代碼:

public static FeedURLFactory factory = FeedURLFactory.getDefault(); 
public static SpreadsheetService spreadsheetService= new SpreadsheetService("evermedcpr"); 

List scopes = Arrays.asList("https://spreadsheets.google.com/feeds"); 
AppIdentityService appIdentity = AppIdentityServiceFactory.getAppIdentityService(); 
AppIdentityService.GetAccessTokenResult accessToken = appIdentity.getAccessToken(scopes); 

Credential creds = new Credential(BearerToken.authorizationHeaderAccessMethod());   
creds.setAccessToken(accessToken.getAccessToken()); 

SpreadsheetService ss = new SpreadsheetService("DBM4G-demo"); 
ss.setOAuth2Credentials(creds); 

getSpreadsheet(spreadsheetName); 


public SpreadsheetEntry getSpreadsheet(String spreadsheet) 
     throws Exception { 

     SpreadsheetQuery spreadsheetQuery 
     = new SpreadsheetQuery(new URL("https://spreadsheets.google.com/feeds/")); 
     spreadsheetQuery.setTitleQuery(spreadsheet); 

     SpreadsheetFeed spreadsheetFeed = spreadsheetService.query(spreadsheetQuery, 
      SpreadsheetFeed.class); 
     List<SpreadsheetEntry> spreadsheets = spreadsheetFeed.getEntries(); 
     if (spreadsheets.isEmpty()) { 
     throw new Exception("No spreadsheets with that name"); 
     } 

     return spreadsheets.get(0); 
    } 

}

我總是在我的日誌404響應:

com.google.api.client.googleapis.services.AbstractGoogleClient <init>: Application name is not set. Call Builder#setApplicationName. 
W 2013-07-15 14:50:31.665 
[s~evermedcpr/1.368807282351251748].<stderr>: An error occurred: com.google.api.client.googleapis.json.GoogleJsonResponseException: 404 OK 
{ 
    "code" : 404, 
    "errors" : [ { 
    "domain" : "global", 
    "message" : "Not Found", 
    "reason" : "notFound" 
    } ], 
    "message" : "Not Found" 
} 

如何去訪問選定的試算表??

+0

是對的OAuth位工作?如果沒有,請使用DrEdit教程讓OAuth在App Engine上工作。之後,看看CellDemo.java以瞭解如何使用API​​。 (注意谷歌應用程序腳本更簡單的選項,而不是電子表格API) – eddyparkinson

+0

我想這需要有人發佈完整的解決方案。我有代碼來做到這一點,但需要花費我太多時間來提取所需的位,並進行調試等。DrEdit位非常大,需要進行一些更改。 – eddyparkinson

+0

@eddyparkinson是oauth正在工作。我發現了這個問題。我正在使用錯誤的feedurl。將盡快更新。 – Patrick

回答

2

您定義了兩次SpreadsheetService。一次爲spreadsheetService,一次爲ss。您只能將OAuth2憑據設置爲ss,但在getSpreadsheet方法中使用spreadsheetService

此時應更換此:

SpreadsheetService ss = new SpreadsheetService("DBM4G-demo"); 
ss.setOAuth2Credentials(creds); 

與此:

spreadsheetService.setOAuth2Credentials(creds); 

您還可以使用兩種不同的應用程序名稱 - BM4G-demoevermedcpr。我不確定哪一個是正確的,但根據服務器日誌可能是evermedcpr

另一個問題是構造函數SpreadsheetQuery中的源URL。它應該是https://spreadsheets.google.com/feeds/spreadsheets(如果您需要所有電子表格)或https://spreadsheets.google.com/feeds/spreadsheets/private/full(如果您只需要私人電子表格)。有關Feed URL的更多詳細信息,請參閱Google Spreadsheets documentation

+0

好眼睛,但那不是問題。我已經在我的代碼中解決了這個問題......我的問題是電子表格供稿網址 – Patrick

+0

我錯過了那個:-)我編輯了我的答案(對於其他人,因爲你顯然不再需要它)。 –

1

App Engine + Google Spreadsheet API - 基本設置。

1)谷歌驅動的OAuth

使用DrEdit教程讓OAuth的啓動和運行。需要OAuth才能使用Spreadsheet API。

請注意,您需要向其添加刷新標記。但是,正如你所期望的那樣。

2)電子表格API

要了解如何使用谷歌電子表格的API。 看CellDemo.java(電子表格的方式來訪問) 和ListDemo.java(SQL數據庫的方式來訪問)

https://gdata-java-client.googlecode.com/svn-history/r51/trunk/java/sample/spreadsheet/cell/CellDemo.java

代碼工作,沒有多久就啓動和運行。 還展示瞭如何通過名稱來選擇電子表格:

3)SpreadsheetService OAuth令牌

SpreadsheetService spreadsheetService = null; 
spreadsheetService = new SpreadsheetService("mydomain.com.au-v0.2"); 
spreadsheetService.setHeader("Authorization", "Bearer " + accessToken); 
spreadsheetService.setConnectTimeout(0); // optional