0

appengine의 특정 Google 드라이브 스프레드 시트를 읽으 려합니다. 스프레드 시트는 웹 클라이언트의 Google 피커를 사용하여 선택됩니다. 제목으로 쿼리를 사용하여 스프레드 시트에 액세스하려고합니다. 제목은 내 appengine 서블릿으로 전달 된 다음 Gdata Java Client Lib을 사용하여 쿼리합니다.앱 엔진 문제의 Google 스프레드 시트

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" 
} 

내가 선택한 스프레드 시트를 액세스 가야합니까 어떻게

에서 appengine에

이 코드를 ??

+0

토큰

3) SpreadsheetService의 OAuth를을? 그렇지 않다면 DrEdit 튜토리얼을 사용하여 App Engine에서 OAuth가 작동하도록하십시오. 그 후에 CellDemo.java를보고 API 사용법을 배우십시오. 스프레드 시트 API보다는 구글 앱 스크립트가 더 간단한 옵션이다. – eddyparkinson

+0

나는 누군가가 완전한 해결책을 게시하기를 원한다고 생각한다. 이 작업을 수행하는 코드가 있지만 필요한 비트를 추출하는 데 너무 많은 시간이 걸리고 디버그 등이 필요합니다. DrEdit 비트가 상당히 크고 약간의 변경이 필요합니다. – eddyparkinson

+0

@eddyparkinson 예 oauth가 작동 중입니다. 문제를 발견했습니다. 잘못된 피드를 사용했습니다. 곧 업데이트 될 것입니다. – 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 (개인 스프레드 시트 만 사용하려는 경우)이어야합니다. 피드 URL에 대한 자세한 내용은 Google Spreadsheets documentation을 참조하십시오.

+0

좋은 눈 이었지만 문제는 아니 었습니다. 나는 내 코드에서 이것을 이미 고쳤다. 내 문제는 스프레드 쉬트 피드 URL이다. – Patrick

+0

나는 그 대답을 놓쳤다 :-) 나는 내 대답을 편집했다. (다른 것들은 분명히 더 이상 필요하지 않다.) –

1

App Engine + Google 스프레드 시트 API - 기본 설정.

1) Google 드라이브의 OAuth

사용 DrEdit 튜토리얼의 OAuth를 설치하고 실행합니다. OAuth는 스프레드 시트 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

코드가 작동하고 실행하는 데 오랜 시간이 걸리지 않았다에서 봐. 또한 이름으로 스프레드 시트를 선택하는 방법을 보여 다음 OAuth를 작동 비트되어

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