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).json() 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).json() print(f"获取用户信息, MSG: {response['msg']}, CODE: {response['code']}") print(f"姓名: {response['data']['username']}, 学号: {response['data']['studentNo']}") 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).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).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).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).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()