夸克网盘转存并存储落地PHP代码

码语者说
• 阅读 160

前言

最近夸克网盘推广很火,晓杰就研究了下夸克自动转存!

代码

Quark.php

<?php


class Quark
{
    private $cookie ="夸克网盘CK";
    public function getShareInfo($shareUrl){
        preg_match('|\/s\/(\w+)|',$shareUrl,$shareUrlArr);
        if (empty($shareUrlArr[1])){
            return false;
        }
        $code = $shareUrlArr[1];
        $md5 = md5($code.'Kuakewangpan&^*') ;
        $header[]="Content-Type: application/json";
        $header[]="Accept: application/json, text/plain, */*";
        $header[]="Cache-Control: no-cache";
        $header[]="Host: drive-pc.quark.cn";
        $header[]="User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36";
        $header[]="Referer: ".$shareUrl;
        $postUrl="https://drive-pc.quark.cn/1/clouddrive/share/sharepage/token?pr=ucpro&fr=pc&uc_param_str=&__dt=".$this::random_str(3,1)."&__t=".$this::getMillisecond();
        $postdata = '{"pwd_id":"'.$code.'","passcode":""}';
        $data =   $this::getCurl($postUrl,$postdata,$this->cookie,$header);
        $dataArr =json_decode($data,true);
        if ($dataArr['status']==200){
            $stoken = $dataArr['data']['stoken'];
            $title = $dataArr['data']['title'];
            $selectCount =  db('netdisk')->where(array(
                'title'=>$title,
                'type'=>1
            ))
                ->count();
            if ($selectCount>=1){
                return true;
            }
            $postUrl ="https://drive-pc.quark.cn/1/clouddrive/file/search?pr=ucpro&fr=pc&uc_param_str=&q=".urlencode($title)."&_page=1&_size=50&_fetch_total=1&_sort=file_type:desc,updated_at:desc&_is_hl=1";
            $data =   $this::getCurl($postUrl,0,$this->cookie,$header);
            $dataArr =json_decode($data,true);
            $sscount = sizeof($dataArr['data']['list']);
            for ($s=0;$s<$sscount;$s++){
                $pdir_fid = $dataArr['data']['list'][$s]['pdir_fid'];
                if("d00391b750c84d3fa5f137a826409c42"==$pdir_fid){
                    $newFileId = $dataArr['data']['list'][$s]['fid'];
                    break;
                }
            }
            if (!empty($newFileId)){
                goto a;
            }
            $postUrl =  "https://drive-pc.quark.cn/1/clouddrive/share/sharepage/detail?pr=ucpro&fr=pc&uc_param_str=&pwd_id={$code}&stoken=".urlencode($stoken)."&pdir_fid=0&force=0&_page=1&_size=50&_fetch_banner=1&_fetch_share=1&_fetch_total=1&_sort=file_type:asc,updated_at:desc&__dt=".$this::random_str(4,1)."&__t=".$this::getMillisecond();
            $data1 =   $this::getCurl($postUrl,0,$this->cookie,$header);
            $dataArr1 =json_decode($data1,true);
            if ($dataArr1['status']==200){
                if (empty($dataArr1['data']['list'][0]['fid'])){
                    return false;
                }

                $fid_list = $dataArr1['data']['list'][0]['fid'];
                $fid_token_list = $dataArr1['data']['list'][0]['share_fid_token'];
                $postdata ="{\"fid_list\":[\"$fid_list\"],\"fid_token_list\":[\"$fid_token_list\"],\"to_pdir_fid\":\"d00391b750c84d3fa5f137a826409c42\",\"pwd_id\":\"$code\",\"stoken\":\"$stoken\",\"pdir_fid\":\"0\",\"scene\":\"link\"}";
                $randomTime=$this::random_str(5,1);
                $postUrl="https://drive-pc.quark.cn/1/clouddrive/share/sharepage/save?pr=ucpro&fr=pc&uc_param_str=&__dt=".$randomTime."&__t=".$this::getMillisecond();
                $data =   $this::getCurl($postUrl,$postdata,$this->cookie,$header);
                $dataArr =json_decode($data,true);
                if ($dataArr['status']==200){
                    $ss=0;
                    do{
                        sleep(2);
                        $task_id = $dataArr['data']['task_id'];
                        $randomTime= $randomTime +$this::random_str(4,1);
                        $postUrl ="https://drive-pc.quark.cn/1/clouddrive/task?pr=ucpro&fr=pc&uc_param_str=&task_id=$task_id&retry_index=0&__dt=".$randomTime."&__t=".$this::getMillisecond();
                        $data =   $this::getCurl($postUrl,0,$this->cookie,$header);
                        $dataArr =json_decode($data,true);
                        if ($dataArr['data']['status']==3){
                            return false;
                        }
                        $ss++;
                    }while($ss<2 && empty($dataArr['data']['save_as']['save_as_top_fids'][0]));

                    if ($dataArr['status']==200 && !empty($dataArr['data']['save_as']['save_as_top_fids'][0])){
                        $newFileId = $dataArr['data']['save_as']['save_as_top_fids'][0];
                        a :
                        $postUrl = "https://drive-pc.quark.cn/1/clouddrive/share?pr=ucpro&fr=pc&uc_param_str=";
                        $postdata = "{\"fid_list\":[\"$newFileId\"],\"title\":\"$title\",\"url_type\":1,\"expired_type\":1}";
                        $data =   $this::getCurl($postUrl,$postdata,$this->cookie,$header);
                        $dataArr =json_decode($data,true);
                        if ($dataArr['status']==200 && !empty($dataArr['data']['task_id'])){
                            sleep(1);
                            $task_id = $dataArr['data']['task_id'];
                            $postUrl = "https://drive-pc.quark.cn/1/clouddrive/task?pr=ucpro&fr=pc&uc_param_str=&task_id=$task_id&retry_index=1";
                            $data =   $this::getCurl($postUrl,0,$this->cookie,$header);
                            $dataArr =json_decode($data,true);
                            if ($dataArr['status']==200 && !empty($dataArr['data']['share_id'])){
                                $share_id=$dataArr['data']['share_id'];
                                $postUrl = "https://drive-pc.quark.cn/1/clouddrive/share/password?pr=ucpro&fr=pc&uc_param_str=";
                                $postdata = "{\"share_id\":\"$share_id\"}";
                                $data =   $this::getCurl($postUrl,$postdata,$this->cookie,$header);
                                $dataArr =json_decode($data,true);
                                if ($dataArr['status']==200 && !empty($dataArr['data']['share_url'])){
                                    $share_url = $dataArr['data']['share_url'];
                                    $newTitle = $dataArr['data']['title'];
                                    $newCode = $dataArr['data']['pwd_id'];
                                    $dbArr = array(
                                        'title'=>$title,
                                        'code'=>$code,
                                        'url'=>$shareUrl,
                                        'md5'=>$md5,
                                        'new_code'=>$newCode,
                                        'new_title'=>$newTitle,
                                        'new_url'=>$share_url,
                                        'file_id'=>$newFileId,
                                        'type'=>1,
                                    );
                                    db('netdisk')->insert($dbArr,true);
                                    return $dbArr;
                                }else{
                                    return false;
                                }
                            }else{
                                return false;
                            }
                        }else{
                            return false;
                        }
                    }else{
                        return false;
                    }
                }else{
                    return false;
                }
            }else{
                return false;
            }
        }else{
            return false;
        }
    }
    public static   function getCurl($url, $post = 0, $cookie = 0, $isIp=0,$header = 0, $nobaody = 0, $method = 'GET'){
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($ch, CURLOPT_TIMEOUT, 15);
        if (!empty($isIp)){
            curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
        }
        if ($post==1) {
            curl_setopt($ch, CURLOPT_POST, 1);
        }elseif($post){
            if ($method !='PUT'){
                $method = 'POST';
            }
            curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
            curl_setopt($ch, CURLOPT_CUSTOMREQUEST, $method);
        }
        if ($header) {
            curl_setopt($ch, CURLOPT_HEADER, true);
        }
        if ($cookie) {
            curl_setopt($ch, CURLOPT_COOKIE, $cookie);
        }
        if ($nobaody) {
            curl_setopt($ch, CURLOPT_NOBODY, 1);
        }

        curl_setopt($ch, CURLOPT_ENCODING, 'gzip');
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        $ret = curl_exec($ch);
        curl_close($ch);
        return $ret;
    }
}

SQL

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

-- ----------------------------
-- Table structure for fxw_netdisk
-- ----------------------------
DROP TABLE IF EXISTS `soujer_netdisk`;
CREATE TABLE `soujer_netdisk`  (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `url` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
  `md5` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
  `title` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
  `create_time` datetime(0) NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP(0),
  `code` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
  `pwd` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
  `new_title` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
  `new_url` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
  `type` int(1) NULL DEFAULT NULL COMMENT '1夸克网盘2UC网盘',
  `new_code` varchar(25) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
  `new_pwd` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
  `file_id` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
  PRIMARY KEY (`id`) USING BTREE,
  UNIQUE INDEX `11`(`md5`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 36604 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;

SET FOREIGN_KEY_CHECKS = 1;

Gitee

https://gitee.com/Soujer/quarkService

本文作者

Soujer 晓杰

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Python进阶者 Python进阶者
4年前
手把手教你轻松下载百度网盘超大文件
前言玩过百度网盘的都应该清楚它的强大,小编就是靠着百度网盘那强大的功能以及变态的存储空间才获得许多具有纪念价值的东西,比如某些Hacker资料,你懂的。但是小编一直以来都有一个心结未解开,那就是为毛每次使用百度网盘下载文件的时候就非得下载百度网盘客户端才可以了,估计先不说浪费时间和占用电脑资源,至少小编也是不乐意这样做的,毕竟小编电脑可是只有60个G的存储空
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Jacquelyn38 Jacquelyn38
4年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Stella981 Stella981
3年前
KaliTools说明书+BurpSuit实战指南+SQL注入知识库+国外渗透报告
!(https://oscimg.oschina.net/oscnet/d1c876a571bb41a7942dd9752f68632e.gif"15254461546.gif")0X00KaliLinux Tools中文说明书!(https://oscimg.oschina.net/oscnet/
Wesley13 Wesley13
3年前
U盘启动安装mac正版OSX EI系统系统
第一步:启动盘的制作(1)在制作启动盘之前就要先下载OSX的正版系统下载地址在http://bbs.feng.com/forum.php?modviewthread&tid9566923&page1找到的,使用迅雷下载比较快,官网有点慢!(http://static.oschina.net/uploads/space/2016/0908/
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
3年前
PHP创建多级树型结构
<!lang:php<?php$areaarray(array('id'1,'pid'0,'name''中国'),array('id'5,'pid'0,'name''美国'),array('id'2,'pid'1,'name''吉林'),array('id'4,'pid'2,'n
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
1年前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这
美凌格栋栋酱 美凌格栋栋酱
5个月前
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(