Python 大学生课表 iCalendar (.ics) 生成

简介

大一新生第一次接触大学生课表,在有 Mac、iPhone 和 Apple Watch 设备的情况下希望能将自己的课表导入内置日历应用,以更方便的随时查看课表和规划行程。由于没有找到比较合适的 app 故自己写了这一代码。推荐使用 Python 3 运行。

[限定] 重庆邮电大学学生

如果你是重庆邮电大学学生,直接使用 timetable_cqupt_automatic.py,就可以自动获取并生成来自教务在线的课表和考试安排。

如果将代码配合 crontab 任务,即可在你的服务器上创建 ics 订阅,随时获得最新的包含调停课(部分)的课表和考试安排。

直接修改代码中的学号,并修改代码最后的 ics 文件保存位置即可,课表和考试安排数据由重庆邮电大学红岩网校所开发掌上重邮 app (cyxbsmobile) 提供。

功能

支持录入课程名称,教师,必修/选修,学分,上课地点,星期几,周数和第几节课及一个附加信息

支持单独周数,范围周数,奇偶周数,如 "第2周,5-11单数周,13-17 周"

支持 Apple Maps GPS 信息(需手动补充,后续说明),在日历中添加教室位置,并可利用 iOS 的 Siri 分析功能在多个 App 中获得附加功能

你可以获得 Apple 软件中的特别功能:例如向 Siri 问:我今天有什么事情?我下周五有什么安排?例如在 Apple Watch 表盘上获得下节课的时间和地点…… 添加 GPS 信息后,你还可以获得 Apple Maps 出发时间提醒,Siri 与搜索自动联想等功能。

使用

请调整代码中的以下内容以适配自己的课表:

maxWeek 为本学期最大周数,有 20 周即写 20 周,为了方便后续代码将自动 +1,也可以去掉代码中的 maxWeek += 1,然后填写已经 + 1 后的周数。

classTime 为每节课的上课时间,以元组形保存。为了方便后续第 n 节课直接为[n],预留了第 0 项为None,可以不做修改。直接填写每节课的 24 小时制上课时间:例如 8:00 上课,则录入(8, 0);下午 7:50 上课,则录入(19, 50)。

修改 starterDay 为本学期第一周星期一的日期。

修改 classes 中的课程信息,由于不同学校课表可能含有不同信息,请参考源代码中的课表填写,并直接在后续定义中作出相应修改:

在 for Class in classes: 后,定义了不同的变量,均可进行自定义。最终,Title变量为日历项的标题,Description变量为日历项的备注,均可根据自己喜好修改。您只需要一点点 Python 基础即可看懂源代码并作出修改。

如何设置周数? 单独周:请改为数组形式,例如 [2]; 范围周:请使用rgWeek,例如 rgWeek(3, 7) 代表第三周到第七周; 奇数周:请使用oeWeek,例如 oeWeek(2, 9, 1) 代表第二周到第九周的单数周,将 1 改为 0 即为偶数周。

如何设置课程节数? 一节课:请改为数组形式,例如 [2]; 范围课,请使用rgWeek,例如 rgWeek(3, 7) 代表第三节一直上到第七节;

如果周数、节数是由多项组成,请使用加法。例如,第2周,5-11单数周,13-17 周,则为:

[2] + oeWeek(5, 11, 1) + rgWeek(13, 17)

在classEndTime.append行末尾将 "+ 45" 修改为加每节课的时长,一节课 40 分钟则为 "+ 40"。

更改 jWrite 中的文件目录为合适的位置以便输出最终结果

库中的 timetable_cqupt.py 是重庆邮电大学同学的一个版本,timetable_cqu.py 是重庆大学同学的一个版本,供你参考两种不同的 classes 和 Class 的变量内容。

添加 Apple Maps GEO

这一功能仅在 Apple 设备上进行测试,在 iCalendar 标准中,似乎定义 GEO 项并输入坐标即可确定位置,但在 iOS 和 macOS 上验证不通过。

Apple 日历使用了X-APPLE-STRUCTURED-LOCATION,X-APPLE-MAPKIT-HANDLE来记录 Apple Maps 位置信息,这一项包含位置文字和坐标。一个样例内容如下:

LOCATION:重庆邮电大学综合实验大楼\n南山路新力村

X-APPLE-STRUCTURED-LOCATION;VALUE=URI;X-APPLE-MAPKIT-HANDLE=;X-APPLE-RADIUS=500;X-TITLE=重庆邮电大学综合实验大楼\\n南山路新力村:geo:29.524289,106.605595

其中,LOCATION和X-TITLE中的地址必须一字不差的和 Apple Maps 结果对应,不得修改。geo 项则为坐标。

为了保证可用性,这一段文本只能手动创建日历项并导出提取。

导出方法

打开 macOS 日历 app,创建一个空白日历项(请尽量在一个没有太多日历项的日历中创建,因为稍后需要导出整个日历),并输入想要添加的位置保存。

点击日历 -> 文件 -> 导出 -> 导出,保存 ics 文件。

用文本编辑器打开 ics 文件,找到BEGIN:VEVENT中你刚刚建立的包含位置的 VEVENT 项目。

你将可找到类似以下两个文段:

LOCATION:重庆大学虎溪校区\n大学城南路55号

X-APPLE-STRUCTURED-LOCATION;VALUE=URI;X-APPLE-MAPKITHANDLE=一大串文字;X-APPLE-RADIUS=925.4324489259043;X-TITLE=重庆大学虎溪校区\\n大学城南路5号:geo:29.592566,106.299150

直接将 <一大串文字> 全部去掉,注意不要删除后面的分号,RADIUS 可以不修改,TITLE 中的文字请勿修改。

最后,将这一段文字替换代码中的 customGEO(代码中有重庆大学虎溪校区和重庆邮电大学部分楼栋信息作为参考,你也可以以这样的方式处理不同的教学楼)。注意在 Python 文段中保留 \n 需要多加一个斜线,保留双斜线 n 则需要四斜线。

联系作者

直接提交 Issue

— 重庆邮电大学国际学院

python自己做课程表_Python 大学生课表 iCalendar (.ics) 生成相关推荐

  1. python自己做课程表_Python课程表II

    假设总共有n个路线,这些路线从0到n-1标记.某些课程可能具有先决条件,鉴于课程总数和先决条件对列表,我们必须找到完成所有课程应采取的课程顺序.可能有多个正确的订单,我们只需要找到其中一个即可.如果不 ...

  2. python自己做课程表_Kivy做一个课程表App(上)

    从HFUTER停止维护以来,有一段艰难的时光,没有表白墙可以刷,校园网崩了就不能看课表,于是我决心照着HFUTER做个类似的App,名字都想好了:HfutCommunity,奈何太菜又太懒,不想学ja ...

  3. python如何做考勤_python基础教程:face++与python实现人脸识别签到(考勤)功能

    @本文来源于公众号:csdn2299,喜欢可以关注公众号 程序员学府 这篇文章主要为大家详细介绍了face++与python实现人脸识别签到(考勤)功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一 ...

  4. python如何做脚本_Python实现自动挂机脚本(基础篇)

    不知不觉肝阴阳师也快一年了,对这游戏真是又爱又恨,最近刚刚发布了PC版,突然很想尝试着写个脚本挂机,话不多说进入正题. 简单的鼠标操作 游戏挂机脚本,无非就是自动移动鼠标,自动点击,进行重复操作,所以 ...

  5. python怎么做图像处理_Python其实也可以做一些简单的图像处理,Python自动生成表情包...

    描述 作为一个数据分析师,应该信奉一句话--"一图胜千言".不过这里要说的并不是数据可视化,而是一款全民向的产品形态--表情包!!!! 表情包不仅仅是一种符号,更是一种文化,是促进 ...

  6. python函数做菜单_PYTHON图形化操作界面的编程七__创建菜单

    PYTHON图形化操作界面的编程七__创建菜单 十八.创建菜单 1.水平菜单的创建 创建菜单需要多条语句,所以这里通过实例来说明水平菜单的创建方法: 下面的语句可以在窗口中添加水平菜单,其中前四行语句 ...

  7. python如何做接口测试_python实现接口测试

    url= "https://mail.163.com/" action= "post" > < case id= "idInputLine ...

  8. python列表做参数_Python ::将列表作为参数传递

    pyen中的响应,一个用于音乐数据的瘦库,以这种方式返回字典: {u'id': u'AR6SPRZ1187FB4958B', u'name': u'Wilco'} 我正在循环并打印艺术家: respo ...

  9. python数组做参数_python函数传递数组参数吗

    函数是任何一门编程语言都不可缺少的,而且也是非常重要的一部分.Python中函数的参数,可以分为以下几类: 位置参数,有时也称必备参数,指的是必须按照正确的顺序将实际参数传到函数中,换句话说,调用函数 ...

最新文章

  1. 域的非验证方式还原与验证方式还原的区别
  2. abap 转换成字符串_SAP ABAP 处理字符串串串串串串串串(详细)
  3. flannel源码分析--LookupExtIface
  4. envi5.2中文版
  5. caliop 数据可视化_星载激光雷达CALIOP数据处理算法概述
  6. 在asp.net core中使用的验证框架FluentValidation
  7. ajax ssm 页面跳转_SSM框架的面试常见问题
  8. Vue、element-ui的resetFields()方法重置表单无效问题及解决办法
  9. oracle 添加监听地址,oracle批改监听地址为localhost
  10. VoltDB公布4.0版本号,大步提高内存实时分析速度,进军操作数据库市场
  11. 动态计算未知盒子的高度
  12. [转]Allegro shape敷铜 显示设置
  13. sublime linux中文版,sublime text 3中文免费版
  14. 每日英语-20171115
  15. 客房管理系统前台代码html,客房管理系统|客房软件|PMS系统|酒店管理系统|酒店管理软件...
  16. MACBOOK 快捷键与系统设置
  17. oracle查询员工表领导级别,emp表中怎么统计每个员工的领导的年薪,并按年薪由高到低排列...
  18. Delphi实现多线程
  19. 解决win10一开机内存(8G)就占用70%多,查看任务管理器并没有占用内存很高的进程的问题
  20. SD卡及其写保护功能

热门文章

  1. 相关方管理---章节练习
  2. java计算机毕业设计vue平顶山香山寺网站源码+数据库+系统+lw文档
  3. 计算机工作无法更改,win10系统计算机工作组名称无法更改的操作方案
  4. 解决win10搜索框无法搜索本地应用或无反应
  5. php 简繁体转换类库,OpenCC for PHP 优雅的简繁体转换
  6. 在.NET中实现彩色光标/动画光标和自定义光标[转]
  7. [乡土民间故事_徐苟三传奇]第四二回_见洋广争啃西瓜皮
  8. 计算机excel求四分位数,如何在Excel中计算一组数字的百分位数和四分位数?
  9. 笔记:GIT配置和命令
  10. 女人最该记得的100本书的100句话