使用Google Spreadsheet API在Google中的Google驱动器中创建电子表格

我创建了一些填充谷歌电子表格的工具。 它工作正常1年,因为今天我错了

Exception in thread "main" com.google.gdata.util.AuthenticationException: Error authenticating (check service name) at com.google.gdata.client.GoogleAuthTokenFactory.getAuthException(GoogleAuthTokenFactory.java:688) at com.google.gdata.client.GoogleAuthTokenFactory.getAuthToken(GoogleAuthTokenFactory.java:560) at com.google.gdata.client.GoogleAuthTokenFactory.setUserCredentials(GoogleAuthTokenFactory.java:397) at com.google.gdata.client.GoogleService.setUserCredentials(GoogleService.java:364) at com.google.gdata.client.GoogleService.setUserCredentials(GoogleService.java:319) at com.google.gdata.client.GoogleService.setUserCredentials(GoogleService.java:303) 

这是与gmail连接的代码部分:

 String USERNAME = "usename@........com"; ->of course I'm using proper username and password String PASSWORD = "*******"; SpreadsheetService service = new SpreadsheetService("SandboxCheck"); service.setUserCredentials(USERNAME, PASSWORD); 

我不知道如何连接gmail,我试图通过oAuth这样做,但我不知道如何做到这一点。 在https://developers.google.com/google-apps/spreadsheets/authorize上的示例中,只有.net的代码。

我终于在这里得到了帮助,设法创建了这样的连接。 一切都和以前一样。 您需要做的步骤是:

  1. 在https://console.developers.google.com上注册
  2. 创建新项目
  3. 在API&Auth – > Credential – >为服务帐户创建新的客户端ID
  4. 生成客户端ID时您必须生成P12密钥。
  5. 下面的代码中将需要客户端ID,电子邮件地址是您必须共享电子表格的地址

以下是工作代码

 import com.google.api.client.googleapis.auth.oauth2.GoogleCredential; import com.google.api.client.http.HttpTransport; import com.google.api.client.http.javanet.NetHttpTransport; import com.google.api.client.json.jackson.JacksonFactory; import com.google.gdata.client.spreadsheet.SpreadsheetService; import com.google.gdata.data.spreadsheet.SpreadsheetEntry; import com.google.gdata.data.spreadsheet.SpreadsheetFeed; import com.google.gdata.util.ServiceException; import java.io.File; import java.io.IOException; import java.net.MalformedURLException; import java.net.URL; import java.security.GeneralSecurityException; import java.util.Arrays; import java.util.List; public class OAuthIntegration{ public static void main(String[] args) throws MalformedURLException, GeneralSecurityException, IOException, ServiceException { URL SPREADSHEET_FEED_URL; SPREADSHEET_FEED_URL = new URL("https://spreadsheets.google.com/feeds/spreadsheets/private/full"); File p12 = new File("./key.p12"); HttpTransport httpTransport = new NetHttpTransport(); JacksonFactory jsonFactory = new JacksonFactory(); String[] SCOPESArray = {"https://spreadsheets.google.com/feeds", "https://spreadsheets.google.com/feeds/spreadsheets/private/full", "https://docs.google.com/feeds"}; final List SCOPES = Arrays.asList(SCOPESArray); GoogleCredential credential = new GoogleCredential.Builder() .setTransport(httpTransport) .setJsonFactory(jsonFactory) .setServiceAccountId("cliend_ID") .setServiceAccountScopes(SCOPES) .setServiceAccountPrivateKeyFromP12File(p12) .build(); SpreadsheetService service = new SpreadsheetService("Test"); service.setOAuth2Credentials(credential); SpreadsheetFeed feed = service.getFeed(SPREADSHEET_FEED_URL, SpreadsheetFeed.class); List spreadsheets = feed.getEntries(); if (spreadsheets.size() == 0) { System.out.println("No spreadsheets found."); } SpreadsheetEntry spreadsheet = null; for (int i = 0; i < spreadsheets.size(); i++) { if (spreadsheets.get(i).getTitle().getPlainText().startsWith("ListOfSandboxes")) { spreadsheet = spreadsheets.get(i); System.out.println("Name of editing spreadsheet: " + spreadsheets.get(i).getTitle().getPlainText()); System.out.println("ID of SpreadSheet: " + i); } } } } 

我希望这对我面临的问题有所帮助。 这是我用过的jar列表:

 guava-11.0.2.jar gdata-spreadsheet-3.0.jar gdata-maps-2.0.jar gdata-core-1.0.jar jackson-core-asl-1.9.11.jar jackson-core-2.1.3.jar google-oauth-client-1.20.0.jar google-http-client-jackson2-1.20.0.jar google-http-client-jackson-1.20.0.jar google-http-client-1.20.0.jar google-api-client-1.20.0.jar 

谷歌刚刚停止支持OAuth1.0。 需要使用OAuth2。 要进行切换,请先转到Google Developer Console,创建项目并设置凭据。 然后更新代码,类似于以下Java代码:

 private void createSpreadSheetService() throws GeneralSecurityException, IOException, ServiceException { HttpTransport httpTransport = new NetHttpTransport(); JacksonFactory jsonFactory = new JacksonFactory(); String [] SCOPESArray= {"https://spreadsheets.google.com/feeds", "https://docs.google.com/feeds"}; final List SCOPES = Arrays.asList(SCOPESArray); GoogleCredential credential = new GoogleCredential.Builder() .setTransport(httpTransport) .setJsonFactory(jsonFactory) .setServiceAccountId(SERVICE_ACCOUNT_EMAIL) .setServiceAccountScopes(SCOPES) .setServiceAccountPrivateKeyFromP12File(SERVICE_ACCOUNT_PKCS12_FILE) .build(); SPREADSHEETSERVICE = new SpreadsheetService("data"); SPREADSHEETSERVICE.setOAuth2Credentials(credential); 

}

您需要两个库:google-api-client和google-http-client-jackson。 如果您使用Maven,请在pom.xml中包含以下依赖项。

   com.google.api-client google-api-client 1.19.0 jar   com.google.http-client google-http-client-jackson 1.19.0 jar  

我尝试过来自高智晟的解决方案,但我对库有一个问题。 我正在使用netbeans,项目正在构建而没有错误但是当我尝试执行它时我发生了这个错误:

  Exception in thread "main" java.lang.NoClassDefFoundError: org/codehaus/jackson/JsonFactory at com.google.api.client.json.jackson.JacksonFactory.(JacksonFactory.java:38) at SandboxCheck.main(SandboxCheck.java:48) 

我发现classpath存在问题,但我不知道如何在netbeans上修复它,我认为它会在添加库时自动执行。 我已经添加

google-oauth-client-1.16.0-rc.jar google-oauth-client-1.16.0-rc-sources.jar google-api-client-1.8.0-beta-sources.jar google-api-client-1.4.1-beta.jar google-api-client-1.19.1.jar

我不确定如果我添加太多这个库但是如果我删除例如。 google-api-client-1.4.1-beta.jar它不会看到JacksonFactory类。