// ==UserScript== // @name 获取B站字幕 // @namespace http://tampermonkey.net/ // @version 0.1 // @description 将获取到的B站字幕输出到控制台上(按下F12即可打开控制台) // @author 贺墨于 // @match https://www.bilibili.com/* // @require https://unpkg.com/jquery@3.6.0/dist/jquery.min.js // @grant none // @license MIT // @downloadURL none // ==/UserScript== function getQueryVariable(variable){ var query = window.location.search.substring(1); var vars = query.split("&"); for (var i=0;i { $.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('-- 获取字幕失败! --') })