forked from 24F5/sport
120 lines
4.8 KiB
Python
120 lines
4.8 KiB
Python
from distutils.command.check import check
|
|
from symbol import continue_stmt
|
|
from time import sleep
|
|
|
|
import requests
|
|
import json
|
|
from datetime import datetime
|
|
import random
|
|
|
|
headers = {
|
|
'Accept-Encoding': 'gzip,compress,br,deflate',
|
|
'Accept': '*/*',
|
|
'Host': 'sport.cqupt.edu.cn',
|
|
'User-Agent': 'Mozilla/5.0 (Linux; Android 15; PJF110 Build/UKQ1.231108.001; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/130.0.6723.103 Mobile Safari/537.36 XWEB/1300409 MMWEBSDK/20240404 MMWEBID/1532 MicroMessenger/8.0.49.2600(0x28003133) WeChat/arm64 Weixin NetType/5G Language/zh_CN ABI/arm64 MiniProgramEnv/android',
|
|
'Referer': 'https://servicewechat.com/wx1680cca9a19ee3c8/48/page-frame.html',
|
|
'Content-Type': 'application/json',
|
|
'charset': 'utf-8',
|
|
}
|
|
|
|
def login(openid, phone_type="PJF110_Android%2015"):
|
|
url = f"https://sport.cqupt.edu.cn/wxapp/wxUnifyId/checkBinding?wxCode=&openid={openid}&phoneType={phone_type}"
|
|
response = requests.get(url, headers=headers,verify=False).json()
|
|
print(response)
|
|
if response['data']['isBind']=='true' :
|
|
print("成功获取数据")
|
|
else:
|
|
raise ValueError("openid错误")
|
|
print(f"正在登入, MSG: {response['msg']}, CODE: {response['code']}")
|
|
print(f"Token: {response['data']['token']}")
|
|
headers['token'] = response['data']['token']
|
|
return response['data']['token']
|
|
|
|
def get_user():
|
|
url = f"https://sport.cqupt.edu.cn/wxapp/wxUnifyId/getUser"
|
|
response = requests.get(url, headers=headers,verify=False).json()
|
|
print(f"获取用户信息, MSG: {response['msg']}, CODE: {response['code']}")
|
|
print(f"姓名: {response['data']['username']}, 学号: {response['data']['studentNo']}")
|
|
while True:
|
|
print(f"是否继续进行跑步打卡(Y/N)")
|
|
user_input=input()
|
|
if user_input == "Y" or user_input == "y":
|
|
break
|
|
elif user_input == "N" or user_input == "n":
|
|
print("bye")
|
|
exit()
|
|
else:
|
|
print("输入无效")
|
|
|
|
|
|
|
|
def start(place_name="太极运动场",place_code="T1005"):
|
|
url = f"https://sport.cqupt.edu.cn/wxapp/sportRecord/sport/start2"
|
|
data = {
|
|
"placeName": place_name,
|
|
"placeCode": place_code
|
|
}
|
|
response = requests.post(url, headers=headers,json=data,verify=False).json()
|
|
print(f"开始打卡, MSG: {response['msg']}, CODE: {response['code']}, DATA: {response['data']}")
|
|
return response['data']
|
|
|
|
def sport_record(record_no):
|
|
url = f"https://sport.cqupt.edu.cn/wxapp/sportRecord/info/{record_no}"
|
|
response = requests.get(url, headers=headers,verify=False).json()
|
|
print(f"获取打卡信息, MSG: {response['msg']}, CODE: {response['code']}")
|
|
print(f"打卡信息: {response['data']['studentName']}, 公里: {response['data']['mileage']}")
|
|
|
|
def post_record_data(record_no,pointlist):
|
|
url = f"https://sport.cqupt.edu.cn/wxapp/sportRecord/point/saveListByNo"
|
|
data = {
|
|
"sportRecordNo": record_no,
|
|
"sportPointList": pointlist
|
|
}
|
|
response = requests.post(url, headers=headers,json=data,verify=False).json()
|
|
print(f"提交打卡信息, MSG: {response['msg']}, CODE: {response['code']}, 路程: {response['data']['mileage']}, 时间: {response['data']['timeConsuming']}")
|
|
if response['code'] == '10200':
|
|
return 0
|
|
else:
|
|
return 1
|
|
|
|
def get_point_from_file():
|
|
with open("points.json", "r", encoding="utf-8") as f:
|
|
points = json.load(f)["data"][::-1]
|
|
return points
|
|
|
|
def end(record_no):
|
|
url = f"https://sport.cqupt.edu.cn/wxapp/sportRecord/sport/end/{record_no}"
|
|
data = {}
|
|
response = requests.post(url, headers=headers,json=data,verify=False).json()
|
|
print(f"结束打卡, MSG: {response['msg']}, CODE: {response['code']}")
|
|
|
|
def main():
|
|
points = get_point_from_file()
|
|
openid = "" or exec('raise ValueError("请填入微信小程序openid")')
|
|
login(openid)
|
|
get_user()
|
|
record_no = start()
|
|
sport_record(record_no)
|
|
start_index = 0
|
|
print(f"总共{len(points)}个点")
|
|
while start_index < len(points):
|
|
pointlist = []
|
|
for i in range(start_index, min(start_index+8, len(points)),1):
|
|
point = {"sportRecordNo": record_no,
|
|
"longitude": points[i]["longitude"][:11]+str(random.randint(0,99999999)),
|
|
"latitude": points[i]["latitude"][:10]+str(random.randint(0,99999999)),
|
|
"placeName": (points[i]["remark"].split("_"))[0],
|
|
"placeCode": (points[i]["remark"].split("_"))[1],
|
|
"collectTime": datetime.now().strftime("%Y-%m-%d %H:%M:%S"),
|
|
"isValid": "1"}
|
|
pointlist.append(point)
|
|
print(f"正在提交第{i}个点")
|
|
sleep(1)
|
|
if post_record_data(record_no, pointlist):
|
|
break
|
|
start_index += 8
|
|
end(record_no)
|
|
main()
|
|
|
|
|