前言#
在使用 Rclone 進行 OneDrive 文件傳輸時,可能會遇到速度非常慢、斷線等一些問題,其根源是觸發了 OneDrive API 的限制,而預設的 Rclone 內建 API 由於非常多人在同時使用,所以這些問題也就愈發明顯。使用自建的私有 API 連接 OneDrive 可以大幅改善這些情況,而且對於三個月的 Office 365 E5 開發者試用版,平時偶爾使用 Rclone 還會有自動續訂的可能性,比起刻意刷 API 的方式更為安全和穩定。此外,自建的 API 還可以給其他的帳號和其他應用使用。
創建 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 ,複製並保存好。
其他說明#
私有 API 局限性#
自建私有 API 雖然能改善上傳體驗,但如果使用過於頻繁還是會受到上傳限制。
OneDrive API 限制閾值是多少?#
微軟沒有明確說明 OneDrive API 的限制,以下為官方文件原文:
根據使用情況,我們會對閾值進行微調,以便用戶可以使用最大數量的資源,而不會降低可靠性和性能。
通過查看其他類型的 API 限制說明,可以猜測到的是有總次數和頻率這兩種限制。總次數是指一天內所能調用的次數,而頻率為每分鐘所能調用的次數。一旦達到限制閾值,就會限制文件的上傳。
既然無法從官方文件中獲得準確數值,那麼是否能通過實際測試來獲得這個準確數值呢?答案是否定的。在實際測試中並沒有發現任何規律,所以說這個限制是動態調節的,也符合官方文件的說明。
如何避免 OneDrive API 受限?#
不要在短時間內上傳過多的文件,文件大小無所謂,關鍵在於文件數量。
關於 Office 365 E5 自動續訂#
根據博主幾年的開發者試用版使用經驗來看,只要你使用自建的私有 API 就可能續訂,至於頻率並沒有一個標準,也並不是越多越好。刻意刷 API 可能得不償失,尤其是使用 GitHub Actions ,因為服務器是微軟 Azure 的,那麼多人以相似的方式無意義地刷 API 想要識別是非常容易的。