受到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相关推荐

  1. 【企业微信-客户服务】错误代码:48002, 错误信息:API接口无权限调用

    第一步 进入企业微信管理后台 企业微信管理后台登录地址 第二步 选择客户与上下游

  2. Python虚拟机函数机制之无参调用(一)

    PyFunctionObject对象 在Python中,任何一个东西都是对象,函数也不例外.函数这种抽象机制,是通过一个Python对象--PyFunctionObject来实现的 typedef s ...

  3. onedrive php映射,Microsoft OneDrive空全局账号自建API(Rclone、OneManager-php)

    OneDrive申请空全局账号,然后登陆Azure自建API(Rclone.OneManager-php)使用,可避免使用公共API因使用频率过高导致的Rclone.网盘列目录程序OneManager ...

  4. node aws 内存溢出_如何使用Node.js和AWS快速创建无服务器RESTful API

    node aws 内存溢出 by Mark Hopson 马克·霍普森(Mark Hopson) 如何使用Node.js和AWS快速创建无服务器RESTful API (How to quickly ...

  5. elastic APM 深入测试 一 (无嵌套调用的分布式微服务监控)

    前几篇文章,我在一个比较浅的层面给大家介绍了elastic的APM功能,对于我而言,在没有具体到真正的在生产环境上去应用,对各种场景进行适配之前,也只是对APM建立了一个基础的认知.在接下去的几篇文章 ...

  6. java调用kafka接口发送数据_Java调用Kafka生产者,消费者Api及相关配置说明

    本次的记录内容包括: 1.Java调用生产者APi流程 2.Kafka生产者Api的使用及说明 3.Kafka消费者Api的使用及说明 4.Kafka消费者自动提交Offset和手动提交Offset ...

  7. 异步api_如何设计无服务器异步API

    异步api by Garrett Vargas 通过Garrett Vargas 如何设计无服务器异步API (How To Design a Serverless Async API) I rece ...

  8. php调用美图接口,网易美图 API 接口调用与请求方法详细教程

    原标题:网易美图 API 接口调用与请求方法详细教程 网易美图 API 接口在网上已经很多且大都封装成了 API 供别人调用.支持前台跨域请求,以POST方式提交图片即可.网易美图 API 接口会随机 ...

  9. 调用网易云二维码登录API,实现微信小程序登录

    调用网易云二维码登录API,实现微信小程序登录 首先前往网易云音乐API官网 binaryify.github.io/NeteaseClou- 首先根据文档的链接下载好配置文件,再根据官方文档启动好本 ...

最新文章

  1. 记录一些使用git过程中的bug
  2. qt自定义窗口添加父窗口后,显示不出来
  3. 魔兽发布页站源码-自带采集插件+5条规则
  4. Acwing第 38 场周赛
  5. 创建数据库常用SQL语句
  6. NB-IoT的优势是什么?
  7. live555 RTSP服务器与客户端通信源码分析
  8. NTP授时服务器(网络校时服务器)对医院信息化建设的重要
  9. 【星门跳跃】解题报告
  10. JavaScript-标签语句
  11. [转] 数学原理浅谈一下《黑客帝国》
  12. OpenGL基础47:法线贴图
  13. 实现74LVC161的计数器功能
  14. OGRE+CG学习日记[1]-简单的3D程序
  15. 招行193亿港元收购永隆银行53.1%股份
  16. Peregrine半导体推出DOCSIS 3.1标准RF开关IC
  17. idea maven项目无法下载自定义的仓库完美解决办法
  18. 王思聪创办的熊猫直播将于3月8日正式关站,这会是直播行业的落幕吗?
  19. esp32与ros2的开关灯
  20. 今天比较了一下google和baidu的图片搜索

热门文章

  1. Javascript---AJAX
  2. Android 2.x版本使用ActionBar-强制显示OverflowButton
  3. Windows CE大排档 资源汇总
  4. 为什么说程序员过了35岁就退休的说法?
  5. HDU Knight Moves
  6. Linux中创建文件与文件夹
  7. mongodb安装以及错误解决
  8. 2022年最新互联网大厂前端面试题及答案-前端工程必备技能(持续整理更新中【关注收藏不迷路】)
  9. hudi 0.9.0适配hbase 2.2.6
  10. ios如何输入勾,打勾☑️