如何用Python调用OneDrive API获取文件夹文件列表并生成可分享链接
OneDrive API 实现文件夹枚举与批量生成分享链接方案
你需要的两个需求都有对应的官方API支持,不需要额外做兼容处理,具体实现逻辑如下:
1. 获取指定文件夹下所有条目列表
调用OneDrive Graph API的GET /drives/{drive-id}/items/{folder-item-id}/children接口即可实现,如果你使用的是个人版OneDrive,也可以用/me/drive/items/{folder-id}/children简化调用路径。接口返回结果会包含目标文件夹下所有文件、子文件夹的基础元数据,包括名称、ID、大小、创建时间等常用字段。
如果目标文件夹内条目超过200条,接口会返回@odata.nextLink分页标记,循环调用直到该字段不存在即可拿到全量条目。
Python调用时可以用requests库直接发请求,也可以用微软官方的msgraph-sdk-python库简化鉴权和调用流程。
2. 为单个条目生成可分享链接
调用POST /drives/{drive-id}/items/{item-id}/createLink接口即可实现,你可以通过请求参数自定义链接的权限和访问范围:
- 权限类型参数
type可选值:view(只读访问)、edit(可编辑访问)、embed(网页嵌入专用链接) - 访问范围参数
scope可选值:anonymous(任何人无需登录即可访问)、organization(仅所属租户成员可访问)、users(仅指定用户可访问)
请求示例JSON Body:
{ "type": "view", "scope": "anonymous" }
接口返回结果中的link.webUrl字段就是你需要的可分享链接。
Python核心实现代码片段
以下代码基于requests库编写,前提是你已经完成Graph API鉴权拿到了有效access token:
import requests ACCESS_TOKEN = "你申请到的鉴权token" TARGET_FOLDER_ID = "目标文件夹的Item ID" # 拉取指定文件夹下所有条目 def get_all_folder_items(folder_id): item_list = [] request_url = f"https://graph.microsoft.com/v1.0/me/drive/items/{folder_id}/children" headers = {"Authorization": f"Bearer {ACCESS_TOKEN}"} while request_url: resp = requests.get(request_url, headers=headers) resp.raise_for_status() resp_data = resp.json() item_list.extend(resp_data.get("value", [])) request_url = resp_data.get("@odata.nextLink") return item_list # 为单个条目生成分享链接 def gen_item_share_link(item_id, link_type="view", access_scope="anonymous"): request_url = f"https://graph.microsoft.com/v1.0/me/drive/items/{item_id}/createLink" headers = { "Authorization": f"Bearer {ACCESS_TOKEN}", "Content-Type": "application/json" } payload = {"type": link_type, "scope": access_scope} resp = requests.post(request_url, headers=headers, json=payload) resp.raise_for_status() return resp.json()["link"]["webUrl"] # 主逻辑 if __name__ == "__main__": all_items = get_all_folder_items(TARGET_FOLDER_ID) for item in all_items: share_link = gen_item_share_link(item["id"]) print(f"文件名:{item['name']},分享链接:{share_link}")
注意事项
- 生成匿名分享链接需要你所属的OneDrive管理员开启了对应权限,如果调用时报权限相关错误,优先检查租户的全局分享设置
- 批量生成分享链接时建议控制请求频率,每两次请求之间加0.1-0.5秒的延时,避免触发Graph API的限流规则
内容的提问来源于stack exchange,提问作者Aadithya Sathya
相关产品推荐
相关产品推荐

