python自己做课程表_Python 大学生课表 iCalendar (.ics) 生成
Python 大學(xué)生課表 iCalendar (.ics) 生成
簡(jiǎn)介
大一新生第一次接觸大學(xué)生課表,在有 Mac、iPhone 和 Apple Watch 設(shè)備的情況下希望能將自己的課表導(dǎo)入內(nèi)置日歷應(yīng)用,以更方便的隨時(shí)查看課表和規(guī)劃行程。由于沒(méi)有找到比較合適的 app 故自己寫(xiě)了這一代碼。推薦使用 Python 3 運(yùn)行。
[限定] 重慶郵電大學(xué)學(xué)生
如果你是重慶郵電大學(xué)學(xué)生,直接使用 timetable_cqupt_automatic.py,就可以自動(dòng)獲取并生成來(lái)自教務(wù)在線的課表和考試安排。
如果將代碼配合 crontab 任務(wù),即可在你的服務(wù)器上創(chuàng)建 ics 訂閱,隨時(shí)獲得最新的包含調(diào)停課(部分)的課表和考試安排。
直接修改代碼中的學(xué)號(hào),并修改代碼最后的 ics 文件保存位置即可,課表和考試安排數(shù)據(jù)由重慶郵電大學(xué)紅巖網(wǎng)校所開(kāi)發(fā)掌上重郵 app (cyxbsmobile) 提供。
功能
支持錄入課程名稱(chēng),教師,必修/選修,學(xué)分,上課地點(diǎn),星期幾,周數(shù)和第幾節(jié)課及一個(gè)附加信息
支持單獨(dú)周數(shù),范圍周數(shù),奇偶周數(shù),如 "第2周,5-11單數(shù)周,13-17 周"
支持 Apple Maps GPS 信息(需手動(dòng)補(bǔ)充,后續(xù)說(shuō)明),在日歷中添加教室位置,并可利用 iOS 的 Siri 分析功能在多個(gè) App 中獲得附加功能
你可以獲得 Apple 軟件中的特別功能:例如向 Siri 問(wèn):我今天有什么事情?我下周五有什么安排?例如在 Apple Watch 表盤(pán)上獲得下節(jié)課的時(shí)間和地點(diǎn)…… 添加 GPS 信息后,你還可以獲得 Apple Maps 出發(fā)時(shí)間提醒,Siri 與搜索自動(dòng)聯(lián)想等功能。
使用
請(qǐng)調(diào)整代碼中的以下內(nèi)容以適配自己的課表:
maxWeek 為本學(xué)期最大周數(shù),有 20 周即寫(xiě) 20 周,為了方便后續(xù)代碼將自動(dòng) +1,也可以去掉代碼中的 maxWeek += 1,然后填寫(xiě)已經(jīng) + 1 后的周數(shù)。
classTime 為每節(jié)課的上課時(shí)間,以元組形保存。為了方便后續(xù)第 n 節(jié)課直接為[n],預(yù)留了第 0 項(xiàng)為None,可以不做修改。直接填寫(xiě)每節(jié)課的 24 小時(shí)制上課時(shí)間:例如 8:00 上課,則錄入(8, 0);下午 7:50 上課,則錄入(19, 50)。
修改 starterDay 為本學(xué)期第一周星期一的日期。
修改 classes 中的課程信息,由于不同學(xué)校課表可能含有不同信息,請(qǐng)參考源代碼中的課表填寫(xiě),并直接在后續(xù)定義中作出相應(yīng)修改:
在 for Class in classes: 后,定義了不同的變量,均可進(jìn)行自定義。最終,Title變量為日歷項(xiàng)的標(biāo)題,Description變量為日歷項(xiàng)的備注,均可根據(jù)自己喜好修改。您只需要一點(diǎn)點(diǎn) Python 基礎(chǔ)即可看懂源代碼并作出修改。
如何設(shè)置周數(shù)? 單獨(dú)周:請(qǐng)改為數(shù)組形式,例如 [2]; 范圍周:請(qǐng)使用rgWeek,例如 rgWeek(3, 7) 代表第三周到第七周; 奇數(shù)周:請(qǐng)使用oeWeek,例如 oeWeek(2, 9, 1) 代表第二周到第九周的單數(shù)周,將 1 改為 0 即為偶數(shù)周。
如何設(shè)置課程節(jié)數(shù)? 一節(jié)課:請(qǐng)改為數(shù)組形式,例如 [2]; 范圍課,請(qǐng)使用rgWeek,例如 rgWeek(3, 7) 代表第三節(jié)一直上到第七節(jié);
如果周數(shù)、節(jié)數(shù)是由多項(xiàng)組成,請(qǐng)使用加法。例如,第2周,5-11單數(shù)周,13-17 周,則為:
[2] + oeWeek(5, 11, 1) + rgWeek(13, 17)
在classEndTime.append行末尾將 "+ 45" 修改為加每節(jié)課的時(shí)長(zhǎng),一節(jié)課 40 分鐘則為 "+ 40"。
更改 jWrite 中的文件目錄為合適的位置以便輸出最終結(jié)果
庫(kù)中的 timetable_cqupt.py 是重慶郵電大學(xué)同學(xué)的一個(gè)版本,timetable_cqu.py 是重慶大學(xué)同學(xué)的一個(gè)版本,供你參考兩種不同的 classes 和 Class 的變量?jī)?nèi)容。
添加 Apple Maps GEO
這一功能僅在 Apple 設(shè)備上進(jìn)行測(cè)試,在 iCalendar 標(biāo)準(zhǔn)中,似乎定義 GEO 項(xiàng)并輸入坐標(biāo)即可確定位置,但在 iOS 和 macOS 上驗(yàn)證不通過(guò)。
Apple 日歷使用了X-APPLE-STRUCTURED-LOCATION,X-APPLE-MAPKIT-HANDLE來(lái)記錄 Apple Maps 位置信息,這一項(xiàng)包含位置文字和坐標(biāo)。一個(gè)樣例內(nèi)容如下:
LOCATION:重慶郵電大學(xué)綜合實(shí)驗(yàn)大樓\n南山路新力村
X-APPLE-STRUCTURED-LOCATION;VALUE=URI;X-APPLE-MAPKIT-HANDLE=;X-APPLE-RADIUS=500;X-TITLE=重慶郵電大學(xué)綜合實(shí)驗(yàn)大樓\\n南山路新力村:geo:29.524289,106.605595
其中,LOCATION和X-TITLE中的地址必須一字不差的和 Apple Maps 結(jié)果對(duì)應(yīng),不得修改。geo 項(xiàng)則為坐標(biāo)。
為了保證可用性,這一段文本只能手動(dòng)創(chuàng)建日歷項(xiàng)并導(dǎo)出提取。
導(dǎo)出方法
打開(kāi) macOS 日歷 app,創(chuàng)建一個(gè)空白日歷項(xiàng)(請(qǐng)盡量在一個(gè)沒(méi)有太多日歷項(xiàng)的日歷中創(chuàng)建,因?yàn)樯院笮枰獙?dǎo)出整個(gè)日歷),并輸入想要添加的位置保存。
點(diǎn)擊日歷 -> 文件 -> 導(dǎo)出 -> 導(dǎo)出,保存 ics 文件。
用文本編輯器打開(kāi) ics 文件,找到BEGIN:VEVENT中你剛剛建立的包含位置的 VEVENT 項(xiàng)目。
你將可找到類(lèi)似以下兩個(gè)文段:
LOCATION:重慶大學(xué)虎溪校區(qū)\n大學(xué)城南路55號(hào)
X-APPLE-STRUCTURED-LOCATION;VALUE=URI;X-APPLE-MAPKITHANDLE=一大串文字;X-APPLE-RADIUS=925.4324489259043;X-TITLE=重慶大學(xué)虎溪校區(qū)\\n大學(xué)城南路5號(hào):geo:29.592566,106.299150
直接將 <一大串文字> 全部去掉,注意不要?jiǎng)h除后面的分號(hào),RADIUS 可以不修改,TITLE 中的文字請(qǐng)勿修改。
最后,將這一段文字替換代碼中的 customGEO(代碼中有重慶大學(xué)虎溪校區(qū)和重慶郵電大學(xué)部分樓棟信息作為參考,你也可以以這樣的方式處理不同的教學(xué)樓)。注意在 Python 文段中保留 \n 需要多加一個(gè)斜線,保留雙斜線 n 則需要四斜線。
聯(lián)系作者
直接提交 Issue
— 重慶郵電大學(xué)國(guó)際學(xué)院
總結(jié)
以上是生活随笔為你收集整理的python自己做课程表_Python 大学生课表 iCalendar (.ics) 生成的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: libvirt简介
- 下一篇: php两个问号??表示什么意思