共计 2829 个字符,预计需要花费 8 分钟才能阅读完成。
先看成绩演示,间接复制抖音视频到抖抖来去水印小程序上下载无水印视频
本示例接口次要是通过 node 开发,但剖析思路是相通的。
如何获取无水印视频下载地址?
1、从抖音上复制链接
5.15 bAT:/ 复制关上抖音,看看【程序员 Jack 的作品】世界上最反人类的设计,为什么键盘上字母不是依照 AB… https://v.douyin.com/MnB9FVr/
2、https://v.douyin.com/MnB9FVr/ 复制这个链接在浏览器手机浏览模式下关上 会重定向到另一个地址 将地址中的红色框字符串取出
3、调用抖音获取视频信息的接口,将获取到的字符串传递给接口获取视频信息 https://www.iesdouyin.com/web…
4、将返回的视频地址中的 playwm 改成 play 就是无水印视频 https://aweme.snssdk.com/awem… 改成 https://aweme.snssdk.com/awem…
5、批改后的 url 依然会进行重定向,重定向后的 url 才是最终无水印视频下载地址。
那么开发过程中存在哪些难点呢?
1、Node 如何模仿 http 申请获取信息通过 request 来模仿 http 申请
1.1 装置和引入依赖
npm install request@2.88.2 --save
const request = require('request');
1.2 发动 http 申请
static getNoWatermarkUrl(itemId) {return new Promise((resolve, reject)=>{const api = `${videoInfoApi}${itemId}`;
request.get(api, async (err, res) => {if(JSON.parse(res.body).item_list.length) {const noWatermarkUrl = JSON.parse(res.body).item_list[0].video.play_addr.url_list[0];
const linkStr = noWatermarkUrl.replace('playwm', 'play');
const link = await this.getRealNoWatermarkLink(linkStr);
resolve({
link,
originLink: linkStr
});
} else {resolve('');
}
})
});
}
2、Node 如何获取重定向后的 url 通过 puppeteer 抓取最终重定向后的无水印视频下载地址
2.1 装置和引入依赖
npm install puppeteer@2.1.1 --save
const puppeteer = require('puppeteer');
2.2 应用 puppeteer 获取 urlfunction
getNoWatermarkVideoLink(linkStr){return new Promise(async (resolve, reject) => {
const browser = await puppeteer.launch({
headless: false, // 部署到服务器时须要设置成 true
// executablePath:‘....’, // 部署到服务器时须要配置 chrome 在服务器中的装置地位
slowMo:30,
args: ['--no-sandbox', '--disable-setuid-sandbox']
});
const page = await browser.newPage();
await page.goto(linkStr);
const link = page.url();
await browser.close();
resolve(link);
});
}
3、微信小程序如何配置 downloadFile 非法域名
在配置抖音无水印视频 downloadFile 非法域名的时候,发现抖音有 N 多个二级域名,显然把抖音的二级域名都增加到微信小程序的 downloadFile 非法域名配置里是不太可能的。
于是思考是否能够应用本人的服务器作为中转站呢?计划是可行的,然而会减少集体开发的老本,于是 pass 掉了。
通过屡次申请获取抖音视频信息的接口发现,获取到的无水印地址是会扭转的,于是就想到了一个计划,只须要配置一部分非法域名,通过屡次申请直到匹配到非法域名配置中的域名就能够返回给前端下载
代码实现:
const linkArr = [
'https://v26-cold.douyinvod.com',
'https://v83-016.douyinvod.com',
'https://v1-cold1.douyinvod.com',
'https://v5-g.douyinvod.com',
'https://v95-p.douyinvod.com',
'https://v95-p-cold.douyinvod.com',
'https://v5-coldb.douyinvod.com',
'https://v9.douyinvod.com',
'https://v6-cold.douyinvod.com',
'https://v3-cold1.douyinvod.com',
'https://v3-cold2.douyinvod.co',
'https://v27-cold.douyinvod.com',
'https://v95-zj-cold.douyinvod.com',
'https://v95-zj.douyinvod.com',
...
]
这边我只配置了四十多个二级域名 // 域名重置到非法域名内
do {linkResult = await DouyinDelWatermark.getNoWatermarkUrl(itemId);
domainArr = linkResult.link.split('com/');
domain = domainArr.length ? domainArr[0]+'com' : '';
result = linkArr.indexOf(domain) > -1;
count --; // 管制循环次数免得死循环
} while (count > 0 && !result);
if(linkResult.link && result) {
count = 15;
throw new global.errs.Success('胜利去除水印', 0, {
link: linkResult.link,
originLink: linkResult.originLink
})
} else if(linkResult.link && !result) {
count = 15;
throw new global.errs.NotFound('该链接无奈去除水印');
} else {
count = 15;
throw new global.errs.NotFound('未获取到无效资源');
}
以上是抖音视频去水印小程序开发的全副过程,心愿对大家有所帮忙。