使用Graph API的Python请求追加OneNote页面内容遇用户ID问题
解决OneNote Graph API追加内容时的用户ID参数问题
先直接说问题所在和修正方案:
1. 端点URL先改错
你写的端点路径多了冗余的notebooks/,OneNote页面内容操作的正确端点应该是:https://graph.microsoft.com/v1.0/me/onenote/pages/{page-id}/content
或者指定用户的格式:https://graph.microsoft.com/v1.0/users/{user-id}/onenote/pages/{page-id}/content
2. {my_user_id}的正确取值
这里的`user-id不是应用ID、租户ID或密钥ID,只能是两种值:
- 目标用户的对象ID(Object ID):去Azure AD的用户管理页面就能找到对应用户的这个ID;
- 目标用户的邮箱地址(比如
xxx@yourdomain.com);
如果是操作当前授权用户的OneNote,直接用me代替{user-id}更省事,不需要特意找ID。
3. 修正后的代码示例
import requests access_token = token["accessToken"] # 用me指代当前授权用户,也可以替换成用户邮箱/对象ID end_point = "https://graph.microsoft.com/v1.0/me/onenote/pages/{my_page_id}/content" headers = { "Authorization": "Bearer " + access_token, "Content-Type": "application/json" } # 要追加到页面末尾的话,target设为"body"就行,不用找段落ID data = { 'target': "body", 'action': 'append', 'content': f'<li>{title}\n\n{description}</li>' } response = requests.patch(end_point, headers=headers, json=data) # 建议打印响应信息排查问题 print(response.status_code) print(response.text)
额外提醒
- 确保你的access_token有
Notes.ReadWrite权限; - 内容要符合OneNote的HTML规范,标签要闭合;
- 如果非要指定段落ID,得保证这个ID是页面中真实存在的段落ID,不然会报错。
内容的提问来源于stack exchange,提问作者gas_rm
相关产品推荐
相关产品推荐

