当前位置: 首页 > 面试题库 >

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

岑熙云
2023-03-14
问题内容

我创建了一些工具来填充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和身份验证”下->“凭据”->“为服务帐户创建新的客户端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);
            }
        }

    }

}

我希望这将有助于解决我遇到的问题。这是我使用过的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


 类似资料:
  • 我已经通过谷歌官方文档《开发者指南》API中提到的一个简单Java代码成功地在我的Google Drive帐户的现有电子表格中创建了一个新的工作表,但我想通过Java代码在我的Google Drive帐户中创建一个新的电子表格。在链接中,他们没有提到这方面的任何示例代码。我已经在Spreadservice类中看到了不同的可用方法。 如何使用Google电子表格API实现这一点?

  • 谷歌SpreadsheetService似乎是一个“正在进行的工作”,有时/突然回答缓慢,随机错误消息等。有些人已经建议我在使用电子表格API时尽可能使用谷歌Drive API。但是我找不到关于Google Drive/Spreadsheet API组合的合适文档。 通过一些调试和试错,我在级别创建了一个“entrypoint”: 我能得到一些真实的代码示例吗(超过;“只是使用提要”等)?

  • 我正试图创建一个共享驱动器使用下面的谷歌api和驱动器。创建方法。 但它给了我错误 “消息”:“用户对此文件没有足够的权限。” 我怎样才能做到这一点?

  • 问题内容: 我已经通过Google在开发者指南表格API的官方文档中提到的简单Java代码在My Google Drive帐户的现有电子表格中成功创建了一个新的工作表,但是我想通过Java代码在Google Drive帐户中创建一个新的电子表格。在链接中,他们没有提及任何示例代码。我已经看到Spreadservice类中可用的不同方法。 如何使用Google Spreadsheets API做到这

  • 我正在尝试使用GoogleDrive API将Google工作表设置为“发布到Web”模式,以便将其嵌入到我的网站中。 在我的PHP中使用驱动API:- 据我所知,这符合驱动器API规范(我真希望他们没有删除PHP的代码示例!)。但是,我在响应正文中返回了以下错误:- 任何帮助都将不胜感激!

  • 我试图模拟单击“发布到web”- 然而,这似乎对我的文档没有影响。 我希望能够以编程方式创建一个谷歌电子表格,可以立即在世界范围内访问。