-
Notifications
You must be signed in to change notification settings - Fork 18
/
Copy pathcheckin.py
77 lines (64 loc) · 2.26 KB
/
checkin.py
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
72
73
74
75
76
77
# -*- coding: utf-8 -*-
import sys
import os
import re
import json
import datetime
import time
import requests
def generate_cookies_dict() -> dict:
try:
cookies_dict = {
'eai-sess': os.environ['EAI_SESS'],
'UUkey': os.environ['UUKEY']
}
return cookies_dict
except Exception as ept:
print(f'[ERROR] 运行错误:{ept}')
exit()
def modify_json(res_json: dict) -> dict:
# load default geo_api_info
with open(os.path.join('resource', f'{os.environ["CAMPUS"]}.json'), 'r') as ifile:
res_json['geo_api_info'] = json.load(ifile)
res_json['province'] = res_json['geo_api_info']['addressComponent']['province']
res_json['city'] = res_json['geo_api_info']['addressComponent']['city']
res_json['address'] = res_json['geo_api_info']['formattedAddress']
res_json['area'] = ' '.join([
res_json['province'],
res_json['city'],
res_json['geo_api_info']['addressComponent']['district']
])
res_json['date'] = datetime.datetime.now().strftime("%Y%m%d")
res_json['created'] = int(time.time())
res_json['ismoved'] = 0
return res_json
def checkin(cookies_dict: dict):
# base data
session = requests.session()
url = 'https://wfw.scu.edu.cn/ncov/wap/default/index'
cookiesJar = requests.utils.cookiejar_from_dict(
cookies_dict, cookiejar=None, overwrite=True)
session.cookies = cookiesJar
resp = session.get(url=url)
if resp.status_code != 200:
print('[ERROR]', resp.status_code)
exit()
html = resp.content.decode('utf-8')
pattern = re.compile('var def =(.*);!?')
res = re.findall(pattern, html)
if len(res) == 0:
print('[ERROR] not found')
exit()
res_json = json.loads(res[0])
# load geo info & modify data
modify_json(res_json)
# post checkin data
url = 'https://wfw.scu.edu.cn/ncov/wap/default/save'
resp = session.post(url=url, data=res_json)
if resp.status_code == 200:
resp_json = json.loads(resp.content.decode('utf-8'))
print(f'[INFO] 签到结果:{resp_json["m"]}')
else:
print(f'[ERROR] 签到失败:{resp.status_code} {resp.content.decode("utf-8")}')
if __name__ == '__main__':
checkin(generate_cookies_dict())