-
Notifications
You must be signed in to change notification settings - Fork 29
/
Copy pathMain.py
87 lines (75 loc) · 3.13 KB
/
Main.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
78
79
80
81
82
83
84
85
86
87
#!/usr/bin/env python3
import requests
import json
import os
import time
import random
import argparse
import sys
from datetime import datetime
class Moguding(object):
def __init__(self, phone: int, password: str, address: str):
self.loginUrl = 'https://api.moguding.net:9000/session/user/v1/login'
self.saveUrl = 'https://api.moguding.net:9000/attendence/clock/v1/save'
self.planUrl = 'https://api.moguding.net:9000/practice/plan/v1/getPlanByStu'
self.phone = phone # 手机号
self.password = password #密码
self.address = address #签到地点名
self.delay = random.randint(0, 60) #延迟时间设置,以s为单位
self.now = now = datetime.now().strftime('%Y-%m-%d %H:%M:%S')
def postUrl(self, url: str, headers: dict, data: dict):
response = requests.post(url=url, headers=headers, data=json.dumps(data))
return response.json()
def getToken(self):
data = {
'password': self.password,
'loginType': 'android',
'uuid': '',
'phone': self.phone
}
response = Moguding.postUrl(self,url=self.loginUrl, headers={'Content-Type': 'application/json; charset=UTF-8',
'rerfer': 'https://api.moguding.net:9000'}, data=data)
return response['data']['token']
def getPlanId(self):
self.headers = {
'Content-Type': 'application/json; charset=UTF-8',
'rerfer': 'https://api.moguding.net:9000',
'Authorization': Moguding.getToken(self),
'roleKey': 'student'
}
response = Moguding.postUrl(self,url=self.planUrl, headers=self.headers, data={'state': ''})
return response['data'][0]['planId']
def stateType(self):
parser = argparse.ArgumentParser(usage='sign <command> [options]', description='command')
parser.add_argument('-s', '--sign', choices=['START', 'END'], help='Sign-in/out action, START is for sign-in, END is for sign-out. \n')
args = parser.parse_args()
if args.sign == None:
parser.print_help()
sys.exit(0)
return args.sign
@property
def actions(self):
if sys.argv[2] == 'START' or sys.argv[2] == 'END':
if sys.argv[2] == 'START':
print(f'{self.now} INFO 上班打卡成功.')
else:
print(f'{self.now} INFO 下班打卡成功.')
def run(self):
data = {
'device': 'Android',
'address': self.address,
'description': '', #签到文本
'country': '',
'province': '',
'city': '',
'city': '',
'longitude': '', #经度
'latitude': '', #纬度
'planId': Moguding.getPlanId(self),
'type': Moguding.stateType(self)
}
time.sleep(self.delay)
response = Moguding.postUrl(self, url=self.saveUrl, headers=self.headers, data=data)
createTime = response['data']['createTime']
response.pop('data')
print(f'{self.now} INFO sleep for {self.delay} seconds ...\n{createTime} INFO {response}')