在我的Java项目中,我使用Google Drive API从公共云端硬盘下载文件。
当我尝试根据某些条件列出某个文件夹的子项时,一切都按预期运行。然而,这个 modifiedDate 字段不会返回任何结果。没有错误,但列表是空的,尽管写了一个完全合理的搜索条款(应该有相当多的文件)。这是我的代码:
Drive.Children.List firstRequest = service.children().list(folderId)
.setQ("mimeType='application/pdf' and modifiedDate <= '2016-03-07T19:17:54.759Z'" );
do {
ChildList result = firstRequest.execute();
for(ChildReference child: result.getItems()) {
File file = service.files().get(child.getId()).execute();
System.out.printf("Found file: %s (%s): %s\n",
file.getTitle(), file.getId(), file.getCreatedDate());
}
firstRequest.setPageToken(result.getNextPageToken());
} while (firstRequest.getPageToken() != null &&
firstRequest.getPageToken().length() > 0);
使用Google Developers页面上的试用!功能,相同的查询会按预期返回结果。 HTTP请求有以下内容:
当我运行我的Java应用程序时,这是请求URL:
GET https://www.googleapis.com/drive/v2/files/0B3Y7hLeztp6SUVBCbnpRN0ZQVVU/children?q=mimeType%3D'application/pdf'%20and%20modifiedDate%20%3C%3D%20'2016-03-07T19:17:54.759Z'
HTTP响应如下:
kind: drive#childList
etag: "TEeH8_qJkyJwjzQ-F4FJRbfwWxI/vyGp6PvFo4RvsFtPoIWeCReyIC8"
selfLink: https://www.googleapis.com/drive/v2/files/0B3Y7hLeztp6SUVBCbnpRN0ZQVVU/children?q=mimeType%3D'application/pdf'+and+modifiedDate+%3C%3D+'2016-03-07T19:17:54.759Z'
items: [
]
请求完全相同。但回应不是...... 可能是什么原因?
修改
我必须提到我尝试使用服务帐户。这将是一个桌面应用程序,因此我不一定希望用户确认使用Google API并被迫创建Gmail地址,以防他们没有这个地址并授权请求。此外,应用程序仅访问公共共享驱动器上的资源,不需要有关客户端的信息。但是,服务帐户密钥导致了我当前的问题,而使用OAuth客户端ID密钥可以让我获得所需的结果。
处理这种情况的推荐方法是什么?或者我可能对OAuth2框架有所错误?