先来段抖音撩妹祖师爷的视频: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数据过来:
重要的数据是:
"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去请求
请求这个网页会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; ?>