• 需求
oppo云上有千张图片,手机不是oppo的手机想批量下载图片很麻烦,于是求救与我
  • 登录oppo云,观察获取数据的方式

clipboard.png

当访问下载图片时,发现它是get请求服务器 获取的图片链接
clipboard.png

从url可以看到 他包含以下参数
sign 登录的秘钥
fileId 文件id
fileName 文件名,(该文件名是 源文件名称经过base64转码后的)
bucket 存储位置
ctoken 认证的token

经过测试发现,sign,bucket,ctoken 认证成功后,一段时间内是不变得,因此只需要传fileId,fileName即可

又发现了他得到相册列表的接口

clipboard.png
他是通过mediaDates参数来获取相册的

因此有思路了,通过mediaList接口得到相册的列表,然后通过相册的文件信息去请求下载路径
观察到相册的日期可以再html标签中取到

clipboard.png

去得到相册列表先去拼写mediaDates参数,然后请求,这里我用js实现

clipboard.png

clipboard.png

可以看到,请求正常,返回了相册的信息

然后我用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>
页面效果 以及 最终效果

clipboard.png

clipboard.png

//为了不让浏览器卡死,我每隔5秒去下载一个文件, 1400个文件大约2小时即可完成,挂起去玩耍去咯


BaseAccept
1 声望3 粉丝