HUST校园卡消费年终总结

本文最后更新于:2024年12月29日 下午

HUST校园卡消费年终总结

概述

HUST校园卡消费年终总结是一个基于Python的脚本,旨在帮助用户分析和汇总其在HUST(华中科技大学)校园卡上的消费记录。

本项目参考THU-Annual-EatXJTU-Annual-Eat,感谢原作者的贡献。

使用方法

环境准备

  • Python环境(建议使用Python 3.6及以上版本),在终端安装如下库。

    1
    pip install requests matplotlib

获取账号和JSESSIONID

登录企业微信-华中大微校园

在校园卡账户信息获取校园卡账号account

校园卡账号

使用浏览器打开进入流水查询在网址处获取JSESSIONID(过一段时间会发生变化)

JSESSIONID

运行

1
python main.py

输入accountJSESSIONID

等待绘制结果

总结

项目仅简单实现了可视化年终消费情况的功能,但可扩展性强。网络请求返回结果还可以用于其他统计分析。感兴趣的同学可以扩展此项目的功能。

源码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
import requests
import json
from collections import defaultdict
import matplotlib.pyplot as plt

plt.rcParams["font.sans-serif"]=["SimHei"] #设置字体
plt.rcParams["axes.unicode_minus"]=False #该语句解决图像中的“-”负号的乱码问题

account = input("请输入你的账户号(学号/工号):")
JSESSIONID = input("请输入你的JSESSIONID:")

url_template = "http://ecard.m.hust.edu.cn/wechat-web/QueryController/select.html?jsoncallback=jQuery21402777983544074327_1735390337447&account={account}&curpage={page}&dateStatus={date}&typeStatus=2&_=1735390337442"
cookie = {
"JSESSIONID": JSESSIONID,
}
data_list = []

def get_data(account, date, url_template, cookie):
global data_list
# 获取第一页数据
curpage = 1
response = requests.get(url_template.format(account = account, page=curpage,date = date), cookies=cookie)
response_text = response.text.strip("callJson(").rstrip(")")
data = json.loads(response_text)

# 检查是否有数据
if data['retcode'] == '0':
while True:
# 提取当前页的数据
for item in data['consume']:
data_list.append({
'mercname': item['mercname'],
'tranamt': item['tranamt']
})

# 检查是否有下一页
if int(data['nextpage']) <= curpage: # 如果下一页编号小于等于当前页,则结束循环
break
curpage = int(data['nextpage']) # 更新当前页编号
response = requests.get(url_template.format(account=account, page=curpage, date = date), cookies=cookie)
response_text = response.text.strip("callJson(").rstrip(")")
data = json.loads(response_text)

# 检查返回状态
if data['retcode'] != '0':
print("Failed to retrieve data:", data['errmsg'])
break

# 2024年年终总结
date_list = ['2024-01-01','2023-02-01','2024-03-01','2024-04-01','2024-05-01','2024-06-01','2024-07-01','2024-08-01','2024-09-01','2024-10-01','2024-11-01','2024-12-01']

for date in date_list:
get_data(account, date, url_template, cookie)

# 使用defaultdict来存储相同mercname的tranamt总和
tranamt_sum = defaultdict(float)

for item in data_list:
tranamt_sum[item['mercname']] += int(item['tranamt'])/100

sorted_tranamt = sorted(tranamt_sum.items(), key=lambda x: x[1], reverse=True)
mercnames, amounts = zip(*sorted_tranamt)

plt.figure(figsize=(16, 9))
plt.bar(mercnames, amounts, color='skyblue')
plt.xlabel('商户名称')
plt.ylabel('总交易金额')
plt.title('各商户总交易金额')
plt.xticks(rotation=45, ha='right')
plt.tight_layout()
plt.show()

HUST校园卡消费年终总结
https://furthur509.github.io/2024/12/28/HUST-Annual-Eat/
作者
Yang Mingxin
发布于
2024年12月28日
许可协议