title
众所周知,OneDrive大容量,内容限制宽松,入手门槛低,加上目前国际版拥有不错的cdn加速下载效果,是分享网络文件的一个不错选择,尤其是反感百度网盘党的上佳选择。
那么,OneDrive分享整个文件夹,官方提供的下载方式是非常有限的:
1.你自己一个个文件夹点开,手动一个个下载,然后手动本地新建文件夹结构目录并整理还原;
2.使用官方的打包文件夹为zip包下载(忍受官方服务器打包缓慢甚至抽风报错的极差体验,以及最大20GB单个zip包的限制);
3.下着下着网络中断,没有断点续传,重头再来吧!
所以,批量下载整个文件夹的需求是非常迫切的,还好,大佬们都做过不少类似功能的批量文件结构获取脚本,这里用SharePoint Download List Generator来做演示:

一,实现逻辑和原理

首先,网络上分享的OneDrive链接,和我们自己的微软账号基本上不会是同一个域,因此许多官方手段,同域转移,mover之类,或者rclone配置授权等,是不能直接采用的,当然,大佬们也没空一个个拉你邮箱进去当来宾什么的;
那么解决方案只能从公开分享的页面爬取完整的文件目录结构,并且通过网页cookie授权拿到FedAuth来拼接完整的下载请求,通过脚本的整理加工,这里可以批量生成aria2下载请求链接,存入完整下载任务列表到txt文档,就可以使用aria2开启指定下载任务了

二、工具部署

1.Aria2c下载器部署

这玩意儿相信各大松鼠党都早有耳闻或者轻车熟路了,直接下载官方zip包解压到合适地方即可,此工具需要python3环境,我们都依次安装,顺便将aira2c下载器所在路径加入系统path环境,这里都略过,很简单,我的博客之前多次提到,百度谷歌也有很多

2.SharePoint下载列表生成器部署

SharePoint Download List Generator
直接下载上述项目中的requirements.txt和sharepoint_gen_aria2_download_list.py脚本即可,解压到自己喜欢的目录,当然你也可以顺手加入系统环境变量;
在此生成器目录内,资源管理器地址栏输入cmd直接在此位置快速开启cmd窗口,按项目提示,依次安装所需组件,并运行脚本:

pip install -r requirements.txt
python sharepoint_gen_aria2_download_list.py

接下来按着提示,需要我们输入资源网址,这里演示为各位asmr爱好者喜欢的小北方网址,随便找个OneDrive分享地址,点进去
Asmr
获取到公开分享地址为:
同人音声1.5TBOneDrive合集地址
根据说明,我们需要获取到两个小玩意:

  • 完整网址路径;
  • FedAuth授权cookies.
    对于完整分享网址,一般来说,和公开的网址基本一致,流程简单说下:

1、SharePoint分享页面按下F12打开开发者工具(chrome浏览器),找到Network标签,F5重新载入页面后,搜索RenderListDataAsStream请求查看response返回栏,在此栏目里ctrl+F打开搜索,输入listUrl进行查询,获得地址为/personal/ztxdjj_ztxdjj_me/Documents,与主域拼接获得:
https://ztxdjj-my.sharepoint.com/personal/ztxdjj_ztxdjj_me/Documents/
这就是该网站的根目录
listUrl

配置过rclone应该熟悉,这是OneDrive默认分配的网站地址(SharePoint,OneDrive在微软管理后台都按着网站来进行部署的)

2、然后就是提示输入FedAuth认证信息了,类似的方法,F12打开开发者控制台,选择network标签,刷新页面,搜索fedAuth,在第一个出现的位置就是了,选择后右侧查看Headers信息里面的set-cookies:FedAuth信息
FedAuth
将FedAuth=之后所有内容复制,直到第一个分号结束,如下图,就是你需要粘贴进去的授权信息了:
FedAuth-input

3、接下来就是输入你指定的下载路径,这里搭配我之前提到的计划任务rclone move监控路径

C:\Users\Administrator\Downloads\Baidudisk\同人音声

稍等片刻,提示你获取完整下载列表成功,已保存到当前目录下aria2-links.txt文档中
aria2-links.txt
你可以简单复制清单txt文档到你的aria2c目录下,执行cmd下载任务指令即可:

aria2c --header="Cookie:FedAuth=xxxxxxxxxxxxxxxxxxx;" --input-file=aria2-links.txt --max-concurrent-downloads=2 --max-connection-per-server=5 --save-session=session.txt --save-session-interval=30 --file-allocation=none

连接数,速度限制参数自行调整
接下来就可以看到aria2c开始欢快地跑起来了
task-running

搭配rclone/gclone move脚本,即可实现小盘鸡自动上传到OneDrive/Google drive了
auto-download&upload
温馨提示:OneDrive网页cookies有效期约为24小时,失效后,重新获取FedAuth,然后对比session.txt剩余的未完成任务,打开新生成的aria2-links.txt,把已完成的任务删掉后保存,再次运行新的FedAuth参数下载指令,即可继续任务。

自动上传脚本和计划任务这里顺带简单介绍下:

三、Windows下搬运百度盘文件到OneDrive的简单配置

很多mjj喜欢把吃灰的小盘vps dd win搬运百度盘文件到OneDrive或者Google drive,但是大部分吃灰vps都是10-50gb这种小盘,随搬随删如果手动操作肯定费神费力,这里提供个大家都常用的工具和配置方法,简单实现无人值守无缝搬运数tb 百度盘文件到你的od gd:
工具:rclone即可
步骤:
1.新建rclone拷贝bat脚本
在你的rclone目录新建bat文件,我这里命名Rclone-move.bat,编辑写入以下内容

rclone move "C:/Users/Administrator/Downloads/Baidudisk/" "Onedrive:/Baidudisk/" -v --stats 15s --transfers 2 --bwlimit 50M  --onedrive-no-versions  --cache-chunk-size 10M --local-encoding=None --exclude "*.downloading" --log-file=C:\Software\rclone-v1.56.2-windows-amd64\log.txt --delete-empty-src-dirs --retries 1 --dry-run

解释:使用rclone move指令即可实现搬运本地路径文件到目标位置,
--exclude "*.downloading" 排除正在下载的度盘文件,
--log-file= 则是日志文件路径,你可以搭配日志等级指令-v或者-q(仅记录错误日志)来检查运行状况
--local-encoding=None 此指令是折中解决OneDrive文件命名编码支持问题,下一个rclone版本将有效修复,目前版本不加这个,则无法拷贝一些特殊字符文件,如书名号中文问号之类的
--delete-empty-src-dirs 则是move完毕后移除空目录
--onedrive-no-versions 则是去掉旧版本,防止OneDrive重复上传同一个文件,占用历史文件版本空间
--dry-run 则是测试用,运行一遍后自己检查log日志文件是否达到预期,满意后删除此参数
2.新建windows日志计划安排
导入此计划任务配置,自行修改即可:

计划任务配置

<?xml version="1.0" encoding="UTF-16"?>
<Task version="1.2" xmlns="http://schemas.microsoft.com/windows/2004/02/mit/task">
  <RegistrationInfo>
    <Date>2021-12-21T15:48:27.3169591</Date>
    <Author>WINDOWS\Administrator</Author>
    <Description>每5分钟检查一次本地百度盘文件C:/Users/Administrator/Downloads/Baidudisk/ 并移动已完成文件到Onedrive盘/Baidudisk/文件夹下</Description>
  </RegistrationInfo>
  <Triggers>
    <CalendarTrigger>
      <Repetition>
        <Interval>PT5M</Interval>
        <StopAtDurationEnd>false</StopAtDurationEnd>
      </Repetition>
      <StartBoundary>2021-12-21T07:45:51.0718017Z</StartBoundary>
      <Enabled>true</Enabled>
      <ScheduleByDay>
        <DaysInterval>1</DaysInterval>
      </ScheduleByDay>
    </CalendarTrigger>
  </Triggers>
  <Principals>
    <Principal id="Author">
      <UserId>WINDOWS\Administrator</UserId>
      <LogonType>InteractiveToken</LogonType>
      <RunLevel>LeastPrivilege</RunLevel>
    </Principal>
  </Principals>
  <Settings>
    <MultipleInstancesPolicy>IgnoreNew</MultipleInstancesPolicy>
    <DisallowStartIfOnBatteries>false</DisallowStartIfOnBatteries>
    <StopIfGoingOnBatteries>true</StopIfGoingOnBatteries>
    <AllowHardTerminate>false</AllowHardTerminate>
    <StartWhenAvailable>true</StartWhenAvailable>
    <RunOnlyIfNetworkAvailable>false</RunOnlyIfNetworkAvailable>
    <IdleSettings>
      <StopOnIdleEnd>true</StopOnIdleEnd>
      <RestartOnIdle>false</RestartOnIdle>
    </IdleSettings>
    <AllowStartOnDemand>true</AllowStartOnDemand>
    <Enabled>true</Enabled>
    <Hidden>false</Hidden>
    <RunOnlyIfIdle>false</RunOnlyIfIdle>
    <WakeToRun>false</WakeToRun>
    <ExecutionTimeLimit>PT0S</ExecutionTimeLimit>
    <Priority>7</Priority>
    <RestartOnFailure>
      <Interval>PT1M</Interval>
      <Count>3</Count>
    </RestartOnFailure>
  </Settings>
  <Actions Context="Author">
    <Exec>
      <Command>C:\Software\rclone-v1.56.2-windows-amd64\Rclone-move.bat</Command>
      <WorkingDirectory>C:\Software\rclone-v1.56.2-windows-amd64\</WorkingDirectory>
    </Exec>
  </Actions>
</Task>

保存为Rclone-move.xml文件,然后任务计划程序导入计划选择此计划任务xml文件即可,路径自行匹配,执行逻辑为2021-12-21 15:48:27后每隔5分钟检查一次是否在执行,如果在拷贝中,则等待下一个5分钟再次检查。请在rclone bat脚本内指令检查无误后再执行此计划任务,同时修改启动程序路径为你自己实际rclone bat文件位置。
这样你就不用担心硬盘太小,或者折腾其他工具了。

我们这里演示的是使用gclone上传到Google drive,参考指令如下:

gclone move "C:/Users/Administrator/Downloads/Baidudisk/同人音声" "GdriveSA:{xxxxxxxyyyyyyyyyzzzzzzzz}" -v --stats 15s --transfers 2 --bwlimit 50M   --cache-chunk-size 5M --local-encoding=None --exclude "*.downloading" --log-file=C:\Software\rclone-v1.56.2-windows-amd64\log_asmr.txt --delete-empty-src-dirs --retries 1

如果你不考虑之后将google drive文件传到OneDrive的话, --local-encoding=None参数可以去掉

好了,这样你只需要丢给vps,躺着睡一觉回来,1.5TB文件就成功地从大佬们分享的OneDrive公开页面,自动存入你的Google drive了
Google drive
而你的花费或许比我这年付11.99刀,virmach大水牛每月3/5tb流量的成本更低。
最后祝大家身体健康。

Last modification:April 27, 2022
If you think my article is useful to you, please feel free to appreciate