https://github.com/hagb/cqu_timetable_new
课表 -> 日历,wecqu 能不用我还是不想用的。
https://github.com/hagb/cqu_timetable_new
cqu ics timetable-generator
Last synced: 7 months ago
JSON representation
课表 -> 日历,wecqu 能不用我还是不想用的。
- Host: GitHub
- URL: https://github.com/hagb/cqu_timetable_new
- Owner: Hagb
- License: agpl-3.0
- Created: 2021-02-14T15:46:40.000Z (over 4 years ago)
- Default Branch: master
- Last Pushed: 2024-08-25T13:50:36.000Z (about 1 year ago)
- Last Synced: 2025-03-09T14:02:26.501Z (7 months ago)
- Topics: cqu, ics, timetable-generator
- Language: Python
- Homepage: https://mirrors.cqu.edu.cn/cqu-timetable-new/about/
- Size: 142 KB
- Stars: 22
- Watchers: 5
- Forks: 2
- Open Issues: 2
-
Metadata Files:
- Readme: readme.md
- License: LICENSE
Awesome Lists containing this project
README
# ICS 课程表文件生成脚本
适用于最新选课站点生成的 `xlsx` 或 `json` 格式的课表转换为日历软件能认到的 `ICS` 格式文件.
## 使用说明
使用 pip 安装依赖:
```bash
pip install cqu_timetable_new
```### 直接运行 (demo)
准备从新选课网站下载的 `课表.xlsx` 或者点击 `查看课表` 时请求的 json 文件,放置于任意目录。
配置文件格式如下:
```editorconfig
[config]
debug = False
base_dir = /home/ddqi/kb.xlsx
start_date = 20210301
file_name = timetable.ics
alarm = True
duration = 15
```|配置项|类型|示例|注释|
|:-|:--|:--|:--|
|debug|boolean|True|控制是否为调试模式,可选值:True False|
|base_dir|str|/home/ddqi/kb.xlsx|指向课表文件的路径|
|start_date|str|20210301|行课日期|
|file_name|str|timetable.ics|生成的 ics 文件名(为避免编码问题不要用中文),扩展名请勿更改,文件名不可包含中文|
|alarm|boolean|True|是否开启提醒|
|duration|Int|15|提前提醒时间,单位:分钟|将配置文件 `config.txt` 放置在工作目录下,终端执行:
```bash
cqu_timetable_new
```
将生成指定文件名的 iCalendar 格式文件### tkinter 前端
使用 pip 安装依赖:
```bash
pip install cqu_timetable_new[tk]
```
之后可运行
```bash
cqu_timetable_new-tk
```
启动 tkinter 前端。### Qt5 前端
使用 pip 安装依赖:
```bash
pip install cqu_timetable_new[pyqt]
```
之后可运行
```bash
cqu_timetable_new-qt
```
启动 Qt5 前端。### 作为库来使用
使用时需要先生成课表数据,再从课表数据中生成日历
1. 生成课表数据
- 可通过 `loadIO_from_json` 或 `loadIO_from_xlsx` 函数从文件或数据流中读取 json 或 xlsx,返回解析出的课表数据
- 也可通过 `load_from_json` 或 `load_from_xlsx` 函数读取 `str` 或 `bytes` 格式的 json 或 xlsx 数据,返回解析出的课表数据
2. 生成日历数据使用 `mkical` 函数,第一个参数是上一步得到的课表数据,第二个参数是 `datetime.date` 类型的开学日期,返回 `icalendar.Calendar` 类型的日历数据,可通过其 `to_ical` 得到 ics 文件的内容。
example:
```python
from cqu_timetable_new import mkical, loadIO_from_xlsx
from datetime import date
xlsx_path = "Downloads/课表.xlsx" # 课表 xlsx 文件路径
ical_path = "课表.ics" # 要保存的日历文件的路径
data = loadIO_from_xlsx(xlsx_path) # 从 xlsx 文件中中加载课表数据
ical = mkical(data, date(2021,3,1)) # 生成日历,2021.3.1(必须是周一)开学
with open(ical_path, 'wb') as file_: # 保存 ics 文件时应用二进制模式打开
file_.write(ical.to_ical()) # 用 to_ical 方法可导出日历数据(类型为 bytes)
```另有 demo 可见于 [cqu\_timetable\_new/\_\_init\_\_.py](cqu_timetable_new/__init__.py) 中的 `main` 函数
## FAQ
Q: 为什么不带有登录功能?
A: 因为我懒。如果你能做出带有登录功能的脚本请随意 pr 。我只信得过可以下载的自动生成的课表。
(主要还是依赖项少一些)Q:为什么导出的日历文件中有原课表中没有的整周课程?
A:有一些课程(尤其是实验课,如果你见到有非实验课的这类课程,欢迎告诉我们)在 `已选课程` 中会显示有整周的时间段,但课表中那个时间段不会显示出来。技术性地说,是该整周时间段在 json 中的 `notArrangeTimeAndRoom`,`wholeWeekOccupy` 两个属性同时为假。我们尚不知道这些时间段的意义(如果你知道,欢迎告诉我们),如果使用 xlsx 来导入,请自行提前将 xlsx 中这些时间段对应的行删去;如果使用 json 来导入,我们默认会按照和原课表相同的处理方式处理(可以给 `loadIO_from_json` 或 `load_from_json` 传 `force_whole_week=True` 参数将这部分时间段也包含进日历里)。
## 姊妹项目
[cm-http-api](https://github.com/weearc/cm-http-api) (开发中)
## LICENSES
AGPLv3