我想从appengine中读取特定的Google云端硬盘电子表格。正在使用来自网络客户端的Google选择器挑选电子表格。我试图通过标题使用查询来访问电子表格。标题将传递给我的appengine servlet,然后使用Gdata Java Client Lib进行查询。
关于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 :(得分:2)
您定义SpreadsheetService
两次。一次为spreadsheetService
,一次为ss
。您只需将OAuth2凭据设置为ss
,但在spreadsheetService
方法中使用getSpreadsheet
。
你应该替换它:
SpreadsheetService ss = new SpreadsheetService("DBM4G-demo");
ss.setOAuth2Credentials(creds);
用这个:
spreadsheetService.setOAuth2Credentials(creds);
您还使用两个不同的应用程序名称 - BM4G-demo
和evermedcpr
。我不确定哪一个是正确的,但根据服务器日志,它可能是evermedcpr
。
另一个问题是SpreadsheetQuery
构造函数中的供稿网址。它应该是https://spreadsheets.google.com/feeds/spreadsheets
(如果您需要所有电子表格)或https://spreadsheets.google.com/feeds/spreadsheets/private/full
(如果您只想要私人电子表格)。有关Feed网址的详细信息,请参阅Google Spreadsheets documentation。
答案 1 :(得分:1)
App Engine + Google Spreadsheet API - 基本设置。
1) Google云端硬盘OAuth
使用DrEdit教程启动并运行OAuth。使用电子表格API需要OAuth。
注意您需要为其添加刷新令牌。但这可以像你期望的那样工作。
2)电子表格API
了解如何使用Google电子表格API。 看看CellDemo.java(电子表格样式访问) 和ListDemo.java(SQL数据库样式访问)
代码可以正常工作,并且不需要很长时间才能启动并运行。 还显示如何按名称选择电子表格:
3) SpreadsheetService oauth令牌
SpreadsheetService spreadsheetService = null;
spreadsheetService = new SpreadsheetService("mydomain.com.au-v0.2");
spreadsheetService.setHeader("Authorization", "Bearer " + accessToken);
spreadsheetService.setConnectTimeout(0); // optional