通过抓包得到数据地址,至于怎么抓包可以自行搜索,有很多。
https://is.snssdk.com/bds/cell/detail/?cell_type=1&aid=1319&app_name=super&cell_id=7008096407127117070
那么数据接口找出来了,我们直接上代码。
首先要获取cell_id对应的id
id是短链接跳转后截取到的
如链接:https://v.douyin.com/dB4yyd8/
$loc = get_headers($url, true)['Location'];
preg_match('/item\/(.*)\?/', $loc, $id);
通过以上我们就获取到了id
接下拼接连接curl请求获取数据
$getApi = 'https://is.snssdk.com/bds/cell/detail/?cell_type=1&aid=1319&app_name=super&cell_id='.$id[1];
$arr = json_decode($this->curl($getApi), true);
会返回Json数据,把我们需要的数据放到数组中
【这里要注意】
此时返回的视频链接是有水印的,我们要获取的是无水印的,那么还需要将"playwm"替换成"play"
$arr = [
'name' => $arr['item_list'][0]['author']['nickname'],//作者
'title' => $arr['item_list'][0]['share_info']['share_title'],//标题
'cover' => $arr['item_list'][0]['video']['origin_cover']['url_list'][0],//封面
'video' => str_replace('playwm', 'play', $arr['item_list'][0]["video"]["play_addr"]["url_list"][0])//无水印视频
]
];
此时数据获取就完成了,我们把数据输出
echo json_encode($arr, JSON_NUMERIC_CHECK | JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);
完整代码
$url = 'https://v.douyin.com/dB4yyd8/';
$loc = get_headers($url, true)['Location'][1];
preg_match('/video\/(.*)\?/', $loc, $id);
$arr = json_decode($this->curl('https://www.iesdouyin.com/web/api/v2/aweme/iteminfo/?item_ids='.$id[1]), true);
$arr = [
'name' => $arr['item_list'][0]['author']['nickname'],//作者
'title' => $arr['item_list'][0]['share_info']['share_title'],//标题
'cover' => $arr['item_list'][0]['video']['origin_cover']['url_list'][0],//封面
'video' => str_replace('playwm', 'play', $arr['item_list'][0]["video"]["play_addr"]["url_list"][0])//无水印视频
]
];
echo json_encode($arr, JSON_NUMERIC_CHECK | JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);
curl代码片段
private function curl($url, $headers = []){
$header = ['User-Agent:Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1'];
$con = curl_init((string)$url);
curl_setopt($con, CURLOPT_HEADER, false);
curl_setopt($con, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($con, CURLOPT_RETURNTRANSFER, true);
if (!empty($headers)) {
curl_setopt($con, CURLOPT_HTTPHEADER, $headers);
} else {
curl_setopt($con, CURLOPT_HTTPHEADER, $header);
}
curl_setopt($con, CURLOPT_TIMEOUT, 5000);
$result = curl_exec($con);
return $result;
}
最后结语:
抖音、快手、小红书、微视、今日头条、西瓜视频等30几个平台解析封装了接口,如果不想写代码可以用封装好的接口
接口:https://v.safuo.cn/video?sig=071684d42a83cb5441dcbae737916584&url=https://v.douyin.com/dB4yyd8/
文档:https://v.safuo.cn/open.html