From f1a3dd66851c6e87bf1e3d2dfa43d8fc06773d6f Mon Sep 17 00:00:00 2001 From: manrodrigues Date: Thu, 28 Dec 2023 19:14:52 -0300 Subject: [PATCH 1/3] set files --- .gitignore | 4 ++++ project_scripts/auth.py | 0 project_scripts/configs.py | 28 ++++++++++++++++++++++++++++ project_scripts/main.py | 0 project_scripts/requirements.txt | 0 5 files changed, 32 insertions(+) create mode 100644 project_scripts/auth.py create mode 100644 project_scripts/configs.py create mode 100644 project_scripts/main.py create mode 100644 project_scripts/requirements.txt diff --git a/.gitignore b/.gitignore index 68bc17f..3a11ef1 100644 --- a/.gitignore +++ b/.gitignore @@ -127,6 +127,7 @@ venv/ ENV/ env.bak/ venv.bak/ +venv* # Spyder project settings .spyderproject @@ -158,3 +159,6 @@ cython_debug/ # and can be added to the global gitignore or merged into this file. For a more nuclear # option (not recommended) you can uncomment the following to ignore the entire idea folder. #.idea/ + + +*credentials.ini \ No newline at end of file diff --git a/project_scripts/auth.py b/project_scripts/auth.py new file mode 100644 index 0000000..e69de29 diff --git a/project_scripts/configs.py b/project_scripts/configs.py new file mode 100644 index 0000000..4748244 --- /dev/null +++ b/project_scripts/configs.py @@ -0,0 +1,28 @@ +import configparser + + +class ProjectConfigs: + _configs = None + + def __init__(self): + raise RuntimeError('Call instance() instead') + + @classmethod + def configs(cls): + if cls._configs is None: + cls._configs = _read_configs() + return cls._configs + + +def _read_configs(): + parser = configparser.ConfigParser() + parser.read('./credentials.ini') + project_configs = parser['credentials'] + + project_configs['email'] = project_configs.get('email') + project_configs['password'] = project_configs.get('password') + + return project_configs + + +configs = ProjectConfigs.configs() diff --git a/project_scripts/main.py b/project_scripts/main.py new file mode 100644 index 0000000..e69de29 diff --git a/project_scripts/requirements.txt b/project_scripts/requirements.txt new file mode 100644 index 0000000..e69de29 From 5f395fc5da0e5cfb6a1087fb418220e01b4777df Mon Sep 17 00:00:00 2001 From: manrodrigues Date: Thu, 28 Dec 2023 21:18:14 -0300 Subject: [PATCH 2/3] get availability --- project_scripts/auth.py | 0 project_scripts/configs.py | 4 +++- project_scripts/main.py | 16 ++++++++++++++++ project_scripts/requirements.txt | 2 ++ 4 files changed, 21 insertions(+), 1 deletion(-) delete mode 100644 project_scripts/auth.py diff --git a/project_scripts/auth.py b/project_scripts/auth.py deleted file mode 100644 index e69de29..0000000 diff --git a/project_scripts/configs.py b/project_scripts/configs.py index 4748244..cf276bf 100644 --- a/project_scripts/configs.py +++ b/project_scripts/configs.py @@ -20,7 +20,9 @@ def _read_configs(): project_configs = parser['credentials'] project_configs['email'] = project_configs.get('email') - project_configs['password'] = project_configs.get('password') + project_configs['nome'] = project_configs.get('nome') + project_configs['numero_matricula'] = project_configs.get('numero_matricula') + project_configs['credencial_id'] = project_configs.get('credencial_id') return project_configs diff --git a/project_scripts/main.py b/project_scripts/main.py index e69de29..02fd211 100644 --- a/project_scripts/main.py +++ b/project_scripts/main.py @@ -0,0 +1,16 @@ +from configs import ProjectConfigs +from utils import * + +configs = ProjectConfigs.configs() + +session, auth = get_auth(configs['credencial_id'], configs['nome'], configs['email'], configs['numero_matricula']) + +session, usuario = get_usuario(auth, session) + +session, temporadas = get_temporadas(session) + +session, vagas_compra, disopnivel_compra = check_disponibilidade(temporadas, session) + +session, vagas_sorteio, disopnivel_venda = check_disponibilidade(temporadas, session, tipo="SORTEIO") + +print(disopnivel_compra, disopnivel_venda) diff --git a/project_scripts/requirements.txt b/project_scripts/requirements.txt index e69de29..71d7003 100644 --- a/project_scripts/requirements.txt +++ b/project_scripts/requirements.txt @@ -0,0 +1,2 @@ +configparser==6.0.0 +requests==2.31.0 \ No newline at end of file From 4d2e5240c3d32bd20ac47ccf93283395de94f263 Mon Sep 17 00:00:00 2001 From: manrodrigues Date: Thu, 28 Dec 2023 21:18:48 -0300 Subject: [PATCH 3/3] add utils --- project_scripts/utils.py | 52 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 project_scripts/utils.py diff --git a/project_scripts/utils.py b/project_scripts/utils.py new file mode 100644 index 0000000..9057ef1 --- /dev/null +++ b/project_scripts/utils.py @@ -0,0 +1,52 @@ +import requests + +auth_endpoint = "https://reservabertioga.sescsp.org.br/bertioga-web/usuario/meu-perfil/authenticate" +base_availability_endpoint = "https://reservabertioga.sescsp.org.br/bertioga-web/periodo/ano/" +usuario_endpoint = "https://reservabertioga.sescsp.org.br/bertioga-web/usuario" +temporadas_endpoint = "https://reservabertioga.sescsp.org.br/bertioga-web/temporadas" + + +def get_auth(credencial_id, nome, email, numero_matricula, session=None): + payload = { + 'id': credencial_id, + 'nome': nome, + 'email': email, + 'numeroMatricula': numero_matricula + } + + if session is None: + s = requests.Session() + else: + s = session + auth = s.post(auth_endpoint, json=payload) + assert auth.status_code == 200 + return s, auth.json() + + +def get_usuario(payload, s): + usuario = s.get(usuario_endpoint, json=payload) + assert usuario.status_code == 200 + return s, usuario.json() + + +def get_temporadas(s): + temporadas = s.get(temporadas_endpoint) + assert temporadas.status_code == 200 + return s, temporadas.json() + + +def check_disponibilidade(temporadas, s, tipo="COMPRA"): + vagas = list() + disponivel = False + for ano in temporadas.keys(): + print(ano) + endpoint_ano = f"{base_availability_endpoint}{ano}/mes/" + for mes in temporadas[ano]: + endpoint_mes = f"{endpoint_ano}{mes}?tipo={tipo}" + print(f"{endpoint_mes}") + disponibilidade = s.get(endpoint_mes) + assert disponibilidade.status_code == 200 + if len(disponibilidade.json()) > 0: + disponivel = True + vagas.append(disponibilidade.json()) + return s, vagas, disponivel