众所周知,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分享地址,点进去
获取到公开分享地址为:
同人音声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/
这就是该网站的根目录
配置过rclone应该熟悉,这是OneDrive默认分配的网站地址(SharePoint,OneDrive在微软管理后台都按着网站来进行部署的)
2、然后就是提示输入FedAuth认证信息了,类似的方法,F12打开开发者控制台,选择network标签,刷新页面,搜索fedAuth,在第一个出现的位置就是了,选择后右侧查看Headers信息里面的set-cookies:FedAuth信息
将FedAuth=之后所有内容复制,直到第一个分号结束,如下图,就是你需要粘贴进去的授权信息了:
3、接下来就是输入你指定的下载路径,这里搭配我之前提到的计划任务rclone move监控路径
C:\Users\Administrator\Downloads\Baidudisk\同人音声
稍等片刻,提示你获取完整下载列表成功,已保存到当前目录下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开始欢快地跑起来了
搭配rclone/gclone move脚本,即可实现小盘鸡自动上传到OneDrive/Google drive了
温馨提示: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了
而你的花费或许比我这年付11.99刀,virmach大水牛每月3/5tb流量的成本更低。
最后祝大家身体健康。
14 comments
导出显示成功 但是实际上links.txt里面是空的 怎么办?
我的我的 文件夹权限的问题 不过 下载变成570b的文件怎么办?
1.python 需求环境模块安装时注意是否成功;
2.SharePoint的FedAuth是复制FedAuth=之后所有内容复制,直到第一个分号结束,可尝试登录你的微软账号后获取;
3.github有其他的替代品,可以换个试试。
这些我很久没折腾了,可能微软有更新策略也说不定。
似乎下到几十g就触发api限制再也下不了了,谢谢,我自己再捣鼓捣鼓OωO
减少线程数,换ip或者登录账号后获取新的FedAuth都可以缓解,微软撑不住开始各种限制了
OωO
请问在F12界面中,选择Network标签,刷新完搜索FedAuth没有得到结果可能是什么原因呢,试了几个链接都是这样。
发现可以在cookies,https://XXXX-my.sharepoint.cn/里的FedAuth找到,下载上了。感谢教程
我这测试每个文件页面都有的,不太清楚是不是你浏览器关闭cookies功能了,你也可以尝试别的脚本解决下载问题:
https://github.com/axzxc1236/SharepointDownloader
谢谢大佬
rclone move我这里经常回头size differ error,就很离谱,没法覆盖远程文件
这个是转存到od的时候,微软对一些办公文档和网页文件进行了修改,加入参数--ignore-checksum --ignore-size即可,详见
通过rclone拷贝GoogleDrive至微软Onedrive一些细节配置和常见错误解决方法