admin管理员组文章数量:1583031
最近学会使用DepotDownloader下载旧版游戏,担心有一天steam不给下载了,所以就想他们都下载下来,然后保存到网盘上,然后分享出来。
我所下载的游戏叫《泰拉瑞亚》最新版有1.3万多个文件,文件大小在400m左右,在我电脑上下载需要20多分钟,而服务器上只需2分钟不到,这个速度非常棒啊,于是想用服务器来完成下载。DepotDownloader需要 环境支持,正好centos能够安装.
安装
yum install dotnet
下载并解压 depotdownloader
wget https://github/SteamRE/DepotDownloader/releases/download/DepotDownloader_2.4.0/depotdownloader-2.4.0-prerelease.zip
unzip depotdownloader-2.4.0-prerelease.zip -d ./client/
下载旧版
dirName=1.4.0.5
manifest=5578977409290338966
dotnet ./client/DepotDownloader.dll \
-username $userName \
-password $password \
-app 105600 \
-depot 105603 \
-manifest $manifest \
-dir ./$dirName \
-validate \
-remember-password
考虑到游戏文件数量比较多,但实际文件大小不大,打包成zip再从服务器下载下来比较靠谱,一来文件小一点节约带宽,而来可以保证文件完整性。
打包成zip,考虑到“.DepotDownloader”可能会带有我个人的steam信息,而且这也非游戏必须部分,所以打包的时候排除掉。
zip -q -9 -r $dirName.zip "./$dirName" -x "./$dirName/.DepotDownloader/*"
此时就是把刚才的zip下载到本地,然后传到百度网盘上。服务器的带宽是1m的,下载速度只有100多kb/s,这个速度非常慢,整理资料发现可以从steam下载到90多个旧版,这速度还不得下到猴年马月。
很自然地,便想到百度网盘有没有命令行版,这样可以自己从服务器上上传到百度云盘。于是找到 bypy 和 BaiduPCS-Go。
使用BaiduPCS-Go时经常提示验证码输错,有些验证码很清晰也很好识别是不可能输错的,即使有几率输入正确后,仍然提示要手机和邮箱验证,点了手机验证,手机迟迟没收到验证码。此方法不通。
使用bypy时看到这些提示,也是有些哭笑不得,看来百度网盘官方也不太在意pcs接口的可靠性。根据提示我安装了1.6.10版。然后上传文件成功!
起初我以为bypy能列出我网盘的文件,当上传完一个测试文件后才发现,原来文件被单独放在 “/我的应用数据/bypy/”文件夹下,看到这有点小激动,直接传到百度网盘上可行!!!由于上面提示百度网盘返回的md5全错了,我用百度网盘下载了刚才的文件,然后做md5校验,发现是一致的,这个工具是有效的!!!
经过对比整理出90多个版本,于是自己写了一个批处理来执行。目前来说整个工作大概有个步骤:
从steam上下载–>打包成zip–>上传到百度云盘
由于服务器的 磁盘空间只有40GB,目前仅剩下15GB左右的空间。从steam下载游戏文件,再打包成zip,这就是双倍大小,下完30个旧版后,磁盘空间就剩下3GB了,不能一口气单独执行完上面的单个步骤,因为考虑到从steam上下载时间过长可能会要验证什么的,所以先做好一次性下完比较保险。所以当一个zip被成功上传到百度云盘上这个zip都应被删除,上面的三个步骤应该是往复90次的。于是脚本写成这样了。
#!/bin/bash
# https://steamdb.info/app/105600/
# https://steamdb.info/depot/105601/manifests/
# 获得本sh所在目录
sh_path=$(cd `dirname $0`; pwd)
cd "$sh_path"
userName=你的用户名
password=你的密码
depots=(
'1.4.1.2','7174777254123425714'
'1.4.0.5','5578977409290338966'
'1.4.0.1','982630871057430331'
'1.3.5.3','8115792227484220109'
)
for var in ${depots[@]};do
myArr=(${var//,/ })
dirName=${myArr[0]}
manifest=${myArr[1]}
# 从steam上下载游戏
dotnet $sh_path/client/DepotDownloader.dll -username $userName -password $password -app 105600 -depot 105601 -validate -remember-password -manifest $manifest -dir $sh_path/$dirName
# 压缩成zip
# 压缩完后,删除源文件
# 记录zip的md5,到时候从百度网盘下几个文件校验一下
zip -q -9 -r $dirName.zip "./$dirName" -x "./$dirName/.DepotDownloader/*"
rm -rf $dirName
md5sum $dirName.zip>>log_md5.txt
# 上传到百度云盘,完成后自动删除
bypy upload $dirName.zip
rm -rf $dirName.zip
done
吐槽一下,服务器支持临时提升带宽,在写脚本前把带宽升级成4m,过了一段时间发现速度还是太慢了,4m要到明早0点到期,想说今天下午升级4个小时的10m来加快进度,谁知道还是从1m开始计费,这不是多收费么,看来平台鼓励你一次性升完。。。
总结
- 得益于服务器的下行网络,服务器从steam下载文件稳定且快速,但受降于服务器带宽,从服务器上下载文件到本地,以及上传到百度网盘速度较慢。
- 服务器的磁盘读写能力也是很不错的,压缩操作挺快。
- 直接从服务器上传到百度网盘,节省了大量的下载和上传时间。
- 类似的任务,给服务器执行,高效且可靠,不用长时间挂机,也可以卸下心里负担。
写文章时,心情多少有点激动,多多少少有点感慨,服务器怎么这么给力,然后就是思路清晰,是高效解决问题的前提。
版权声明:本文标题:记录一次 用服务器下载文件,并上传到百度网盘的实践 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://www.elefans.com/xitong/1727903142a1137120.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论