Last active
August 22, 2021 03:02
-
-
Save icarob-eng/5085f34c9d1aa2b2f98bb659e28b6105 to your computer and use it in GitHub Desktop.
Pequeno Script para abrir aulas no navegador conforme o horário. Ver docstrigns
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
""" | |
abrir aulas | |
Checa o horário das aulas até a última aula do dia. | |
Os horários devem ficar disponíveis num json com a seguinte estrutura: | |
[dicionário_de_links, horários_inícios, horários_fins, dicionário_agenda] | |
Onde: | |
dicionário_de_links deve ter o nome de cada aula e seu respetivo link. | |
Ex: 'biologia': 'meet.google.com', | |
horários_inícios deve conter o horário de inicio de cada horário da grade. | |
Ex: [9h00, 10h00, 11h00] são horários de uma grade com aulas começando de 9h, 10h e 11h. | |
horários_fins deve conter o horário que cada aula acaba. O script não sai da a aula, mas não abre tarde demais. | |
Exemplos similares ao supracitado. | |
Tenha atenção para o fato de que é necessário colocar as horas nesse formato (ex: 9h00). | |
dicionário_agenda deve conter a agenda de cada dia, começando com a segunda como dia 0; | |
Ex: uma grade de horários de uma quarta seria: "2": [["biologia", 1, 1], ["história", 2, 3]] | |
Usando a grade de horários do exemplo a cima, biologia começaria as 10h e história as 11h | |
""" | |
__author__ = 'Ícaro Bruno' | |
import json | |
from datetime import datetime, date, timezone, timedelta | |
import time | |
import webbrowser | |
print('|\nInicializando rotina de aulas.\n|') | |
fuso = -3 # fuso horário de -3h de UTC | |
try: | |
with open('dados.json', 'r') as a: | |
links, inicios, fins, agenda = json.load(a) | |
except FileNotFoundError: | |
raise FileNotFoundError('Você não adicionou o arquivo dados.json na mesma pasta que este script :/') | |
dia = date.weekday(datetime.now(tz=timezone(timedelta(hours=fuso)))) # dia da semana com segunda = 0 | |
aulas = agenda[str(dia)] # retorna a agenda do dia | |
ante = 2 # tempo de antecipação de aulas em minutos | |
def passou(x, y): | |
# retorna True se o horário de x for maior ou igual ao horário de y | |
# sim, eu sei que datetime tem uma função para isso | |
xh, xm = x.split('h') | |
yh, ym = y.split('h') | |
xh = int(xh) | |
xm = int(xm) + ante # antecipa o tempo em minutos | |
yh = int(yh) | |
ym = int(ym) | |
if xh > yh: | |
return True | |
elif xh == yh and xm >= ym: | |
return True | |
else: | |
return False | |
def hora_atual(): | |
data = datetime.now(tz=timezone(timedelta(hours=fuso))) | |
hora = str(data.hour) | |
minutos = str(data.minute) | |
if len(minutos) == 1: # esse pequeno detalhe serve para que suporte-se o formato 9h00 ou 9h05 | |
minutos = '0' + minutos | |
return f'{hora}h{minutos}' | |
aberta = '' # aula mais recente a ser aberta pelo programa | |
finalizada = '' # aula mais recente a ter acabado | |
while __name__ == '__main__': | |
if dia == 5: | |
print('Hoje é sábado, não tem aula. Bom final de semana! :)') | |
break | |
elif dia == 6: | |
print('Hoje é domingo. Só tem aula amanhã!') | |
break | |
atual = '' # aula do horário | |
for aula in aulas: | |
if passou(hora_atual(), inicios[aula[1]]): # checa se já passou do horário de começo de cada aula | |
atual = aula[0] # se passou, a aula atual vai se a última aula passada | |
if passou(hora_atual(), fins[aula[2]]): | |
finalizada = aula[0] # já isso aqui garante que não se aberta uma sala após o horário | |
if aberta != atual and finalizada != atual: | |
# se a aula aberta não for a aula atual, nem tiver acabado, abre-se a aula | |
link = links[atual] | |
print(f'São {hora_atual()}, a aula {atual} está acontecendo. Abrindo {link} no browser. \n|') | |
aberta = atual | |
webbrowser.open(link) | |
if atual == aulas[-1][0]: | |
print('Última aula do dia, encerrando programa.') | |
if dia == 0: | |
print('Lhe desejo uma ótima semana!') | |
elif dia == 4: | |
print('Aproveite o final de semana :)') | |
else: | |
print('Tenha um bom dia!') | |
break # se a aula atual for a última do dia, o programa se encerra | |
time.sleep(60) # repete o loop atualizando o horário a cada minuto | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment