前言
使用 Rclone 给 OneDrive 传输文件时可能会遇到速度非常慢、断联等一些问题,其根源是触发了 OneDrive API 的限制,而默认的 Rclone 内置 API 由于非常多人在同时在使用所以这些问题也就愈发明显。使用自建的私有 API 连接 OneDrive 可大幅改善这些情况,而且对于三个月的 Office 365 E5 开发者试用版,平时偶尔用用 Rclone 还会有自动续订的可能性,比起刻意刷 API 的方式更为安全和稳定。此外自建的 API 还可以给其它的账号和其它应用使用。
TIPS: Google Drive 自建 API 参见 GoIndex 教程。
速度测试
前者为使用 Rclone 自带 API ,后者为自建 API ,可以很明显的看出速度相差了 10 多倍。
创建 OneDrive API
获取 Client ID
- 进入 Microsoft Azure 应用注册页面。点击
新注册
。
- 名称随意,账户类型选择最后一个,重定向 URL 填写
http://localhost
。
- 创建成功后你会看到 Client ID(客户端 ID),复制并保存好。
获取 Client secret
- 点击
证书和密码
,按照图中序号的顺序操作添加密码。
- 然后你会看到 Client secret(客户端密码),复制并保存好。
设置 API 权限
- 点击
API 权限
,按照图示进行操作,添加Files.Read
、Files.ReadWrite
、Files.Read.All
、Files.ReadWrite.All
、offline_access
、User.Read
这些权限。
- 最后确认下权限是否添加完整。
获取 token
- 在本地电脑上下载 rclone。
- 以 Windows 为例子,解压并进入
rclone.exe
所在文件夹,在资源管理器地址栏输入cmd
,回车就会在当前路径打开命令提示符。 - 替换以下命令中的
Client_ID
、Client_secret
并执行。
rclone authorize "onedrive" "Client_ID" "Client_secret"
接下来会弹出浏览器,要求你登录账号进行授权。授权完后命令提示符窗口会出现以下信息:
If your browser doesn't open automatically go to the following link: http://127.0.0.1:53682/auth Log in and authorize rclone for access Waiting for code... Got code Paste the following into your remote machine ---> {"access_token":"xxxxxxxxxxxxxxxxxx","expiry":"2020-02-22T21:18:39.5036298+08:00"} <---End paste
{"access_token":"xxxxxxxxxxxxxxxxxx","expiry":"2020-02-22T21:18:39.5036298+08:00"}
整个内容(包含括号)就是 token ,复制并保存好。
Rclone 连接 OneDrive
输入 rclone config
命令,会出现以下信息,参照下面的注释进行操作。点击查看
TIPS: 因为 RCLONE 会时不时进行更新,当你看到这篇教程时菜单选项可能已经发生了略微的改动,但大致思路不会变,不要无脑照搬操作。
$ rclone config e) Edit existing remote n) New remote d) Delete remote r) Rename remote c) Copy remote s) Set configuration password q) Quit config e/n/d/r/c/s/q> n # 输入 n,新建 name> od-e5-api # 输入网盘名称,类似于标签,用于区分不同的网盘。 Type of storage to configure. Enter a string value. Press Enter for the default (""). Choose a number from below, or type in your own value 1 / 1Fichier \ "fichier" 2 / Alias for an existing remote \ "alias" 3 / Amazon Drive \ "amazon cloud drive" 4 / Amazon S3 Compliant Storage Provider (AWS, Alibaba, Ceph, Digital Ocean, Dreamhost, IBM COS, Minio, etc) \ "s3" 5 / Backblaze B2 \ "b2" 6 / Box \ "box" 7 / Cache a remote \ "cache" 8 / Citrix Sharefile \ "sharefile" 9 / Dropbox \ "dropbox" 10 / Encrypt/Decrypt a remote \ "crypt" 11 / FTP Connection \ "ftp" 12 / Google Cloud Storage (this is not Google Drive) \ "google cloud storage" 13 / Google Drive \ "drive" 14 / Google Photos \ "google photos" 15 / Hubic \ "hubic" 16 / JottaCloud \ "jottacloud" 17 / Koofr \ "koofr" 18 / Local Disk \ "local" 19 / Mail.ru Cloud \ "mailru" 20 / Mega \ "mega" 21 / Microsoft Azure Blob Storage \ "azureblob" 22 / Microsoft OneDrive \ "onedrive" 23 / OpenDrive \ "opendrive" 24 / Openstack Swift (Rackspace Cloud Files, Memset Memstore, OVH) \ "swift" 25 / Pcloud \ "pcloud" 26 / Put.io \ "putio" 27 / QingCloud Object Storage \ "qingstor" 28 / SSH/SFTP Connection \ "sftp" 29 / Transparently chunk/split large files \ "chunker" 30 / Union merges the contents of several remotes \ "union" 31 / Webdav \ "webdav" 32 / Yandex Disk \ "yandex" 33 / http Connection \ "http" 34 / premiumize.me \ "premiumizeme" Storage> 22 # 选择 Microsoft OneDrive ,截止2020年2月23日序号为 22 ** See help for onedrive backend at: https://rclone.org/onedrive/ ** Microsoft App Client Id Leave blank normally. Enter a string value. Press Enter for the default (""). client_id> # 输入 Client Id (客户端 ID) Microsoft App Client Secret Leave blank normally. Enter a string value. Press Enter for the default (""). client_secret> # 输入 Client Secret (客户端密码) Edit advanced config? (y/n) y) Yes n) No y/n> n # 输入 n Remote config Make sure your Redirect URL is set to "http://localhost:53682/" in your custom config. Use auto config? * Say Y if not sure * Say N if you are working on a remote or headless machine y) Yes n) No y/n> n # 输入 n For this to work, you will need rclone available on a machine that has a web browser available. Execute the following on your machine (same rclone version recommended) : rclone authorize "onedrive" "client_id" "client_secret" Then paste the result below: result> {"access_token":"XXXXXXXXX","expiry":"2020-02-22T21:18:39.5036298+08:00"} # 输入 token Choose a number from below, or type in an existing value 1 / OneDrive Personal or Business \ "onedrive" 2 / Root Sharepoint site \ "sharepoint" 3 / Type in driveID \ "driveid" 4 / Type in SiteID \ "siteid" 5 / Search a Sharepoint site \ "search" Your choice> 1 # # 这里问你要选择的类型,因为是使用 OneDrive ,所以输入 1 Found 1 drives, please select the one you want to use: 0: OneDrive (business) id=xxxxxxxxxxxxxx Chose drive to use:> 0 # 检测到了网盘,这里编号是 0 ,所以输入 0 Found drive 'root' of type 'business', URL: https://p3terx-my.sharepoint.com/personal/xxxxxx/Documents Is that okay? y) Yes n) No y/n> y # 问你是否确认,如果没问题则输入 y --------------------
[od-e5-api]
type = onedrive client_id = xxxxxxxxxx client_secret = xxxxxxxxxxxxxxxx token = {“access_token”:”xxxxxxxxxxxxxxxxxx”,”expiry”:”2020-02-22T21:18:39.5036298+08:00″} drive_id = xxxxxxxxxxxxxxxxxxxxxxxxx drive_type = business ——————– y) Yes this is OK e) Edit this remote d) Delete this remote y/e/d> y # 最后会显示网盘的配置信息并询问你是否正确,如果没问题则输入 y Current remotes: Name Type ==== ==== od-e5-api onedrive e) Edit existing remote n) New remote d) Delete remote r) Rename remote c) Copy remote s) Set configuration password q) Quit config e/n/d/r/c/s/q> q # 输入 q 退出
最后验证一下是否能正常使用,替换以下命令中的 od-e5-api
并执行,注意最后有:
(冒号)。网盘中出现 test
文件即表示成功。
touch test && rclone move test od-e5-api:
至此,Rclone 已成功使用自建 API 连接到了 OneDrive 网盘。
挂载 OneDrive
如果你需要挂载到本地目录,可以参考博主之前写的挂载教程,这里就不再赘述了。
其它说明
私有 API 局限性
自建私有 API 虽然能改善上传体验,但如果使用过于频繁还是会上传受限。
OneDrive API 限制阈值是多少?
微软没有明确说明 OneDrive API 的限制,以下为官方文档原文:
根据使用情况,我们会对阈值进行微调,以便用户可以使用最大数量的资源,而不会降低可靠性和性能。
通过查看其它类型的 API 限制说明可以猜测到的是有总次数和频率这个两种限制。总次数是指一天内所能调用的次数,而频率为每分钟所能调用的次数。而一旦达到限制阈值,那么就会限制文件的上传。
既然无法从官方文档中获得准确数值,那么是否能通过实际测试来获得这个准确数值呢?答案是否定的。在实际测试中并没有发现任何规律,所以说是这个限制是动态调节的,也符合官方文档的说明。
如何避免 OneDrive API 受限?
不要在短时间内上传过多的文件,文件大小无所谓,关键在于文件数量。
关于 Office 365 E5 自动续订
根据博主几年的开发者试用版使用经验来看,只要你使用自建的私有 API 就可能续订,至于频率并没有一个标准,也并不是越多越好。刻意刷 API 可能得不偿失,尤其是使用 GitHub Actions ,因为服务器是微软 Azure 的,那么多人以相似的方式无意义的刷 API 想要识别是非常容易的。
参考资料
Rclone Documentation – Microsoft OneDrive
本文作者:P3TERX
本文链接:https://p3terx.com/archives/rclone-connect-onedrive-with-selfbuilt-api.html
版权声明:本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。非商业转载及引用请注明出处(作者、原文链接),商业转载请联系作者获得授权。
按照这个方式设置了私有API,也正常连上了,但是速度依旧快不起来,甚至更慢,我主要需要下载速度能够足够快,以满足在线播放的需求,最好有类似于IDM的多线程方式,请问知道该怎么做吗?
rclone copy ***/admin/home/TG/ TGOD:/TGOD/ –transfers 6 -P &
我只要是复制上传。。你可以试试下载也这样 –transfers 6 就是多线程
rclone copy ***/admin/home/TG/ TGOD:/TGOD/ –transfers 6 -P &
我只要是复制上传。。你可以试试下载也这样 –transfers 6 就是多线程