获取B站字幕

将获取到的B站字幕输出到控制台上(按下F12即可打开控制台)

Fra 10.02.2022. Se den seneste versjonen.

// ==UserScript==
// @name         获取B站字幕
// @namespace    http://tampermonkey.net/
// @version      0.1
// @description  将获取到的B站字幕输出到控制台上(按下F12即可打开控制台)
// @author       贺墨于
// @match        https://www.bilibili.com/*
// @require      https://unpkg.com/[email protected]/dist/jquery.min.js
// @grant        none
// @license      MIT
// ==/UserScript==

function getQueryVariable(variable){
    var query = window.location.search.substring(1);
    var vars = query.split("&");
    for (var i=0;i<vars.length;i++) {
        var pair = vars[i].split("=");
        if(pair[0] == variable){return pair[1];}
    }
    return(false);
}

function getSubtitle(json) {
    let content = [];
    let len = json.length;
    for (let i = 0; i < len; i++) {
        let pair = json[i].content.split('\n')[0]
        content.push(pair)
    }
    return content.join(',');
}

function getJsonURL(aid, cid) {
    return new Promise((resovle, reject) => {
        $.ajax({
            url: `https://api.bilibili.com/x/player/v2?cid=${cid}&aid=${aid}`,
            success: function(res){
                let subtitles = res.data.subtitle.subtitles;
                if (subtitles.length > 0) {
                    resovle(subtitles[0].subtitle_url);
                } else {
                    console.log('-- 该视频无字幕! ---')
                    reject()
                }
            },
            error: function() {
                reject()
            }
        })
    })
}

function getJson(url) {
    return new Promise((resovle, reject) => {
        $.ajax({
            url,
            success: function(res){
                resovle(res.body)
            },
            error: function() {
                reject()
            }
        })
    })
}

var bvid_s = window.location.pathname.lastIndexOf('/') + 1
var bvid = window.location.pathname.substring(bvid_s)

Promise.all([
    new Promise((resovle, reject) => {
        $.ajax({
            url: `https://api.bilibili.com/x/web-interface/view?bvid=${bvid}`,
            success: function(res){
                resovle(res.data.aid)
            },
            error: function() {
                reject()
            }
        })
    }),
    new Promise((resovle, reject) => {
        $.ajax({
            url: `https://api.bilibili.com/x/player/pagelist?bvid=${bvid}&jsonp=jsonp`,
            success: function(res){
                let pvList = res.data
                let p = +getQueryVariable('p')
                resovle(pvList[p-1].cid)
            },
            error: function() {
                reject()
            }
        })
    })
]).then(resp => {
    let aid = resp[0];
    let cid = resp[1];
    return getJsonURL(aid, cid)
}).then(resp => {
    return getJson(resp)
}).then(resp => {
    let content = getSubtitle(resp)
    console.log(content)
}).catch(() => {
    console.error('-- 获取字幕失败! --')
})
长期地址
遇到问题?请前往 GitHub 提 Issues,或加Q群1031348184

赞助商

Fishcpy

广告

Rainyun

注册一下就行

Rainyun

一年攒够 12 元