一、解析微博视频地址
在进行微博视频去水印下载前,我们首先需要解析微博视频地址。
微博视频地址的格式大致如下:
https://f.video.weibocdn.com/(数字)/(视频码)...
我们可以通过以下的步骤进行解析:
1. 打开微博客户端,复制视频分享链接。
2. 对该链接进行解码,我们可以获得类似于如下的地址:
https://weibo.com/tv/v/xxxxxxxxx
3. 对该地址进行访问,我们可以在页面源代码中找到视频地址。
代码示例:
// 解析微博视频地址
function parseWBVideo(url) {
// 解码分享链接
url = decodeURIComponent(url);
// 解析视频ID
var match = url.match(/\/([^\/]+)$/);
var vid = match ? match[1] : '';
if (!vid) {
return '';
}
// 访问视频页面
var xhr = new XMLHttpRequest();
var videoUrl = '';
xhr.onreadystatechange = function() {
if (xhr.readyState === 4 && xhr.status === 200) {
// 在页面源代码中找到视频地址
var match = xhr.responseText.match(/"videoSources":\[(.+?)\]/);
var sources = match ? JSON.parse(match[1]) : [];
for (var i in sources) {
var source = sources[i];
if (source.type === 'mp4_hd720') {
videoUrl = source.url;
break;
} else if (source.type === 'mp4') {
videoUrl = source.url;
}
}
}
};
xhr.open('GET', 'https://weibo.com/tv/v/' + vid, false);
xhr.send();
return videoUrl;
}
二、下载微博视频
我们可以通过以下的步骤进行微博视频下载:
1. 解析微博视频地址。
2. 下载视频。
代码示例:
// 下载微博视频
function downloadWBVideo(url, filename) {
// 解析视频地址
var videoUrl = parseWBVideo(url);
if (!videoUrl) {
return false;
}
// 创建下载链接
var link = document.createElement('a');
link.href = videoUrl;
link.download = filename || '';
// 触发下载
var event = document.createEvent('MouseEvents');
event.initEvent('click', true, true);
link.dispatchEvent(event);
return true;
}
三、去除微博视频水印
微博视频中包含有水印,我们可以借助一些第三方工具将其去除。
一个比较好用的工具是“微博去水印”(https://www.cccom.com/tools/weibo_video_download.html)。
代码示例:
// 借助“微博去水印”去除视频水印
function removeWBVideoWatermark(url) {
// 构造跨域请求
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function() {
if (xhr.readyState === 4 && xhr.status === 200) {
// 在结果页面中找到去水印后的视频地址
var doc = new DOMParser().parseFromString(xhr.responseText, 'text/html');
var videoUrl = doc.querySelector('.pageurl') ? doc.querySelector('.pageurl').textContent : '';
if (videoUrl) {
// 下载去水印后的视频
downloadWBVideo(videoUrl);
}
}
};
xhr.open('GET', 'https://www.cccom.com/tools/weibo_video_download.html?url=' + encodeURIComponent(url), true);
xhr.send();
}