MENU

利用 Aria2 和 Rclone 实现 OneDrive 离线下载(伪)

2019 年 10 月 11 日 • 阅读: 13530 • 脚本

Aria2 是老毛子主导开发并开源的,基于 C 语言的轻量高性能跨平台多线程下载软件,支持 HTTP磁力链接 下载。Rclone 同样是一款高性能跨平台开源程序,它基于 Go 语言开发,支持对接和操作几十种主流网盘和对象存储产品,包括 Aliyun OSSOneDriveGoogle Drive 等。

本文主要介绍如何在 Debian 9+/Ubuntu 18+CentOS 7+ 上安装 Rclone,对接 OneDrive,以及利用 Aria2Event Hook 实现文件下载后自动上传到 OneDrive 网盘。不难看出,使用这种方式,上传和下载都要经 VPS,不仅速度慢,还将产生可观的流量,并非传统意义上的 离线下载

获取 OneDrive Token

下文你将看到,因为 VPS 不方便使用图形界面浏览器,所以这一步我们选择在本地 Windows 下完成。

下载并解压 rclone-current-windows-amd64.zip,随后进入解压后的最内层文件夹(包含 rclone.exe)。此时,按住键盘 Shift 键的同时,右键文件夹空白处,选择 在此处打开 Powershell 窗口(S)(CMD 也可以),随后复制粘贴以下命令并回车,打开 Rclone 配置菜单

  • .\rclone.exe config

接着按照下面的示例和中文注释选择菜单的每一项,生成 OneDrive Token。

Config Menu

  • No remotes found - make a new one
  • n) New remote
  • s) Set configuration password
  • q) Quit config
  • n/s/q> n # 输入 n 回车,新建远端配置
  • name> od # 输入 od 回车,为远端配置命名(为保持下文一致性,不要使用其他名称)
  • 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 / Dropbox
  • \ "dropbox"
  • 9 / Encrypt/Decrypt a remote
  • \ "crypt"
  • 10 / FTP Connection
  • \ "ftp"
  • 11 / Google Cloud Storage (this is not Google Drive)
  • \ "google cloud storage"
  • 12 / Google Drive
  • \ "drive"
  • 13 / Google Photos
  • \ "google photos"
  • 14 / Hubic
  • \ "hubic"
  • 15 / JottaCloud
  • \ "jottacloud"
  • 16 / Koofr
  • \ "koofr"
  • 17 / Local Disk
  • \ "local"
  • 18 / Mega
  • \ "mega"
  • 19 / Microsoft Azure Blob Storage
  • \ "azureblob"
  • 20 / Microsoft OneDrive
  • \ "onedrive"
  • 21 / OpenDrive
  • \ "opendrive"
  • 22 / Openstack Swift (Rackspace Cloud Files, Memset Memstore, OVH)
  • \ "swift"
  • 23 / Pcloud
  • \ "pcloud"
  • 24 / Put.io
  • \ "putio"
  • 25 / QingCloud Object Storage
  • \ "qingstor"
  • 26 / SSH/SFTP Connection
  • \ "sftp"
  • 27 / Union merges the contents of several remotes
  • \ "union"
  • 28 / Webdav
  • \ "webdav"
  • 29 / Yandex Disk
  • \ "yandex"
  • 30 / http Connection
  • \ "http"
  • 31 / premiumize.me
  • \ "premiumizeme"
  • Storage> 20 # 输入 20 回车,选择 Microsoft OneDrive,如果该项不是 20,则根据实际数字选择
  • ** 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> # 直接回车
  • Microsoft App Client Secret
  • Leave blank normally.
  • Enter a string value. Press Enter for the default ("").
  • client_secret> # 直接回车
  • Edit advanced config? (y/n)
  • y) Yes
  • n) No
  • y/n> n # 输入 n 回车,不使用高级配置
  • Remote 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> y # 输入 y 回车,使用自动配置。此时浏览器会自动打开,请在打开的页面中登录 OneDrive 以获取 Token
  • If your browser doesnt open automatically go to the following link: http://127.0.0.1:53682/auth?state=e075eabcf52d5094a837f1b3e12977de
  • Log in and authorize rclone for access
  • Waiting for code...
  • Got code
  • 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 # 输入 1 回车
  • Found 1 drives, please select the one you want to use:
  • 0: OneDrive (business) id=b!ZyWPB3G6-EetswlYu40wymfxwt_DMENCvHVsnO89SKEvQjaMk22FTYhImrbqkbkN
  • Chose drive to use:> 0 # 输入 0 回车
  • Found drive 'root' of type 'business', URL: https://onedroptbsteduau-my.sharepoint.com/personal/102419_onmicrosoft_net/Documents
  • Is that okay?
  • y) Yes
  • n) No
  • y/n> y # 输入 y 回车
  • 2019/10/11 17:44:44 ERROR : Failed saving config "drive_id" = "b!ZyWPB3G6-EetswlYu40wymfxwt_DMENCvHVsnO89SKEvQjaMk22FTYhImrbqkbkN" in section "od" of the config file: section 'od' not found
  • 2019/10/11 17:44:44 ERROR : Failed saving config "drive_type" = "business" in section "od" of the config file: section 'od' not found
  • --------------------
  • [od]
  • type = onedrive
  • token = {"access_token":"xxx","token_type":"Bearer","refresh_token":"xxx","expiry":"2019-10-11T18:44:28.775745+08:00"}
  • drive_id = b!ZyWPB3G6-EetswlYu40wymfxwt_DMENCvHVsnO89SKEvQjaMk22FTYhImrbqkbkN
  • 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 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 回车,退出配置

完成上述步骤后,你将看到 Powershell 窗口出现类似下面的代码片段,其中 xxx 很长,已被删去。不要关闭窗口,待会要将它复制到 VPS 中(上下的分割线不复制)。

  • --------------------
  • [od]
  • type = onedrive
  • token = {"access_token":"xxx","token_type":"Bearer","refresh_token":"xxx","expiry":"2019-10-11T18:44:28.775745+08:00"}
  • drive_id = b!ZyWPB3G6-EetswlYu40wymfxwt_DMENCvHVsnO89SKEvQjaMk22FTYhImrbqkbkN
  • drive_type = business
  • --------------------

安装 Rclone

x86 架构可直接 复制 下面的安装命令 粘贴 到 SSH 窗口中 回车ARM 等其他架构的安装包不妨到 官网 下载。

Debian 9+/Ubuntu 18+ x64

  • curl -O https://downloads.rclone.org/rclone-current-linux-amd64.deb && \
  • dpkg -i rclone-current-linux-amd64.deb

CentOS 7+ x64

  • curl -O https://downloads.rclone.org/rclone-current-linux-amd64.rpm && \
  • rpm -i rclone-current-linux-amd64.rpm

导入 OneDrive 配置

复制以下命令粘贴到 SSH 窗口中回车。

  • CONF_DIR=/root/.config/rclone
  • [[ ! -d "${CONF_DIR}" ]] && mkdir -p "${CONF_DIR}"
  • cat > "${CONF_DIR}/rclone.conf"

随后 复制 第一步得到的包含 OneDrive Token 的 配置内容(Powershell 复制方式为:选中内容后回车。上下分割线不要复制),粘贴 到 SSH 窗口中 回车,随后按 Ctrl + D 保存。

测试 OneDrive 是否对接成功

复制粘贴以下命令回车,观察能否获取 OneDrive 文件列表。

  • rclone ls od:/

复制粘贴以下命令回车,观察能否上传 testfile 文件到网盘根目录。

  • touch testfile
  • rclone copy testfile od:/

为 Aria2 添加自动上传脚本

使用 Visual Studio Code 等高级文本编辑器,修改下面脚本中的 LOCAL_DIR,即 Aria2 下载路径;REMOTE_DIR,即 OneDrive 上传路径后,复制粘贴到 SSH 窗口中回车。

Shell Code

  • SAVE_DIR=/usr/local/etc/aria2-rclone
  • [[ ! -d "${SAVE_DIR}" ]] && mkdir -p "${SAVE_DIR}"
  • touch "${SAVE_DIR}/upload.sh"
  • chmod +x "${SAVE_DIR}/upload.sh"
  • cat > "${SAVE_DIR}/upload.sh" <<\EOF
  • #!/usr/bin/env bash
  • GID="$1"
  • FILE_NUM="$2"
  • FILE="$3"
  • ##############################
  • LOCAL_DIR=/mnt/aria2/downloads
  • REMOTE_DIR=od:/Movies
  • ##############################
  • LOG_FILE=/usr/local/etc/aria2-rclone/upload.log
  • function analyse_directory() {
  • directory="${FILE}"
  • parent_directory="$(dirname "${directory}")"
  • while [[ "${parent_directory}" != "${LOCAL_DIR}" ]]; do
  • has_sub_directory=1
  • directory="${parent_directory}"
  • parent_directory="$(dirname "${parent_directory}")"
  • done
  • if [[ "${has_sub_directory}" ]]; then
  • FILE="${directory}"
  • REMOTE_DIR="${REMOTE_DIR}${directory#$parent_directory}"
  • fi
  • }
  • [[ ! "${FILE_NUM}" ]] && exit
  • [[ "${FILE_NUM}" -eq 0 ]] && exit
  • analyse_directory
  • cat >> "${LOG_FILE}" <<ENDOFFILE
  • =========================================================================
  • Local: $FILE
  • Remote: ${REMOTE_DIR}
  • ENDOFFILE
  • rclone copy "${FILE}" "${REMOTE_DIR}" --log-file "${LOG_FILE}" --stats=5m --stats-one-line --log-level INFO
  • # 如需上传后删除文件,请删掉下一行开头的 '#'
  • # rm -rf "${FILE}"
  • EOF

随后,修改 Aria2 配置文件 aria2.conf,在其中添加下面这行即可。

  • on-download-complete=/usr/local/etc/aria2-rclone/upload.sh

最后,重启 Aria2,添加任务,观察下载完毕后能否上传到 OneDrive,上传日志可通过以下命令查看。

  • cat /usr/local/etc/aria2-rclone/upload.log
TG 大佬群 QQ 大佬群

最后编辑于: 2019 年 11 月 20 日
返回文章列表 文章二维码
本页链接的二维码
打赏二维码
添加新评论

Loading captcha...

  • OωO
  • |´・ω・)ノ
  • ヾ(≧∇≦*)ゝ
  • (☆ω☆)
  • (╯‵□′)╯︵┴─┴
  •  ̄﹃ ̄
  • (/ω\)
  • ∠( ᐛ 」∠)_
  • (๑•̀ㅁ•́ฅ)
  • →_→
  • ୧(๑•̀⌄•́๑)૭
  • ٩(ˊᗜˋ*)و
  • (ノ°ο°)ノ
  • (´இ皿இ`)
  • ⌇●﹏●⌇
  • (ฅ´ω`ฅ)
  • (╯°A°)╯︵○○○
  • φ( ̄∇ ̄o)
  • ヾ(´・ ・`。)ノ"
  • ( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
  • (ó﹏ò。)
  • Σ(っ °Д °;)っ
  • ( ,,´・ω・)ノ"(´っω・`。)
  • ╮(╯▽╰)╭
  • o(*////▽////*)q
  • >﹏<
  • ( ๑´•ω•) "(ㆆᴗㆆ)
  • (。•ˇ‸ˇ•。)
  • 泡泡
  • 阿鲁
  • 蛆音娘
  • 小埋
  • 颜文字

已有 8 条评论
  1. 强调几点:(该留言由系统自动生成!)
    1. 请不要刷广告,本站没有流量!
    2. 我不回复虚假邮箱,因为回复了你也看不到!
    3. 存在必须回复的隐藏内容时,可以直接使用表情框里的阿鲁表情!

  1. 小W 小W   Windows 10 x64 Edition  Google Chrome 69.0.3497.100

    可以写一下自动上传 Google drive 的脚本吗

    1. LOGI LOGI   Windows 10 x64 Edition  Google Chrome 78.0.3904.87

      @小 W 因为上传用的是 rclone,所以 Google Drive 应该也可以直接用,只要把脚本的 REMOTE_DIR,也就是上传目录改成谷歌就行了

  2. anonymous anonymous   Windows 10 x64 Edition  Firefox 69.0

    我在 VPS 试了一下,离线下载磁力链接时遇到了问题。下载一个普通文件成功了,OneDrive 也收到了上传。下载磁力链接完后 CPU 占用满了,OneDrive 上也没有收到上传。我没有继续折腾 ,换了个脚本,离线下载没问题了:https://p3terx.com/archives/offline-download-of-onedrive-gdrive.html
    最后还是感谢一下博主,教程很详细。

    1. LOGI LOGI   Android 9  Google Chrome 77.0.3865.116

      @anonymous 好的吧,我在斐讯 n1 上跑了好多天都没问题,或许你可以把 log 发给我看一下

    2. anonymous anonymous   GNU/Linux x64  Firefox 69.0

      @LOGI 感谢你的回复,本人 Linux 新手,如果你说的是 /usr/local/etc/aria2-rclone/upload.log 这个日志的话,不知为什么已经没了,算了算了,我实在折腾不动了

    3. LOGI LOGI   Android 9  Google Chrome 77.0.3865.116

      @anonymous 好的,感谢你的反馈

  3. repostone repostone   Windows 8.1 x64 Edition  Google Chrome 63.0.3239.132

    想不到就一个下载也要这么麻烦。

    1. LOGI LOGI   Android 9  Google Chrome 77.0.3865.116

      @repostone 哈哈哈,用 linux 的人觉得很舒服