您的位置:

B站番剧解锁简介

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 接口参数,获取到正确的视频地址并插入到页面中,从而实现了番剧的解锁。这里提供一个完整的代码示例,供读者参考。