我正在使用电子表格服务,我正在尝试从电子表格网址(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'
可以查看如何使用"文件:快速入门"中的列表