提取b站视频cc字幕内容(自行配合GPT)

一键复制视频字幕文本,可以配合GPT对视频进行总结

このスクリプトの質問や評価の投稿はこちら通報はこちらへお寄せください。
// ==UserScript==
// @name         提取b站视频cc字幕内容(自行配合GPT)
// @namespace    http://tampermonkey.net/
// @version      0.1
// @description  一键复制视频字幕文本,可以配合GPT对视频进行总结
// @author       Josh
// @match        https://www.bilibili.com/video/*
// @icon         https://www.google.com/s2/favicons?sz=64&domain=bilibili.com
// @grant        unsafeWindow
// @grant        GM_xmlhttpRequest
// @grant        GM_download
// @grant        GM_setClipboard
// @license MIT
// ==/UserScript==

var currentCCText = "";

function createBtn() {
  const right = document.querySelector(".video-toolbar-right");
  const btn = document.createElement("div");
  btn.innerHTML = `<div class="bpx-player-dm-btn-send bui bui-button">
  <div id="fetchCCBtn" style="border-radius: 10px;padding: 8px;" class="bui-area bui-button-blue">复制视频字幕内容</div>
  </div>`;
  right.appendChild(btn);
  _setBtnCopyEvent();
}

function createFailBtn() {
  const right = document.querySelector(".video-toolbar-right");
  const btn = document.createElement("div");
  btn.innerHTML = `<div class="bpx-player-dm-btn-send bui bui-button bui-disabled">
  <div style="border-radius: 10px;padding: 8px;" class="bui-area bui-button-blue">该视频无字幕</div>
  </div>`;
  right.appendChild(btn);
}

function _setBtnCopyEvent() {
  const btn = document.querySelector("#fetchCCBtn");
  btn.addEventListener("click", function () {
    GM_setClipboard(currentCCText);
    btn.innerText = "复制成功";
    setTimeout(() => {
      btn.innerText = "复制视频字幕内容";
    }, 2000);
  });
}

function getSubtitleUrl() {
  return unsafeWindow.__INITIAL_STATE__.videoData.subtitle.list[0].subtitle_url;
}

function main() {
  try {
    GM_xmlhttpRequest({
      method: "GET",
      url: getSubtitleUrl(),
      onload: function (res) {
        const data = JSON.parse(res.response);
        for (const e of data.body) {
          currentCCText += e.content + "  ";
        }
        createBtn();
      },
    });
  } catch (e) {
    createFailBtn();
  }
}

setTimeout(main, 5000);