Skip to content

Instantly share code, notes, and snippets.

@icarob-eng
Last active August 22, 2021 03:02
Show Gist options
  • Save icarob-eng/5085f34c9d1aa2b2f98bb659e28b6105 to your computer and use it in GitHub Desktop.
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
"""
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