原理:其实抖音原视频的都是没有水印的,水印都是下载的时候自动加上的,这就是为什么我们在抖音app上看视频的时候没有水印,但下载视频的时候会有水印。
我们可以通过找视频真实地址的方法下载无水印抖音视频。
步骤一:
首先在抖音app上随便选个视频,复制视频的分享链接,复制的链接格式都是像下面图中这样,都是由一些文字和一条链接组成我们只需要其中的链接就行了 https://v.douyin.com/8rmc2PU/,复制链接到浏览器打开
步骤二:
按F12 打开浏览器开发者模式,并模拟切换到手机,如下图
找到抖音app的json接口,https://www.iesdouyin.com/web/api/v2/aweme/iteminfo/?item_ids= ,这边的item_ids的值就是videoid ,也就是我们打开的网页上面的链接最后的一串数字
步骤三:
每个视频打开的链接 这串数字都不一样,我们只需要找到上面json接口就行,如下图
我们可以点击它,然后在响应 看json返回数据具体内容
可以看到,json返回数据中 有视频作者昵称、账号id、视频文案、视频配乐相关信息,背景音乐mp3和视频的链接都可以找到。
点开video键,里面的内容如上图,都有关视频的信息,视频链接就是我圈起来的,但这是有水印的视频链接,无水印的视频链接要把上面链接中的playam 改成play,其他的不变,就获得无水印视频的链接了。链接如下
https://aweme.snssdk.com/aweme/v1/play/?video_id=v0d00fg10000c27mbkt7s8grhfvkrsgg&ratio=720p&line=0
上面这个链接在浏览器访问会进行重定向,在network这个标签下可以看到请求过程,不出意外是302重定向,表示跳转到视频真实地址,大家可以把这条链接复制到浏览器就能下载到无水印视频了。
那么如何用php代码模拟请求链接呢?
下面是方法:
我们第一步就是要取得这个重定向地址,仔细观察network标签下的请求响应数据,重定向地址在location里面,并且只有1个不是数组。
(1)获取跳转的地址
$header = get_headers('https://v.douyin.com/8rmc2PU/',1);
$realurl = $header['Location'][1]; //获取真实链接
用var_dump看返回结果,结果像这样:https://www.douyin.com/share/video/6957891939144322307,我们只需要取后面数字就行,然后拼接成json接口链接
https://www.iesdouyin.com/web/api/v2/aweme/iteminfo/?item_ids=6957891939144322307
我们只需要取后面数字就行,然后拼接到json接口链接 https://www.iesdouyin.com/web/api/v2/aweme/iteminfo/?item_ids=6957891939144322307
(2)请求json通过观察视频的真实链接就知道,每个视频地址 只有video_id这个字段的值不一样,其他都相同,所以我们只需要在json的返回数据中获取video_id就行,也就是uri,如下图可以看出,它和video_id值是一样的
json请求代码:
$getvid = json_decode('https://www.iesdouyin.com/web/api/v2/aweme/iteminfo/?item_ids=6957891939144322307', true);
$dy_vid= $getvid['item_list'][0]['video']['vid'];//得到vid
其实获取无水印链接的方式有很多,比如我们还直接获取url_list里面的链接,如下面这链接,它是有水印的视频链接
https://aweme.snssdk.com/aweme/v1/playwm/?video_id=v0d00fg10000c27mbkt7s8grhfvkrsgg&ratio=720p&line=0 ,我们只需要使用str_replace() 函数替换字符串,将上面链接中的playwm 替换成 play,即可得到无水印的视频链接。
大家都学会了吗?
附上我做好的抖音无水印视频解析接口供大家使用,接口地址:https://www.hmily.vip/api/dy/?url=
使用方法:在接口地址后面加上你要下载的抖音视频链接就行了,返回的是json数据