Rush Lecture

【深圳大学2020级新生专用/使用前请看使用说明】可用于抢领航讲座,由于无法进行测试,大家请抱着试用的心态使用该脚本。

目前為 2020-12-21 提交的版本,檢視 最新版本

// ==UserScript==
// @name         Rush Lecture
// @name:en      Rush Lecture
// @namespace    http://tampermonkey.net/
// @version      0.5.3
// @description  【深圳大学2020级新生专用/使用前请看使用说明】可用于抢领航讲座,由于无法进行测试,大家请抱着试用的心态使用该脚本。
// @description:en 【深圳大学2020级新生专用/使用前请看使用说明】可用于抢领航讲座,由于无法进行测试,大家请抱着试用的心态使用该脚本。
// @author       cc
// @match        http://lecture.szu.edu.cn/*
// @grant        none
// ==/UserScript==

(function() {
    'use strict';
    const IS_LIHU_AREA = false;
    utils.space.area = ['粤海校区', '沧海校区'];
    window.utils = window.utils || {};
    function sendRequest(url, params='', mode='GET') {
        let request = new XMLHttpRequest();
        if (params.length > 0)
            url = `${url}?${encodeURIComponent(params)}`;
        request.open(mode, url, true);
        request.setRequestHeader('Content-Type', 'application/json');
        request.send();
        request.onreadystatechange = function () {
            if (request.readyState == 4 && request.status == 200) {
                utils.url = url;
                utils.response = JSON.parse(request.responseText);
            };
        };
    };
    window.utils.sendRequest =  window.utils.sendRequest || sendRequest;
    window.utils.space =  window.utils.space || {};
    function getStartTime() {
        let currentTime = new Date();
        let year = currentTime.getFullYear();
        let month = currentTime.getMonth() + 1;
        let day = currentTime.getDate();
        let startTime = new Date(`${year}-${month}-${day} 12:30:00`);
        return startTime.getTime();
    };
    function searchLecture() {
        delete utils.response;
        let listUrl = 'http://lecture.szu.edu.cn/tLectureSignUp/list?page=1&limit=10';
        utils.sendRequest(listUrl);
        (function waitListResponse() {
            if (utils.response) {
                let firstLecture = utils.response['data'][0];
                delete utils.response;
                if (firstLecture.status == '正在报名中') {
                    let signUpUrl = `http://lecture.szu.edu.cn/lectureClassroomSignUp/list?page=1&limit=20&lectureId=${firstLecture.id}`;
                    utils.sendRequest(signUpUrl);
                    (function waitSignUpResponse() {
                        if (utils.response) {
                            let reservedSeats = utils.response['data'];
                            delete utils.response;
                            let availableReservedSeats = [];
                            for (let reservedSeat of reservedSeats) {
                                if (utils.space.area.includes(reservedSeat.campus)) {
                                    availableReservedSeats.push(reservedSeat);
                                };
                            };
                            if (availableReservedSeats.length > 0) {
                                utils.space.isSignUp = false;
                                utils.space.unfilledCount = 0;
                                for (let i = availableReservedSeats.length - 1; i >= 0; i--) {
                                    let availableReservedSeat = availableReservedSeats[i];
                                    if (availableReservedSeat.chooseStatus != '已报满') {
                                        utils.space.unfilledCount += 1;
                                        let emptySeat = availableReservedSeat;
                                        let addItemUrl = 'http://lecture.szu.edu.cn/tSelectLecture/addItem';
                                        let params = `lectureClassroomId=${emptySeat.id}&lectureId=${emptySeat.lectureId}&classroomId=${emptySeat.classroomId}`;
                                        utils.space.waitRequest = true;
                                        utils.sendRequest(addItemUrl, params, 'POST');
                                        (function waitAddItemResponse() {
                                            if (utils.response) {
                                                if (utils.response.code == 200) {
                                                    console.log(`报名${emptySeat.campus}的位于${emptySeat.building}的讲座《${firstLecture.name}》成功,请刷新网页查看 (code: 5)`);
                                                    utils.space.isSignUp = true;
                                                } else {
                                                    console.log(`报名${emptySeat.campus}的位于${emptySeat.building}的讲座《${firstLecture.name}》失败,错误信息如下 (code: 4)`);
                                                    console.log(utils.response);
                                                };
                                                delete utils.response;
                                                utils.space.waitRequest = false;
                                            } else {
                                                setTimeout(waitAddItemResponse, 50);
                                            };
                                        })();
                                    };
                                    while (utils.space.waitRequest)
                                        ; // do nothing
                                    if (utils.space.isSignUp)
                                        break;
                                };
                                if (utils.space.unfilledCount == 0) {
                                    console.log('讲座的所有场次已满,报名失败 (code: 3)');
                                } else if (!utils.space.isSignUp) {
                                    searchLecture();
                                };
                            } else {
                                console.log('所在校区没有开设讲座 (code: 2)');
                            };
                        } else {
                            setTimeout(waitSignUpResponse, 50);
                        };
                    })();
                } else if (firstLecture.status == '报名待启动') {
                    let currentTime = new Date().getTime();
                    let startTime = getStartTime();
                    if (Math.abs(currentTime - startTime) < 3 * 1000) {
                        utils.space.reload();
                    } else {
                        console.log('最新的领航讲座目前不可报名 (code: 1)');
                    };
                } else {
                    console.log('最新的领航讲座目前不可报名 (code: 0)');
                };
            } else {
                setTimeout(waitListResponse, 50);
            };
        })();
    };
    function exec() {
        if (IS_LIHU_AREA) {
            utils.space.area = ['丽湖校区'];
        };
        let startTime = getStartTime();
        let currentTime = new Date().getTime();
        if (currentTime < startTime) {
            let deltaTime = startTime - currentTime;
            setTimeout(() => {
                utils.space.reload();
            }, deltaTime);
        } else {
            searchLecture();
        };
    };
    exec();
})();

QingJ © 2025

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