我真的住在这里。我想从谷歌应用引擎访问谷歌电子表格(使用java,使用servlet因为想法是从电子表格中读取信息,保存在我的谷歌驱动器帐户中,并通过“jsp”显示给有限的用户号码,这里在我的公司里。)
当然,我已经在“谷歌云开发者控制台”中创建了我的项目,我得到了“项目ID”第四案例-XXXX等。直到这一步,我理解了一切并顺利进行。
我一直在这里寻找成千上万的例子,谷歌等等。对于我阅读的一切,我理解:我必须创建一个“OAuth2凭证”(我之所以在“Api和身份验证”中创建OAuth2凭证的原因)我的开发者控制台当然(我有一个带有auth_uri的json,client_secret,client_id等等)。
从我读过的内容只需要client_secret和client_id。但是按照本教程(link)我得到了这个错误“oauth_token不存在。”在其他教程中,我不会在app引擎中使用“OAuth2”。我很头晕。
我唯一需要的是一个简单的java servlet(没有任何复杂的,遵循良好的做法,我不在乎)从谷歌电子表格中读取数据(保存到我的谷歌驱动器帐户)并通过“jsp”显示,至少我满足于接受在我的servlet上接收电子表格数据,稍后我会想象如何显示
我正在使用eclipse luna,我安装了“gdata java api”,“谷歌应用引擎作为localhost”等(所有正确安装,运行没有错误)。创建环境我遵循this教程
一些问题: 1 - 电子表格需要发布吗? (菜单:file->发布到网络上)。从应用引擎获取访问权限? 2 - 在强制上传到Google App Engine(http://.appspot.com/guestbook)中测试我的代码(并查看我是否可以访问spreadhsheet),或者我可以尝试使用“localhost”?
我将上传我的代码,附加图片等。我为我讨厌的代码道歉但现在我需要解决这个问题
全部谢谢
public void callingSpreadsheetTest2() throws IOException {
System.out.println("callingSpreadsheetTest2");
HttpTransport transport = new NetHttpTransport();
JacksonFactory jsonFactory = new JacksonFactory();
GoogleOAuthParameters oAuthParameters = new GoogleOAuthParameters();
oAuthParameters.setOAuthConsumerKey(CLIENT_ID);
oAuthParameters.setOAuthConsumerSecret(CLIENT_SECRET);
OAuthHmacSha1Signer signer = new OAuthHmacSha1Signer();
GoogleOAuthHelper oAuthHelper = new GoogleOAuthHelper(signer);
oAuthParameters.setScope(SCOPES);
try{
oAuthHelper.getUnauthorizedRequestToken(oAuthParameters);
}catch (OAuthException e){
e.printStackTrace();
}
String requestUrl = oAuthHelper.createUserAuthorizationUrl(oAuthParameters);
System.out.println(requestUrl);
System.out.println("Please visit the URL above to authorize your OAuth "
+ "request token. Once that is complete, press any key to "
+ "continue...");
try{
System.in.read();
}catch(IOException e){
e.printStackTrace();
}
oAuthParameters.setOAuthType(OAuthType.TWO_LEGGED_OAUTH);
String token = null;
try{
token = oAuthHelper.getAccessToken(oAuthParameters);
}catch(OAuthException e){
e.printStackTrace(); //---->Attention: HERE I GOT toke=null (oauth_token does not exist.)
}
System.out.println("OAuth Access Token: " + token);
System.out.println();
URL feedUrl = null;
try{
feedUrl = new URL(SPREADSHEET_URL);
}catch(MalformedURLException e){
e.printStackTrace();
}
SpreadsheetService spreadsheetService = new SpreadsheetService("GAppEngineProj");
try{
spreadsheetService.setOAuthCredentials(oAuthParameters, signer);
}catch(OAuthException e){
e.printStackTrace();
}
try {
SpreadsheetFeed feed = spreadsheetService.getFeed(feedUrl, SpreadsheetFeed.class);
List<SpreadsheetEntry> spreadsheets = feed.getEntries();
if(spreadsheets != null) {
for (SpreadsheetEntry spreadsheet : spreadsheets) {
System.out.println(spreadsheet.getTitle().getPlainText());
}
}
} catch (ServiceException e) {
e.printStackTrace();
}
我的班级“com.google.gdata.client.spreadsheet.SpreadsheetService”也没有方法setOAuth2Credentials [service.setOAuthCredentials(parameters,signer);]
再次感谢!!
答案 0 :(得分:0)
您正在使用OAuth1协议的代码,该协议已弃用。您应该使用OAuth2。
App Engine应用程序带有非常方便的AppIdentityService
(documentation),允许您的应用程序生成OAuth2令牌,就好像应用程序有your-project-id@appspot.gserviceaccount.com
格式的电子邮件一样。
您所要做的就是使用Google云端硬盘/ Google电子表格用户界面与此电子邮件分享您的电子表格。在您的情况下,电子邮件将是fourth-case-XXXX@appspot.gserviceaccount.com
然后,在代码中,执行以下操作:
AppIdentityService appIdentity = AppIdentityServiceFactory.getAppIdentityService();
String accessToken = appIdentityService.getAccessToken(Collections.singleton(SPREADSHEET_SCOPE)).getAccessToken();
GoogleCredential googleCredential = new GoogleCredential();
googleCredential.setAccessToken(accessToken);
spreadsheetService = new SpreadsheetService("MyApp");
spreadsheetService.setOAuth2Credentials(buildCredential());
然后您就可以使用spreadsheetService
来读取数据。
注意:此代码是使用GData库版本1.47.1编写的。