html页面调用OneDrive api,OneDrive 无管理员调用API
受到Onesrc(链接:https://www.onesrc.cn/p/how-to-call-api-for-onedrive-account-without-administrator.html)大佬的启发,出于发挥无管理员OneDrive的优势,写了个小程序,这种API调用方法有限制,可以列文件,上传下载,但是不能删除,而且基于静态链接也有一定的安全风险,有效期未知(估计也有几个小时吧!)
实际上就是FedAuth换取Token,如果用更高权限,也可以用selenium模拟登录后获取(也就多了删除,创建目录权限,依然不能跨目录操作).
操作方法,首先新建一个文件夹:
给文件夹Share权限,所有人可编辑.
替换示例程序中的url和shared_folder,大文件上传我使用了一个音乐文件,也需要替换.
import json
import os
import requests
# 权限列表(限定于分享的文件夹内)
#
# 列文件 Yes
# 上传文件 Yes
# 下载文件 Yes
# 删除文件 No
# 创建文件夹 No
url = "https://alumnibentley-my.sharepoint.com/:f:/g/personal/rita_odin_alumni_bentley_edu/EmGOHZZfTiRAqe6VmccZ5C8BDvQelTCL1jqDRkg6w1T4oQ?e=8iQeCu"
shared_folder = 'Files'
tenant = url.split('/')[2]
mail = url.split('/')[6]
response = requests.get(url)
cookies = response.cookies.get_dict()
print('提取 FedAuth:' + cookies['FedAuth'])
url = "https://" + tenant + "/personal/" + mail + "/_api/web/GetListUsingPath(DecodedUrl=@a1)/RenderListDataAsStream?@a1='/personal/" + mail + "/Documents'&RootFolder=/personal/" + mail + "/Documents/&TryNewExperienceSingle=TRUE"
headers = {
'Accept': 'application/json;odata=verbose',
'Content-Type': 'application/json;odata=verbose'
}
payload = {
"parameters": {
"__metadata": {"type": "SP.RenderListDataParameters"},
"RenderOptions": 136967,
"AllowMultipleValueFilterForTaxonomyFields": True,
"AddRequiredFields": True
}
}
response = requests.post(url, cookies=cookies, headers=headers, data=json.dumps(payload))
payload = json.loads(response.text)
token = payload['ListSchema']['.driveAccessToken'][13:]
api_url = payload['ListSchema']['.driveUrl'] + '/'
print('提取 AccessToken:' + token)
print('提取 api_url:' + api_url)
headers = {
'Authorization': 'Bearer ' + token
}
response = requests.get(api_url + 'root/', headers=headers)
folder_id = json.loads(response.text)['id']
print('提取 根目录ID:' + folder_id)
headers = {
'Authorization': 'Bearer ' + token
}
response = requests.get(api_url + 'root:/' + shared_folder + ':/children', headers=headers)
files = json.loads(response.text)['value']
print('列举目录内文件:')
for mfile in files:
print(' 文件 =>' + mfile['name'])
# 普通上传最大4MB
headers = {
'Authorization': 'Bearer ' + token,
'Content-Type': 'application/json'
}
response = requests.put(api_url + 'items/root:/' + shared_folder + '/460.txt:/content', headers=headers, data='Test')
file_id = json.loads(response.text)['id']
print('提取 文件ID:' + file_id)
headers = {
'Authorization': 'Bearer ' + token,
'Content-Type': 'application/json'
}
response = requests.get(api_url + 'items/' + file_id + '/content', headers=headers, allow_redirects=False)
download_link = response.headers['Location']
print('提取 文件下载直链:' + download_link)
# 多部份上传最大15G
headers = {
'Authorization': 'Bearer ' + token,
'Content-Type': 'application/json'
}
response = requests.post(api_url + 'items/root:/' + shared_folder + '/画纸上的戒指.mp3:/createUploadSession', headers=headers)
uploadUrl = json.loads(response.text)['uploadUrl']
file_size = os.path.getsize('画纸上的戒指.mp3')
with open('画纸上的戒指.mp3', "rb") as file:
while True:
data = file.read(1024 * 1024)
if not data:
file_id = json.loads(response.text)['id']
print('提取 文件ID:' + file_id)
break
headers = {
'Content-Length': str(len(data)),
'Content-Range': 'bytes ' + str(file.tell() - len(data)) + '-' + str(file.tell() - 1) + '/' + str(file_size)
}
print('正在上传:' + str(round((file.tell() * 100) / file_size, 2)) + '%')
response = requests.put(uploadUrl, headers=headers, data=data)
测试结果:
再说一次,只有主用户可以删除文件,在这个特殊API上传的文件在主用户下也可以随便挪动.
快速测试代码:
https://gist.github.com/nickfox-taterli/d0f5932e05ff2f2490f38c42f191406e
传入第一个参数是分享URL,第二个参数是对应的文件.
上传结果:
html页面调用OneDrive api,OneDrive 无管理员调用API相关推荐
- 【企业微信-客户服务】错误代码:48002, 错误信息:API接口无权限调用
第一步 进入企业微信管理后台 企业微信管理后台登录地址 第二步 选择客户与上下游
- Python虚拟机函数机制之无参调用(一)
PyFunctionObject对象 在Python中,任何一个东西都是对象,函数也不例外.函数这种抽象机制,是通过一个Python对象--PyFunctionObject来实现的 typedef s ...
- onedrive php映射,Microsoft OneDrive空全局账号自建API(Rclone、OneManager-php)
OneDrive申请空全局账号,然后登陆Azure自建API(Rclone.OneManager-php)使用,可避免使用公共API因使用频率过高导致的Rclone.网盘列目录程序OneManager ...
- node aws 内存溢出_如何使用Node.js和AWS快速创建无服务器RESTful API
node aws 内存溢出 by Mark Hopson 马克·霍普森(Mark Hopson) 如何使用Node.js和AWS快速创建无服务器RESTful API (How to quickly ...
- elastic APM 深入测试 一 (无嵌套调用的分布式微服务监控)
前几篇文章,我在一个比较浅的层面给大家介绍了elastic的APM功能,对于我而言,在没有具体到真正的在生产环境上去应用,对各种场景进行适配之前,也只是对APM建立了一个基础的认知.在接下去的几篇文章 ...
- java调用kafka接口发送数据_Java调用Kafka生产者,消费者Api及相关配置说明
本次的记录内容包括: 1.Java调用生产者APi流程 2.Kafka生产者Api的使用及说明 3.Kafka消费者Api的使用及说明 4.Kafka消费者自动提交Offset和手动提交Offset ...
- 异步api_如何设计无服务器异步API
异步api by Garrett Vargas 通过Garrett Vargas 如何设计无服务器异步API (How To Design a Serverless Async API) I rece ...
- php调用美图接口,网易美图 API 接口调用与请求方法详细教程
原标题:网易美图 API 接口调用与请求方法详细教程 网易美图 API 接口在网上已经很多且大都封装成了 API 供别人调用.支持前台跨域请求,以POST方式提交图片即可.网易美图 API 接口会随机 ...
- 调用网易云二维码登录API,实现微信小程序登录
调用网易云二维码登录API,实现微信小程序登录 首先前往网易云音乐API官网 binaryify.github.io/NeteaseClou- 首先根据文档的链接下载好配置文件,再根据官方文档启动好本 ...
最新文章
- 记录一些使用git过程中的bug
- qt自定义窗口添加父窗口后,显示不出来
- 魔兽发布页站源码-自带采集插件+5条规则
- Acwing第 38 场周赛
- 创建数据库常用SQL语句
- NB-IoT的优势是什么?
- live555 RTSP服务器与客户端通信源码分析
- NTP授时服务器(网络校时服务器)对医院信息化建设的重要
- 【星门跳跃】解题报告
- JavaScript-标签语句
- [转] 数学原理浅谈一下《黑客帝国》
- OpenGL基础47:法线贴图
- 实现74LVC161的计数器功能
- OGRE+CG学习日记[1]-简单的3D程序
- 招行193亿港元收购永隆银行53.1%股份
- Peregrine半导体推出DOCSIS 3.1标准RF开关IC
- idea maven项目无法下载自定义的仓库完美解决办法
- 王思聪创办的熊猫直播将于3月8日正式关站,这会是直播行业的落幕吗?
- esp32与ros2的开关灯
- 今天比较了一下google和baidu的图片搜索