使用Google Drive API无法列出未打开过的共享链接文件夹文件
Google Drive API 无法列出链接共享文件夹中未打开过的文件
我用Google Drive API尝试列出通过链接共享给我的文件夹内的所有文件,但代码始终返回空文件夹。测试后发现,只有我手动打开过的文件才会被API识别,推测API默认只把已打开的文件标记为“已共享给我”。
目前能想到的可行方案是把整个共享文件夹复制到自己的Drive空间,但这种方法不够优雅。另外,请求文件夹所有者通过邮箱添加我为查看者的途径也无法实现。
附上当前使用的代码:
from Google import Create_Service import pandas as pd folder_id='----shared folder id----' query=f"parents in '{folder_id}' and trashed=false" result=service.files().list( q=query, includeItemsFromAllDrives=True, supportsAllDrives=True ).execute() files=result.get('files') nextPageToken=result.get('nextPageToken') while nextPageToken: result=service.files().list(q=query,includeItemsFromAllDrives=True,supportsAllDrives=True,pageToken=nextPageToken).execute() files.extend(result.get('files')) nextPageToken=result.get('nextPageToken') df=pd.DataFrame(files) print(df)
问题解决思路
原因分析
Google Drive API对于仅通过链接共享且未被用户主动访问过的文件,不会将其纳入用户的"共享视图"索引中,这是Drive的默认行为——只有当用户实际访问过文件后,才会在API的查询结果中显示。
解决方法
要获取链接共享文件夹内的所有文件,需要使用drive.readonly.metadata权限范围,并调整查询参数,同时结合files.list的corpora参数指定为drive,并传入共享文件夹的driveId(注意不是folderId)。
完整代码示例
from Google import Create_Service import pandas as pd folder_id = '----shared folder id----' # 获取共享文件夹所属的driveId folder_details = service.files().get( fileId=folder_id, fields='id, name, driveId', supportsAllDrives=True ).execute() shared_drive_id = folder_details['driveId'] # 构建查询语句 query = f"'{folder_id}' in parents and trashed=false" # 发起文件列表请求,指定corpora为drive result = service.files().list( q=query, corpora='drive', driveId=shared_drive_id, includeItemsFromAllDrives=True, supportsAllDrives=True, fields='files(id, name, mimeType, createdTime), nextPageToken' ).execute() files = result.get('files', []) nextPageToken = result.get('nextPageToken') # 分页获取所有文件 while nextPageToken: result = service.files().list( q=query, corpora='drive', driveId=shared_drive_id, includeItemsFromAllDrives=True, supportsAllDrives=True, pageToken=nextPageToken, fields='files(id, name, mimeType, createdTime), nextPageToken' ).execute() files.extend(result.get('files', [])) nextPageToken = result.get('nextPageToken') # 输出结果 df = pd.DataFrame(files) print(df)
关键说明
corpora='drive':指定查询范围为整个共享驱动器(而非用户自己的Drive或共享视图),这能绕过“仅显示已访问文件”的限制。- 需要确保你的API授权拥有
drive.readonly.metadata或更高的权限,否则可能无法访问共享驱动器的完整元数据。 - 如果共享文件夹是嵌套结构,你可能需要添加递归遍历逻辑,上述代码仅能获取指定文件夹下的直接子文件/文件夹。
内容的提问来源于stack exchange,提问作者tanihu1
相关产品推荐
相关产品推荐

