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

使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 07:13:27