corpora
有哪些可能的选择以及它们的含义是什么?我想获取目录中我有权访问的所有文件的列表,使用
.files().list( ... )
https://developers.google.com/drive/v2/reference/files/list
我曾经运行过以下有效的代码:
SearchParameterString = "'" + FolderId + "' in parents"
#NOTE there is a return limit of 460 files (falsly documented as 1000)
DriveFileItems = []
PageToken = None
while True:
try:
DriveFilesObject = Service.files().list(
q = SearchParameterString,
#corpora = 'domain', #'default',#SearchOwners,
corpus = 'DOMAIN', #----> DEPRICATED!!!
maxResults = 200,
pageToken = PageToken,
).execute()
DriveFileItems.extend(DriveFilesObject['items'])
PageToken = DriveFilesObject.get('nextPageToken')
if not PageToken:
break
except errors.HttpError, error:
print 'An error occurred: %s' % error
break
上面的代码在 6 月 25 日对我来说崩溃了。并出现以下错误消息:
https://www.googleapis.com/drive/v2/files?q=%27___myFolderIdHere___%27+in+parents&alt=json&corpus=DOMAIN&maxResults=200 返回“无效查询”>
我发现这是因为他们弃用了参数
corpus
而支持 corpora
Google Drive api
corpora
有哪些可能的选择?
它们是什么意思?
corpora = 'domain', #DOES NOT WORK
如何确保获得完整的文件列表,而不仅仅是我拥有的文件? (之前我不得不从
DEFAULT
切换到 DOMAIN
,因为我遇到了各种各样的问题,因为没有获得完整的文件列表,并且最终在尝试使用 Drive api 跨机器同步目录时上传了许多重复的文件)
我发现了这个: https://github.com/google/google-api-go-client/issues/218
还有这个: https://godoc.org/golang.org/x/oauth2/jwt#Config
但我真的不知道冒充用户意味着什么,我也不认为我真的想这样做。
编辑:我碰巧正在使用 python - 但问题是与语言无关
我想您可以看到,在从云端硬盘 v2 迁移中,唯一的选项是:
Method Parameter Alternative
files.list corpus=DEFAULT corpus=user
files.list corpus=DOMAIN corpus=domain
如果您使用 Google Drive Java API,那么最有可能的是您缺少以下参数之一:
如果您只想从一个共享驱动器查找文件,则指定这些参数尤其重要。
private void readFiles(Drive drive) {
FileList result;
try {
result = drive.files().list()
.setQ("'" + DOCUMENTS_FOLDER_ID + "' in parents")
.setDriveId(P10_DRIVE_ID)
.setIncludeItemsFromAllDrives(true)
.setSupportsAllDrives(true)
.setCorpora("drive")
.setPageSize(100)
.setFields("nextPageToken,files(id, name, webViewLink)")
.execute();
List<File> files = result.getFiles();
if (files == null || files.isEmpty()) {
System.out.println("No files found.");
} else {
System.out.println("Files:");
for (File file : files) {
System.out.printf("%s (%s) (%s)\n", file.getName(), file.getId(), file.getWebViewLink());
}
}
} catch (IOException e) {
e.printStackTrace();
}
}
使用驱动器 API v2:
corpora = 'domain'
根本不起作用...
corpus = 'DOMAIN'
根本不起作用...
corpora = 'default'
似乎可以解决问题。
corpora = 'default'
现在的工作方式与 corpus = 'DOMAIN'
之前的工作方式相同。
其他用户创建的文件不会被省略(如我所愿)。 Google 在没有宣布的情况下更改了此功能,并且在 2017 年 6 月 25 日对我来说突然出现了。
这似乎是包含此信息的正确资源:https://developers.google.com/drive/api/guides/about-files#org。
综上所述,
corpora
值可以是:
user
— 包括用户在“我的云端硬盘”中创建和打开的所有文件,以及在“与我共享”中直接与用户共享的文件。
drive
— 包括单个共享驱动器中包含的所有文件,如driveId 所示。
domain
— 包括与用户域共享的所有可搜索文件。
allDrives
— 包括用户所属的共享云端硬盘中的所有文件,以及“我的云端硬盘”和“与我共享”中的所有文件。请谨慎使用 allDrives 语料库,因为它的范围很广并且可能会影响性能。如果可能,请使用用户或驱动器而不是所有驱动器以提高效率。