使用服务密钥进行电子表格服务身份验证,并在尝试获取源时出现内部服务器错误



我正在使用电子表格服务,我正在尝试从电子表格网址(https://spreadsheets.google.com/feeds/spreadsheets/private/full(获取提要。

我正在使用服务密钥进行身份验证。似乎身份验证正在工作,但是当我尝试获取提要时,我收到错误:

ServiceException (com.google.gdata.util.ServiceException: Internal Server Error(.

这是身份验证方法:

public static Credential authenticateWithServiceKey(GoogleApiProperties properties) throws IOException {
GoogleCredential credential = GoogleCredential.fromStream(new FileInputStream("src/main/resources/prime-moment-274810-940d01c0244d.json"))
.createScoped(Collections.singleton(properties.getScope()));
return credential;
}

这是我创建服务并使用上述方法中的凭据对象进行身份验证的方式:

public void init(GoogleApiProperties properties) throws IOException, GeneralSecurityException {
Credential credential = GoogleAuthentication.authenticateWithServiceKey(properties);
service = new SpreadsheetService(properties.getApplicationName());
service.setOAuth2Credentials(credential);
}

这就是我尝试获取电子表格列表的地方:

public List<String> getContentList() throws IOException, ServiceException {
// Define the URL to request.  This should never change.
URL SPREADSHEET_FEED_URL = new URL(SPREADSHEETS_URL);
// Make a request to the API and get all spreadsheets.
SpreadsheetFeed feed = service.getFeed(SPREADSHEET_FEED_URL, SpreadsheetFeed.class);
// Return a list of spreadsheet names
return feed.getEntries().stream()
.map(entry -> entry.getTitle().getPlainText())
.collect(Collectors.toList());
}

异常是在service.getFeed调用之后立即出现的。

当我使用常规方法获取OAuth2.0凭据时,它可以正常工作,但需要手动干预(通过Google页面接受连接(。

错误不在于凭据,而在于执行。似乎您一切正常,因为这是服务器错误。

尽管表格 API v3 已于 2020 年 9 月弃用,所以我建议使用 表格 API v4 方法:获取电子表格的提要。

如果转到表 API v4 从以前的 API 迁移 ->检索工作表元数据,您会发现:

如果只想读取工作表属性,请将includeGridData查询参数设置为 false 以防止包含电子表格单元格数据。

因此,遵循方法:电子表格.get示例可以解决您的问题。

这是我使用的方法的较短版本:

public static void main(String... args) throws IOException, GeneralSecurityException {
// Build a new authorized API client service.
final NetHttpTransport HTTP_TRANSPORT = GoogleNetHttpTransport.newTrustedTransport();
final String spreadsheetId = "YOUR SPREADSHEET ID";
final String range = "Class Data!A2:E";
Sheets service = new Sheets.Builder(HTTP_TRANSPORT, JSON_FACTORY, getCredentials(HTTP_TRANSPORT))
.setApplicationName(APPLICATION_NAME)
.build();
Sheets.Spreadsheets.Get request = service.spreadsheets().get(spreadsheetId);
request.setIncludeGridData(false);
//Sheets.Spreadsheets response = request.execute();
// TODO: Change code below to process the `response` object:
System.out.println(request.execute());
}
>编辑

要列出电子表格,您必须通过云端硬盘 API 执行此操作。

在这种情况下,通过方法Files: List并在查询或q参数上,输入电子表格MIME类型:mimeType = 'application/vnd.google-apps.spreadsheet'

可以查看如何使用"文件:快速入门"中的列表

相关内容

  • 没有找到相关文章

最新更新