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

Skw*_*osz 17 java google-api google-sheets gmail-api

我创建了一些填充谷歌电子表格的工具.它工作正常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)
Run Code Online (Sandbox Code Playgroud)

这是与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);
Run Code Online (Sandbox Code Playgroud)

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

Skw*_*osz 18

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

  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<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);
            }
        }

    }

}
Run Code Online (Sandbox Code Playgroud)

我希望这对我遇到的问题有所帮助.这是我用过的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
Run Code Online (Sandbox Code Playgroud)

  • 谢谢Skwarsz.其他人的一个小的澄清.在第4步中,控制台将为您提供"客户端ID"和"电子邮件地址".(a)您需要在setServiceAccountId()方法调用中使用"电子邮件地址"(尽管方法名称不是ID).(b)您需要使用相同的电子邮件地址共享您的电子表格 (2认同)
  • 谢谢Skwarsz.但有一个小问题:我认为你需要***gdata-core-1.47.1.jar***而不是你正在使用的gdata-core-1.0.jar.版本1.0无法识别SpreadsheetService类的setOAuth2Credentials()方法. (2认同)