5

我正在尝试使用桌面应用程序获取我的 Google Drive 中的文件列表。代码如下:

def main(argv):

    storage = Storage('drive.dat')
    credentials = storage.get()

    if credentials is None or credentials.invalid:
        credentials = run(FLOW, storage)

    # Create an httplib2.Http object to handle our HTTP requests and authorize it
    # with our good Credentials.
    http = httplib2.Http()
    http = credentials.authorize(http)

    service = build("drive", "v2", http=http)
    retrieve_all_files(service)

然后在retrieve_all_files 中打印文件:

param = {}
if page_token:
    param['pageToken'] = page_token
    files = service.files().list(**param).execute()
    print files

但是在我对我的帐户进行身份验证后,打印的文件列表中没有任何项目。有没有人有类似的问题或知道解决方案?

4

2 回答 2

7

如果我错了,请纠正我,但我相信您使用的是https://www.googleapis.com/auth/drive.file范围,它只返回您的应用创建或使用Google Drive UIPicker API.

要检索所有文件,您需要使用更广泛的范围:https://www.googleapis.com/auth/drive.

要了解有关不同范围的更多信息,请查看文档

于 2012-07-31T15:31:02.067 回答
0

一方面,您需要遍历 page_token 以获取 My Drive 的所有内容以及任何子文件夹。还有一些其他的事情可能太像不提供查询等。试试这个:

def retrieve_all_files(service):
    """ RETURNS a list of files, where each file is a dictionary containing
        keys: [name, id, parents]
    """

    query = "trashed=false"

    page_token = None
    L = []

    while True:
        response = service.files().list(q=query,
                                             spaces='drive',
                                             fields='nextPageToken, files(id, name, parents)',
                                             pageToken=page_token).execute()
        for file in response.get('files', []):  # The second argument is the default
            L.append({"name":file.get('name'), "id":file.get('id'), "parents":file.get('parents')})

        page_token = response.get('nextPageToken', None)  # The second argument is the default

        if page_token is None:  # The base My Drive folder has None
            break

    return L
于 2016-04-28T22:19:43.350 回答