- 需求
oppo云上有千张图片,手机不是oppo的手机想批量下载图片很麻烦,于是求救与我
- 登录oppo云,观察获取数据的方式
当访问下载图片时,发现它是get请求服务器 获取的图片链接从url可以看到 他包含以下参数
sign 登录的秘钥
fileId 文件id
fileName 文件名,(该文件名是 源文件名称经过base64转码后的)
bucket 存储位置
ctoken 认证的token经过测试发现,sign,bucket,ctoken 认证成功后,一段时间内是不变得,因此只需要传fileId,fileName即可
又发现了他得到相册列表的接口
他是通过mediaDates参数来获取相册的
因此有思路了,通过mediaList接口得到相册的列表,然后通过相册的文件信息去请求下载路径
观察到相册的日期可以再html标签中取到
去得到相册列表先去拼写mediaDates参数,然后请求,这里我用js实现
可以看到,请求正常,返回了相册的信息
然后我用js写了下下载文件的代码,完成下载任务
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<script src="js/jquery-3.3.1.min.js"></script>
<script src="js/jquery.base64.js"></script>
</head>
<body>
</body>
<script>
var sign = "7TK9keM2ha8YxlUOyAVeJKU9LqL39vWccrkar4GnNW4w9fo5zwXKaU49I8HGSpncEF-cso0K0FPP0aCE3Pfl";
var ctoken="1429539935";
var downlaodId=[];
var index = 0;
function downloada(){
setInterval(function(){$("#"+downlaodId[index++])[0].click();},5000);
}
$.ajax({
url: "demo.json",
type: "GET",
dataType: "json",
success: function(data) {
document.write("<a href='javascript:void(0);' onclick='downloada();'>开始批量下载</a>");
$.each(data.items, function(i, item) {
$.each(item.albumPCItemList, function(itemi, itemAlbumPCItemList) {
var autoId = "static" + i+itemi;
var str = "https://pcio1.ocloud.oppomobile.com/media/v1/downloadFile?"+
"sign="+sign+"&"+
"fileId="+ itemAlbumPCItemList.fileId+"&"+
"fileName="+$.base64.encode(itemAlbumPCItemList.fileName)+"&"+
"bucket=ssuupv80105841qiniu77&ctoken="+ctoken;
document.write("<a href="+str+" id="+autoId+" download="+item.date+"的照片:"+itemAlbumPCItemList.fileName+">"+itemAlbumPCItemList.fileName+"</a>"+"</br>");
downlaodId.push(autoId);
})
})
}
})
</script>
</html>
页面效果 以及 最终效果
//为了不让浏览器卡死,我每隔5秒去下载一个文件, 1400个文件大约2小时即可完成,挂起去玩耍去咯
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。