Greasy Fork

Greasy Fork is available in English.

学堂云答题助手

学堂云4.0答案查询

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Greasemonkey 油猴子Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Userscripts ,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==UserScript==
// @name        学堂云答题助手
// @namespace   Violentmonkey Scripts
// @match       scut.yuketang.cn/pro/lms/*
// @version     0.7
// @author      cat1007
// @grant       GM_xmlhttpRequest
// @require     https://apps.bdimg.com/libs/jquery/2.1.1/jquery.min.js
// @require     https://unpkg.com/axios/dist/axios.min.js
// @description 学堂云4.0答案查询
// ==/UserScript==

var url
var paraList
var sign
var classroomId
var id

var probs = []
var ans = []
var lid

function showPlane() {
    var area = $('<div id="area" style="position: fixed;right: 20px;top: 70px;width: 300px;background-color: #ffffff; padding: 10px;box-shadow: 0 1px 4px rgba(0,0,0,.1);border-radius: 4px;z-index: 100;"><button id="launch" style="padding: 10px 20px;background: #5096f5;font-size: 14px;color: #fff;border-radius: 4px;margin-right: 10px;display: block;">答题界面点击拉取答案</button><button id="speed" style="padding: 10px 20px;background: #5096f5;font-size: 14px;color: #fff;border-radius: 4px;margin-top: 10px;display: block;">速度加快速度加快<br\>(看完后刷新一下同步进度)</button><div id="plane"></div></div>')
    $("body").append(area)
    $("#launch").on("click", get)
    $("#speed").on("click", speedUp)
}

function launch(ans) {
    var ul = $('<ul id="ansList"></ul>')
    for (let i = 0; i < ans.length; i++) {
        let str = "题目"+ ans[i].index + ": "
        for (let k = 0;k<ans[i].ansContent.length;k++) {
            str = str + ' ' + ans[i].ansContent[k]
        }

        let li = $('<li style="padding: 10px 20px;font-size: 14px;"></li>').text(str)
        ul.append(li)
    }
    $("#plane").append(ul)
    $("#launch").text("切换章节后重新选择")
}

function get() {
    url = window.location.href
    paraList = url.split("/")


    sign = paraList[5]
    classroomId = paraList[6]
    id = paraList[8]

    $("#ansList").remove("#ansList")
    $("#launch").text("loading")

    // 获取叶节点练习id
    const idApi = "https://scut.yuketang.cn/mooc-api/v1/lms/learn/leaf_info/" + classroomId + "/" + id + "/?sign=" + sign + "&term=latest&uv_id=2627"

    var headers = {
        'university-id': '2627',
        'x-csrftoken': 'G9oqKcclwAg8eNrKzdv12EL0PNrufEXE',
        'xtbz': 'cloud'
    }

    axios.get(
        idApi,
        { headers: headers }
    ).then(function (response) {
        // 获取叶节点成功
        lid = response.data.data.content_info.leaf_type_id
        console.log(lid);

        // 拉取练习列表
        const excApi = "https://scut.yuketang.cn/mooc-api/v1/lms/exercise/get_exercise_list/" + lid + "/?term=latest&uv_id=2627"
        axios.get(
            excApi,
            { headers: headers }
        ).then(function (response) {
            // 获取题目信息
            probs = response.data.data.problems
            ans = Array()
            console.log(probs)
            for (let i = 0; i < probs.length; i++) {
                ans.push({
                    index: probs[i].index,
                    ansContent: probs[i].user.answer
                })
            }
            launch(ans)
        })
    })
}

showPlane()

// 倍速播放功能
var playRate = 10
var video = null

function speedUp() {
    console.log("speed up")

    video = $(".xt_video_player")[0]
    setInterval(function () {
        video.playbackRate = playRate
    }, 100)
}