小爱课表一键导入图文教程
前言
因为觉得市面上的大多数课表管理软件体验不佳
(广告多,臃肿,界面不美观,功能单一)
在经过无数的选择后,发现小爱课程表符合预期
(轻便,美观,无广告,提醒功能实用)
但是这玩意并没有适配我皇家大理工【滑稽】
于是只好自己开发脚本适配,方便大家使用
bug反馈:QQ:2922265540
直接上结果图。。。
使用教程
软件名称:小爱课程表(小米官方出品)
脚本已经通过小米官方审核,大家可放心使用
以下步骤并不一定严格遵守,我会精确到每一步操作
教程是为了帮助多次失败的同学【滑稽】
大致操作流程
详细图文教程
1同意相关条款
2.直接进入个人中心设置
3.设置课程节数
4.选择学校(懂的都懂,别选AI)
5.登录教务网站
相关代码(可进行定制开发【滑稽】)
function scheduleHtmlProvider(iframeContent = "", frameContent = "", dom = document) {
if (dom.querySelector('#tb > button.btn.btn-default.btn-primary').textContent.trim() === '列表') {
return '<div id="type">list</div>' + dom.querySelector('#kblist_table').outerHTML
} else {
return '<div id="type">table</div>' + dom.querySelector('#kbgrid_table_0').outerHTML
}
}
function getSections(strarr) {
var sections = [];
for (var i = 0; i < strarr.length; i++) {
var str2 = strarr[i].split('-')
for (var j = parseInt(str2[0]); j <= parseInt(str2[1]); j++) {
sections.push({section:j })
}
}
return sections
}
function getTime(str) {
let reg = new RegExp(/\d?\d-\d?\d/g);
let regResult = reg[Symbol.match](str)
let weeks = getWeeks(regResult.pop())
console.log([weeks, getSections(regResult)])
return ([weeks, getSections(regResult)])
}
function getWeeks(str) {
var weeks = [];
var str2 = str.split('-')
for (var i = parseInt(str2[0]); i <= parseInt(str2[1]); i++) {
weeks.push(i)
}
return weeks
}
// 解析列表模式
// function parseList(html) {
// let result = []
// const $ = cheerio.load(html, {decodeEntities: false});
// $('#kblist_table').find('tbody').each(function (weekday) {
// if (weekday > 0) {
// $(this).find('tr').each(function (index) {
// if (index > 0) {
// let course = {}
// $(this).find('td').each(function (i) {
// if (i == 0) {
// course.sections = getSections($(this).text())
// } else {
// course.name = $(this).find('.title').text()
// let info = []
// $(this).find('p font').each(function () {
// let text = $(this).text().trim()
// if (text.search('上课地点') != -1) {
// text = text.replace('上课地点:', '')
// }
// info.push(text.split(':')[1])
// })
// let reg = new RegExp('周', 'g')
// let weekStr = info[0].replace(reg, '')
// course.weeks = getWeeks(weekStr)
// course.teacher = info[2]
// course.position = info[1]
// course.day = weekday
// }
// })
// result.push(course)
// }
// })
// }
// })
// console.log(result)
// return result
// }
// 解析表格模式
function parseTable(html) {
const $ = cheerio.load(html, {decodeEntities: false});
let result = []
$('#kbgrid_table_0').find('td').each(function () {
if ($(this).hasClass('td_wrap') && $(this).text().trim() !== '') {
let info = []
let weekday = parseInt($(this).attr('id').split('-')[0])
$(this).find('font').each(function () {
let text = $(this).text().trim()
if (text !== '') {
info.push(text)
}
})
console.log(info)
let hasNext = true
let index = 0
while (hasNext) {
let course = {}
course.name = info[index].slice(0,-1)
course.teacher = info[index + 3]
course.position = info[index + 2].replace('申江校区(军工路1100) ', '')
course.day = weekday
let [weeks, sections] = getTime(info[index + 1])
course.weeks = weeks
course.sections = sections
result.push(course)
if (info[index + 5] !== undefined) {
index += 5
} else {
hasNext = false
}
}
}
})
return result
}
function scheduleHtmlParser(html) {
let result = []
let finall = {}
if ($('#type').text() === 'list') {
result = parseList(html)
} else {
result = parseTable(html)
}
finall["courseInfos"] = result
finall["sectionTimes"] = [{
"section": 1,
"startTime": "08:00",
"endTime": "08:45"
},
{
"section": 2,
"startTime": "08:50",
"endTime": "09:35"
},
{
"section": 3,
"startTime": "09:55",
"endTime": "10:40"
},
{
"section": 4,
"startTime": "10:45",
"endTime": "11:30"
},
{
"section": 5,
"startTime": "11:35",
"endTime": "12:20"
},
{
"section": 6,
"startTime": "13:15",
"endTime": "14:00"
},
{
"section": 7,
"startTime": "14:05",
"endTime": "14:50"
},
{
"section": 8,
"startTime": "15:05",
"endTime": "15:50"
},
{
"section": 9,
"startTime": "15:55",
"endTime": "16:40"
},
{
"section": 10,
"startTime": "18:00",
"endTime": "18:45"
},
{
"section": 11,
"startTime": "18:50",
"endTime": "19:35"
},
{
"section": 12,
"startTime": "19:40",
"endTime": "20:25"
}]
console.log(finall)
return finall
}