【深圳大学2020级新生专用/使用前请看使用说明】可用于抢领航讲座,由于无法进行测试,大家请抱着试用的心态使用该脚本。
目前為
// ==UserScript==
// @name Rush lecture
// @name:en Rush lecture
// @namespace http://tampermonkey.net/
// @version 0.5
// @description 【深圳大学2020级新生专用/使用前请看使用说明】可用于抢领航讲座,由于无法进行测试,大家请抱着试用的心态使用该脚本。
// @description:en 【深圳大学2020级新生专用/使用前请看使用说明】可用于抢领航讲座,由于无法进行测试,大家请抱着试用的心态使用该脚本。
// @author cc
// @match http://lecture.szu.edu.cn/*
// @grant none
// ==/UserScript==
(function() {
'use strict';
const IS_LIHU_AREA = false;
location.area = ['粤海校区', '沧海校区'];
window.utils = window.utils || {};
function sendRequest(url, params='', mode='GET') {
let request = new XMLHttpRequest();
if (mode == 'GET') {
if (url.indexOf('?') < 0 && params.length > 0) {
url = `${url}?${encodeURIComponent(params)}`;
};
} else if (mode == 'POST') {
if (url.indexOf('?') >= 0) {
let index = url.indexOf('?');
params = url.substring(index) + 1;
url = url.substring(0, index);
};
};
request.open(mode, url, true);
request.setRequestHeader('Content-Type', 'application/json');
if (params.length > 0) {
request.send(params);
} else {
request.send();
};
request.onreadystatechange = function () {
if (request.readyState == 4 && request.status == 200) {
utils.response = request.responseText;
};
};
};
window.utils.sendRequest = window.utils.sendRequest || sendRequest;
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() {
utils.response = undefined;
let listUrl = 'http://lecture.szu.edu.cn/tLectureSignUp/list?page=1&limit=10';
utils.sendRequest(listUrl);
(function waitListResponse() {
if (utils.response) {
let firstLecture = JSON.parse(utils.response)['data'][0];
utils.response = undefined;
if (firstLecture.status == '正在报名中') {
let signUpUrl = `http://lecture.szu.edu.cn/lectureClassroomSignUp/list?page=1&limit=20&lectureId=${firstItem.id}`;
utils.sendRequest(signUpUrl);
(function waitSignUpResponse() {
if (utils.response) {
let reservedSeats = JSON.parse(utils.response)['data'];
utils.response = undefined;
let availableReservedSeats = [];
for (let reservedSeat of reservedSeats) {
if (location.area.includes(reservedSeat.campus)) {
availableReservedSeats.push(reservedSeat);
};
};
if (availableReservedSeats.length > 0) {
location.isSignUp = false;
location.unfilledCount = 0;
for (let i = availableReservedSeats.length - 1; i >= 0; i--) {
let availableReservedSeat = availableReservedSeats[i];
if (availableReservedSeat.chooseStatus != '已报满') {
location.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.sendRequest(addItemUrl, params, 'POST');
(function waitAddItemResponse() {
if (utils.response) {
if (utils.response.code == 200) {
console.log(`报名${emptySeat.campus}的位于${emptySeat.building}的讲座《${firstLecture.name}》成功 (code: 4)`);
location.isSignUp = true;
alert('报名成功,请刷新网页查看');
} else {
console.log(`报名${emptySeat.campus}的位于${emptySeat.building}的讲座《${firstLecture.name}》失败 (code: 4)`);
};
utils.response = undefined;
} else {
setTimeout(waitAddItemResponse, 50);
};
})();
};
if (location.isSignUp) {
break;
};
};
if (location.unfilledCount == 0) {
console.log('讲座的所有场次已满,报名失败 (code: 3)');
} else if (!location.isSignUp) {
searchLecture();
};
} else {
console.log('所在校区没有开设讲座 (code: 2)');
};
} else {
setTimeout(waitSignUpResponse, 50);
};
})();
} else if (firstItem.status == '报名待启动') {
let currentTime = new Date().getTime();
let startTime = getStartTime();
if (Math.abs(currentTime - startTime) < 3 * 1000) {
location.reload();
} else {
console.log('最新的领航讲座目前不可报名 (code: 1)');
};
} else {
console.log('最新的领航讲座目前不可报名 (code: 0)');
};
} else {
setTimeout(waitListResponse, 50);
};
})();
};
function exec() {
if (IS_LIHU_AREA) {
location.area = ['丽湖校区'];
};
let startTime = getStartTime();
let currentTime = new Date().getTime();
if (currentTime < startTime) {
let deltaTime = startTime - currentTime;
setTimeout(() => {
location.reload();
}, deltaTime);
} else {
searchLecture();
};
};
exec();
})();