Google Drive Api (V2)`语料库`选择

问题描述 投票:0回答:4

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 - 但问题是与语言无关

google-drive-api
4个回答
2
投票

我想您可以看到,在从云端硬盘 v2 迁移中,唯一的选项是:

Method       Parameter         Alternative 
files.list  corpus=DEFAULT  corpus=user
files.list  corpus=DOMAIN   corpus=domain

2
投票

如果您使用 Google Drive Java API,那么最有可能的是您缺少以下参数之一:

  • 驱动器 ID
  • include_items_from_all_drives=true
  • supports_all_drives=true
  • 语料库=驱动器

如果您只想从一个共享驱动器查找文件,则指定这些参数尤其重要。

    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();
    }
}

1
投票

使用驱动器 API v2:

corpora = 'domain'
根本不起作用...

corpus = 'DOMAIN'
根本不起作用...

corpora = 'default'
似乎可以解决问题。

corpora = 'default'
现在的工作方式与
corpus = 'DOMAIN'
之前的工作方式相同。

其他用户创建的文件不会被省略(如我所愿)。 Google 在没有宣布的情况下更改了此功能,并且在 2017 年 6 月 25 日对我来说突然出现了。


0
投票

这似乎是包含此信息的正确资源:https://developers.google.com/drive/api/guides/about-files#org

综上所述,

corpora
值可以是:

  • user
    — 包括用户在“我的云端硬盘”中创建和打开的所有文件,以及在“与我共享”中直接与用户共享的文件。

  • drive
    — 包括单个共享驱动器中包含的所有文件,如driveId 所示。

  • domain
    — 包括与用户域共享的所有可搜索文件。

  • allDrives
    — 包括用户所属的共享云端硬盘中的所有文件,以及“我的云端硬盘”和“与我共享”中的所有文件。请谨慎使用 allDrives 语料库,因为它的范围很广并且可能会影响性能。如果可能,请使用用户或驱动器而不是所有驱动器以提高效率。

© www.soinside.com 2019 - 2024. All rights reserved.