小爱课表一键导入教程

小爱课表一键导入图文教程

前言

	因为觉得市面上的大多数课表管理软件体验不佳
	(广告多,臃肿,界面不美观,功能单一)
	
	在经过无数的选择后,发现小爱课程表符合预期
	(轻便,美观,无广告,提醒功能实用)
	
	但是这玩意并没有适配我皇家大理工【滑稽】
	于是只好自己开发脚本适配,方便大家使用

	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
}

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值