获取抖音无水印视频分析文档
说明
前短时间在公司开发了短视频营销功能,把前期调研的有关短视频去水印的知识整理一下。
参考文档
csdn:https://blog.csdn.net/ucsheep/article/details/102519806
csdn:https://www.cnblogs.com/xyz-s/p/13634757.html
简书:https://www.jianshu.com/p/70399115a8f0
原理讲解
1.将抖音短链接在浏览器访问,并打开Network监听后可以得到以下信息:
短链接:https://v.douyin.com/JmJoDCS/
重定向Url:https://www.iesdouyin.com/share/video/6879305837429443854
获取视频信息的请求:https://www.iesdouyin.com/web/api/v2/aweme/iteminfo/?item_ids=6879305837429443854
所以通过重定向后地址可以获取到item_ids,然后访问https://www.iesdouyin.com/web/api/v2/aweme/iteminfo/这个接口传入刚刚的item_ids,就可以拿到视频相关信息。
2.从得到的json字符串中提取视频播放地址,在item_list下video.play_addr.url_list中。
3.将视频地址中的playwm替换为play。
4.使用移动端的user-agent访问替换后的视频地址即可得到无抖音水印的视频。
步骤讲解
获取相关链接
在chrome中访问视频短链接,得到重定向后的Url和请求地址
从图中可以看到重定向Url:https://www.iesdouyin.com/share/video后的id就是请求地址所需要的id。
获取视频地址
提取抖音短视频地址。
在返回的信息中,item_list下video.play_addr.url_list找到短视频的源地址。
获取无水印地址
拿到视频地址后,可以通过网上的去水印接口进行处理,也可以通过以下方法进行处理。
将视频地址中的playwm替换为play后使用移动端的user-agent访问替换后的视频地址即可得到无抖音水印的视频。
Request URL: https://aweme.snssdk.com/aweme/v1/play/?video_id=v0300fb20000bts37u452a1aj3hpp99g&ratio=720p&line=0
Status Code: 302
user-agent: Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.111 Mobile Safari/537.36
开发接口
获取视频短链接
public function getShortVideoUrl($url){
preg_match('/https?:\/{2}[-A-Za-z0-9+&@#\/\%?=~_|!:,.;]+[-A-Za-z0-9+&@#\/\%=~_|]/i', $url, $matches);
return $matches[0];
}
传入链接:真的是每一个镜头都不想错过 给你们来个下集#乖宝剪发 #骗你生女儿 https://v.douyin.com/JmJoDCS/ 复制此链接,打开抖音,直接观看视频!
返回链接:https://v.douyin.com/JmJoDCS/
获取视频item_ids
function get_content_url($url)
{
$ch = curl_init();
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'User-Agent: Mozilla/5.0 (Linux; U; Android 9; zh-cn; HLK-AL00 Build/HONORHLK-AL00) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/66.0.3359.126 MQQBrowser/10.1 Mobile Safari/537.36'
));
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, False);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, False);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_TIMEOUT, 5000);
$result = curl_exec($ch);
curl_close($ch);
return $result;
}
/**
* 得到跳转后信息
* @param $url
* @return mixed
*/
function get_302_url($url)
{
$regular = '/<a.*?href="(.*?)".*?\/?>/i';
preg_match($regular, $url, $match);
return $match[1];
}
/**
* 截取视频item_ids
* @param $url
* @return mixed
*/
function get_id($url)
{
$regular = '/video\/([0-9]\d+)/';
preg_match($regular, $url, $match);
return $match[1];
}
传入短视频地址:$url https://v.douyin.com/JmJoDCS/
获取item_ids 使用方法:get_id(get_302_url(get_content_url($url)))
获取视频源地址
/**
* 获取视频信息
* @param $url
* @return bool|string
*/
function get_url($url,$itemIds)
{
$url = 'https://www.iesdouyin.com/web/api/v2/aweme/iteminfo/?item_ids='.$itemIds);
$ch = curl_init();
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Referer:' . get_302_url(get_content_url($url)),
'User-Agent: Mozilla/5.0 (Linux; U; Android 10; zh-cn; ELE-AL00 Build/HUAWEIELE-AL00) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/66.0.3359.126 MQQBrowser/10.1 Mobile Safari/537.36'
));
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, False);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, False);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_TIMEOUT, 5000);
$result = curl_exec($ch);
curl_close($ch);
return $result;
}
/**
* 获取移动端链接
* @param $url
* @return string
*/
function get_url1($url)
{
$regular = '/https\:\/\/aweme\.snssdk\.com\/aweme\/v1\/playwm\/(.*?)0\"\]\}\,\"/';
preg_match($regular, $url, $match);
return 'https://aweme.snssdk.com/aweme/v1/play/' . $match[1] . '0';
}
传入短视频$url和视频地址$itemIds get_url1(get_url($url,$itemIds))
返回app访问的地址$appUrl
使用移动端的user-agent获取无水印视频地址
/**
* 获取无水印视频
* @param $url
* @return bool|string
*/
function get_video_url($appUrl)
{
$ch = curl_init();
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'User-Agent: Mozilla/5.0 (Linux; Android 5.1; OPPO A59s Build/LMY47I; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/76.0.3809.89 Mobile Safari/537.36 T7/11.20 SP-engine/2.16.0 baiduboxapp/11.20.0.14 (Baidu; P1 5.1)'
));
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, False);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, False);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_TIMEOUT, 5000);
$result = curl_exec($ch);
curl_close($ch);
return $result;
}
传入$appUrl
get_302_url(get_video_url($appUrl)) 返回视频无水印地址
结尾
这只是获取抖音视频的一种方式,网上也有很成熟的接口,大家仅供参考。
<p style="background-image: -webkit-linear-gradient(left, #3498db, #f47920 10%, #d71345 20%, #f7acbc 30%,#ffd400 40%, #3498db 50%, #f47920 60%, #d71345 70%, #f7acbc 80%, #ffd400 90%, #3498db);color: transparent;-webkit-text-fill-color: transparent;-webkit-background-clip: text;text-align:center;">
心如花木,向阳而生。
</p>