在Java的Google drive中使用Google电子表格API创建电子表格

在Java的Google drive中使用Google电子表格API创建电子表格,java,google-api,google-sheets,gmail-api,Java,Google Api,Google Sheets,Gmail Api,我已经创建了一些工具来填充谷歌电子表格。 从今天起,我就开始犯错误了,一年来它一直运转良好 Exception in thread "main" com.google.gdata.util.AuthenticationException: Error authenticating (check service name) at com.google.gdata.client.GoogleAuthTokenFactory.getAuthException(GoogleAuthTokenFactor

我已经创建了一些工具来填充谷歌电子表格。 从今天起,我就开始犯错误了,一年来它一直运转良好

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实现这一点,但我不知道如何实现。在上的示例中,只有.net的代码。

谷歌刚刚停止支持OAuth1.0。需要使用OAuth2。要切换,首先转到Google开发者控制台,创建一个项目并设置一个凭证。然后更新代码,类似于以下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);
}

您需要两个库:GoogleAPI客户端和GoogleHTTP客户端。如果使用Maven,请在pom.xml中包含以下依赖项

 <dependency>
  <groupId>com.google.api-client</groupId>
  <artifactId>google-api-client</artifactId>
  <version>1.19.0</version>
  <type>jar</type>
 </dependency>
 <dependency>
  <groupId>com.google.http-client</groupId>
  <artifactId>google-http-client-jackson</artifactId>
  <version>1.19.0</version>
  <type>jar</type>
 </dependency>

com.google.api-client
谷歌api客户端
1.19.0
罐子
com.google.http-client
谷歌http客户端jackson
1.19.0
罐子

我尝试过Gao的解决方案,但我有一个关于库的问题。我正在使用netbeans,项目正在构建中,没有错误,但当我尝试执行它时,我遇到了以下错误:

 Exception in thread "main" java.lang.NoClassDefFoundError: org/codehaus/jackson/JsonFactory
at com.google.api.client.json.jackson.JacksonFactory.<init>(JacksonFactory.java:38)
at SandboxCheck.main(SandboxCheck.java:48) 
线程“main”java.lang.NoClassDefFoundError中的异常:org/codehaus/jackson/JsonFactory 位于com.google.api.client.json.jackson.JacksonFactory.(JacksonFactory.java:38) 位于SandboxCheck.main(SandboxCheck.java:48) 我发现类路径有问题,但我不知道如何在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类。

我终于在帮助下创建了这样的连接。 一切都像以前一样正常。 您必须执行的步骤是:

  • 登记在
  • 创建新项目
  • 在API&Auth->Credential->为服务帐户创建新的客户端ID下
  • 生成客户端ID时,必须生成P12密钥
  • 下面的代码中需要客户端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<SpreadsheetEntry> 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);
                }
            }
    
        }
    
    }
    

    我怀疑你碰到了两个问题。1) OpenAuth 1/客户端登录不再受支持,2)文档列表API已被降级,因此您需要迁移到驱动器API以创建电子表格。不幸的是,我没有关于如何在Java中实现这一点的示例,看起来客户端登录不再受支持。我希望他们会更新SpreedAPI页面,并给出如何在Java中使用它的示例。从昨天开始,这里也有同样的问题!他们是否已放弃对应用程序密码身份验证的支持?原因是:不再支持OpenAuth 1/客户端登录。正如本文所述,您从何处导入
    JacksonFactory
    ?运行此
    CreateSpeedsheetService
    需要哪些库?Gao您能告诉我您使用了哪些库来实现此代码吗?我一直面临异常和其他错误。这里也有完全相同的问题。更新:通过
    import com.fasterxml.jackson.core.*设法解决它。我不知道我到底在做什么,也不知道发生了什么。Dimitris是如何通过此导入使其工作的,因为它使用的是JsonFactory而不是JacksonFactory,我仍然存在此问题。
    JsonFactory
    是一个抽象超类,您的问题在于
    JacksonFactory
    无法找到定义。将
    jackson-core-2.1.3.jar
    包含到项目的库中,并导入我编写的内容。我在线程“main”java.lang.AbstractMethodError中遇到了
    异常:com.google.api.client.json.JsonFactory.createJsonGenerator(Ljava/io/OutputStream;Ljava/nio/charset/charset;)Lcom/google/api/client/json/JsonGenerator
    on
    SpreadsheetFeed=service.getFeed(电子表格\u feed\u URL,SpreadsheetFeed.class)谢谢Skwarsz。给其他人一个小小的澄清。在步骤4中,控制台将为您提供“客户ID”和“电子邮件地址”。(a) 您需要在setServiceAccountId()方法调用中使用“电子邮件地址”(而不是ID,不管方法名称如何)。(b) 您需要使用相同的电子邮件地址共享电子表格。电子表格文档代码中定义的
    范围
    变量应为:
    静态最终列表范围\u数组=数组。asList(“https://spreadsheets.google.com/feeds", "https://spreadsheets.google.com/feeds/spreadsheets/private/full", "https://docs.google.com/feeds")
    谢谢Skwarsz。不过有一个小问题:我认为您需要gdata-core-1.47.1.jar,而不是您正在使用的gdata-core-1.0.jar。版本1.0不识别SpreadsheetService类的setOAuth2Credentials()方法。@Skvarosz:我实际上发现gdata-spreadsheet.jar和gdata-core.jara重叠。对我来说,删除gdata-spreadsheet.jar是有效的。考虑检查项目中是否存在冗余,在哪里保存P12密钥文件?
    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