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
相关产品推荐
相关产品推荐

