B站作為全球最大的二次元社區之一,以動畫、漫畫、遊戲為主要內容,成為了非常受歡迎的平台之一。然而,由於某些原因,一些番劇作品在國內無法觀看。為了解決這個問題,開發者們陸續推出了一些解鎖工具。本文將以 B站番劇解鎖為中心,從多個方面進行闡述。
一、解鎖工具初探
現在,市面上的解鎖工具有很多種,其中最為常用的就是 tampermonkey 插件。然而,tampermonkey 功能十分強大,同時也允許用戶自定義腳本,使得該插件可以實現更多的功能。不過,在使用 tampermonkey 插件前,需要先了解一些相關的基礎知識。
1. tampermonkey 的作用是幫助用戶執行指定的 JavaScript 代碼,可以修改頁面內容、響應網絡請求、注入其他 JavaScript 等功能。
// 這是一個例子,可以直接複製到 tampermonkey 中執行
// ==UserScript==
// @name 修改頁面標題為 hello world
// @namespace https://www.example.com/
// @version 0.1
// @description 修改頁面標題為 hello world
// @match https://www.example.com/*
// ==/UserScript==
(function() {
'use strict';
document.title = "hello world";
})();
2. 代理是 tampermonkey 支持的另一個重要特性。通過設置代理,可以將 HTTP 請求轉發到指定的服務器,實現網絡資源的跨域訪問。
// 這是一個例子,可以直接複製到 tampermonkey 中執行
// ==UserScript==
// @name 用公共 API 請求一個圖片資源
// @namespace https://www.example.com/
// @version 0.1
// @description 用公共 API 請求一個圖片資源
// @match https://www.example.com/*
// ==/UserScript==
(function() {
'use strict';
const xhr = new XMLHttpRequest();
const url = 'https://www.example.com/img.png';
xhr.open('GET', url);
xhr.responseType = 'blob';
xhr.onload = function() {
const blob = xhr.response;
const img = document.createElement('img');
img.src = URL.createObjectURL(blob);
document.body.appendChild(img);
};
xhr.send();
})();
3. 經典的代理方案是在服務器上設置反向代理服務,然後在 tampermonkey 中設置代理。當然,通過代理服務器還可以實現請求日誌、數據抓取等功能。
二、B站番劇解鎖實現步驟
當我們對 tampermonkey 有了一定的了解之後,就可以開始編寫腳本來實現 B站番劇的解鎖了。
1. 查找 API 接口:為了獲取番劇的地址,需要先查找 API 接口。在 B站 官網上,我們可以在開發者模式中找到 m.core.js 文件,並對其進行查找。通過搜索關鍵字,我們可以較快地找到 API 接口地址。
api.bilibili.com/pgc/player/web/playurl?avid=${avid}&cid=${cid}&qn=${quality}&typeflag=pipe&otype=json&ep_id=${ep_id}&fourk=1&fnver=0&fnval=16
該接口地址需要提供一些參數,例如 avid、cid、quality 等。需要注意的是, B站 為了防止盜鏈,會根據請求頭 Referrer 的不同,返回不同的結果。因此,在編寫腳本之前,需要先設置正確的請求頭信息。
// 設置請求頭
GM_xmlhttpRequest({
method: 'GET',
url: '',
headers: {
'Referer': window.location.href,
'User-Agent': window.navigator.userAgent,
'Origin': 'https://www.bilibili.com',
},
2. 獲取地址:根據 API 接口地址獲取到地址之後,將地址插入到頁面中即可。這裡我們可以使用 DOM 操作來實現此功能。
需要注意的是,根據 B站 的視頻播放規則,用戶必須先點擊視頻才能獲取到地址。因此,我們需要監聽頁面點擊事件,等待用戶點擊之後再執行地址獲取操作。
// 等待用戶點擊
document.querySelector('.bilibili-player-video').addEventListener('click', async e => {
// 發起請求,獲取視頻地址
const xhr = await GM_xmlhttpRequest({
method: 'GET',
url: '',
headers: {
'Referer': window.location.href,
'User-Agent': window.navigator.userAgent,
'Origin': 'https://www.bilibili.com',
},
responseType: 'json'
});
const playurl = xhr.response.durl[0].url;
// 添加到頁面中
const video = document.querySelector('video');
video.src = playurl;
});
三、總結
本文介紹了通過 tampermonkey 插件來實現 B站番劇的解鎖。通過正確設置請求頭信息和 API 接口參數,獲取到正確的視頻地址並插入到頁面中,從而實現了番劇的解鎖。這裡提供一個完整的代碼示例,供讀者參考。
原創文章,作者:UTJY,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/138461.html