一、解析微博視頻地址
在進行微博視頻去水印下載前,我們首先需要解析微博視頻地址。
微博視頻地址的格式大致如下:
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();
}
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/158362.html