You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Google Drive API无法获取「与我共享」文件夹下子文件夹问题

问题原因分析
  • sharedWithMe = true 条件不适用服务账号:服务账号是独立的云身份,当资源被共享给服务账号时,不会被标记为sharedWithMe(这个字段仅针对普通Google账号的「与我共享」视图),加上这个条件会直接过滤掉所有共享给服务账号的资源。
  • not 'me' in owners 条件冗余且冲突:你已经确认服务账号不是资源所有者,但这个条件结合sharedWithMe = true的错误过滤,进一步导致没有匹配结果。
解决方案

直接使用简化后的查询条件,只保留父文件夹匹配和文件夹类型过滤,就能正确获取目标子文件夹。修改后的代码如下:

from google.oauth2 import service_account
from googleapiclient.discovery import build
from googleapiclient.errors import HttpError

# 替换为你的服务账号凭证和父文件夹ID
SERVICE_ACCOUNT_FILE = 'secret.json'
PARENT_FOLDER_ID = 'XXXXXXXXXXXXXXXXXXXXXXXXXXX'

# 认证并创建Drive API客户端
creds = service_account.Credentials.from_service_account_file(SERVICE_ACCOUNT_FILE)
service = build('drive', 'v3', credentials=creds)

# 正确查询:指定父文件夹下的所有子文件夹
results = service.files().list(
    q=f"'{PARENT_FOLDER_ID}' in parents and mimeType='application/vnd.google-apps.folder'",
    fields="nextPageToken, files(id, name)"
).execute()
folders = results.get('files', [])

# 输出结果
if not folders:
    print('未找到任何文件夹。')
else:
    print('文件夹列表:')
    for folder in folders:
        print(f'{folder["name"]} ({folder["id"]})')
额外说明

如果需要进一步过滤(比如排除服务账号自己创建的文件夹),可以保留not 'me' in owners,但必须去掉sharedWithMe = true,修改后的查询语句为:
q=f"'{PARENT_FOLDER_ID}' in parents and mimeType='application/vnd.google-apps.folder' and not 'me' in owners"

内容的提问来源于stack exchange,提问作者Görkem Can Özkan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 19:58:06