Использовать авторизацию через класс в другом файле для каждого пользователя телеграмм python
есть такой код.
С помощью класса я обращаюсь к апи сайта, первоначально авторизовываясь. Как привязать class к каждому отдельному пользователю тг
import urllib
import hashlib
import requests
def md5(string: str):
return hashlib.md5 (''.join(string).encode ('utf-8')).hexdigest ()
class Manager():
token = ''
cookies = {}
def __init__(self, login : str, password : str, schoolId: int):
self.login = login,
self.password = password,
self.schoolId = schoolId
self.auth(login, password, schoolId)
def send(self, path: str, method: str = 'get', params: dict = {}, contentType: str = 'x-www-form-urlencoded', headers: dict = {}, withToken: bool = True, returnJson: bool = True):
with requests.Session() as session:
cookie: list[str] = []
for name, value in self.cookies.items ():
cookie.append (f'{name}={value}')
# https://developer.mozilla.org/ru/docs/Web/HTTP/Headers
session.headers = {
**headers,
'at': self.token if withToken else None,
'content-type': f'application/{contentType}; charset=UTF-8',
# cookies are required to access certain addresses
'cookie': '; '.join (cookie)
}
if (method == 'get'):
res = session.get (f'https://giseo.rkomi.ru/webapi/{path}', params=params)
else:
res = session.post (f'https://giseo.rkomi.ru/webapi/{path}', data=urllib.parse.urlencode (params) if contentType == 'x-www-form-urlencoded' else json.dumps (params))
if (res.status_code == 200):
# get new cookies from 'set-cookie' header from response and update self.cookies dictionary
# Set-Cookie header: https://developer.mozilla.org/ru/docs/Web/HTTP/Headers/Set-Cookie
self.cookies.update (res.cookies.get_dict ())
return res.json () if returnJson else res
elif (res.status_code == 401):
self.auth ()
return self.send (path, method, params, contentType, headers, withToken, returnJson)
elif (res.status_code == 409):
raise Exception ('Incorrect username or password')
def getSchool(self):
prepareloginform : dict = self.send("prepareloginform", 'get')
print("Города: ")
for state in prepareloginform['provinces']:
print(state['id'], state['name'])
print("----------------------------------------------------------------------")
while True:
pid = input("Выберите ID города >>>")
cn : str = self.send(f"loginform?cid=2&sid=11&pid={pid}&LASTNAME=pid")
if cn['items'] != []:
cn = cn['items'][0]['id']
break
else:
print("Неверный код города")
sft : str = self.send(f"loginform?cid=2&sid=11&pid={pid}&cn={cn}&LASTNAME=cn")
print("Тип ОО:")
for item in sft['items']:
print(item['id'], item['name'])
print("----------------------------------------------------------------------")
while True:
sft = input("Выберите ID Типа ОО >>>")
scid : dict = self.send(f"loginform?cid=2&sid=11&pid={pid}&cn={cn}&sft={sft}&LASTNAME=sft")
if scid['items'] == []:
print("Неверный ID ОО")
else:
break
print("ОО:")
ids = []
for item in scid['items']:
ids.append(str(item['id']))
print(item['id'], item['name'])
while True:
scid : str = input("Выберите ID ОО >>>")
if scid in ids:
return scid
def auth(self, login, password, schoolId = None):
getData : dict = self.send("auth/getdata", "post", headers={}, withToken=False)
self.lt = getData.get('lt', 'None')
salt = getData.get('salt', 'None')
self.ver = getData.get('ver', 'None')
password = md5 (salt + md5 (password))
self.scid = self.getSchool() if schoolId == None else schoolId
params = {
'LoginType': '1',
'scid': self.scid,
'UN': login,
'lt': self.lt,
'pw2': password,
'ver': self.ver
}
login : dict = self.send("login", "post", params=params, headers={"Referer": 'https://giseo.rkomi.ru/about.html'}, withToken=False)
self.loginData = login
self.token = login['at']
def getAnnouncements(self, count : int):
return self.send(f'announcements?take={count}')
def getClassmates(self):
params = {
'classId': self.getClassId(),
'group': 7,
'orgType': 1,
'organizationId': self.scid,
}
return self.send('mail/recipients', 'get', params)
def getYearId(self):
return self.send('years/current')['id']
def getGlobalYearId(self):
return self.send('years/current')['globalYearId']
def getStudentId(self):
return self.loginData['accountInfo']['user']['id']
def getStudentName(self):
return self.loginData['accountInfo']['user']['name']
def getClassId(self):
return self.send('reports/studenttotal')['filterSources'][1]['defaultValue']
def getClassName(self):
return self.send('reports/studenttotal')['filterSources'][1]['items'][0]['title']
def getVer(self):
return self.ver
def getAt(self):
return self.token
def logout(self):
return self.send('auth/logout', 'post', returnJson=False)
student = Manager("login", 'password', 10)
for index, classmates in enumerate(student.getClassmates()):
print(index+1, classmates['name'])
student.logout()