从Java谷歌应用引擎(servlet)获取访问谷歌电子表格(保存到谷歌驱动器帐户)

时间:2015-06-04 16:45:12

标签: java google-app-engine servlets

我真的住在这里。我想从谷歌应用引擎访问谷歌电子表格(使用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);]

再次感谢!!

1 个答案:

答案 0 :(得分:0)

您正在使用OAuth1协议的代码,该协议已弃用。您应该使用OAuth2。

App Engine应用程序带有非常方便的AppIdentityServicedocumentation),允许您的应用程序生成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编写的。