科技改变生活,懒人重塑世界,这是一段可以让你早睡早起的健康绿色python代码
起因 相信你也和我一样,每日在今日校园这个爱啪啪里准时进行自诊打卡。但是有时候难免会出现忘记打卡的情况,所以这个程序就诞生了
准备工作 你需要有你的Cookie
(下文会说明) 你需要有阿里云或者腾讯云等提供云函数服务的服务商的账号 如果你需要微信实时通知打卡的情况,那么你必须有一个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, refrom pyDes import *import urllib3urllib3.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' } def encrypt (s) : k = des(KEY, CBC, IV, pad=None , padmode=PAD_PKCS5) EncryptStr = k.encrypt(s) return base64.b64encode(EncryptStr).decode() def sendValidCode (cell) : mobile = encrypt(cell) url = 'https://mobile.campushoy.com/v6/auth/authentication/mobile/messageCode' 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' 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' , '' ) 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
:
如果你想要实现微信通知打卡执行的状态,请在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 import requests, jsonimport urllib3urllib3.disable_warnings() session = requests.session() url = 'https://mobile.campushoy.com/v6/epidemic/putEpidemicInfo' get_detail_url ='https://mobile.campushoy.com/v6/epidemic/getEpidemicInfo' 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' , 'contact' : '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' , '' ) 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 )
云函数的设置 这里以阿里云的函数计算为例,其他服务商应该操作类似
打开阿里云的函数计算,找到服务-函数 ,选择新建函数
设置函数名称,运行环境(必须选择python3),函数入口和运行内存
编辑代码
创建触发器
设置触发器
完成效果 当你一切都准备好了以后,你只需要每天关注是否有打卡失败的消息发送给你,每当出现这种情况,一般都是Cookie
已经失效了,你需要去云函数里更新你的Cookie
设置
最后,好好享受属于你的早晨吧!
结语 相信你也感觉到了使用起来并不简单,还需要自己抓Cookie
这种操作。不过不用担心,强迫症使我不会允许这种问题一直存在,目前登录功能和签到功能正在开发中,相信不久就能和大家见面了!更新完成,不用抓包了
更新 2020.9.26
今日校园登陆机制改变,请自行抓包分析!