快手视频无水印下载实现-2020年最新0+

20,103 views / 2020.03.14 / 9:09 下午

上文发了抖音的视频解析脚本后(原文:https://www.71j.cn/archives/493),很多朋友来问快手的有没有。
晚上吃完饭闲着没事,我把快手的安卓端逆向解析了下,发现也没什么难的,关键是有个签名要计算出来。
好,接下来,我们来解析这个地址:https://v.kuaishou.com/s/J87xkobF

$url = "https://v.kuaishou.com/s/J87xkobF";

首先把从apk中提取的几个神秘变量标记出来:

$salt = "382700b563f4";
$client_key = "3c2cd3f3";
$textApi = "http://api.gifshow.com/rest/n/tokenShare/info/byText";

接下来,算签名:

$str = "client_key=3c2cd3f3shareText=".$url.$salt;
$sign = md5($str);

然后获取视频的真实地址:

$data = http_build_query(array("client_key"=>$client_key,"shareText"=>$url,"sig"=>$sign));
    $opts = array(
      'http'=>array(
        'method'=>"POST",
        'header'=>$header. "Content-Length: " . strlen($data) . "\r\n",
        'content'=>$data
      )
    );
    $context = stream_context_create($opts);
    $content = file_get_contents($textApi, false, $context);

搞定。

完整的代码如下:

function kuaishou($url){
    //url: https://v.kuaishou.com/s/J87xkobF
    $salt = "382700b563f4";
    $str = "client_key=3c2cd3f3shareText=".$url.$salt;
    $sign = md5($str);
    $header = "User-Agent: Mozilla/5.0 (iPhone; CPU iPhone OS 12_1_4 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/16D57 Version/12.0 Safari/604.1\r\n";
    $header .="Content-type: application/x-www-form-urlencoded\r\n";
    $data = http_build_query(array("client_key"=>"3c2cd3f3","shareText"=>$url,"sig"=>$sign));
    $opts = array(
      'http'=>array(
        'method'=>"POST",
        'header'=>$header. "Content-Length: " . strlen($data) . "\r\n",
        'content'=>$data
      )
    );
    $context = stream_context_create($opts);
    $content = file_get_contents("http://api.gifshow.com/rest/n/tokenShare/info/byText", false, $context);
    $j1 = json_decode($content, true);
    if($j1['result']!=1) exit("系统分析错误");
    echo $j1['shareTokenDialog']['feed']['main_mv_url'];
}

抖音视频无水印下载实现-2020年最新1+

120,493 views / 2020.03.11 / 12:12 上午

既然搜到了本文,您自然知道视频没有水印的重要性,那么如何来实现呢,读完本文,您会有透彻的了解。
为了逻辑清晰,便于讲解,本文借助PHP解析视频源地址,然后通过JSBOX将视频下载的手机,当然您也可以完全用JSBOX实现全部逻辑。

废话不多说,直接上代码:

<?php
$url = $_POST['u'];//这个u就是抖音分享单个视频后复制到剪贴板的地址
!preg_match("/^https/i",$url)&&exit("403");//做个简单的post验证
$header = "User-Agent: Mozilla/5.0 (Linux; Android 8.0; Pixel 2 Build/OPD3.170816.012) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.70 Mobile Safari/537.36\r\n";
$opts = array(
'http'=>array(
'method'=>"GET",
'header'=>$header
)
);
$context = stream_context_create($opts);
$content = file_get_contents($url, false, $context);
$try_itemId = preg_match('/itemId\: "([0-9]+)"/',$content, $itemId_match);
$try_dytk = preg_match('/dytk\: "([0-9a-z]+)"/',$content, $dytk_match);
if($try_itemId&&$try_dytk!=1) exit("系统分析错误");
$iteamId = $itemId_match[1];
$dytk = $dytk_match[1];
$cmd = file_get_contents("https://www.iesdouyin.com/web/api/v2/aweme/iteminfo/?item_ids=".$iteamId."&dytk=".$dytk, false, $context);
$j1 = json_decode($cmd,true);
echo ($j1['item_list'][0]['video']['play_addr']['url_list'][0]);

?>

服务端代码完毕。接下来用jsbox获取剪贴板中的抖音分享链接,将链接POST发送到服务端即可。这部分实现比较简单,就不再赘述。

至此,完毕。