关于如何实现能够及时获取教务系统更新的成绩
第一步 登录问题
使用浏览器开发者工具可以获取登录接口以及需要的参数
登录接口:https://jwc.htu.edu.cn/dev-api/appapi/applogin
参数:
1 2 3 4 5 6
| login_data = { 'username': 学号, 'password': 加密后的密码, 'code': '', 'appid': None, }
|
如此便可以使用Python构造登录请求
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| cookies = { 'language': 'zh-CN', } headers = { 'Referer': 'https://jwc.htu.edu.cn/app/?code', 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 ' 'Safari/537.36 NetType/WIFI MicroMessenger/7.0.20.1781(0x6700143B) WindowsWechat(0x63090819) ' 'XWEB/8519 Flue ' } login_data = { 'username': username, 'password': key_passward, 'code': '', 'appid': None, } url = 'https://jwc.htu.edu.cn/dev-api/appapi/applogin' login_response = requests.post(url=url, cookies=cookies, headers=headers, json=login_data) print(login_response.json())
|
第二步 密码加密问题
通过js逆向,分析出密码加密是使用了RSA加密方式,以及获取到了publickey,可在Python导入以下库
1 2
| from Crypto.Cipher import PKCS1_v1_5 as Cipher_pksc1_v1_5 from Crypto.PublicKey import RSA
|
写成程序如下:
1 2 3 4 5 6
| def encrpt(passward, publickey): publickey = '-----BEGIN PUBLIC KEY-----\n' + publickey + '\n-----END PUBLIC KEY-----' rsakey = RSA.importKey(publickey) cipher = Cipher_pksc1_v1_5.new(rsakey) cipher_text = base64.b64encode(cipher.encrypt(passward.encode())) return cipher_text.decode()
|
经过验证可用
第三步 获取token
由于在之后获取消息和成绩列表时,均需要使用token令牌获取。
在第一步中登录成功后,返回的信息中就有token,直接拿来用即可。
第四步 接口列表
获取消息:https://jwc.htu.edu.cn/dev-api/appapi/getNotice
具体成绩:https://jwc.htu.edu.cn/dev-api/appapi/Studentcj/detail
全部成绩:https://jwc.htu.edu.cn/dev-api/appapi/Studentcj/data
第五步 推送微信
使用微信关注pushplus( https://www.pushplus.plus/ )后,打开网页登录后,点击( https://www.pushplus.plus/api/open/user/token )获取你的令牌。使用Python推送,即可推送到微信上。
1 2 3 4 5 6 7 8 9 10 11
| import requests import json
def send_message(title, content): token = "你的token" url = "http://www.pushplus.plus/send" data = {"token": token, "title": title, "content": content, "template": 'markdown'} body = json.dumps(data).encode(encoding="utf-8") headers = {"Content-Type": "application/json"} response = requests.post(url, data=body, headers=headers) return response.text
|
第六步 部署Github
在Github新建仓库,上传写好的Python程序,
点击Actions,点击set up a workflow yourself,可以直接复制 https://raw.githubusercontent.com/JiaLiFuNia/HNUScoreChecker/master/.github/workflows/main.yml 我的main.yml文件
执行以下步骤:Actions->CheckScores->Run workflow等待运行结果,出现绿色对勾即位运行成功,程序每半个小时运行一次。