摘" 要:為解決校外查課既困難又煩瑣的問題,開發(fā)一款SouTool查課微信小程序。通過先進(jìn)技術(shù)的運(yùn)用可給用戶帶來高效、便捷的查課體驗(yàn),贏得師生的廣泛贊譽(yù)。系統(tǒng)采用uni-app框架,實(shí)現(xiàn)了跨平臺穩(wěn)定運(yùn)行。使用Python爬蟲技術(shù)從教務(wù)系統(tǒng)中快速抓取課表信息。此外,MySQL數(shù)據(jù)庫、Redis緩存以及PHP后端技術(shù)的運(yùn)用,確保了數(shù)據(jù)的存儲安全、查詢便捷以及業(yè)務(wù)邏輯的穩(wěn)定實(shí)現(xiàn)。用戶在微信客戶端打開小程序即可獲取課程信息,從而擺脫錯(cuò)過課程的煩惱。
關(guān)鍵詞:查課微信小程序;uni-app;Python;PHP
中圖分類號:TP311.5" 文獻(xiàn)標(biāo)識碼:A" 文章編號:2096-4706(2024)12-0105-05
SouTool Course Checking WeChat Mini Program Developed Based on uni-app and PHP
MIN Hui, LIU Jianhua
(School of Software, Hunan College of Information, Changsha" 410200, China)
Abstract: To solve the problem of difficult and tedious extracurricular course checking, it develops a “SouTool” course checking WeChat Mini Program. The application of advanced technology can bring users an efficient and convenient course checking experience, winning widespread praise from teachers and students. The system adopts the uni-app framework, achieving stable cross platform operation. It uses Python crawler technology to quickly retrieve schedule information from the educational administration system. In addition, the application of MySQL database, Redis cache, and PHP backend technology ensures the security of data storage, convenient querying, and stable implementation of business logic. Users can access course information by opening the Mini Program on the WeChat client, thus eliminating the hassle of missing courses.
Keywords: course checking WeChat Mini Program; uni-app; Python; PHP
0" 引" 言
十八大以來,習(xí)近平總書記圍繞筑牢國家網(wǎng)絡(luò)安全屏障發(fā)表了一系列重要論述,多次強(qiáng)調(diào)沒有網(wǎng)絡(luò)安全就沒有國家安全[1]。湖南信息職業(yè)技術(shù)學(xué)院高度重視網(wǎng)絡(luò)安全和信息化管理工作。教務(wù)管理系統(tǒng)作為網(wǎng)絡(luò)安全管理的重要組成部分,學(xué)院通過限定訪問的方式來加強(qiáng)對系統(tǒng)的有效管理。當(dāng)前,可以通過兩種方式訪問該教務(wù)管理系統(tǒng):
1)用戶在校內(nèi)可以通過登錄校園網(wǎng)的方式進(jìn)入教務(wù)管理系統(tǒng)進(jìn)行相關(guān)操作。
2)用戶在校外則可以通過VPN遠(yuǎn)程訪問的方式登錄教務(wù)管理系統(tǒng)進(jìn)行相關(guān)操作。
兩種方式對于老師和學(xué)生來說都不是很便捷,鑒于此,本文設(shè)計(jì)一款名為SouTool的查課微信小程序。該程序通過Python技術(shù)自動(dòng)爬取學(xué)校教務(wù)管理系統(tǒng)官網(wǎng)上的數(shù)據(jù),并將這些數(shù)據(jù)存儲于自己的服務(wù)器中。用戶打開微信客戶端,進(jìn)入SouTool查課小程序后即可查看自己的課表,這樣可避免遺漏課程。
1" 系統(tǒng)簡介
SouTool查課微信小程序是一款高效便捷的課程信息查詢工具,提供對學(xué)生課表、教師課表、教室課表、學(xué)生日歷課表、教師日歷課表及課程安排等項(xiàng)目的查詢功能。系統(tǒng)的功能結(jié)構(gòu)如圖1所示。自上線以來,SouTool查課小程序受到廣大師生的熱烈歡迎,累計(jì)用戶數(shù)已達(dá)1.68萬,日均啟用2萬多次。小程序后臺訪問數(shù)據(jù)如圖2所示。
2" 系統(tǒng)技術(shù)方案
SouTool查課小程序使用跨平臺框架uni-app進(jìn)行開發(fā),并借助uni-app生態(tài)中的一流UI框架——uView2進(jìn)行視覺美化。程序的核心部分采用了Python爬蟲技術(shù),自動(dòng)從學(xué)校的教務(wù)管理系統(tǒng)中獲取課表數(shù)據(jù)。為了保證數(shù)據(jù)的安全存儲和處理,系統(tǒng)使用了MySQL數(shù)據(jù)庫。此外,后端還引入了Redis緩存系統(tǒng),緩存查詢過的數(shù)據(jù),提高查詢效率。最后,系統(tǒng)利用PHP技術(shù)來處理和實(shí)現(xiàn)程序的各種業(yè)務(wù)邏輯。
系統(tǒng)所有技術(shù)如下:
1)uni-app框架。uni-app是一個(gè)使用Vue.js開發(fā)所有前端應(yīng)用的框架,開發(fā)者編寫一套代碼,可發(fā)布到iOS、Android、Web(響應(yīng)式),以及各種小程序(微信、支付寶、百度、頭條、飛書、QQ、快手、釘釘、淘寶)、快應(yīng)用等多個(gè)平臺[2]。
2)PHP語言。超級文本預(yù)處理語言PHP(Hypertext Preprocessor)是一種HTML嵌入式的腳本語言,適用于Web開發(fā)領(lǐng)域[3]。PHP應(yīng)用范圍較廣,它具有開源、免費(fèi)、跨平臺、面向?qū)ο?、支持多種數(shù)據(jù)庫等特點(diǎn)[4]。
3)Redis緩存系統(tǒng)。Redis是一種開源的、支持網(wǎng)絡(luò)、可基于內(nèi)存亦可持久化的日志型Key-Value數(shù)據(jù)庫,它提供多種語言API,具備高度的靈活性和效率性[5]。
4)Python語言。Python語言是目前廣受喜愛的程序設(shè)計(jì)語言之一,廣泛應(yīng)用于管理任務(wù)和科學(xué)計(jì)算方面[6]。它簡單易學(xué),擁有許多標(biāo)準(zhǔn)庫,在Windows或Unix等平臺具有很好的兼容性[7,8]。
3" 系統(tǒng)數(shù)據(jù)庫設(shè)計(jì)
系統(tǒng)共有7個(gè)數(shù)據(jù)庫表,分別為班級表、教師表、教室表、課程安排表、輪播圖表、課程表、公告表。各表之間的關(guān)聯(lián)關(guān)系如圖3所示。
其中:
1)班級表用于記錄各個(gè)班級的詳細(xì)信息,包括班級ID、班級名稱、年級和專業(yè)等關(guān)鍵字段。
2)教師表記錄每位教師的信息,包括教師ID、教師名稱和別名等字段。
3)教室表用于存儲教室的相關(guān)信息,包括教室ID、教室名稱、教室地點(diǎn)以及教室別名等字段。
4)課程安排表是關(guān)于課程安排的關(guān)鍵信息表,其中包含課程安排ID、課程名稱、年級、專業(yè)名稱、學(xué)院、學(xué)分、課時(shí)和總課時(shí)等字段。
5)輪播圖表用于存儲輪播圖的相關(guān)信息,包括輪播圖ID、輪播圖地址和跳轉(zhuǎn)地址等字段。
6)課程表是課程、班級與教師的連接橋梁,其中包含課程ID、課程名稱、班級ID和教師ID等關(guān)鍵字段。
7)公告表用于存儲公告的詳細(xì)內(nèi)容,包括公告ID和公告內(nèi)容等字段。
4" 小程序部分功能實(shí)現(xiàn)
4.1" 授權(quán)頁
用戶首次啟動(dòng)SouTool查課微信小程序時(shí),需要進(jìn)行微信授權(quán)登錄,以確保賬戶的安全性和隱私保護(hù)。授權(quán)登錄頁面如圖4(a)所示,用戶只需點(diǎn)擊“確定”按鈕即可完成授權(quán)和登錄,登錄頁面如圖4(b)所示。值得一提的是,授權(quán)請求僅在用戶首次登錄時(shí)出現(xiàn),后續(xù)再次進(jìn)入小程序無須重復(fù)授權(quán)。一旦用戶完成授權(quán)操作,系統(tǒng)即可獲取用戶的頭像和昵稱信息,以便為用戶提供更為個(gè)性化的服務(wù)體驗(yàn)。
4.2" 首頁及學(xué)生課表頁
用戶成功完成授權(quán)后將進(jìn)入首頁,用戶可在首頁中心位置看到當(dāng)天的課程表,如圖5(a)所示。首頁中部分布著程序的各大功能模塊入口,用戶只需點(diǎn)擊某功能入口即可進(jìn)入對應(yīng)的功能頁面。例如,用戶點(diǎn)擊“學(xué)生課表”功能入口后將進(jìn)入學(xué)生課表查詢頁,頁面效果如圖5(b)所示。
在課表查詢頁中,下方位置設(shè)有日期、上一周和下一周的鏈接。用戶單擊日期后會彈出日期選擇控件,他們可以隨意選擇日期,查看所選日期該班級的課程表。同樣地,通過單擊上一周或下一周的鏈接,用戶能夠查看該班級上一周或下一周的課表。
課表查詢頁上方正中央位置會顯示班級名稱。用戶單擊班級名稱后會彈出班級選擇頁,頁面效果如圖5(c)所示。在班級選擇頁中,用戶可以選擇任意班級查詢該班級的課程表。
4.3" 教師課表頁及教室課表頁
教師課表頁和教室課表頁分別用于查詢教師課表和教室課表,頁面效果如圖6(a)和6(b)所示。單擊圖6(a)上方的教師姓名可進(jìn)入教師選擇頁,如圖6(c)所示,選擇任意教師可查看該教師的課表;單擊圖6(b)上方的教室名可進(jìn)入教室選擇頁,切換教室選擇頁面中央的日期,可以查看所選日期該教室的課表信息。教室選擇頁下方顯示上一周和下一周鏈接,單擊相應(yīng)鏈接可查看該教室上一周和下一周的課表。
4.4" 教師日歷課表和教學(xué)計(jì)劃安排
教師日歷課表可供用戶查看教師當(dāng)月的課表及其任意月份的課表,課表以日歷表盤的方式顯示,效果如圖7(a)所示。日歷表盤中紅點(diǎn)標(biāo)記表示該日期有課,綠點(diǎn)標(biāo)記表示該日期無課。單擊任意一個(gè)有課日期,下方會出現(xiàn)當(dāng)天具體的課表信息。學(xué)生日歷課表和教師日歷課表相似,在此不再贅述。
教學(xué)計(jì)劃模塊可供用戶查看各專業(yè)、各年級的授課計(jì)劃,方便學(xué)生有的放矢地進(jìn)行下一階段課程的提前學(xué)習(xí)。教學(xué)計(jì)劃頁效果如圖7(b)所示。選擇授課專業(yè)和授課年級,單擊查詢按鈕可查看該專業(yè)指定年級的教學(xué)內(nèi)容。
教學(xué)計(jì)劃部分前端代碼如下:
lt;view class=\"title\" @click=\"CliSelect\"gt;
{{name}}(本月有{{days.dayCount}}天有課,總共有{{days.dayCounts}}節(jié)課)
lt;/viewgt;
lt;view class=\"calendar\"gt;
lt;courseCalendar@change=\"change\" @switch=
\"swich\" :lunar=\"true\" :selected=\"select\" @create=\"init\"gt;
lt;/courseCalendargt;
lt;/viewgt;
lt;view class=\"klist\"gt;
lt;uni-section :title=\"ktitle\" type=\"line\"gt;
lt;uni-card :title=\"item.bname\" :extra=\"item.name\" v-for=\"item in klist\"gt;
lt;text class=\"uni-body\"gt;第{{item.lesson}}節(jié)課 - {{item.kname}} - {{item.addr}}lt;/textgt;
lt;/uni-cardgt;
lt;/uni-sectiongt;
lt;/viewgt;
5" 系統(tǒng)關(guān)鍵技術(shù)
該系統(tǒng)存在兩大關(guān)鍵技術(shù)難題,一是如何高效獲取課表數(shù)據(jù),二是如何提高系統(tǒng)的響應(yīng)速度。為了及時(shí)更新課表數(shù)據(jù),同時(shí)避免給教務(wù)系統(tǒng)服務(wù)器帶來過大的壓力,采用定時(shí)任務(wù)[9]和Python爬蟲服務(wù)來獲取教務(wù)系統(tǒng)中的課表數(shù)據(jù)。具體來說,系統(tǒng)默認(rèn)每10分鐘通過爬蟲服務(wù)向教務(wù)系統(tǒng)獲取一次課表數(shù)據(jù),具體步驟如下:
1)設(shè)定每10分鐘請求一次數(shù)據(jù)。
2)系統(tǒng)獲取相關(guān)數(shù)據(jù)。
3)使用正則表達(dá)式[10]對數(shù)據(jù)進(jìn)行清洗和處理。
4)將清洗后的數(shù)據(jù)存儲到內(nèi)網(wǎng)數(shù)據(jù)庫中。隨后,內(nèi)網(wǎng)服務(wù)器會將內(nèi)網(wǎng)數(shù)據(jù)庫中的課表數(shù)據(jù)實(shí)時(shí)推送到外網(wǎng)服務(wù)器,供SouTool查課小程序查詢使用。
課表數(shù)據(jù)獲取的部分代碼如下:
import time
from apscheduler.schedulers.blocking import BlockingScheduler
from kebiao import UpdateKebiao
sched = BlockingScheduler(timezone='Asia/Shanghai')
def Update():
hour = time.strftime(\"%H\", time.localtime(time.time()))
if list(range(7, 24)).count(int(hour)) == 0:
print(hour + \"h,免更新\")
return
UpdateKebiao()
Update()
sched.add_job(Update, 'interval', minutes=10, max_instances=6)
sched.start()
由于本系統(tǒng)主要是一個(gè)查詢系統(tǒng),不需要進(jìn)行更新、修改等操作,因此采用Redis緩存技術(shù)來提高系統(tǒng)的響應(yīng)速度。具體來說,當(dāng)SouTool查課小程序向后臺請求課表數(shù)據(jù)時(shí),Redis會查詢緩存中是否存在該數(shù)據(jù),如果存在直接返回課表數(shù)據(jù),否則系統(tǒng)會查詢MySQL數(shù)據(jù)庫,并將查詢到的結(jié)果同步到Redis緩存中。最終系統(tǒng)將查詢到的JSON數(shù)據(jù)返回給SouTool查課小程序。
6" 結(jié)" 論
本文介紹了基于uni-app和PHP開發(fā)的SouTool查課微信小程序,該小程序可以幫助用戶解決校外查課困難且煩瑣的問題。文章對系統(tǒng)的技術(shù)方案、數(shù)據(jù)庫設(shè)計(jì)、部分功能的實(shí)現(xiàn)以及關(guān)鍵技術(shù)進(jìn)行了詳細(xì)的闡述。通過uni-app框架、Python爬蟲技術(shù)、MySQL數(shù)據(jù)庫、Redis緩存系統(tǒng)和PHP技術(shù)的運(yùn)用,小程序?qū)崿F(xiàn)了跨平臺穩(wěn)定運(yùn)行、快速抓取課表信息、安全存儲數(shù)據(jù)以及提高課表查詢效率的目標(biāo)。
參考文獻(xiàn):
[1] 中央網(wǎng)絡(luò)安全和信息化委員會辦公室,中華人民共和國國家互聯(lián)網(wǎng)信息辦公室.習(xí)近平:沒有網(wǎng)絡(luò)安全就沒有國家安全 [EB/OL].[2023-11-10].https://www.cac.gov.cn/2023-07/14/c_1690986718786673.htm.
[2] 殷慶龍,尚立學(xué),王輝.電機(jī)維修管理APP的設(shè)計(jì)與實(shí)踐 [J].工業(yè)控制計(jì)算機(jī),2023,36(9):23-24.
[3] 胡建偉,趙偉,崔艷鵬,等.一種改進(jìn)ASTNN網(wǎng)絡(luò)的PHP代碼漏洞挖掘方法 [J].西安電子科技大學(xué)學(xué)報(bào),2020,47(6):164-173.
[4] 張日花,劉婷婷,陳紅娟.基于PHP+MySQL的在線相冊設(shè)計(jì)與實(shí)現(xiàn) [J].現(xiàn)代信息科技,2023,7(7):15-19.
[5] 趙維娜,孫博,潘墨堯,等.基于Redis緩存技術(shù)的APS系統(tǒng)架構(gòu)設(shè)計(jì) [J].河北冶金,2023(S1):55-57.
[6] 周競鴻,聶菊榮.基于微信小程序的Python語言學(xué)習(xí)平臺設(shè)計(jì)與實(shí)現(xiàn) [J].信息記錄材料,2023,24(4):201-203.
[7] 姜秋香,郭偉鵬,王子龍,等.Python語言在水文水資源領(lǐng)域中的應(yīng)用與展望 [J].計(jì)算機(jī)工程與應(yīng)用,2023,59(9):46-58.
[8] 崔北元,李金良,孫梅芳.信息技術(shù)助力高中物理試題講評可視化——以Python為例 [J].物理教師,2022,43(7):64-67.
[9] 林中霖,時(shí)金橋,王美琪,等.基于應(yīng)用行為劃分的Android惡意應(yīng)用檢測技術(shù) [J].計(jì)算機(jī)工程,2023,49(9):125-136.
[10] 杜瑞慶,李一諾,黎作鵬.基于Vue和SpringBoot的C語言程序在線測評系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn) [J].唐山師范學(xué)院學(xué)報(bào),2023,45(3):58-63.
作者簡介:閔慧(1987—),女,漢族,湖南湘潭人,講師,碩士,研究方向:軟件開發(fā)。