最近一直很忙,所以没怎么更新内容了,今天给大家写一个基于云开发的抖音去水印接口搭建的教程,不用调用第三方接口,是做一个直接解析的一次接口,直接解析出抖音无水印的视频。
网上有一些通过php写的接口,基本上就是和那些类似的,只不过今天给大家写的是一个云开发版的接口,当然也可以理解为是一个node.js的接口。
另外就是由于短视频解析出来的地址有很多个域名,都添加到服务器域名不大现实,所以很多情况下会存在无法下载的现象,所以今天给大家做一个通过云开发中转下载的方法。
首先给大家把php的代码也附在上面吧,如果你有自己的服务器,也可以自制一个php版的接口。
function douyin($url){
$loc = get_headers($url, true)['location'];
preg_match('/video\/(.*)\//',$loc,$id);
$arr = json_decode($this->curl('https://www.iesdouyin.com/web/api/v2/aweme/iteminfo/?item_ids='.$id[1]), true);
preg_match('/href="(.*?)">Found/', $this->curl(str_replace('playwm', 'play', $arr['item_list'][0]["video"]["play_addr"]["url_list"][0])), $matches);
$video_url = str_replace('&', '&', $matches[1]);
$arr = array(
'code' => 200,
'msg' => '解析成功',
'data' => array(
'author' => $arr['item_list'][0]['author']['nickname'],
'uid' => $arr['item_list'][0]['author']['unique_id'],
'avatar' => $arr['item_list'][0]['author']['avatar_larger']['url_list'][0],
'like' => $arr['item_list'][0]['statistics']['digg_count'],
'time' => $arr['item_list'][0]["create_time"],
'title' => $arr['item_list'][0]['share_info']['share_title'],
'cover' => $arr['item_list'][0]['video']['origin_cover']['url_list'][0],
'url' => $video_url,
'music' => array(
'author' => $arr['item_list'][0]['music']['author'],
'avatar' => $arr['item_list'][0]['music']['cover_large']['url_list'][0],
'url' => $arr['item_list'][0]['music']['play_url']['url_list'][0],
)
)
);
return $arr;
}
这串代码是网上来的,不过我也测试过,是可以使用的。给大家讲讲原理吧。首先我们一般获取到的是一个抖音短网址的分享链接,通过网页打开时会跳转到一个比较长的链接上去,通过这个长链接我们可以拿到这条短视频的id,就是那串数字,至于https://www.iesdouyin.com/web/api/v2/aweme/iteminfo/?item_ids= 这个地址是我们通过查看源文件找到的一个官方的接口,这里就不细讲了。
拿到短视频id之后,我们将通过这个官方接口请求,然后就会得到一个json,在这里其实就已经获取到短视频的数据了,例如标题、音乐、封面啥的都在里面,当然视频的地址也在里面,但是我们访问这个视频地址还是有水印,通过观察,我们发现将域名中的playwm替换成play,再次访问水印就不见了,就是这么申请,到这基本上接口部分就是这样了。一般的网站也都是这么解析短视频的。
这里开始给大家写一下云开发版的代码,首先你要知道云开发是一个node.js环境,这样就好办了,我们这次要用到的主要就是一个got模块,这是个和http、request类似的网络请求模块。通过这个模块去解析域名,请求域名啥的。
首先我们通过npm i got 安装一下这个模块,然后通过const got = require('got')引入模块,这样我们就可以使用它了。不会安装和引用的可以百度查一查node.js的模块安装与使用方法,这里就不详细讲了。
然后就是写代码了,代码如下:
const response = await got('https://v.douyin.com/eNvhvpp/');
const id = response.url.match(/video\/(\S*)\/\?region/)[1];
let dataUrl = 'https://www.iesdouyin.com/web/api/v2/aweme/iteminfo/?item_ids=' + id;
const data = await got(dataUrl).json();
let arr = data.item_list[0];
let tempUrl = arr.video.play_addr.url_list[0].replace('playwm', 'play');
let tempReq = await got(tempUrl);
let videoUrl = tempReq.url;
这个arr就是短视频的一些信息,你可以根据自己想要的从里面拿出来就行了,值得注意的就是这个短视频的地址,当然这个也是最重要的,因为之前说过获取到的地址是一个有水印的,所以我们拿到这个有水印的地址后还需要进行后散步的操作。
数据都已经拿到了,这样直接return到小程序端就行了。
文件中转
下面的内容就是解决由于安全域名限制没办法进行下载的问题,之前给大家提供过一个php的转存办法,如下图:
原文地址:
https://mp.weixin.qq.com/s/8-nsgupRjSZ8NUplNfgTLw
今天主要讲的是云开发转存的问题,先说一下思路吧,其实也差不多就是利用云函数将视频进行一个中转,通过云函数将文件转为buffer,但是由于云函数返回数据的大小限制,没办法直接将buffer传给小程序,所以这里利用了云存储,将这个文件先下载到云存储,然后将云存储的地址返回给小程序,这这样视频的地址就是云空间的地址了,想怎么下载就怎么下载。
这里有人可能会想到如果都存到云存储里面,那多浪费空间呀,我们可以在下载成功的回调函数里面请求删除这个文件,这样就不占空间了。
具体详情和Demo:
看看学习一下
666顶不错啊,非常值得一看
可以可以
不错啊,非常值得一看
真不错66
好牛。看看,学习。
问接口方法还能用吗? 还有就是这个只适合抖音吗? 然后问下 小程序 2.5 自动获取缩微图功能加了没!
@牛素材
应该还可以用,只写了抖音的解析
说点什么呢
谢谢分享 666666
正好需要,谢谢分享
Yes
谢谢分享
试试
赞一个!。。
adasdasd
赞一个
嘿嘿嘿
赞一个
赞一个
啊这
牛
赞一个
牛逼
这个是这么的不错
不错~
66666
666
哈哈
不错的