使用python api在google驱动器中显示子文件夹

问题描述 投票:1回答:1

我正在尝试列出谷歌硬盘中的所有文件夹(和子文件夹)。

我的根文件夹中有六个子文件夹。但我的代码只显示文件。

def credentials_from_file():
    """Load credentials from a service account file
    Args:
        None
    Returns: service account credential object

    https://developers.google.com/identity/protocols/OAuth2ServiceAccount
    """

    # https://developers.google.com/identity/protocols/googlescopes#drivev3
    SCOPES = [
        'https://www.googleapis.com/auth/drive'
    ]
    SERVICE_ACCOUNT_FILE = './auth_creds.json'

    credentials = service_account.Credentials.from_service_account_file(
        SERVICE_ACCOUNT_FILE, scopes=SCOPES)


    return credentials

credentials = credentials_from_file()
service = discovery.build('drive', 'v3', credentials=credentials)


results = service.files().list(pageSize=10, fields="nextPageToken, files(id, name)").execute()
items = results.get('files', [])

if not items:
    print('No files found.')
else:
    print('Files:')
    for item in items:
        print(u'{0} ({1})'.format(item['name'], item['id']))

如何让它告诉我子文件夹呢?谢谢!

更新#1。这是OAuth版本。它允许浏览器创建一个令牌,然后应该运行,但是在创建令牌之后,它会在执行时冻结:

from httplib2 import Http
from oauth2client import file, client, tools
from getfilelistpy import getfilelist

SCOPES = 'https://www.googleapis.com/auth/drive.metadata.readonly'

store = file.Storage('token.json')
creds = store.get()
if not creds or creds.invalid:
    flow = client.flow_from_clientsecrets('rrc_crds.json', SCOPES)
    creds = tools.run_flow(flow, store)

resource = {
    "oauth2": creds.authorize(Http()),
    "fields": "files(name,id)",
}
res = getfilelist.GetFileList(resource)  # or r = getfilelist.GetFolderTree(resource)
print(res)
python google-drive-sdk google-api-python-client
1个回答
1
投票

我想提出以下修改。

Modification points:

  • 在您的脚本中,您正在使用服务帐户。根据您的评论,我可以理解您要在自己的Google云端硬盘中检索文件。因此,我建议在这种情况下使用OAuth2,因为服务驱动器帐户与您使用Google帐户登录的云端硬盘不同。
  • 关于脚本,为了检索特定文件夹下的所有文件和文件夹,我已经为此发布了一个库。所以在这里,我想提出来。 图书馆是https://github.com/tanaikech/getfilelistpy。此库使用Drive API v3中的list方法。 你可以通过$ pip install getfilelistpy安装。

Sample script:

使用OAuth2的示例脚本如下所示。在此示例脚本中,OAuth2的过程使用the quickstart of Google。请在运行脚本之前检查一下。

from httplib2 import Http
from oauth2client import file, client, tools
from getfilelistpy import getfilelist

SCOPES = 'https://www.googleapis.com/auth/drive.metadata.readonly'

store = file.Storage('token.json')
creds = store.get()
if not creds or creds.invalid:
    flow = client.flow_from_clientsecrets('client_secret.json', SCOPES)
    creds = tools.run_flow(flow, store)

resource = {
    "oauth2": creds.authorize(Http()),
    "id": "### Folder ID ###",
    "fields": "files(name,id)",
}
res = getfilelist.GetFileList(resource)  # or r = getfilelist.GetFolderTree(resource)
print(res)
  • 如果您不使用"id": "### Folder ID ###",则会检索自己的Google云端硬盘中的所有文件。所以当你的驱动器中有很多文件时,需要很长时间。因此,首先,请使用具有少量文件和文件夹的文件夹的特定文件夹ID作为测试运行。

References:

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