Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 来自appengine问题的Google电子表格_Java_Google App Engine_Gdata_Gdata Api_Google Spreadsheet Api - Fatal编程技术网

Java 来自appengine问题的Google电子表格

Java 来自appengine问题的Google电子表格,java,google-app-engine,gdata,gdata-api,google-spreadsheet-api,Java,Google App Engine,Gdata,Gdata Api,Google Spreadsheet Api,我想从appengine中阅读一个特定的Google Drive电子表格。电子表格是使用Google picker从一个web客户端中选取的。我正在尝试使用“按标题查询”访问电子表格。标题被传递到我的appengine servlet,然后我使用GDataJava客户端库进行查询 在appengine上,我有以下代码: public static FeedURLFactory factory = FeedURLFactory.getDefault(); public static Spreads

我想从appengine中阅读一个特定的Google Drive电子表格。电子表格是使用Google picker从一个web客户端中选取的。我正在尝试使用“按标题查询”访问电子表格。标题被传递到我的appengine servlet,然后我使用GDataJava客户端库进行查询

在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);
  }
公共静态FeedURLFactory=FeedURLFactory.getDefault();
公共静态电子表格服务电子表格服务=新电子表格服务(“evermedcpr”);
列表范围=数组。asList(“https://spreadsheets.google.com/feeds"); 
appIdentity服务appIdentity=appIdentity服务工厂。GetAppIdentity服务();
AppIdentityService.GetAccessTokenResult accessToken=appIdentity.getAccessToken(作用域);
凭证凭证=新凭证(BearToken.AuthorizationHeaderAccess方法());
creds.setAccessToken(accessToken.getAccessToken());
电子表格服务ss=新的电子表格服务(“DBM4G演示”);
ss.setOAuth2Credentials(creds);
getSpreadsheet(电子表格名称);
公共电子表格条目getSpreadsheet(字符串电子表格)
抛出异常{
电子表格查询电子表格查询
=新电子表格查询(新URL(“https://spreadsheets.google.com/feeds/"));
电子表格查询.setTitleQuery(电子表格);
SpreadsheetFeed SpreadsheetFeed=spreadsheetService.query(spreadsheetQuery,
电子表格feed.class);
列表电子表格=spreadsheetFeed.getEntries();
if(spreadsheets.isEmpty()){
抛出新异常(“没有该名称的电子表格”);
}
返回电子表格。获取(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"
}
com.google.api.client.googleapis.services.AbstractGoogleClient:未设置应用程序名称。调用Builder#setApplicationName。
W 2013-07-15 14:50:31.665
[s~evermedcpr/1.368807282351251748]:发生错误:com.google.api.client.googleapis.json.GoogleJsonResponseException:404 OK
{
“代码”:404,
“错误”:[{
“域”:“全局”,
“消息”:“未找到”,
“原因”:“未找到”
} ],
“消息”:“未找到”
}

如何访问选定的电子表格???

您可以定义两次
电子表格服务。一次作为
电子表格服务
,一次作为
ss
。您仅将OAuth2凭据设置为
ss
,但在
getSpreadsheet
方法中使用
spreadsheetService

您应该替换此:

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

spreadsheetService.setOAuth2Credentials(creds);
您还可以使用两个不同的应用程序名称—
BM4G demo
evermedcpr
。我不确定哪一个是正确的,但根据服务器日志,它可能是
evermedcpr


另一个问题是
电子表格查询
构造函数中的提要URL。它应该是
https://spreadsheets.google.com/feeds/spreadsheets
(如果需要所有电子表格)或
https://spreadsheets.google.com/feeds/spreadsheets/private/full
(如果您只需要私人电子表格)。有关提要URL的更多详细信息,请参阅。

您可以定义两次
电子表格服务。一次作为
电子表格服务
,一次作为
ss
。您仅将OAuth2凭据设置为
ss
,但在
getSpreadsheet
方法中使用
spreadsheetService

您应该替换此:

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

spreadsheetService.setOAuth2Credentials(creds);
您还可以使用两个不同的应用程序名称—
BM4G demo
evermedcpr
。我不确定哪一个是正确的,但根据服务器日志,它可能是
evermedcpr


另一个问题是
电子表格查询
构造函数中的提要URL。它应该是
https://spreadsheets.google.com/feeds/spreadsheets
(如果需要所有电子表格)或
https://spreadsheets.google.com/feeds/spreadsheets/private/full
(如果您只需要私人电子表格)。有关提要URL的更多详细信息,请参阅。

应用程序引擎+谷歌电子表格API-基本设置

1) 谷歌硬盘OAuth

使用DrEdit教程启动并运行OAuth。使用电子表格API需要OAuth

注意,您需要向其添加刷新令牌。但这正是你所期望的

2) 电子表格API

了解如何使用谷歌电子表格API。 查看CellDemo.java(电子表格式访问) 和ListDemo.java(SQL数据库样式访问)

代码可以正常工作,并且不需要很长时间就可以启动并运行。 还显示如何按名称选择电子表格:

3) 电子表格服务oauth令牌

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

应用程序引擎+谷歌电子表格API-基本设置

1) 谷歌硬盘OAuth

使用DrEdit教程启动并运行OAuth。使用电子表格API需要OAuth

注意,您需要向其添加刷新令牌。但这正是你所期望的

2) 电子表格API

了解如何使用谷歌电子表格API。 查看CellDemo.java(电子表格式访问) 和ListDemo.java(SQL数据库样式访问)

代码可以正常工作,并且不需要很长时间就可以启动并运行。 还显示如何按名称选择电子表格:

3) 电子表格服务oauth令牌

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

眼力不错,但这不是问题所在。我已经在我的代码中修复了这个问题…我的问题是电子表格提要URL我错过了那个:-)我编辑了我的答案(对于其他人,因为你显然不再需要它)。眼光不错,但这不是问题所在。我已经在我的代码中修复了这个问题…我的问题是电子表格提要URL我错过了那个:-)我编辑了我的答案(对于其他人,因为你显然不再需要它了)。OAuth位工作正常吗?如果没有,请使用DrEdit教程让OAuth在App Engine上工作。之后,查看CellDemo.java以了解如何使用API。(注意谷歌应用程序脚本是si