Python版Dropbox API:如何访问团队及个人文件
问题背景
作为Dropbox商业版团队成员,希望通过API实现与网页端登录相同的体验,查看个人及团队文件/文件夹。已使用以下代码完成OAuth2认证:
dropbox.DropboxOAuth2FlowNoRedirect( settings.DROPBOX_APP_KEY, settings.DROPBOX_APP_SECRET, token_access_type="offline", scope=[ "account_info.read", "file_requests.read", "file_requests.write", "files.content.read", "files.content.write", "files.metadata.read", "files.metadata.write", "files.team_metadata.read", "files.team_metadata.write", "sharing.read", "sharing.write", "team_data.content.read", "team_data.content.write", "team_data.governance.read", "team_data.governance.write", "team_data.member", "team_data.team_space", ], )
但调用dbx.file_list_folders()时出现错误:
This API function operates on a single Dropbox account, but the OAuth 2 access token you provided is for an entire Dropbox Business team. Since your API app key has team member file access permissions, you can operate on a team member's Dropbox by providing the "Dropbox-API-Select-User" HTTP header or "select_user" URL parameter to specify the exact user.
已知可通过dbx_team.as_user("YOUR_TEAM_MEMBER_ID")切换身份,但不清楚如何获取YOUR_TEAM_MEMBER_ID。
解决方案
1. 获取当前授权用户的Team Member ID
无需遍历所有团队成员,直接通过DropboxTeam客户端调用接口获取自身的Team Member ID:
import dropbox # 初始化团队客户端 dbx_team = dropbox.DropboxTeam(ACCESS_TOKEN) # 获取当前授权用户的团队成员信息 current_member = dbx_team.team_members_get_current() member_id = current_member.profile.team_member_id
2. 访问个人文件/文件夹
使用as_user()方法切换到个人身份,即可调用个人文件相关API,实现和网页端访问个人空间一致的逻辑:
# 切换到个人用户身份 dbx_user = dbx_team.as_user(member_id) # 列出个人根目录文件 personal_files = dbx_user.files_list_folder("") for entry in personal_files.entries: print(entry.name)
3. 访问团队空间文件/文件夹
直接使用DropboxTeam客户端调用团队文件相关API,即可访问团队空间内容:
# 获取团队文件夹列表 team_folders = dbx_team.team_folder_list() # 遍历团队文件夹并列出内容 for folder in team_folders.team_folders: print(f"团队文件夹:{folder.name}") # 列出该团队文件夹下的文件 team_files = dbx_team.files_list_folder(f"/{folder.team_folder_id}") for entry in team_files.entries: print(f" - {entry.name}")
内容的提问来源于stack exchange,提问作者user1383029

