云端课堂回放下载

try to take over the world!

目前為 2023-11-13 提交的版本,檢視 最新版本

// ==UserScript==
// @name         云端课堂回放下载
// @license MIT
// @namespace    http://tampermonkey.net/
// @version      0.2
// @description  try to take over the world!
// @author       You
// @match        https://e62580258.at.baijiayun.com/web/playback/index?*
// @icon         https://www.google.com/s2/favicons?sz=64&domain=baijiayun.com
// @grant        none
// @require      https://ajax.aspnetcdn.com/ajax/jQuery/jquery-3.5.1.min.js
// ==/UserScript==
var i = function (e, t) {
    var r = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
    var n = r.indexOf(e.charAt(t));
    if (-1 === n) throw "Cannot decode base64";
    return n
};
// 解密视频地址
var decryptVideo = function(e) {
    if ("" === e || 0 !== e.indexOf("bjcloudvod://"))
        return "";
    var t = (e = e.slice("bjcloudvod://".length, e.length).replace(/-/g, "+").replace(/_/g, "/")).length % 4;
    2 === t ? e += "==" : 3 === t && (e += "=");
    var n = (e = bb(e)).charCodeAt(0) % 8;
    e = e.slice(1, e.length);
    for (var i, a = [], s = 0; i = e[s]; s++) {
        var o = s % 4 * n + s % 3 + 1;
        a.push(String.fromCharCode(i.charCodeAt(0) - o))
    }
    return a.join("").replace("https:", "").replace("http:", "")
};
// 解密编码
var bb = function (e) {
    var t, n, r = 0,
        a = e.length,
        s = [];
    if (e = String(e), 0 === a) return e;
    if (a % 4 != 0) throw "Cannot decode base64";
    for ("=" === e.charAt(a - 1) && (r = 1, "=" === e.charAt(a - 2) && (r = 2), a -= 4), t = 0; t <
         a; t += 4) n = i(e, t) << 18 | i(e, t + 1) << 12 | i(e, t + 2) << 6 | i(e, t + 3), s.push(
        String.fromCharCode(n >> 16, n >> 8 & 255, 255 & n));
    switch (r) {
        case 1:
            n = i(e, t) << 18 | i(e, t + 1) << 12 | i(e, t + 2) << 6, s.push(String.fromCharCode(
                n >> 16, n >> 8 & 255));
            break;
        case 2:
            n = i(e, t) << 18 | i(e, t + 1) << 12, s.push(String.fromCharCode(n >> 16))
    }
    return s.join("")
};
// 下载服务器的MP4文件
function downloadMp4(filePath,fileName){
  fetch(filePath).then(res => res.blob()).then(blob => {
    const a = document.createElement('a');
    //document.body.appendChild(a)
    a.style.display = 'none'
    // 使用获取到的blob对象创建的url
    const url = window.URL.createObjectURL(blob);
    a.href = url;
    // 指定下载的文件名
    a.download = fileName;
    a.click();
    document.body.removeChild(a)
    // 移除blob对象的url
    window.URL.revokeObjectURL(url);
  });
}
(function() {
    console.log("云端课堂脚本下载开始");
    // 视频信息
    var videoInfo = null;
    /**
    * 云端课堂回放视频下载
    */
    function baijiayunVideoXhrHandler(e){
        // 不符合url || 响应数据如果不为空
        var flag = e.srcElement.responseURL.indexOf("/web/playback/getPlayInfo")==-1 || videoInfo!=null;
        if(flag){
            return false;
        }
        console.log(e);
        // 响应数据
        var responseBody = e.currentTarget.response;
        responseBody = responseBody.substring(responseBody.indexOf("(")+1,responseBody.lastIndexOf(")"));
        // 处理为json结构
        responseBody = JSON.parse(responseBody);
        videoInfo = responseBody
        console.log(responseBody);
        // 默认获取画质最高的
        var videoUrl = responseBody.data.play_info['superHD'] || responseBody.data.play_info['high'] || responseBody.data.play_info['720p'];
        videoUrl = videoUrl.cdn_list[0].enc_url;
        console.log(videoUrl);
        videoUrl = "http:" + decryptVideo(videoUrl);
        console.log('视频地址解析后:'+videoUrl);
        // 视频名称
        var fileName = `${responseBody.data.video_info.title}.${responseBody.data.format}`;
        downloadMp4(videoUrl,fileName);
        // 触发下载后返回上一页
        history.back();
    }
    (function() {
        const originalOpen = XMLHttpRequest.prototype.open;
        console.log("添加xhr拦截器");
        XMLHttpRequest.prototype.open = function() {
            this.addEventListener('readystatechange', (e) => {
                baijiayunVideoXhrHandler(e);
            });
            originalOpen.apply(this, arguments);
        };
    })();
})();

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址