Intro

前两天受清华的食堂总结项目( https://github.com/leverimmy/THU-Annual-Eat )的启发,写了个思源码的版本:

https://github.com/Milvoid/SJTU-Annual-Eat

快速开始

macOS 与 Windows 均可使用

前往 Release 页面 下载对应系统的压缩包

解压后得到 Get-Eat-DataAnnual-Report.py

首先运行 Get-Eat-Data ,按照提示获取数据后得到 eat-data.json

之后再运行 Annual-Report.py 即可生成年度报告啦

示例

运行 Annual-Report.py 之后,你就可以看到今年的一些 Highlight 以及相关统计图,譬如:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
思源码年度消费报告:

2024年,你在交大共消费了 1885.17 元。

01月01日17点43分,你在 闵行三餐外婆桥 开启了第一笔在交大的消费,花了 17.0 元。
在交大的每一年都要有一个美好的开始。

今年 02月20日11点56分,你在交大的 教材科 单笔最多消费了 41.5 元。
哇,真是胃口大开的一顿!

你在 闵行三餐学生餐厅 消费最多,38 次消费里,一共花了 493.38 元。
想来这里一定有你钟爱的菜品。

你今年一共在交大吃了 0 顿早餐,62 顿午餐,55 顿晚餐。
在交大的每一顿都要好好吃饭~

05月08日09点57分 是你今年最早的一次用餐,你一早就在 沪FP2215 吃了 6.0 元。

你在 10 月消费最多,一共花了 308.2 元。
来看看你的月份分布图

不管怎样,吃饭要紧
2025年也要记得好好吃饭喔(⌒▽⌒)☆

example

Notes

Get-Eat-Data.exe 可直接运行;如果需要运行 Get-Eat-Data.py,请参考 SJTU 开发者文档 填写 client_idclient_secret

直接把 client_idclient_secret 明文写入 Get-Eat-Data.py 似乎不太好,还是打包起来吧 虽然从 pyinstaller 打包的程序里面扒出来好像不是特别难

特别感谢

@boar 大佬提供的帮助

帮忙修复程序的
UNIkeEN (Yujie Sun)
FlowerBlackG (GuanTouYu)
1357310795
Stype0912 (Tang)
RafaDD (Jianrong Ding)
havedifficultyinfindingnames

另外 iOS 版交课表也更新思源码年度总结功能啦


常见问题及解决

  • Annual-Report.py 闪了一下就没了

    可能是所需的库没有安装,可以用文本编辑器打开文件,之后查看最上方需要导入的模块是否有缺失

  • Access Token 获取失败

    可以确认一下自己没有使用代理,sjtu服务器好像会somehow因为代理拒绝访问

  • 运行 Get-Eat-Data 后仍然找不到 json 文件

    可以在终端里先 cd 到 json 文件所在路径,之后从终端运行 Annual-Report.py;或者直接把 Annual-Report.py 的文件路径改成绝对路径

  • 运行到早中晚餐之后报错

    应该是统计最早一餐部分的兼容性问题,可以手动注释掉该部分,或者下载新的 Release 这部分失败之后自动跳过

    代码有点bug,按日期分组,找到每一天中最早的时间 那边会错误,不知道是不是 pandas 版本问题

    也可以在“按日期分组,找到每一天中最早的时间”的时候会有 reduction operation 'argmin' not allowed for this dtype 的问题,重装了几个版本的pandas也没用,最后在函数load_eat_data的最后加了一行

    1
    df['time_in_seconds'] = df['payTime'].dt.hour * 3600 + df['payTime'].dt.minute * 60 + df['payTime'].dt.second

    然后把“按日期分组,找到每一天中最早的时间”下面两行中的'time'都改成'time_in_seconds'就行了。