0%

Python+云函数实现今日校园每日自诊打卡

科技改变生活,懒人重塑世界,这是一段可以让你早睡早起的健康绿色python代码

起因

相信你也和我一样,每日在今日校园这个爱啪啪里准时进行自诊打卡。但是有时候难免会出现忘记打卡的情况,所以这个程序就诞生了

准备工作

  1. 你需要有你的Cookie(下文会说明)
  2. 你需要有阿里云或者腾讯云等提供云函数服务的服务商的账号
  3. 如果你需要微信实时通知打卡的情况,那么你必须有一个Server酱的SCKEY

获取Cookie

那么程序怎么知道是你在打卡而不是郭涛在打卡呢?

是的,服务器需要Cookie进行识别你的身份,就像我们每个人的身份证号码都不相同,我们的Cookie也是不同的。当然,我们并不是需要用到所有的Cookie,仅仅需要用到其中的sessionToken就能使用了。下面介绍获取Cookie的三种方法

方法一 抓包获取

使用抓包软件即可获取登录的Cookie

方法二 通过脚本

运行以下代码获得sessionToken数据,但是会挤掉你在手机上的登录:

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
import base64, json, requests, re
from pyDes import *
import urllib3
urllib3.disable_warnings()

KEY = "ST83=@XV"
IV = b"\x01\x02\x03\x04\x05\x06\x07\x08"
session = requests.session()
session.headers = {
'Content-Type': 'application/json; charset=UTF-8',
'User-Agent': 'Mozilla/5.0 (Linux; Android 8.1.0; 16th Build/OPM1.171019.026; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/65.0.3325.110 Mobile Safari/537.36 okhttp/3.12.4',
'CpdailyInfo': 'XvWN4SWqyX648L13hW5koOHt5AfBN6jFTi4zR23WludYuPZfzB8fDcBpRB80 G2iWtG0fERtQ4X9JeLE+FgLD12tqKe6S+8Si5eM2MJ84epV/uHWh0tWeuEIz KKrLHH1I3GWM8/lhSRjQE4DL/m2G++NY/Bf8QiB3IFf0NmdzdWBFBoh4+Qs1 wDIwt38Qm/8smWF4JVDCrFay2Cz7K1F2IX90L9RCuoQO'
}


# des加密
def encrypt(s):
k = des(KEY, CBC, IV, pad=None, padmode=PAD_PKCS5)
EncryptStr = k.encrypt(s)
return base64.b64encode(EncryptStr).decode() # 转base64编码返回


def sendValidCode(cell):
mobile = encrypt(cell)
url = 'https://mobile.campushoy.com/v6/auth/authentication/mobile/messageCode' # POST
data = json.dumps({
'mobile': mobile
})
res = session.post(url=url, data=data, verify=False).json()
print(res)
if res.get('errCode') == 2011:
print(res.get('errMsg'))
return 2
elif res.get('errCode') == 0:
print('验证码发送成功!请查收...')
return 1


def loginByPhone(cell, code):
url = 'https://mobile.campushoy.com/v6/auth/authentication/mobileLogin' # POST
data = json.dumps({
'loginId': cell,
'loginToken': code
})
res = session.post(url=url, data=data, verify=False)
jdata = res.json().get('data')
personId = jdata.get('personId', '')
userId = jdata.get('userId', '')
# 学号
openId = jdata.get('openId', '')
# 姓名
name = jdata.get('name', '')
tenantId = jdata.get('tenantId', '')
tgc = jdata.get('tgc', '')
# 主要Cookie参数
sessionToken = jdata.get('sessionToken', '')
print("你的token:")
print("sessionToken: %s" % sessionToken)
print("请将以上token内容填入Cookie!")


if __name__ =="__main__":
cell = input("==>请输入手机号: ")
if sendValidCode(cell) != 2:
code = input("==>请输入验证码: ")
loginByPhone(cell, code)

方法三 通过配置文件(推荐)

使用这个方法是你的手机必须已经Root

找到文件/data/user/0/com.wisedu.cpdaily/shared_prefs/preference_configs.xml打开,找到里面的sessionToken项,它的值即为Cookie中必须的sessionToken

Python脚本

自行替换脚本中的Cookie

cookie

如果你想要实现微信通知打卡执行的状态,请在requests.get('https://sc.ftqq.com/你server酱的SCKEY.send?text=今日校园自诊打卡&desp='+msg, verify=False)里相应位置填写你的SCKEY

如果不需要或者完全不知道怎样弄,那么你完全可以大胆的删除这一行代码,而程序不会出现任何逻辑上的问题

对于需要上传的数据,它们分别为:

fever:是否有呼吸道感染症状,如:1(无)

contact:是否与敏感/疑似/确诊人员接触过,如:0(否)

province:你所在的省份,如:四川省

city:你所在的城市,如:南充市

prefecture:你所在的县市区,如:仪陇县

请确保以上数据和你以前打卡的数据一致

源码

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
# -*- coding: utf-8 -*-
import requests, json
import urllib3
urllib3.disable_warnings()

session = requests.session()
# 打卡
url = 'https://mobile.campushoy.com/v6/epidemic/putEpidemicInfo' # POST OPTION
# 获取打卡详情
get_detail_url ='https://mobile.campushoy.com/v6/epidemic/getEpidemicInfo' # GET
headers = {
'Content-Type': 'application/json;charset=UTF-8',
'User-Agent': 'Mozilla/5.0 (Linux; Android 8.1.0; 16th Build/OPM1.171019.026; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/65.0.3325.110 Mobile Safari/537.36 yiban/8.1.15 cpdaily/8.1.15 wisedu/8.1.15',
'Cookie': 'sessionToken=此处填写你的sessionToken'
}
session.headers.update(headers)

def daka():
data = json.dumps({
'fever': '1', # 是否有呼吸道感染症状:1无;
'contact': '0', # 是否与敏感/疑似/确诊人员接触过:0否;
'province': '四川省', # 你所在的省份
'city': '南充市', # 你所在的城市
'prefecture': '仪陇县' # 你所在的县市区
})

res = session.post(url=url, data = data, verify=False)
status = res.json().get('errMsg')
return status

def getEpidemicInfo():
res = session.get(url=get_detail_url, verify=False)
info = res.json().get('data', '')
# print(info)
msg = res.json().get('errMsg', 'failed')
updateTime = info.get('updateTime', '')
return updateTime

def start():
status = daka()
time = getEpidemicInfo()
msg = status + '(打卡时间:' + time + ')'
print(msg)
requests.get('https://sc.ftqq.com/你server酱的SCKEY.send?text=今日校园自诊打卡&desp='+msg, verify=False)

云函数的设置

这里以阿里云的函数计算为例,其他服务商应该操作类似

  1. 打开阿里云的函数计算,找到服务-函数,选择新建函数

    daka云函数1

  2. 设置函数名称,运行环境(必须选择python3),函数入口和运行内存

    daka云函数2

  3. 编辑代码

    daka云函数3

  4. 创建触发器

    daka云函数4

  5. 设置触发器

    daka云函数5

完成效果

当你一切都准备好了以后,你只需要每天关注是否有打卡失败的消息发送给你,每当出现这种情况,一般都是Cookie已经失效了,你需要去云函数里更新你的Cookie设置

vx1

vx1

最后,好好享受属于你的早晨吧!

结语

相信你也感觉到了使用起来并不简单,还需要自己抓Cookie这种操作。不过不用担心,强迫症使我不会允许这种问题一直存在,目前登录功能和签到功能正在开发中,相信不久就能和大家见面了!更新完成,不用抓包了

更新

  • 2020.9.26

    今日校园登陆机制改变,请自行抓包分析!

您的支持将鼓励我的创作!

欢迎关注我的其它发布渠道