PHP抖音无水印解析视频代码(带源码)

流程:打开分享链接→获取头→得到真实地址→得到真实地址里面的videoID→通过抖音官方API获取json数据得到查询真实无水印视频地址的网页→Curl无水印网页→返回头部信息→取得抖音无水印视频地址

先来段抖音撩妹祖师爷的视频:https://v.douyin.com/NrRah9w/

这是app里面的分享链接,但是我们在网页中打开,发现是不一样的网址。

先说手机端的,在网页中打开出现的网址是:https://www.iesdouyin.com/share/video/7074203714344471816/

其中,7074203714344471816,是这部视频的videoid

那么我们怎么获取跳转的地址,PHP代码:

$header = get_headers('https://v.douyin.com/NrRah9w/',1);
$realurl = $header['Location'][1]; //获取真实链接

第一行代码先获取头,第二行获取真实链接,懂得都懂,自己用var_dump看

然后抖音有这么一个接口会返回视频数据,通过videoid来查询:

https://www.iesdouyin.com/web/api/v2/aweme/iteminfo/?item_ids=videoid

如:https://www.iesdouyin.com/web/api/v2/aweme/iteminfo/?item_ids=7074203714344471816

返回一大段json数据过来:

image-20220724175253267

重要的数据是:

"url_list":["https://aweme.snssdk.com/aweme/v1/playwm/?video_id=v0200fg10000c8m9t3jc77u6h9celcbg&ratio=720p&line=0"]}

"vid":"v0200fg10000c8m9t3jc77u6h9celcbg"

我们取json就是把他转换成数组,然后取vid,我们可以看到,访问url_list就是出现的是真实无水印的视频链接,那么我们通过vid就可以查询到真实无水印的视频地址

$getvid = json_decode('https://www.iesdouyin.com/web/api/v2/aweme/iteminfo/?item_ids=7074203714344471816', true);

$dy_vid= $getvid['item_list'][0]['video']['vid'];//得到vid

我们用curl去请求

https://aweme.snssdk.com/aweme/v1/playwm/?video_id=v0200fg10000c8m9t3jc77u6h9celcbg&ratio=720p&line=0

请求这个网页会302跳转到真实视频地址。

 

源码:

<?php
//抖音无水印超清解析(双端解析PC+APP)-by:银狐笔记 www.ityinhu.com
error_reporting(0);
$dy_share = $_GET['url'];
if(!isset($dy_share)||empty($dy_share)){
    echo '你没填分享链接';
    exit;
}
function douyin($shareurl){
    $header = get_headers($shareurl,1);
    $realurl = $header['Location'][1]; //获取真实链接
    //var_dump($realurl);
    $p_search='#(\d+)()?\s*?#s';    //  可以用explode(),这里用的正则
    preg_match_all($p_search,$realurl,$videoid);
    $videoid = $videoid[0][0];   //获取videoid
    if($realurl == NULL){
        $urlarr = explode('/',$shareurl);
        $videoid = $urlarr[4];
    }
    //var_dump($videoid);
    $vidjson = 'https://www.iesdouyin.com/web/api/v2/aweme/iteminfo/?item_ids='.$videoid;
    //var_dump($vidjson);
    $vidarr = file_get_contents($vidjson);
    $getvid = json_decode($vidarr, true);
    $dy_vid= $getvid['item_list'][0]['video']['vid'];//得到vid
    return $dy_vid;
}
global $vid;
$vid = douyin($dy_share);
//echo $vid;
function dyzl(){
    if($GLOBALS['vid']==NULL){
        echo '链接有误,无法解析';
        exit;
    }
    header("Content-Type: text/json;charset=utf-8");
    $url = 'https://aweme.snssdk.com/aweme/v1/play/?video_id='.$GLOBALS['vid'].'&ratio=1080p&line=0';
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_HEADER, 0);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    //若给定url自动跳转到新的url,有了下面参数可自动获取新url内容:302跳转
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
    //设置cURL允许执行的最长秒数。
    curl_setopt($ch, CURLOPT_TIMEOUT, 10);
    curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:47.0) Gecko/20100101 Firefox/47.0');
    curl_setopt($ch, CURLOPT_REFERER, $url);
    curl_setopt($ch, CURLOPT_ENCODING, 'gzip, deflate');
    $content = curl_exec($ch);
    //获取请求返回码,请求成功返回200
    $code = curl_getinfo($ch,CURLINFO_HTTP_CODE);
    //echo $code . "\n\n";
    
    //获取一个cURL连接资源句柄的信息。
    //$headers 中包含跳转的url路径 
    $headers = curl_getinfo($ch);
    //var_dump($headers);
    return $headers['url'];
}
$nomarkurl= dyzl();
echo $nomarkurl;

?>

 

赞 (0)